<?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>232832</bug_id>
          
          <creation_ts>2021-11-08 12:24:49 -0800</creation_ts>
          <short_desc>[GPU Process] [Filters 8/23] Move the software FilterEffect functions to separate applier classes</short_desc>
          <delta_ts>2021-11-29 21:37:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>231253</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>heycam</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1812758</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-08 12:24:49 -0800</bug_when>
    <thetext>This will simplify the interface of the FilterEffect superclasses and separate the implementation of applying the FilterEffect from its data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1815174</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-15 12:25:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/85424121&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816687</commentid>
    <comment_count>2</comment_count>
      <attachid>444754</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-18 16:24:57 -0800</bug_when>
    <thetext>Created attachment 444754
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816726</commentid>
    <comment_count>3</comment_count>
      <attachid>444771</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-18 19:02:07 -0800</bug_when>
    <thetext>Created attachment 444771
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816732</commentid>
    <comment_count>4</comment_count>
      <attachid>444774</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-18 19:52:29 -0800</bug_when>
    <thetext>Created attachment 444774
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816738</commentid>
    <comment_count>5</comment_count>
      <attachid>444778</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-18 20:56:08 -0800</bug_when>
    <thetext>Created attachment 444778
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817240</commentid>
    <comment_count>6</comment_count>
      <attachid>444778</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-11-21 23:18:32 -0800</bug_when>
    <thetext>Comment on attachment 444778
Patch

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

&gt; Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp:138
&gt; +static void effectApplyAccelerated(Uint8ClampedArray&amp; pixelArray, const Vector&lt;float&gt;&amp; values, float components[9], IntSize bufferSize, ColorMatrixType matrixType)

Pre-existing, but the function name would read better as &quot;applyEffectAccelerated&quot;.

&gt; Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp:242
&gt; +static void effectType(Uint8ClampedArray&amp; pixelArray, const Vector&lt;float&gt;&amp; values, float components[9], ColorMatrixType matrixType)

And maybe this can be &quot;applyAffectUnaccelerated&quot;?

&gt; Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp:354
&gt; +    FEColorMatrixSoftware::applyPlatform(pixelArray, values, components, pixelArrayDimensions, m_type);

I know this is pre-existing too, but I find it weird how we always pass in both values and components, but only use one or the other depending on the feColorMatrix type, and when values is used, components remains uninitialized. Perhaps calculateSaturateComponents/calculateHueRotateComponents should write their output into values, and applyPlatform and its callees can assert the length of values it&apos;s expecting depending on the type?

&gt; Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp:125
&gt; +    ASSERT(static_cast&lt;size_t&gt;(function.type) &lt; WTF_ARRAY_LENGTH(callEffect));

Why drop this down from ASSERT_WITH_SECURITY_IMPLICATION? Seems important to avoid calling through random pointers after the end of the array.

&gt; Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp:214
&gt; +static ALWAYS_INLINE void setInteriorPixels(PaintingData&amp; paintingData, int clipRight, int clipBottom, int yStart, int yEnd)

(It seems like most of the functions that take a PaintingData&amp; could take a const reference.)

&gt; Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp:223
&gt;      // m_divisor cannot be 0, SVGFEConvolveMatrixElement ensures this

s/m_divisor/divisor/

&gt; Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp:-284
&gt; -template&lt;bool preserveAlphaValues&gt;

I assume untemplatizing these functions doesn&apos;t impact performance?

&gt; Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp:395
&gt; +    static constexpr int s_minimalRectDimension = (100 * 100); // Empirical data limit for parallel jobs

I think per https://webkit.org/code-style-guidelines/ the &quot;s_&quot; prefix is only for static member variables.

&gt; Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp:471
&gt; +    static constexpr int s_minimalRectDimension = 100 * 100; // Empirical data limit for parallel jobs

Same here, no &quot;s_&quot;.

&gt; Source/WebCore/platform/graphics/filters/FELighting.cpp:420
&gt; +    static constexpr int s_minimalRectDimension = 100 * 100; // Empirical data limit for parallel jobs

And here.

&gt; Source/WebCore/platform/graphics/filters/FELighting.cpp:576
&gt; +    data.widthDecreasedByOne = size.width() - 1;
&gt; +    data.heightDecreasedByOne = size.height() - 1;

I&apos;d probably call these &quot;widthMinusOne&quot; and &quot;heightMinusOne&quot;.

But I wonder if it really helps to store these values with one already subtracted. I don&apos;t think it makes the FELighting::drawLighting code easier to read.

&gt; Source/WebCore/platform/graphics/filters/FEMorphology.cpp:149
&gt; +static void platofrmApplyGeneric(const PaintingData&amp; paintingData, int startY, int endY)

&quot;platformApplyGeneric&quot;

&gt; Source/WebCore/platform/graphics/filters/FEMorphology.cpp:191
&gt; +static void platofrmApplyWorker(PlatformApplyParameters* param)

&quot;platformApplyWorker&quot;

&gt; Source/WebCore/platform/graphics/filters/FEMorphology.cpp:196
&gt; +static void platofrmApply(const PaintingData&amp; paintingData)

&quot;platformApply&quot;

&gt; Source/WebCore/platform/graphics/filters/FETurbulence.cpp:118
&gt; +static const int s_perlinNoise = 4096;
&gt; +static const long s_randMaximum = 2147483647; // 2**31 - 1
&gt; +static const int s_randAmplitude = 16807; // 7**5; primitive root of m
&gt; +static const int s_randQ = 127773; // m / a
&gt; +static const int s_randR = 2836; // m % a

Pre-existing but I don&apos;t think these should have the &quot;s_&quot; prefix either.

&gt; Source/WebCore/platform/graphics/filters/FETurbulence.cpp:121
&gt; +static const int s_blockSize = 256;
&gt; +static const int s_blockMask = s_blockSize - 1;

And these ones that moved shouldn&apos;t either.

&gt; Source/WebCore/platform/graphics/filters/FETurbulence.cpp:136
&gt; +    inline long random()

inline is redundant here

&gt; Source/WebCore/platform/graphics/filters/FETurbulence.cpp:417
&gt; +static void platofrmApplyGeneric(const IntRect&amp; filterRegion, const FloatSize&amp; filterScale, Uint8ClampedArray&amp; pixelArray, const PaintingData&amp; paintingData, StitchData stitchData, int startY, int endY)

&quot;platformApplyGeneric&quot;

&gt; Source/WebCore/platform/graphics/filters/FETurbulence.cpp:438
&gt; +static void platofrmApplyWorker(PlatformApplyParameters* parameters)

&quot;platformApplyWorker&quot;

&gt; Source/WebCore/platform/graphics/filters/FETurbulence.cpp:443
&gt; +static void platofrmApply(const IntRect&amp; filterRegion, const FloatSize&amp; filterScale, Uint8ClampedArray&amp; pixelArray, StitchData&amp; stitchData, PaintingData&amp; paintingData)

&quot;platformApply&quot;

And can stitchData and paintingData be const references?

&gt; Source/WebCore/platform/graphics/filters/FETurbulence.cpp:448
&gt; +    static const int s_minimalRectDimension = (100 * 100); // Empirical data limit for parallel jobs.

And here.

&gt; Source/WebCore/platform/graphics/filters/PointLightSource.h:55
&gt; +    mutable FloatPoint3D m_bufferPosition;

Should m_bufferPosition (and the one in SpotSlightSource) be moved to LightSource::PaintingData?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817388</commentid>
    <comment_count>7</comment_count>
      <attachid>444778</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-22 21:42:19 -0800</bug_when>
    <thetext>Comment on attachment 444778
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp:138
&gt;&gt; +static void effectApplyAccelerated(Uint8ClampedArray&amp; pixelArray, const Vector&lt;float&gt;&amp; values, float components[9], IntSize bufferSize, ColorMatrixType matrixType)
&gt; 
&gt; Pre-existing, but the function name would read better as &quot;applyEffectAccelerated&quot;.

It was renamed applyPlatformAccelerated().

&gt;&gt; Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp:242
&gt;&gt; +static void effectType(Uint8ClampedArray&amp; pixelArray, const Vector&lt;float&gt;&amp; values, float components[9], ColorMatrixType matrixType)
&gt; 
&gt; And maybe this can be &quot;applyAffectUnaccelerated&quot;?

It was renamed applyPlatformUnaccelerated().

&gt;&gt; Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp:354
&gt;&gt; +    FEColorMatrixSoftware::applyPlatform(pixelArray, values, components, pixelArrayDimensions, m_type);
&gt; 
&gt; I know this is pre-existing too, but I find it weird how we always pass in both values and components, but only use one or the other depending on the feColorMatrix type, and when values is used, components remains uninitialized. Perhaps calculateSaturateComponents/calculateHueRotateComponents should write their output into values, and applyPlatform and its callees can assert the length of values it&apos;s expecting depending on the type?

I changed the way we apply FilterEffects. I added the class FEColorMatrixSoftwareApplier which manages the calculation of the components.

&gt;&gt; Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp:125
&gt;&gt; +    ASSERT(static_cast&lt;size_t&gt;(function.type) &lt; WTF_ARRAY_LENGTH(callEffect));
&gt; 
&gt; Why drop this down from ASSERT_WITH_SECURITY_IMPLICATION? Seems important to avoid calling through random pointers after the end of the array.

This was changed back to ASSERT_WITH_SECURITY_IMPLICATION().

&gt;&gt; Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp:214
&gt;&gt; +static ALWAYS_INLINE void setInteriorPixels(PaintingData&amp; paintingData, int clipRight, int clipBottom, int yStart, int yEnd)
&gt; 
&gt; (It seems like most of the functions that take a PaintingData&amp; could take a const reference.)

Yes some of the function can take const reference. But the rest can&apos;t take a const reference because PaintingData holds a reference to dstPixelArray which is changed in these functions.

&gt;&gt; Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp:223
&gt;&gt;      // m_divisor cannot be 0, SVGFEConvolveMatrixElement ensures this
&gt; 
&gt; s/m_divisor/divisor/

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp:-284
&gt;&gt; -template&lt;bool preserveAlphaValues&gt;
&gt; 
&gt; I assume untemplatizing these functions doesn&apos;t impact performance?

I do not think this will impact the performance. In fact this template function is very strange. We either allocate float totals[4] or float totals[3] depending on the value of the template parameter &apos;preserveAlphaValues&apos;. The MSVC compiler was giving the warning  &apos;4789&apos; and  this is why we were disabling it above.

&gt;&gt; Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp:395
&gt;&gt; +    static constexpr int s_minimalRectDimension = (100 * 100); // Empirical data limit for parallel jobs
&gt; 
&gt; I think per https://webkit.org/code-style-guidelines/ the &quot;s_&quot; prefix is only for static member variables.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp:471
&gt;&gt; +    static constexpr int s_minimalRectDimension = 100 * 100; // Empirical data limit for parallel jobs
&gt; 
&gt; Same here, no &quot;s_&quot;.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FELighting.cpp:420
&gt;&gt; +    static constexpr int s_minimalRectDimension = 100 * 100; // Empirical data limit for parallel jobs
&gt; 
&gt; And here.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FELighting.cpp:576
&gt;&gt; +    data.heightDecreasedByOne = size.height() - 1;
&gt; 
&gt; I&apos;d probably call these &quot;widthMinusOne&quot; and &quot;heightMinusOne&quot;.
&gt; 
&gt; But I wonder if it really helps to store these values with one already subtracted. I don&apos;t think it makes the FELighting::drawLighting code easier to read.

Yes you are right. Adding DecreasedByOne to the &apos;width&apos; and &apos;height&apos; makes the code harder to read. I removed DecreasedByOne from the members&apos; names and I changed the code accordingly.

&gt;&gt; Source/WebCore/platform/graphics/filters/FEMorphology.cpp:149
&gt;&gt; +static void platofrmApplyGeneric(const PaintingData&amp; paintingData, int startY, int endY)
&gt; 
&gt; &quot;platformApplyGeneric&quot;

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FEMorphology.cpp:191
&gt;&gt; +static void platofrmApplyWorker(PlatformApplyParameters* param)
&gt; 
&gt; &quot;platformApplyWorker&quot;

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FEMorphology.cpp:196
&gt;&gt; +static void platofrmApply(const PaintingData&amp; paintingData)
&gt; 
&gt; &quot;platformApply&quot;

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FETurbulence.cpp:118
&gt;&gt; +static const int s_randR = 2836; // m % a
&gt; 
&gt; Pre-existing but I don&apos;t think these should have the &quot;s_&quot; prefix either.

Removed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FETurbulence.cpp:121
&gt;&gt; +static const int s_blockMask = s_blockSize - 1;
&gt; 
&gt; And these ones that moved shouldn&apos;t either.

Removed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FETurbulence.cpp:136
&gt;&gt; +    inline long random()
&gt; 
&gt; inline is redundant here

Removed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FETurbulence.cpp:417
&gt;&gt; +static void platofrmApplyGeneric(const IntRect&amp; filterRegion, const FloatSize&amp; filterScale, Uint8ClampedArray&amp; pixelArray, const PaintingData&amp; paintingData, StitchData stitchData, int startY, int endY)
&gt; 
&gt; &quot;platformApplyGeneric&quot;

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FETurbulence.cpp:438
&gt;&gt; +static void platofrmApplyWorker(PlatformApplyParameters* parameters)
&gt; 
&gt; &quot;platformApplyWorker&quot;

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FETurbulence.cpp:448
&gt;&gt; +    static const int s_minimalRectDimension = (100 * 100); // Empirical data limit for parallel jobs.
&gt; 
&gt; And here.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/filters/PointLightSource.h:55
&gt;&gt; +    mutable FloatPoint3D m_bufferPosition;
&gt; 
&gt; Should m_bufferPosition (and the one in SpotSlightSource) be moved to LightSource::PaintingData?

Yes they can. But let&apos;s do this in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817389</commentid>
    <comment_count>8</comment_count>
      <attachid>445001</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-22 21:44:22 -0800</bug_when>
    <thetext>Created attachment 445001
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817394</commentid>
    <comment_count>9</comment_count>
      <attachid>445004</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-22 22:58:16 -0800</bug_when>
    <thetext>Created attachment 445004
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817507</commentid>
    <comment_count>10</comment_count>
      <attachid>445045</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-23 13:04:11 -0800</bug_when>
    <thetext>Created attachment 445045
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817511</commentid>
    <comment_count>11</comment_count>
      <attachid>445047</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-23 13:15:55 -0800</bug_when>
    <thetext>Created attachment 445047
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817513</commentid>
    <comment_count>12</comment_count>
      <attachid>445048</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-23 14:02:16 -0800</bug_when>
    <thetext>Created attachment 445048
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817520</commentid>
    <comment_count>13</comment_count>
      <attachid>445049</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-23 14:31:27 -0800</bug_when>
    <thetext>Created attachment 445049
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817531</commentid>
    <comment_count>14</comment_count>
      <attachid>445048</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-11-23 15:38:23 -0800</bug_when>
    <thetext>Comment on attachment 445048
Patch

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

&gt; Source/WebCore/ChangeLog:234
&gt; +        Move filing the structure LightingData from FELighting::drawLighting()

&quot;filling&quot;

&gt; Source/WebCore/platform/graphics/filters/FETurbulence.cpp:128
&gt; +    static const int perlinNoise = 4096;
&gt; +    static const long randMaximum = 2147483647; // 2**31 - 1
&gt; +    static const int randAmplitude = 16807; // 7**5; primitive root of m
&gt; +    static const int randQ = 127773; // m / a
&gt; +    static const int randR = 2836; // m % a
&gt; +
&gt; +    static const int blockSize = 256;
&gt; +    static const int blockMask = blockSize - 1;

Now that these are member variables again I guess they should get their &quot;s_&quot; prefixes back! :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817536</commentid>
    <comment_count>15</comment_count>
      <attachid>445054</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-23 16:48:04 -0800</bug_when>
    <thetext>Created attachment 445054
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817541</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-23 17:34:41 -0800</bug_when>
    <thetext>Committed r286140 (244527@main): &lt;https://commits.webkit.org/244527@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 445054.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444754</attachid>
            <date>2021-11-18 16:24:57 -0800</date>
            <delta_ts>2021-11-18 19:26:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232832-20211118162456.patch</filename>
            <type>text/plain</type>
            <size>128317</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1OTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTcxNGQ5N2NiNDk1OTE2
ZjQ5ZDc5YWUwOGIzNjBjZjhiMjM4ODJkYS4uODE5YWI4NGI0Zjg5YzNhZWFkMTI2Mjc5NzljZWUw
ZWMxY2YxOTk1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMiBAQAorMjAyMS0xMS0xOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1ha2UgdGhlIHNvZnR3YXJlIGZpbHRlcnMgZnVuY3Rpb25zIHN0YXRpYyBhbmQgcmVtb3ZlIHRo
ZW0gZnJvbSB0aGUgRmlsdGVyRWZmZWN0IGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjgzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgc3RlcCBpcyByZXF1aXJlZCB0byBtb3ZlIHRo
ZSBGaWx0ZXJFZmZlY3Qgc29mdHdhcmUgY29kZSB0byBzZXBhcmF0ZQorICAgICAgICBmaWxlcy4g
U2luY2UgdGhlIEZpbHRlckVmZmVjdCBjYW4gYmUgYXBwbGllZCB3aXRoIHRoZSBhY2NlbGVyYXRl
ZCBDb3JlSW1hZ2UKKyAgICAgICAgb3IgdGhlICB1bmFjY2VsZXJhdGVkIHNvZnR3YXJlIG1ldGhv
ZHMsIGl0IG1ha2Ugc2Vuc2UgdG8gcmVtb3ZlIHRoZSBzb2Z0d2FyZQorICAgICAgICBjb2RlIGZy
b20gdGhlIEZpbHRlckVmZmVjdCBjbGFzc2VzLgorCisgICAgICAgIFRoZSBwbGFuIGlzIHRvIGhh
dmUgdGhlIHNvZnR3YXJlIGNvZGUgaW4gc2VwYXJhdGUgY2xhc3Nlcy9maWxlcy4gQnV0IHRoZQor
ICAgICAgICBmaXJzdCBzdGVwIGlzIHRvIHJlbW92ZSB0aGUgY2xhc3MgbWVtYmVycyBhbmQgbWFr
ZSB0aGVtIHN0YXRpYyBtZXRob2RzLgorICAgICAgICBBbmQgYmVjYXVzZSB0aGUgdW5pZmllZCBi
dWlsZCBzeXN0ZW0gY2FuIGNhdXNlIHN0YXRpYyBtZXRob2Qgb3Igc3RydWN0dXJlCisgICAgICAg
IG5hbWVzIHRvIGNvbGxpZGUsIHdlIGFyZSBnb2luZyB0byBwdXQgdGhpcyBjb2RlIGluc2lkZSBk
aWZmZXJlbnQgbmFtZXNwYWNlcworICAgICAgICBmb3Igbm93LgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzdGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3Vy
Y2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVD
b21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1
ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6bm9y
bWFsaXplZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmU6
OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJp
eFNvZnR3YXJlOjplZmZlY3RUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhT
b2Z0d2FyZTo6YXBwbHlQbGF0Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6bWF0cml4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNhdHVyYXRlQW5kSHVlUm90YXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Omx1bWluYW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjplZmZlY3RBcHBseUFjY2VsZXJhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVm
ZmVjdFR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5oOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlU2F0dXJhdGVDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmU6OmNvbXB1dGVJZGVu
dGl0eVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2Fy
ZTo6Y29tcHV0ZVRhYnVsYXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmU6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZTo6Y29tcHV0ZUxpbmVhclRhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZTo6Y29tcHV0ZUdhbW1hVGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlOjpjb21w
dXRlTG9va3VwVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0
ZUxpbmVhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZSk6
CisgICAgICAgIChXZWJDb3JlOjpjbGFtcEJ5dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6YXJpdGhtZXRpY1NvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlOjpzZXREZXN0aW5hdGlvblBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmU6OnNldEludGVyaW9yUGl4ZWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZTo6Z2V0UGl4ZWxWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmU6OnNldE91dGVy
UGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpjbGFtcFJHQkFWYWx1ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpzZXREZXN0aW5hdGlvblBpeGVscyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQaXhlbHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0
T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJp
eDo6c2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgIChXZWJD
b3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eENoYW5uZWxJbmRleCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eUNoYW5uZWxJbmRleCBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
R2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6c2V0U3RkRGV2aWF0aW9uWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6c2V0RWRnZU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBlZFRvS2VybmVsU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJu
ZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJu
ZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRz
ZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJl
OjprZXJuZWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3
YXJlOjpib3hCbHVyQWxwaGFPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVy
U29mdHdhcmU6OnBsYXRmb3JtQXBwbHlHZW5lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyU29mdHdhcmU6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZTo6cGxhdGZvcm1BcHBseSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKGdh
dXNzaWFuS2VybmVsRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omtlcm5lbFBv
c2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJveEJsdXJBbHBoYU9ubHkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpz
dGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
R2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Z1NvZnR3YXJlOjpBbHBoYVdpbmRvdzo6dG9wTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nU29mdHdhcmU6OkFscGhhV2luZG93OjpsZWZ0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpBbHBoYVdpbmRvdzo6
dG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6QWxwaGFX
aW5kb3c6OmNlbnRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdh
cmU6OkFscGhhV2luZG93Ojpib3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZ1NvZnR3YXJlOjpBbHBoYVdpbmRvdzo6c2V0VG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmdTb2Z0d2FyZTo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6CisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpBbHBoYVdpbmRvdzo6c2V0VG9wUmlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpBbHBoYVdpbmRvdzo6c2V0
UmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpBbHBoYVdpbmRv
dzo6c2V0Qm90dG9tUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
OjpBbHBoYVdpbmRvdzo6c2hpZnRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1Nv
ZnR3YXJlOjpBbHBoYVdpbmRvdzo6c2hpZnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Z1NvZnR3YXJlOjpMaWdodGluZ0RhdGE6OnRvcExlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkxpZ2h0aW5nRGF0
YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1Nv
ZnR3YXJlOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFs
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6TGlnaHRpbmdE
YXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmU6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1hbCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93
Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6TGln
aHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmU6OnNldFBpeGVsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZ1NvZnR3YXJlOjpzZXRQaXhlbCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmU6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OnBsYXRmb3JtQXBwbHlHZW5lcmljKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6cGxhdGZvcm1BcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OmRyYXdMaWdodGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
dG9wUm93Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0
YTo6aW50ZXJpb3JOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnRO
b3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmlj
UGFpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1B
cHBseUdlbmVyaWNXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpkcmF3TGlnaHRpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
QWxwaGFXaW5kb3c6OnRvcExlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6
Y2VudGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFs
cGhhV2luZG93Ojpib3R0b20gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcFJpZ2h0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRS
aWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRv
dzo6c2V0Qm90dG9tUmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6QWxwaGFXaW5kb3c6OnNoaWZ0Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OkFscGhhV2luZG93OjpzaGlmdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5U29mdHdhcmU6Om1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZTo6bWFrZVBpeGVsVmFsdWVG
cm9tQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3
YXJlOjptaW5Pck1heCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZTo6
Y29sdW1uRXh0cmVtdW0pOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmU6
Omtlcm5lbEV4dHJlbXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJl
OjpwbGF0b2ZybUFwcGx5R2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lT
b2Z0d2FyZTo6cGxhdG9mcm1BcHBseVdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBo
b2xvZ3lTb2Z0d2FyZTo6cGxhdG9mcm1BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBo
b2xvZ3lTb2Z0d2FyZTo6aXNEZWdlbmVyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhv
bG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OnBpeGVsQXJy
YXlJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlQ29sb3JDb21wb25lbnRz
ZnJvbVBpeGVsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVBpeGVsVmFs
dWVGcm9tQ29sb3JDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk9y
TWF4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbHVtbkV4dHJlbXVtKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Omtlcm5lbEV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdl
bmVyYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVj
dWxhckxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6
RkVTcGVjdWxhckxpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2Fy
ZTo6UGFpbnRpbmdEYXRhOjpQYWludGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJi
dWxlbmNlU29mdHdhcmU6OlBhaW50aW5nRGF0YTo6cmFuZG9tKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlOjpjb21wdXRlU3RpdGNoaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlOjpub2lzZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZTo6cGxhdG9mcm1BcHBseUdl
bmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmU6OnBsYXRvZnJt
QXBwbHlXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmU6OnBs
YXRvZnJtQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0Rh
dGE6OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVy
YnVsZW5jZTo6ZmlsbFJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpub3JtYWxpemVkRmxvYXRzKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5n
RGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90
TGlnaHRTb3VyY2UuaDoKKwogMjAyMS0xMS0xNiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2Vy
QGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIGEgbW9tZW50dW0gc2Nyb2xsIGFuaW1hdGlvbiB3
aGVuIHJlY2VpdmluZyBhIG1vbWVudHVtIGVuZCBldmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3Vy
Y2UuY3BwCmluZGV4IGU1ZmIxZmY2NjVkM2ViMDdmNDhlZTFkMDJiYmZmY2M2YjA0NDFmODkuLjg5
NDdhOTg2MGU0NmIxMWM1OGUyNzc1MzYyNTZmZGI5ZDUxZDE1NDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRM
aWdodFNvdXJjZS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJF
ZmZlY3QmLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgRGlzdGFudExpZ2h0U291
cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhKSBjb25zdAogewogICAgIGZsb2F0IGF6aW11dGggPSBkZWcycmFkKG1fYXpp
bXV0aCk7CiAgICAgZmxvYXQgZWxldmF0aW9uID0gZGVnMnJhZChtX2VsZXZhdGlvbik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRM
aWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9E
aXN0YW50TGlnaHRTb3VyY2UuaAppbmRleCBjMWUzMGVkZTc1OTgzNzI4YTYzMmJjY2ZmYjA5OTcz
YTNhNGU3MmZkLi4zMDE5MmIwZWYwY2QxYmY0MDNkNDIzMzhjZTQwODc3MThkNzUxNzA3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRM
aWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRGlzdGFudExpZ2h0U291cmNlLmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIGJv
b2wgc2V0QXppbXV0aChmbG9hdCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRFbGV2YXRpb24oZmxv
YXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVm
ZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0
YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBjb25zdCBvdmVycmlkZTsKICAg
ICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFp
bnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IDY3OWU3OGRhZWE4NzNmNWQz
M2ExYWZmODcxNTI1YmZjZjg3NzEwZmIuLjE4MjE1OTQzMjZmNzMxNDE3NTBiMjkwNGQyNDU0ZTNm
YzcxY2NkMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtNjMsNiArNjMsNDQgQEAgYm9vbCBG
RUNvbG9yTWF0cml4OjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiAmdmFsdWVzKQogICAg
IHJldHVybiB0cnVlOwogfQogCit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRl
Q29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCit7CisgICAgY29tcG9u
ZW50c1swXSA9ICgwLjIxMyArIDAuNzg3ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbMV0gPSAo
MC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4w
NzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUp
OworICAgIGNvbXBvbmVudHNbNF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKKyAgICBjb21w
b25lbnRzWzVdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s2XSA9
ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAw
LjcxNSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1
ZSk7Cit9CisKK3ZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50
cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCit7CisgICAgZmxvYXQgY29zSHVlID0g
Y29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7CisgICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVl
ICogcGlGbG9hdCAvIDE4MCk7CisgICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICog
MC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKKyAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NI
dWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAt
IGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7CisgICAgY29tcG9uZW50c1szXSA9IDAu
MjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsKKyAgICBjb21wb25lbnRzWzRd
ID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQwOworICAgIGNvbXBvbmVu
dHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7CisgICAgY29t
cG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKKyAg
ICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1
OworICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICog
MC4wNzI7Cit9CisKK1ZlY3RvcjxmbG9hdD4gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0
cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgVmVjdG9yPGZsb2F0PiBub3Jt
YWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dmFsdWVzLnNpemUoKTsgKytpKQorICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFs
aXplZEZsb2F0KHZhbHVlc1tpXSk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Cit9CisK
K25hbWVzcGFjZSBGRUNvbG9yTWF0cml4U29mdHdhcmUgeworCiBpbmxpbmUgdm9pZCBtYXRyaXgo
ZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBjb25z
dCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCiB7CiAgICAgZmxvYXQgciA9IHJlZDsKQEAgLTk3LDE4
ICsxMzUsMTAgQEAgaW5saW5lIHZvaWQgbHVtaW5hbmNlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVl
biwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFKQot
dGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci1ib29sIGVmZmVjdEFwcGx5QWNj
ZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9h
dD4mIHZhbHVlcywgZmxvYXQgY29tcG9uZW50c1s5XSwgSW50U2l6ZSBidWZmZXJTaXplKQorc3Rh
dGljIHZvaWQgZWZmZWN0QXBwbHlBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxB
cnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBjb21wb25lbnRzWzldLCBJ
bnRTaXplIGJ1ZmZlclNpemUsIENvbG9yTWF0cml4VHlwZSBtYXRyaXhUeXBlKQogewogICAgIEFT
U0VSVChwaXhlbEFycmF5Lmxlbmd0aCgpID09IGJ1ZmZlclNpemUuYXJlYSgpICogNCk7CiAgICAg
Ci0gICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCkgewotICAg
ICAgICAvLyB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCB0YWtlcyBhIDR4NCBtYXRyaXgs
IGlmIGFueSB2YWx1ZSBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIEZFQ29sb3JNYXRyaXggNXg0
IG1hdHJpeAotICAgICAgICAvLyBpcyBub3QgemVybywgZmFsbCBiYWNrIHRvIG5vbi12SW1hZ2Ug
Y29kZS4KLSAgICAgICAgaWYgKHZhbHVlc1s0XSAhPSAwIHx8IHZhbHVlc1s5XSAhPSAwIHx8IHZh
bHVlc1sxNF0gIT0gMCB8fCB2YWx1ZXNbMTldICE9IDApCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCiAgICAgY29uc3QgaW50MzJfdCBkaXZpc29yID0gMjU2OwogICAgIHVpbnQ4
X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKIApAQCAtMTI0LDcgKzE1NCwxMCBAQCBib29s
IGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNv
bnN0IFZlY3RvcjxmbG9hdD4mCiAgICAgZGVzdC5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgo
KSAqIDQ7CiAgICAgZGVzdC5kYXRhID0gZGF0YTsKIAotICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkg
eworICAgIHN3aXRjaCAobWF0cml4VHlwZSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X1VOS05PV046CisgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
TUFUUklYOiB7CiAgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikp
LApAQCAtMjAzLDMxICsyMzYsMTcgQEAgYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4
Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JgogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCiAK
LXRlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlPgotdm9pZCBlZmZlY3RUeXBlKFVp
bnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMs
IEludFNpemUgYnVmZmVyU2l6ZSkKK3N0YXRpYyB2b2lkIGVmZmVjdFR5cGUoVWludDhDbGFtcGVk
QXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgZmxvYXQgY29t
cG9uZW50c1s5XSwgQ29sb3JNYXRyaXhUeXBlIG1hdHJpeFR5cGUpCiB7Ci0gICAgZmxvYXQgY29t
cG9uZW50c1s5XTsKLQotICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9T
QVRVUkFURSkKLSAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25l
bnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0gICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBG
RUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxj
dWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0KICAgICB1
bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKIAotI2lmIFVT
RShBQ0NFTEVSQVRFKQotICAgIGlmIChlZmZlY3RBcHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+
KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSkpCi0gICAgICAgIHJl
dHVybjsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlclNpemUpOwotI2VuZGlmCisgICAg
c3dpdGNoIChtYXRyaXhUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9X
TjoKKyAgICAgICAgYnJlYWs7CiAKLSAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKICAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CiAgICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxC
eXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxC
eXRlT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQpOwpAQCAtMjczLDYgKzI5MiwyMyBAQCB2b2lkIGVmZmVjdFR5cGUo
VWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVl
cywgSW50UwogICAgIH0KIH0KIAorc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybShVaW50OENsYW1w
ZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBj
b21wb25lbnRzWzldLCBJbnRTaXplIGJ1ZmZlclNpemUsIENvbG9yTWF0cml4VHlwZSBtYXRyaXhU
eXBlKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5
X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYgYW55IHZhbHVlIGluIHRoZSBsYXN0IGNv
bHVtbiBvZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0cml4CisgICAgLy8gaXMgbm90IHplcm8s
IGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCisgICAgaWYgKG1hdHJpeFR5cGUgPT0gRkVD
T0xPUk1BVFJJWF9UWVBFX01BVFJJWCAmJiAodmFsdWVzWzRdIHx8IHZhbHVlc1s5XSB8fCB2YWx1
ZXNbMTRdIHx8IHZhbHVlc1sxOV0pKQorICAgICAgICBGRUNvbG9yTWF0cml4U29mdHdhcmU6OmVm
ZmVjdFR5cGUocGl4ZWxBcnJheSwgdmFsdWVzLCBjb21wb25lbnRzLCBtYXRyaXhUeXBlKTsKKyAg
ICBlbHNlCisgICAgICAgIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZTo6ZWZmZWN0QXBwbHlBY2NlbGVy
YXRlZChwaXhlbEFycmF5LCB2YWx1ZXMsIGNvbXBvbmVudHMsIGJ1ZmZlclNpemUsIG1hdHJpeFR5
cGUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyU2l6ZSk7CisgICAgRkVDb2xvck1h
dHJpeFNvZnR3YXJlOjplZmZlY3RUeXBlKHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50cywg
bV90eXBlKTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBGRUNvbG9yTWF0cml4U29mdHdh
cmUKKwogYm9vbCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CkBAIC0yOTQs
MjYgKzMzMCwyOCBAQCBib29sIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImKQogICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgp
OwogICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOwog
Ci0gICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsK
LSAgICAKKyAgICBhdXRvIHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOworICAg
IGZsb2F0IGNvbXBvbmVudHNbOV07CisKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklY
X1RZUEVfTUFUUklYPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6IAot
ICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURT4ocGl4ZWxBcnJh
eSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9TQVRVUkFURToKKyAgICAgICAgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNv
bXBvbmVudHMsIHZhbHVlc1swXSk7CiAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBlZmZlY3RUeXBlPEZF
Q09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJh
eURpbWVuc2lvbnMpOworICAgICAgICBjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBv
bmVudHMsIHZhbHVlc1swXSk7CiAgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBGRUNPTE9STUFU
UklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQToKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFU
UklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5
RGltZW5zaW9ucyk7CiAgICAgICAgIHNldElzQWxwaGFJbWFnZSh0cnVlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCisgICAgRkVDb2xvck1hdHJpeFNvZnR3YXJlOjphcHBseVBsYXRmb3JtKHBp
eGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50cywgcGl4ZWxBcnJheURpbWVuc2lvbnMsIG1fdHlw
ZSk7CiAgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgaW1hZ2VS
ZWN0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKaW5kZXggNDk3ZWIxOTVl
NDE3NWVjZGZkMGNhYjI0Y2JjZDliMGUzOWE3ZjgwOS4uZjY5ZjBiMDFjOTUwN2UwNTI2ZTBkMTc3
ZWJiZWY5NjkwMDljZTFkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKQEAgLTQ0LDggKzQ0LDkgQEAgcHVi
bGljOgogICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzOyB9CiAgICAgYm9vbCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYpOwogCi0g
ICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCog
Y29tcG9uZW50cywgZmxvYXQgdmFsdWUpOwotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxh
dGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7Cisg
ICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25l
bnRzLCBmbG9hdCB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlSHVlUm90YXRlQ29t
cG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHN0YXRpYyBWZWN0
b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKTsK
IAogcHJpdmF0ZToKICAgICBGRUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZs
b2F0PiYmKTsKQEAgLTU4LDM1ICs1OSw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPGZsb2F0PiBt
X3ZhbHVlczsKIH07CiAKLWlubGluZSB2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVy
YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCi17Ci0gICAgY29t
cG9uZW50c1swXSA9ICgwLjIxMyArIDAuNzg3ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMV0g
PSAoMC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0g
MC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFs
dWUpOwotICAgIGNvbXBvbmVudHNbNF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKLSAgICBj
b21wb25lbnRzWzVdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s2
XSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUg
LSAwLjcxNSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2
YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0
ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQotewotICAgIGZsb2F0
IGNvc0h1ZSA9IGNvcyh2YWx1ZSAqIHBpRmxvYXQgLyAxODApOwotICAgIGZsb2F0IHNpbkh1ZSA9
IHNpbih2YWx1ZSAqIHBpRmxvYXQgLyAxODApOwotICAgIGNvbXBvbmVudHNbMF0gPSAwLjIxMyAr
IGNvc0h1ZSAqIDAuNzg3IC0gc2luSHVlICogMC4yMTM7Ci0gICAgY29tcG9uZW50c1sxXSA9IDAu
NzE1IC0gY29zSHVlICogMC43MTUgLSBzaW5IdWUgKiAwLjcxNTsKLSAgICBjb21wb25lbnRzWzJd
ID0gMC4wNzIgLSBjb3NIdWUgKiAwLjA3MiArIHNpbkh1ZSAqIDAuOTI4OwotICAgIGNvbXBvbmVu
dHNbM10gPSAwLjIxMyAtIGNvc0h1ZSAqIDAuMjEzICsgc2luSHVlICogMC4xNDM7Ci0gICAgY29t
cG9uZW50c1s0XSA9IDAuNzE1ICsgY29zSHVlICogMC4yODUgKyBzaW5IdWUgKiAwLjE0MDsKLSAg
ICBjb21wb25lbnRzWzVdID0gMC4wNzIgLSBjb3NIdWUgKiAwLjA3MiAtIHNpbkh1ZSAqIDAuMjgz
OwotICAgIGNvbXBvbmVudHNbNl0gPSAwLjIxMyAtIGNvc0h1ZSAqIDAuMjEzIC0gc2luSHVlICog
MC43ODc7Ci0gICAgY29tcG9uZW50c1s3XSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgKyBzaW5I
dWUgKiAwLjcxNTsKLSAgICBjb21wb25lbnRzWzhdID0gMC4wNzIgKyBjb3NIdWUgKiAwLjkyOCAr
IHNpbkh1ZSAqIDAuMDcyOwotfQotCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQ29sb3JNYXRyaXgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJh
bnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCA5NzdjYTViNTc4NDEzNDNlNzE4ZjQyMDE1ZGI0MTI0
YzdlMGFlZmVhLi4xZDU1N2NkODQ1MTczYjllNzdkZDZjOGIyOTdmMjQ0YzljOTllNDVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9u
ZW50VHJhbnNmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKQEAgLTQ2LDExICs0NiwxNSBAQCBGRUNvbXBv
bmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIHJlZEZ1bgogewogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1
dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYpCituYW1lc3BhY2UgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlIHsKKwordXNpbmcg
TG9va3VwVGFibGUgPSBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj47CisKK3N0YXRpYyB2b2lkIGNv
bXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYpCiB7CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZVRhYnVs
YXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQorc3RhdGljIHZvaWQgY29tcHV0ZVRhYnVsYXJUYWJsZShM
b29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFu
c2ZlckZ1bmN0aW9uKQogewogICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHRhYmxlVmFsdWVzID0g
dHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKICAgICB1bnNpZ25lZCBuID0gdGFibGVWYWx1
ZXMuc2l6ZSgpOwpAQCAtNjcsNyArNzEsNyBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNv
bXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZQogICAg
IH0KIH0KIAotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlRGlzY3JldGVUYWJsZShM
b29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFu
c2ZlckZ1bmN0aW9uKQorc3RhdGljIHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFi
bGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5j
dGlvbikKIHsKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVy
RnVuY3Rpb24udGFibGVWYWx1ZXM7CiAgICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUo
KTsKQEAgLTgyLDcgKzg2LDcgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlRGlz
Y3JldGVUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb24KICAgICB9CiB9CiAK
LXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxl
JiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rp
b24pCitzdGF0aWMgdm9pZCBjb21wdXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKIHsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IGRvdWJsZSB2YWwgPSB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlICogaSArIDI1NSAqIHRyYW5zZmVy
RnVuY3Rpb24uaW50ZXJjZXB0OwpAQCAtOTEsNyArOTUsNyBAQCB2b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21w
b25lbgogICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFU
YWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiB0cmFuc2ZlckZ1bmN0aW9uKQorc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3Vw
VGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJG
dW5jdGlvbikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIGRvdWJsZSBleHBvbmVudCA9IHRyYW5zZmVyRnVuY3Rpb24uZXhwb25l
bnQ7IC8vIFJDVlQgZG9lc24ndCBsaWtlIHBhc3NpbmcgYSBkb3VibGUgYW5kIGEgZmxvYXQgdG8g
cG93LCBzbyBwcm9tb3RlIHRoaXMgdG8gZG91YmxlCkBAIC0xMDEsNiArMTA1LDMxIEBAIHZvaWQg
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmIHZhbHVl
cywgY29uc3QgQ29tcG9uZW50CiAgICAgfQogfQogCitzdGF0aWMgTG9va3VwVGFibGUgY29tcHV0
ZUxvb2t1cFRhYmxlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKQor
eworICAgIExvb2t1cFRhYmxlIHRhYmxlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRhYmxlLnNpemUoKTsgKytpKQorICAgICAgICB0YWJsZVtpXSA9IGk7CisKKyAgICB1c2luZyBU
cmFuc2ZlclR5cGUgPSB2b2lkICgqKShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mKTsKKyAgICBUcmFuc2ZlclR5cGUgY2FsbEVmZmVjdFtdID0geworICAgICAg
ICBjb21wdXRlSWRlbnRpdHlUYWJsZSwKKyAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsCisg
ICAgICAgIGNvbXB1dGVUYWJ1bGFyVGFibGUsCisgICAgICAgIGNvbXB1dGVEaXNjcmV0ZVRhYmxl
LAorICAgICAgICBjb21wdXRlTGluZWFyVGFibGUsCisgICAgICAgIGNvbXB1dGVHYW1tYVRhYmxl
CisgICAgfTsKKworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGZ1bmN0aW9uLnR5cGUp
IDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7CisgICAgY2FsbEVmZmVjdFtmdW5jdGlv
bi50eXBlXSh0YWJsZSwgZnVuY3Rpb24pOworCisgICAgcmV0dXJuIHRhYmxlOworfQorCit9IC8v
IG5hbWVzcGFjZSBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmUKKwogYm9vbCBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CkBAIC0xMTEsMTEgKzE0MCwxMCBAQCBi
b29sIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImKQogCiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAgTG9va3VwVGFibGUgcmVkVGFibGU7Ci0gICAgTG9va3Vw
VGFibGUgZ3JlZW5UYWJsZTsKLSAgICBMb29rdXBUYWJsZSBibHVlVGFibGU7Ci0gICAgTG9va3Vw
VGFibGUgYWxwaGFUYWJsZTsKLSAgICBjb21wdXRlTG9va3VwVGFibGVzKHJlZFRhYmxlLCBncmVl
blRhYmxlLCBibHVlVGFibGUsIGFscGhhVGFibGUpOworICAgIGF1dG8gcmVkVGFibGUgPSBGRUNv
bXBvbmVudFRyYW5zZmVyU29mdHdhcmU6OmNvbXB1dGVMb29rdXBUYWJsZShtX3JlZEZ1bmN0aW9u
KTsKKyAgICBhdXRvIGdyZWVuVGFibGUgPSBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmU6OmNv
bXB1dGVMb29rdXBUYWJsZShtX2dyZWVuRnVuY3Rpb24pOworICAgIGF1dG8gYmx1ZVRhYmxlID0g
RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlOjpjb21wdXRlTG9va3VwVGFibGUobV9ibHVlRnVu
Y3Rpb24pOworICAgIGF1dG8gYWxwaGFUYWJsZSA9IEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2Fy
ZTo6Y29tcHV0ZUxvb2t1cFRhYmxlKG1fYWxwaGFGdW5jdGlvbik7CiAKICAgICBJbnRSZWN0IGRy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKICAgICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlv
blBpeGVsQXJyYXksIGRyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwpAQCAtMTMx
LDMyICsxNTksNiBAQCBib29sIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFQ29tcG9u
ZW50VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRhYmxlLCBM
b29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9va3VwVGFi
bGUmIGFscGhhVGFibGUpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZFRhYmxl
LnNpemUoKTsgKytpKQotICAgICAgICByZWRUYWJsZVtpXSA9IGdyZWVuVGFibGVbaV0gPSBibHVl
VGFibGVbaV0gPSBhbHBoYVRhYmxlW2ldID0gaTsKLQotICAgIHVzaW5nIFRyYW5zZmVyVHlwZSA9
IHZvaWQgKCopKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OwotICAgIFRyYW5zZmVyVHlwZSBjYWxsRWZmZWN0W10gPSB7Ci0gICAgICAgIGNvbXB1dGVJZGVu
dGl0eVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9VTktOT1dOCi0gICAgICAg
IGNvbXB1dGVJZGVudGl0eVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9JREVO
VElUWQotICAgICAgICBjb21wdXRlVGFidWxhclRhYmxlLCAgICAvLyBGRUNPTVBPTkVOVFRSQU5T
RkVSX1RZUEVfVEFCTEUKLSAgICAgICAgY29tcHV0ZURpc2NyZXRlVGFibGUsICAgLy8gRkVDT01Q
T05FTlRUUkFOU0ZFUl9UWVBFX0RJU0NSRVRFCi0gICAgICAgIGNvbXB1dGVMaW5lYXJUYWJsZSwg
ICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIKLSAgICAgICAgY29tcHV0ZUdh
bW1hVGFibGUgICAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0dBTU1BCi0gICAgfTsK
LQotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVf
dD4obV9yZWRGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOwot
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4o
bV9ncmVlbkZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0g
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90Piht
X2JsdWVGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9h
bHBoYUZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0KLSAg
ICBjYWxsRWZmZWN0W21fcmVkRnVuY3Rpb24udHlwZV0ocmVkVGFibGUsIG1fcmVkRnVuY3Rpb24p
OwotICAgIGNhbGxFZmZlY3RbbV9ncmVlbkZ1bmN0aW9uLnR5cGVdKGdyZWVuVGFibGUsIG1fZ3Jl
ZW5GdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVjdFttX2JsdWVGdW5jdGlvbi50eXBlXShibHVlVGFi
bGUsIG1fYmx1ZUZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fYWxwaGFGdW5jdGlvbi50eXBl
XShhbHBoYVRhYmxlLCBtX2FscGhhRnVuY3Rpb24pOwotfQotCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQ29tcG9uZW50VHJhbnNmZXJUeXBlIHR5cGUpCiB7
CiAgICAgc3dpdGNoICh0eXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCmluZGV4IDZh
ZGE5YzBhYmJlNWMyZjlkNjViZDkxOWZmZWM0ZjE3M2QwMDM0MTQuLjUxOGVhMTM0N2E0YWRkYmE0
Y2Q1MDBjYjQyYzgxMzcwNmRjY2QxOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCkBA
IC02MSwxNiArNjEsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZFQ29tcG9uZW50VHJhbnNm
ZXIoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFG
dW5jKTsKIAotICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+
OwotCi0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0
ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21w
dXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0KLSAgICB2b2lkIGNvbXB1dGVMb29r
dXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRhYmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwg
TG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9va3VwVGFibGUmIGFscGhhVGFibGUpOwotCiAgICAg
Ym9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAg
ICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5k
ZXggMjVhYzAwODQyNGJkODYzMTE4NDc4OTA5NTBiY2Y2M2U1YWVmNWZhOC4uM2E1NTM2YWViM2E4
NmQ2YTM1YTFhMTAyZmVlZDQ3ZmI4MmQ3YzZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTk0LDcg
Kzk0LDMxIEBAIHZvaWQgRkVDb21wb3NpdGU6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgp
CiAKICAgICBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpOwogfQotICAgIAorCit2b2lk
IEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZp
bHRlcikKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BF
UkFUT1JfSU46CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgorICAgICAgICAv
LyBGb3IgSW4gYW5kIEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJl
c3VsdCBvZgorICAgICAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFi
c29sdXRlIHBhaW50IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KKyAgICAgICAgc2V0
QWJzb2x1dGVQYWludFJlY3QoaW5wdXRFZmZlY3QoMSktPmFic29sdXRlUGFpbnRSZWN0KCkpOwor
ICAgICAgICBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzoKKyAgICAgICAgLy8gQXJpdGhtZXRp
YyBtYXkgaW5mbHVuY2UgdGhlIGNvbXBlbGUgZmlsdGVyIHByaW1pdGl2ZSByZWdpb24uIFNvIHdl
IGNhbid0CisgICAgICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KKyAgICAg
ICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFRha2UgdGhlIHVu
aW9uIG9mIGJvdGggaW5wdXQgZWZmZWN0cy4KKyAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdChmaWx0ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorfQor
CituYW1lc3BhY2UgRkVDb21wb3NpdGVTb2Z0d2FyZSB7CisKIHN0YXRpYyB1bnNpZ25lZCBjaGFy
IGNsYW1wQnl0ZShpbnQgYykKIHsKICAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZbXSA9IHsgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1NSwgMCB9OwpAQCAtMTg4LDYgKzIxMiw4IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBhcml0aG1ldGljU29mdHdhcmUodW5zaWduZWQgY2hhciogc291cmNl
LCB1bnNpZ25lZCBjaGFyKiBkZXN0CiB9CiAjZW5kaWYKIAorfSAvLyBuYW1lc3BhY2UgRkVDb21w
b3NpdGVTb2Z0d2FyZQorCiBpbmxpbmUgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1l
dGljU29mdHdhcmUoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCkKIHsKICAgICBpbnQgbGVuZ3RoID0gc291cmNlLmxlbmd0aCgpOwpAQCAtMTk3LDMyICsyMjMs
MTAgQEAgaW5saW5lIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJl
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3UKICAgICBBU1NFUlQoIShsZW5ndGggJiAweDMp
KTsKICAgICBwbGF0Zm9ybUFyaXRobWV0aWNOZW9uKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9u
LmRhdGEoKSwgbGVuZ3RoLCBrMSwgazIsIGszLCBrNCk7CiAjZWxzZQotICAgIGFyaXRobWV0aWNT
b2Z0d2FyZShzb3VyY2UuZGF0YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsy
LCBrMywgazQpOworICAgIEZFQ29tcG9zaXRlU29mdHdhcmU6OmFyaXRobWV0aWNTb2Z0d2FyZShz
b3VyY2UuZGF0YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQp
OwogI2VuZGlmCiB9CiAKLXZvaWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX0FUT1A6Ci0gICAgICAgIC8vIEZvciBJbiBhbmQgQXRvcCB0aGUgZmlyc3QgZWZmZWN0IGp1
c3QgaW5mbHVlbmNlcyB0aGUgcmVzdWx0IG9mCi0gICAgICAgIC8vIHRoZSBzZWNvbmQgZWZmZWN0
LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBvZiB0aGUgc2Vjb25kIGVmZmVj
dCBoZXJlLgotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgxKS0+YWJz
b2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgot
ICAgICAgICAvLyBBcml0aG1ldGljIG1heSBpbmZsdW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJp
bWl0aXZlIHJlZ2lvbi4gU28gd2UgY2FuJ3QKLSAgICAgICAgLy8gb3B0aW1pemUgdGhlIHBhaW50
IHJlZ2lvbiBoZXJlLgotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KG1heEVmZmVjdFJlY3QoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgLy8gVGFrZSB0aGUgdW5pb24gb2YgYm90aCBpbnB1dCBlZmZlY3RzLgotICAgICAgICBG
aWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGZpbHRlcik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci19Ci0KIGJvb2wgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDkzZjZkZjg3YThjYmQzYzE2NDI0
M2YyNDM2MDRkY2VlZWI4MWE2NjQuLmIxMzUyM2IwMzc4OWNlMjM5NTdkNWEwZWZkOTc5MzY1ODE4
YWM5ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtMTE0LDYgKzExNCw4IEBAIGJv
b2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVBbHBoYShib29sIHByZXNlcnZlQWxwaGEp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK25hbWVzcGFjZSBGRUNvbnZvbHZlTWF0cml4U29mdHdh
cmUgeworCiAvKgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAg
IENvbnZvbHZlTWF0cml4IGltcGxlbWVudGF0aW9uCkBAIC0xNzAsNiArMTcyLDIxIEBAIGJvb2wg
RkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVBbHBoYShib29sIHByZXNlcnZlQWxwaGEpCiAg
ICBhbmQgd291bGQgbWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgogKi8KIAorc3Ry
dWN0IFBhaW50aW5nRGF0YSB7CisgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVs
QXJyYXk7CisgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7CisgICAgaW50IHdp
ZHRoOworICAgIGludCBoZWlnaHQ7CisKKyAgICBJbnRTaXplIGtlcm5lbFNpemU7CisgICAgZmxv
YXQgZGl2aXNvcjsKKyAgICBmbG9hdCBiaWFzOworICAgIEludFBvaW50IHRhcmdldE9mZnNldDsK
KyAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGU7CisgICAgYm9vbCBwcmVzZXJ2ZUFscGhhOworICAg
IFZlY3RvcjxmbG9hdD4ga2VybmVsTWF0cml4OworfTsKKwogc3RhdGljIEFMV0FZU19JTkxJTkUg
dW5zaWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFubmVsLCB1bnNpZ25lZCBjaGFy
IG1heCA9IDI1NSkKIHsKICAgICBpZiAoY2hhbm5lbCA8PSAwKQpAQCAtMTc5LDggKzE5Niw3IEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQg
Y2hhbm5lbCwgdW5zaWduZWQgY2hhciBtCiAgICAgcmV0dXJuIGNoYW5uZWw7CiB9CiAKLXRlbXBs
YXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLUFMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0
aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVaW50
OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxv
YXQgZGl2aXNvciwgZmxvYXQgYmlhcykKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0RGVz
dGluYXRpb25QaXhlbHMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZVBpeGVscywgVWlu
dDhDbGFtcGVkQXJyYXkmIGRlc3RQaXhlbHMsIGludCYgcGl4ZWwsIGZsb2F0KiB0b3RhbHMsIGZs
b2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcykKIHsKICAg
ICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/IDI1NSA6IGNs
YW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDM7ICsraSkKQEAgLTE5MywyNSArMjA5LDE4IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4
ZWxzLCBVCiAgICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyssIG1heEFscGhhKTsKIH0KIAot
I2lmIENPTVBJTEVSKE1TVkMpCi0vLyBJbmNvcnJlY3RseSBkaWFnbm9zaW5nIG92ZXJ3cml0ZSBv
ZiBzdGFjayBpbiB8dG90YWxzfCBkdWUgdG8gfHByZXNlcnZlQWxwaGFWYWx1ZXN8LgotI3ByYWdt
YSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDc4OSkKLSNlbmRpZgot
CiAvLyBPbmx5IGZvciByZWdpb24gQwotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVz
PgotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRJbnRlcmlvclBp
eGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBC
b3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQorc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBz
ZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdo
dCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQogewogICAgIC8vIGVkZ2Ug
bW9kZSBkb2VzIG5vdCBhZmZlY3QgdGhlc2UgcGl4ZWxzCi0gICAgaW50IHBpeGVsID0gKG1fdGFy
Z2V0T2Zmc2V0LnkoKSAqIHBhaW50aW5nRGF0YS53aWR0aCArIG1fdGFyZ2V0T2Zmc2V0LngoKSkg
KiA0OworICAgIGludCBwaXhlbCA9IChwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSAqIHBh
aW50aW5nRGF0YS53aWR0aCArIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgpKSAqIDQ7CiAg
ICAgaW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJpZ2h0ICogNDsKLSAgICBpbnQgeEluY3JlYXNl
ID0gKG1fa2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OworICAgIGludCB4SW5jcmVhc2UgPSAo
cGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKSAtIDEpICogNDsKICAgICAvLyBDb250YWlu
cyB0aGUgc3VtIG9mIHJnYihhKSBjb21wb25lbnRzCi0gICAgZmxvYXQgdG90YWxzWzMgKyAocHJl
c2VydmVBbHBoYVZhbHVlcyA/IDAgOiAxKV07CisgICAgZmxvYXQgdG90YWxzWzRdOwogCiAgICAg
Ly8gbV9kaXZpc29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1
cmVzIHRoaXMKLSAgICBBU1NFUlQobV9kaXZpc29yKTsKKyAgICBBU1NFUlQocGFpbnRpbmdEYXRh
LmRpdmlzb3IpOwogCiAgICAgLy8gU2tpcCB0aGUgZmlyc3QgJyhjbGlwQm90dG9tIC0geUVuZCkn
IGxpbmVzCiAgICAgcGl4ZWwgKz0gKGNsaXBCb3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAo
Y2xpcFJpZ2h0ICsgMSkgKiA0KTsKQEAgLTIyMSwyOSArMjMwLDI4IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRh
JiBwYWludGluCiAgICAgICAgIGZvciAoaW50IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4gMDsgLS14
KSB7CiAgICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0
cml4LnNpemUoKSAtIDE7CiAgICAgICAgICAgICBpbnQga2VybmVsUGl4ZWwgPSBzdGFydEtlcm5l
bFBpeGVsOwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7Cisg
ICAgICAgICAgICBpbnQgd2lkdGggPSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOwog
CiAgICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwogICAgICAgICAgICAgdG90YWxzWzFdID0gMDsK
ICAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0gICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxw
aGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKKyAgICAgICAgICAgIHRv
dGFsc1szXSA9IDA7CiAKICAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7CiAg
ICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2Vy
bmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwogICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWlu
dGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0Pihw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKICAgICAgICAg
ICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1
ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShr
ZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVz
KQorICAgICAgICAgICAgICAgIGlmICghcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxwaGEpCiAgICAg
ICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tl
cm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJh
eS5pdGVtKGtlcm5lbFBpeGVsKSk7CiAgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbDsKICAg
ICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOwogICAgICAgICAgICAgICAgIGlmICghLS13aWR0
aCkgewogICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbCArPSBrZXJuZWxJbmNyZWFzZTsK
LSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICAg
ICAgICAgICAgICAgICAgd2lkdGggPSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc2V0RGVzdGlu
YXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVlcz4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJy
YXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rpdmlzb3Is
IHBhaW50aW5nRGF0YS5iaWFzKTsKKyAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBh
aW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4
ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWlu
dGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CiAgICAgICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9
IDQ7CiAgICAgICAgIH0KICAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOwpAQCAtMjUxLDEyICsy
NTksMTIgQEAgQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRJbnRl
cmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW4KICAgICB9CiB9CiAKLUFMV0FZU19JTkxJ
TkUgaW50IEZFQ29udm9sdmVNYXRyaXg6OmdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEsIGludCB4LCBpbnQgeSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBnZXRQaXhl
bFZhbHVlKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHkpCiB7CiAgICAg
aWYgKHggPj0gMCAmJiB4IDwgcGFpbnRpbmdEYXRhLndpZHRoICYmIHkgPj0gMCAmJiB5IDwgcGFp
bnRpbmdEYXRhLmhlaWdodCkKICAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRo
ICsgeCkgPDwgMjsKIAotICAgIHN3aXRjaCAobV9lZGdlTW9kZSkgeworICAgIHN3aXRjaCAocGFp
bnRpbmdEYXRhLmVkZ2VNb2RlKSB7CiAgICAgZGVmYXVsdDogLy8gRURHRU1PREVfTk9ORQogICAg
ICAgICByZXR1cm4gLTE7CiAgICAgY2FzZSBFREdFTU9ERV9EVVBMSUNBVEU6CkBAIC0yODEsMzQg
KzI4OSwzMiBAQCBBTFdBWVNfSU5MSU5FIGludCBGRUNvbnZvbHZlTWF0cml4OjpnZXRQaXhlbFZh
bHVlKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbgogfQogCiAvLyBGb3Igb3RoZXIgcmVn
aW9ucyB0aGFuIEMKLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLXZvaWQgRkVD
b252b2x2ZU1hdHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCitzdGF0aWMgQUxXQVlTX0lOTElO
RSB2b2lkIHNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEs
IGludCB5MSwgaW50IHgyLCBpbnQgeTIpCiB7CiAgICAgaW50IHBpeGVsID0gKHkxICogcGFpbnRp
bmdEYXRhLndpZHRoICsgeDEpICogNDsKICAgICBpbnQgaGVpZ2h0ID0geTIgLSB5MTsKICAgICBp
bnQgd2lkdGggPSB4MiAtIHgxOwotICAgIGludCBiZWdpbktlcm5lbFBpeGVsWCA9IHgxIC0gbV90
YXJnZXRPZmZzZXQueCgpOworICAgIGludCBiZWdpbktlcm5lbFBpeGVsWCA9IHgxIC0gcGFpbnRp
bmdEYXRhLnRhcmdldE9mZnNldC54KCk7CiAgICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxYID0gYmVn
aW5LZXJuZWxQaXhlbFg7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxZID0geTEgLSBtX3Rhcmdl
dE9mZnNldC55KCk7CisgICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxZID0geTEgLSBwYWludGluZ0Rh
dGEudGFyZ2V0T2Zmc2V0LnkoKTsKICAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0YS53
aWR0aCAtIHdpZHRoKSAqIDQ7CiAgICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkgY29t
cG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAwIDog
MSldOworICAgIGZsb2F0IHRvdGFsc1s0XTsKIAotICAgIC8vIG1fZGl2aXNvciBjYW5ub3QgYmUg
MCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJUKG1f
ZGl2aXNvcik7CisgICAgLy8gcGFpbnRpbmdEYXRhLmRpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZF
Q29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcworICAgIEFTU0VSVChwYWludGluZ0Rh
dGEuZGl2aXNvcik7CiAKICAgICBmb3IgKGludCB5ID0gaGVpZ2h0OyB5ID4gMDsgLS15KSB7CiAg
ICAgICAgIGZvciAoaW50IHggPSB3aWR0aDsgeCA+IDA7IC0teCkgewogICAgICAgICAgICAgaW50
IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeC5zaXplKCkgLSAxOwogICAg
ICAgICAgICAgaW50IGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwogICAgICAgICAg
ICAgaW50IGtlcm5lbFBpeGVsWSA9IHN0YXJ0S2VybmVsUGl4ZWxZOwotICAgICAgICAgICAgaW50
IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAgICAgICBpbnQgd2lkdGggPSBw
YWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOwogCiAgICAgICAgICAgICB0b3RhbHNbMF0g
PSAwOwogICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKICAgICAgICAgICAgIHRvdGFsc1syXSA9
IDA7Ci0gICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAg
ICAgdG90YWxzWzNdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7CiAKICAgICAgICAg
ICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgaW50IHBpeGVs
SW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0YSwga2VybmVsUGl4ZWxYLCBrZXJuZWxQ
aXhlbFkpOwpAQCAtMzE3LDE4ICszMjMsMTggQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0
U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwgaW4KICAg
ICAgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhb
a2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxJbmRleCArIDEpKTsKICAgICAgICAgICAgICAgICAgICAgdG90YWxzWzJd
ICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDIpKTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFs
dWVzICYmIHBpeGVsSW5kZXggPj0gMCkKKyAgICAgICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0
YS5wcmVzZXJ2ZUFscGhhICYmIHBpeGVsSW5kZXggPj0gMCkKICAgICAgICAgICAgICAgICAgICAg
dG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRl
eCArIDMpKTsKICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWDsKICAgICAgICAgICAgICAg
ICAtLWtlcm5lbFZhbHVlOwogICAgICAgICAgICAgICAgIGlmICghLS13aWR0aCkgewogICAgICAg
ICAgICAgICAgICAgICBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5lbFBpeGVsWDsKICAgICAgICAg
ICAgICAgICAgICAgKytrZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0g
bV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gcGFpbnRp
bmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1
ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJh
eSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcyk7CisgICAgICAg
ICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwgcGFp
bnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMsIHBhaW50aW5nRGF0YS5kaXZp
c29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxwaGEpOwogICAg
ICAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWDsKICAgICAgICAgfQogICAgICAgICBwaXhlbCAr
PSB4SW5jcmVhc2U7CkBAIC0zMzcsMjkgKzM0Myw3IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6
ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEsIGlu
CiAgICAgfQogfQogCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhwb3ApIC8v
IERpc2FibGUgb2YgNDc4OQotI2VuZGlmCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZl
TWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50
IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQotewotICAg
IC8vIE11c3QgYmUgaW1wbGVtZW50ZWQgaGVyZSwgc2luY2UgaXQgcmVmZXJzIGFub3RoZXIgQUxX
QVlTX0lOTElORQotICAgIC8vIGZ1bmN0aW9uLCB3aGljaCBkZWZpbmVkIGluIHRoaXMgQysrIHNv
dXJjZSBmaWxlIGFzIHdlbGwKLSAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0
U2V0SW50ZXJpb3JQaXhlbHM8dHJ1ZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0
b20sIHlTdGFydCwgeUVuZCk7Ci0gICAgZWxzZQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhl
bHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlF
bmQpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQ
aXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwgaW50IHkxLCBpbnQgeDIs
IGludCB5MikKLXsKLSAgICAvLyBBbHRob3VnaCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBtb3ZlZCB0
byB0aGUgaGVhZGVyLCBpdCBpcyBpbXBsZW1lbnRlZCBoZXJlCi0gICAgLy8gYmVjYXVzZSBzZXRJ
bnRlcmlvclBpeGVscyBpcyBhbHNvIGltcGxlbWVudGVkIGhlcmUKLSAgICBpZiAobV9wcmVzZXJ2
ZUFscGhhKQotICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8dHJ1ZT4ocGFpbnRpbmdEYXRhLCB4
MSwgeTEsIHgyLCB5Mik7Ci0gICAgZWxzZQotICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8ZmFs
c2U+KHBhaW50aW5nRGF0YSwgeDEsIHkxLCB4MiwgeTIpOwotfQorfSAvLyBuYW1lc3BhY2UgRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlCiAKIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CkBAIC0zODMsMTMgKzM2NywxOCBAQCBib29s
IEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQog
CiAgICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKICAg
ICAKLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0geworICAgIEZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSA9IHsKICAgICAgICAgKnNvdXJj
ZVBpeGVsQXJyYXksCiAgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwKICAgICAgICAgcGFp
bnRTaXplLndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgbV9r
ZXJuZWxTaXplLAorICAgICAgICBtX2Rpdmlzb3IsCiAgICAgICAgIG1fYmlhcyAqIDI1NSwKLSAg
ICAgICAgbm9ybWFsaXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKKyAgICAgICAgbV90YXJnZXRP
ZmZzZXQsCisgICAgICAgIG1fZWRnZU1vZGUsCisgICAgICAgIG1fcHJlc2VydmVBbHBoYSwKKyAg
ICAgICAgRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKICAg
ICB9OwogCiAgICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscwpAQCAtNDAyLDYgKzM5
MSw4IEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAoMTAwICogMTAwKTsgLy8gRW1waXJp
Y2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKwogICAgIGlmIChpbnQgaXRlcmF0aW9u
cyA9IChhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCkgKiBhYnNvbHV0ZVBhaW50UmVjdCgpLmhl
aWdodCgpKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24pIHsKICAgICAgICAgaW50IHN0cmlkZSA9
IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOwogICAgICAgICBpbnQgY2h1bmtDb3VudCA9IChjbGlw
Qm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJpZGU7CkBAIC00MTAsMjEgKzQwMSwyMSBAQCBib29s
IEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQog
ICAgICAgICAgICAgaW50IHlTdGFydCA9IChzdHJpZGUgKiBpbmRleCk7CiAgICAgICAgICAgICBp
bnQgeUVuZCA9IHN0ZDo6bWluPGludD4oc3RyaWRlICogKGluZGV4ICsgMSksIGNsaXBCb3R0b20p
OwogCi0gICAgICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdo
dCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKKyAgICAgICAgICAgIEZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZTo6c2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNs
aXBCb3R0b20sIHlTdGFydCwgeUVuZCk7CiAgICAgICAgIH0pOwogICAgIH0gZWxzZQotICAgICAg
ICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwg
MCwgY2xpcEJvdHRvbSk7CisgICAgICAgIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZTo6c2V0SW50
ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBC
b3R0b20pOwogCiAgICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7CiAgICAg
Y2xpcEJvdHRvbSArPSBtX3RhcmdldE9mZnNldC55KCkgKyAxOwogICAgIGlmIChtX3RhcmdldE9m
ZnNldC55KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAs
IHBhaW50U2l6ZS53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkpOworICAgICAgICBGRUNvbnZv
bHZlTWF0cml4U29mdHdhcmU6OnNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgcGFp
bnRTaXplLndpZHRoKCksIG1fdGFyZ2V0T2Zmc2V0LnkoKSk7CiAgICAgaWYgKGNsaXBCb3R0b20g
PCBwYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0
YSwgMCwgY2xpcEJvdHRvbSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7
CisgICAgICAgIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZTo6c2V0T3V0ZXJQaXhlbHMocGFpbnRp
bmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdo
dCgpKTsKICAgICBpZiAobV90YXJnZXRPZmZzZXQueCgpID4gMCkKLSAgICAgICAgc2V0T3V0ZXJQ
aXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9mZnNldC55KCksIG1fdGFyZ2V0T2Zmc2V0
LngoKSwgY2xpcEJvdHRvbSk7CisgICAgICAgIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZTo6c2V0
T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9mZnNldC55KCksIG1fdGFyZ2V0
T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7CiAgICAgaWYgKGNsaXBSaWdodCA8IHBhaW50U2l6ZS53
aWR0aCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwg
bV90YXJnZXRPZmZzZXQueSgpLCBwYWludFNpemUud2lkdGgoKSwgY2xpcEJvdHRvbSk7CisgICAg
ICAgIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZTo6c2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRh
LCBjbGlwUmlnaHQsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgcGFpbnRTaXplLndpZHRoKCksIGNsaXBC
b3R0b20pOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4
IDA1YzFhODM3ZDIzNGNmNTg0ZGU4OTBmNTk0YjIyMDczZjEzMzY1YzUuLjZiN2FkZTZmMGIyMjg5
ZjM0M2U1NjgxNGZkOGMyZGU1NDQ3M2ZmOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC02
NCwxNiArNjQsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOwog
CiBwcml2YXRlOgotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5OwotICAgICAgICBVaW50OENsYW1wZWRBcnJh
eSYgZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0
OwotICAgICAgICBmbG9hdCBiaWFzOwotICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtlcm5lbE1hdHJp
eDsKLSAgICB9OwotCiAgICAgRkVDb252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiBrZXJuZWxT
aXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zm
c2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJv
b2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsKIAog
ICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJp
ZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3Qo
KSkpOyB9CkBAIC04MiwyMSArNzIsNiBAQCBwcml2YXRlOgogCiAgICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9u
VHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFW
YWx1ZXM+Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWlu
dGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50
IHlFbmQpOwotCi0gICAgQUxXQVlTX0lOTElORSBpbnQgZ2V0UGl4ZWxWYWx1ZShQYWludGluZ0Rh
dGEmLCBpbnQgeCwgaW50IHkpOwotCi0gICAgdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFs
dWVzPgotICAgIHZvaWQgZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCB4MSwg
aW50IHkxLCBpbnQgeDIsIGludCB5Mik7Ci0KLSAgICAvLyBXcmFwcGVyIGZ1bmN0aW9ucwotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQg
Y2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpOwotICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgeDEsIGlu
dCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gUGFyYWxsZWxpemF0aW9uIHBhcnRzCi0g
ICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7
IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0KICAgICBJbnRTaXpl
IG1fa2VybmVsU2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CiAgICAgZmxvYXQgbV9iaWFzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
ZmZ1c2VMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAppbmRleCAxYWFjZTlkNjlhMDkwYjRmMTBmMTNkZTc1
NTc1MWVmMjg2MjA5MWNkLi5lYzcxYjU0N2ExZGY4NmE5MTM5ZDEzYWU2MzM4Njc0Mjk1ZTk4N2Rk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlmZnVzZUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcApAQCAtMzMsNyArMzMsNyBAQCBSZWY8RkVE
aWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsbwogfQogCiBGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRp
bmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQg
ZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRp
bmcoRGlmZnVzZUxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VD
b25zdGFudCwgMCwgMCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZN
b3ZlKGxpZ2h0U291cmNlKSwgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykK
KyAgICA6IEZFTGlnaHRpbmcoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZywg
bGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIDAsIDAsIGtlcm5l
bFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpCiB7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCAzY2QwNWNjNDk1NTE3MTk5YWNkYzg4
ZWQ1MTM3NjY0MzYwNmI5MjVlLi42Y2JmNWRiZWVhZmU3NTgwOWFjYzVkY2FkM2E5Zjc3Njk1Nzhm
ODc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC01MywxMyArNTMsMTMgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBGRURpc3BsYWNlbWVudE1hcChDaGFubmVsU2VsZWN0b3JUeXBlIHhD
aGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxv
YXQpOwogCisgICAgaW50IHhDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3hDaGFubmVs
U2VsZWN0b3IgLSAxOyB9CisgICAgaW50IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisKICAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChl
bmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CiAKLSAgICBpbnQgeENoYW5uZWxJ
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KLSAgICBpbnQg
eUNoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7IH0K
LQogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ2hhbm5l
bFNlbGVjdG9yVHlwZSBtX3hDaGFubmVsU2VsZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCmlu
ZGV4IDUwYjJjMWUwMmQ5ZDg4YzkxZmNjZTg0NTJiYmM5MTk4NTE4OTRkNWUuLjdmMjQ5MjUxNzBi
ZjExY2ZiYjFhYmYwZmI2NGU4OWUyMTBiYTM3ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBA
IC0zMCwyOCArMzAsMTIxIEBACiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBVU0UoQUNDRUxFUkFURSkKICNpbmNsdWRlIDxBY2Nl
bGVyYXRlL0FjY2VsZXJhdGUuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVz
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNzaWFuQmx1cjo6
Y3JlYXRlKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUdhdXNzaWFuQmx1cih4LCB5LCBlZGdlTW9kZSkpOworfQor
CitGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlKQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6
RkVHYXVzc2lhbkJsdXIpCisgICAgLCBtX3N0ZFgoeCkKKyAgICAsIG1fc3RkWSh5KQorICAgICwg
bV9lZGdlTW9kZShlZGdlTW9kZSkKK3sKK30KKwordm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0U3Rk
RGV2aWF0aW9uWChmbG9hdCB4KQoreworICAgIG1fc3RkWCA9IHg7Cit9CisKK3ZvaWQgRkVHYXVz
c2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblkoZmxvYXQgeSkKK3sKKyAgICBtX3N0ZFkgPSB5Owor
fQorCit2b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUgZWRnZU1v
ZGUpCit7CisgICAgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOworfQogCiBzdGF0aWMgaW5saW5lIGZs
b2F0IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkKIHsKICAgICByZXR1cm4gMyAvIDQuZiAqIHNxcnRm
KDIgKiBwaUZsb2F0KTsKIH0KIAotc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUw
MDsKK3N0YXRpYyBpbnQgY2xhbXBlZFRvS2VybmVsU2l6ZShmbG9hdCB2YWx1ZSkKK3sKKyAgICAv
LyBMaW1pdCB0aGUga2VybmVsIHNpemUgdG8gNTAwLiBBIGJpZ2dlciByYWRpdXMgd29uJ3QgbWFr
ZSBhIGJpZyBkaWZmZXJlbmNlIGZvciB0aGUgcmVzdWx0IGltYWdlIGJ1dAorICAgIC8vIGluZmxh
dGVzIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHRvbyBtdWNoLiBUaGlzIGlzIGNvbXBhdGlibGUg
d2l0aCBGaXJlZm94JyBiZWhhdmlvci4KKyAgICBzdGF0aWMgY29uc3RleHByIGludCBnTWF4S2Vy
bmVsU2l6ZSA9IDUwMDsKKyAgICB1bnNpZ25lZCBzaXplID0gc3RkOjptYXg8dW5zaWduZWQ+KDIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihmbG9vcmYodmFsdWUgKiBnYXVzc2lhbktlcm5lbEZhY3Rv
cigpICsgMC41ZikpKTsKKyAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHN0ZDo6bWluKHNpemUsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihnTWF4S2VybmVsU2l6ZSkpKTsKK30KKyAgICAKK0ludFNpemUg
RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3Rk
RGV2aWF0aW9uKQoreworICAgIEFTU0VSVChzdGREZXZpYXRpb24ud2lkdGgoKSA+PSAwICYmIHN0
ZERldmlhdGlvbi5oZWlnaHQoKSA+PSAwKTsKKyAgICBJbnRTaXplIGtlcm5lbFNpemU7CiAKLW5h
bWVzcGFjZSBXZWJDb3JlIHsKKyAgICBpZiAoc3RkRGV2aWF0aW9uLndpZHRoKCkpCisgICAgICAg
IGtlcm5lbFNpemUuc2V0V2lkdGgoY2xhbXBlZFRvS2VybmVsU2l6ZShzdGREZXZpYXRpb24ud2lk
dGgoKSkpOworCisgICAgaWYgKHN0ZERldmlhdGlvbi5oZWlnaHQoKSkKKyAgICAgICAga2VybmVs
U2l6ZS5zZXRIZWlnaHQoY2xhbXBlZFRvS2VybmVsU2l6ZShzdGREZXZpYXRpb24uaGVpZ2h0KCkp
KTsKKworICAgIHJldHVybiBrZXJuZWxTaXplOworfQogCi1pbmxpbmUgdm9pZCBrZXJuZWxQb3Np
dGlvbihpbnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQs
IGludCYgZGVsdGFSaWdodCkKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5l
bFNpemUoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCit7Cisg
ICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0
ZXJTY2FsZShzdGREZXZpYXRpb24pKTsKK30KKworSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2Fs
Y3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQoreworICAgIGF1dG8ga2Vy
bmVsU2l6ZSA9IGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGREZXZpYXRpb24pOworCisg
ICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0
aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCisgICAgcmV0dXJuIHsg
MyAqIGtlcm5lbFNpemUud2lkdGgoKSAvIDIsIDMgKiBrZXJuZWxTaXplLmhlaWdodCgpIC8gMiB9
OworfQorCit2b2lkIEZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChj
b25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxh
dGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKworICAgIEZsb2F0UmVj
dCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgp
OworICAgIC8vIEVkZ2UgbW9kZXMgb3RoZXIgdGhhbiAnbm9uZScgZG8gbm90IGluZmxhdGUgdGhl
IGFmZmVjdGVkIHBhaW50IHJlY3QuCisgICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9O
RSkgeworICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29s
dXRlUGFpbnRSZWN0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSB0YWtl
IHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNl
IHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKyAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZs
YXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgYWJzb2x1dGVQYWludFJl
Y3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKKworICAgIGlmIChj
bGlwc1RvQm91bmRzKCkpCisgICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhF
ZmZlY3RSZWN0KCkpOworICAgIGVsc2UKKyAgICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUo
bWF4RWZmZWN0UmVjdCgpKTsKKworICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKK30KKworbmFtZXNwYWNlIEZFR2F1c3NpYW5CbHVy
U29mdHdhcmUgeworCitzdHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMgeworICAgIEZFR2F1
c3NpYW5CbHVyKiBmaWx0ZXI7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBpb1BpeGVs
QXJyYXk7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB0bXBQaXhlbEFycmF5OworICAg
IGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIHVuc2lnbmVkIGtlcm5lbFNpemVYOwor
ICAgIHVuc2lnbmVkIGtlcm5lbFNpemVZOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGtlcm5l
bFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRh
TGVmdCwgaW50JiBkZWx0YVJpZ2h0KQogewogICAgIC8vIENoZWNrIGh0dHA6Ly93d3cudzMub3Jn
L1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVHYXVzc2lhbkJsdXJFbGVtZW50IGZvciBkZXRhaWxzLgog
ICAgIHN3aXRjaCAoYmx1ckl0ZXJhdGlvbikgewpAQCAtNzksMzYgKzE3Miw4IEBAIGlubGluZSB2
b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBp
bnQmIGRlbHRhTGVmdCwKICAgICB9CiB9CiAKLVJlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lh
bkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lhbkJsdXIoeCwgeSwgZWRnZU1vZGUp
KTsKLX0KLQotRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHks
IEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLSAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkZFR2F1c3NpYW5CbHVyKQotICAgICwgbV9zdGRYKHgpCi0gICAgLCBtX3N0ZFkoeSkK
LSAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUpCi17Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6
OnNldFN0ZERldmlhdGlvblgoZmxvYXQgeCkKLXsKLSAgICBtX3N0ZFggPSB4OwotfQotCi12b2lk
IEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25ZKGZsb2F0IHkpCi17Ci0gICAgbV9zdGRZ
ID0geTsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlKQotewotICAgIG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsKLX0KLQogLy8gVGhpcyBm
dW5jdGlvbiBvbmx5IG9wZXJhdGVzIG9uIEFscGhhIGNoYW5uZWwuCi1pbmxpbmUgdm9pZCBib3hC
bHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50
OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwKK3N0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVy
QWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENs
YW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwKICAgICB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQs
IGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RX
aWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSkKIHsKICAg
ICBjb25zdCB1aW50OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7CkBAIC0zNzEs
MzUgKzQzNiwzOSBAQCBpbmxpbmUgdm9pZCBzdGFuZGFyZEJveEJsdXIoVWludDhDbGFtcGVkQXJy
YXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcAogICAgIH0KIH0KIAotaW5saW5l
IHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFy
cmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVk
IGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQor
c3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5
JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtl
cm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29s
IGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQogewogICAgIGludCBzdHJpZGUg
PSA0ICogcGFpbnRTaXplLndpZHRoKCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBpZiAo
a2VybmVsU2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKG1fZWRnZU1vZGUgPT0gRURHRU1PREVfTk9O
RSB8fCBtX2VkZ2VNb2RlID09IEVER0VNT0RFX0RVUExJQ0FURSkpIHsKKyAgICBpZiAoa2VybmVs
U2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKGVkZ2VNb2RlID09IEVER0VNT0RFX05PTkUgfHwgZWRn
ZU1vZGUgPT0gRURHRU1PREVfRFVQTElDQVRFKSkgewogICAgICAgICBhY2NlbGVyYXRlQm94Qmx1
cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXpl
LndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAj
ZW5kaWYKIAotICAgIHN0YW5kYXJkQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2Vy
bmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlKCks
IG1fZWRnZU1vZGUpOworICAgIHN0YW5kYXJkQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJh
eSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUlt
YWdlLCBlZGdlTW9kZSk7CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlX
b3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCisjaWYgIVVTRShBQ0NF
TEVSQVRFKQorc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtlcihCbHVyQXBwbHlQYXJhbWV0
ZXJzKiBwYXJhbWV0ZXJzKQogewogICAgIEludFNpemUgcGFpbnRTaXplKHBhcmFtZXRlcnMtPndp
ZHRoLCBwYXJhbWV0ZXJzLT5oZWlnaHQpOwotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxhdGZv
cm1BcHBseUdlbmVyaWMoKnBhcmFtZXRlcnMtPmlvUGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnRt
cFBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJzLT5rZXJuZWxT
aXplWSwgcGFpbnRTaXplKTsKKyAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYygqcGFyYW1ldGVycy0+
aW9QaXhlbEFycmF5LCAqcGFyYW1ldGVycy0+dG1wUGl4ZWxBcnJheSwgcGFyYW1ldGVycy0+a2Vy
bmVsU2l6ZVgsIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBwYWludFNpemUpOwogfQorI2VuZGlm
CiAKLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBl
ZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2ln
bmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXpl
KQorc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlv
QnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVs
U2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNB
bHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7CiAjaWYgIVVTRShBQ0NFTEVSQVRF
KQogICAgIGludCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKICAgICBpbnQgZXh0
cmFIZWlnaHQgPSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOworCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRh
dGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKICAgICBpbnQgb3B0aW1hbFRocmVhZE51bWJlciA9
IChwYWludFNpemUud2lkdGgoKSAqIHBhaW50U2l6ZS5oZWlnaHQoKSkgLyAoc19taW5pbWFsUmVj
dERpbWVuc2lvbiArIGV4dHJhSGVpZ2h0ICogcGFpbnRTaXplLndpZHRoKCkpOwogCiAgICAgaWYg
KG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7Ci0gICAgICAgIFBhcmFsbGVsSm9iczxQbGF0Zm9y
bUFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5V29ya2VyLCBvcHRp
bWFsVGhyZWFkTnVtYmVyKTsKKyAgICAgICAgUGFyYWxsZWxKb2JzPEJsdXJBcHBseVBhcmFtZXRl
cnM+IHBhcmFsbGVsSm9icygmYXBwbHlCbHVyV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsK
IAogICAgICAgICBpbnQgam9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKICAgICAg
ICAgaWYgKGpvYnMgPiAxKSB7CkBAIC00MTAsNyArNDc5LDcgQEAgaW5saW5lIHZvaWQgRkVHYXVz
c2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50
OENsYW0KIAogICAgICAgICAgICAgaW50IGN1cnJlbnRZID0gMDsKICAgICAgICAgICAgIGZvciAo
aW50IGpvYiA9IDA7IGpvYiA8IGpvYnM7IGpvYisrKSB7Ci0gICAgICAgICAgICAgICAgUGxhdGZv
cm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsK
KyAgICAgICAgICAgICAgICBCbHVyQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpv
YnMucGFyYW1ldGVyKGpvYik7CiAgICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7
CiAKICAgICAgICAgICAgICAgICBpbnQgc3RhcnRZID0gIWpvYiA/IDAgOiBjdXJyZW50WSAtIGV4
dHJhSGVpZ2h0OwpAQCAtNDU4LDY2ICs1MjcsMTAgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW0K
ICNlbmRpZgogCiAgICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhh
cHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KLSAgICBwbGF0Zm9ybUFwcGx5R2Vu
ZXJpYyhpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBw
YWludFNpemUpOwotfQotCi1zdGF0aWMgaW50IGNsYW1wZWRUb0tlcm5lbFNpemUoZmxvYXQgdmFs
dWUpCi17Ci0gICAgLy8gTGltaXQgdGhlIGtlcm5lbCBzaXplIHRvIDUwMC4gQSBiaWdnZXIgcmFk
aXVzIHdvbid0IG1ha2UgYSBiaWcgZGlmZmVyZW5jZSBmb3IgdGhlIHJlc3VsdCBpbWFnZSBidXQK
LSAgICAvLyBpbmZsYXRlcyB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCB0b28gbXVjaC4gVGhpcyBp
cyBjb21wYXRpYmxlIHdpdGggRmlyZWZveCcgYmVoYXZpb3IuCi0gICAgdW5zaWduZWQgc2l6ZSA9
IHN0ZDo6bWF4PHVuc2lnbmVkPigyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmxvb3JmKHZhbHVl
ICogZ2F1c3NpYW5LZXJuZWxGYWN0b3IoKSArIDAuNWYpKSk7Ci0gICAgcmV0dXJuIGNsYW1wVG88
aW50PihzdGQ6Om1pbihzaXplLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ01heEtlcm5lbFNpemUp
KSk7Ci19Ci0gICAgCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtl
cm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKLXsKLSAgICBBU1NFUlQoc3RkRGV2aWF0
aW9uLndpZHRoKCkgPj0gMCAmJiBzdGREZXZpYXRpb24uaGVpZ2h0KCkgPj0gMCk7Ci0gICAgSW50
U2l6ZSBrZXJuZWxTaXplOwotCi0gICAgaWYgKHN0ZERldmlhdGlvbi53aWR0aCgpKQotICAgICAg
ICBrZXJuZWxTaXplLnNldFdpZHRoKGNsYW1wZWRUb0tlcm5lbFNpemUoc3RkRGV2aWF0aW9uLndp
ZHRoKCkpKTsKLQotICAgIGlmIChzdGREZXZpYXRpb24uaGVpZ2h0KCkpCi0gICAgICAgIGtlcm5l
bFNpemUuc2V0SGVpZ2h0KGNsYW1wZWRUb0tlcm5lbFNpemUoc3RkRGV2aWF0aW9uLmhlaWdodCgp
KSk7Ci0KLSAgICByZXR1cm4ga2VybmVsU2l6ZTsKLX0KLQotSW50U2l6ZSBGRUdhdXNzaWFuQmx1
cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRTaXplIHN0
ZERldmlhdGlvbikKLXsKLSAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGZp
bHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHN0ZERldmlhdGlvbikpOwotfQotCi1JbnRTaXplIEZF
R2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24p
Ci17Ci0gICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKHN0
ZERldmlhdGlvbik7Ci0KLSAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBt
dWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1l
cy4KLSAgICByZXR1cm4geyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAqIGtlcm5lbFNp
emUuaGVpZ2h0KCkgLyAyIH07CisgICAgcGxhdGZvcm1BcHBseUdlbmVyaWMoaW9CdWZmZXIsIHRt
cFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgcGFpbnRTaXplLCBpc0FscGhh
SW1hZ2UsIGVkZ2VNb2RlKTsKIH0KIAotdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCi17Ci0gICAgSW50U2l6ZSBrZXJu
ZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7
Ci0KLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJz
b2x1dGVQYWludFJlY3QoKTsKLSAgICAvLyBFZGdlIG1vZGVzIG90aGVyIHRoYW4gJ25vbmUnIGRv
IG5vdCBpbmZsYXRlIHRoZSBhZmZlY3RlZCBwYWludCByZWN0LgotICAgIGlmIChtX2VkZ2VNb2Rl
ICE9IEVER0VNT0RFX05PTkUpIHsKLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9z
aW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0
aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJzb2x1
dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwotICAg
IGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41
Zik7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVj
dC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRl
UGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0KLSAgICBzZXRBYnNvbHV0ZVBhaW50
UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci19Cit9IC8vIG5hbWVz
cGFjZSBGRUdhdXNzaWFuQmx1clNvZnR3YXJlCiAKIGJvb2wgRkVHYXVzc2lhbkJsdXI6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKQEAgLTU0Myw3ICs1NTYs
NyBAQCBib29sIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJiBmaWx0ZXIpCiAgICAgaWYgKCF0bXBJbWFnZURhdGEpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHBsYXRmb3JtQXBwbHkoZGVzdGluYXRpb25QaXhlbEFycmF5LCAqdG1wSW1hZ2VE
YXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7
CisgICAgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZTo6cGxhdGZvcm1BcHBseShkZXN0aW5hdGlvblBp
eGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5o
ZWlnaHQoKSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UoKSwgbV9lZGdlTW9kZSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAppbmRleCBkNzRiZGFhNzJlZDMwNGY1Yjgw
MTc3YWQ2Y2NhNzc1YTViNDkzNzE3Li42NWFhNmUxODg5N2ZhOGNjOTc2OWQxZTU1N2Q3ZDI2ZjVl
NWNhMjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCkBAIC00NiwyOSArNDYsMTMgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBGRUdhdXNzaWFuQmx1cihmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5
cGUpOwogCi0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gMTAw
ICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icwotCi0gICAg
c3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVHYXVzc2lhbkJsdXIq
IGZpbHRlcjsKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBpb1BpeGVsQXJyYXk7
Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdG1wUGl4ZWxBcnJheTsKLSAgICAg
ICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0OwotICAgICAgICB1bnNpZ25lZCBrZXJu
ZWxTaXplWDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVk7Ci0gICAgfTsKLQogICAgIHZv
aWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAK
LSAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsK
LQogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJl
c2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9y
bUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAgdm9pZCBwbGF0Zm9y
bUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRl
bXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50
U2l6ZSYgcGFpbnRTaXplKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xh
bXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2ln
bmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXpl
KTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0
U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGZsb2F0
IG1fc3RkWDsKICAgICBmbG9hdCBtX3N0ZFk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCBlODNjZjNiN2Nk
NjM2ODZmMWY0NDFlNTIyOGYyYzU2YjRlYjRhMTgyLi4zOTVjMjNhMzZhZDgzM2Q0NGU0NDM2M2Q5
ZTBkYTMwMjk5ZjFlZDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTM1LDEwICszNSw4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRkVMaWdodGluZzo6RkVMaWdodGluZyhMaWdodGluZ1R5cGUg
bGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNj
YWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0
IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxV
bml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlLCBUeXBlIHR5cGUpCitG
RUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKFR5cGUgdHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29s
b3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVj
dWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNv
dXJjZSkKICAgICA6IEZpbHRlckVmZmVjdCh0eXBlKQotICAgICwgbV9saWdodGluZ1R5cGUobGln
aHRpbmdUeXBlKQotICAgICwgbV9saWdodFNvdXJjZShXVEZNb3ZlKGxpZ2h0U291cmNlKSkKICAg
ICAsIG1fbGlnaHRpbmdDb2xvcihsaWdodGluZ0NvbG9yKQogICAgICwgbV9zdXJmYWNlU2NhbGUo
c3VyZmFjZVNjYWxlKQogICAgICwgbV9kaWZmdXNlQ29uc3RhbnQoZGlmZnVzZUNvbnN0YW50KQpA
QCAtNDYsNiArNDQsNyBAQCBGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSBsaWdo
dGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbAogICAgICwgbV9zcGVjdWxh
ckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQpCiAgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhYKGtl
cm5lbFVuaXRMZW5ndGhYKQogICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWShrZXJuZWxVbml0TGVu
Z3RoWSkKKyAgICAsIG1fbGlnaHRTb3VyY2UoV1RGTW92ZShsaWdodFNvdXJjZSkpCiB7CiB9CiAK
QEAgLTg1LDYgKzg0LDggQEAgYm9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShm
bG9hdCBrZXJuZWxVbml0TGVuZ3RoWSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorbmFtZXNwYWNl
IEZFTGlnaHRpbmdTb2Z0d2FyZSB7CisKIHN0YXRpYyBjb25zdGV4cHIgaW50IGNQaXhlbFNpemUg
PSA0Owogc3RhdGljIGNvbnN0ZXhwciBpbnQgY0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7CiBzdGF0
aWMgY29uc3RleHByIHVpbnQ4X3QgY09wYXF1ZUFscGhhID0gc3RhdGljX2Nhc3Q8dWludDhfdD4o
MHhGRik7CkBAIC05NSw3ICs5Niw3NiBAQCBzdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3Ix
ZGl2MyA9IC0xIC8gMy5mOwogc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjQgPSAt
MSAvIDQuZjsKIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjJkaXYzID0gLTIgLyAzLmY7
CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wTGVmdE5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdAorc3RydWN0IEFscGhhV2luZG93IHsKKyAgICB1aW50OF90IGFs
cGhhWzNdWzNdIHsgfTsKKyAgICAKKyAgICAvLyBUaGUgaW1wbGVtZW50YXRpb25zIGFyZSBsaW5l
ZCB1cCB0byBtYWtlIGNvbXBhcmluZyBpbmRpY2VzIGVhc2llci4KKyAgICB1aW50OF90IHRvcExl
ZnQoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVswXTsgfQorICAgIHVpbnQ4
X3QgbGVmdCgpIGNvbnN0ICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzBdOyB9Cisg
ICAgdWludDhfdCBib3R0b21MZWZ0KCkgY29uc3QgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1b
MF07IH0KKworICAgIHVpbnQ4X3QgdG9wKCkgY29uc3QgICAgICAgICAgICAgICAgIHsgcmV0dXJu
IGFscGhhWzBdWzFdOyB9CisgICAgdWludDhfdCBjZW50ZXIoKSBjb25zdCAgICAgICAgICAgICAg
eyByZXR1cm4gYWxwaGFbMV1bMV07IH0KKyAgICB1aW50OF90IGJvdHRvbSgpIGNvbnN0ICAgICAg
ICAgICAgICB7IHJldHVybiBhbHBoYVsyXVsxXTsgfQorCisgICAgdm9pZCBzZXRUb3AodWludDhf
dCB2YWx1ZSkgICAgICAgICAgeyBhbHBoYVswXVsxXSA9IHZhbHVlOyB9CisgICAgdm9pZCBzZXRD
ZW50ZXIodWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsxXVsxXSA9IHZhbHVlOyB9CisgICAg
dm9pZCBzZXRCb3R0b20odWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsyXVsxXSA9IHZhbHVl
OyB9CisKKyAgICB2b2lkIHNldFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICB7IGFscGhhWzBd
WzJdID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICAgICB7
IGFscGhhWzFdWzJdID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldEJvdHRvbVJpZ2h0KHVpbnQ4X3Qg
dmFsdWUpICB7IGFscGhhWzJdWzJdID0gdmFsdWU7IH0KKworICAgIHN0YXRpYyB2b2lkIHNoaWZ0
Um93KHVpbnQ4X3QgYWxwaGFbM10pCisgICAgeworICAgICAgICBhbHBoYVswXSA9IGFscGhhWzFd
OworICAgICAgICBhbHBoYVsxXSA9IGFscGhhWzJdOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNo
aWZ0KCkKKyAgICB7CisgICAgICAgIHNoaWZ0Um93KGFscGhhWzBdKTsKKyAgICAgICAgc2hpZnRS
b3coYWxwaGFbMV0pOworICAgICAgICBzaGlmdFJvdyhhbHBoYVsyXSk7CisgICAgfQorfTsKKwor
c3RydWN0IExpZ2h0aW5nRGF0YSB7CisgICAgLy8gVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgb25s
eSByZWFkLW9ubHkgKFNNUCBzYWZlKSBkYXRhCisgICAgRkVMaWdodGluZyogZWZmZWN0OworICAg
IENvbG9yIGxpZ2h0aW5nQ29sb3I7CisgICAgZmxvYXQgc3VyZmFjZVNjYWxlOworICAgIGZsb2F0
IGRpZmZ1c2VDb25zdGFudDsKKyAgICBmbG9hdCBzcGVjdWxhckNvbnN0YW50OworICAgIGZsb2F0
IHNwZWN1bGFyRXhwb25lbnQ7CisgICAgY29uc3QgTGlnaHRTb3VyY2UqIGxpZ2h0U291cmNlOwor
ICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSogb3BlcmF0aW5nQ29sb3JTcGFjZTsKKyAg
ICBGaWx0ZXJFZmZlY3Q6OlR5cGUgZmlsdGVyVHlwZTsKKworICAgIFVpbnQ4Q2xhbXBlZEFycmF5
KiBwaXhlbHM7CisgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCB3
aWR0aERlY3JlYXNlZEJ5T25lOworICAgIGludCBoZWlnaHREZWNyZWFzZWRCeU9uZTsKKworICAg
IGlubGluZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgaW5s
aW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgIGlubGluZSBJ
bnRTaXplIHRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgIGlubGluZSBJbnRT
aXplIGxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgaW5saW5lIEludFNp
emUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmKSBjb25zdDsKKyAgICBp
bmxpbmUgSW50U2l6ZSByaWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICBp
bmxpbmUgSW50U2l6ZSBib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgIGlu
bGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICBpbmxp
bmUgSW50U2l6ZSBib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKK307CisKK3N0
cnVjdCBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMgeworICAgIExpZ2h0aW5nRGF0YSBk
YXRhOworICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOworICAgIGlu
dCB5U3RhcnQ7CisgICAgaW50IHlFbmQ7Cit9OworCitpbmxpbmUgSW50U2l6ZSBMaWdodGluZ0Rh
dGE6OnRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgY2VudGVyID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwogICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0xMDgsNyArMTc4LDcg
QEAgaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFs
KGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJ
bnRTaXplIExpZ2h0aW5nRGF0YTo6dG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAg
ICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGludCBjZW50ZXIgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBA
IC0xMjMsNyArMTkzLDcgQEAgaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRh
Ojp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKICAgICB9OwogfQogCi1pbmxpbmUgSW50
U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQp
IGNvbnN0CitpbmxpbmUgSW50U2l6ZSBMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGlu
dCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CkBAIC0xMzYsNyArMjA2LDcgQEAgaW5saW5lIEludFNpemUgRkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogICAg
IH07CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6bGVmdENv
bHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoraW5saW5lIEludFNpemUgTGlnaHRpbmdEYXRh
OjpsZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGNlbnRlciA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKICAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZz
ZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwpAQCAtMTUyLDcgKzIyMiw3
IEBAIGlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5v
cm1hbChpbnQgb2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGln
aHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5k
b3cmIGFscGhhV2luZG93KSBjb25zdAoraW5saW5lIEludFNpemUgTGlnaHRpbmdEYXRhOjppbnRl
cmlvck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYgYWxwaGFXaW5kb3cpIGNvbnN0CiB7
CiAgICAgaW50IHJpZ2h0QWxwaGFPZmZzZXQgPSBvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldDsKICAgICAKQEAgLTE4Miw3ICsyNTIsNyBAQCBpbmxpbmUgSW50U2l6ZSBG
RUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhh
V2luZG93JgogICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5n
RGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJbnRTaXpl
IExpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAg
ICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAg
LTE5OCw3ICsyNjgsNyBAQCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6
OnJpZ2h0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5l
IEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50U2l6ZSBMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGludCBy
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0yMTEsNyArMjgxLDcgQEAgaW5saW5lIEludFNp
emUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQp
IGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJbnRTaXplIExp
Z2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50
IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0yMjYs
NyArMjk2LDcgQEAgaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0
b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6
ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQp
IGNvbnN0CitpbmxpbmUgSW50U2l6ZSBMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGlu
dCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAg
IGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0yMzksMjEgKzMwOSwxNiBAQCBpbmxpbmUgSW50U2l6ZSBG
RUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNv
bnN0CiAgICAgfTsKIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBj
b25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZ
LCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yKQotewotICAgIHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0
LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZhY3RvclksIG5vcm1hbDJEVmVj
dG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci19
Ci0KLXZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBM
aWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRT
aXplIG5vcm1hbDJEVmVjdG9yLCBmbG9hdCBhbHBoYSkKK3N0YXRpYyB2b2lkIHNldFBpeGVsSW50
ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNv
dXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFj
dG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3RvciwgZmxvYXQgYWxwaGEp
CiB7CiAgICAgZmxvYXQgeiA9IGFscGhhICogZGF0YS5zdXJmYWNlU2NhbGU7Ci0gICAgTGlnaHRT
b3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIGxpZ2h0aW5nRGF0YSA9IG1fbGlnaHRTb3VyY2Ut
PmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShwYWludGluZ0RhdGEsIHgsIHksIHopOworICAgIExp
Z2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBsaWdodGluZ0RhdGEgPSBkYXRhLmxpZ2h0
U291cmNlLT5jb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsK
IAogICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7CiAgICAgaWYgKG5vcm1hbDJEVmVjdG9yLmlzWmVy
bygpKSB7CiAgICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlzIGlzIGEg
cXVpdGUgZnJlcXVlbnQgY2FzZS4KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGln
aHRpbmc6OkRpZmZ1c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2Rp
ZmZ1c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0Rh
dGEubGlnaHRWZWN0b3JMZW5ndGg7CisgICAgICAgIGlmIChkYXRhLmZpbHRlclR5cGUgPT0gRmls
dGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykKKyAgICAgICAgICAgIGxpZ2h0U3Ry
ZW5ndGggPSBkYXRhLmRpZmZ1c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56
KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGg7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7CiAgICAgICAgICAgICAgICAg
bGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKQEAgLTI2MSwxMCArMzI2LDEwIEBAIHZvaWQg
RkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0Rh
dGEmIGRhdGEsIGNvbnN0IExpCiAgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVj
dG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAogICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxl
bmd0aCgpOwotICAgICAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAg
ICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBoYWxmd2F5VmVj
dG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGg7CisgICAgICAgICAgICBpZiAoZGF0YS5zcGVj
dWxhckV4cG9uZW50ID09IDEpCisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEu
c3BlY3VsYXJDb25zdGFudCAqIGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0
aDsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9z
cGVjdWxhckNvbnN0YW50ICogcG93ZihoYWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JM
ZW5ndGgsIG1fc3BlY3VsYXJFeHBvbmVudCk7CisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0
aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoaGFsZndheVZlY3Rvci56KCkgLyBoYWxm
d2F5VmVjdG9yTGVuZ3RoLCBkYXRhLnNwZWN1bGFyRXhwb25lbnQpOwogICAgICAgICB9CiAgICAg
fSBlbHNlIHsKICAgICAgICAgRmxvYXRQb2ludDNEIG5vcm1hbFZlY3RvciA9IHsKQEAgLTI3NCw4
ICszMzksOCBAQCB2b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwg
Y29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaQogICAgICAgICB9OwogICAgICAgICBm
bG9hdCBub3JtYWxWZWN0b3JMZW5ndGggPSBub3JtYWxWZWN0b3IubGVuZ3RoKCk7CiAKLSAgICAg
ICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKLSAg
ICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIChub3JtYWxWZWN0
b3IgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGxp
Z2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CisgICAgICAgIGlmIChkYXRhLmZpbHRlclR5
cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykKKyAgICAgICAgICAg
IGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VDb25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBs
aWdodGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGxpZ2h0aW5n
RGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgRmxv
YXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7CiAgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRh
LmxpZ2h0VmVjdG9yLngoKSwKQEAgLTI4MywxMCArMzQ4LDEwIEBAIHZvaWQgRkVMaWdodGluZzo6
c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNv
bnN0IExpCiAgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxp
Z2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAogICAgICAgICAgICAgfTsKICAgICAgICAgICAg
IGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAg
ICAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxp
Z2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndh
eVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCk7Cisg
ICAgICAgICAgICBpZiAoZGF0YS5zcGVjdWxhckV4cG9uZW50ID09IDEpCisgICAgICAgICAgICAg
ICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIChub3JtYWxWZWN0b3Ig
KiBoYWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVu
Z3RoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0g
bV9zcGVjdWxhckNvbnN0YW50ICogcG93Zigobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3Rvcikg
LyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCksIG1fc3BlY3VsYXJF
eHBvbmVudCk7CisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJD
b25zdGFudCAqIHBvd2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZl
Y3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBkYXRhLnNwZWN1bGFyRXhwb25lbnQp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMDQsOCArMzY5LDEzIEBAIHZvaWQgRkVMaWdodGlu
Zzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEs
IGNvbnN0IExpCiAgICAgZGF0YS5waXhlbHMtPnNldFJhbmdlKHBpeGVsVmFsdWUsIDMsIG9mZnNl
dCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5n
RGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9y
bWFsMkRWZWN0b3IpCit7CisgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50
aW5nRGF0YSwgeCwgeSwgZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFsMkRWZWN0b3IsIGRhdGEucGl4
ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKK30KKwogLy8gVGhpcyBh
cHBlYXJzIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhlIHNhbWUgcGl4ZWwgYnVmZmVyLCBi
dXQgaXQgb25seSByZWFkcyB0aGUgYWxwaGEgY2hhbm5lbCwgYW5kIHdyaXRlcyB0aGUgbm9uLWFs
cGhhIGNoYW5uZWxzLgotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50
KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKK3N0YXRpYyB2b2lkIHBsYXRm
b3JtQXBwbHlHZW5lcmljUGFpbnQoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdo
dFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBzdGFydFksIGludCBlbmRZ
KQogewogICAgIC8vIE1ha2Ugc3VyZSBzdGFydFkgaXMgPiAwIHNpbmNlIHdlIHJlYWQgZnJvbSB0
aGUgcHJldmlvdXMgcm93IGluIHRoZSBsb29wLgogICAgIEFTU0VSVChzdGFydFkpOwpAQCAtMzM3
LDE2ICs0MDcsMTkgQEAgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50
KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHQKICAgICB9CiB9CiAKLXZvaWQg
RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVy
aWNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQorc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVy
aWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQogewot
ICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChwYXJhbWV0
ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwg
cGFyYW1ldGVycy0+eUVuZCk7CisgICAgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChwYXJhbWV0
ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwg
cGFyYW1ldGVycy0+eUVuZCk7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdl
bmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRp
bmdEYXRhJiBwYWludGluZ0RhdGEpCitzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhj
b25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSkKIHsKICAgICB1bnNpZ25lZCByb3dzVG9Qcm9jZXNzID0gZGF0YS5oZWln
aHREZWNyZWFzZWRCeU9uZSAtIDE7CiAgICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHJvd3NU
b1Byb2Nlc3MgLyA4OworICAgIAorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHNfbWluaW1hbFJl
Y3REaW1lbnNpb24gPSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJh
bGxlbCBqb2JzCiAgICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVu
c2lnbmVkPigoKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSAtIDEpICogcm93c1RvUHJvY2Vzcykg
LyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKKwogICAgIGlmIChvcHRp
bWFsVGhyZWFkTnVtYmVyID4gMSkgewogICAgICAgICAvLyBJbml0aWFsaXplIHBhcmFsbGVsIGpv
YnMKICAgICAgICAgUGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycz4g
cGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlciwgb3B0aW1hbFRocmVhZE51
bWJlcik7CkBAIC0zNjIsNyArNDM1LDYgQEAgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5
R2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmMKICAgICAg
ICAgICAgIGludCB5U3RhcnQgPSAxOwogICAgICAgICAgICAgZm9yICgtLWpvYjsgam9iID49IDA7
IC0tam9iKSB7CiAgICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJz
JiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAg
cGFyYW1zLmZpbHRlciA9IHRoaXM7CiAgICAgICAgICAgICAgICAgcGFyYW1zLmRhdGEgPSBkYXRh
OwogICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSBwYWludGluZ0RhdGE7CiAg
ICAgICAgICAgICAgICAgcGFyYW1zLnlTdGFydCA9IHlTdGFydDsKQEAgLTM3OCw3ICs0NTAsNyBA
QCB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IExpZ2h0aW5nRGF0
YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyYwogICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQo
ZGF0YSwgcGFpbnRpbmdEYXRhLCAxLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lKTsKIH0KIAot
aW5saW5lIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEm
IGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3N0
YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwg
Y29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogewogICAgIC8v
IFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkg
b24gc29tZSBwbGF0Zm9ybXMuCiAjaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElP
TkFMKSAmJiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKQEAgLTM4OCwyNiArNDYwLDE0IEBAIGlu
bGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiBk
YXRhLCBjb25zdCBMaWdodFNvdXJjCiAjZW5kaWYKIH0KIAotYm9vbCBGRUxpZ2h0aW5nOjpkcmF3
TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQorc3RhdGljIGJvb2wgZHJhd0xpZ2h0aW5nKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSkKIHsK
ICAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBMaWdodGlu
Z0RhdGEgZGF0YTsKLQotICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVp
Z2h0IChvciBib3RoKSBpcyAxIHBpeGVsLgotICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRl
ZmluZSB0aGlzIGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KLSAgICBpZiAod2lk
dGggPD0gMiB8fCBoZWlnaHQgPD0gMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZGF0
YS5waXhlbHMgPSAmcGl4ZWxzOwotICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9zdXJmYWNlU2Nh
bGUgLyAyNTUuMGY7Ci0gICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHdpZHRo
ICogY1BpeGVsU2l6ZTsKLSAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7
Ci0gICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7Ci0KLSAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50c0luQ29sb3JT
cGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZGF0
YS5saWdodGluZ0NvbG9yLnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKCpkYXRhLm9wZXJh
dGluZ0NvbG9yU3BhY2UpOwogICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNv
bG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwogCi0gICAgbV9saWdodFNvdXJjZS0+
aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKKyAgICBkYXRhLmxpZ2h0U291
cmNlLT5pbml0UGFpbnRpbmdEYXRhKCpkYXRhLmVmZmVjdCwgcGFpbnRpbmdEYXRhKTsKIAogICAg
IC8vIFRvcCBsZWZ0LgogICAgIGludCBvZmZzZXQgPSAwOwpAQCAtNDIyLDEwICs0ODIsMTAgQEAg
Ym9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRp
bmdEYXRhLCAwLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMmRpdjMsIGNGYWN0
b3IyZGl2MywgZGF0YS5ib3R0b21MZWZ0Tm9ybWFsKG9mZnNldCkpOwogCiAgICAgLy8gQm90dG9t
IHJpZ2h0LgotICAgIG9mZnNldCA9IGhlaWdodCAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemUgLSBjUGl4ZWxTaXplOworICAgIG9mZnNldCA9IChkYXRhLmhlaWdodERlY3JlYXNlZEJ5
T25lICsgMSkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsK
ICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3Jl
YXNlZEJ5T25lLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMmRpdjMsIGNGYWN0
b3IyZGl2MywgZGF0YS5ib3R0b21SaWdodE5vcm1hbChvZmZzZXQpKTsKIAotICAgIGlmICh3aWR0
aCA+PSAzKSB7CisgICAgaWYgKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA+PSAyKSB7CiAgICAg
ICAgIC8vIFRvcCByb3cuCiAgICAgICAgIG9mZnNldCA9IGNQaXhlbFNpemU7CiAgICAgICAgIGZv
ciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCAr
PSBjUGl4ZWxTaXplKQpAQCAtNDM3LDcgKzQ5Nyw3IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xp
Z2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkK
ICAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCBkYXRh
LmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS5i
b3R0b21Sb3dOb3JtYWwob2Zmc2V0KSk7CiAgICAgfQogCi0gICAgaWYgKGhlaWdodCA+PSAzKSB7
CisgICAgaWYgKGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPj0gMikgewogICAgICAgICAvLyBM
ZWZ0IGNvbHVtbi4KICAgICAgICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKICAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5
T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQpAQCAt
NDQ5LDEzICs1MDksMTMgQEAgYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFt
cGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgICAgICAgICAgc2V0
UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9u
ZSwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEucmlnaHRDb2x1bW5Ob3JtYWwo
b2Zmc2V0KSk7CiAgICAgfQogCi0gICAgaWYgKHdpZHRoID49IDMgJiYgaGVpZ2h0ID49IDMpIHsK
KyAgICBpZiAoZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID49IDIgJiYgZGF0YS5oZWlnaHREZWNy
ZWFzZWRCeU9uZSA+PSAyKSB7CiAgICAgICAgIC8vIEludGVyaW9yIHBpeGVscy4KICAgICAgICAg
cGxhdGZvcm1BcHBseShkYXRhLCBwYWludGluZ0RhdGEpOwogICAgIH0KIAotICAgIGludCBsYXN0
UGl4ZWwgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICogaGVpZ2h0OwotICAgIGlm
IChtX2xpZ2h0aW5nVHlwZSA9PSBEaWZmdXNlTGlnaHRpbmcpIHsKKyAgICBpbnQgbGFzdFBpeGVs
ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIChkYXRhLmhlaWdodERlY3JlYXNl
ZEJ5T25lICsgMSk7CisgICAgaWYgKGRhdGEuZmlsdGVyVHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBjQWxwaGFDaGFu
bmVsT2Zmc2V0OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpCiAgICAgICAgICAgICBk
YXRhLnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7CiAgICAgfSBlbHNlIHsKQEAgLTQ3MSw2
ICs1MzEsOCBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJh
eSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K30gLy8gbmFtZXNwYWNlIEZFTGlnaHRpbmdTb2Z0d2FyZQorCiBib29sIEZFTGlnaHRpbmc6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKQEAgLTQ5MCw4ICs1NTIsMzAgQEAgYm9vbCBGRUxpZ2h0aW5n
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKICAgICAvLyBvdXRwdXQgZm9y
IHZhcmlvdXMga2VybmVsVW5pdExlbmd0aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJl
bGlhYmxlLgogICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2Ug
dGhlIGltcGxlbWVudGF0aW9uCiAKLSAgICBJbnRTaXplIGFic29sdXRlUGFpbnRTaXplID0gYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZHJhd0xpZ2h0aW5nKGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVp
Z2h0KCkpOworICAgIEludFNpemUgc2l6ZSA9IEludFNpemUoYWJzb2x1dGVQYWludFJlY3QoKS5z
aXplKCkpOworCisgICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBpZiB3aWR0aCBvciBoZWlnaHQg
KG9yIGJvdGgpIGlzIDEgcGl4ZWwuCisgICAgLy8gVGhlIFczIHNwZWMgZG9lcyBub3QgZGVmaW5l
IHRoaXMgY2FzZS4gTm93IHRoZSBmaWx0ZXIganVzdCByZXR1cm5zLgorICAgIGlmIChzaXplLndp
ZHRoKCkgPD0gMiB8fCBzaXplLmhlaWdodCgpIDw9IDIpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgRkVMaWdodGluZ1NvZnR3YXJlOjpMaWdodGluZ0RhdGEgZGF0YTsKKyAgICBkYXRhLmVm
ZmVjdCA9IHRoaXM7CisgICAgZGF0YS5saWdodGluZ0NvbG9yID0gbV9saWdodGluZ0NvbG9yOwor
ICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9zdXJmYWNlU2NhbGUgLyAyNTUuMGY7CisgICAgZGF0
YS5kaWZmdXNlQ29uc3RhbnQgPSBtX2RpZmZ1c2VDb25zdGFudDsKKyAgICBkYXRhLnNwZWN1bGFy
Q29uc3RhbnQgPSBtX3NwZWN1bGFyQ29uc3RhbnQ7CisgICAgZGF0YS5zcGVjdWxhckV4cG9uZW50
ID0gbV9zcGVjdWxhckV4cG9uZW50OworICAgIGRhdGEubGlnaHRTb3VyY2UgPSBtX2xpZ2h0U291
cmNlLnB0cigpOworICAgIGRhdGEub3BlcmF0aW5nQ29sb3JTcGFjZSA9ICZvcGVyYXRpbmdDb2xv
clNwYWNlKCk7CisgICAgZGF0YS5maWx0ZXJUeXBlID0gZmlsdGVyVHlwZSgpOworCisgICAgZGF0
YS5waXhlbHMgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OworICAgIGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemUgPSBzaXplLndpZHRoKCkgKiBGRUxpZ2h0aW5nU29mdHdhcmU6OmNQaXhl
bFNpemU7CisgICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0gc2l6ZS53aWR0aCgpIC0gMTsK
KyAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gc2l6ZS5oZWlnaHQoKSAtIDE7CisKKyAg
ICBGRUxpZ2h0aW5nU29mdHdhcmU6OmRyYXdMaWdodGluZyhkYXRhKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuaAppbmRleCBhZDJmYzI4ZmE5ZTdmNGJmMjkxM2Q2N2I5ODA1N2Y4ZWVi
YjA4ZGIyLi4wY2Q1MDMzNTMwZDk0ZjUyZTE0ZjE2M2UzMWI5ZjliZjQzYjI2NTA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuaApAQCAtMjksOSArMjksNiBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9Gb3J3YXJkLmg+Ci0KLS8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBGRURpZmZ1c2VM
aWdodGluZyBhbmQgRkVTcGVjdWxhckxpZ2h0aW5nCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNTQsMTAxICs1MSwxNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgTGlnaHRTb3VyY2UmIGxpZ2h0
U291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9saWdodFNvdXJjZS5nZXQoKTsgfQogCiBwcm90ZWN0
ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gMTAwICog
MTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icwotCi0gICAgZW51
bSBMaWdodGluZ1R5cGUgewotICAgICAgICBEaWZmdXNlTGlnaHRpbmcsCi0gICAgICAgIFNwZWN1
bGFyTGlnaHRpbmcKLSAgICB9OwotICAgIAotICAgIHN0cnVjdCBBbHBoYVdpbmRvdyB7Ci0gICAg
ICAgIHVpbnQ4X3QgYWxwaGFbM11bM10geyB9OwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIGlt
cGxlbWVudGF0aW9ucyBhcmUgbGluZWQgdXAgdG8gbWFrZSBjb21wYXJpbmcgaW5kaWNlcyBlYXNp
ZXIuCi0gICAgICAgIHVpbnQ4X3QgdG9wTGVmdCgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJu
IGFscGhhWzBdWzBdOyB9Ci0gICAgICAgIHVpbnQ4X3QgbGVmdCgpIGNvbnN0ICAgICAgICAgICAg
ICAgIHsgcmV0dXJuIGFscGhhWzFdWzBdOyB9Ci0gICAgICAgIHVpbnQ4X3QgYm90dG9tTGVmdCgp
IGNvbnN0ICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzBdOyB9Ci0KLSAgICAgICAgdWludDhf
dCB0b3AoKSBjb25zdCAgICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMF1bMV07IH0KLSAg
ICAgICAgdWludDhfdCBjZW50ZXIoKSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFb
MV1bMV07IH0KLSAgICAgICAgdWludDhfdCBib3R0b20oKSBjb25zdCAgICAgICAgICAgICAgeyBy
ZXR1cm4gYWxwaGFbMl1bMV07IH0KLQotICAgICAgICB2b2lkIHNldFRvcCh1aW50OF90IHZhbHVl
KSAgICAgICAgICB7IGFscGhhWzBdWzFdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRDZW50
ZXIodWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsxXVsxXSA9IHZhbHVlOyB9Ci0gICAgICAg
IHZvaWQgc2V0Qm90dG9tKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxwaGFbMl1bMV0gPSB2YWx1
ZTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wUmlnaHQodWludDhfdCB2YWx1ZSkgICAgIHsgYWxw
aGFbMF1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldFJpZ2h0KHVpbnQ4X3QgdmFsdWUp
ICAgICAgICB7IGFscGhhWzFdWzJdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRCb3R0b21S
aWdodCh1aW50OF90IHZhbHVlKSAgeyBhbHBoYVsyXVsyXSA9IHZhbHVlOyB9Ci0KLSAgICAgICAg
c3RhdGljIHZvaWQgc2hpZnRSb3codWludDhfdCBhbHBoYVszXSkKLSAgICAgICAgewotICAgICAg
ICAgICAgYWxwaGFbMF0gPSBhbHBoYVsxXTsKLSAgICAgICAgICAgIGFscGhhWzFdID0gYWxwaGFb
Ml07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2hpZnQoKQotICAgICAgICB7
Ci0gICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVswXSk7Ci0gICAgICAgICAgICBzaGlmdFJvdyhh
bHBoYVsxXSk7Ci0gICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVsyXSk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgc3RydWN0IExpZ2h0aW5nRGF0YSB7Ci0gICAgICAgIC8vIFRoaXMgc3RydWN0
dXJlIGNvbnRhaW5zIG9ubHkgcmVhZC1vbmx5IChTTVAgc2FmZSkgZGF0YQotICAgICAgICBVaW50
OENsYW1wZWRBcnJheSogcGl4ZWxzOwotICAgICAgICBmbG9hdCBzdXJmYWNlU2NhbGU7Ci0gICAg
ICAgIGludCB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHdpZHRoRGVj
cmVhc2VkQnlPbmU7Ci0gICAgICAgIGludCBoZWlnaHREZWNyZWFzZWRCeU9uZTsKLQotICAgICAg
ICBpbmxpbmUgSW50U2l6ZSB0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAg
ICBpbmxpbmUgSW50U2l6ZSB0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAg
IGlubGluZSBJbnRTaXplIHRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAg
ICBpbmxpbmUgSW50U2l6ZSBsZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAg
ICAgICBpbmxpbmUgSW50U2l6ZSBpbnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRv
dyYpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSByaWdodENvbHVtbk5vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tTGVmdE5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUm93Tm9ybWFs
KGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21SaWdodE5v
cm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICB9OwotCi0gICAgc3RydWN0IFBsYXRmb3JtQXBw
bHlHZW5lcmljUGFyYW1ldGVycyB7Ci0gICAgICAgIEZFTGlnaHRpbmcqIGZpbHRlcjsKLSAgICAg
ICAgTGlnaHRpbmdEYXRhIGRhdGE7Ci0gICAgICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEg
cGFpbnRpbmdEYXRhOwotICAgICAgICBpbnQgeVN0YXJ0OwotICAgICAgICBpbnQgeUVuZDsKLSAg
ICB9OwotCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIoUGxhdGZv
cm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKik7Ci0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBs
eU5lb25Xb3JrZXIoRkVMaWdodGluZ1BhaW50aW5nRGF0YUZvck5lb24qKTsKLQotICAgIEZFTGln
aHRpbmcoTGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3Vy
ZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQs
IGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmLCBUeXBlKTsKLQotICAgIGJvb2wg
ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiwgaW50LCBpbnQpOwotCi0gICAgdm9pZCBz
ZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJj
ZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0
b3JZLCBJbnRTaXplIG5vcm1hbFZlY3Rvcik7Ci0gICAgdm9pZCBzZXRQaXhlbEludGVybmFsKGlu
dCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGlu
Z0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNp
emUgbm9ybWFsVmVjdG9yLCBmbG9hdCBhbHBoYSk7CisgICAgRkVMaWdodGluZyhUeXBlLCBjb25z
dCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNl
Q29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExp
Z2h0U291cmNlPiYmKTsKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29u
c3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CiAKICAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseShjb25z
dCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7Ci0KLSAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29u
c3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCBzdGFydFgsIGludCBzdGFydFkpOwot
ICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3Qg
TGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwotCiAjaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUo
QVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKICAgICBzdGF0aWMg
aW50IGdldFBvd2VyQ29lZmZpY2llbnRzKGZsb2F0IGV4cG9uZW50KTsKICAgICBpbmxpbmUgdm9p
ZCBwbGF0Zm9ybUFwcGx5TmVvbihjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJj
ZTo6UGFpbnRpbmdEYXRhJik7CiAjZW5kaWYKIAotICAgIExpZ2h0aW5nVHlwZSBtX2xpZ2h0aW5n
VHlwZTsKLSAgICBSZWY8TGlnaHRTb3VyY2U+IG1fbGlnaHRTb3VyY2U7Ci0KICAgICBDb2xvciBt
X2xpZ2h0aW5nQ29sb3I7CiAgICAgZmxvYXQgbV9zdXJmYWNlU2NhbGU7CiAgICAgZmxvYXQgbV9k
aWZmdXNlQ29uc3RhbnQ7CkBAIC0xNTYsNyArNjksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgZmxvYXQg
bV9zcGVjdWxhckV4cG9uZW50OwogICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFg7CiAgICAg
ZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICBSZWY8TGlnaHRTb3VyY2U+IG1fbGlnaHRT
b3VyY2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApp
bmRleCA0MzI4OGQ5ZTU5MmYwMjgyODM4NDJlNzkyNGI3MTE1ZmM4ZjZjMjc2Li4wOWY4ZWUyYzEx
NDhiYjU4ZTQ5MjI3NzZkYTkwYWE0ZmRhMjYwNTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC04
MywyMyArODMsNDAgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CiB9CiAKK25hbWVzcGFjZSBGRU1vcnBob2xvZ3lTb2Z0
d2FyZSB7CisKK3N0cnVjdCBQYWludGluZ0RhdGEgeworICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUgdHlwZTsKKyAgICBpbnQgcmFkaXVzWDsKKyAgICBpbnQgcmFkaXVzWTsKKyAgICBjb25zdCBV
aW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJheTsKKyAgICBVaW50OENsYW1wZWRBcnJheSog
ZHN0UGl4ZWxBcnJheTsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsKK307CisKK3N0
cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7CisgICAgaW50IHN0YXJ0WTsKKyAgICBpbnQg
ZW5kWTsKKyAgICBjb25zdCBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKK307CisKIHN0YXRp
YyBpbmxpbmUgaW50IHBpeGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGludCB3aWR0aCkKIHsK
ICAgICByZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsKIH0KIAotaW5saW5lIENvbG9yQ29tcG9u
ZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2Vk
Q29sb3I6OlJHQkEgcGl4ZWwpCitzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEg
cGl4ZWwpCiB7CiAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGFzU1JHQkEocGl4ZWwpKTsK
IH0KIAotaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29t
cG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGNvbXBvbmVudHMpCitz
dGF0aWMgaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29t
cG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGNvbXBvbmVudHMpCiB7
CiAgICAgcmV0dXJuIFBhY2tlZENvbG9yOjpSR0JBIHsgbWFrZUZyb21Db21wb25lbnRzPFNSR0JB
PHVpbnQ4X3Q+Pihjb21wb25lbnRzKSB9OwogfQogCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBt
aW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0IENvbG9y
Q29tcG9uZW50czx1aW50OF90LCA0PiYgYikKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYiwgTW9ycGhvbG9n
eU9wZXJhdG9yVHlwZSB0eXBlKQogewogICAgIGlmICh0eXBlID09IEZFTU9SUEhPTE9HWV9PUEVS
QVRPUl9FUk9ERSkKICAgICAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1pbihhLCBiKTsKQEAgLTEw
Nyw0NyArMTI0LDI5IEBAIEFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IG1pbk9yTWF4KGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90CiAgICAgcmV0dXJuIHBlckNv
bXBvbmVudE1heChhLCBiKTsKIH0KIAotdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0
eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0
cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQg
eVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoKQorc3RhdGljIEFMV0FZU19JTkxJTkUgQ29sb3JD
b21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0
aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQogewogICAgIGF1dG8gZXh0cmVtdW0gPSBt
YWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4
ZWxBcnJheUluZGV4KHgsIHlTdGFydCwgd2lkdGgpKSB9KTsKIAogICAgIGZvciAoaW50IHkgPSB5
U3RhcnQgKyAxOyB5IDwgeUVuZDsgKyt5KSB7CiAgICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtlQ29s
b3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJh
eUluZGV4KHgsIHksIHdpZHRoKSkgfSk7Ci0gICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8dHlw
ZT4oZXh0cmVtdW0sIHBpeGVsKTsKKyAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heChleHRyZW11
bSwgcGl4ZWwsIHR5cGUpOwogICAgIH0KICAgICByZXR1cm4gZXh0cmVtdW07CiB9CiAKLUFMV0FZ
U19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50
IHlFbmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQotewotICAgIGlm
ICh0eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKLSAgICAgICAgcmV0dXJuIGNv
bHVtbkV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERT4oc3JjUGl4ZWxBcnJheSwg
eCwgeVN0YXJ0LCB5RW5kLCB3aWR0aCk7Ci0KLSAgICByZXR1cm4gY29sdW1uRXh0cmVtdW08RkVN
T1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURT4oc3JjUGl4ZWxBcnJheSwgeCwgeVN0YXJ0LCB5RW5k
LCB3aWR0aCk7Ci19Ci0KIHVzaW5nIENvbHVtbkV4dHJlbWEgPSBWZWN0b3I8Q29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+LCAxNj47CiAKLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5cGUg
dHlwZT4KLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4
dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCkKK3N0YXRpYyBBTFdBWVNfSU5MSU5F
IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5F
eHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKIHsKICAgICBhdXRv
IGV4dHJlbXVtID0ga2VybmVsWzBdOwogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwga2VybmVs
LnNpemUoKTsgKytpKQotICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4PHR5cGU+KGV4dHJlbXVt
LCBrZXJuZWxbaV0pOworICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4KGV4dHJlbXVtLCBrZXJu
ZWxbaV0sIHR5cGUpOwogCiAgICAgcmV0dXJuIGV4dHJlbXVtOwogfQogCi1BTFdBWVNfSU5MSU5F
IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5F
eHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAo
dHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBrZXJu
ZWxFeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU+KGtlcm5lbCk7Ci0KLSAgICBy
ZXR1cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURT4oa2VybmVs
KTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IFBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKK3N0YXRpYyB2
b2lkIHBsYXRvZnJtQXBwbHlHZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKIHsKICAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7CiAK
QEAgLTE3MywyOCArMTcyLDI4IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2Vu
ZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0CiAKICAgICAgICAg
Ly8gV2Ugc3RhcnQgYXQgdGhlIGxlZnQgZWRnZSwgc28gY29tcHV0ZSBleHRyZW1lIGZvciB0aGUg
cmFkaXVzWCBjb2x1bW5zLgogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJhZGl1c1g7ICsr
eCkKLSAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJy
YXksIHgsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgsIG1fdHlwZSkpOworICAgICAg
ICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCwgeVJh
ZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFpbnRpbmdEYXRhLnR5cGUpKTsKIAogICAg
ICAgICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNvbHVtbgogICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKICAgICAgICAgICAgIGlmICh4
IDwgd2lkdGggLSByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVt
bkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRp
dXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKKyAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChj
b2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4ICsgcmFkaXVzWCwgeVJhZGl1c1N0YXJ0LCB5
UmFkaXVzRW5kLCB3aWR0aCwgcGFpbnRpbmdEYXRhLnR5cGUpKTsKIAogICAgICAgICAgICAgaWYg
KHggPiByYWRpdXNYKQogICAgICAgICAgICAgICAgIGV4dHJlbWEucmVtb3ZlKDApOwogCiAgICAg
ICAgICAgICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+
KGRzdFBpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7Ci0g
ICAgICAgICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRz
KGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEsIG1fdHlwZSkpLnZhbHVlOworICAgICAgICAgICAgKmRl
c3RQaXhlbCA9IG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhrZXJuZWxFeHRyZW11
bShleHRyZW1hLCBwYWludGluZ0RhdGEudHlwZSkpLnZhbHVlOwogICAgICAgICB9CiAgICAgfQog
fQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5
UGFyYW1ldGVycyogcGFyYW0pCitzdGF0aWMgdm9pZCBwbGF0b2ZybUFwcGx5V29ya2VyKFBsYXRm
b3JtQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbSkKIHsKLSAgICBwYXJhbS0+ZmlsdGVyLT5wbGF0Zm9y
bUFwcGx5R2VuZXJpYygqcGFyYW0tPnBhaW50aW5nRGF0YSwgcGFyYW0tPnN0YXJ0WSwgcGFyYW0t
PmVuZFkpOworICAgIHBsYXRvZnJtQXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRpbmdEYXRhLCBw
YXJhbS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorc3RhdGljIHZvaWQg
cGxhdG9mcm1BcHBseShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKIHsKICAgICAv
LyBFbXBpcmljYWxseSwgcnVudGltZSBpcyBhcHByb3hpbWF0ZWx5IGxpbmVhciBvdmVyIHJlYXNv
bmFibGUga2VybmVsIHNpemVzIHdpdGggYSBzbG9wZSBvZiBhYm91dCAwLjY1LgogICAgIGZsb2F0
IGtlcm5lbEZhY3RvciA9IHNxcnQocGFpbnRpbmdEYXRhLnJhZGl1c1ggKiBwYWludGluZ0RhdGEu
cmFkaXVzWSkgKiAwLjY1OwpAQCAtMjA0LDcgKzIwMyw3IEBAIHZvaWQgRkVNb3JwaG9sb2d5Ojpw
bGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogICAgIHVuc2ln
bmVkIG1heE51bVRocmVhZHMgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC8gODsKICAgICB1bnNpZ25l
ZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KChwYWludGluZ0RhdGEu
d2lkdGggKiBwYWludGluZ0RhdGEuaGVpZ2h0ICoga2VybmVsRmFjdG9yKSAvIG1pbmltYWxBcmVh
LCBtYXhOdW1UaHJlYWRzKTsKICAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAg
ICAgICAgUGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMo
JldlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVdvcmtlciwgb3B0aW1hbFRocmVh
ZE51bWJlcik7CisgICAgICAgIFBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycz4g
cGFyYWxsZWxKb2JzKCZwbGF0b2ZybUFwcGx5V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsK
ICAgICAgICAgYXV0byBudW1PZlRocmVhZHMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7
CiAgICAgICAgIGlmIChudW1PZlRocmVhZHMgPiAxKSB7CiAgICAgICAgICAgICAvLyBTcGxpdCB0
aGUgam9iIGludG8gImpvYlNpemUiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMgdGhh
dCBuZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQpAQCAtMjE0LDcgKzIxMyw2IEBAIHZv
aWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhKQogICAgICAgICAgICAgaW50IGN1cnJlbnRZID0gMDsKICAgICAgICAgICAgIGZvciAo
aW50IGpvYiA9IG51bU9mVGhyZWFkcyAtIDE7IGpvYiA+PSAwOyAtLWpvYikgewogICAgICAgICAg
ICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbSA9IHBhcmFsbGVsSm9icy5wYXJh
bWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBwYXJhbS5maWx0ZXIgPSB0aGlzOwogICAgICAg
ICAgICAgICAgIHBhcmFtLnN0YXJ0WSA9IGN1cnJlbnRZOwogICAgICAgICAgICAgICAgIGN1cnJl
bnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBqb2JTaXplICsgMSA6IGpvYlNpemU7CiAgICAg
ICAgICAgICAgICAgcGFyYW0uZW5kWSA9IGN1cnJlbnRZOwpAQCAtMjI2LDE5ICsyMjQsMTYgQEAg
dm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHkoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEpCiAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWQgbW9kZWwKICAg
ICB9CiAKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5n
RGF0YS5oZWlnaHQpOworICAgIHBsYXRvZnJtQXBwbHlHZW5lcmljKHBhaW50aW5nRGF0YSwgMCwg
cGFpbnRpbmdEYXRhLmhlaWdodCk7CiB9CiAKLWJvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50
UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCitzdGF0aWMgYm9vbCBp
c0RlZ2VuZXJhdGUoaW50IHJhZGl1c1gsIGludCByYWRpdXNZKQogewotICAgIGlmIChyYWRpdXNY
IDwgMCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpKSB7Ci0gICAgICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICAgICAgaW4tPmNvcHlQcmVt
dWx0aXBsaWVkUmVzdWx0KGRzdFBpeGVsQXJyYXksIGltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JT
cGFjZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gcmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFy
YWRpdXNZKTsKIH0KIAorfSAvLyBuYW1lc3BhY2UgRkVNb3JwaG9sb2d5U29mdHdhcmUKKwogYm9v
bCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRl
cikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CkBAIC0yNTQsOCAr
MjQ5LDEwIEBAIGJvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAKICAg
ICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0U2l6ZShtX3JhZGl1c1gsIG1f
cmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBp
eGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdo
dCgpKSkKKyAgICBpZiAoRkVNb3JwaG9sb2d5U29mdHdhcmU6OmlzRGVnZW5lcmF0ZShyYWRpdXMu
d2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkgeworICAgICAgICBpbi0+Y29weVByZW11bHRpcGxp
ZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0
aW5nQ29sb3JTcGFjZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAgYXV0
byBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2lu
Z1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5
KQpAQCAtMjY1LDE4ICsyNjIsMjIgQEAgYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWlu
KGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXMud2lkdGgoKSk7CiAgICAgaW50
IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1
cy5oZWlnaHQoKSk7CiAKLSAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGluYXRp
b25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzWCwgcmFkaXVzWSkpCisgICAg
aWYgKEZFTW9ycGhvbG9neVNvZnR3YXJlOjppc0RlZ2VuZXJhdGUocmFkaXVzWCwgcmFkaXVzWSkp
IHsKKyAgICAgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBGRU1vcnBob2xvZ3lTb2Z0d2FyZTo6UGFp
bnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKyAgICBwYWludGluZ0RhdGEudHlwZSA9IG1fdHlwZTsK
KyAgICBwYWludGluZ0RhdGEucmFkaXVzWCA9IGNlaWxmKHJhZGl1c1gpOworICAgIHBhaW50aW5n
RGF0YS5yYWRpdXNZID0gY2VpbGYocmFkaXVzWSk7CiAgICAgCi0gICAgUGFpbnRpbmdEYXRhIHBh
aW50aW5nRGF0YTsKICAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVs
QXJyYXkuZ2V0KCk7CiAgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVzdGluYXRp
b25QaXhlbEFycmF5OwogICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdp
bmdSZWN0LndpZHRoKCkpOwogICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBjZWlsZihlZmZlY3RE
cmF3aW5nUmVjdC5oZWlnaHQoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihy
YWRpdXNYKTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kpOwogCi0g
ICAgcGxhdGZvcm1BcHBseShwYWludGluZ0RhdGEpOworICAgIEZFTW9ycGhvbG9neVNvZnR3YXJl
OjpwbGF0b2ZybUFwcGx5KHBhaW50aW5nRGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9y
cGhvbG9neS5oCmluZGV4IDI4OGVlYTBlMWUyMTNjZTMyZDgxNzMwYjYxOTlkZDVlMDQxYzk2M2Qu
LjU4OTUwMmE2ZjViYzZkMjBiOGUxOWVhOWZmNTdjYTc4OTI1ZDgyNjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
aApAQCAtNTMsMjkgKzUzLDYgQEAgcHJpdmF0ZToKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50
OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBp
bnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpOwotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0g
ICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5KiBzcmNQaXhlbEFycmF5OwotICAgICAgICBV
aW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAg
ICAgICBpbnQgaGVpZ2h0OwotICAgICAgICBpbnQgcmFkaXVzWDsKLSAgICAgICAgaW50IHJhZGl1
c1k7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7Ci0gICAg
ICAgIEZFTW9ycGhvbG9neSogZmlsdGVyOwotICAgICAgICBpbnQgc3RhcnRZOwotICAgICAgICBp
bnQgZW5kWTsKLSAgICAgICAgY29uc3QgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7Ci0gICAg
fTsKLQotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBh
cmFtZXRlcnMqKTsKLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseShjb25zdCBQYWludGluZ0RhdGEm
KTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYsIGlu
dCBzdGFydFksIGludCBlbmRZKTsKLQogICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbV90eXBl
OwogICAgIGZsb2F0IG1fcmFkaXVzWDsKICAgICBmbG9hdCBtX3JhZGl1c1k7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdo
dGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3Bl
Y3VsYXJMaWdodGluZy5jcHAKaW5kZXggNjA3YTcxYzRjZjM1ZjU2ZDRhMjJmY2Y1MDI2ZjE0MmI1
MTdlNzBkNy4uYWM2MmIxMjA3MDdkYzZkOWY0NTBiYjVjYjkxMzc5MDA5MDRlYTk2MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFy
TGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcApAQCAtMzMsNyArMzMsNyBAQCBSZWY8RkVTcGVjdWxh
ckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgbGlnaHRp
bmdDb2xvciwgZgogfQogCiBGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhj
b25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVj
dWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNv
dXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwg
c3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJu
ZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZykKKyAgICA6IEZFTGlnaHRpbmco
RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1
cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVs
VW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkKIHsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IGRhNDc0ZjQxMDVmMTY0ZTRkZGVlNDhiNmNhYjlk
YjhmODNhMWE3ZmUuLjU1NzcxYWQ4OTg0MWIzNWY3OTI1NTBmN2Q1ZDcxNGZmNTgxNTFhZmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTM0LDIwICszNCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotLyoKLSAgICBQcm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAy
XS4gQWxnb3JpdGhtIGlzOgotICAgIHIgPSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5kQW1w
bGl0dWRlID0gMTY4MDcgYW5kCi0gICAgbSA9IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0
NzQ4MzY0NywgciA9IHNlZWQuCi0gICAgU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMx
IG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKLSAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNo
b3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2NQotICAgIGFzIHRoZSAxMCwwMDB0aCBn
ZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCi0qLwotc3RhdGljIGNv
bnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsKLXN0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1h
eGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKiozMSAtIDEKLXN0YXRpYyBjb25zdCBpbnQgc19yYW5k
QW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290IG9mIG0KLXN0YXRpYyBj
b25zdCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKLXN0YXRpYyBjb25zdCBpbnQgc19y
YW5kUiA9IDI4MzY7IC8vIG0gJSBhCi0KIFJlZjxGRVR1cmJ1bGVuY2U+IEZFVHVyYnVsZW5jZTo6
Y3JlYXRlKFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBi
YXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGls
ZXMpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUdXJidWxlbmNlKHR5cGUsIGJhc2VG
cmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMp
KTsKQEAgLTExMiwxOCArOTgsNzggQEAgYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRpbGVz
KGJvb2wgc3RpdGNoKQogICAgIHJldHVybiB0cnVlOwogfQogCituYW1lc3BhY2UgRkVUdXJidWxl
bmNlU29mdHdhcmUgeworCiAvLyBUaGUgdHVyYnVsZW5jZSBjYWxjdWxhdGlvbiBjb2RlIGlzIGFu
IGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVhcnMgaW4gdGhlIFNWRyAxLjEgc3BlY2lmaWNh
dGlvbjoKIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1
bGVuY2UKIAotLy8gQ29tcHV0ZSBwc2V1ZG8gcmFuZG9tIG51bWJlci4KLWlubGluZSBsb25nIEZF
VHVyYnVsZW5jZTo6UGFpbnRpbmdEYXRhOjpyYW5kb20oKQotewotICAgIGxvbmcgcmVzdWx0ID0g
c19yYW5kQW1wbGl0dWRlICogKHNlZWQgJSBzX3JhbmRRKSAtIHNfcmFuZFIgKiAoc2VlZCAvIHNf
cmFuZFEpOwotICAgIGlmIChyZXN1bHQgPD0gMCkKLSAgICAgICAgcmVzdWx0ICs9IHNfcmFuZE1h
eGltdW07Ci0gICAgc2VlZCA9IHJlc3VsdDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQorLyoKKyAg
ICBQcm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAyXS4gQWxnb3JpdGht
IGlzOgorICAgIHIgPSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5kQW1wbGl0dWRlID0gMTY4
MDcgYW5kCisgICAgbSA9IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9
IHNlZWQuCisgICAgU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBwLiAx
MTk1LCBPY3QuIDE5ODgKKyAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3VsZCBwcm9kdWNl
IHRoZSByZXN1bHQgMTA0MzYxODA2NQorICAgIGFzIHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVt
YmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCisqLworc3RhdGljIGNvbnN0IGludCBzX3Bl
cmxpbk5vaXNlID0gNDA5NjsKK3N0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1heGltdW0gPSAyMTQ3
NDgzNjQ3OyAvLyAyKiozMSAtIDEKK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0dWRlID0g
MTY4MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290IG9mIG0KK3N0YXRpYyBjb25zdCBpbnQgc19y
YW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7
IC8vIG0gJSBhCisKK3N0YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7CitzdGF0aWMg
Y29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9ja1NpemUgLSAxOworCitzdHJ1Y3QgUGFpbnRp
bmdEYXRhIHsKKyAgICBQYWludGluZ0RhdGEoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgbG9uZyBz
ZWVkLCBib29sIHN0aXRjaFRpbGVzLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUpCisgICAg
ICAgIDogdHlwZSh0eXBlKQorICAgICAgICAsIGJhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lY
KQorICAgICAgICAsIGJhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQorICAgICAgICAsIG51
bU9jdGF2ZXMobnVtT2N0YXZlcykKKyAgICAgICAgLCBzZWVkKHNlZWQpCisgICAgICAgICwgc3Rp
dGNoVGlsZXMoc3RpdGNoVGlsZXMpCisgICAgICAgICwgcGFpbnRpbmdTaXplKHBhaW50aW5nU2l6
ZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gQ29tcHV0ZSBwc2V1ZG8gcmFuZG9tIG51bWJlci4K
KyAgICBpbmxpbmUgbG9uZyByYW5kb20oKQorICAgIHsKKyAgICAgICAgbG9uZyByZXN1bHQgPSBz
X3JhbmRBbXBsaXR1ZGUgKiAoc2VlZCAlIHNfcmFuZFEpIC0gc19yYW5kUiAqIChzZWVkIC8gc19y
YW5kUSk7CisgICAgICAgIGlmIChyZXN1bHQgPD0gMCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBz
X3JhbmRNYXhpbXVtOworICAgICAgICBzZWVkID0gcmVzdWx0OworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGU7CisgICAgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVg7CisgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVk7CisgICAgaW50IG51bU9jdGF2ZXM7
CisgICAgbG9uZyBzZWVkOworICAgIGJvb2wgc3RpdGNoVGlsZXM7CisgICAgSW50U2l6ZSBwYWlu
dGluZ1NpemU7CisKKyAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBzX2Jsb2NrU2l6ZSArIDJd
OworICAgIGZsb2F0IGdyYWRpZW50WzRdWzIgKiBzX2Jsb2NrU2l6ZSArIDJdWzJdOworfTsKKwor
c3RydWN0IFN0aXRjaERhdGEgeworICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93IG11Y2ggdG8g
c3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgorICAgIGludCB3cmFwWCB7IDAgfTsgLy8g
TWluaW11bSB2YWx1ZSB0byB3cmFwLgorICAgIGludCBoZWlnaHQgeyAwIH07CisgICAgaW50IHdy
YXBZIHsgMCB9OworfTsKKworc3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKKyAgICBJ
bnRSZWN0IGZpbHRlclJlZ2lvbjsKKyAgICBGbG9hdFNpemUgZmlsdGVyU2NhbGU7CisgICAgVWlu
dDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7CisgICAgUGFpbnRpbmdEYXRhKiBwYWludGluZ0Rh
dGE7CisgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOworICAgIGludCBzdGFydFk7CisgICAgaW50
IGVuZFk7Cit9OwogCiBpbmxpbmUgZmxvYXQgc21vb3RoQ3VydmUoZmxvYXQgdCkKIHsKQEAgLTEz
NSw5ICsxODEsOSBAQCBpbmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xhdGlvbihmbG9hdCB0LCBm
bG9hdCBhLCBmbG9hdCBiKQogICAgIHJldHVybiBhICsgdCAqIChiIC0gYSk7CiB9CiAKLXZvaWQg
RkVUdXJidWxlbmNlOjppbml0UGFpbnQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCitzdGF0
aWMgUGFpbnRpbmdEYXRhIGluaXRQYWludGluZ0RhdGEoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxv
YXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywg
bG9uZyBzZWVkLCBib29sIHN0aXRjaFRpbGVzLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUp
CiB7Ci0gICAgZmxvYXQgbm9ybWFsaXphdGlvbkZhY3RvcjsKKyAgICBQYWludGluZ0RhdGEgcGFp
bnRpbmdEYXRhKHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZl
cywgc2VlZCwgc3RpdGNoVGlsZXMsIHBhaW50aW5nU2l6ZSk7CiAKICAgICAvLyBUaGUgc2VlZCB2
YWx1ZSBjbGFtcCB0byB0aGUgcmFuZ2UgWzEsIHNfcmFuZE1heGltdW0gLSAxXS4KICAgICBpZiAo
cGFpbnRpbmdEYXRhLnNlZWQgPD0gMCkKQEAgLTE1NCw3ICsyMDAsNyBAQCB2b2lkIEZFVHVyYnVs
ZW5jZTo6aW5pdFBhaW50KFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogICAgICAgICAgICAg
ICAgIGdyYWRpZW50WzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9t
KCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKICAg
ICAgICAgICAgICAgICBncmFkaWVudFsxXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdE
YXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19ibG9j
a1NpemU7CiAgICAgICAgICAgICB9IHdoaWxlICghZ3JhZGllbnRbMF0gJiYgIWdyYWRpZW50WzFd
KTsKLSAgICAgICAgICAgIG5vcm1hbGl6YXRpb25GYWN0b3IgPSBzdGQ6Omh5cG90KGdyYWRpZW50
WzBdLCBncmFkaWVudFsxXSk7CisgICAgICAgICAgICBmbG9hdCBub3JtYWxpemF0aW9uRmFjdG9y
ID0gc3RkOjpoeXBvdChncmFkaWVudFswXSwgZ3JhZGllbnRbMV0pOwogICAgICAgICAgICAgZ3Jh
ZGllbnRbMF0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKICAgICAgICAgICAgIGdyYWRpZW50WzFd
IC89IG5vcm1hbGl6YXRpb25GYWN0b3I7CiAgICAgICAgIH0KQEAgLTE3NiwxMSArMjIyLDEzIEBA
IHZvaWQgRkVUdXJidWxlbmNlOjppbml0UGFpbnQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEp
CiAgICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUg
KyBpXVsxXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKICAgICAgICAg
fQogICAgIH0KKworICAgIHJldHVybiBwYWludGluZ0RhdGE7CiB9CiAKLUZFVHVyYnVsZW5jZTo6
U3RpdGNoRGF0YSBGRVR1cmJ1bGVuY2U6OmNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6
ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0Citz
dGF0aWMgU3RpdGNoRGF0YSBjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0
JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZLCBib29sIHN0aXRjaFRpbGVz
KQogewotICAgIGlmICghbV9zdGl0Y2hUaWxlcykKKyAgICBpZiAoIXN0aXRjaFRpbGVzKQogICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgZmxvYXQgdGlsZVdpZHRoID0gdGlsZVNpemUud2lkdGgo
KTsKQEAgLTIxNyw3ICsyNjUsNyBAQCBGRVR1cmJ1bGVuY2U6OlN0aXRjaERhdGEgRkVUdXJidWxl
bmNlOjpjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JgogfQogCiAvLyBU
aGlzIGlzIHRha2VuIDE6MSBmcm9tIFNWRyBzcGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcx
MS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxlbWVudC4KLUNvbG9yQ29tcG9uZW50czxmbG9h
dCwgND4gRkVUdXJidWxlbmNlOjpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhLCBjb25zdCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lz
ZVZlY3RvcikgY29uc3QKK3N0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNlMkQo
Y29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRj
aERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKQogewogICAgIHN0cnVjdCBOb2lz
ZVBvc2l0aW9uIHsKICAgICAgICAgaW50IGluZGV4OyAvLyBieDAsIGJ5MCBpbiB0aGUgc3BlYyB0
ZXh0LgpAQCAtMjU0LDcgKzMwMiw3IEBAIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJi
dWxlbmNlOjpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhCiAgICAgTm9p
c2VQb3NpdGlvbiBub2lzZVkobm9pc2VWZWN0b3IueSgpKTsKIAogICAgIC8vIElmIHN0aXRjaGlu
ZywgYWRqdXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgotICAgIGlmIChtX3N0aXRjaFRp
bGVzKSB7CisgICAgaWYgKHBhaW50aW5nRGF0YS5zdGl0Y2hUaWxlcykgewogICAgICAgICBub2lz
ZVguc3RpdGNoKHN0aXRjaERhdGEud2lkdGgsIHN0aXRjaERhdGEud3JhcFgpOwogICAgICAgICBu
b2lzZVkuc3RpdGNoKHN0aXRjaERhdGEuaGVpZ2h0LCBzdGl0Y2hEYXRhLndyYXBZKTsKICAgICB9
CkBAIC0zMzMsMTMgKzM4MSwxMyBAQCBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQwogICAgIH07CiB9
CiAKLUNvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1
cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBT
dGl0Y2hEYXRhIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorc3Rh
dGljIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVG
b3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0
Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBDb2xvckNvbXBvbmVudHM8
ZmxvYXQsIDQ+IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdDsKICAgICBGbG9hdFBvaW50IG5vaXNl
VmVjdG9yKHBvaW50LngoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgp
ICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lZKTsKICAgICBmbG9hdCByYXRpbyA9IDE7Ci0g
ICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgbV9udW1PY3RhdmVzOyArK29jdGF2ZSkg
ewotICAgICAgICBpZiAobV90eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCisg
ICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgcGFpbnRpbmdEYXRhLm51bU9jdGF2ZXM7
ICsrb2N0YXZlKSB7CisgICAgICAgIGlmIChwYWludGluZ0RhdGEudHlwZSA9PSBUdXJidWxlbmNl
VHlwZTo6RnJhY3RhbE5vaXNlKQogICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0
ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvcikgLyByYXRp
bzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9
IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvcikuYWJzKCkgLyBy
YXRpbzsKQEAgLTM0OCw3ICszOTYsNyBAQCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVU
dXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdAogICAgICAg
ICBub2lzZVZlY3Rvci5zZXRZKG5vaXNlVmVjdG9yLnkoKSAqIDIpOwogICAgICAgICByYXRpbyAq
PSAyOwogCi0gICAgICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7CisgICAgICAgIGlmIChwYWludGlu
Z0RhdGEuc3RpdGNoVGlsZXMpIHsKICAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFsdWVz
LiBTdWJ0cmFjdGluZyBzX3Blcmxpbk5vaXNlIGJlZm9yZSB0aGUgbXVsdGlwbGljYXRpb24gYW5k
CiAgICAgICAgICAgICAvLyBhZGRpbmcgaXQgYWZ0ZXJ3YXJkIHNpbXBsaWZpZXMgdG8gc3VidHJh
Y3RpbmcgaXQgb25jZS4KICAgICAgICAgICAgIHN0aXRjaERhdGEud2lkdGggKj0gMjsKQEAgLTM2
MCwyMCArNDA4LDE5IEBAIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2U6
OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0CiAKICAgICAvLyBUaGUgdmFs
dWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVu
Y3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1KSAvIDIgYnkgZnJhY3RhbE5vaXNlCiAgICAgLy8gYW5k
ICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCi0gICAgaWYg
KG1fdHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQorICAgIGlmIChwYWludGlu
Z0RhdGEudHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQogICAgICAgICB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsg
MC41ZjsKIAogICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VG
dW5jdGlvblJlc3VsdCk7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKGNvbnN0
IEZpbHRlciYgZmlsdGVyLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgUGFp
bnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0
WSwgaW50IGVuZFkpIGNvbnN0CitzdGF0aWMgdm9pZCBwbGF0b2ZybUFwcGx5R2VuZXJpYyhjb25z
dCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVp
bnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKIHsKICAg
ICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7CiAKLSAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbiA9IGFi
c29sdXRlUGFpbnRSZWN0KCk7CiAgICAgRmxvYXRQb2ludCBwb2ludCgwLCBmaWx0ZXJSZWdpb24u
eSgpICsgc3RhcnRZKTsKICAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5lbCA9IHN0YXJ0WSAqIChm
aWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAyKTsKLSAgICBGbG9hdFNpemUgaW52ZXJzZVNjYWxlID0g
eyAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZpbHRlci5maWx0ZXJTY2Fs
ZSgpLmhlaWdodCgpIH07CisgICAgRmxvYXRTaXplIGludmVyc2VTY2FsZSA9IHsgMSAvIGZpbHRl
clNjYWxlLndpZHRoKCksIDEgLyBmaWx0ZXJTY2FsZS5oZWlnaHQoKSB9OwogCiAgICAgZm9yIChp
bnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgewogICAgICAgICBwb2ludC5zZXRZKHBvaW50
LnkoKSArIDEpOwpAQCAtMzg4LDQ1ICs0MzUsMjMgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxS
ZWdpb24oY29uc3QgRmlsdGVyJiBmaWx0ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmEK
ICAgICB9CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdp
b25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQorc3RhdGljIHZvaWQgcGxhdG9mcm1BcHBseVdvcmtl
cihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKIHsKLSAgICBwYXJhbWV0ZXJz
LT5lZmZlY3QtPmZpbGxSZWdpb24oKnBhcmFtZXRlcnMtPmZpbHRlciwgKnBhcmFtZXRlcnMtPnBp
eGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnN0aXRjaERh
dGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7CisgICAgcGxhdG9mcm1B
cHBseUdlbmVyaWMocGFyYW1ldGVycy0+ZmlsdGVyUmVnaW9uLCBwYXJhbWV0ZXJzLT5maWx0ZXJT
Y2FsZSwgKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEs
IHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+
ZW5kWSk7CiB9CiAKLWJvb2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCitzdGF0aWMgdm9pZCBwbGF0b2ZybUFwcGx5KGNvbnN0IEludFJl
Y3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFt
cGVkQXJyYXkmIHBpeGVsQXJyYXksIFN0aXRjaERhdGEmIHN0aXRjaERhdGEsIFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhKQogewotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBj
cmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhl
bEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGludCBoZWln
aHQgPSBmaWx0ZXJSZWdpb24uaGVpZ2h0KCk7CisgICAgdW5zaWduZWQgYXJlYSA9IGZpbHRlclJl
Z2lvbi5hcmVhKCk7CiAKLSAgICBJbnRTaXplIHJlc3VsdFNpemUoYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpOworICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9
ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icy4K
IAotICAgIGlmIChyZXN1bHRTaXplLmlzRW1wdHkoKSkgewotICAgICAgICBkZXN0aW5hdGlvblBp
eGVsQXJyYXkuemVyb0ZpbGwoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
SW50U2l6ZSB0aWxlU2l6ZSA9IHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpLnNpemUoKSk7Ci0KLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCA9IG1fYmFzZUZyZXF1ZW5j
eVg7Ci0gICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVkgPSBtX2Jhc2VGcmVxdWVuY3lZOwotICAgIFN0
aXRjaERhdGEgc3RpdGNoRGF0YSA9IGNvbXB1dGVTdGl0Y2hpbmcodGlsZVNpemUsIGJhc2VGcmVx
dWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7Ci0KLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRh
KG1fc2VlZCwgdGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7Ci0gICAg
aW5pdFBhaW50KHBhaW50aW5nRGF0YSk7Ci0KLSAgICBhdXRvIGFyZWEgPSByZXN1bHRTaXplLmFy
ZWEoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGludCBoZWlnaHQgPSByZXN1bHRTaXplLmhlaWdodCgpOwotCi0gICAgdW5zaWdu
ZWQgbWF4TnVtVGhyZWFkcyA9IGhlaWdodCAvIDg7CisgICAgdW5zaWduZWQgbWF4TnVtVGhyZWFk
cyA9IGZpbHRlclJlZ2lvbi5oZWlnaHQoKSAvIDg7CiAgICAgdW5zaWduZWQgb3B0aW1hbFRocmVh
ZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPihhcmVhIC8gc19taW5pbWFsUmVjdERpbWVuc2lv
biwgbWF4TnVtVGhyZWFkcyk7CisKICAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsK
LSAgICAgICAgUGFyYWxsZWxKb2JzPEZpbGxSZWdpb25QYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMo
JldlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlciwgb3B0aW1hbFRocmVhZE51
bWJlcik7CisgICAgICAgIFBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFy
YWxsZWxKb2JzKCZwbGF0b2ZybUFwcGx5V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKIAog
ICAgICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKICAgICAgICAgYXV0byBudW1Kb2Jz
ID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwpAQCAtNDM3LDEwICs0NjIsMTAgQEAgYm9v
bCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRl
cikKICAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0WSA9IDA7CiAKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2JzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBGaWxs
UmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihpKTsKLSAg
ICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gJmZpbHRlcjsKLSAgICAgICAgICAgICAgICBw
YXJhbXMuZWZmZWN0ID0gdGhpczsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9
ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CisgICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseVBh
cmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoaSk7CisgICAgICAgICAg
ICAgICAgcGFyYW1zLmZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsKKyAgICAgICAgICAgICAg
ICBwYXJhbXMuZmlsdGVyU2NhbGUgPSBmaWx0ZXJTY2FsZTsKKyAgICAgICAgICAgICAgICBwYXJh
bXMucGl4ZWxBcnJheSA9ICZwaXhlbEFycmF5OwogICAgICAgICAgICAgICAgIHBhcmFtcy5wYWlu
dGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5zdGl0Y2hE
YXRhID0gc3RpdGNoRGF0YTsKICAgICAgICAgICAgICAgICBwYXJhbXMuc3RhcnRZID0gc3RhcnRZ
OwpAQCAtNDUxLDEyICs0NzYsMzggQEAgYm9vbCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8g
c2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFk
IG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKGZpbHRlciwg
ZGVzdGluYXRpb25QaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdo
dCk7CisgICAgcGxhdG9mcm1BcHBseUdlbmVyaWMoZmlsdGVyUmVnaW9uLCBmaWx0ZXJTY2FsZSwg
cGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworfQorCit9
IC8vIG5hbWVzcGFjZSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZQorCitib29sIEZFVHVyYnVsZW5jZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1
ZmZlci0+ZGF0YSgpOworCisgICAgSW50U2l6ZSByZXN1bHRTaXplKGFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpKTsKKyAgICBpZiAocmVzdWx0U2l6ZS5hcmVhKCkuaGFzT3ZlcmZsb3dlZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGF1dG8gdGlsZVNpemUgPSByb3VuZGVkSW50U2l6ZShmaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5zaXplKCkpOworICAgIGF1dG8gc3RpdGNoRGF0YSA9IEZF
VHVyYnVsZW5jZVNvZnR3YXJlOjpjb21wdXRlU3RpdGNoaW5nKHRpbGVTaXplLCBtX2Jhc2VGcmVx
dWVuY3lYLCBtX2Jhc2VGcmVxdWVuY3lZLCBtX3N0aXRjaFRpbGVzKTsKKyAgICBhdXRvIHBhaW50
aW5nRGF0YSA9IEZFVHVyYnVsZW5jZVNvZnR3YXJlOjppbml0UGFpbnRpbmdEYXRhKG1fdHlwZSwg
bV9iYXNlRnJlcXVlbmN5WCwgbV9iYXNlRnJlcXVlbmN5WSwgbV9udW1PY3RhdmVzLCBtX3NlZWQs
IG1fc3RpdGNoVGlsZXMsIHRpbGVTaXplKTsKKworICAgIEZFVHVyYnVsZW5jZVNvZnR3YXJlOjpw
bGF0b2ZybUFwcGx5KGFic29sdXRlUGFpbnRSZWN0KCksIGZpbHRlci5maWx0ZXJTY2FsZSgpLCBk
ZXN0aW5hdGlvblBpeGVsQXJyYXksIHN0aXRjaERhdGEsIHBhaW50aW5nRGF0YSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmluZGV4IGU2OThiMzEzZjE4ODYyNTAwMzRiMDY1
OTBkMWUyYjNlZDZkYzM5ODguLjdjNDdjNzg3NDliODU2ZmM5ZjkxYWY4NGM2MTM0Y2Y0N2RmMDZl
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNTgsNjQgKzU4LDEzIEBAIHB1YmxpYzoKICAgICBib29s
IHNldFN0aXRjaFRpbGVzKGJvb2wpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBpbnQg
c19ibG9ja1NpemUgPSAyNTY7Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrTWFzayA9IHNf
YmxvY2tTaXplIC0gMTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVu
c2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwg
am9icy4KLQotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBQYWludGluZ0RhdGEo
bG9uZyBwYWludGluZ1NlZWQsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAgOiBzZWVkKHBh
aW50aW5nU2VlZCkKLSAgICAgICAgICAgICwgZmlsdGVyU2l6ZShwYWludGluZ1NpemUpCi0gICAg
ICAgICAgICAsIGJhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQotICAgICAgICAgICAgLCBi
YXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAg
ICAgICAgbG9uZyBzZWVkOwotICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBzX2Jsb2Nr
U2l6ZSArIDJdOwotICAgICAgICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9ja1NpemUgKyAy
XVsyXTsKLSAgICAgICAgSW50U2l6ZSBmaWx0ZXJTaXplOwotICAgICAgICBmbG9hdCBiYXNlRnJl
cXVlbmN5WDsKLSAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVk7Ci0KLSAgICAgICAgaW5saW5l
IGxvbmcgcmFuZG9tKCk7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTdGl0Y2hEYXRhIHsKLSAgICAg
ICAgU3RpdGNoRGF0YSgpID0gZGVmYXVsdDsKLQotICAgICAgICBpbnQgd2lkdGggeyAwIH07IC8v
IEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KLSAgICAgICAgaW50
IHdyYXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCi0gICAgICAgIGludCBoZWln
aHQgeyAwIH07Ci0gICAgICAgIGludCB3cmFwWSB7IDAgfTsKLSAgICB9OwotCi0gICAgc3RydWN0
IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgY29uc3QgRmlsdGVyKiBmaWx0ZXI7Ci0g
ICAgICAgIEZFVHVyYnVsZW5jZSogZWZmZWN0OwotICAgICAgICBVaW50OENsYW1wZWRBcnJheSog
cGl4ZWxBcnJheTsKLSAgICAgICAgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7Ci0gICAgICAg
IFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKLSAgICAgICAgaW50IHN0YXJ0WTsKLSAgICAgICAgaW50
IGVuZFk7Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIoRmlsbFJl
Z2lvblBhcmFtZXRlcnMqKTsKLQogICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwgZmxv
YXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywg
ZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKICAgICB2b2lkIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJl
Y3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotICAgIGJvb2wgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdE
YXRhJik7Ci0gICAgU3RpdGNoRGF0YSBjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUs
IGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZKSBjb25zdDsKLSAg
ICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiwg
Y29uc3QgU3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBDb2xvckNv
bXBvbmVudHM8dWludDhfdCwgND4gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29u
c3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owot
ICAgIHZvaWQgZmlsbFJlZ2lvbihjb25zdCBGaWx0ZXImLCBVaW50OENsYW1wZWRBcnJheSYsIGNv
bnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25z
dDsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlk
ZTsKIAotICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXBy
ZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVHVyYnVsZW5jZVR5cGUgbV90
eXBlOwogICAgIGZsb2F0IG1fYmFzZUZyZXF1ZW5jeVg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAppbmRleCBjMDc1
MjYzMTRmN2U3NzgxMjVlMDA1N2JiMDNiMTFjZjlkMDE3YjViLi44MjQ4MjY4Y2RlY2RiZTg4MDY4
ZDUyYzFlMDA1NDJiNWJhMWUzZDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTEyOSwxNCArMTI5LDYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZp
bHRlckVmZmVjdCogaW4sIGNvbnN0IGludCkgeyBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOyB9CiAgICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xv
clNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOwogICAgIAotICAgIHN0YXRpYyBW
ZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVz
KQotICAgIHsKLSAgICAgICAgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkVmFsdWVzKHZhbHVlcy5z
aXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQodmFs
dWVzW2ldKTsKLSAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Ci0gICAgfQotCiBwcm90
ZWN0ZWQ6CiAgICAgRmlsdGVyRWZmZWN0KFR5cGUpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCmluZGV4IDk0
ZDE5NTAxMzlkNmQyNDNhODY2MWU1ZWE1NWQyMzVhNzM4OWY1ZDUuLjhkYjhlNTY1OTdiYWJlYzg2
ODYxNjgzZmY4ZTA1ODI4OGM3MTI2ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKQEAgLTY1LDcgKzY1LDcgQEAg
cHVibGljOgogICAgIExpZ2h0VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAg
ICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJikgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0Rh
dGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYp
IGNvbnN0ID0gMDsKICAgICAvLyB6IGlzIGEgZmxvYXQgbnVtYmVyLCBzaW5jZSBpdCBpcyB0aGUg
YWxwaGEgdmFsdWUgc2NhbGVkIGJ5IGEgdXNlcgogICAgIC8vIHNwZWNpZmllZCAic3VyZmFjZVNj
YWxlIiBjb25zdGFudCwgd2hpY2ggdHlwZSBpcyA8bnVtYmVyPiBpbiB0aGUgU1ZHIHN0YW5kYXJk
LgogICAgIC8vIHggYW5kIHkgYXJlIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgRmlsdGVyRWZm
ZWN0J3MgYnVmZmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKaW5kZXggMWFiNWUxOWUxMWE0
ZjM2ZWEyYTQyNmE3NTAzODc5MTI4ZjU0YjQ0Yi4uYzJkODc0OTNiMjhkZTM4NjEzZTNlMjAyODRm
ZmUyZmY0MjVmZWUyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCkBAIC0zNiw3ICszNiw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBQb2ludExpZ2h0U291cmNlOjppbml0
UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0Rh
dGEmKQordm9pZCBQb2ludExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRl
ckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmKSBjb25zdAogewogICAgIG1fYnVm
ZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVm
ZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkpOwogICAgIC8vIFRvIHNjYWxlIFosIG1hcCBh
IHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9u
IGJ5IHouCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1BvaW50TGlnaHRTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCmluZGV4IDY3YTNhMGJkMzlhOGE5Y2MxOTU0MzQ5
ODU5NmQ3MTE1ZjRiYjk1YTUuLjQyYzNkYzYxNzg4NTIyZWM3ODdjYWVlMmFjMzRhOGUzMmY5ZGJk
NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
UG9pbnRMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAg
ICBib29sIHNldFkoZmxvYXQpIG92ZXJyaWRlOwogICAgIGJvb2wgc2V0WihmbG9hdCkgb3ZlcnJp
ZGU7CiAKLSAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFp
bnRpbmdEYXRhJikgb3ZlcnJpZGU7CisgICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZp
bHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIENvbXB1dGVk
TGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEm
LCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0IGZpbmFsOwogCiAgICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOwpAQCAtNTIsNyArNTIsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIEZsb2F0UG9pbnQz
RCBtX3VzZXJTcGFjZVBvc2l0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX2J1ZmZlclBvc2l0aW9u
OworICAgIG11dGFibGUgRmxvYXRQb2ludDNEIG1fYnVmZmVyUG9zaXRpb247CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKaW5kZXggNzE2MDdhYjAw
ZmY5ZDZhNmQwMTY5MWQ5YmJiODU1M2QxZjM0OGQwMC4uZTdjN2MwNGVkZWVkODcyZTc5YTIyM2Jk
YWQ4NmE5MWVkMzNmMDIyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcApAQCAtNDEsNyArNDEs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBhY2NvcmRpbmcgdG8gdGhlIFNWRyAxLjEgU0Ug
bGlnaHQgcmVncmVzc2lvbiB0ZXN0cwogc3RhdGljIGNvbnN0IGZsb2F0IGFudGlBbGlhc1RyZXNo
b2xkID0gMC4wMTZmOwogCi12b2lkIFNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShj
b25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEpCit2b2lkIFNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJF
ZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpIGNvbnN0CiB7
CiAgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNl
clNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CiAgICAgLy8gVG8gc2Nh
bGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUg
eCBkaXJlY3Rpb24gYnkgei4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCmluZGV4IDM1MTUxNjM1MDc3ZWVm
MGU3M2MyNmFlNDQyYTVlYTUzNGZkMWYzYmYuLjJlZGQ5MzA5OWQ5NzI4MmIwNmQ3YzE5ZTc3Mjdk
NzVkNjQyZTljNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KSBvdmVycmlkZTsKICAgICBi
b29sIHNldExpbWl0aW5nQ29uZUFuZ2xlKGZsb2F0KSBvdmVycmlkZTsKIAotICAgIHZvaWQgaW5p
dFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRp
bmdEYXRhJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgQ29tcHV0ZWRMaWdodGluZ0RhdGEgY29tcHV0
ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxv
YXQgeikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkBAIC02OCw3ICs2OCw3
IEBAIHByaXZhdGU6CiAgICAgRmxvYXRQb2ludDNEIG1fdXNlclNwYWNlUG9zaXRpb247CiAgICAg
RmxvYXRQb2ludDNEIG1fdXNlclNwYWNlUG9pbnRzQXQ7CiAKLSAgICBGbG9hdFBvaW50M0QgbV9i
dWZmZXJQb3NpdGlvbjsKKyAgICBtdXRhYmxlIEZsb2F0UG9pbnQzRCBtX2J1ZmZlclBvc2l0aW9u
OwogCiAgICAgZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50OwogICAgIGZsb2F0IG1fbGltaXRpbmdD
b25lQW5nbGU7Cg==
</data>
<flag name="commit-queue"
          id="469875"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444771</attachid>
            <date>2021-11-18 19:02:07 -0800</date>
            <delta_ts>2021-11-18 19:52:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232832-20211118190206.patch</filename>
            <type>text/plain</type>
            <size>128701</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1OTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTcxNGQ5N2NiNDk1OTE2
ZjQ5ZDc5YWUwOGIzNjBjZjhiMjM4ODJkYS4uODE5YWI4NGI0Zjg5YzNhZWFkMTI2Mjc5NzljZWUw
ZWMxY2YxOTk1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMiBAQAorMjAyMS0xMS0xOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1ha2UgdGhlIHNvZnR3YXJlIGZpbHRlcnMgZnVuY3Rpb25zIHN0YXRpYyBhbmQgcmVtb3ZlIHRo
ZW0gZnJvbSB0aGUgRmlsdGVyRWZmZWN0IGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjgzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgc3RlcCBpcyByZXF1aXJlZCB0byBtb3ZlIHRo
ZSBGaWx0ZXJFZmZlY3Qgc29mdHdhcmUgY29kZSB0byBzZXBhcmF0ZQorICAgICAgICBmaWxlcy4g
U2luY2UgdGhlIEZpbHRlckVmZmVjdCBjYW4gYmUgYXBwbGllZCB3aXRoIHRoZSBhY2NlbGVyYXRl
ZCBDb3JlSW1hZ2UKKyAgICAgICAgb3IgdGhlICB1bmFjY2VsZXJhdGVkIHNvZnR3YXJlIG1ldGhv
ZHMsIGl0IG1ha2Ugc2Vuc2UgdG8gcmVtb3ZlIHRoZSBzb2Z0d2FyZQorICAgICAgICBjb2RlIGZy
b20gdGhlIEZpbHRlckVmZmVjdCBjbGFzc2VzLgorCisgICAgICAgIFRoZSBwbGFuIGlzIHRvIGhh
dmUgdGhlIHNvZnR3YXJlIGNvZGUgaW4gc2VwYXJhdGUgY2xhc3Nlcy9maWxlcy4gQnV0IHRoZQor
ICAgICAgICBmaXJzdCBzdGVwIGlzIHRvIHJlbW92ZSB0aGUgY2xhc3MgbWVtYmVycyBhbmQgbWFr
ZSB0aGVtIHN0YXRpYyBtZXRob2RzLgorICAgICAgICBBbmQgYmVjYXVzZSB0aGUgdW5pZmllZCBi
dWlsZCBzeXN0ZW0gY2FuIGNhdXNlIHN0YXRpYyBtZXRob2Qgb3Igc3RydWN0dXJlCisgICAgICAg
IG5hbWVzIHRvIGNvbGxpZGUsIHdlIGFyZSBnb2luZyB0byBwdXQgdGhpcyBjb2RlIGluc2lkZSBk
aWZmZXJlbnQgbmFtZXNwYWNlcworICAgICAgICBmb3Igbm93LgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzdGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3Vy
Y2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVD
b21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1
ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6bm9y
bWFsaXplZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmU6
OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJp
eFNvZnR3YXJlOjplZmZlY3RUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhT
b2Z0d2FyZTo6YXBwbHlQbGF0Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6bWF0cml4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNhdHVyYXRlQW5kSHVlUm90YXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Omx1bWluYW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjplZmZlY3RBcHBseUFjY2VsZXJhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVm
ZmVjdFR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5oOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlU2F0dXJhdGVDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmU6OmNvbXB1dGVJZGVu
dGl0eVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2Fy
ZTo6Y29tcHV0ZVRhYnVsYXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmU6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZTo6Y29tcHV0ZUxpbmVhclRhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZTo6Y29tcHV0ZUdhbW1hVGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlOjpjb21w
dXRlTG9va3VwVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0
ZUxpbmVhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZSk6
CisgICAgICAgIChXZWJDb3JlOjpjbGFtcEJ5dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6YXJpdGhtZXRpY1NvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlOjpzZXREZXN0aW5hdGlvblBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmU6OnNldEludGVyaW9yUGl4ZWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZTo6Z2V0UGl4ZWxWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmU6OnNldE91dGVy
UGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpjbGFtcFJHQkFWYWx1ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpzZXREZXN0aW5hdGlvblBpeGVscyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQaXhlbHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0
T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJp
eDo6c2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgIChXZWJD
b3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eENoYW5uZWxJbmRleCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eUNoYW5uZWxJbmRleCBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
R2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6c2V0U3RkRGV2aWF0aW9uWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6c2V0RWRnZU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBlZFRvS2VybmVsU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJu
ZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJu
ZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRz
ZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJl
OjprZXJuZWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3
YXJlOjpib3hCbHVyQWxwaGFPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVy
U29mdHdhcmU6OnBsYXRmb3JtQXBwbHlHZW5lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyU29mdHdhcmU6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZTo6cGxhdGZvcm1BcHBseSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKGdh
dXNzaWFuS2VybmVsRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omtlcm5lbFBv
c2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJveEJsdXJBbHBoYU9ubHkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpz
dGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
R2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Z1NvZnR3YXJlOjpBbHBoYVdpbmRvdzo6dG9wTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nU29mdHdhcmU6OkFscGhhV2luZG93OjpsZWZ0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpBbHBoYVdpbmRvdzo6
dG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6QWxwaGFX
aW5kb3c6OmNlbnRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdh
cmU6OkFscGhhV2luZG93Ojpib3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZ1NvZnR3YXJlOjpBbHBoYVdpbmRvdzo6c2V0VG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmdTb2Z0d2FyZTo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6CisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpBbHBoYVdpbmRvdzo6c2V0VG9wUmlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpBbHBoYVdpbmRvdzo6c2V0
UmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpBbHBoYVdpbmRv
dzo6c2V0Qm90dG9tUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
OjpBbHBoYVdpbmRvdzo6c2hpZnRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1Nv
ZnR3YXJlOjpBbHBoYVdpbmRvdzo6c2hpZnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Z1NvZnR3YXJlOjpMaWdodGluZ0RhdGE6OnRvcExlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkxpZ2h0aW5nRGF0
YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1Nv
ZnR3YXJlOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFs
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6TGlnaHRpbmdE
YXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmU6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1hbCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93
Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6TGln
aHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmU6OnNldFBpeGVsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZ1NvZnR3YXJlOjpzZXRQaXhlbCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmU6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OnBsYXRmb3JtQXBwbHlHZW5lcmljKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6cGxhdGZvcm1BcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OmRyYXdMaWdodGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
dG9wUm93Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0
YTo6aW50ZXJpb3JOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnRO
b3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmlj
UGFpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1B
cHBseUdlbmVyaWNXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpkcmF3TGlnaHRpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
QWxwaGFXaW5kb3c6OnRvcExlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6
Y2VudGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFs
cGhhV2luZG93Ojpib3R0b20gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcFJpZ2h0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRS
aWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRv
dzo6c2V0Qm90dG9tUmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6QWxwaGFXaW5kb3c6OnNoaWZ0Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OkFscGhhV2luZG93OjpzaGlmdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5U29mdHdhcmU6Om1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZTo6bWFrZVBpeGVsVmFsdWVG
cm9tQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3
YXJlOjptaW5Pck1heCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZTo6
Y29sdW1uRXh0cmVtdW0pOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmU6
Omtlcm5lbEV4dHJlbXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJl
OjpwbGF0b2ZybUFwcGx5R2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lT
b2Z0d2FyZTo6cGxhdG9mcm1BcHBseVdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBo
b2xvZ3lTb2Z0d2FyZTo6cGxhdG9mcm1BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBo
b2xvZ3lTb2Z0d2FyZTo6aXNEZWdlbmVyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhv
bG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OnBpeGVsQXJy
YXlJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlQ29sb3JDb21wb25lbnRz
ZnJvbVBpeGVsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVBpeGVsVmFs
dWVGcm9tQ29sb3JDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk9y
TWF4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbHVtbkV4dHJlbXVtKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Omtlcm5lbEV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdl
bmVyYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVj
dWxhckxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6
RkVTcGVjdWxhckxpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2Fy
ZTo6UGFpbnRpbmdEYXRhOjpQYWludGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJi
dWxlbmNlU29mdHdhcmU6OlBhaW50aW5nRGF0YTo6cmFuZG9tKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlOjpjb21wdXRlU3RpdGNoaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlOjpub2lzZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZTo6cGxhdG9mcm1BcHBseUdl
bmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmU6OnBsYXRvZnJt
QXBwbHlXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmU6OnBs
YXRvZnJtQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0Rh
dGE6OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVy
YnVsZW5jZTo6ZmlsbFJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpub3JtYWxpemVkRmxvYXRzKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5n
RGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90
TGlnaHRTb3VyY2UuaDoKKwogMjAyMS0xMS0xNiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2Vy
QGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIGEgbW9tZW50dW0gc2Nyb2xsIGFuaW1hdGlvbiB3
aGVuIHJlY2VpdmluZyBhIG1vbWVudHVtIGVuZCBldmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3Vy
Y2UuY3BwCmluZGV4IGU1ZmIxZmY2NjVkM2ViMDdmNDhlZTFkMDJiYmZmY2M2YjA0NDFmODkuLjg5
NDdhOTg2MGU0NmIxMWM1OGUyNzc1MzYyNTZmZGI5ZDUxZDE1NDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRM
aWdodFNvdXJjZS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJF
ZmZlY3QmLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgRGlzdGFudExpZ2h0U291
cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhKSBjb25zdAogewogICAgIGZsb2F0IGF6aW11dGggPSBkZWcycmFkKG1fYXpp
bXV0aCk7CiAgICAgZmxvYXQgZWxldmF0aW9uID0gZGVnMnJhZChtX2VsZXZhdGlvbik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRM
aWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9E
aXN0YW50TGlnaHRTb3VyY2UuaAppbmRleCBjMWUzMGVkZTc1OTgzNzI4YTYzMmJjY2ZmYjA5OTcz
YTNhNGU3MmZkLi4zMDE5MmIwZWYwY2QxYmY0MDNkNDIzMzhjZTQwODc3MThkNzUxNzA3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRM
aWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRGlzdGFudExpZ2h0U291cmNlLmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIGJv
b2wgc2V0QXppbXV0aChmbG9hdCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRFbGV2YXRpb24oZmxv
YXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVm
ZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0
YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBjb25zdCBvdmVycmlkZTsKICAg
ICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFp
bnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IDY3OWU3OGRhZWE4NzNmNWQz
M2ExYWZmODcxNTI1YmZjZjg3NzEwZmIuLjk1MTQ0OTY0YTI3ZmI2NmJkODI5YzhkZjlmY2FiMmU2
NGIyYjE2NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtNjMsNiArNjMsNDQgQEAgYm9vbCBG
RUNvbG9yTWF0cml4OjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiAmdmFsdWVzKQogICAg
IHJldHVybiB0cnVlOwogfQogCit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRl
Q29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCit7CisgICAgY29tcG9u
ZW50c1swXSA9ICgwLjIxMyArIDAuNzg3ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbMV0gPSAo
MC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4w
NzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUp
OworICAgIGNvbXBvbmVudHNbNF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKKyAgICBjb21w
b25lbnRzWzVdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s2XSA9
ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAw
LjcxNSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1
ZSk7Cit9CisKK3ZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50
cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCit7CisgICAgZmxvYXQgY29zSHVlID0g
Y29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7CisgICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVl
ICogcGlGbG9hdCAvIDE4MCk7CisgICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICog
MC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKKyAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NI
dWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAt
IGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7CisgICAgY29tcG9uZW50c1szXSA9IDAu
MjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsKKyAgICBjb21wb25lbnRzWzRd
ID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQwOworICAgIGNvbXBvbmVu
dHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7CisgICAgY29t
cG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKKyAg
ICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1
OworICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICog
MC4wNzI7Cit9CisKK1ZlY3RvcjxmbG9hdD4gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0
cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgVmVjdG9yPGZsb2F0PiBub3Jt
YWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dmFsdWVzLnNpemUoKTsgKytpKQorICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFs
aXplZEZsb2F0KHZhbHVlc1tpXSk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Cit9CisK
K25hbWVzcGFjZSBGRUNvbG9yTWF0cml4U29mdHdhcmUgeworCiBpbmxpbmUgdm9pZCBtYXRyaXgo
ZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBjb25z
dCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCiB7CiAgICAgZmxvYXQgciA9IHJlZDsKQEAgLTk3LDE4
ICsxMzUsMTAgQEAgaW5saW5lIHZvaWQgbHVtaW5hbmNlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVl
biwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFKQot
dGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci1ib29sIGVmZmVjdEFwcGx5QWNj
ZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9h
dD4mIHZhbHVlcywgZmxvYXQgY29tcG9uZW50c1s5XSwgSW50U2l6ZSBidWZmZXJTaXplKQorc3Rh
dGljIHZvaWQgZWZmZWN0QXBwbHlBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxB
cnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBjb21wb25lbnRzWzldLCBJ
bnRTaXplIGJ1ZmZlclNpemUsIENvbG9yTWF0cml4VHlwZSBtYXRyaXhUeXBlKQogewogICAgIEFT
U0VSVChwaXhlbEFycmF5Lmxlbmd0aCgpID09IGJ1ZmZlclNpemUuYXJlYSgpICogNCk7CiAgICAg
Ci0gICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCkgewotICAg
ICAgICAvLyB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCB0YWtlcyBhIDR4NCBtYXRyaXgs
IGlmIGFueSB2YWx1ZSBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIEZFQ29sb3JNYXRyaXggNXg0
IG1hdHJpeAotICAgICAgICAvLyBpcyBub3QgemVybywgZmFsbCBiYWNrIHRvIG5vbi12SW1hZ2Ug
Y29kZS4KLSAgICAgICAgaWYgKHZhbHVlc1s0XSAhPSAwIHx8IHZhbHVlc1s5XSAhPSAwIHx8IHZh
bHVlc1sxNF0gIT0gMCB8fCB2YWx1ZXNbMTldICE9IDApCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCiAgICAgY29uc3QgaW50MzJfdCBkaXZpc29yID0gMjU2OwogICAgIHVpbnQ4
X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKIApAQCAtMTI0LDcgKzE1NCwxMCBAQCBib29s
IGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNv
bnN0IFZlY3RvcjxmbG9hdD4mCiAgICAgZGVzdC5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgo
KSAqIDQ7CiAgICAgZGVzdC5kYXRhID0gZGF0YTsKIAotICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkg
eworICAgIHN3aXRjaCAobWF0cml4VHlwZSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X1VOS05PV046CisgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
TUFUUklYOiB7CiAgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikp
LApAQCAtMjAzLDMxICsyMzYsMTcgQEAgYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4
Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JgogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCiAK
LXRlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlPgotdm9pZCBlZmZlY3RUeXBlKFVp
bnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMs
IEludFNpemUgYnVmZmVyU2l6ZSkKK3N0YXRpYyB2b2lkIGVmZmVjdFR5cGUoVWludDhDbGFtcGVk
QXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgZmxvYXQgY29t
cG9uZW50c1s5XSwgQ29sb3JNYXRyaXhUeXBlIG1hdHJpeFR5cGUpCiB7Ci0gICAgZmxvYXQgY29t
cG9uZW50c1s5XTsKLQotICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9T
QVRVUkFURSkKLSAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25l
bnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0gICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBG
RUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxj
dWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0KICAgICB1
bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKIAotI2lmIFVT
RShBQ0NFTEVSQVRFKQotICAgIGlmIChlZmZlY3RBcHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+
KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSkpCi0gICAgICAgIHJl
dHVybjsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlclNpemUpOwotI2VuZGlmCisgICAg
c3dpdGNoIChtYXRyaXhUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9X
TjoKKyAgICAgICAgYnJlYWs7CiAKLSAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKICAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CiAgICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxC
eXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxC
eXRlT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQpOwpAQCAtMjczLDYgKzI5MiwyMyBAQCB2b2lkIGVmZmVjdFR5cGUo
VWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVl
cywgSW50UwogICAgIH0KIH0KIAorc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybShVaW50OENsYW1w
ZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBj
b21wb25lbnRzWzldLCBJbnRTaXplIGJ1ZmZlclNpemUsIENvbG9yTWF0cml4VHlwZSBtYXRyaXhU
eXBlKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5
X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYgYW55IHZhbHVlIGluIHRoZSBsYXN0IGNv
bHVtbiBvZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0cml4CisgICAgLy8gaXMgbm90IHplcm8s
IGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCisgICAgaWYgKG1hdHJpeFR5cGUgPT0gRkVD
T0xPUk1BVFJJWF9UWVBFX01BVFJJWCAmJiAodmFsdWVzWzRdIHx8IHZhbHVlc1s5XSB8fCB2YWx1
ZXNbMTRdIHx8IHZhbHVlc1sxOV0pKQorICAgICAgICBGRUNvbG9yTWF0cml4U29mdHdhcmU6OmVm
ZmVjdFR5cGUocGl4ZWxBcnJheSwgdmFsdWVzLCBjb21wb25lbnRzLCBtYXRyaXhUeXBlKTsKKyAg
ICBlbHNlCisgICAgICAgIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZTo6ZWZmZWN0QXBwbHlBY2NlbGVy
YXRlZChwaXhlbEFycmF5LCB2YWx1ZXMsIGNvbXBvbmVudHMsIGJ1ZmZlclNpemUsIG1hdHJpeFR5
cGUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyU2l6ZSk7CisgICAgRkVDb2xvck1h
dHJpeFNvZnR3YXJlOjplZmZlY3RUeXBlKHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50cywg
bWF0cml4VHlwZSk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgRkVDb2xvck1hdHJpeFNv
ZnR3YXJlCisKIGJvb2wgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwpAQCAt
Mjk0LDI2ICszMzAsMjggQEAgYm9vbCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJikKICAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRh
dGEoKTsKICAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXItPnNpemUo
KTsKIAotICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVl
cyk7Ci0gICAgCisgICAgYXV0byB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsK
KyAgICBmbG9hdCBjb21wb25lbnRzWzldOworCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICBicmVhazsKICAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1B
VFJJWF9UWVBFX01BVFJJWD4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9u
cyk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRF
OiAKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVs
QXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworCisgICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfU0FUVVJBVEU6CisgICAgICAgIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50
cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwogICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAog
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgZWZmZWN0VHlw
ZTxGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVs
QXJyYXlEaW1lbnNpb25zKTsKKyAgICAgICAgY2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhj
b21wb25lbnRzLCB2YWx1ZXNbMF0pOwogICAgICAgICBicmVhazsKKwogICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xP
Uk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxB
cnJheURpbWVuc2lvbnMpOwogICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAorICAgIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZTo6YXBwbHlQbGF0Zm9y
bShwaXhlbEFycmF5LCB2YWx1ZXMsIGNvbXBvbmVudHMsIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBt
X3R5cGUpOwogICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGlt
YWdlUmVjdCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCmluZGV4IDQ5N2Vi
MTk1ZTQxNzVlY2RmZDBjYWIyNGNiY2Q5YjBlMzlhN2Y4MDkuLmY2OWYwYjAxYzk1MDdlMDUyNmUw
ZDE3N2ViYmVmOTY5MDA5Y2UxZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC00NCw4ICs0NCw5IEBA
IHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlczsgfQogICAgIGJvb2wgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsK
IAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxv
YXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2Fs
Y3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUp
OworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCogY29t
cG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0
ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMg
VmVjdG9yPGZsb2F0PiBub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVl
cyk7CiAKIHByaXZhdGU6CiAgICAgRkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUsIFZlY3Rv
cjxmbG9hdD4mJik7CkBAIC01OCwzNSArNTksNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxmbG9h
dD4gbV92YWx1ZXM7CiB9OwogCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVT
YXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQotewotICAg
IGNvbXBvbmVudHNbMF0gPSAoMC4yMTMgKyAwLjc4NyAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRz
WzFdID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1syXSA9ICgwLjA3
MiAtIDAuMDcyICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbM10gPSAoMC4yMTMgLSAwLjIxMyAq
IHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzRdID0gKDAuNzE1ICsgMC4yODUgKiB2YWx1ZSk7Ci0g
ICAgY29tcG9uZW50c1s1XSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOwotICAgIGNvbXBvbmVu
dHNbNl0gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzddID0gKDAu
NzE1IC0gMC43MTUgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s4XSA9ICgwLjA3MiArIDAuOTI4
ICogdmFsdWUpOwotfQotCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVS
b3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKLXsKLSAgICBm
bG9hdCBjb3NIdWUgPSBjb3ModmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKLSAgICBmbG9hdCBzaW5I
dWUgPSBzaW4odmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKLSAgICBjb21wb25lbnRzWzBdID0gMC4y
MTMgKyBjb3NIdWUgKiAwLjc4NyAtIHNpbkh1ZSAqIDAuMjEzOwotICAgIGNvbXBvbmVudHNbMV0g
PSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1IC0gc2luSHVlICogMC43MTU7Ci0gICAgY29tcG9uZW50
c1syXSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIgKyBzaW5IdWUgKiAwLjkyODsKLSAgICBjb21w
b25lbnRzWzNdID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyArIHNpbkh1ZSAqIDAuMTQzOwotICAg
IGNvbXBvbmVudHNbNF0gPSAwLjcxNSArIGNvc0h1ZSAqIDAuMjg1ICsgc2luSHVlICogMC4xNDA7
Ci0gICAgY29tcG9uZW50c1s1XSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIgLSBzaW5IdWUgKiAw
LjI4MzsKLSAgICBjb21wb25lbnRzWzZdID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyAtIHNpbkh1
ZSAqIDAuNzg3OwotICAgIGNvbXBvbmVudHNbN10gPSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1ICsg
c2luSHVlICogMC43MTU7Ci0gICAgY29tcG9uZW50c1s4XSA9IDAuMDcyICsgY29zSHVlICogMC45
MjggKyBzaW5IdWUgKiAwLjA3MjsKLX0KLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbG9yTWF0cml4KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVu
dFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggOTc3Y2E1YjU3ODQxMzQzZTcxOGY0MjAxNWRi
NDEyNGM3ZTBhZWZlYS4uMWQ1NTdjZDg0NTE3M2I5ZTc3ZGQ2YzhiMjk3ZjI0NGM5Yzk5ZTQ1YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC00NiwxMSArNDYsMTUgQEAgRkVD
b21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiByZWRGdW4KIHsKIH0KIAotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpj
b21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mKQorbmFtZXNwYWNlIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZSB7CisKK3Vz
aW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+OworCitzdGF0aWMgdm9p
ZCBjb21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mKQogewogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVU
YWJ1bGFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3N0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFi
bGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
dHJhbnNmZXJGdW5jdGlvbikKIHsKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVl
cyA9IHRyYW5zZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7CiAgICAgdW5zaWduZWQgbiA9IHRhYmxl
VmFsdWVzLnNpemUoKTsKQEAgLTY3LDcgKzcxLDcgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVy
Ojpjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmUK
ICAgICB9CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFi
bGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
dHJhbnNmZXJGdW5jdGlvbikKK3N0YXRpYyB2b2lkIGNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1
cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVy
RnVuY3Rpb24pCiB7CiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFu
c2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVzOwogICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5z
aXplKCk7CkBAIC04Miw3ICs4Niw3IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0
ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uCiAgICAgfQog
fQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJsZShMb29rdXBU
YWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1
bmN0aW9uKQorc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1
ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewogICAg
ICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUgKiB0cmFu
c2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKQEAgLTkxLDcgKzk1LDcgQEAgdm9pZCBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3Qg
Q29tcG9uZW4KICAgICB9CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUdh
bW1hVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3N0YXRpYyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExv
b2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5z
ZmVyRnVuY3Rpb24pCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXpl
KCk7ICsraSkgewogICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0cmFuc2ZlckZ1bmN0aW9uLmV4
cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEgZG91YmxlIGFuZCBhIGZsb2F0
IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQpAQCAtMTAxLDYgKzEwNSwzMSBAQCB2
b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2
YWx1ZXMsIGNvbnN0IENvbXBvbmVudAogICAgIH0KIH0KIAorc3RhdGljIExvb2t1cFRhYmxlIGNv
bXB1dGVMb29rdXBUYWJsZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBmdW5jdGlv
bikKK3sKKyAgICBMb29rdXBUYWJsZSB0YWJsZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0YWJsZS5zaXplKCk7ICsraSkKKyAgICAgICAgdGFibGVbaV0gPSBpOworCisgICAgdXNp
bmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJik7CisgICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsKKyAg
ICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsCisgICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxl
LAorICAgICAgICBjb21wdXRlVGFidWxhclRhYmxlLAorICAgICAgICBjb21wdXRlRGlzY3JldGVU
YWJsZSwKKyAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxlLAorICAgICAgICBjb21wdXRlR2FtbWFU
YWJsZQorICAgIH07CisKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihmdW5jdGlvbi50
eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOworICAgIGNhbGxFZmZlY3RbZnVu
Y3Rpb24udHlwZV0odGFibGUsIGZ1bmN0aW9uKTsKKworICAgIHJldHVybiB0YWJsZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlCisKIGJvb2wgRkVDb21w
b25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwpAQCAtMTExLDExICsxNDAsMTAg
QEAgYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJikKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgIExvb2t1cFRhYmxlIHJlZFRhYmxlOwotICAgIExv
b2t1cFRhYmxlIGdyZWVuVGFibGU7Ci0gICAgTG9va3VwVGFibGUgYmx1ZVRhYmxlOwotICAgIExv
b2t1cFRhYmxlIGFscGhhVGFibGU7Ci0gICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRUYWJsZSwg
Z3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKKyAgICBhdXRvIHJlZFRhYmxlID0g
RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlOjpjb21wdXRlTG9va3VwVGFibGUobV9yZWRGdW5j
dGlvbik7CisgICAgYXV0byBncmVlblRhYmxlID0gRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJl
Ojpjb21wdXRlTG9va3VwVGFibGUobV9ncmVlbkZ1bmN0aW9uKTsKKyAgICBhdXRvIGJsdWVUYWJs
ZSA9IEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZTo6Y29tcHV0ZUxvb2t1cFRhYmxlKG1fYmx1
ZUZ1bmN0aW9uKTsKKyAgICBhdXRvIGFscGhhVGFibGUgPSBGRUNvbXBvbmVudFRyYW5zZmVyU29m
dHdhcmU6OmNvbXB1dGVMb29rdXBUYWJsZShtX2FscGhhRnVuY3Rpb24pOwogCiAgICAgSW50UmVj
dCBkcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7CiAgICAgaW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoZGVzdGlu
YXRpb25QaXhlbEFycmF5LCBkcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKQEAg
LTEzMSwzMiArMTU5LDYgQEAgYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRUNv
bXBvbmVudFRyYW5zZmVyOjpjb21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJs
ZSwgTG9va3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1
cFRhYmxlJiBhbHBoYVRhYmxlKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWRU
YWJsZS5zaXplKCk7ICsraSkKLSAgICAgICAgcmVkVGFibGVbaV0gPSBncmVlblRhYmxlW2ldID0g
Ymx1ZVRhYmxlW2ldID0gYWxwaGFUYWJsZVtpXSA9IGk7Ci0KLSAgICB1c2luZyBUcmFuc2ZlclR5
cGUgPSB2b2lkICgqKShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mKTsKLSAgICBUcmFuc2ZlclR5cGUgY2FsbEVmZmVjdFtdID0gewotICAgICAgICBjb21wdXRl
SWRlbnRpdHlUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9XTgotICAg
ICAgICBjb21wdXRlSWRlbnRpdHlUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVf
SURFTlRJVFkKLSAgICAgICAgY29tcHV0ZVRhYnVsYXJUYWJsZSwgICAgLy8gRkVDT01QT05FTlRU
UkFOU0ZFUl9UWVBFX1RBQkxFCi0gICAgICAgIGNvbXB1dGVEaXNjcmV0ZVRhYmxlLCAgIC8vIEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9ESVNDUkVURQotICAgICAgICBjb21wdXRlTGluZWFyVGFi
bGUsICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSCi0gICAgICAgIGNvbXB1
dGVHYW1tYVRhYmxlICAgICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9HQU1NQQotICAg
IH07Ci0KLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxz
aXplX3Q+KG1fcmVkRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3Qp
KTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXpl
X3Q+KG1fZ3JlZW5GdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkp
OwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVf
dD4obV9ibHVlRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsK
LSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+
KG1fYWxwaGFGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOwot
Ci0gICAgY2FsbEVmZmVjdFttX3JlZEZ1bmN0aW9uLnR5cGVdKHJlZFRhYmxlLCBtX3JlZEZ1bmN0
aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fZ3JlZW5GdW5jdGlvbi50eXBlXShncmVlblRhYmxlLCBt
X2dyZWVuRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3RbbV9ibHVlRnVuY3Rpb24udHlwZV0oYmx1
ZVRhYmxlLCBtX2JsdWVGdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVjdFttX2FscGhhRnVuY3Rpb24u
dHlwZV0oYWxwaGFUYWJsZSwgbV9hbHBoYUZ1bmN0aW9uKTsKLX0KLQogc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvbmVudFRyYW5zZmVyVHlwZSB0eXBl
KQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAppbmRl
eCA2YWRhOWMwYWJiZTVjMmY5ZDY1YmQ5MTlmZmVjNGYxNzNkMDAzNDE0Li41MThlYTEzNDdhNGFk
ZGJhNGNkNTAwY2I0MmM4MTM3MDZkY2NkMTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
aApAQCAtNjEsMTYgKzYxLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUNvbXBvbmVudFRy
YW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFs
cGhhRnVuYyk7CiAKLSAgICB1c2luZyBMb29rdXBUYWJsZSA9IHN0ZDo6YXJyYXk8dWludDhfdCwg
MjU2PjsKLQotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxl
JiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNv
bXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFi
bGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQg
Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxl
JiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotCi0gICAgdm9pZCBjb21wdXRl
TG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9va3VwVGFibGUmIGdyZWVuVGFi
bGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxlJiBhbHBoYVRhYmxlKTsKLQog
ICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwog
CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3Bw
CmluZGV4IDI1YWMwMDg0MjRiZDg2MzExODQ3ODkwOTUwYmNmNjNlNWFlZjVmYTguLjNhNTUzNmFl
YjNhODZkNmEzNWExYTEwMmZlZWQ0N2ZiODJkN2M2ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC05
NCw3ICs5NCwzMSBAQCB2b2lkIEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVk
ZWQoKQogCiAgICAgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKIH0KLSAgICAKKwor
dm9pZCBGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVy
JiBmaWx0ZXIpCit7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIEZFQ09NUE9TSVRF
X09QRVJBVE9SX0lOOgorICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKKyAgICAg
ICAgLy8gRm9yIEluIGFuZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRo
ZSByZXN1bHQgb2YKKyAgICAgICAgLy8gdGhlIHNlY29uZCBlZmZlY3QuIFNvIGp1c3QgdXNlIHRo
ZSBhYnNvbHV0ZSBwYWludCByZWN0IG9mIHRoZSBzZWNvbmQgZWZmZWN0IGhlcmUuCisgICAgICAg
IHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDEpLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KTsKKyAgICAgICAgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6CisgICAgICAgIC8vIEFyaXRo
bWV0aWMgbWF5IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9uLiBT
byB3ZSBjYW4ndAorICAgICAgICAvLyBvcHRpbWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhlcmUuCisg
ICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVj
dCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBUYWtlIHRo
ZSB1bmlvbiBvZiBib3RoIGlucHV0IGVmZmVjdHMuCisgICAgICAgIEZpbHRlckVmZmVjdDo6ZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoZmlsdGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKworbmFtZXNwYWNlIEZFQ29tcG9zaXRlU29mdHdhcmUgeworCiBzdGF0aWMgdW5zaWduZWQg
Y2hhciBjbGFtcEJ5dGUoaW50IGMpCiB7CiAgICAgdW5zaWduZWQgY2hhciBidWZmW10gPSB7IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKQEAgLTE4OCw2ICsyMTIsOCBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgYXJpdGhtZXRpY1NvZnR3YXJlKHVuc2lnbmVkIGNoYXIqIHNv
dXJjZSwgdW5zaWduZWQgY2hhciogZGVzdAogfQogI2VuZGlmCiAKK30gLy8gbmFtZXNwYWNlIEZF
Q29tcG9zaXRlU29mdHdhcmUKKwogaW5saW5lIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXJp
dGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xh
bXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxv
YXQgazQpCiB7CiAgICAgaW50IGxlbmd0aCA9IHNvdXJjZS5sZW5ndGgoKTsKQEAgLTE5NywzMiAr
MjIzLDEwIEBAIGlubGluZSB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0
d2FyZShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291CiAgICAgQVNTRVJUKCEobGVuZ3RoICYg
MHgzKSk7CiAgICAgcGxhdGZvcm1Bcml0aG1ldGljTmVvbihzb3VyY2UuZGF0YSgpLCBkZXN0aW5h
dGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOwogI2Vsc2UKLSAgICBhcml0aG1l
dGljU29mdHdhcmUoc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsx
LCBrMiwgazMsIGs0KTsKKyAgICBGRUNvbXBvc2l0ZVNvZnR3YXJlOjphcml0aG1ldGljU29mdHdh
cmUoc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMs
IGs0KTsKICNlbmRpZgogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKLXsKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewot
ICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9BVE9QOgotICAgICAgICAvLyBGb3IgSW4gYW5kIEF0b3AgdGhlIGZpcnN0IGVmZmVj
dCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgotICAgICAgICAvLyB0aGUgc2Vjb25kIGVm
ZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBhaW50IHJlY3Qgb2YgdGhlIHNlY29uZCBl
ZmZlY3QgaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoaW5wdXRFZmZlY3QoMSkt
PmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJ
QzoKLSAgICAgICAgLy8gQXJpdGhtZXRpYyBtYXkgaW5mbHVuY2UgdGhlIGNvbXBlbGUgZmlsdGVy
IHByaW1pdGl2ZSByZWdpb24uIFNvIHdlIGNhbid0Ci0gICAgICAgIC8vIG9wdGltaXplIHRoZSBw
YWludCByZWdpb24gaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5n
SW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIC8vIFRha2UgdGhlIHVuaW9uIG9mIGJvdGggaW5wdXQgZWZmZWN0cy4KLSAgICAg
ICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChmaWx0ZXIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotfQotCiBib29sIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAppbmRleCA5M2Y2ZGY4N2E4Y2JkM2Mx
NjQyNDNmMjQzNjA0ZGNlZWViODFhNjY0Li5jNDY2Y2I5NWZjMzY5ZDE2MzRjZWMwZjdjYmNkYzg1
NTgwOTAxMGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKQEAgLTI0LDYgKzI0LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCiAKKyNp
bmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNs
dWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgpAQCAt
MTE0LDYgKzExNSw4IEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVBbHBoYShi
b29sIHByZXNlcnZlQWxwaGEpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK25hbWVzcGFjZSBGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmUgeworCiAvKgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KICAgICAgIENvbnZvbHZlTWF0cml4IGltcGxlbWVudGF0aW9uCkBAIC0xNzAs
NiArMTczLDIxIEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVBbHBoYShib29s
IHByZXNlcnZlQWxwaGEpCiAgICBhbmQgd291bGQgbWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRl
cnN0YW5kLgogKi8KIAorc3RydWN0IFBhaW50aW5nRGF0YSB7CisgICAgY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNyY1BpeGVsQXJyYXk7CisgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVs
QXJyYXk7CisgICAgaW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisKKyAgICBJbnRTaXplIGtl
cm5lbFNpemU7CisgICAgZmxvYXQgZGl2aXNvcjsKKyAgICBmbG9hdCBiaWFzOworICAgIEludFBv
aW50IHRhcmdldE9mZnNldDsKKyAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGU7CisgICAgYm9vbCBw
cmVzZXJ2ZUFscGhhOworICAgIFZlY3RvcjxmbG9hdD4ga2VybmVsTWF0cml4OworfTsKKwogc3Rh
dGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFu
bmVsLCB1bnNpZ25lZCBjaGFyIG1heCA9IDI1NSkKIHsKICAgICBpZiAoY2hhbm5lbCA8PSAwKQpA
QCAtMTc5LDggKzE5Nyw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xh
bXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBtCiAgICAgcmV0dXJuIGNo
YW5uZWw7CiB9CiAKLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLUFMV0FZU19J
TkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwg
ZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcykKK3N0YXRpYyBBTFdBWVNf
SU5MSU5FIHZvaWQgc2V0RGVzdGluYXRpb25QaXhlbHMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNvdXJjZVBpeGVscywgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RQaXhlbHMsIGludCYgcGl4ZWws
IGZsb2F0KiB0b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGJvb2wgcHJlc2VydmVB
bHBoYVZhbHVlcykKIHsKICAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBo
YVZhbHVlcyA/IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFz
KTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKQEAgLTE5MywyNSArMjEwLDE4IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVCiAgICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyss
IG1heEFscGhhKTsKIH0KIAotI2lmIENPTVBJTEVSKE1TVkMpCi0vLyBJbmNvcnJlY3RseSBkaWFn
bm9zaW5nIG92ZXJ3cml0ZSBvZiBzdGFjayBpbiB8dG90YWxzfCBkdWUgdG8gfHByZXNlcnZlQWxw
aGFWYWx1ZXN8LgotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZTogNDc4OSkKLSNlbmRpZgotCiAvLyBPbmx5IGZvciByZWdpb24gQwotdGVtcGxhdGU8Ym9vbCBw
cmVzZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6
OmZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNs
aXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQorc3RhdGljIEFM
V0FZU19JTkxJTkUgdm9pZCBzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5k
KQogewogICAgIC8vIGVkZ2UgbW9kZSBkb2VzIG5vdCBhZmZlY3QgdGhlc2UgcGl4ZWxzCi0gICAg
aW50IHBpeGVsID0gKG1fdGFyZ2V0T2Zmc2V0LnkoKSAqIHBhaW50aW5nRGF0YS53aWR0aCArIG1f
dGFyZ2V0T2Zmc2V0LngoKSkgKiA0OworICAgIGludCBwaXhlbCA9IChwYWludGluZ0RhdGEudGFy
Z2V0T2Zmc2V0LnkoKSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHBhaW50aW5nRGF0YS50YXJnZXRP
ZmZzZXQueCgpKSAqIDQ7CiAgICAgaW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJpZ2h0ICogNDsK
LSAgICBpbnQgeEluY3JlYXNlID0gKG1fa2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OworICAg
IGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKSAtIDEpICog
NDsKICAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihhKSBjb21wb25lbnRzCi0gICAgZmxv
YXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVlcyA/IDAgOiAxKV07CisgICAgZmxvYXQg
dG90YWxzWzRdOwogCiAgICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9kaXZpc29yKTsKKyAgICBB
U1NFUlQocGFpbnRpbmdEYXRhLmRpdmlzb3IpOwogCiAgICAgLy8gU2tpcCB0aGUgZmlyc3QgJyhj
bGlwQm90dG9tIC0geUVuZCknIGxpbmVzCiAgICAgcGl4ZWwgKz0gKGNsaXBCb3R0b20gLSB5RW5k
KSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKQEAgLTIyMSwyOSArMjMxLDI4
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQ
aXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluCiAgICAgICAgIGZvciAoaW50IHggPSBjbGlwUmln
aHQgKyAxOyB4ID4gMDsgLS14KSB7CiAgICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWlu
dGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7CiAgICAgICAgICAgICBpbnQga2VybmVs
UGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJu
ZWxTaXplLndpZHRoKCk7CisgICAgICAgICAgICBpbnQgd2lkdGggPSBwYWludGluZ0RhdGEua2Vy
bmVsU2l6ZS53aWR0aCgpOwogCiAgICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwogICAgICAgICAg
ICAgdG90YWxzWzFdID0gMDsKICAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0gICAgICAgICAg
ICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90YWxzWzNdID0g
MDsKKyAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7CiAKICAgICAgICAgICAgIHdoaWxlIChrZXJu
ZWxWYWx1ZSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0
YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwogICAgICAgICAgICAgICAg
IHRvdGFsc1sxXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0
YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBp
eGVsKyspKTsKICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtlcm5l
bE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNy
Y1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFw
cmVzZXJ2ZUFscGhhVmFsdWVzKQorICAgICAgICAgICAgICAgIGlmICghcGFpbnRpbmdEYXRhLnBy
ZXNlcnZlQWxwaGEpCiAgICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0Rh
dGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGlu
Z0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKSk7CiAgICAgICAgICAgICAgICAg
KytrZXJuZWxQaXhlbDsKICAgICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOwogICAgICAgICAg
ICAgICAgIGlmICghLS13aWR0aCkgewogICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbCAr
PSBrZXJuZWxJbmNyZWFzZTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNp
emUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBwYWludGluZ0RhdGEua2Vy
bmVsU2l6ZS53aWR0aCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVlcz4ocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwg
dG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKKyAgICAgICAgICAgIHNldERl
c3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEu
ZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3IsIHBhaW50
aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CiAgICAgICAgICAgICBz
dGFydEtlcm5lbFBpeGVsICs9IDQ7CiAgICAgICAgIH0KICAgICAgICAgcGl4ZWwgKz0geEluY3Jl
YXNlOwpAQCAtMjUxLDEyICsyNjAsMTIgQEAgQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVN
YXRyaXg6OmZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW4KICAgICB9
CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50IEZFQ29udm9sdmVNYXRyaXg6OmdldFBpeGVsVmFsdWUo
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSkKK3N0YXRpYyBBTFdBWVNf
SU5MSU5FIGludCBnZXRQaXhlbFZhbHVlKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQg
eCwgaW50IHkpCiB7CiAgICAgaWYgKHggPj0gMCAmJiB4IDwgcGFpbnRpbmdEYXRhLndpZHRoICYm
IHkgPj0gMCAmJiB5IDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKICAgICAgICAgcmV0dXJuICh5ICog
cGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKIAotICAgIHN3aXRjaCAobV9lZGdlTW9kZSkg
eworICAgIHN3aXRjaCAocGFpbnRpbmdEYXRhLmVkZ2VNb2RlKSB7CiAgICAgZGVmYXVsdDogLy8g
RURHRU1PREVfTk9ORQogICAgICAgICByZXR1cm4gLTE7CiAgICAgY2FzZSBFREdFTU9ERV9EVVBM
SUNBVEU6CkBAIC0yODEsMzQgKzI5MCwzMiBAQCBBTFdBWVNfSU5MSU5FIGludCBGRUNvbnZvbHZl
TWF0cml4OjpnZXRQaXhlbFZhbHVlKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbgogfQog
CiAvLyBGb3Igb3RoZXIgcmVnaW9ucyB0aGFuIEMKLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcz4KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCitz
dGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCiB7CiAgICAgaW50IHBp
eGVsID0gKHkxICogcGFpbnRpbmdEYXRhLndpZHRoICsgeDEpICogNDsKICAgICBpbnQgaGVpZ2h0
ID0geTIgLSB5MTsKICAgICBpbnQgd2lkdGggPSB4MiAtIHgxOwotICAgIGludCBiZWdpbktlcm5l
bFBpeGVsWCA9IHgxIC0gbV90YXJnZXRPZmZzZXQueCgpOworICAgIGludCBiZWdpbktlcm5lbFBp
eGVsWCA9IHgxIC0gcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC54KCk7CiAgICAgaW50IHN0YXJ0
S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJuZWxQaXhlbFg7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4
ZWxZID0geTEgLSBtX3RhcmdldE9mZnNldC55KCk7CisgICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxZ
ID0geTEgLSBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LnkoKTsKICAgICBpbnQgeEluY3JlYXNl
ID0gKHBhaW50aW5nRGF0YS53aWR0aCAtIHdpZHRoKSAqIDQ7CiAgICAgLy8gQ29udGFpbnMgdGhl
IHN1bSBvZiByZ2IoYSkgY29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNlcnZl
QWxwaGFWYWx1ZXMgPyAwIDogMSldOworICAgIGZsb2F0IHRvdGFsc1s0XTsKIAotICAgIC8vIG1f
ZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0
aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7CisgICAgLy8gcGFpbnRpbmdEYXRhLmRpdmlzb3Ig
Y2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcworICAg
IEFTU0VSVChwYWludGluZ0RhdGEuZGl2aXNvcik7CiAKICAgICBmb3IgKGludCB5ID0gaGVpZ2h0
OyB5ID4gMDsgLS15KSB7CiAgICAgICAgIGZvciAoaW50IHggPSB3aWR0aDsgeCA+IDA7IC0teCkg
ewogICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJp
eC5zaXplKCkgLSAxOwogICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVs
UGl4ZWxYOwogICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWSA9IHN0YXJ0S2VybmVsUGl4ZWxZ
OwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAg
ICAgICBpbnQgd2lkdGggPSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOwogCiAgICAg
ICAgICAgICB0b3RhbHNbMF0gPSAwOwogICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKICAgICAg
ICAgICAgIHRvdGFsc1syXSA9IDA7Ci0gICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1
ZXMpCi0gICAgICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1sz
XSA9IDA7CiAKICAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7CiAgICAgICAg
ICAgICAgICAgaW50IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0YSwga2Vy
bmVsUGl4ZWxYLCBrZXJuZWxQaXhlbFkpOwpAQCAtMzE3LDE4ICszMjQsMTggQEAgdm9pZCBGRUNv
bnZvbHZlTWF0cml4OjpmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEsIGludCB4MSwgaW4KICAgICAgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5n
RGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50
aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDEpKTsKICAgICAgICAgICAg
ICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFs
dWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0o
cGl4ZWxJbmRleCArIDIpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KCFwcmVzZXJ2ZUFscGhhVmFsdWVzICYmIHBpeGVsSW5kZXggPj0gMCkKKyAgICAgICAgICAgICAg
ICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhICYmIHBpeGVsSW5kZXggPj0gMCkKICAg
ICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhb
a2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxJbmRleCArIDMpKTsKICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVs
WDsKICAgICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOwogICAgICAgICAgICAgICAgIGlmICgh
LS13aWR0aCkgewogICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5l
bFBpeGVsWDsKICAgICAgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbFk7Ci0gICAgICAgICAg
ICAgICAgICAgIHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAgICAgICAgICAg
ICAgIHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxz
PHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGlu
Z0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGluZ0Rh
dGEuYmlhcyk7CisgICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWludGluZ0RhdGEu
c3JjUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMs
IHBhaW50aW5nRGF0YS5kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdEYXRhLnBy
ZXNlcnZlQWxwaGEpOwogICAgICAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWDsKICAgICAgICAg
fQogICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7CkBAIC0zMzcsMjkgKzM0NCw3IEBAIHZvaWQg
RkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgeDEsIGluCiAgICAgfQogfQogCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFn
bWEgd2FybmluZyhwb3ApIC8vIERpc2FibGUgb2YgNDc4OQotI2VuZGlmCi0KLUFMV0FZU19JTkxJ
TkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQs
IGludCB5RW5kKQotewotICAgIC8vIE11c3QgYmUgaW1wbGVtZW50ZWQgaGVyZSwgc2luY2UgaXQg
cmVmZXJzIGFub3RoZXIgQUxXQVlTX0lOTElORQotICAgIC8vIGZ1bmN0aW9uLCB3aGljaCBkZWZp
bmVkIGluIHRoaXMgQysrIHNvdXJjZSBmaWxlIGFzIHdlbGwKLSAgICBpZiAobV9wcmVzZXJ2ZUFs
cGhhKQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8dHJ1ZT4ocGFpbnRpbmdEYXRhLCBj
bGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7Ci0gICAgZWxzZQotICAgICAgICBm
YXN0U2V0SW50ZXJpb3JQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlw
Qm90dG9tLCB5U3RhcnQsIHlFbmQpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2
ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4
MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICAvLyBBbHRob3VnaCB0aGlzIGZ1bmN0
aW9uIGNhbiBiZSBtb3ZlZCB0byB0aGUgaGVhZGVyLCBpdCBpcyBpbXBsZW1lbnRlZCBoZXJlCi0g
ICAgLy8gYmVjYXVzZSBzZXRJbnRlcmlvclBpeGVscyBpcyBhbHNvIGltcGxlbWVudGVkIGhlcmUK
LSAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8dHJ1
ZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci0gICAgZWxzZQotICAgICAgICBmYXN0
U2V0T3V0ZXJQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgeDEsIHkxLCB4MiwgeTIpOwotfQor
fSAvLyBuYW1lc3BhY2UgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlCiAKIGJvb2wgRkVDb252b2x2
ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CkBAIC0zODMs
MTMgKzM2OCwxOCBAQCBib29sIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKQogCiAgICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKTsKICAgICAKLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewor
ICAgIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSA9
IHsKICAgICAgICAgKnNvdXJjZVBpeGVsQXJyYXksCiAgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSwKICAgICAgICAgcGFpbnRTaXplLndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6ZS5oZWln
aHQoKSwKKyAgICAgICAgbV9rZXJuZWxTaXplLAorICAgICAgICBtX2Rpdmlzb3IsCiAgICAgICAg
IG1fYmlhcyAqIDI1NSwKLSAgICAgICAgbm9ybWFsaXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkK
KyAgICAgICAgbV90YXJnZXRPZmZzZXQsCisgICAgICAgIG1fZWRnZU1vZGUsCisgICAgICAgIG1f
cHJlc2VydmVBbHBoYSwKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyht
X2tlcm5lbE1hdHJpeCkKICAgICB9OwogCiAgICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBp
eGVscwpAQCAtNDAyLDYgKzM5Miw4IEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAoMTAw
ICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKwogICAg
IGlmIChpbnQgaXRlcmF0aW9ucyA9IChhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCkgKiBhYnNv
bHV0ZVBhaW50UmVjdCgpLmhlaWdodCgpKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24pIHsKICAg
ICAgICAgaW50IHN0cmlkZSA9IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOwogICAgICAgICBpbnQg
Y2h1bmtDb3VudCA9IChjbGlwQm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJpZGU7CkBAIC00MTAs
MjEgKzQwMiwyMSBAQCBib29sIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKQogICAgICAgICAgICAgaW50IHlTdGFydCA9IChzdHJpZGUgKiBpbmRl
eCk7CiAgICAgICAgICAgICBpbnQgeUVuZCA9IHN0ZDo6bWluPGludD4oc3RyaWRlICogKGluZGV4
ICsgMSksIGNsaXBCb3R0b20pOwogCi0gICAgICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWlu
dGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKKyAgICAgICAg
ICAgIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZTo6c2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdE
YXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7CiAgICAgICAgIH0pOwog
ICAgIH0gZWxzZQotICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBS
aWdodCwgY2xpcEJvdHRvbSwgMCwgY2xpcEJvdHRvbSk7CisgICAgICAgIEZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZTo6c2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNs
aXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOwogCiAgICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zm
c2V0LngoKSArIDE7CiAgICAgY2xpcEJvdHRvbSArPSBtX3RhcmdldE9mZnNldC55KCkgKyAxOwog
ICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkp
OworICAgICAgICBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmU6OnNldE91dGVyUGl4ZWxzKHBhaW50
aW5nRGF0YSwgMCwgMCwgcGFpbnRTaXplLndpZHRoKCksIG1fdGFyZ2V0T2Zmc2V0LnkoKSk7CiAg
ICAgaWYgKGNsaXBCb3R0b20gPCBwYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHNldE91dGVy
UGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgY2xpcEJvdHRvbSwgcGFpbnRTaXplLndpZHRoKCksIHBh
aW50U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZTo6c2V0
T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWludFNpemUud2lkdGgo
KSwgcGFpbnRTaXplLmhlaWdodCgpKTsKICAgICBpZiAobV90YXJnZXRPZmZzZXQueCgpID4gMCkK
LSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9mZnNldC55
KCksIG1fdGFyZ2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7CisgICAgICAgIEZFQ29udm9sdmVN
YXRyaXhTb2Z0d2FyZTo6c2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9m
ZnNldC55KCksIG1fdGFyZ2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7CiAgICAgaWYgKGNsaXBS
aWdodCA8IHBhaW50U2l6ZS53aWR0aCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGlu
Z0RhdGEsIGNsaXBSaWdodCwgbV90YXJnZXRPZmZzZXQueSgpLCBwYWludFNpemUud2lkdGgoKSwg
Y2xpcEJvdHRvbSk7CisgICAgICAgIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZTo6c2V0T3V0ZXJQ
aXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgcGFpbnRT
aXplLndpZHRoKCksIGNsaXBCb3R0b20pOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVN
YXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5oCmluZGV4IDA1YzFhODM3ZDIzNGNmNTg0ZGU4OTBmNTk0YjIyMDczZjEzMzY1
YzUuLjZiN2FkZTZmMGIyMjg5ZjM0M2U1NjgxNGZkOGMyZGU1NDQ3M2ZmOTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJp
eC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5oCkBAIC02NCwxNiArNjQsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRQcmVz
ZXJ2ZUFscGhhKGJvb2wpOwogCiBwcml2YXRlOgotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7
Ci0gICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5OwotICAgICAg
ICBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwot
ICAgICAgICBpbnQgaGVpZ2h0OwotICAgICAgICBmbG9hdCBiaWFzOwotICAgICAgICBWZWN0b3I8
ZmxvYXQ+IGtlcm5lbE1hdHJpeDsKLSAgICB9OwotCiAgICAgRkVDb252b2x2ZU1hdHJpeChjb25z
dCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJ
bnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtl
cm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYg
a2VybmVsTWF0cml4KTsKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29u
c3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CkBAIC04MiwyMSArNzIsNiBAQCBwcml2YXRlOgogCiAg
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB0ZW1wbGF0ZTxi
b29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGZhc3RTZXRJ
bnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRv
bSwgaW50IHlTdGFydCwgaW50IHlFbmQpOwotCi0gICAgQUxXQVlTX0lOTElORSBpbnQgZ2V0UGl4
ZWxWYWx1ZShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHkpOwotCi0gICAgdGVtcGxhdGU8Ym9v
bCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotICAgIHZvaWQgZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50
aW5nRGF0YSYsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5Mik7Ci0KLSAgICAvLyBXcmFw
cGVyIGZ1bmN0aW9ucwotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRJbnRlcmlvclBpeGVscyhQ
YWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwg
aW50IHlFbmQpOwotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRPdXRlclBpeGVscyhQYWludGlu
Z0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gUGFyYWxs
ZWxpemF0aW9uIHBhcnRzCi0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5z
aW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBq
b2JzCi0KICAgICBJbnRTaXplIG1fa2VybmVsU2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CiAg
ICAgZmxvYXQgbV9iaWFzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAppbmRleCAxYWFjZTlk
NjlhMDkwYjRmMTBmMTNkZTc1NTc1MWVmMjg2MjA5MWNkLi5lYzcxYjU0N2ExZGY4NmE5MTM5ZDEz
YWU2MzM4Njc0Mjk1ZTk4N2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcApAQCAtMzMs
NyArMzMsNyBAQCBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVh
dGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsbwogfQogCiBGRURpZmZ1c2VMaWdodGlu
Zzo6RkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1
cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJj
ZSkKLSAgICA6IEZFTGlnaHRpbmcoRGlmZnVzZUxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJm
YWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgMCwgMCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5l
bFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSwgRmlsdGVyRWZmZWN0OjpUeXBlOjpG
RURpZmZ1c2VMaWdodGluZykKKyAgICA6IEZFTGlnaHRpbmcoRmlsdGVyRWZmZWN0OjpUeXBlOjpG
RURpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29u
c3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92
ZShsaWdodFNvdXJjZSkpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCAzY2Qw
NWNjNDk1NTE3MTk5YWNkYzg4ZWQ1MTM3NjY0MzYwNmI5MjVlLi42Y2JmNWRiZWVhZmU3NTgwOWFj
YzVkY2FkM2E5Zjc3Njk1NzhmODc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC01Mywx
MyArNTMsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRURpc3BsYWNlbWVudE1hcChDaGFu
bmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNo
YW5uZWxTZWxlY3RvciwgZmxvYXQpOwogCisgICAgaW50IHhDaGFubmVsSW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisgICAgaW50IHlDaGFubmVsSW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisKICAgICBib29sIHBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CiAK
LSAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3Rv
ciAtIDE7IH0KLSAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5u
ZWxTZWxlY3RvciAtIDE7IH0KLQogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3hDaGFubmVsU2VsZWN0b3I7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwCmluZGV4IDUwYjJjMWUwMmQ5ZDg4YzkxZmNjZTg0NTJiYmM5MTk4NTE4
OTRkNWUuLjhjN2E2NGZmYjZkYTRkOGIxOGRhODNjNWIwZTFkYWVkOGM4MmUyODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJs
dXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwCkBAIC0zMCwyOCArMzAsMTI0IEBACiAjaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
KyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFKQogI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxl
cmF0ZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjZW5kaWYKIAot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Vp
bnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRl
IDx3dGYvUGFyYWxsZWxKb2JzLmg+CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxGRUdhdXNz
aWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9k
ZVR5cGUgZWRnZU1vZGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lhbkJs
dXIoeCwgeSwgZWRnZU1vZGUpKTsKK30KKworRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVy
KGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKKyAgICA6IEZpbHRlckVm
ZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFR2F1c3NpYW5CbHVyKQorICAgICwgbV9zdGRYKHgp
CisgICAgLCBtX3N0ZFkoeSkKKyAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUpCit7Cit9CisKK3Zv
aWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgoZmxvYXQgeCkKK3sKKyAgICBtX3N0
ZFggPSB4OworfQorCit2b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25ZKGZsb2F0
IHkpCit7CisgICAgbV9zdGRZID0geTsKK30KKwordm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0RWRn
ZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoreworICAgIG1fZWRnZU1vZGUgPSBlZGdlTW9k
ZTsKK30KIAogc3RhdGljIGlubGluZSBmbG9hdCBnYXVzc2lhbktlcm5lbEZhY3RvcigpCiB7CiAg
ICAgcmV0dXJuIDMgLyA0LmYgKiBzcXJ0ZigyICogcGlGbG9hdCk7CiB9CiAKLXN0YXRpYyBjb25z
dCBpbnQgZ01heEtlcm5lbFNpemUgPSA1MDA7CitzdGF0aWMgaW50IGNsYW1wZWRUb0tlcm5lbFNp
emUoZmxvYXQgdmFsdWUpCit7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhLZXJu
ZWxTaXplID0gNTAwOwogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgLy8gTGltaXQgdGhlIGtl
cm5lbCBzaXplIHRvIDUwMC4gQSBiaWdnZXIgcmFkaXVzIHdvbid0IG1ha2UgYSBiaWcgZGlmZmVy
ZW5jZSBmb3IgdGhlIHJlc3VsdCBpbWFnZSBidXQKKyAgICAvLyBpbmZsYXRlcyB0aGUgYWJzb2x1
dGUgcGFpbnQgcmVjdCB0b28gbXVjaC4gVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggRmlyZWZveCcg
YmVoYXZpb3IuCisgICAgdW5zaWduZWQgc2l6ZSA9IHN0ZDo6bWF4PHVuc2lnbmVkPigyLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oZmxvb3JmKHZhbHVlICogZ2F1c3NpYW5LZXJuZWxGYWN0b3IoKSAr
IDAuNWYpKSk7CisgICAgcmV0dXJuIGNsYW1wVG88aW50PihzdGQ6Om1pbihzaXplLCBtYXhLZXJu
ZWxTaXplKSk7Cit9CisgICAgCitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNj
YWxlZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKK3sKKyAgICBBU1NFUlQoc3Rk
RGV2aWF0aW9uLndpZHRoKCkgPj0gMCAmJiBzdGREZXZpYXRpb24uaGVpZ2h0KCkgPj0gMCk7Cisg
ICAgSW50U2l6ZSBrZXJuZWxTaXplOworCisgICAgaWYgKHN0ZERldmlhdGlvbi53aWR0aCgpKQor
ICAgICAgICBrZXJuZWxTaXplLnNldFdpZHRoKGNsYW1wZWRUb0tlcm5lbFNpemUoc3RkRGV2aWF0
aW9uLndpZHRoKCkpKTsKKworICAgIGlmIChzdGREZXZpYXRpb24uaGVpZ2h0KCkpCisgICAgICAg
IGtlcm5lbFNpemUuc2V0SGVpZ2h0KGNsYW1wZWRUb0tlcm5lbFNpemUoc3RkRGV2aWF0aW9uLmhl
aWdodCgpKSk7CisKKyAgICByZXR1cm4ga2VybmVsU2l6ZTsKK30KKworSW50U2l6ZSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRT
aXplIHN0ZERldmlhdGlvbikKK3sKKyAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxT
aXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHN0ZERldmlhdGlvbikpOworfQorCitJbnRT
aXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZp
YXRpb24pCit7CisgICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxT
aXplKHN0ZERldmlhdGlvbik7CisKKyAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXpl
IGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJl
ZSB0aW1lcy4KKyAgICByZXR1cm4geyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAqIGtl
cm5lbFNpemUuaGVpZ2h0KCkgLyAyIH07Cit9CisKK3ZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIEludFNp
emUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9z
dGRZIH0pOworCisgICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3Qo
MCktPmFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgLy8gRWRnZSBtb2RlcyBvdGhlciB0aGFuICdu
b25lJyBkbyBub3QgaW5mbGF0ZSB0aGUgYWZmZWN0ZWQgcGFpbnQgcmVjdC4KKyAgICBpZiAobV9l
ZGdlTW9kZSAhPSBFREdFTU9ERV9OT05FKSB7CisgICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0
KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5
IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgorICAg
IGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVm
KTsKKyAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQo
KSAqIDAuNWYpOworCisgICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKKyAgICAgICAgYWJzb2x1dGVQ
YWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7CisgICAgZWxzZQorICAgICAgICBh
YnNvbHV0ZVBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOworCisgICAgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOworfQorCitu
YW1lc3BhY2UgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZSB7CisKK3N0cnVjdCBQbGF0Zm9ybUFwcGx5
UGFyYW1ldGVycyB7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBpb1BpeGVsQXJyYXk7
CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB0bXBQaXhlbEFycmF5OworICAgIGludCB3
aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIHVuc2lnbmVkIGtlcm5lbFNpemVYOworICAgIHVu
c2lnbmVkIGtlcm5lbFNpemVZOworICAgIGJvb2wgaXNBbHBoYUltYWdlOworICAgIEVkZ2VNb2Rl
VHlwZSBlZGdlTW9kZTsKK307CiAKLWlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVy
SXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0YVJp
Z2h0KQorc3RhdGljIGlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9u
LCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0YVJpZ2h0KQogewog
ICAgIC8vIENoZWNrIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVHYXVz
c2lhbkJsdXJFbGVtZW50IGZvciBkZXRhaWxzLgogICAgIHN3aXRjaCAoYmx1ckl0ZXJhdGlvbikg
ewpAQCAtNzksMzYgKzE3NSw4IEBAIGlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVy
SXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwKICAgICB9CiB9CiAK
LVJlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9h
dCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RkVHYXVzc2lhbkJsdXIoeCwgeSwgZWRnZU1vZGUpKTsKLX0KLQotRkVHYXVzc2lhbkJsdXI6OkZF
R2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLSAg
ICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFR2F1c3NpYW5CbHVyKQotICAg
ICwgbV9zdGRYKHgpCi0gICAgLCBtX3N0ZFkoeSkKLSAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUp
Ci17Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgoZmxvYXQgeCkK
LXsKLSAgICBtX3N0ZFggPSB4OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZp
YXRpb25ZKGZsb2F0IHkpCi17Ci0gICAgbV9zdGRZID0geTsKLX0KLQotdm9pZCBGRUdhdXNzaWFu
Qmx1cjo6c2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIG1fZWRnZU1v
ZGUgPSBlZGdlTW9kZTsKLX0KLQogLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJhdGVzIG9uIEFs
cGhhIGNoYW5uZWwuCi1pbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJh
eSwKK3N0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwK
ICAgICB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUs
IGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNv
bnN0IGludCYgbWF4S2VybmVsU2l6ZSkKIHsKICAgICBjb25zdCB1aW50OF90KiBzcmNEYXRhID0g
c3JjUGl4ZWxBcnJheS5kYXRhKCk7CkBAIC0zNzEsMzEgKzQzOSwzNSBAQCBpbmxpbmUgdm9pZCBz
dGFuZGFyZEJveEJsdXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRB
cnJheSYgdGVtcAogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRm
b3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVk
QXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJu
ZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQorc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3Jt
QXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJy
YXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxT
aXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlKQogewogICAgIGludCBzdHJpZGUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7CiAK
ICNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBpZiAoa2VybmVsU2l6ZVggPT0ga2VybmVsU2l6ZVkg
JiYgKG1fZWRnZU1vZGUgPT0gRURHRU1PREVfTk9ORSB8fCBtX2VkZ2VNb2RlID09IEVER0VNT0RF
X0RVUExJQ0FURSkpIHsKKyAgICBpZiAoa2VybmVsU2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKGVk
Z2VNb2RlID09IEVER0VNT0RFX05PTkUgfHwgZWRnZU1vZGUgPT0gRURHRU1PREVfRFVQTElDQVRF
KSkgewogICAgICAgICBhY2NlbGVyYXRlQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwg
a2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAotICAgIHN0YW5kYXJkQm94Qmx1
cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBzdHJp
ZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlKCksIG1fZWRnZU1vZGUpOworICAgIHN0YW5kYXJk
Qm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZ
LCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7CiB9CiAKLXZvaWQg
RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRl
cnMqIHBhcmFtZXRlcnMpCisjaWYgIVVTRShBQ0NFTEVSQVRFKQorc3RhdGljIHZvaWQgcGxhdGZv
cm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKIHsKICAg
ICBJbnRTaXplIHBhaW50U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVycy0+aGVpZ2h0
KTsKLSAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbWV0
ZXJzLT5pb1BpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBwYXJhbWV0ZXJz
LT5rZXJuZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7CisgICAg
cGxhdGZvcm1BcHBseUdlbmVyaWMoKnBhcmFtZXRlcnMtPmlvUGl4ZWxBcnJheSwgKnBhcmFtZXRl
cnMtPnRtcFBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJzLT5r
ZXJuZWxTaXplWSwgcGFpbnRTaXplLCBwYXJhbWV0ZXJzLT5pc0FscGhhSW1hZ2UsIHBhcmFtZXRl
cnMtPmVkZ2VNb2RlKTsKIH0KKyNlbmRpZgogCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6
cGxhdGZvcm1BcHBseShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFy
cmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVs
U2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFw
cGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBp
eGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50
U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2Rl
KQogewogI2lmICFVU0UoQUNDRUxFUkFURSkKICAgICBpbnQgc2NhbmxpbmUgPSA0ICogcGFpbnRT
aXplLndpZHRoKCk7CiAgICAgaW50IGV4dHJhSGVpZ2h0ID0gMyAqIGtlcm5lbFNpemVZICogMC41
ZjsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAx
MDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCiAgICAg
aW50IG9wdGltYWxUaHJlYWROdW1iZXIgPSAocGFpbnRTaXplLndpZHRoKCkgKiBwYWludFNpemUu
aGVpZ2h0KCkpIC8gKHNfbWluaW1hbFJlY3REaW1lbnNpb24gKyBleHRyYUhlaWdodCAqIHBhaW50
U2l6ZS53aWR0aCgpKTsKIAogICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewpAQCAt
NDExLDcgKzQ4Myw2IEBAIGlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5
KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtCiAgICAgICAgICAgICBpbnQg
Y3VycmVudFkgPSAwOwogICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMDsgam9iIDwgam9iczsg
am9iKyspIHsKICAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW1z
ID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5m
aWx0ZXIgPSB0aGlzOwogCiAgICAgICAgICAgICAgICAgaW50IHN0YXJ0WSA9ICFqb2IgPyAwIDog
Y3VycmVudFkgLSBleHRyYUhlaWdodDsKICAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2Ig
PCBqb2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7CkBAIC00MzEs
NiArNTAyLDggQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkoVWlu
dDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW0KICAgICAgICAgICAgICAgICBwYXJh
bXMuaGVpZ2h0ID0gZW5kWSAtIHN0YXJ0WTsKICAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVs
U2l6ZVggPSBrZXJuZWxTaXplWDsKICAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVkg
PSBrZXJuZWxTaXplWTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuaXNBbHBoYUltYWdlID0gaXNB
bHBoYUltYWdlOworICAgICAgICAgICAgICAgIHBhcmFtcy5lZGdlTW9kZSA9IGVkZ2VNb2RlOwog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwpAQCAt
NDU4LDY2ICs1MzEsMTAgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBw
bHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW0KICNlbmRpZgogCiAgICAg
Ly8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxs
eSBvbiBzb21lIHBsYXRmb3Jtcy4KLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhpb0J1ZmZlciwg
dG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBwYWludFNpemUpOwotfQot
Ci1zdGF0aWMgaW50IGNsYW1wZWRUb0tlcm5lbFNpemUoZmxvYXQgdmFsdWUpCi17Ci0gICAgLy8g
TGltaXQgdGhlIGtlcm5lbCBzaXplIHRvIDUwMC4gQSBiaWdnZXIgcmFkaXVzIHdvbid0IG1ha2Ug
YSBiaWcgZGlmZmVyZW5jZSBmb3IgdGhlIHJlc3VsdCBpbWFnZSBidXQKLSAgICAvLyBpbmZsYXRl
cyB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCB0b28gbXVjaC4gVGhpcyBpcyBjb21wYXRpYmxlIHdp
dGggRmlyZWZveCcgYmVoYXZpb3IuCi0gICAgdW5zaWduZWQgc2l6ZSA9IHN0ZDo6bWF4PHVuc2ln
bmVkPigyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmxvb3JmKHZhbHVlICogZ2F1c3NpYW5LZXJu
ZWxGYWN0b3IoKSArIDAuNWYpKSk7Ci0gICAgcmV0dXJuIGNsYW1wVG88aW50PihzdGQ6Om1pbihz
aXplLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ01heEtlcm5lbFNpemUpKSk7Ci19Ci0gICAgCi1J
bnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRT
aXplIHN0ZERldmlhdGlvbikKLXsKLSAgICBBU1NFUlQoc3RkRGV2aWF0aW9uLndpZHRoKCkgPj0g
MCAmJiBzdGREZXZpYXRpb24uaGVpZ2h0KCkgPj0gMCk7Ci0gICAgSW50U2l6ZSBrZXJuZWxTaXpl
OwotCi0gICAgaWYgKHN0ZERldmlhdGlvbi53aWR0aCgpKQotICAgICAgICBrZXJuZWxTaXplLnNl
dFdpZHRoKGNsYW1wZWRUb0tlcm5lbFNpemUoc3RkRGV2aWF0aW9uLndpZHRoKCkpKTsKLQotICAg
IGlmIChzdGREZXZpYXRpb24uaGVpZ2h0KCkpCi0gICAgICAgIGtlcm5lbFNpemUuc2V0SGVpZ2h0
KGNsYW1wZWRUb0tlcm5lbFNpemUoc3RkRGV2aWF0aW9uLmhlaWdodCgpKSk7Ci0KLSAgICByZXR1
cm4ga2VybmVsU2l6ZTsKLX0KLQotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2Vy
bmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRTaXplIHN0ZERldmlhdGlvbikKLXsK
LSAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGZpbHRlci5zY2FsZWRCeUZp
bHRlclNjYWxlKHN0ZERldmlhdGlvbikpOwotfQotCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCi17Ci0gICAgYXV0byBr
ZXJuZWxTaXplID0gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKHN0ZERldmlhdGlvbik7Ci0K
LSAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRo
IHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICByZXR1cm4g
eyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAy
IH07CisgICAgcGxhdGZvcm1BcHBseUdlbmVyaWMoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtl
cm5lbFNpemVYLCBrZXJuZWxTaXplWSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2Rl
KTsKIH0KIAotdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIpCi17Ci0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3Vs
YXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0KLSAgICBGbG9hdFJl
Y3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3Qo
KTsKLSAgICAvLyBFZGdlIG1vZGVzIG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRo
ZSBhZmZlY3RlZCBwYWludCByZWN0LgotICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05P
TkUpIHsKLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNv
bHV0ZVBhaW50UmVjdCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgdGFr
ZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVz
ZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5m
bGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRS
ZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7Ci0KLSAgICBpZiAo
Y2xpcHNUb0JvdW5kcygpKQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4
RWZmZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRl
KG1heEVmZmVjdFJlY3QoKSk7Ci0KLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci19Cit9IC8vIG5hbWVzcGFjZSBGRUdhdXNzaWFu
Qmx1clNvZnR3YXJlCiAKIGJvb2wgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKQEAgLTU0Myw3ICs1NjAsNyBAQCBib29sIEZFR2F1
c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAg
ICAgaWYgKCF0bXBJbWFnZURhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHBsYXRm
b3JtQXBwbHkoZGVzdGluYXRpb25QaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXpl
LndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CisgICAgRkVHYXVzc2lh
bkJsdXJTb2Z0d2FyZTo6cGxhdGZvcm1BcHBseShkZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJ
bWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRT
aXplLCBpc0FscGhhSW1hZ2UoKSwgbV9lZGdlTW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuaAppbmRleCBkNzRiZGFhNzJlZDMwNGY1YjgwMTc3YWQ2Y2NhNzc1YTVi
NDkzNzE3Li42NWFhNmUxODg5N2ZhOGNjOTc2OWQxZTU1N2Q3ZDI2ZjVlNWNhMjIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5C
bHVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdh
dXNzaWFuQmx1ci5oCkBAIC00NiwyOSArNDYsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBG
RUdhdXNzaWFuQmx1cihmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUpOwogCi0gICAgc3Rh
dGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBp
cmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icwotCi0gICAgc3RydWN0IFBsYXRmb3Jt
QXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVHYXVzc2lhbkJsdXIqIGZpbHRlcjsKLSAgICAg
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBpb1BpeGVsQXJyYXk7Ci0gICAgICAgIFJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gdG1wUGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwot
ICAgICAgICBpbnQgaGVpZ2h0OwotICAgICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWDsKLSAgICAg
ICAgdW5zaWduZWQga2VybmVsU2l6ZVk7Ci0gICAgfTsKLQogICAgIHZvaWQgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKLSAgICBib29sIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKLQogICAgIEludE91dHNl
dHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJikgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBs
YXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xh
bXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2ln
bmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXpl
KTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1
ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVY
LCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKKyAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1fc3RkWDsKICAgICBm
bG9hdCBtX3N0ZFk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCBlODNjZjNiN2NkNjM2ODZmMWY0NDFlNTIy
OGYyYzU2YjRlYjRhMTgyLi4zOTVjMjNhMzZhZDgzM2Q0NGU0NDM2M2Q5ZTBkYTMwMjk5ZjFlZDU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5jcHAKQEAgLTM1LDEwICszNSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotRkVMaWdodGluZzo6RkVMaWdodGluZyhMaWdodGluZ1R5cGUgbGlnaHRpbmdUeXBlLCBj
b25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZm
dXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25l
bnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVm
PExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlLCBUeXBlIHR5cGUpCitGRUxpZ2h0aW5nOjpGRUxp
Z2h0aW5nKFR5cGUgdHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZh
Y2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBm
bG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKICAgICA6IEZp
bHRlckVmZmVjdCh0eXBlKQotICAgICwgbV9saWdodGluZ1R5cGUobGlnaHRpbmdUeXBlKQotICAg
ICwgbV9saWdodFNvdXJjZShXVEZNb3ZlKGxpZ2h0U291cmNlKSkKICAgICAsIG1fbGlnaHRpbmdD
b2xvcihsaWdodGluZ0NvbG9yKQogICAgICwgbV9zdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKQog
ICAgICwgbV9kaWZmdXNlQ29uc3RhbnQoZGlmZnVzZUNvbnN0YW50KQpAQCAtNDYsNiArNDQsNyBA
QCBGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0
IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbAogICAgICwgbV9zcGVjdWxhckV4cG9uZW50KHNwZWN1
bGFyRXhwb25lbnQpCiAgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhYKGtlcm5lbFVuaXRMZW5ndGhY
KQogICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWShrZXJuZWxVbml0TGVuZ3RoWSkKKyAgICAsIG1f
bGlnaHRTb3VyY2UoV1RGTW92ZShsaWdodFNvdXJjZSkpCiB7CiB9CiAKQEAgLTg1LDYgKzg0LDgg
QEAgYm9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorbmFtZXNwYWNlIEZFTGlnaHRpbmdTb2Z0
d2FyZSB7CisKIHN0YXRpYyBjb25zdGV4cHIgaW50IGNQaXhlbFNpemUgPSA0Owogc3RhdGljIGNv
bnN0ZXhwciBpbnQgY0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7CiBzdGF0aWMgY29uc3RleHByIHVp
bnQ4X3QgY09wYXF1ZUFscGhhID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRik7CkBAIC05NSw3
ICs5Niw3NiBAQCBzdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2MyA9IC0xIC8gMy5m
Owogc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjQgPSAtMSAvIDQuZjsKIHN0YXRp
YyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjJkaXYzID0gLTIgLyAzLmY7CiAKLWlubGluZSBJbnRT
aXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBj
b25zdAorc3RydWN0IEFscGhhV2luZG93IHsKKyAgICB1aW50OF90IGFscGhhWzNdWzNdIHsgfTsK
KyAgICAKKyAgICAvLyBUaGUgaW1wbGVtZW50YXRpb25zIGFyZSBsaW5lZCB1cCB0byBtYWtlIGNv
bXBhcmluZyBpbmRpY2VzIGVhc2llci4KKyAgICB1aW50OF90IHRvcExlZnQoKSBjb25zdCAgICAg
ICAgICAgICB7IHJldHVybiBhbHBoYVswXVswXTsgfQorICAgIHVpbnQ4X3QgbGVmdCgpIGNvbnN0
ICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzBdOyB9CisgICAgdWludDhfdCBib3R0
b21MZWZ0KCkgY29uc3QgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMF07IH0KKworICAgIHVp
bnQ4X3QgdG9wKCkgY29uc3QgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzFdOyB9
CisgICAgdWludDhfdCBjZW50ZXIoKSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFb
MV1bMV07IH0KKyAgICB1aW50OF90IGJvdHRvbSgpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVy
biBhbHBoYVsyXVsxXTsgfQorCisgICAgdm9pZCBzZXRUb3AodWludDhfdCB2YWx1ZSkgICAgICAg
ICAgeyBhbHBoYVswXVsxXSA9IHZhbHVlOyB9CisgICAgdm9pZCBzZXRDZW50ZXIodWludDhfdCB2
YWx1ZSkgICAgICAgeyBhbHBoYVsxXVsxXSA9IHZhbHVlOyB9CisgICAgdm9pZCBzZXRCb3R0b20o
dWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsyXVsxXSA9IHZhbHVlOyB9CisKKyAgICB2b2lk
IHNldFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICB7IGFscGhhWzBdWzJdID0gdmFsdWU7IH0K
KyAgICB2b2lkIHNldFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICAgICB7IGFscGhhWzFdWzJdID0g
dmFsdWU7IH0KKyAgICB2b2lkIHNldEJvdHRvbVJpZ2h0KHVpbnQ4X3QgdmFsdWUpICB7IGFscGhh
WzJdWzJdID0gdmFsdWU7IH0KKworICAgIHN0YXRpYyB2b2lkIHNoaWZ0Um93KHVpbnQ4X3QgYWxw
aGFbM10pCisgICAgeworICAgICAgICBhbHBoYVswXSA9IGFscGhhWzFdOworICAgICAgICBhbHBo
YVsxXSA9IGFscGhhWzJdOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNoaWZ0KCkKKyAgICB7Cisg
ICAgICAgIHNoaWZ0Um93KGFscGhhWzBdKTsKKyAgICAgICAgc2hpZnRSb3coYWxwaGFbMV0pOwor
ICAgICAgICBzaGlmdFJvdyhhbHBoYVsyXSk7CisgICAgfQorfTsKKworc3RydWN0IExpZ2h0aW5n
RGF0YSB7CisgICAgLy8gVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgb25seSByZWFkLW9ubHkgKFNN
UCBzYWZlKSBkYXRhCisgICAgRkVMaWdodGluZyogZWZmZWN0OworICAgIENvbG9yIGxpZ2h0aW5n
Q29sb3I7CisgICAgZmxvYXQgc3VyZmFjZVNjYWxlOworICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFu
dDsKKyAgICBmbG9hdCBzcGVjdWxhckNvbnN0YW50OworICAgIGZsb2F0IHNwZWN1bGFyRXhwb25l
bnQ7CisgICAgY29uc3QgTGlnaHRTb3VyY2UqIGxpZ2h0U291cmNlOworICAgIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSogb3BlcmF0aW5nQ29sb3JTcGFjZTsKKyAgICBGaWx0ZXJFZmZlY3Q6
OlR5cGUgZmlsdGVyVHlwZTsKKworICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7CisgICAg
aW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCB3aWR0aERlY3JlYXNlZEJ5
T25lOworICAgIGludCBoZWlnaHREZWNyZWFzZWRCeU9uZTsKKworICAgIGlubGluZSBJbnRTaXpl
IHRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgaW5saW5lIEludFNpemUgdG9w
Um93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgIGlubGluZSBJbnRTaXplIHRvcFJpZ2h0
Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5O
b3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JOb3Jt
YWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmKSBjb25zdDsKKyAgICBpbmxpbmUgSW50U2l6ZSBy
aWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICBpbmxpbmUgSW50U2l6ZSBi
b3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgIGlubGluZSBJbnRTaXplIGJv
dHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICBpbmxpbmUgSW50U2l6ZSBib3R0
b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKK307CisKK3N0cnVjdCBQbGF0Zm9ybUFw
cGx5R2VuZXJpY1BhcmFtZXRlcnMgeworICAgIExpZ2h0aW5nRGF0YSBkYXRhOworICAgIExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOworICAgIGludCB5U3RhcnQ7CisgICAg
aW50IHlFbmQ7Cit9OworCitpbmxpbmUgSW50U2l6ZSBMaWdodGluZ0RhdGE6OnRvcExlZnROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGludCBy
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0xMDgsNyArMTc4LDcgQEAgaW5saW5lIEludFNp
emUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNv
bnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRh
Ojp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJbnRTaXplIExpZ2h0aW5n
RGF0YTo6dG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwogICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0xMjMsNyArMTkzLDcg
QEAgaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwo
aW50IG9mZnNldCkgY29uc3QKICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5n
OjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CitpbmxpbmUg
SW50U2l6ZSBMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7
CiAgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGludCBjZW50ZXIgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
CkBAIC0xMzYsNyArMjA2LDcgQEAgaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjp0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAKLWlubGlu
ZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdAoraW5saW5lIEludFNpemUgTGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKICAgICBpbnQg
cmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwpAQCAtMTUyLDcgKzIyMiw3IEBAIGlubGluZSBJbnRT
aXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0
KSBjb25zdAogICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5n
RGF0YTo6aW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmIGFscGhhV2luZG93
KSBjb25zdAoraW5saW5lIEludFNpemUgTGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbChpbnQg
b2Zmc2V0LCBBbHBoYVdpbmRvdyYgYWxwaGFXaW5kb3cpIGNvbnN0CiB7CiAgICAgaW50IHJpZ2h0
QWxwaGFPZmZzZXQgPSBvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldDsK
ICAgICAKQEAgLTE4Miw3ICsyNTIsNyBAQCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdo
dGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93JgogICAgIH07
CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1
bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJbnRTaXplIExpZ2h0aW5nRGF0YTo6
cmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAgLTE5OCw3ICsyNjgsNyBA
QCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Citp
bmxpbmUgSW50U2l6ZSBMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkg
Y29uc3QKIHsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGludCByaWdodCA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7CkBAIC0yMTEsNyArMjgxLDcgQEAgaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6
TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsK
IH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dO
b3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJbnRTaXplIExpZ2h0aW5nRGF0YTo6Ym90
dG9tUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwogICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0yMjYsNyArMjk2LDcgQEAgaW5s
aW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwoaW50
IG9mZnNldCkgY29uc3QKICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpM
aWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CitpbmxpbmUg
SW50U2l6ZSBMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0
CiB7CiAgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
LSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGludCBjZW50ZXIgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7CkBAIC0yMzksMjEgKzMwOSwxNiBAQCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdo
dGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0K
IAotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0Rh
dGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
aW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1h
bDJEVmVjdG9yKQotewotICAgIHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0LCBkYXRhLCBwYWludGlu
Z0RhdGEsIHgsIHksIGZhY3RvclgsIGZhY3RvclksIG5vcm1hbDJEVmVjdG9yLCBkYXRhLnBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci19Ci0KLXZvaWQgRkVMaWdo
dGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRh
dGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgs
IGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVj
dG9yLCBmbG9hdCBhbHBoYSkKK3N0YXRpYyB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNl
dCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFj
dG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3RvciwgZmxvYXQgYWxwaGEpCiB7CiAgICAgZmxvYXQg
eiA9IGFscGhhICogZGF0YS5zdXJmYWNlU2NhbGU7Ci0gICAgTGlnaHRTb3VyY2U6OkNvbXB1dGVk
TGlnaHRpbmdEYXRhIGxpZ2h0aW5nRGF0YSA9IG1fbGlnaHRTb3VyY2UtPmNvbXB1dGVQaXhlbExp
Z2h0aW5nRGF0YShwYWludGluZ0RhdGEsIHgsIHksIHopOworICAgIExpZ2h0U291cmNlOjpDb21w
dXRlZExpZ2h0aW5nRGF0YSBsaWdodGluZ0RhdGEgPSBkYXRhLmxpZ2h0U291cmNlLT5jb21wdXRl
UGl4ZWxMaWdodGluZ0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsKIAogICAgIGZsb2F0IGxp
Z2h0U3RyZW5ndGg7CiAgICAgaWYgKG5vcm1hbDJEVmVjdG9yLmlzWmVybygpKSB7CiAgICAgICAg
IC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlzIGlzIGEgcXVpdGUgZnJlcXVlbnQg
Y2FzZS4KLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VM
aWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAq
IGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JM
ZW5ndGg7CisgICAgICAgIGlmIChkYXRhLmZpbHRlclR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBl
OjpGRURpZmZ1c2VMaWdodGluZykKKyAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRp
ZmZ1c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0Rh
dGEubGlnaHRWZWN0b3JMZW5ndGg7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgRmxvYXRQ
b2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7CiAgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxp
Z2h0VmVjdG9yLngoKSwKQEAgLTI2MSwxMCArMzI2LDEwIEBAIHZvaWQgRkVMaWdodGluZzo6c2V0
UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0
IExpCiAgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0
aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGZs
b2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAgICAg
ICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxpZ2h0
U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBoYWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3
YXlWZWN0b3JMZW5ndGg7CisgICAgICAgICAgICBpZiAoZGF0YS5zcGVjdWxhckV4cG9uZW50ID09
IDEpCisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFu
dCAqIGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0aDsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50
ICogcG93ZihoYWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGgsIG1fc3BlY3Vs
YXJFeHBvbmVudCk7CisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3Vs
YXJDb25zdGFudCAqIHBvd2YoaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3Ro
LCBkYXRhLnNwZWN1bGFyRXhwb25lbnQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgRmxvYXRQb2ludDNEIG5vcm1hbFZlY3RvciA9IHsKQEAgLTI3NCw4ICszMzksOCBAQCB2b2lk
IEZFTGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdE
YXRhJiBkYXRhLCBjb25zdCBMaQogICAgICAgICB9OwogICAgICAgICBmbG9hdCBub3JtYWxWZWN0
b3JMZW5ndGggPSBub3JtYWxWZWN0b3IubGVuZ3RoKCk7CiAKLSAgICAgICAgaWYgKG1fbGlnaHRp
bmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0
U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBsaWdodGluZ0Rh
dGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGxpZ2h0aW5nRGF0YS5saWdo
dFZlY3Rvckxlbmd0aCk7CisgICAgICAgIGlmIChkYXRhLmZpbHRlclR5cGUgPT0gRmlsdGVyRWZm
ZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykKKyAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGgg
PSBkYXRhLmRpZmZ1c2VDb25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBsaWdodGluZ0RhdGEubGln
aHRWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rv
ckxlbmd0aCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3
YXlWZWN0b3IgPSB7CiAgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngo
KSwKQEAgLTI4MywxMCArMzQ4LDEwIEBAIHZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5h
bChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpCiAgICAgICAg
ICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdo
dFZlY3Rvckxlbmd0aAogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlW
ZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYgKG1f
c3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBt
X3NwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9y
bWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBpZiAo
ZGF0YS5zcGVjdWxhckV4cG9uZW50ID09IDEpCisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0
aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9y
KSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3RoKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0
YW50ICogcG93Zigobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9y
TGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCksIG1fc3BlY3VsYXJFeHBvbmVudCk7CisgICAg
ICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIHBvd2Yo
KG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhh
bGZ3YXlWZWN0b3JMZW5ndGgpLCBkYXRhLnNwZWN1bGFyRXhwb25lbnQpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC0zMDQsOCArMzY5LDEzIEBAIHZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRl
cm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpCiAgICAg
ZGF0YS5waXhlbHMtPnNldFJhbmdlKHBpeGVsVmFsdWUsIDMsIG9mZnNldCk7CiB9CiAKK3N0YXRp
YyB2b2lkIHNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29u
c3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHks
IGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IpCit7
CisgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwg
ZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFsMkRWZWN0b3IsIGRhdGEucGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKK30KKwogLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQg
ZnJvbSBhbmQgd3JpdGUgdG8gdGhlIHNhbWUgcGl4ZWwgYnVmZmVyLCBidXQgaXQgb25seSByZWFk
cyB0aGUgYWxwaGEgY2hhbm5lbCwgYW5kIHdyaXRlcyB0aGUgbm9uLWFscGhhIGNoYW5uZWxzLgot
dm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5n
RGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKK3N0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmlj
UGFpbnQoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRp
bmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBzdGFydFksIGludCBlbmRZKQogewogICAgIC8vIE1h
a2Ugc3VyZSBzdGFydFkgaXMgPiAwIHNpbmNlIHdlIHJlYWQgZnJvbSB0aGUgcHJldmlvdXMgcm93
IGluIHRoZSBsb29wLgogICAgIEFTU0VSVChzdGFydFkpOwpAQCAtMzM3LDE2ICs0MDcsMTkgQEAg
dm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5n
RGF0YSYgZGF0YSwgY29uc3QgTGlnaHQKICAgICB9CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6cGxh
dGZvcm1BcHBseUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKiBw
YXJhbWV0ZXJzKQorc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIoUGxhdGZv
cm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQogewotICAgIHBhcmFtZXRlcnMt
PmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJh
bWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+eUVu
ZCk7CisgICAgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJh
bWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+eUVu
ZCk7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGln
aHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEpCitzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGluZ0Rh
dGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkK
IHsKICAgICB1bnNpZ25lZCByb3dzVG9Qcm9jZXNzID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9u
ZSAtIDE7CiAgICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHJvd3NUb1Byb2Nlc3MgLyA4Owor
ICAgIAorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAx
MDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCiAgICAg
dW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPigoKGRhdGEu
d2lkdGhEZWNyZWFzZWRCeU9uZSAtIDEpICogcm93c1RvUHJvY2VzcykgLyBzX21pbmltYWxSZWN0
RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKKwogICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVy
ID4gMSkgewogICAgICAgICAvLyBJbml0aWFsaXplIHBhcmFsbGVsIGpvYnMKICAgICAgICAgUGFy
YWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZw
bGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CkBAIC0zNjIs
NyArNDM1LDYgQEAgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBM
aWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmMKICAgICAgICAgICAgIGludCB5U3Rh
cnQgPSAxOwogICAgICAgICAgICAgZm9yICgtLWpvYjsgam9iID49IDA7IC0tam9iKSB7CiAgICAg
ICAgICAgICAgICAgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJh
bGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9
IHRoaXM7CiAgICAgICAgICAgICAgICAgcGFyYW1zLmRhdGEgPSBkYXRhOwogICAgICAgICAgICAg
ICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSBwYWludGluZ0RhdGE7CiAgICAgICAgICAgICAgICAg
cGFyYW1zLnlTdGFydCA9IHlTdGFydDsKQEAgLTM3OCw3ICs0NTAsNyBAQCB2b2lkIEZFTGlnaHRp
bmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3Qg
TGlnaHRTb3VyYwogICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQoZGF0YSwgcGFpbnRpbmdE
YXRhLCAxLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lKTsKIH0KIAotaW5saW5lIHZvaWQgRkVM
aWdodGluZzo6cGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExp
Z2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3Vy
Y2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogewogICAgIC8vIFRoZSBzZWxlY3Rpb24g
aGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9y
bXMuCiAjaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxF
UihHQ0NfQ09NUEFUSUJMRSkKQEAgLTM4OCwyNiArNDYwLDE0IEBAIGlubGluZSB2b2lkIEZFTGln
aHRpbmc6OnBsYXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdo
dFNvdXJjCiAjZW5kaWYKIH0KIAotYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhD
bGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorc3RhdGljIGJvb2wg
ZHJhd0xpZ2h0aW5nKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSkKIHsKICAgICBMaWdodFNvdXJj
ZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBMaWdodGluZ0RhdGEgZGF0YTsKLQot
ICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBib3RoKSBp
cyAxIHBpeGVsLgotICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlzIGNhc2Uu
IE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KLSAgICBpZiAod2lkdGggPD0gMiB8fCBoZWln
aHQgPD0gMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZGF0YS5waXhlbHMgPSAmcGl4
ZWxzOwotICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9zdXJmYWNlU2NhbGUgLyAyNTUuMGY7Ci0g
ICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHdpZHRoICogY1BpeGVsU2l6ZTsK
LSAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7Ci0gICAgZGF0YS5oZWln
aHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IG1fbGlnaHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZShvcGVyYXRpbmdD
b2xvclNwYWNlKCkpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZGF0YS5saWdodGluZ0NvbG9y
LnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2Up
OwogICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxv
YXRQb2ludDNEKHIsIGcsIGIpOwogCi0gICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0
YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKKyAgICBkYXRhLmxpZ2h0U291cmNlLT5pbml0UGFpbnRp
bmdEYXRhKCpkYXRhLmVmZmVjdCwgcGFpbnRpbmdEYXRhKTsKIAogICAgIC8vIFRvcCBsZWZ0Lgog
ICAgIGludCBvZmZzZXQgPSAwOwpAQCAtNDIyLDEwICs0ODIsMTAgQEAgYm9vbCBGRUxpZ2h0aW5n
OjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KQogICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRh
LmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5i
b3R0b21MZWZ0Tm9ybWFsKG9mZnNldCkpOwogCiAgICAgLy8gQm90dG9tIHJpZ2h0LgotICAgIG9m
ZnNldCA9IGhlaWdodCAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxT
aXplOworICAgIG9mZnNldCA9IChkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICsgMSkgKiBkYXRh
LndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKICAgICBzZXRQaXhlbChv
ZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCBkYXRh
LmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5i
b3R0b21SaWdodE5vcm1hbChvZmZzZXQpKTsKIAotICAgIGlmICh3aWR0aCA+PSAzKSB7CisgICAg
aWYgKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA+PSAyKSB7CiAgICAgICAgIC8vIFRvcCByb3cu
CiAgICAgICAgIG9mZnNldCA9IGNQaXhlbFNpemU7CiAgICAgICAgIGZvciAoaW50IHggPSAxOyB4
IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQpA
QCAtNDM3LDcgKzQ5Nyw3IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xh
bXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICAgICAgICAgIHNl
dFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCBkYXRhLmhlaWdodERlY3JlYXNl
ZEJ5T25lLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS5ib3R0b21Sb3dOb3JtYWwo
b2Zmc2V0KSk7CiAgICAgfQogCi0gICAgaWYgKGhlaWdodCA+PSAzKSB7CisgICAgaWYgKGRhdGEu
aGVpZ2h0RGVjcmVhc2VkQnlPbmUgPj0gMikgewogICAgICAgICAvLyBMZWZ0IGNvbHVtbi4KICAg
ICAgICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKICAgICAgICAg
Zm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNl
dCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQpAQCAtNDQ5LDEzICs1MDksMTMg
QEAgYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVs
cywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBk
YXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgeSwgY0ZhY3RvcjFk
aXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEucmlnaHRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7CiAgICAg
fQogCi0gICAgaWYgKHdpZHRoID49IDMgJiYgaGVpZ2h0ID49IDMpIHsKKyAgICBpZiAoZGF0YS53
aWR0aERlY3JlYXNlZEJ5T25lID49IDIgJiYgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA+PSAy
KSB7CiAgICAgICAgIC8vIEludGVyaW9yIHBpeGVscy4KICAgICAgICAgcGxhdGZvcm1BcHBseShk
YXRhLCBwYWludGluZ0RhdGEpOwogICAgIH0KIAotICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICogaGVpZ2h0OwotICAgIGlmIChtX2xpZ2h0aW5nVHlw
ZSA9PSBEaWZmdXNlTGlnaHRpbmcpIHsKKyAgICBpbnQgbGFzdFBpeGVsID0gZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIChkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICsgMSk7Cisg
ICAgaWYgKGRhdGEuZmlsdGVyVHlwZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxp
Z2h0aW5nKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBjQWxwaGFDaGFubmVsT2Zmc2V0OyBpIDwg
bGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpCiAgICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0
KGksIGNPcGFxdWVBbHBoYSk7CiAgICAgfSBlbHNlIHsKQEAgLTQ3MSw2ICs1MzEsOCBAQCBib29s
IEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQg
d2lkdGgsIGludCBoZWlnaHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK30gLy8gbmFtZXNwYWNl
IEZFTGlnaHRpbmdTb2Z0d2FyZQorCiBib29sIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKQEAgLTQ5MCw4ICs1NTIsMzAgQEAgYm9vbCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikKICAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMga2VybmVs
VW5pdExlbmd0aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgogICAgIC8v
IEFueXdheSwgZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0
aW9uCiAKLSAgICBJbnRTaXplIGFic29sdXRlUGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCk7Ci0gICAgZHJhd0xpZ2h0aW5nKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgYWJzb2x1
dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOworICAgIElu
dFNpemUgc2l6ZSA9IEludFNpemUoYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOworCisgICAg
Ly8gRklYTUU6IGRvIHNvbWV0aGluZyBpZiB3aWR0aCBvciBoZWlnaHQgKG9yIGJvdGgpIGlzIDEg
cGl4ZWwuCisgICAgLy8gVGhlIFczIHNwZWMgZG9lcyBub3QgZGVmaW5lIHRoaXMgY2FzZS4gTm93
IHRoZSBmaWx0ZXIganVzdCByZXR1cm5zLgorICAgIGlmIChzaXplLndpZHRoKCkgPD0gMiB8fCBz
aXplLmhlaWdodCgpIDw9IDIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgRkVMaWdodGlu
Z1NvZnR3YXJlOjpMaWdodGluZ0RhdGEgZGF0YTsKKyAgICBkYXRhLmVmZmVjdCA9IHRoaXM7Cisg
ICAgZGF0YS5saWdodGluZ0NvbG9yID0gbV9saWdodGluZ0NvbG9yOworICAgIGRhdGEuc3VyZmFj
ZVNjYWxlID0gbV9zdXJmYWNlU2NhbGUgLyAyNTUuMGY7CisgICAgZGF0YS5kaWZmdXNlQ29uc3Rh
bnQgPSBtX2RpZmZ1c2VDb25zdGFudDsKKyAgICBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgPSBtX3Nw
ZWN1bGFyQ29uc3RhbnQ7CisgICAgZGF0YS5zcGVjdWxhckV4cG9uZW50ID0gbV9zcGVjdWxhckV4
cG9uZW50OworICAgIGRhdGEubGlnaHRTb3VyY2UgPSBtX2xpZ2h0U291cmNlLnB0cigpOworICAg
IGRhdGEub3BlcmF0aW5nQ29sb3JTcGFjZSA9ICZvcGVyYXRpbmdDb2xvclNwYWNlKCk7CisgICAg
ZGF0YS5maWx0ZXJUeXBlID0gZmlsdGVyVHlwZSgpOworCisgICAgZGF0YS5waXhlbHMgPSAmZGVz
dGluYXRpb25QaXhlbEFycmF5OworICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUg
PSBzaXplLndpZHRoKCkgKiBGRUxpZ2h0aW5nU29mdHdhcmU6OmNQaXhlbFNpemU7CisgICAgZGF0
YS53aWR0aERlY3JlYXNlZEJ5T25lID0gc2l6ZS53aWR0aCgpIC0gMTsKKyAgICBkYXRhLmhlaWdo
dERlY3JlYXNlZEJ5T25lID0gc2l6ZS5oZWlnaHQoKSAtIDE7CisKKyAgICBGRUxpZ2h0aW5nU29m
dHdhcmU6OmRyYXdMaWdodGluZyhkYXRhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5n
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
aAppbmRleCBhZDJmYzI4ZmE5ZTdmNGJmMjkxM2Q2N2I5ODA1N2Y4ZWViYjA4ZGIyLi4wY2Q1MDMz
NTMwZDk0ZjUyZTE0ZjE2M2UzMWI5ZjliZjQzYjI2NTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaApAQCAtMjksOSAr
MjksNiBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAj
aW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJk
Lmg+Ci0KLS8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBGRURpZmZ1c2VMaWdodGluZyBhbmQgRkVT
cGVjdWxhckxpZ2h0aW5nCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTQsMTAxICs1MSwx
NyBAQCBwdWJsaWM6CiAgICAgY29uc3QgTGlnaHRTb3VyY2UmIGxpZ2h0U291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV9saWdodFNvdXJjZS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGlj
IGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmlj
YWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icwotCi0gICAgZW51bSBMaWdodGluZ1R5cGUg
ewotICAgICAgICBEaWZmdXNlTGlnaHRpbmcsCi0gICAgICAgIFNwZWN1bGFyTGlnaHRpbmcKLSAg
ICB9OwotICAgIAotICAgIHN0cnVjdCBBbHBoYVdpbmRvdyB7Ci0gICAgICAgIHVpbnQ4X3QgYWxw
aGFbM11bM10geyB9OwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIGltcGxlbWVudGF0aW9ucyBh
cmUgbGluZWQgdXAgdG8gbWFrZSBjb21wYXJpbmcgaW5kaWNlcyBlYXNpZXIuCi0gICAgICAgIHVp
bnQ4X3QgdG9wTGVmdCgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzBdOyB9
Ci0gICAgICAgIHVpbnQ4X3QgbGVmdCgpIGNvbnN0ICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFs
cGhhWzFdWzBdOyB9Ci0gICAgICAgIHVpbnQ4X3QgYm90dG9tTGVmdCgpIGNvbnN0ICAgICAgICAg
IHsgcmV0dXJuIGFscGhhWzJdWzBdOyB9Ci0KLSAgICAgICAgdWludDhfdCB0b3AoKSBjb25zdCAg
ICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMF1bMV07IH0KLSAgICAgICAgdWludDhfdCBj
ZW50ZXIoKSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMV07IH0KLSAgICAg
ICAgdWludDhfdCBib3R0b20oKSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1b
MV07IH0KLQotICAgICAgICB2b2lkIHNldFRvcCh1aW50OF90IHZhbHVlKSAgICAgICAgICB7IGFs
cGhhWzBdWzFdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRDZW50ZXIodWludDhfdCB2YWx1
ZSkgICAgICAgeyBhbHBoYVsxXVsxXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Qm90dG9t
KHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxwaGFbMl1bMV0gPSB2YWx1ZTsgfQotCi0gICAgICAg
IHZvaWQgc2V0VG9wUmlnaHQodWludDhfdCB2YWx1ZSkgICAgIHsgYWxwaGFbMF1bMl0gPSB2YWx1
ZTsgfQotICAgICAgICB2b2lkIHNldFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICAgICB7IGFscGhh
WzFdWzJdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRCb3R0b21SaWdodCh1aW50OF90IHZh
bHVlKSAgeyBhbHBoYVsyXVsyXSA9IHZhbHVlOyB9Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgc2hp
ZnRSb3codWludDhfdCBhbHBoYVszXSkKLSAgICAgICAgewotICAgICAgICAgICAgYWxwaGFbMF0g
PSBhbHBoYVsxXTsKLSAgICAgICAgICAgIGFscGhhWzFdID0gYWxwaGFbMl07Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHZvaWQgc2hpZnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBz
aGlmdFJvdyhhbHBoYVswXSk7Ci0gICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVsxXSk7Ci0gICAg
ICAgICAgICBzaGlmdFJvdyhhbHBoYVsyXSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3Ry
dWN0IExpZ2h0aW5nRGF0YSB7Ci0gICAgICAgIC8vIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIG9u
bHkgcmVhZC1vbmx5IChTTVAgc2FmZSkgZGF0YQotICAgICAgICBVaW50OENsYW1wZWRBcnJheSog
cGl4ZWxzOwotICAgICAgICBmbG9hdCBzdXJmYWNlU2NhbGU7Ci0gICAgICAgIGludCB3aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHdpZHRoRGVjcmVhc2VkQnlPbmU7Ci0g
ICAgICAgIGludCBoZWlnaHREZWNyZWFzZWRCeU9uZTsKLQotICAgICAgICBpbmxpbmUgSW50U2l6
ZSB0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6
ZSB0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXpl
IHRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6
ZSBsZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50
U2l6ZSBpbnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYpIGNvbnN0OwotICAg
ICAgICBpbmxpbmUgSW50U2l6ZSByaWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsK
LSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dDsKLSAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQpIGNv
bnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0
KSBjb25zdDsKLSAgICB9OwotCi0gICAgc3RydWN0IFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1l
dGVycyB7Ci0gICAgICAgIEZFTGlnaHRpbmcqIGZpbHRlcjsKLSAgICAgICAgTGlnaHRpbmdEYXRh
IGRhdGE7Ci0gICAgICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwot
ICAgICAgICBpbnQgeVN0YXJ0OwotICAgICAgICBpbnQgeUVuZDsKLSAgICB9OwotCi0gICAgc3Rh
dGljIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQ
YXJhbWV0ZXJzKik7Ci0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseU5lb25Xb3JrZXIoRkVM
aWdodGluZ1BhaW50aW5nRGF0YUZvck5lb24qKTsKLQotICAgIEZFTGlnaHRpbmcoTGlnaHRpbmdU
eXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9h
dCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFy
RXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSwgUmVmPExpZ2h0U291cmNlPiYmLCBUeXBlKTsKLQotICAgIGJvb2wgZHJhd0xpZ2h0aW5nKFVp
bnQ4Q2xhbXBlZEFycmF5JiwgaW50LCBpbnQpOwotCi0gICAgdm9pZCBzZXRQaXhlbChpbnQgb2Zm
c2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRh
JiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5v
cm1hbFZlY3Rvcik7Ci0gICAgdm9pZCBzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0
IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwg
aW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9y
LCBmbG9hdCBhbHBoYSk7CisgICAgRkVMaWdodGluZyhUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRp
bmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0
IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsK
IAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3Zl
cnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJl
Y3QoKSkpOyB9CiAKICAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
KSBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEm
LCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7Ci0KLSAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlHZW5lcmljUGFpbnQoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6
OlBhaW50aW5nRGF0YSYsIGludCBzdGFydFgsIGludCBzdGFydFkpOwotICAgIHZvaWQgcGxhdGZv
cm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBh
aW50aW5nRGF0YSYpOwotCiAjaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFM
KSAmJiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKICAgICBzdGF0aWMgaW50IGdldFBvd2VyQ29l
ZmZpY2llbnRzKGZsb2F0IGV4cG9uZW50KTsKICAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5
TmVvbihjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRh
Jik7CiAjZW5kaWYKIAotICAgIExpZ2h0aW5nVHlwZSBtX2xpZ2h0aW5nVHlwZTsKLSAgICBSZWY8
TGlnaHRTb3VyY2U+IG1fbGlnaHRTb3VyY2U7Ci0KICAgICBDb2xvciBtX2xpZ2h0aW5nQ29sb3I7
CiAgICAgZmxvYXQgbV9zdXJmYWNlU2NhbGU7CiAgICAgZmxvYXQgbV9kaWZmdXNlQ29uc3RhbnQ7
CkBAIC0xNTYsNyArNjksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgZmxvYXQgbV9zcGVjdWxhckV4cG9u
ZW50OwogICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFg7CiAgICAgZmxvYXQgbV9rZXJuZWxV
bml0TGVuZ3RoWTsKKyAgICBSZWY8TGlnaHRTb3VyY2U+IG1fbGlnaHRTb3VyY2U7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCA0MzI4OGQ5ZTU5
MmYwMjgyODM4NDJlNzkyNGI3MTE1ZmM4ZjZjMjc2Li4wOWY4ZWUyYzExNDhiYjU4ZTQ5MjI3NzZk
YTkwYWE0ZmRhMjYwNTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC04MywyMyArODMsNDAgQEAg
dm9pZCBGRU1vcnBob2xvZ3k6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFp
bnRSZWN0KSk7CiB9CiAKK25hbWVzcGFjZSBGRU1vcnBob2xvZ3lTb2Z0d2FyZSB7CisKK3N0cnVj
dCBQYWludGluZ0RhdGEgeworICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZTsKKyAgICBp
bnQgcmFkaXVzWDsKKyAgICBpbnQgcmFkaXVzWTsKKyAgICBjb25zdCBVaW50OENsYW1wZWRBcnJh
eSogc3JjUGl4ZWxBcnJheTsKKyAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheTsK
KyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsKK307CisKK3N0cnVjdCBQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycyB7CisgICAgaW50IHN0YXJ0WTsKKyAgICBpbnQgZW5kWTsKKyAgICBjb25z
dCBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKK307CisKIHN0YXRpYyBpbmxpbmUgaW50IHBp
eGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGludCB3aWR0aCkKIHsKICAgICByZXR1cm4gKHkg
KiB3aWR0aCArIHgpICogNDsKIH0KIAotaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0
PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4
ZWwpCitzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JD
b21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4ZWwpCiB7CiAgICAg
cmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGFzU1JHQkEocGl4ZWwpKTsKIH0KIAotaW5saW5lIFBh
Y2tlZENvbG9yOjpSR0JBIG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhjb25zdCBD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGNvbXBvbmVudHMpCitzdGF0aWMgaW5saW5lIFBh
Y2tlZENvbG9yOjpSR0JBIG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhjb25zdCBD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGNvbXBvbmVudHMpCiB7CiAgICAgcmV0dXJuIFBh
Y2tlZENvbG9yOjpSR0JBIHsgbWFrZUZyb21Db21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+Pihjb21w
b25lbnRzKSB9OwogfQogCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1B
TFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiYgYikKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0
IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0
eXBlKQogewogICAgIGlmICh0eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKICAg
ICAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1pbihhLCBiKTsKQEAgLTEwNyw0NyArMTI0LDI5IEBA
IEFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNvbnN0
IENvbG9yQ29tcG9uZW50czx1aW50OF90CiAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1heChhLCBi
KTsKIH0KIAotdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lO
TElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVu
ZCwgaW50IHdpZHRoKQorc3RhdGljIEFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4
X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFy
cmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSB0eXBlKQogewogICAgIGF1dG8gZXh0cmVtdW0gPSBtYWtlQ29sb3JDb21wb25l
bnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgs
IHlTdGFydCwgd2lkdGgpKSB9KTsKIAogICAgIGZvciAoaW50IHkgPSB5U3RhcnQgKyAxOyB5IDwg
eUVuZDsgKyt5KSB7CiAgICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtlQ29sb3JDb21wb25lbnRzZnJv
bVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdp
ZHRoKSkgfSk7Ci0gICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8dHlwZT4oZXh0cmVtdW0sIHBp
eGVsKTsKKyAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heChleHRyZW11bSwgcGl4ZWwsIHR5cGUp
OwogICAgIH0KICAgICByZXR1cm4gZXh0cmVtdW07CiB9CiAKLUFMV0FZU19JTkxJTkUgQ29sb3JD
b21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0
aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQotewotICAgIGlmICh0eXBlID09IEZFTU9S
UEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKLSAgICAgICAgcmV0dXJuIGNvbHVtbkV4dHJlbXVtPEZF
TU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERT4oc3JjUGl4ZWxBcnJheSwgeCwgeVN0YXJ0LCB5RW5k
LCB3aWR0aCk7Ci0KLSAgICByZXR1cm4gY29sdW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJB
VE9SX0RJTEFURT4oc3JjUGl4ZWxBcnJheSwgeCwgeVN0YXJ0LCB5RW5kLCB3aWR0aCk7Ci19Ci0K
IHVzaW5nIENvbHVtbkV4dHJlbWEgPSBWZWN0b3I8Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
LCAxNj47CiAKLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZT4KLUFMV0FZU19J
TkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENv
bHVtbkV4dHJlbWEmIGtlcm5lbCkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWws
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKIHsKICAgICBhdXRvIGV4dHJlbXVtID0ga2Vy
bmVsWzBdOwogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwga2VybmVsLnNpemUoKTsgKytpKQot
ICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4PHR5cGU+KGV4dHJlbXVtLCBrZXJuZWxbaV0pOwor
ICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4KGV4dHJlbXVtLCBrZXJuZWxbaV0sIHR5cGUpOwog
CiAgICAgcmV0dXJuIGV4dHJlbXVtOwogfQogCi1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWws
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBGRU1PUlBI
T0xPR1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBrZXJuZWxFeHRyZW11bTxGRU1P
UlBIT0xPR1lfT1BFUkFUT1JfRVJPREU+KGtlcm5lbCk7Ci0KLSAgICByZXR1cm4ga2VybmVsRXh0
cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURT4oa2VybmVsKTsKLX0KLQotdm9pZCBG
RU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKK3N0YXRpYyB2b2lkIHBsYXRvZnJtQXBw
bHlHZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBp
bnQgZW5kWSkKIHsKICAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7CiAKQEAgLTE3MywyOCArMTcy
LDI4IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0CiAKICAgICAgICAgLy8gV2Ugc3RhcnQgYXQg
dGhlIGxlZnQgZWRnZSwgc28gY29tcHV0ZSBleHRyZW1lIGZvciB0aGUgcmFkaXVzWCBjb2x1bW5z
LgogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJhZGl1c1g7ICsreCkKLSAgICAgICAgICAg
IGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHgsIHlSYWRpdXNT
dGFydCwgeVJhZGl1c0VuZCwgd2lkdGgsIG1fdHlwZSkpOworICAgICAgICAgICAgZXh0cmVtYS5h
cHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCwgeVJhZGl1c1N0YXJ0LCB5UmFk
aXVzRW5kLCB3aWR0aCwgcGFpbnRpbmdEYXRhLnR5cGUpKTsKIAogICAgICAgICAvLyBLZXJuZWwg
aXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNvbHVtbgogICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKICAgICAgICAgICAgIGlmICh4IDwgd2lkdGggLSByYWRp
dXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1Bp
eGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBt
X3R5cGUpKTsKKyAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShz
cmNQaXhlbEFycmF5LCB4ICsgcmFkaXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0
aCwgcGFpbnRpbmdEYXRhLnR5cGUpKTsKIAogICAgICAgICAgICAgaWYgKHggPiByYWRpdXNYKQog
ICAgICAgICAgICAgICAgIGV4dHJlbWEucmVtb3ZlKDApOwogCiAgICAgICAgICAgICB1bnNpZ25l
ZCogZGVzdFBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBpeGVsQXJyYXku
ZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7Ci0gICAgICAgICAgICAqZGVz
dFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtlcm5lbEV4dHJlbXVt
KGV4dHJlbWEsIG1fdHlwZSkpLnZhbHVlOworICAgICAgICAgICAgKmRlc3RQaXhlbCA9IG1ha2VQ
aXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhrZXJuZWxFeHRyZW11bShleHRyZW1hLCBwYWlu
dGluZ0RhdGEudHlwZSkpLnZhbHVlOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIEZFTW9y
cGhvbG9neTo6cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFy
YW0pCitzdGF0aWMgdm9pZCBwbGF0b2ZybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0
ZXJzKiBwYXJhbSkKIHsKLSAgICBwYXJhbS0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpYygq
cGFyYW0tPnBhaW50aW5nRGF0YSwgcGFyYW0tPnN0YXJ0WSwgcGFyYW0tPmVuZFkpOworICAgIHBs
YXRvZnJtQXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRpbmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBw
YXJhbS0+ZW5kWSk7CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0
IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorc3RhdGljIHZvaWQgcGxhdG9mcm1BcHBseShj
b25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKIHsKICAgICAvLyBFbXBpcmljYWxseSwg
cnVudGltZSBpcyBhcHByb3hpbWF0ZWx5IGxpbmVhciBvdmVyIHJlYXNvbmFibGUga2VybmVsIHNp
emVzIHdpdGggYSBzbG9wZSBvZiBhYm91dCAwLjY1LgogICAgIGZsb2F0IGtlcm5lbEZhY3RvciA9
IHNxcnQocGFpbnRpbmdEYXRhLnJhZGl1c1ggKiBwYWludGluZ0RhdGEucmFkaXVzWSkgKiAwLjY1
OwpAQCAtMjA0LDcgKzIwMyw3IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNv
bnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogICAgIHVuc2lnbmVkIG1heE51bVRocmVh
ZHMgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC8gODsKICAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFk
TnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KChwYWludGluZ0RhdGEud2lkdGggKiBwYWludGlu
Z0RhdGEuaGVpZ2h0ICoga2VybmVsRmFjdG9yKSAvIG1pbmltYWxBcmVhLCBtYXhOdW1UaHJlYWRz
KTsKICAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgUGFyYWxsZWxK
b2JzPFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFTW9y
cGhvbG9neTo6cGxhdGZvcm1BcHBseVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAg
ICAgIFBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZw
bGF0b2ZybUFwcGx5V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKICAgICAgICAgYXV0byBu
dW1PZlRocmVhZHMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CiAgICAgICAgIGlmIChu
dW1PZlRocmVhZHMgPiAxKSB7CiAgICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gImpv
YlNpemUiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJlIHNs
aWdodGx5IGxhcmdlciBzaW5jZQpAQCAtMjE0LDcgKzIxMyw2IEBAIHZvaWQgRkVNb3JwaG9sb2d5
OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogICAgICAg
ICAgICAgaW50IGN1cnJlbnRZID0gMDsKICAgICAgICAgICAgIGZvciAoaW50IGpvYiA9IG51bU9m
VGhyZWFkcyAtIDE7IGpvYiA+PSAwOyAtLWpvYikgewogICAgICAgICAgICAgICAgIFBsYXRmb3Jt
QXBwbHlQYXJhbWV0ZXJzJiBwYXJhbSA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAg
ICAgICAgICAgICAgICBwYXJhbS5maWx0ZXIgPSB0aGlzOwogICAgICAgICAgICAgICAgIHBhcmFt
LnN0YXJ0WSA9IGN1cnJlbnRZOwogICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpv
YnNXaXRoRXh0cmEgPyBqb2JTaXplICsgMSA6IGpvYlNpemU7CiAgICAgICAgICAgICAgICAgcGFy
YW0uZW5kWSA9IGN1cnJlbnRZOwpAQCAtMjI2LDE5ICsyMjQsMTYgQEAgdm9pZCBGRU1vcnBob2xv
Z3k6OnBsYXRmb3JtQXBwbHkoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiAgICAg
ICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWQgbW9kZWwKICAgICB9CiAKLSAgICBwbGF0
Zm9ybUFwcGx5R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOwor
ICAgIHBsYXRvZnJtQXBwbHlHZW5lcmljKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRpbmdEYXRhLmhl
aWdodCk7CiB9CiAKLWJvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShV
aW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0
LCBpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCitzdGF0aWMgYm9vbCBpc0RlZ2VuZXJhdGUoaW50
IHJhZGl1c1gsIGludCByYWRpdXNZKQogewotICAgIGlmIChyYWRpdXNYIDwgMCB8fCByYWRpdXNZ
IDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICAgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0
KGRzdFBpeGVsQXJyYXksIGltYWdlUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmFk
aXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKTsKIH0KIAor
fSAvLyBuYW1lc3BhY2UgRkVNb3JwaG9sb2d5U29mdHdhcmUKKwogYm9vbCBGRU1vcnBob2xvZ3k6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CkBAIC0yNTQsOCArMjQ5LDEwIEBAIGJvb2wg
RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIp
CiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQ
aXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAKICAgICBJbnRTaXplIHJhZGl1
cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwotICAg
IGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVj
dERyYXdpbmdSZWN0LCByYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKKyAgICBpZiAo
RkVNb3JwaG9sb2d5U29mdHdhcmU6OmlzRGVnZW5lcmF0ZShyYWRpdXMud2lkdGgoKSwgcmFkaXVz
LmhlaWdodCgpKSkgeworICAgICAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGlu
YXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAgYXV0byBzb3VyY2VQaXhlbEFy
cmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CiAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQpAQCAtMjY1LDE4ICsy
NjIsMjIgQEAgYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImIGZpbHRlcikKICAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdS
ZWN0LndpZHRoKCkgLSAxLCByYWRpdXMud2lkdGgoKSk7CiAgICAgaW50IHJhZGl1c1kgPSBzdGQ6
Om1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQoKSk7CiAK
LSAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBl
ZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzWCwgcmFkaXVzWSkpCisgICAgaWYgKEZFTW9ycGhvbG9n
eVNvZnR3YXJlOjppc0RlZ2VuZXJhdGUocmFkaXVzWCwgcmFkaXVzWSkpIHsKKyAgICAgICAgaW4t
PmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJh
d2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICBGRU1vcnBob2xvZ3lTb2Z0d2FyZTo6UGFpbnRpbmdEYXRhIHBhaW50
aW5nRGF0YTsKKyAgICBwYWludGluZ0RhdGEudHlwZSA9IG1fdHlwZTsKKyAgICBwYWludGluZ0Rh
dGEucmFkaXVzWCA9IGNlaWxmKHJhZGl1c1gpOworICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0g
Y2VpbGYocmFkaXVzWSk7CiAgICAgCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKICAg
ICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7CiAg
ICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5Owog
ICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkp
OwogICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBjZWlsZihlZmZlY3REcmF3aW5nUmVjdC5oZWln
aHQoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYKTsKLSAgICBw
YWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kpOwogCi0gICAgcGxhdGZvcm1BcHBs
eShwYWludGluZ0RhdGEpOworICAgIEZFTW9ycGhvbG9neVNvZnR3YXJlOjpwbGF0b2ZybUFwcGx5
KHBhaW50aW5nRGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCmluZGV4
IDI4OGVlYTBlMWUyMTNjZTMyZDgxNzMwYjYxOTlkZDVlMDQxYzk2M2QuLjU4OTUwMmE2ZjViYzZk
MjBiOGUxOWVhOWZmNTdjYTc4OTI1ZDgyNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaApAQCAtNTMsMjkgKzUz
LDYgQEAgcHJpdmF0ZToKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYg
ZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50
IHJhZGl1c1kpOwotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5KiBzcmNQaXhlbEFycmF5OwotICAgICAgICBVaW50OENsYW1wZWRBcnJh
eSogZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0
OwotICAgICAgICBpbnQgcmFkaXVzWDsKLSAgICAgICAgaW50IHJhZGl1c1k7Ci0gICAgfTsKLQot
ICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIEZFTW9ycGhvbG9n
eSogZmlsdGVyOwotICAgICAgICBpbnQgc3RhcnRZOwotICAgICAgICBpbnQgZW5kWTsKLSAgICAg
ICAgY29uc3QgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7Ci0gICAgfTsKLQotICAgIHN0YXRp
YyB2b2lkIHBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqKTsKLQot
ICAgIHZvaWQgcGxhdGZvcm1BcHBseShjb25zdCBQYWludGluZ0RhdGEmKTsKLSAgICB2b2lkIHBs
YXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYsIGludCBzdGFydFksIGludCBl
bmRZKTsKLQogICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbV90eXBlOwogICAgIGZsb2F0IG1f
cmFkaXVzWDsKICAgICBmbG9hdCBtX3JhZGl1c1k7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5j
cHAKaW5kZXggNjA3YTcxYzRjZjM1ZjU2ZDRhMjJmY2Y1MDI2ZjE0MmI1MTdlNzBkNy4uYWM2MmIx
MjA3MDdkYzZkOWY0NTBiYjVjYjkxMzc5MDA5MDRlYTk2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxp
Z2h0aW5nLmNwcApAQCAtMzMsNyArMzMsNyBAQCBSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNw
ZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZgogfQog
CiBGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBm
bG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZF
TGlnaHRpbmcoU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAw
LCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwg
a2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkZFU3BlY3VsYXJMaWdodGluZykKKyAgICA6IEZFTGlnaHRpbmcoRmlsdGVyRWZmZWN0OjpU
eXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgMCwg
c3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtl
cm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkKIHsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuY3BwCmluZGV4IGRhNDc0ZjQxMDVmMTY0ZTRkZGVlNDhiNmNhYjlkYjhmODNhMWE3ZmUuLjU1
NzcxYWQ4OTg0MWIzNWY3OTI1NTBmN2Q1ZDcxNGZmNTgxNTFhZmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5j
cHAKQEAgLTM0LDIwICszNCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLyoKLSAgICBQ
cm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAyXS4gQWxnb3JpdGhtIGlz
OgotICAgIHIgPSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5kQW1wbGl0dWRlID0gMTY4MDcg
YW5kCi0gICAgbSA9IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9IHNl
ZWQuCi0gICAgU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1
LCBPY3QuIDE5ODgKLSAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3VsZCBwcm9kdWNlIHRo
ZSByZXN1bHQgMTA0MzYxODA2NQotICAgIGFzIHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVy
IGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCi0qLwotc3RhdGljIGNvbnN0IGludCBzX3Blcmxp
bk5vaXNlID0gNDA5NjsKLXN0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1heGltdW0gPSAyMTQ3NDgz
NjQ3OyAvLyAyKiozMSAtIDEKLXN0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0dWRlID0gMTY4
MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290IG9mIG0KLXN0YXRpYyBjb25zdCBpbnQgc19yYW5k
USA9IDEyNzc3MzsgLy8gbSAvIGEKLXN0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7IC8v
IG0gJSBhCi0KIFJlZjxGRVR1cmJ1bGVuY2U+IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKFR1cmJ1bGVu
Y2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwg
aW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCiB7CiAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRkVUdXJidWxlbmNlKHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNl
RnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMpKTsKQEAgLTExMiwxOCAr
OTgsNzggQEAgYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNoKQog
ICAgIHJldHVybiB0cnVlOwogfQogCituYW1lc3BhY2UgRkVUdXJidWxlbmNlU29mdHdhcmUgewor
CiAvLyBUaGUgdHVyYnVsZW5jZSBjYWxjdWxhdGlvbiBjb2RlIGlzIGFuIGFkYXB0ZWQgdmVyc2lv
biBvZiB3aGF0IGFwcGVhcnMgaW4gdGhlIFNWRyAxLjEgc3BlY2lmaWNhdGlvbjoKIC8vIGh0dHA6
Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2UKIAotLy8gQ29t
cHV0ZSBwc2V1ZG8gcmFuZG9tIG51bWJlci4KLWlubGluZSBsb25nIEZFVHVyYnVsZW5jZTo6UGFp
bnRpbmdEYXRhOjpyYW5kb20oKQotewotICAgIGxvbmcgcmVzdWx0ID0gc19yYW5kQW1wbGl0dWRl
ICogKHNlZWQgJSBzX3JhbmRRKSAtIHNfcmFuZFIgKiAoc2VlZCAvIHNfcmFuZFEpOwotICAgIGlm
IChyZXN1bHQgPD0gMCkKLSAgICAgICAgcmVzdWx0ICs9IHNfcmFuZE1heGltdW07Ci0gICAgc2Vl
ZCA9IHJlc3VsdDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQorLyoKKyAgICBQcm9kdWNlcyByZXN1
bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAyXS4gQWxnb3JpdGhtIGlzOgorICAgIHIgPSAo
YSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5kQW1wbGl0dWRlID0gMTY4MDcgYW5kCisgICAgbSA9
IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCisgICAgU2Vl
IFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgK
KyAgICBUbyB0ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0
MzYxODA2NQorICAgIGFzIHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmln
aW5hbCBzZWVkIGlzIDEuCisqLworc3RhdGljIGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5
NjsKK3N0YXRpYyBjb25zdCBsb25nIHNfcmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKioz
MSAtIDEKK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7
IHByaW1pdGl2ZSByb290IG9mIG0KK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3Mzsg
Ly8gbSAvIGEKK3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCisKK3N0
YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7CitzdGF0aWMgY29uc3QgaW50IHNfYmxv
Y2tNYXNrID0gc19ibG9ja1NpemUgLSAxOworCitzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKKyAgICBQ
YWludGluZ0RhdGEoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZs
b2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgbG9uZyBzZWVkLCBib29sIHN0aXRj
aFRpbGVzLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUpCisgICAgICAgIDogdHlwZSh0eXBl
KQorICAgICAgICAsIGJhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQorICAgICAgICAsIGJh
c2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZKQorICAgICAgICAsIG51bU9jdGF2ZXMobnVtT2N0
YXZlcykKKyAgICAgICAgLCBzZWVkKHNlZWQpCisgICAgICAgICwgc3RpdGNoVGlsZXMoc3RpdGNo
VGlsZXMpCisgICAgICAgICwgcGFpbnRpbmdTaXplKHBhaW50aW5nU2l6ZSkKKyAgICB7CisgICAg
fQorCisgICAgLy8gQ29tcHV0ZSBwc2V1ZG8gcmFuZG9tIG51bWJlci4KKyAgICBpbmxpbmUgbG9u
ZyByYW5kb20oKQorICAgIHsKKyAgICAgICAgbG9uZyByZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUg
KiAoc2VlZCAlIHNfcmFuZFEpIC0gc19yYW5kUiAqIChzZWVkIC8gc19yYW5kUSk7CisgICAgICAg
IGlmIChyZXN1bHQgPD0gMCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBzX3JhbmRNYXhpbXVtOwor
ICAgICAgICBzZWVkID0gcmVzdWx0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGU7CisgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVg7CisgICAg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVk7CisgICAgaW50IG51bU9jdGF2ZXM7CisgICAgbG9uZyBzZWVk
OworICAgIGJvb2wgc3RpdGNoVGlsZXM7CisgICAgSW50U2l6ZSBwYWludGluZ1NpemU7CisKKyAg
ICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBzX2Jsb2NrU2l6ZSArIDJdOworICAgIGZsb2F0IGdy
YWRpZW50WzRdWzIgKiBzX2Jsb2NrU2l6ZSArIDJdWzJdOworfTsKKworc3RydWN0IFN0aXRjaERh
dGEgeworICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93IG11Y2ggdG8gc3VidHJhY3QgdG8gd3Jh
cCBmb3Igc3RpdGNoaW5nLgorICAgIGludCB3cmFwWCB7IDAgfTsgLy8gTWluaW11bSB2YWx1ZSB0
byB3cmFwLgorICAgIGludCBoZWlnaHQgeyAwIH07CisgICAgaW50IHdyYXBZIHsgMCB9OworfTsK
Kworc3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKKyAgICBJbnRSZWN0IGZpbHRlclJl
Z2lvbjsKKyAgICBGbG9hdFNpemUgZmlsdGVyU2NhbGU7CisgICAgVWludDhDbGFtcGVkQXJyYXkq
IHBpeGVsQXJyYXk7CisgICAgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7CisgICAgU3RpdGNo
RGF0YSBzdGl0Y2hEYXRhOworICAgIGludCBzdGFydFk7CisgICAgaW50IGVuZFk7Cit9OwogCiBp
bmxpbmUgZmxvYXQgc21vb3RoQ3VydmUoZmxvYXQgdCkKIHsKQEAgLTEzNSw5ICsxODEsOSBAQCBp
bmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xhdGlvbihmbG9hdCB0LCBmbG9hdCBhLCBmbG9hdCBi
KQogICAgIHJldHVybiBhICsgdCAqIChiIC0gYSk7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpp
bml0UGFpbnQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCitzdGF0aWMgUGFpbnRpbmdEYXRh
IGluaXRQYWludGluZ0RhdGEoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgbG9uZyBzZWVkLCBib29s
IHN0aXRjaFRpbGVzLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUpCiB7Ci0gICAgZmxvYXQg
bm9ybWFsaXphdGlvbkZhY3RvcjsKKyAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKHR5cGUs
IGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNo
VGlsZXMsIHBhaW50aW5nU2l6ZSk7CiAKICAgICAvLyBUaGUgc2VlZCB2YWx1ZSBjbGFtcCB0byB0
aGUgcmFuZ2UgWzEsIHNfcmFuZE1heGltdW0gLSAxXS4KICAgICBpZiAocGFpbnRpbmdEYXRhLnNl
ZWQgPD0gMCkKQEAgLTE1NCw3ICsyMDAsNyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6aW5pdFBhaW50
KFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogICAgICAgICAgICAgICAgIGdyYWRpZW50WzBd
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxv
Y2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKICAgICAgICAgICAgICAgICBn
cmFkaWVudFsxXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUg
KDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19ibG9ja1NpemU7CiAgICAgICAg
ICAgICB9IHdoaWxlICghZ3JhZGllbnRbMF0gJiYgIWdyYWRpZW50WzFdKTsKLSAgICAgICAgICAg
IG5vcm1hbGl6YXRpb25GYWN0b3IgPSBzdGQ6Omh5cG90KGdyYWRpZW50WzBdLCBncmFkaWVudFsx
XSk7CisgICAgICAgICAgICBmbG9hdCBub3JtYWxpemF0aW9uRmFjdG9yID0gc3RkOjpoeXBvdChn
cmFkaWVudFswXSwgZ3JhZGllbnRbMV0pOwogICAgICAgICAgICAgZ3JhZGllbnRbMF0gLz0gbm9y
bWFsaXphdGlvbkZhY3RvcjsKICAgICAgICAgICAgIGdyYWRpZW50WzFdIC89IG5vcm1hbGl6YXRp
b25GYWN0b3I7CiAgICAgICAgIH0KQEAgLTE3NiwxMSArMjIyLDEzIEBAIHZvaWQgRkVUdXJidWxl
bmNlOjppbml0UGFpbnQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiAgICAgICAgICAgICBw
YWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUgKyBpXVsxXSA9IHBhaW50
aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKICAgICAgICAgfQogICAgIH0KKworICAg
IHJldHVybiBwYWludGluZ0RhdGE7CiB9CiAKLUZFVHVyYnVsZW5jZTo6U3RpdGNoRGF0YSBGRVR1
cmJ1bGVuY2U6OmNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VG
cmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0CitzdGF0aWMgU3RpdGNoRGF0
YSBjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5
WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZLCBib29sIHN0aXRjaFRpbGVzKQogewotICAgIGlmICgh
bV9zdGl0Y2hUaWxlcykKKyAgICBpZiAoIXN0aXRjaFRpbGVzKQogICAgICAgICByZXR1cm4geyB9
OwogCiAgICAgZmxvYXQgdGlsZVdpZHRoID0gdGlsZVNpemUud2lkdGgoKTsKQEAgLTIxNyw3ICsy
NjUsNyBAQCBGRVR1cmJ1bGVuY2U6OlN0aXRjaERhdGEgRkVUdXJidWxlbmNlOjpjb21wdXRlU3Rp
dGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JgogfQogCiAvLyBUaGlzIGlzIHRha2VuIDE6
MSBmcm9tIFNWRyBzcGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwj
ZmVUdXJidWxlbmNlRWxlbWVudC4KLUNvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxl
bmNlOjpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0
Y2hEYXRhJiBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikgY29uc3QK
K3N0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNlMkQoY29uc3QgUGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRjaERhdGEsIGNvbnN0IEZs
b2F0UG9pbnQmIG5vaXNlVmVjdG9yKQogewogICAgIHN0cnVjdCBOb2lzZVBvc2l0aW9uIHsKICAg
ICAgICAgaW50IGluZGV4OyAvLyBieDAsIGJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgpAQCAtMjU0LDcg
KzMwMiw3IEBAIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxlbmNlOjpub2lzZTJE
KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhCiAgICAgTm9pc2VQb3NpdGlvbiBub2lz
ZVkobm9pc2VWZWN0b3IueSgpKTsKIAogICAgIC8vIElmIHN0aXRjaGluZywgYWRqdXN0IGxhdHRp
Y2UgcG9pbnRzIGFjY29yZGluZ2x5LgotICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7CisgICAgaWYg
KHBhaW50aW5nRGF0YS5zdGl0Y2hUaWxlcykgewogICAgICAgICBub2lzZVguc3RpdGNoKHN0aXRj
aERhdGEud2lkdGgsIHN0aXRjaERhdGEud3JhcFgpOwogICAgICAgICBub2lzZVkuc3RpdGNoKHN0
aXRjaERhdGEuaGVpZ2h0LCBzdGl0Y2hEYXRhLndyYXBZKTsKICAgICB9CkBAIC0zMzMsMTMgKzM4
MSwxMyBAQCBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiB0b0ludEJh
c2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQwogICAgIH07CiB9CiAKLUNvbG9yQ29tcG9u
ZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZv
clBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRj
aERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorc3RhdGljIENvbG9yQ29tcG9u
ZW50czx1aW50OF90LCA0PiBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IHR1cmJ1
bGVuY2VGdW5jdGlvblJlc3VsdDsKICAgICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50Lngo
KSAqIHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgpICogcGFpbnRpbmdEYXRh
LmJhc2VGcmVxdWVuY3lZKTsKICAgICBmbG9hdCByYXRpbyA9IDE7Ci0gICAgZm9yIChpbnQgb2N0
YXZlID0gMDsgb2N0YXZlIDwgbV9udW1PY3RhdmVzOyArK29jdGF2ZSkgewotICAgICAgICBpZiAo
bV90eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCisgICAgZm9yIChpbnQgb2N0
YXZlID0gMDsgb2N0YXZlIDwgcGFpbnRpbmdEYXRhLm51bU9jdGF2ZXM7ICsrb2N0YXZlKSB7Cisg
ICAgICAgIGlmIChwYWludGluZ0RhdGEudHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5v
aXNlKQogICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFp
bnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvcikgLyByYXRpbzsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRp
bmdEYXRhLCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvcikuYWJzKCkgLyByYXRpbzsKQEAgLTM0OCw3
ICszOTYsNyBAQCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxj
dWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdAogICAgICAgICBub2lzZVZlY3Rvci5z
ZXRZKG5vaXNlVmVjdG9yLnkoKSAqIDIpOwogICAgICAgICByYXRpbyAqPSAyOwogCi0gICAgICAg
IGlmIChtX3N0aXRjaFRpbGVzKSB7CisgICAgICAgIGlmIChwYWludGluZ0RhdGEuc3RpdGNoVGls
ZXMpIHsKICAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFsdWVzLiBTdWJ0cmFjdGluZyBz
X3Blcmxpbk5vaXNlIGJlZm9yZSB0aGUgbXVsdGlwbGljYXRpb24gYW5kCiAgICAgICAgICAgICAv
LyBhZGRpbmcgaXQgYWZ0ZXJ3YXJkIHNpbXBsaWZpZXMgdG8gc3VidHJhY3RpbmcgaXQgb25jZS4K
ICAgICAgICAgICAgIHN0aXRjaERhdGEud2lkdGggKj0gMjsKQEAgLTM2MCwyMCArNDA4LDE5IEBA
IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1
bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0CiAKICAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5j
ZUZ1bmN0aW9uUmVzdWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAy
NTUpICsgMjU1KSAvIDIgYnkgZnJhY3RhbE5vaXNlCiAgICAgLy8gYW5kICh0dXJidWxlbmNlRnVu
Y3Rpb25SZXN1bHQgKiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCi0gICAgaWYgKG1fdHlwZSA9PSBUdXJi
dWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQorICAgIGlmIChwYWludGluZ0RhdGEudHlwZSA9PSBU
dXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQogICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25S
ZXN1bHQgPSB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKIAogICAgIHJl
dHVybiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7
CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVy
LCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNv
bnN0CitzdGF0aWMgdm9pZCBwbGF0b2ZybUFwcGx5R2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0
ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5
JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0
YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKIHsKICAgICBBU1NFUlQoZW5kWSA+
IHN0YXJ0WSk7CiAKLSAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0
KCk7CiAgICAgRmxvYXRQb2ludCBwb2ludCgwLCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZKTsK
ICAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5lbCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24ud2lk
dGgoKSA8PCAyKTsKLSAgICBGbG9hdFNpemUgaW52ZXJzZVNjYWxlID0geyAxIC8gZmlsdGVyLmZp
bHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH07
CisgICAgRmxvYXRTaXplIGludmVyc2VTY2FsZSA9IHsgMSAvIGZpbHRlclNjYWxlLndpZHRoKCks
IDEgLyBmaWx0ZXJTY2FsZS5oZWlnaHQoKSB9OwogCiAgICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsg
eSA8IGVuZFk7ICsreSkgewogICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEpOwpAQCAt
Mzg4LDQ1ICs0MzUsMjMgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oY29uc3QgRmls
dGVyJiBmaWx0ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmEKICAgICB9CiB9CiAKLXZv
aWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBw
YXJhbWV0ZXJzKQorc3RhdGljIHZvaWQgcGxhdG9mcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5
UGFyYW1ldGVycyogcGFyYW1ldGVycykKIHsKLSAgICBwYXJhbWV0ZXJzLT5lZmZlY3QtPmZpbGxS
ZWdpb24oKnBhcmFtZXRlcnMtPmZpbHRlciwgKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJh
bWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMt
PnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7CisgICAgcGxhdG9mcm1BcHBseUdlbmVyaWMocGFy
YW1ldGVycy0+ZmlsdGVyUmVnaW9uLCBwYXJhbWV0ZXJzLT5maWx0ZXJTY2FsZSwgKnBhcmFtZXRl
cnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnN0
aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7CiB9CiAKLWJv
b2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCitzdGF0aWMgdm9pZCBwbGF0b2ZybUFwcGx5KGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lv
biwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVs
QXJyYXksIFN0aXRjaERhdGEmIHN0aXRjaERhdGEsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
KQogewotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGludCBoZWlnaHQgPSBmaWx0ZXJSZWdp
b24uaGVpZ2h0KCk7CisgICAgdW5zaWduZWQgYXJlYSA9IGZpbHRlclJlZ2lvbi5hcmVhKCk7CiAK
LSAgICBJbnRTaXplIHJlc3VsdFNpemUoYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOworICAg
IHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAv
LyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icy4KIAotICAgIGlmIChyZXN1
bHRTaXplLmlzRW1wdHkoKSkgewotICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXkuemVyb0Zp
bGwoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgSW50U2l6ZSB0aWxlU2l6
ZSA9IHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7Ci0K
LSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCA9IG1fYmFzZUZyZXF1ZW5jeVg7Ci0gICAgZmxvYXQg
YmFzZUZyZXF1ZW5jeVkgPSBtX2Jhc2VGcmVxdWVuY3lZOwotICAgIFN0aXRjaERhdGEgc3RpdGNo
RGF0YSA9IGNvbXB1dGVTdGl0Y2hpbmcodGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJl
cXVlbmN5WSk7Ci0KLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgdGlsZVNp
emUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7Ci0gICAgaW5pdFBhaW50KHBhaW50
aW5nRGF0YSk7Ci0KLSAgICBhdXRvIGFyZWEgPSByZXN1bHRTaXplLmFyZWEoKTsKLSAgICBpZiAo
YXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBo
ZWlnaHQgPSByZXN1bHRTaXplLmhlaWdodCgpOwotCi0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFk
cyA9IGhlaWdodCAvIDg7CisgICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IGZpbHRlclJlZ2lv
bi5oZWlnaHQoKSAvIDg7CiAgICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6
bWluPHVuc2lnbmVkPihhcmVhIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFk
cyk7CisKICAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgUGFyYWxs
ZWxKb2JzPEZpbGxSZWdpb25QYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFVHVy
YnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAg
IFBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZwbGF0
b2ZybUFwcGx5V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKIAogICAgICAgICAvLyBGaWxs
IHRoZSBwYXJhbWV0ZXIgYXJyYXkKICAgICAgICAgYXV0byBudW1Kb2JzID0gcGFyYWxsZWxKb2Jz
Lm51bWJlck9mSm9icygpOwpAQCAtNDM3LDEwICs0NjIsMTAgQEAgYm9vbCBGRVR1cmJ1bGVuY2U6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICAgICAgICAg
IHVuc2lnbmVkIHN0YXJ0WSA9IDA7CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1Kb2JzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVy
cyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihpKTsKLSAgICAgICAgICAgICAgICBw
YXJhbXMuZmlsdGVyID0gJmZpbHRlcjsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZWZmZWN0ID0g
dGhpczsKLSAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBp
eGVsQXJyYXk7CisgICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFt
cyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoaSk7CisgICAgICAgICAgICAgICAgcGFyYW1zLmZp
bHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVy
U2NhbGUgPSBmaWx0ZXJTY2FsZTsKKyAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9
ICZwaXhlbEFycmF5OwogICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSAmcGFp
bnRpbmdEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5zdGl0Y2hEYXRhID0gc3RpdGNoRGF0
YTsKICAgICAgICAgICAgICAgICBwYXJhbXMuc3RhcnRZID0gc3RhcnRZOwpAQCAtNDUxLDEyICs0
NzYsMzggQEAgYm9vbCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImIGZpbHRlcikKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcGFyYWxsZWxKb2Jz
LmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVk
IG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBh
cmVhIGlzIHRvbyBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKGZpbHRlciwgZGVzdGluYXRpb25QaXhl
bEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7CisgICAgcGxhdG9m
cm1BcHBseUdlbmVyaWMoZmlsdGVyUmVnaW9uLCBmaWx0ZXJTY2FsZSwgcGl4ZWxBcnJheSwgcGFp
bnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBG
RVR1cmJ1bGVuY2VTb2Z0d2FyZQorCitib29sIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghZGVz
dGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwor
CisgICAgSW50U2l6ZSByZXN1bHRTaXplKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKKyAg
ICBpZiAocmVzdWx0U2l6ZS5hcmVhKCkuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVzdGlu
YXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGF1dG8gdGlsZVNpemUgPSByb3VuZGVkSW50U2l6ZShmaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oKS5zaXplKCkpOworICAgIGF1dG8gc3RpdGNoRGF0YSA9IEZFVHVyYnVsZW5jZVNvZnR3
YXJlOjpjb21wdXRlU3RpdGNoaW5nKHRpbGVTaXplLCBtX2Jhc2VGcmVxdWVuY3lYLCBtX2Jhc2VG
cmVxdWVuY3lZLCBtX3N0aXRjaFRpbGVzKTsKKyAgICBhdXRvIHBhaW50aW5nRGF0YSA9IEZFVHVy
YnVsZW5jZVNvZnR3YXJlOjppbml0UGFpbnRpbmdEYXRhKG1fdHlwZSwgbV9iYXNlRnJlcXVlbmN5
WCwgbV9iYXNlRnJlcXVlbmN5WSwgbV9udW1PY3RhdmVzLCBtX3NlZWQsIG1fc3RpdGNoVGlsZXMs
IHRpbGVTaXplKTsKKworICAgIEZFVHVyYnVsZW5jZVNvZnR3YXJlOjpwbGF0b2ZybUFwcGx5KGFi
c29sdXRlUGFpbnRSZWN0KCksIGZpbHRlci5maWx0ZXJTY2FsZSgpLCBkZXN0aW5hdGlvblBpeGVs
QXJyYXksIHN0aXRjaERhdGEsIHBhaW50aW5nRGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VHVyYnVsZW5jZS5oCmluZGV4IGU2OThiMzEzZjE4ODYyNTAwMzRiMDY1OTBkMWUyYjNlZDZkYzM5
ODguLjdjNDdjNzg3NDliODU2ZmM5ZjkxYWY4NGM2MTM0Y2Y0N2RmMDZlMjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuaApAQCAtNTgsNjQgKzU4LDEzIEBAIHB1YmxpYzoKICAgICBib29sIHNldFN0aXRjaFRpbGVz
KGJvb2wpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAy
NTY7Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrTWFzayA9IHNfYmxvY2tTaXplIC0gMTsK
LQotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAx
MDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icy4KLQotICAgIHN0
cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBQYWludGluZ0RhdGEobG9uZyBwYWludGluZ1Nl
ZWQsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZs
b2F0IGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAgOiBzZWVkKHBhaW50aW5nU2VlZCkKLSAg
ICAgICAgICAgICwgZmlsdGVyU2l6ZShwYWludGluZ1NpemUpCi0gICAgICAgICAgICAsIGJhc2VG
cmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQotICAgICAgICAgICAgLCBiYXNlRnJlcXVlbmN5WShi
YXNlRnJlcXVlbmN5WSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgbG9uZyBzZWVk
OwotICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBzX2Jsb2NrU2l6ZSArIDJdOwotICAg
ICAgICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9ja1NpemUgKyAyXVsyXTsKLSAgICAgICAg
SW50U2l6ZSBmaWx0ZXJTaXplOwotICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WDsKLSAgICAg
ICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVk7Ci0KLSAgICAgICAgaW5saW5lIGxvbmcgcmFuZG9tKCk7
Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTdGl0Y2hEYXRhIHsKLSAgICAgICAgU3RpdGNoRGF0YSgp
ID0gZGVmYXVsdDsKLQotICAgICAgICBpbnQgd2lkdGggeyAwIH07IC8vIEhvdyBtdWNoIHRvIHN1
YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KLSAgICAgICAgaW50IHdyYXBYIHsgMCB9OyAv
LyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCi0gICAgICAgIGludCBoZWlnaHQgeyAwIH07Ci0gICAg
ICAgIGludCB3cmFwWSB7IDAgfTsKLSAgICB9OwotCi0gICAgc3RydWN0IEZpbGxSZWdpb25QYXJh
bWV0ZXJzIHsKLSAgICAgICAgY29uc3QgRmlsdGVyKiBmaWx0ZXI7Ci0gICAgICAgIEZFVHVyYnVs
ZW5jZSogZWZmZWN0OwotICAgICAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheTsKLSAg
ICAgICAgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7Ci0gICAgICAgIFN0aXRjaERhdGEgc3Rp
dGNoRGF0YTsKLSAgICAgICAgaW50IHN0YXJ0WTsKLSAgICAgICAgaW50IGVuZFk7Ci0gICAgfTsK
LQotICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMq
KTsKLQogICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9v
bCBzdGl0Y2hUaWxlcyk7CiAKICAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNv
bnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7Ci0gICAgU3Rp
dGNoRGF0YSBjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJl
cXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZKSBjb25zdDsKLSAgICBDb2xvckNvbXBvbmVu
dHM8ZmxvYXQsIDQ+IG5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiwgY29uc3QgU3RpdGNoRGF0
YSYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRh
JiwgU3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgZmlsbFJl
Z2lvbihjb25zdCBGaWx0ZXImLCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IFBhaW50aW5nRGF0
YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25zdDsKKyAgICBib29sIHBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHN0YXRp
YyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVHVyYnVsZW5jZVR5cGUgbV90eXBlOwogICAgIGZsb2F0
IG1fYmFzZUZyZXF1ZW5jeVg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAppbmRleCBjMDc1MjYzMTRmN2U3NzgxMjVl
MDA1N2JiMDNiMTFjZjlkMDE3YjViLi44MjQ4MjY4Y2RlY2RiZTg4MDY4ZDUyYzFlMDA1NDJiNWJh
MWUzZDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTEyOSwxNCArMTI5LDYgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4s
IGNvbnN0IGludCkgeyBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0Nv
bG9yU3BhY2UpOyB9CiAgICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYpOwogICAgIAotICAgIHN0YXRpYyBWZWN0b3I8ZmxvYXQ+IG5v
cm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQotICAgIHsKLSAgICAg
ICAgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
IG5vcm1hbGl6ZWRWYWx1ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsKLSAgICAg
ICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Ci0gICAgfQotCiBwcm90ZWN0ZWQ6CiAgICAgRmls
dGVyRWZmZWN0KFR5cGUpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCmluZGV4IDk0ZDE5NTAxMzlkNmQyNDNh
ODY2MWU1ZWE1NWQyMzVhNzM4OWY1ZDUuLjhkYjhlNTY1OTdiYWJlYzg2ODYxNjgzZmY4ZTA1ODI4
OGM3MTI2ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvTGlnaHRTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIExp
Z2h0VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgdmlydHVhbCBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29u
c3QgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVy
RWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbml0UGFpbnRp
bmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIGNvbnN0ID0gMDsKICAg
ICAvLyB6IGlzIGEgZmxvYXQgbnVtYmVyLCBzaW5jZSBpdCBpcyB0aGUgYWxwaGEgdmFsdWUgc2Nh
bGVkIGJ5IGEgdXNlcgogICAgIC8vIHNwZWNpZmllZCAic3VyZmFjZVNjYWxlIiBjb25zdGFudCwg
d2hpY2ggdHlwZSBpcyA8bnVtYmVyPiBpbiB0aGUgU1ZHIHN0YW5kYXJkLgogICAgIC8vIHggYW5k
IHkgYXJlIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgRmlsdGVyRWZmZWN0J3MgYnVmZmVyLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2lu
dExpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKaW5kZXggMWFiNWUxOWUxMWE0ZjM2ZWEyYTQyNmE3NTAz
ODc5MTI4ZjU0YjQ0Yi4uYzJkODc0OTNiMjhkZTM4NjEzZTNlMjAyODRmZmUyZmY0MjVmZWUyZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2lu
dExpZ2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBQb2ludExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNv
bnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmKQordm9pZCBQb2lu
dExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVy
RWZmZWN0LCBQYWludGluZ0RhdGEmKSBjb25zdAogewogICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0
WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKG1fdXNlclNwYWNl
UG9zaXRpb24ueHkoKSkpOwogICAgIC8vIFRvIHNjYWxlIFosIG1hcCBhIHBvaW50IG9mZnNldCBm
cm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9uIGJ5IHouCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRT
b3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRM
aWdodFNvdXJjZS5oCmluZGV4IDY3YTNhMGJkMzlhOGE5Y2MxOTU0MzQ5ODU5NmQ3MTE1ZjRiYjk1
YTUuLjQyYzNkYzYxNzg4NTIyZWM3ODdjYWVlMmFjMzRhOGUzMmY5ZGJkNGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJj
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRM
aWdodFNvdXJjZS5oCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFkoZmxv
YXQpIG92ZXJyaWRlOwogICAgIGJvb2wgc2V0WihmbG9hdCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgb3Zl
cnJpZGU7CisgICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBh
aW50aW5nRGF0YSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIENvbXB1dGVkTGlnaHRpbmdEYXRhIGNv
bXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHks
IGZsb2F0IHopIGNvbnN0IGZpbmFsOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNTIsNyAr
NTIsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIEZsb2F0UG9pbnQzRCBtX3VzZXJTcGFjZVBv
c2l0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX2J1ZmZlclBvc2l0aW9uOworICAgIG11dGFibGUg
RmxvYXRQb2ludDNEIG1fYnVmZmVyUG9zaXRpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1Nwb3RMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKaW5kZXggNzE2MDdhYjAwZmY5ZDZhNmQwMTY5MWQ5
YmJiODU1M2QxZjM0OGQwMC4uZTdjN2MwNGVkZWVkODcyZTc5YTIyM2JkYWQ4NmE5MWVkMzNmMDIy
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
cG90TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAvLyBhY2NvcmRpbmcgdG8gdGhlIFNWRyAxLjEgU0UgbGlnaHQgcmVncmVzc2lv
biB0ZXN0cwogc3RhdGljIGNvbnN0IGZsb2F0IGFudGlBbGlhc1RyZXNob2xkID0gMC4wMTZmOwog
Ci12b2lkIFNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZl
Y3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCit2b2lkIFNwb3RM
aWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVm
ZmVjdCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpIGNvbnN0CiB7CiAgICAgbV9idWZmZXJQ
b3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
bV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CiAgICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9p
bnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkg
ei4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U3BvdExpZ2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCmluZGV4IDM1MTUxNjM1MDc3ZWVmMGU3M2MyNmFlNDQyYTVl
YTUzNGZkMWYzYmYuLjJlZGQ5MzA5OWQ5NzI4MmIwNmQ3YzE5ZTc3MjdkNzVkNjQyZTljNTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExp
Z2h0U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9TcG90TGlnaHRTb3VyY2UuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBz
ZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KSBvdmVycmlkZTsKICAgICBib29sIHNldExpbWl0aW5n
Q29uZUFuZ2xlKGZsb2F0KSBvdmVycmlkZTsKIAotICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShj
b25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsKKyAgICB2b2lkIGlu
aXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgQ29tcHV0ZWRMaWdodGluZ0RhdGEgY29tcHV0ZVBpeGVsTGlnaHRpbmdE
YXRhKGNvbnN0IFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QgZmlu
YWw7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkBAIC02OCw3ICs2OCw3IEBAIHByaXZhdGU6CiAg
ICAgRmxvYXRQb2ludDNEIG1fdXNlclNwYWNlUG9zaXRpb247CiAgICAgRmxvYXRQb2ludDNEIG1f
dXNlclNwYWNlUG9pbnRzQXQ7CiAKLSAgICBGbG9hdFBvaW50M0QgbV9idWZmZXJQb3NpdGlvbjsK
KyAgICBtdXRhYmxlIEZsb2F0UG9pbnQzRCBtX2J1ZmZlclBvc2l0aW9uOwogCiAgICAgZmxvYXQg
bV9zcGVjdWxhckV4cG9uZW50OwogICAgIGZsb2F0IG1fbGltaXRpbmdDb25lQW5nbGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444774</attachid>
            <date>2021-11-18 19:52:29 -0800</date>
            <delta_ts>2021-11-18 20:56:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232832-20211118195228.patch</filename>
            <type>text/plain</type>
            <size>128680</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1OTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTcxNGQ5N2NiNDk1OTE2
ZjQ5ZDc5YWUwOGIzNjBjZjhiMjM4ODJkYS4uODE5YWI4NGI0Zjg5YzNhZWFkMTI2Mjc5NzljZWUw
ZWMxY2YxOTk1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMiBAQAorMjAyMS0xMS0xOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1ha2UgdGhlIHNvZnR3YXJlIGZpbHRlcnMgZnVuY3Rpb25zIHN0YXRpYyBhbmQgcmVtb3ZlIHRo
ZW0gZnJvbSB0aGUgRmlsdGVyRWZmZWN0IGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjgzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgc3RlcCBpcyByZXF1aXJlZCB0byBtb3ZlIHRo
ZSBGaWx0ZXJFZmZlY3Qgc29mdHdhcmUgY29kZSB0byBzZXBhcmF0ZQorICAgICAgICBmaWxlcy4g
U2luY2UgdGhlIEZpbHRlckVmZmVjdCBjYW4gYmUgYXBwbGllZCB3aXRoIHRoZSBhY2NlbGVyYXRl
ZCBDb3JlSW1hZ2UKKyAgICAgICAgb3IgdGhlICB1bmFjY2VsZXJhdGVkIHNvZnR3YXJlIG1ldGhv
ZHMsIGl0IG1ha2Ugc2Vuc2UgdG8gcmVtb3ZlIHRoZSBzb2Z0d2FyZQorICAgICAgICBjb2RlIGZy
b20gdGhlIEZpbHRlckVmZmVjdCBjbGFzc2VzLgorCisgICAgICAgIFRoZSBwbGFuIGlzIHRvIGhh
dmUgdGhlIHNvZnR3YXJlIGNvZGUgaW4gc2VwYXJhdGUgY2xhc3Nlcy9maWxlcy4gQnV0IHRoZQor
ICAgICAgICBmaXJzdCBzdGVwIGlzIHRvIHJlbW92ZSB0aGUgY2xhc3MgbWVtYmVycyBhbmQgbWFr
ZSB0aGVtIHN0YXRpYyBtZXRob2RzLgorICAgICAgICBBbmQgYmVjYXVzZSB0aGUgdW5pZmllZCBi
dWlsZCBzeXN0ZW0gY2FuIGNhdXNlIHN0YXRpYyBtZXRob2Qgb3Igc3RydWN0dXJlCisgICAgICAg
IG5hbWVzIHRvIGNvbGxpZGUsIHdlIGFyZSBnb2luZyB0byBwdXQgdGhpcyBjb2RlIGluc2lkZSBk
aWZmZXJlbnQgbmFtZXNwYWNlcworICAgICAgICBmb3Igbm93LgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzdGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3Vy
Y2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVD
b21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1
ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6bm9y
bWFsaXplZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmU6
OmVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJp
eFNvZnR3YXJlOjplZmZlY3RUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhT
b2Z0d2FyZTo6YXBwbHlQbGF0Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6bWF0cml4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNhdHVyYXRlQW5kSHVlUm90YXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Omx1bWluYW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjplZmZlY3RBcHBseUFjY2VsZXJhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVm
ZmVjdFR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5oOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlU2F0dXJhdGVDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmU6OmNvbXB1dGVJZGVu
dGl0eVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2Fy
ZTo6Y29tcHV0ZVRhYnVsYXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmU6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZTo6Y29tcHV0ZUxpbmVhclRhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZTo6Y29tcHV0ZUdhbW1hVGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlOjpjb21w
dXRlTG9va3VwVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0
ZUxpbmVhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZSk6
CisgICAgICAgIChXZWJDb3JlOjpjbGFtcEJ5dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1wZWQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6YXJpdGhtZXRpY1NvZnR3YXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlOjpzZXREZXN0aW5hdGlvblBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmU6OnNldEludGVyaW9yUGl4ZWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZTo6Z2V0UGl4ZWxWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmU6OnNldE91dGVy
UGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpjbGFtcFJHQkFWYWx1ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpzZXREZXN0aW5hdGlvblBpeGVscyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQaXhlbHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0
T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJp
eDo6c2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgIChXZWJD
b3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eENoYW5uZWxJbmRleCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6eUNoYW5uZWxJbmRleCBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
R2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1cjo6c2V0U3RkRGV2aWF0aW9uWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
cjo6c2V0RWRnZU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBlZFRvS2VybmVsU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJu
ZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJu
ZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRz
ZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJl
OjprZXJuZWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3
YXJlOjpib3hCbHVyQWxwaGFPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVy
U29mdHdhcmU6OnBsYXRmb3JtQXBwbHlHZW5lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyU29mdHdhcmU6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZTo6cGxhdGZvcm1BcHBseSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKGdh
dXNzaWFuS2VybmVsRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omtlcm5lbFBv
c2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJveEJsdXJBbHBoYU9ubHkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpz
dGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
R2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Z1NvZnR3YXJlOjpBbHBoYVdpbmRvdzo6dG9wTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nU29mdHdhcmU6OkFscGhhV2luZG93OjpsZWZ0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpBbHBoYVdpbmRvdzo6
dG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6QWxwaGFX
aW5kb3c6OmNlbnRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdh
cmU6OkFscGhhV2luZG93Ojpib3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZ1NvZnR3YXJlOjpBbHBoYVdpbmRvdzo6c2V0VG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmdTb2Z0d2FyZTo6QWxwaGFXaW5kb3c6OnNldENlbnRlcik6CisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpBbHBoYVdpbmRvdzo6c2V0VG9wUmlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpBbHBoYVdpbmRvdzo6c2V0
UmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpBbHBoYVdpbmRv
dzo6c2V0Qm90dG9tUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
OjpBbHBoYVdpbmRvdzo6c2hpZnRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1Nv
ZnR3YXJlOjpBbHBoYVdpbmRvdzo6c2hpZnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Z1NvZnR3YXJlOjpMaWdodGluZ0RhdGE6OnRvcExlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkxpZ2h0aW5nRGF0
YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1Nv
ZnR3YXJlOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFs
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6TGlnaHRpbmdE
YXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmU6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1hbCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93
Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6TGln
aHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmU6OnNldFBpeGVsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZ1NvZnR3YXJlOjpzZXRQaXhlbCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmU6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OnBsYXRmb3JtQXBwbHlHZW5lcmljKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6cGxhdGZvcm1BcHBseSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OmRyYXdMaWdodGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
dG9wUm93Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0
YTo6aW50ZXJpb3JOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnRO
b3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmlj
UGFpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1B
cHBseUdlbmVyaWNXb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpkcmF3TGlnaHRpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
QWxwaGFXaW5kb3c6OnRvcExlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6
Y2VudGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFs
cGhhV2luZG93Ojpib3R0b20gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcFJpZ2h0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRS
aWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRv
dzo6c2V0Qm90dG9tUmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6QWxwaGFXaW5kb3c6OnNoaWZ0Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OkFscGhhV2luZG93OjpzaGlmdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVNb3JwaG9sb2d5U29mdHdhcmU6Om1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZTo6bWFrZVBpeGVsVmFsdWVG
cm9tQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3
YXJlOjptaW5Pck1heCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZTo6
Y29sdW1uRXh0cmVtdW0pOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmU6
Omtlcm5lbEV4dHJlbXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJl
OjpwbGF0b2ZybUFwcGx5R2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lT
b2Z0d2FyZTo6cGxhdG9mcm1BcHBseVdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBo
b2xvZ3lTb2Z0d2FyZTo6cGxhdG9mcm1BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBo
b2xvZ3lTb2Z0d2FyZTo6aXNEZWdlbmVyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhv
bG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OnBpeGVsQXJy
YXlJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlQ29sb3JDb21wb25lbnRz
ZnJvbVBpeGVsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVBpeGVsVmFs
dWVGcm9tQ29sb3JDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk9y
TWF4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbHVtbkV4dHJlbXVtKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Omtlcm5lbEV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdl
bmVyYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVj
dWxhckxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6
RkVTcGVjdWxhckxpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2Fy
ZTo6UGFpbnRpbmdEYXRhOjpQYWludGluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJi
dWxlbmNlU29mdHdhcmU6OlBhaW50aW5nRGF0YTo6cmFuZG9tKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlOjpjb21wdXRlU3RpdGNoaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlOjpub2lzZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZTo6cGxhdG9mcm1BcHBseUdl
bmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmU6OnBsYXRvZnJt
QXBwbHlXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmU6OnBs
YXRvZnJtQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0Rh
dGE6OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVy
YnVsZW5jZTo6ZmlsbFJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpub3JtYWxpemVkRmxvYXRzKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5n
RGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90
TGlnaHRTb3VyY2UuaDoKKwogMjAyMS0xMS0xNiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2Vy
QGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIGEgbW9tZW50dW0gc2Nyb2xsIGFuaW1hdGlvbiB3
aGVuIHJlY2VpdmluZyBhIG1vbWVudHVtIGVuZCBldmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3Vy
Y2UuY3BwCmluZGV4IGU1ZmIxZmY2NjVkM2ViMDdmNDhlZTFkMDJiYmZmY2M2YjA0NDFmODkuLjg5
NDdhOTg2MGU0NmIxMWM1OGUyNzc1MzYyNTZmZGI5ZDUxZDE1NDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRM
aWdodFNvdXJjZS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJF
ZmZlY3QmLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgRGlzdGFudExpZ2h0U291
cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhKSBjb25zdAogewogICAgIGZsb2F0IGF6aW11dGggPSBkZWcycmFkKG1fYXpp
bXV0aCk7CiAgICAgZmxvYXQgZWxldmF0aW9uID0gZGVnMnJhZChtX2VsZXZhdGlvbik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRM
aWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9E
aXN0YW50TGlnaHRTb3VyY2UuaAppbmRleCBjMWUzMGVkZTc1OTgzNzI4YTYzMmJjY2ZmYjA5OTcz
YTNhNGU3MmZkLi4zMDE5MmIwZWYwY2QxYmY0MDNkNDIzMzhjZTQwODc3MThkNzUxNzA3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRM
aWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRGlzdGFudExpZ2h0U291cmNlLmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIGJv
b2wgc2V0QXppbXV0aChmbG9hdCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRFbGV2YXRpb24oZmxv
YXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVm
ZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0
YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBjb25zdCBvdmVycmlkZTsKICAg
ICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFp
bnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IDY3OWU3OGRhZWE4NzNmNWQz
M2ExYWZmODcxNTI1YmZjZjg3NzEwZmIuLjk1MTQ0OTY0YTI3ZmI2NmJkODI5YzhkZjlmY2FiMmU2
NGIyYjE2NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtNjMsNiArNjMsNDQgQEAgYm9vbCBG
RUNvbG9yTWF0cml4OjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiAmdmFsdWVzKQogICAg
IHJldHVybiB0cnVlOwogfQogCit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRl
Q29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCit7CisgICAgY29tcG9u
ZW50c1swXSA9ICgwLjIxMyArIDAuNzg3ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbMV0gPSAo
MC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4w
NzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUp
OworICAgIGNvbXBvbmVudHNbNF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKKyAgICBjb21w
b25lbnRzWzVdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s2XSA9
ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAw
LjcxNSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1
ZSk7Cit9CisKK3ZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50
cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCit7CisgICAgZmxvYXQgY29zSHVlID0g
Y29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7CisgICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVl
ICogcGlGbG9hdCAvIDE4MCk7CisgICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICog
MC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKKyAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NI
dWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAt
IGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7CisgICAgY29tcG9uZW50c1szXSA9IDAu
MjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsKKyAgICBjb21wb25lbnRzWzRd
ID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQwOworICAgIGNvbXBvbmVu
dHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7CisgICAgY29t
cG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKKyAg
ICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1
OworICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICog
MC4wNzI7Cit9CisKK1ZlY3RvcjxmbG9hdD4gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0
cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgVmVjdG9yPGZsb2F0PiBub3Jt
YWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dmFsdWVzLnNpemUoKTsgKytpKQorICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFs
aXplZEZsb2F0KHZhbHVlc1tpXSk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Cit9CisK
K25hbWVzcGFjZSBGRUNvbG9yTWF0cml4U29mdHdhcmUgeworCiBpbmxpbmUgdm9pZCBtYXRyaXgo
ZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBjb25z
dCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCiB7CiAgICAgZmxvYXQgciA9IHJlZDsKQEAgLTk3LDE4
ICsxMzUsMTAgQEAgaW5saW5lIHZvaWQgbHVtaW5hbmNlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVl
biwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFKQot
dGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+Ci1ib29sIGVmZmVjdEFwcGx5QWNj
ZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9h
dD4mIHZhbHVlcywgZmxvYXQgY29tcG9uZW50c1s5XSwgSW50U2l6ZSBidWZmZXJTaXplKQorc3Rh
dGljIHZvaWQgZWZmZWN0QXBwbHlBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxB
cnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBjb21wb25lbnRzWzldLCBJ
bnRTaXplIGJ1ZmZlclNpemUsIENvbG9yTWF0cml4VHlwZSBtYXRyaXhUeXBlKQogewogICAgIEFT
U0VSVChwaXhlbEFycmF5Lmxlbmd0aCgpID09IGJ1ZmZlclNpemUuYXJlYSgpICogNCk7CiAgICAg
Ci0gICAgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCkgewotICAg
ICAgICAvLyB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCB0YWtlcyBhIDR4NCBtYXRyaXgs
IGlmIGFueSB2YWx1ZSBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIEZFQ29sb3JNYXRyaXggNXg0
IG1hdHJpeAotICAgICAgICAvLyBpcyBub3QgemVybywgZmFsbCBiYWNrIHRvIG5vbi12SW1hZ2Ug
Y29kZS4KLSAgICAgICAgaWYgKHZhbHVlc1s0XSAhPSAwIHx8IHZhbHVlc1s5XSAhPSAwIHx8IHZh
bHVlc1sxNF0gIT0gMCB8fCB2YWx1ZXNbMTldICE9IDApCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCiAgICAgY29uc3QgaW50MzJfdCBkaXZpc29yID0gMjU2OwogICAgIHVpbnQ4
X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKIApAQCAtMTI0LDcgKzE1NCwxMCBAQCBib29s
IGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNv
bnN0IFZlY3RvcjxmbG9hdD4mCiAgICAgZGVzdC5yb3dCeXRlcyA9IGJ1ZmZlclNpemUud2lkdGgo
KSAqIDQ7CiAgICAgZGVzdC5kYXRhID0gZGF0YTsKIAotICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkg
eworICAgIHN3aXRjaCAobWF0cml4VHlwZSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X1VOS05PV046CisgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
TUFUUklYOiB7CiAgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikp
LApAQCAtMjAzLDMxICsyMzYsMTcgQEAgYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4
Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JgogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCiAK
LXRlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlPgotdm9pZCBlZmZlY3RUeXBlKFVp
bnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMs
IEludFNpemUgYnVmZmVyU2l6ZSkKK3N0YXRpYyB2b2lkIGVmZmVjdFR5cGUoVWludDhDbGFtcGVk
QXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgZmxvYXQgY29t
cG9uZW50c1s5XSwgQ29sb3JNYXRyaXhUeXBlIG1hdHJpeFR5cGUpCiB7Ci0gICAgZmxvYXQgY29t
cG9uZW50c1s5XTsKLQotICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9T
QVRVUkFURSkKLSAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25l
bnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0gICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBG
RUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxj
dWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0KICAgICB1
bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKIAotI2lmIFVT
RShBQ0NFTEVSQVRFKQotICAgIGlmIChlZmZlY3RBcHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+
KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSkpCi0gICAgICAgIHJl
dHVybjsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlclNpemUpOwotI2VuZGlmCisgICAg
c3dpdGNoIChtYXRyaXhUeXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9X
TjoKKyAgICAgICAgYnJlYWs7CiAKLSAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKICAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6CiAgICAgICAgIGZvciAodW5zaWduZWQgcGl4ZWxC
eXRlT2Zmc2V0ID0gMDsgcGl4ZWxCeXRlT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxC
eXRlT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgICAgIGZsb2F0IHJlZCA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQpOwpAQCAtMjczLDYgKzI5MiwyMyBAQCB2b2lkIGVmZmVjdFR5cGUo
VWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVl
cywgSW50UwogICAgIH0KIH0KIAorc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybShVaW50OENsYW1w
ZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBj
b21wb25lbnRzWzldLCBJbnRTaXplIGJ1ZmZlclNpemUsIENvbG9yTWF0cml4VHlwZSBtYXRyaXhU
eXBlKQoreworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5
X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYgYW55IHZhbHVlIGluIHRoZSBsYXN0IGNv
bHVtbiBvZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0cml4CisgICAgLy8gaXMgbm90IHplcm8s
IGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCisgICAgaWYgKG1hdHJpeFR5cGUgPT0gRkVD
T0xPUk1BVFJJWF9UWVBFX01BVFJJWCAmJiAodmFsdWVzWzRdIHx8IHZhbHVlc1s5XSB8fCB2YWx1
ZXNbMTRdIHx8IHZhbHVlc1sxOV0pKQorICAgICAgICBGRUNvbG9yTWF0cml4U29mdHdhcmU6OmVm
ZmVjdFR5cGUocGl4ZWxBcnJheSwgdmFsdWVzLCBjb21wb25lbnRzLCBtYXRyaXhUeXBlKTsKKyAg
ICBlbHNlCisgICAgICAgIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZTo6ZWZmZWN0QXBwbHlBY2NlbGVy
YXRlZChwaXhlbEFycmF5LCB2YWx1ZXMsIGNvbXBvbmVudHMsIGJ1ZmZlclNpemUsIG1hdHJpeFR5
cGUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYnVmZmVyU2l6ZSk7CisgICAgRkVDb2xvck1h
dHJpeFNvZnR3YXJlOjplZmZlY3RUeXBlKHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50cywg
bWF0cml4VHlwZSk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgRkVDb2xvck1hdHJpeFNv
ZnR3YXJlCisKIGJvb2wgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwpAQCAt
Mjk0LDI2ICszMzAsMjggQEAgYm9vbCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJikKICAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRh
dGEoKTsKICAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXItPnNpemUo
KTsKIAotICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVl
cyk7Ci0gICAgCisgICAgYXV0byB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsK
KyAgICBmbG9hdCBjb21wb25lbnRzWzldOworCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICBicmVhazsKICAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1B
VFJJWF9UWVBFX01BVFJJWD4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9u
cyk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRF
OiAKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+KHBpeGVs
QXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworCisgICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfU0FUVVJBVEU6CisgICAgICAgIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50
cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwogICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAog
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgZWZmZWN0VHlw
ZTxGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVs
QXJyYXlEaW1lbnNpb25zKTsKKyAgICAgICAgY2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhj
b21wb25lbnRzLCB2YWx1ZXNbMF0pOwogICAgICAgICBicmVhazsKKwogICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xP
Uk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxB
cnJheURpbWVuc2lvbnMpOwogICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAorICAgIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZTo6YXBwbHlQbGF0Zm9y
bShwaXhlbEFycmF5LCB2YWx1ZXMsIGNvbXBvbmVudHMsIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBt
X3R5cGUpOwogICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGlt
YWdlUmVjdCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCmluZGV4IDQ5N2Vi
MTk1ZTQxNzVlY2RmZDBjYWIyNGNiY2Q5YjBlMzlhN2Y4MDkuLmY2OWYwYjAxYzk1MDdlMDUyNmUw
ZDE3N2ViYmVmOTY5MDA5Y2UxZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC00NCw4ICs0NCw5IEBA
IHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlczsgfQogICAgIGJvb2wgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsK
IAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxv
YXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2Fs
Y3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUp
OworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCogY29t
cG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0
ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMg
VmVjdG9yPGZsb2F0PiBub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVl
cyk7CiAKIHByaXZhdGU6CiAgICAgRkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUsIFZlY3Rv
cjxmbG9hdD4mJik7CkBAIC01OCwzNSArNTksNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxmbG9h
dD4gbV92YWx1ZXM7CiB9OwogCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVT
YXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQotewotICAg
IGNvbXBvbmVudHNbMF0gPSAoMC4yMTMgKyAwLjc4NyAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRz
WzFdID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1syXSA9ICgwLjA3
MiAtIDAuMDcyICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbM10gPSAoMC4yMTMgLSAwLjIxMyAq
IHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzRdID0gKDAuNzE1ICsgMC4yODUgKiB2YWx1ZSk7Ci0g
ICAgY29tcG9uZW50c1s1XSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOwotICAgIGNvbXBvbmVu
dHNbNl0gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzddID0gKDAu
NzE1IC0gMC43MTUgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s4XSA9ICgwLjA3MiArIDAuOTI4
ICogdmFsdWUpOwotfQotCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVS
b3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKLXsKLSAgICBm
bG9hdCBjb3NIdWUgPSBjb3ModmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKLSAgICBmbG9hdCBzaW5I
dWUgPSBzaW4odmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKLSAgICBjb21wb25lbnRzWzBdID0gMC4y
MTMgKyBjb3NIdWUgKiAwLjc4NyAtIHNpbkh1ZSAqIDAuMjEzOwotICAgIGNvbXBvbmVudHNbMV0g
PSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1IC0gc2luSHVlICogMC43MTU7Ci0gICAgY29tcG9uZW50
c1syXSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIgKyBzaW5IdWUgKiAwLjkyODsKLSAgICBjb21w
b25lbnRzWzNdID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyArIHNpbkh1ZSAqIDAuMTQzOwotICAg
IGNvbXBvbmVudHNbNF0gPSAwLjcxNSArIGNvc0h1ZSAqIDAuMjg1ICsgc2luSHVlICogMC4xNDA7
Ci0gICAgY29tcG9uZW50c1s1XSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIgLSBzaW5IdWUgKiAw
LjI4MzsKLSAgICBjb21wb25lbnRzWzZdID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyAtIHNpbkh1
ZSAqIDAuNzg3OwotICAgIGNvbXBvbmVudHNbN10gPSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1ICsg
c2luSHVlICogMC43MTU7Ci0gICAgY29tcG9uZW50c1s4XSA9IDAuMDcyICsgY29zSHVlICogMC45
MjggKyBzaW5IdWUgKiAwLjA3MjsKLX0KLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbG9yTWF0cml4KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVu
dFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggOTc3Y2E1YjU3ODQxMzQzZTcxOGY0MjAxNWRi
NDEyNGM3ZTBhZWZlYS4uMWQ1NTdjZDg0NTE3M2I5ZTc3ZGQ2YzhiMjk3ZjI0NGM5Yzk5ZTQ1YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC00NiwxMSArNDYsMTUgQEAgRkVD
b21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiByZWRGdW4KIHsKIH0KIAotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpj
b21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mKQorbmFtZXNwYWNlIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZSB7CisKK3Vz
aW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+OworCitzdGF0aWMgdm9p
ZCBjb21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mKQogewogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVU
YWJ1bGFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3N0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFi
bGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
dHJhbnNmZXJGdW5jdGlvbikKIHsKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVl
cyA9IHRyYW5zZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7CiAgICAgdW5zaWduZWQgbiA9IHRhYmxl
VmFsdWVzLnNpemUoKTsKQEAgLTY3LDcgKzcxLDcgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVy
Ojpjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmUK
ICAgICB9CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFi
bGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
dHJhbnNmZXJGdW5jdGlvbikKK3N0YXRpYyB2b2lkIGNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1
cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVy
RnVuY3Rpb24pCiB7CiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFu
c2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVzOwogICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5z
aXplKCk7CkBAIC04Miw3ICs4Niw3IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0
ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uCiAgICAgfQog
fQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJsZShMb29rdXBU
YWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1
bmN0aW9uKQorc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1
ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewogICAg
ICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUgKiB0cmFu
c2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKQEAgLTkxLDcgKzk1LDcgQEAgdm9pZCBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3Qg
Q29tcG9uZW4KICAgICB9CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUdh
bW1hVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3N0YXRpYyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExv
b2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5z
ZmVyRnVuY3Rpb24pCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXpl
KCk7ICsraSkgewogICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0cmFuc2ZlckZ1bmN0aW9uLmV4
cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEgZG91YmxlIGFuZCBhIGZsb2F0
IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQpAQCAtMTAxLDYgKzEwNSwzMSBAQCB2
b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2
YWx1ZXMsIGNvbnN0IENvbXBvbmVudAogICAgIH0KIH0KIAorc3RhdGljIExvb2t1cFRhYmxlIGNv
bXB1dGVMb29rdXBUYWJsZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBmdW5jdGlv
bikKK3sKKyAgICBMb29rdXBUYWJsZSB0YWJsZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0YWJsZS5zaXplKCk7ICsraSkKKyAgICAgICAgdGFibGVbaV0gPSBpOworCisgICAgdXNp
bmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJik7CisgICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsKKyAg
ICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsCisgICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxl
LAorICAgICAgICBjb21wdXRlVGFidWxhclRhYmxlLAorICAgICAgICBjb21wdXRlRGlzY3JldGVU
YWJsZSwKKyAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxlLAorICAgICAgICBjb21wdXRlR2FtbWFU
YWJsZQorICAgIH07CisKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihmdW5jdGlvbi50
eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOworICAgIGNhbGxFZmZlY3RbZnVu
Y3Rpb24udHlwZV0odGFibGUsIGZ1bmN0aW9uKTsKKworICAgIHJldHVybiB0YWJsZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlCisKIGJvb2wgRkVDb21w
b25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CiAg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwpAQCAtMTExLDExICsxNDAsMTAg
QEAgYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJikKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKIAotICAgIExvb2t1cFRhYmxlIHJlZFRhYmxlOwotICAgIExv
b2t1cFRhYmxlIGdyZWVuVGFibGU7Ci0gICAgTG9va3VwVGFibGUgYmx1ZVRhYmxlOwotICAgIExv
b2t1cFRhYmxlIGFscGhhVGFibGU7Ci0gICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRUYWJsZSwg
Z3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKKyAgICBhdXRvIHJlZFRhYmxlID0g
RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlOjpjb21wdXRlTG9va3VwVGFibGUobV9yZWRGdW5j
dGlvbik7CisgICAgYXV0byBncmVlblRhYmxlID0gRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJl
Ojpjb21wdXRlTG9va3VwVGFibGUobV9ncmVlbkZ1bmN0aW9uKTsKKyAgICBhdXRvIGJsdWVUYWJs
ZSA9IEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZTo6Y29tcHV0ZUxvb2t1cFRhYmxlKG1fYmx1
ZUZ1bmN0aW9uKTsKKyAgICBhdXRvIGFscGhhVGFibGUgPSBGRUNvbXBvbmVudFRyYW5zZmVyU29m
dHdhcmU6OmNvbXB1dGVMb29rdXBUYWJsZShtX2FscGhhRnVuY3Rpb24pOwogCiAgICAgSW50UmVj
dCBkcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7CiAgICAgaW4tPmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoZGVzdGlu
YXRpb25QaXhlbEFycmF5LCBkcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKQEAg
LTEzMSwzMiArMTU5LDYgQEAgYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRUNv
bXBvbmVudFRyYW5zZmVyOjpjb21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJs
ZSwgTG9va3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1
cFRhYmxlJiBhbHBoYVRhYmxlKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWRU
YWJsZS5zaXplKCk7ICsraSkKLSAgICAgICAgcmVkVGFibGVbaV0gPSBncmVlblRhYmxlW2ldID0g
Ymx1ZVRhYmxlW2ldID0gYWxwaGFUYWJsZVtpXSA9IGk7Ci0KLSAgICB1c2luZyBUcmFuc2ZlclR5
cGUgPSB2b2lkICgqKShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mKTsKLSAgICBUcmFuc2ZlclR5cGUgY2FsbEVmZmVjdFtdID0gewotICAgICAgICBjb21wdXRl
SWRlbnRpdHlUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9XTgotICAg
ICAgICBjb21wdXRlSWRlbnRpdHlUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVf
SURFTlRJVFkKLSAgICAgICAgY29tcHV0ZVRhYnVsYXJUYWJsZSwgICAgLy8gRkVDT01QT05FTlRU
UkFOU0ZFUl9UWVBFX1RBQkxFCi0gICAgICAgIGNvbXB1dGVEaXNjcmV0ZVRhYmxlLCAgIC8vIEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9ESVNDUkVURQotICAgICAgICBjb21wdXRlTGluZWFyVGFi
bGUsICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSCi0gICAgICAgIGNvbXB1
dGVHYW1tYVRhYmxlICAgICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9HQU1NQQotICAg
IH07Ci0KLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxz
aXplX3Q+KG1fcmVkRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3Qp
KTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXpl
X3Q+KG1fZ3JlZW5GdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkp
OwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVf
dD4obV9ibHVlRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsK
LSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+
KG1fYWxwaGFGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOwot
Ci0gICAgY2FsbEVmZmVjdFttX3JlZEZ1bmN0aW9uLnR5cGVdKHJlZFRhYmxlLCBtX3JlZEZ1bmN0
aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fZ3JlZW5GdW5jdGlvbi50eXBlXShncmVlblRhYmxlLCBt
X2dyZWVuRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3RbbV9ibHVlRnVuY3Rpb24udHlwZV0oYmx1
ZVRhYmxlLCBtX2JsdWVGdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVjdFttX2FscGhhRnVuY3Rpb24u
dHlwZV0oYWxwaGFUYWJsZSwgbV9hbHBoYUZ1bmN0aW9uKTsKLX0KLQogc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvbmVudFRyYW5zZmVyVHlwZSB0eXBl
KQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAppbmRl
eCA2YWRhOWMwYWJiZTVjMmY5ZDY1YmQ5MTlmZmVjNGYxNzNkMDAzNDE0Li41MThlYTEzNDdhNGFk
ZGJhNGNkNTAwY2I0MmM4MTM3MDZkY2NkMTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
aApAQCAtNjEsMTYgKzYxLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUNvbXBvbmVudFRy
YW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFs
cGhhRnVuYyk7CiAKLSAgICB1c2luZyBMb29rdXBUYWJsZSA9IHN0ZDo6YXJyYXk8dWludDhfdCwg
MjU2PjsKLQotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxl
JiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNv
bXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFi
bGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQg
Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxl
JiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotCi0gICAgdm9pZCBjb21wdXRl
TG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9va3VwVGFibGUmIGdyZWVuVGFi
bGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxlJiBhbHBoYVRhYmxlKTsKLQog
ICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwog
CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0
cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3Bw
CmluZGV4IDI1YWMwMDg0MjRiZDg2MzExODQ3ODkwOTUwYmNmNjNlNWFlZjVmYTguLjNhNTUzNmFl
YjNhODZkNmEzNWExYTEwMmZlZWQ0N2ZiODJkN2M2ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC05
NCw3ICs5NCwzMSBAQCB2b2lkIEZFQ29tcG9zaXRlOjpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVk
ZWQoKQogCiAgICAgZm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKTsKIH0KLSAgICAKKwor
dm9pZCBGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVy
JiBmaWx0ZXIpCit7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICBjYXNlIEZFQ09NUE9TSVRF
X09QRVJBVE9SX0lOOgorICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKKyAgICAg
ICAgLy8gRm9yIEluIGFuZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRo
ZSByZXN1bHQgb2YKKyAgICAgICAgLy8gdGhlIHNlY29uZCBlZmZlY3QuIFNvIGp1c3QgdXNlIHRo
ZSBhYnNvbHV0ZSBwYWludCByZWN0IG9mIHRoZSBzZWNvbmQgZWZmZWN0IGhlcmUuCisgICAgICAg
IHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDEpLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KTsKKyAgICAgICAgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6CisgICAgICAgIC8vIEFyaXRo
bWV0aWMgbWF5IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9uLiBT
byB3ZSBjYW4ndAorICAgICAgICAvLyBvcHRpbWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhlcmUuCisg
ICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVj
dCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBUYWtlIHRo
ZSB1bmlvbiBvZiBib3RoIGlucHV0IGVmZmVjdHMuCisgICAgICAgIEZpbHRlckVmZmVjdDo6ZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoZmlsdGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKworbmFtZXNwYWNlIEZFQ29tcG9zaXRlU29mdHdhcmUgeworCiBzdGF0aWMgdW5zaWduZWQg
Y2hhciBjbGFtcEJ5dGUoaW50IGMpCiB7CiAgICAgdW5zaWduZWQgY2hhciBidWZmW10gPSB7IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMpLCAyNTUsIDAgfTsKQEAgLTE4OCw2ICsyMTIsOCBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgYXJpdGhtZXRpY1NvZnR3YXJlKHVuc2lnbmVkIGNoYXIqIHNv
dXJjZSwgdW5zaWduZWQgY2hhciogZGVzdAogfQogI2VuZGlmCiAKK30gLy8gbmFtZXNwYWNlIEZF
Q29tcG9zaXRlU29mdHdhcmUKKwogaW5saW5lIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXJp
dGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xh
bXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxv
YXQgazQpCiB7CiAgICAgaW50IGxlbmd0aCA9IHNvdXJjZS5sZW5ndGgoKTsKQEAgLTE5NywzMiAr
MjIzLDEwIEBAIGlubGluZSB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0
d2FyZShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291CiAgICAgQVNTRVJUKCEobGVuZ3RoICYg
MHgzKSk7CiAgICAgcGxhdGZvcm1Bcml0aG1ldGljTmVvbihzb3VyY2UuZGF0YSgpLCBkZXN0aW5h
dGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOwogI2Vsc2UKLSAgICBhcml0aG1l
dGljU29mdHdhcmUoc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsx
LCBrMiwgazMsIGs0KTsKKyAgICBGRUNvbXBvc2l0ZVNvZnR3YXJlOjphcml0aG1ldGljU29mdHdh
cmUoc291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMs
IGs0KTsKICNlbmRpZgogfQogCi12b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKLXsKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewot
ICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9BVE9QOgotICAgICAgICAvLyBGb3IgSW4gYW5kIEF0b3AgdGhlIGZpcnN0IGVmZmVj
dCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgotICAgICAgICAvLyB0aGUgc2Vjb25kIGVm
ZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBhaW50IHJlY3Qgb2YgdGhlIHNlY29uZCBl
ZmZlY3QgaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoaW5wdXRFZmZlY3QoMSkt
PmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJ
QzoKLSAgICAgICAgLy8gQXJpdGhtZXRpYyBtYXkgaW5mbHVuY2UgdGhlIGNvbXBlbGUgZmlsdGVy
IHByaW1pdGl2ZSByZWdpb24uIFNvIHdlIGNhbid0Ci0gICAgICAgIC8vIG9wdGltaXplIHRoZSBw
YWludCByZWdpb24gaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5n
SW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIC8vIFRha2UgdGhlIHVuaW9uIG9mIGJvdGggaW5wdXQgZWZmZWN0cy4KLSAgICAg
ICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChmaWx0ZXIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotfQotCiBib29sIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAppbmRleCA5M2Y2ZGY4N2E4Y2JkM2Mx
NjQyNDNmMjQzNjA0ZGNlZWViODFhNjY0Li5jNDY2Y2I5NWZjMzY5ZDE2MzRjZWMwZjdjYmNkYzg1
NTgwOTAxMGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKQEAgLTI0LDYgKzI0LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4LmgiCiAKKyNp
bmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNs
dWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgpAQCAt
MTE0LDYgKzExNSw4IEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVBbHBoYShi
b29sIHByZXNlcnZlQWxwaGEpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK25hbWVzcGFjZSBGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmUgeworCiAvKgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KICAgICAgIENvbnZvbHZlTWF0cml4IGltcGxlbWVudGF0aW9uCkBAIC0xNzAs
NiArMTczLDIxIEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVBbHBoYShib29s
IHByZXNlcnZlQWxwaGEpCiAgICBhbmQgd291bGQgbWFrZSBpdCByZWFsbHkgaGFyZCB0byB1bmRl
cnN0YW5kLgogKi8KIAorc3RydWN0IFBhaW50aW5nRGF0YSB7CisgICAgY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNyY1BpeGVsQXJyYXk7CisgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVs
QXJyYXk7CisgICAgaW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisKKyAgICBJbnRTaXplIGtl
cm5lbFNpemU7CisgICAgZmxvYXQgZGl2aXNvcjsKKyAgICBmbG9hdCBiaWFzOworICAgIEludFBv
aW50IHRhcmdldE9mZnNldDsKKyAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGU7CisgICAgYm9vbCBw
cmVzZXJ2ZUFscGhhOworICAgIFZlY3RvcjxmbG9hdD4ga2VybmVsTWF0cml4OworfTsKKwogc3Rh
dGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFu
bmVsLCB1bnNpZ25lZCBjaGFyIG1heCA9IDI1NSkKIHsKICAgICBpZiAoY2hhbm5lbCA8PSAwKQpA
QCAtMTc5LDggKzE5Nyw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xh
bXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBtCiAgICAgcmV0dXJuIGNo
YW5uZWw7CiB9CiAKLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLUFMV0FZU19J
TkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwg
ZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcykKK3N0YXRpYyBBTFdBWVNf
SU5MSU5FIHZvaWQgc2V0RGVzdGluYXRpb25QaXhlbHMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNvdXJjZVBpeGVscywgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RQaXhlbHMsIGludCYgcGl4ZWws
IGZsb2F0KiB0b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGJvb2wgcHJlc2VydmVB
bHBoYVZhbHVlcykKIHsKICAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBo
YVZhbHVlcyA/IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFz
KTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKQEAgLTE5MywyNSArMjEwLDE4IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVCiAgICAgICAgIGRlc3RQaXhlbHMuc2V0KHBpeGVsKyss
IG1heEFscGhhKTsKIH0KIAotI2lmIENPTVBJTEVSKE1TVkMpCi0vLyBJbmNvcnJlY3RseSBkaWFn
bm9zaW5nIG92ZXJ3cml0ZSBvZiBzdGFjayBpbiB8dG90YWxzfCBkdWUgdG8gfHByZXNlcnZlQWxw
aGFWYWx1ZXN8LgotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZTogNDc4OSkKLSNlbmRpZgotCiAvLyBPbmx5IGZvciByZWdpb24gQwotdGVtcGxhdGU8Ym9vbCBw
cmVzZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6
OmZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNs
aXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQorc3RhdGljIEFM
V0FZU19JTkxJTkUgdm9pZCBzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5k
KQogewogICAgIC8vIGVkZ2UgbW9kZSBkb2VzIG5vdCBhZmZlY3QgdGhlc2UgcGl4ZWxzCi0gICAg
aW50IHBpeGVsID0gKG1fdGFyZ2V0T2Zmc2V0LnkoKSAqIHBhaW50aW5nRGF0YS53aWR0aCArIG1f
dGFyZ2V0T2Zmc2V0LngoKSkgKiA0OworICAgIGludCBwaXhlbCA9IChwYWludGluZ0RhdGEudGFy
Z2V0T2Zmc2V0LnkoKSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHBhaW50aW5nRGF0YS50YXJnZXRP
ZmZzZXQueCgpKSAqIDQ7CiAgICAgaW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJpZ2h0ICogNDsK
LSAgICBpbnQgeEluY3JlYXNlID0gKG1fa2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OworICAg
IGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKSAtIDEpICog
NDsKICAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihhKSBjb21wb25lbnRzCi0gICAgZmxv
YXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVlcyA/IDAgOiAxKV07CisgICAgZmxvYXQg
dG90YWxzWzRdOwogCiAgICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9kaXZpc29yKTsKKyAgICBB
U1NFUlQocGFpbnRpbmdEYXRhLmRpdmlzb3IpOwogCiAgICAgLy8gU2tpcCB0aGUgZmlyc3QgJyhj
bGlwQm90dG9tIC0geUVuZCknIGxpbmVzCiAgICAgcGl4ZWwgKz0gKGNsaXBCb3R0b20gLSB5RW5k
KSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKQEAgLTIyMSwyOSArMjMxLDI4
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQ
aXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluCiAgICAgICAgIGZvciAoaW50IHggPSBjbGlwUmln
aHQgKyAxOyB4ID4gMDsgLS14KSB7CiAgICAgICAgICAgICBpbnQga2VybmVsVmFsdWUgPSBwYWlu
dGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7CiAgICAgICAgICAgICBpbnQga2VybmVs
UGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJu
ZWxTaXplLndpZHRoKCk7CisgICAgICAgICAgICBpbnQgd2lkdGggPSBwYWludGluZ0RhdGEua2Vy
bmVsU2l6ZS53aWR0aCgpOwogCiAgICAgICAgICAgICB0b3RhbHNbMF0gPSAwOwogICAgICAgICAg
ICAgdG90YWxzWzFdID0gMDsKICAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7Ci0gICAgICAgICAg
ICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAgdG90YWxzWzNdID0g
MDsKKyAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7CiAKICAgICAgICAgICAgIHdoaWxlIChrZXJu
ZWxWYWx1ZSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9IHBhaW50aW5nRGF0
YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5n
RGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwogICAgICAgICAgICAgICAg
IHRvdGFsc1sxXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0
YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBp
eGVsKyspKTsKICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtlcm5l
bE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNy
Y1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFw
cmVzZXJ2ZUFscGhhVmFsdWVzKQorICAgICAgICAgICAgICAgIGlmICghcGFpbnRpbmdEYXRhLnBy
ZXNlcnZlQWxwaGEpCiAgICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0Rh
dGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGlu
Z0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKSk7CiAgICAgICAgICAgICAgICAg
KytrZXJuZWxQaXhlbDsKICAgICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOwogICAgICAgICAg
ICAgICAgIGlmICghLS13aWR0aCkgewogICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbCAr
PSBrZXJuZWxJbmNyZWFzZTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tlcm5lbFNp
emUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBwYWludGluZ0RhdGEua2Vy
bmVsU2l6ZS53aWR0aCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVlcz4ocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwg
dG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKKyAgICAgICAgICAgIHNldERl
c3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEu
ZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3IsIHBhaW50
aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CiAgICAgICAgICAgICBz
dGFydEtlcm5lbFBpeGVsICs9IDQ7CiAgICAgICAgIH0KICAgICAgICAgcGl4ZWwgKz0geEluY3Jl
YXNlOwpAQCAtMjUxLDEyICsyNjAsMTIgQEAgQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVN
YXRyaXg6OmZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW4KICAgICB9
CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50IEZFQ29udm9sdmVNYXRyaXg6OmdldFBpeGVsVmFsdWUo
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSkKK3N0YXRpYyBBTFdBWVNf
SU5MSU5FIGludCBnZXRQaXhlbFZhbHVlKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQg
eCwgaW50IHkpCiB7CiAgICAgaWYgKHggPj0gMCAmJiB4IDwgcGFpbnRpbmdEYXRhLndpZHRoICYm
IHkgPj0gMCAmJiB5IDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKICAgICAgICAgcmV0dXJuICh5ICog
cGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKIAotICAgIHN3aXRjaCAobV9lZGdlTW9kZSkg
eworICAgIHN3aXRjaCAocGFpbnRpbmdEYXRhLmVkZ2VNb2RlKSB7CiAgICAgZGVmYXVsdDogLy8g
RURHRU1PREVfTk9ORQogICAgICAgICByZXR1cm4gLTE7CiAgICAgY2FzZSBFREdFTU9ERV9EVVBM
SUNBVEU6CkBAIC0yODEsMzQgKzI5MCwzMiBAQCBBTFdBWVNfSU5MSU5FIGludCBGRUNvbnZvbHZl
TWF0cml4OjpnZXRQaXhlbFZhbHVlKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbgogfQog
CiAvLyBGb3Igb3RoZXIgcmVnaW9ucyB0aGFuIEMKLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBo
YVZhbHVlcz4KLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCitz
dGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCiB7CiAgICAgaW50IHBp
eGVsID0gKHkxICogcGFpbnRpbmdEYXRhLndpZHRoICsgeDEpICogNDsKICAgICBpbnQgaGVpZ2h0
ID0geTIgLSB5MTsKICAgICBpbnQgd2lkdGggPSB4MiAtIHgxOwotICAgIGludCBiZWdpbktlcm5l
bFBpeGVsWCA9IHgxIC0gbV90YXJnZXRPZmZzZXQueCgpOworICAgIGludCBiZWdpbktlcm5lbFBp
eGVsWCA9IHgxIC0gcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC54KCk7CiAgICAgaW50IHN0YXJ0
S2VybmVsUGl4ZWxYID0gYmVnaW5LZXJuZWxQaXhlbFg7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4
ZWxZID0geTEgLSBtX3RhcmdldE9mZnNldC55KCk7CisgICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxZ
ID0geTEgLSBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LnkoKTsKICAgICBpbnQgeEluY3JlYXNl
ID0gKHBhaW50aW5nRGF0YS53aWR0aCAtIHdpZHRoKSAqIDQ7CiAgICAgLy8gQ29udGFpbnMgdGhl
IHN1bSBvZiByZ2IoYSkgY29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNlcnZl
QWxwaGFWYWx1ZXMgPyAwIDogMSldOworICAgIGZsb2F0IHRvdGFsc1s0XTsKIAotICAgIC8vIG1f
ZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0
aGlzCi0gICAgQVNTRVJUKG1fZGl2aXNvcik7CisgICAgLy8gcGFpbnRpbmdEYXRhLmRpdmlzb3Ig
Y2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcworICAg
IEFTU0VSVChwYWludGluZ0RhdGEuZGl2aXNvcik7CiAKICAgICBmb3IgKGludCB5ID0gaGVpZ2h0
OyB5ID4gMDsgLS15KSB7CiAgICAgICAgIGZvciAoaW50IHggPSB3aWR0aDsgeCA+IDA7IC0teCkg
ewogICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJp
eC5zaXplKCkgLSAxOwogICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVs
UGl4ZWxYOwogICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWSA9IHN0YXJ0S2VybmVsUGl4ZWxZ
OwotICAgICAgICAgICAgaW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAg
ICAgICBpbnQgd2lkdGggPSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOwogCiAgICAg
ICAgICAgICB0b3RhbHNbMF0gPSAwOwogICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKICAgICAg
ICAgICAgIHRvdGFsc1syXSA9IDA7Ci0gICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1
ZXMpCi0gICAgICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1sz
XSA9IDA7CiAKICAgICAgICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7CiAgICAgICAg
ICAgICAgICAgaW50IHBpeGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0YSwga2Vy
bmVsUGl4ZWxYLCBrZXJuZWxQaXhlbFkpOwpAQCAtMzE3LDE4ICszMjQsMTggQEAgdm9pZCBGRUNv
bnZvbHZlTWF0cml4OjpmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEsIGludCB4MSwgaW4KICAgICAgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5n
RGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50
aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDEpKTsKICAgICAgICAgICAg
ICAgICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFs
dWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0o
cGl4ZWxJbmRleCArIDIpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KCFwcmVzZXJ2ZUFscGhhVmFsdWVzICYmIHBpeGVsSW5kZXggPj0gMCkKKyAgICAgICAgICAgICAg
ICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhICYmIHBpeGVsSW5kZXggPj0gMCkKICAg
ICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhb
a2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxJbmRleCArIDMpKTsKICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVs
WDsKICAgICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVlOwogICAgICAgICAgICAgICAgIGlmICgh
LS13aWR0aCkgewogICAgICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5l
bFBpeGVsWDsKICAgICAgICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbFk7Ci0gICAgICAgICAg
ICAgICAgICAgIHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAgICAgICAgICAg
ICAgIHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxz
PHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGlu
Z0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGluZ0Rh
dGEuYmlhcyk7CisgICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWludGluZ0RhdGEu
c3JjUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMs
IHBhaW50aW5nRGF0YS5kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdEYXRhLnBy
ZXNlcnZlQWxwaGEpOwogICAgICAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWDsKICAgICAgICAg
fQogICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7CkBAIC0zMzcsMjkgKzM0NCw3IEBAIHZvaWQg
RkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgeDEsIGluCiAgICAgfQogfQogCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFn
bWEgd2FybmluZyhwb3ApIC8vIERpc2FibGUgb2YgNDc4OQotI2VuZGlmCi0KLUFMV0FZU19JTkxJ
TkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQs
IGludCB5RW5kKQotewotICAgIC8vIE11c3QgYmUgaW1wbGVtZW50ZWQgaGVyZSwgc2luY2UgaXQg
cmVmZXJzIGFub3RoZXIgQUxXQVlTX0lOTElORQotICAgIC8vIGZ1bmN0aW9uLCB3aGljaCBkZWZp
bmVkIGluIHRoaXMgQysrIHNvdXJjZSBmaWxlIGFzIHdlbGwKLSAgICBpZiAobV9wcmVzZXJ2ZUFs
cGhhKQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8dHJ1ZT4ocGFpbnRpbmdEYXRhLCBj
bGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7Ci0gICAgZWxzZQotICAgICAgICBm
YXN0U2V0SW50ZXJpb3JQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlw
Qm90dG9tLCB5U3RhcnQsIHlFbmQpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2
ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4
MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICAvLyBBbHRob3VnaCB0aGlzIGZ1bmN0
aW9uIGNhbiBiZSBtb3ZlZCB0byB0aGUgaGVhZGVyLCBpdCBpcyBpbXBsZW1lbnRlZCBoZXJlCi0g
ICAgLy8gYmVjYXVzZSBzZXRJbnRlcmlvclBpeGVscyBpcyBhbHNvIGltcGxlbWVudGVkIGhlcmUK
LSAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8dHJ1
ZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci0gICAgZWxzZQotICAgICAgICBmYXN0
U2V0T3V0ZXJQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgeDEsIHkxLCB4MiwgeTIpOwotfQor
fSAvLyBuYW1lc3BhY2UgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlCiAKIGJvb2wgRkVDb252b2x2
ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiB7CkBAIC0zODMs
MTMgKzM2OCwxOCBAQCBib29sIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKQogCiAgICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKTsKICAgICAKLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewor
ICAgIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSA9
IHsKICAgICAgICAgKnNvdXJjZVBpeGVsQXJyYXksCiAgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSwKICAgICAgICAgcGFpbnRTaXplLndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6ZS5oZWln
aHQoKSwKKyAgICAgICAgbV9rZXJuZWxTaXplLAorICAgICAgICBtX2Rpdmlzb3IsCiAgICAgICAg
IG1fYmlhcyAqIDI1NSwKLSAgICAgICAgbm9ybWFsaXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkK
KyAgICAgICAgbV90YXJnZXRPZmZzZXQsCisgICAgICAgIG1fZWRnZU1vZGUsCisgICAgICAgIG1f
cHJlc2VydmVBbHBoYSwKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyht
X2tlcm5lbE1hdHJpeCkKICAgICB9OwogCiAgICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBp
eGVscwpAQCAtNDAyLDYgKzM5Miw4IEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAoMTAw
ICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKwogICAg
IGlmIChpbnQgaXRlcmF0aW9ucyA9IChhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCkgKiBhYnNv
bHV0ZVBhaW50UmVjdCgpLmhlaWdodCgpKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24pIHsKICAg
ICAgICAgaW50IHN0cmlkZSA9IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOwogICAgICAgICBpbnQg
Y2h1bmtDb3VudCA9IChjbGlwQm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJpZGU7CkBAIC00MTAs
MjEgKzQwMiwyMSBAQCBib29sIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKQogICAgICAgICAgICAgaW50IHlTdGFydCA9IChzdHJpZGUgKiBpbmRl
eCk7CiAgICAgICAgICAgICBpbnQgeUVuZCA9IHN0ZDo6bWluPGludD4oc3RyaWRlICogKGluZGV4
ICsgMSksIGNsaXBCb3R0b20pOwogCi0gICAgICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWlu
dGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKKyAgICAgICAg
ICAgIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZTo6c2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdE
YXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7CiAgICAgICAgIH0pOwog
ICAgIH0gZWxzZQotICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBS
aWdodCwgY2xpcEJvdHRvbSwgMCwgY2xpcEJvdHRvbSk7CisgICAgICAgIEZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZTo6c2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNs
aXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOwogCiAgICAgY2xpcFJpZ2h0ICs9IG1fdGFyZ2V0T2Zm
c2V0LngoKSArIDE7CiAgICAgY2xpcEJvdHRvbSArPSBtX3RhcmdldE9mZnNldC55KCkgKyAxOwog
ICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBtX3RhcmdldE9mZnNldC55KCkp
OworICAgICAgICBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmU6OnNldE91dGVyUGl4ZWxzKHBhaW50
aW5nRGF0YSwgMCwgMCwgcGFpbnRTaXplLndpZHRoKCksIG1fdGFyZ2V0T2Zmc2V0LnkoKSk7CiAg
ICAgaWYgKGNsaXBCb3R0b20gPCBwYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHNldE91dGVy
UGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgY2xpcEJvdHRvbSwgcGFpbnRTaXplLndpZHRoKCksIHBh
aW50U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZTo6c2V0
T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWludFNpemUud2lkdGgo
KSwgcGFpbnRTaXplLmhlaWdodCgpKTsKICAgICBpZiAobV90YXJnZXRPZmZzZXQueCgpID4gMCkK
LSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9mZnNldC55
KCksIG1fdGFyZ2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7CisgICAgICAgIEZFQ29udm9sdmVN
YXRyaXhTb2Z0d2FyZTo6c2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9m
ZnNldC55KCksIG1fdGFyZ2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7CiAgICAgaWYgKGNsaXBS
aWdodCA8IHBhaW50U2l6ZS53aWR0aCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGlu
Z0RhdGEsIGNsaXBSaWdodCwgbV90YXJnZXRPZmZzZXQueSgpLCBwYWludFNpemUud2lkdGgoKSwg
Y2xpcEJvdHRvbSk7CisgICAgICAgIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZTo6c2V0T3V0ZXJQ
aXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgcGFpbnRT
aXplLndpZHRoKCksIGNsaXBCb3R0b20pOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVN
YXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5oCmluZGV4IDA1YzFhODM3ZDIzNGNmNTg0ZGU4OTBmNTk0YjIyMDczZjEzMzY1
YzUuLjZiN2FkZTZmMGIyMjg5ZjM0M2U1NjgxNGZkOGMyZGU1NDQ3M2ZmOTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJp
eC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252
b2x2ZU1hdHJpeC5oCkBAIC02NCwxNiArNjQsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRQcmVz
ZXJ2ZUFscGhhKGJvb2wpOwogCiBwcml2YXRlOgotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7
Ci0gICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5OwotICAgICAg
ICBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwot
ICAgICAgICBpbnQgaGVpZ2h0OwotICAgICAgICBmbG9hdCBiaWFzOwotICAgICAgICBWZWN0b3I8
ZmxvYXQ+IGtlcm5lbE1hdHJpeDsKLSAgICB9OwotCiAgICAgRkVDb252b2x2ZU1hdHJpeChjb25z
dCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJ
bnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtl
cm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYg
a2VybmVsTWF0cml4KTsKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29u
c3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CkBAIC04MiwyMSArNzIsNiBAQCBwcml2YXRlOgogCiAg
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB0ZW1wbGF0ZTxi
b29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGZhc3RTZXRJ
bnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRv
bSwgaW50IHlTdGFydCwgaW50IHlFbmQpOwotCi0gICAgQUxXQVlTX0lOTElORSBpbnQgZ2V0UGl4
ZWxWYWx1ZShQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHkpOwotCi0gICAgdGVtcGxhdGU8Ym9v
bCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotICAgIHZvaWQgZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50
aW5nRGF0YSYsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5Mik7Ci0KLSAgICAvLyBXcmFw
cGVyIGZ1bmN0aW9ucwotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRJbnRlcmlvclBpeGVscyhQ
YWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwg
aW50IHlFbmQpOwotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRPdXRlclBpeGVscyhQYWludGlu
Z0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gUGFyYWxs
ZWxpemF0aW9uIHBhcnRzCi0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5z
aW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBq
b2JzCi0KICAgICBJbnRTaXplIG1fa2VybmVsU2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CiAg
ICAgZmxvYXQgbV9iaWFzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAppbmRleCAxYWFjZTlk
NjlhMDkwYjRmMTBmMTNkZTc1NTc1MWVmMjg2MjA5MWNkLi5lYzcxYjU0N2ExZGY4NmE5MTM5ZDEz
YWU2MzM4Njc0Mjk1ZTk4N2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcApAQCAtMzMs
NyArMzMsNyBAQCBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVh
dGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsbwogfQogCiBGRURpZmZ1c2VMaWdodGlu
Zzo6RkVEaWZmdXNlTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1
cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJj
ZSkKLSAgICA6IEZFTGlnaHRpbmcoRGlmZnVzZUxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJm
YWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgMCwgMCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5l
bFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSwgRmlsdGVyRWZmZWN0OjpUeXBlOjpG
RURpZmZ1c2VMaWdodGluZykKKyAgICA6IEZFTGlnaHRpbmcoRmlsdGVyRWZmZWN0OjpUeXBlOjpG
RURpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29u
c3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92
ZShsaWdodFNvdXJjZSkpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCAzY2Qw
NWNjNDk1NTE3MTk5YWNkYzg4ZWQ1MTM3NjY0MzYwNmI5MjVlLi42Y2JmNWRiZWVhZmU3NTgwOWFj
YzVkY2FkM2E5Zjc3Njk1NzhmODc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC01Mywx
MyArNTMsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRURpc3BsYWNlbWVudE1hcChDaGFu
bmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNo
YW5uZWxTZWxlY3RvciwgZmxvYXQpOwogCisgICAgaW50IHhDaGFubmVsSW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisgICAgaW50IHlDaGFubmVsSW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9CisKICAgICBib29sIHBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CiAK
LSAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3Rv
ciAtIDE7IH0KLSAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5u
ZWxTZWxlY3RvciAtIDE7IH0KLQogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgQ2hhbm5lbFNlbGVjdG9yVHlwZSBtX3hDaGFubmVsU2VsZWN0b3I7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwCmluZGV4IDUwYjJjMWUwMmQ5ZDg4YzkxZmNjZTg0NTJiYmM5MTk4NTE4
OTRkNWUuLjNjMjExZGU1ZTY3YWZhNzZlNjBkMWM5YTZkOTc1OWQ1Yjk0NDA2NGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJs
dXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwCkBAIC0zMCwyOCArMzAsMTI1IEBACiAjaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
KyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFKQogI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxl
cmF0ZS5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+
CisjZWxzZQogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJs
dXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lhbkJsdXIoeCwgeSwgZWRnZU1vZGUpKTsK
K30KKworRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHksIEVk
Z2VNb2RlVHlwZSBlZGdlTW9kZSkKKyAgICA6IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkZFR2F1c3NpYW5CbHVyKQorICAgICwgbV9zdGRYKHgpCisgICAgLCBtX3N0ZFkoeSkKKyAg
ICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUpCit7Cit9CisKK3ZvaWQgRkVHYXVzc2lhbkJsdXI6OnNl
dFN0ZERldmlhdGlvblgoZmxvYXQgeCkKK3sKKyAgICBtX3N0ZFggPSB4OworfQorCit2b2lkIEZF
R2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25ZKGZsb2F0IHkpCit7CisgICAgbV9zdGRZID0g
eTsKK30KKwordm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVk
Z2VNb2RlKQoreworICAgIG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsKK30KIAogc3RhdGljIGlubGlu
ZSBmbG9hdCBnYXVzc2lhbktlcm5lbEZhY3RvcigpCiB7CiAgICAgcmV0dXJuIDMgLyA0LmYgKiBz
cXJ0ZigyICogcGlGbG9hdCk7CiB9CiAKLXN0YXRpYyBjb25zdCBpbnQgZ01heEtlcm5lbFNpemUg
PSA1MDA7CitzdGF0aWMgaW50IGNsYW1wZWRUb0tlcm5lbFNpemUoZmxvYXQgdmFsdWUpCit7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhLZXJuZWxTaXplID0gNTAwOwogCi1uYW1l
c3BhY2UgV2ViQ29yZSB7CisgICAgLy8gTGltaXQgdGhlIGtlcm5lbCBzaXplIHRvIDUwMC4gQSBi
aWdnZXIgcmFkaXVzIHdvbid0IG1ha2UgYSBiaWcgZGlmZmVyZW5jZSBmb3IgdGhlIHJlc3VsdCBp
bWFnZSBidXQKKyAgICAvLyBpbmZsYXRlcyB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCB0b28gbXVj
aC4gVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggRmlyZWZveCcgYmVoYXZpb3IuCisgICAgdW5zaWdu
ZWQgc2l6ZSA9IHN0ZDo6bWF4PHVuc2lnbmVkPigyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmxv
b3JmKHZhbHVlICogZ2F1c3NpYW5LZXJuZWxGYWN0b3IoKSArIDAuNWYpKSk7CisgICAgcmV0dXJu
IGNsYW1wVG88aW50PihzdGQ6Om1pbihzaXplLCBtYXhLZXJuZWxTaXplKSk7Cit9CisgICAgCitJ
bnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRT
aXplIHN0ZERldmlhdGlvbikKK3sKKyAgICBBU1NFUlQoc3RkRGV2aWF0aW9uLndpZHRoKCkgPj0g
MCAmJiBzdGREZXZpYXRpb24uaGVpZ2h0KCkgPj0gMCk7CisgICAgSW50U2l6ZSBrZXJuZWxTaXpl
OworCisgICAgaWYgKHN0ZERldmlhdGlvbi53aWR0aCgpKQorICAgICAgICBrZXJuZWxTaXplLnNl
dFdpZHRoKGNsYW1wZWRUb0tlcm5lbFNpemUoc3RkRGV2aWF0aW9uLndpZHRoKCkpKTsKKworICAg
IGlmIChzdGREZXZpYXRpb24uaGVpZ2h0KCkpCisgICAgICAgIGtlcm5lbFNpemUuc2V0SGVpZ2h0
KGNsYW1wZWRUb0tlcm5lbFNpemUoc3RkRGV2aWF0aW9uLmhlaWdodCgpKSk7CisKKyAgICByZXR1
cm4ga2VybmVsU2l6ZTsKK30KKworSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2Vy
bmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRTaXplIHN0ZERldmlhdGlvbikKK3sK
KyAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGZpbHRlci5zY2FsZWRCeUZp
bHRlclNjYWxlKHN0ZERldmlhdGlvbikpOworfQorCitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpj
YWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCit7CisgICAgYXV0byBr
ZXJuZWxTaXplID0gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKHN0ZERldmlhdGlvbik7CisK
KyAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRo
IHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKyAgICByZXR1cm4g
eyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAy
IH07Cit9CisKK3ZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1
bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9zdGRZIH0pOworCisgICAgRmxvYXRS
ZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0
KCk7CisgICAgLy8gRWRnZSBtb2RlcyBvdGhlciB0aGFuICdub25lJyBkbyBub3QgaW5mbGF0ZSB0
aGUgYWZmZWN0ZWQgcGFpbnQgcmVjdC4KKyAgICBpZiAobV9lZGdlTW9kZSAhPSBFREdFTU9ERV9O
T05FKSB7CisgICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJz
b2x1dGVQYWludFJlY3QpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIHRh
a2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1
c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgorICAgIGFic29sdXRlUGFpbnRSZWN0Lmlu
ZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKKyAgICBhYnNvbHV0ZVBhaW50
UmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYpOworCisgICAgaWYg
KGNsaXBzVG9Cb3VuZHMoKSkKKyAgICAgICAgYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0KG1h
eEVmZmVjdFJlY3QoKSk7CisgICAgZWxzZQorICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0
ZShtYXhFZmZlY3RSZWN0KCkpOworCisgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5n
SW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOworfQorCituYW1lc3BhY2UgRkVHYXVzc2lhbkJs
dXJTb2Z0d2FyZSB7CiAKLWlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0
aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0YVJpZ2h0KQor
c3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IGlvUGl4ZWxBcnJheTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHRtcFBp
eGVsQXJyYXk7CisgICAgaW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisgICAgdW5zaWduZWQg
a2VybmVsU2l6ZVg7CisgICAgdW5zaWduZWQga2VybmVsU2l6ZVk7CisgICAgYm9vbCBpc0FscGhh
SW1hZ2U7CisgICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlOworfTsKKworc3RhdGljIGlubGluZSB2
b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBp
bnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0YVJpZ2h0KQogewogICAgIC8vIENoZWNrIGh0dHA6Ly93
d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVHYXVzc2lhbkJsdXJFbGVtZW50IGZvciBk
ZXRhaWxzLgogICAgIHN3aXRjaCAoYmx1ckl0ZXJhdGlvbikgewpAQCAtNzksMzYgKzE3Niw4IEBA
IGlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25lZCYg
cmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwKICAgICB9CiB9CiAKLVJlZjxGRUdhdXNzaWFuQmx1cj4g
RkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRn
ZU1vZGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lhbkJsdXIoeCwgeSwg
ZWRnZU1vZGUpKTsKLX0KLQotRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVyKGZsb2F0IHgs
IGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLSAgICA6IEZpbHRlckVmZmVjdChGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkZFR2F1c3NpYW5CbHVyKQotICAgICwgbV9zdGRYKHgpCi0gICAgLCBt
X3N0ZFkoeSkKLSAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUpCi17Ci19Ci0KLXZvaWQgRkVHYXVz
c2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgoZmxvYXQgeCkKLXsKLSAgICBtX3N0ZFggPSB4Owot
fQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25ZKGZsb2F0IHkpCi17Ci0g
ICAgbV9zdGRZID0geTsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUoRWRn
ZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIG1fZWRnZU1vZGUgPSBlZGdlTW9kZTsKLX0KLQog
Ly8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJhdGVzIG9uIEFscGhhIGNoYW5uZWwuCi1pbmxpbmUg
dm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFy
cmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5
LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwKICAgICB1bnNpZ25lZCBkeCwgaW50
JiBkeExlZnQsIGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50
JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6
ZSkKIHsKICAgICBjb25zdCB1aW50OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7
CkBAIC0zNzEsMzEgKzQ0MCwzNSBAQCBpbmxpbmUgdm9pZCBzdGFuZGFyZEJveEJsdXIoVWludDhD
bGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcAogICAgIH0KIH0K
IAotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4
Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXks
IHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFp
bnRTaXplKQorc3RhdGljIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xh
bXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVu
c2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRT
aXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQogewogICAgIGlu
dCBzdHJpZGUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURSkK
LSAgICBpZiAoa2VybmVsU2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKG1fZWRnZU1vZGUgPT0gRURH
RU1PREVfTk9ORSB8fCBtX2VkZ2VNb2RlID09IEVER0VNT0RFX0RVUExJQ0FURSkpIHsKKyAgICBp
ZiAoa2VybmVsU2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKGVkZ2VNb2RlID09IEVER0VNT0RFX05P
TkUgfHwgZWRnZU1vZGUgPT0gRURHRU1PREVfRFVQTElDQVRFKSkgewogICAgICAgICBhY2NlbGVy
YXRlQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwg
cGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAjZW5kaWYKIAotICAgIHN0YW5kYXJkQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxB
cnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBo
YUltYWdlKCksIG1fZWRnZU1vZGUpOworICAgIHN0YW5kYXJkQm94Qmx1cihpb0J1ZmZlciwgdG1w
UGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwg
aXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRm
b3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCisjaWYg
IVVTRShBQ0NFTEVSQVRFKQorc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9y
bUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKIHsKICAgICBJbnRTaXplIHBhaW50U2l6ZShw
YXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVycy0+aGVpZ2h0KTsKLSAgICBwYXJhbWV0ZXJzLT5m
aWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbWV0ZXJzLT5pb1BpeGVsQXJyYXksICpw
YXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWCwgcGFyYW1l
dGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7CisgICAgcGxhdGZvcm1BcHBseUdlbmVyaWMo
KnBhcmFtZXRlcnMtPmlvUGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnRtcFBpeGVsQXJyYXksIHBh
cmFtZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWSwgcGFpbnRTaXpl
LCBwYXJhbWV0ZXJzLT5pc0FscGhhSW1hZ2UsIHBhcmFtZXRlcnMtPmVkZ2VNb2RlKTsKIH0KKyNl
bmRpZgogCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseShVaW50OENs
YW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1
bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50
U2l6ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5
JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtl
cm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29s
IGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQogewogI2lmICFVU0UoQUNDRUxF
UkFURSkKICAgICBpbnQgc2NhbmxpbmUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7CiAgICAgaW50
IGV4dHJhSGVpZ2h0ID0gMyAqIGtlcm5lbFNpemVZICogMC41ZjsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNh
bCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCiAgICAgaW50IG9wdGltYWxUaHJlYWROdW1i
ZXIgPSAocGFpbnRTaXplLndpZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8gKHNfbWluaW1h
bFJlY3REaW1lbnNpb24gKyBleHRyYUhlaWdodCAqIHBhaW50U2l6ZS53aWR0aCgpKTsKIAogICAg
IGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewpAQCAtNDExLDcgKzQ4NCw2IEBAIGlubGlu
ZSB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBp
b0J1ZmZlciwgVWludDhDbGFtCiAgICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOwogICAgICAg
ICAgICAgZm9yIChpbnQgam9iID0gMDsgam9iIDwgam9iczsgam9iKyspIHsKICAgICAgICAgICAg
ICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFt
ZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwogCiAgICAg
ICAgICAgICAgICAgaW50IHN0YXJ0WSA9ICFqb2IgPyAwIDogY3VycmVudFkgLSBleHRyYUhlaWdo
dDsKICAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxv
Y2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7CkBAIC00MzEsNiArNTAzLDggQEAgaW5saW5lIHZv
aWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVm
ZmVyLCBVaW50OENsYW0KICAgICAgICAgICAgICAgICBwYXJhbXMuaGVpZ2h0ID0gZW5kWSAtIHN0
YXJ0WTsKICAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVggPSBrZXJuZWxTaXplWDsK
ICAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVkgPSBrZXJuZWxTaXplWTsKKyAgICAg
ICAgICAgICAgICBwYXJhbXMuaXNBbHBoYUltYWdlID0gaXNBbHBoYUltYWdlOworICAgICAgICAg
ICAgICAgIHBhcmFtcy5lZGdlTW9kZSA9IGVkZ2VNb2RlOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwpAQCAtNDU4LDY2ICs1MzIsMTAgQEAgaW5s
aW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkm
IGlvQnVmZmVyLCBVaW50OENsYW0KICNlbmRpZgogCiAgICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJl
IGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4K
LSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVs
U2l6ZVgsIGtlcm5lbFNpemVZLCBwYWludFNpemUpOworICAgIHBsYXRmb3JtQXBwbHlHZW5lcmlj
KGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHBhaW50
U2l6ZSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7CiB9CiAKLXN0YXRpYyBpbnQgY2xhbXBlZFRv
S2VybmVsU2l6ZShmbG9hdCB2YWx1ZSkKLXsKLSAgICAvLyBMaW1pdCB0aGUga2VybmVsIHNpemUg
dG8gNTAwLiBBIGJpZ2dlciByYWRpdXMgd29uJ3QgbWFrZSBhIGJpZyBkaWZmZXJlbmNlIGZvciB0
aGUgcmVzdWx0IGltYWdlIGJ1dAotICAgIC8vIGluZmxhdGVzIHRoZSBhYnNvbHV0ZSBwYWludCBy
ZWN0IHRvbyBtdWNoLiBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBGaXJlZm94JyBiZWhhdmlvci4K
LSAgICB1bnNpZ25lZCBzaXplID0gc3RkOjptYXg8dW5zaWduZWQ+KDIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihmbG9vcmYodmFsdWUgKiBnYXVzc2lhbktlcm5lbEZhY3RvcigpICsgMC41ZikpKTsK
LSAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHN0ZDo6bWluKHNpemUsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihnTWF4S2VybmVsU2l6ZSkpKTsKLX0KLSAgICAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQotewot
ICAgIEFTU0VSVChzdGREZXZpYXRpb24ud2lkdGgoKSA+PSAwICYmIHN0ZERldmlhdGlvbi5oZWln
aHQoKSA+PSAwKTsKLSAgICBJbnRTaXplIGtlcm5lbFNpemU7Ci0KLSAgICBpZiAoc3RkRGV2aWF0
aW9uLndpZHRoKCkpCi0gICAgICAgIGtlcm5lbFNpemUuc2V0V2lkdGgoY2xhbXBlZFRvS2VybmVs
U2l6ZShzdGREZXZpYXRpb24ud2lkdGgoKSkpOwotCi0gICAgaWYgKHN0ZERldmlhdGlvbi5oZWln
aHQoKSkKLSAgICAgICAga2VybmVsU2l6ZS5zZXRIZWlnaHQoY2xhbXBlZFRvS2VybmVsU2l6ZShz
dGREZXZpYXRpb24uaGVpZ2h0KCkpKTsKLQotICAgIHJldHVybiBrZXJuZWxTaXplOwotfQotCi1J
bnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZpbHRlciYg
ZmlsdGVyLCBGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQotewotICAgIHJldHVybiBjYWxjdWxhdGVV
bnNjYWxlZEtlcm5lbFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoc3RkRGV2aWF0aW9u
KSk7Ci19Ci0KLUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoRmxv
YXRTaXplIHN0ZERldmlhdGlvbikKLXsKLSAgICBhdXRvIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVV
bnNjYWxlZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uKTsKLQotICAgIC8vIFdlIHRha2UgdGhlIGhh
bGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVu
IGJveCBibHVyIHRocmVlIHRpbWVzLgotICAgIHJldHVybiB7IDMgKiBrZXJuZWxTaXplLndpZHRo
KCkgLyAyLCAzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAvIDIgfTsKLX0KLQotdm9pZCBGRUdhdXNz
aWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIp
Ci17Ci0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIs
IHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0KLSAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3Qg
PSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAvLyBFZGdlIG1vZGVz
IG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRoZSBhZmZlY3RlZCBwYWludCByZWN0
LgotICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUpIHsKLSAgICAgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6
ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhy
ZWUgdGltZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUu
d2lkdGgoKSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJu
ZWxTaXplLmhlaWdodCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQotICAg
ICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKLSAgICBl
bHNlCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7Ci0K
LSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRS
ZWN0KSk7Ci19Cit9IC8vIG5hbWVzcGFjZSBGRUdhdXNzaWFuQmx1clNvZnR3YXJlCiAKIGJvb2wg
RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRl
cikKIHsKQEAgLTU0Myw3ICs1NjEsNyBAQCBib29sIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgaWYgKCF0bXBJbWFnZURhdGEp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHBsYXRmb3JtQXBwbHkoZGVzdGluYXRpb25Q
aXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUu
aGVpZ2h0KCksIHBhaW50U2l6ZSk7CisgICAgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZTo6cGxhdGZv
cm1BcHBseShkZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUu
d2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UoKSwg
bV9lZGdlTW9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAppbmRl
eCBkNzRiZGFhNzJlZDMwNGY1YjgwMTc3YWQ2Y2NhNzc1YTViNDkzNzE3Li42NWFhNmUxODg5N2Zh
OGNjOTc2OWQxZTU1N2Q3ZDI2ZjVlNWNhMjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCkBAIC00Niwy
OSArNDYsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUdhdXNzaWFuQmx1cihmbG9hdCB4
LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUpOwogCi0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmlt
YWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3Ig
cGFyYWxsZWwgam9icwotCi0gICAgc3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAg
ICAgICAgRkVHYXVzc2lhbkJsdXIqIGZpbHRlcjsKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBpb1BpeGVsQXJyYXk7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
dG1wUGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0Owot
ICAgICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6
ZVk7Ci0gICAgfTsKLQogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3Qg
RmlsdGVyJikgb3ZlcnJpZGU7CiAKLSAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImKSBvdmVycmlkZTsKLQogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
Ym9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKLSAg
ICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJz
Kik7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwg
VWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNp
Z25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKLSAgICB2b2lkIHBsYXRmb3Jt
QXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJy
YXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXpl
WSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIGZsb2F0IG1fc3RkWDsKICAgICBmbG9hdCBtX3N0ZFk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5n
LmNwcAppbmRleCBlODNjZjNiN2NkNjM2ODZmMWY0NDFlNTIyOGYyYzU2YjRlYjRhMTgyLi4zOTVj
MjNhMzZhZDgzM2Q0NGU0NDM2M2Q5ZTBkYTMwMjk5ZjFlZDU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAg
LTM1LDEwICszNSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVMaWdodGluZzo6RkVM
aWdodGluZyhMaWdodGluZ1R5cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdD
b2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNw
ZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRM
ZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0
U291cmNlLCBUeXBlIHR5cGUpCitGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKFR5cGUgdHlwZSwgY29u
c3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVz
ZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxM
aWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKICAgICA6IEZpbHRlckVmZmVjdCh0eXBlKQotICAg
ICwgbV9saWdodGluZ1R5cGUobGlnaHRpbmdUeXBlKQotICAgICwgbV9saWdodFNvdXJjZShXVEZN
b3ZlKGxpZ2h0U291cmNlKSkKICAgICAsIG1fbGlnaHRpbmdDb2xvcihsaWdodGluZ0NvbG9yKQog
ICAgICwgbV9zdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKQogICAgICwgbV9kaWZmdXNlQ29uc3Rh
bnQoZGlmZnVzZUNvbnN0YW50KQpAQCAtNDYsNiArNDQsNyBAQCBGRUxpZ2h0aW5nOjpGRUxpZ2h0
aW5nKExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9y
LCBmbAogICAgICwgbV9zcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQpCiAgICAgLCBt
X2tlcm5lbFVuaXRMZW5ndGhYKGtlcm5lbFVuaXRMZW5ndGhYKQogICAgICwgbV9rZXJuZWxVbml0
TGVuZ3RoWShrZXJuZWxVbml0TGVuZ3RoWSkKKyAgICAsIG1fbGlnaHRTb3VyY2UoV1RGTW92ZShs
aWdodFNvdXJjZSkpCiB7CiB9CiAKQEAgLTg1LDYgKzg0LDggQEAgYm9vbCBGRUxpZ2h0aW5nOjpz
ZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorbmFtZXNwYWNlIEZFTGlnaHRpbmdTb2Z0d2FyZSB7CisKIHN0YXRpYyBjb25z
dGV4cHIgaW50IGNQaXhlbFNpemUgPSA0Owogc3RhdGljIGNvbnN0ZXhwciBpbnQgY0FscGhhQ2hh
bm5lbE9mZnNldCA9IDM7CiBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgY09wYXF1ZUFscGhhID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRik7CkBAIC05NSw3ICs5Niw3NiBAQCBzdGF0aWMgY29u
c3RleHByIGZsb2F0IGNGYWN0b3IxZGl2MyA9IC0xIC8gMy5mOwogc3RhdGljIGNvbnN0ZXhwciBm
bG9hdCBjRmFjdG9yMWRpdjQgPSAtMSAvIDQuZjsKIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0Zh
Y3RvcjJkaXYzID0gLTIgLyAzLmY7CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAorc3RydWN0IEFscGhhV2lu
ZG93IHsKKyAgICB1aW50OF90IGFscGhhWzNdWzNdIHsgfTsKKyAgICAKKyAgICAvLyBUaGUgaW1w
bGVtZW50YXRpb25zIGFyZSBsaW5lZCB1cCB0byBtYWtlIGNvbXBhcmluZyBpbmRpY2VzIGVhc2ll
ci4KKyAgICB1aW50OF90IHRvcExlZnQoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBhbHBo
YVswXVswXTsgfQorICAgIHVpbnQ4X3QgbGVmdCgpIGNvbnN0ICAgICAgICAgICAgICAgIHsgcmV0
dXJuIGFscGhhWzFdWzBdOyB9CisgICAgdWludDhfdCBib3R0b21MZWZ0KCkgY29uc3QgICAgICAg
ICAgeyByZXR1cm4gYWxwaGFbMl1bMF07IH0KKworICAgIHVpbnQ4X3QgdG9wKCkgY29uc3QgICAg
ICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzFdOyB9CisgICAgdWludDhfdCBjZW50ZXIo
KSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMV07IH0KKyAgICB1aW50OF90
IGJvdHRvbSgpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsyXVsxXTsgfQorCisg
ICAgdm9pZCBzZXRUb3AodWludDhfdCB2YWx1ZSkgICAgICAgICAgeyBhbHBoYVswXVsxXSA9IHZh
bHVlOyB9CisgICAgdm9pZCBzZXRDZW50ZXIodWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsx
XVsxXSA9IHZhbHVlOyB9CisgICAgdm9pZCBzZXRCb3R0b20odWludDhfdCB2YWx1ZSkgICAgICAg
eyBhbHBoYVsyXVsxXSA9IHZhbHVlOyB9CisKKyAgICB2b2lkIHNldFRvcFJpZ2h0KHVpbnQ4X3Qg
dmFsdWUpICAgICB7IGFscGhhWzBdWzJdID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldFJpZ2h0KHVp
bnQ4X3QgdmFsdWUpICAgICAgICB7IGFscGhhWzFdWzJdID0gdmFsdWU7IH0KKyAgICB2b2lkIHNl
dEJvdHRvbVJpZ2h0KHVpbnQ4X3QgdmFsdWUpICB7IGFscGhhWzJdWzJdID0gdmFsdWU7IH0KKwor
ICAgIHN0YXRpYyB2b2lkIHNoaWZ0Um93KHVpbnQ4X3QgYWxwaGFbM10pCisgICAgeworICAgICAg
ICBhbHBoYVswXSA9IGFscGhhWzFdOworICAgICAgICBhbHBoYVsxXSA9IGFscGhhWzJdOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHNoaWZ0KCkKKyAgICB7CisgICAgICAgIHNoaWZ0Um93KGFscGhh
WzBdKTsKKyAgICAgICAgc2hpZnRSb3coYWxwaGFbMV0pOworICAgICAgICBzaGlmdFJvdyhhbHBo
YVsyXSk7CisgICAgfQorfTsKKworc3RydWN0IExpZ2h0aW5nRGF0YSB7CisgICAgLy8gVGhpcyBz
dHJ1Y3R1cmUgY29udGFpbnMgb25seSByZWFkLW9ubHkgKFNNUCBzYWZlKSBkYXRhCisgICAgRkVM
aWdodGluZyogZWZmZWN0OworICAgIENvbG9yIGxpZ2h0aW5nQ29sb3I7CisgICAgZmxvYXQgc3Vy
ZmFjZVNjYWxlOworICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudDsKKyAgICBmbG9hdCBzcGVjdWxh
ckNvbnN0YW50OworICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQ7CisgICAgY29uc3QgTGlnaHRT
b3VyY2UqIGxpZ2h0U291cmNlOworICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSogb3Bl
cmF0aW5nQ29sb3JTcGFjZTsKKyAgICBGaWx0ZXJFZmZlY3Q6OlR5cGUgZmlsdGVyVHlwZTsKKwor
ICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7CisgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplOworICAgIGludCB3aWR0aERlY3JlYXNlZEJ5T25lOworICAgIGludCBoZWlnaHRE
ZWNyZWFzZWRCeU9uZTsKKworICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50IG9m
ZnNldCkgY29uc3Q7CisgICAgaW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGludCBvZmZzZXQp
IGNvbnN0OworICAgIGlubGluZSBJbnRTaXplIHRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNv
bnN0OworICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29u
c3Q7CisgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFX
aW5kb3cmKSBjb25zdDsKKyAgICBpbmxpbmUgSW50U2l6ZSByaWdodENvbHVtbk5vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdDsKKyAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21MZWZ0Tm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0OworICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1hbChpbnQgb2Zm
c2V0KSBjb25zdDsKKyAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21SaWdodE5vcm1hbChpbnQgb2Zm
c2V0KSBjb25zdDsKK307CisKK3N0cnVjdCBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMg
eworICAgIExpZ2h0aW5nRGF0YSBkYXRhOworICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEg
cGFpbnRpbmdEYXRhOworICAgIGludCB5U3RhcnQ7CisgICAgaW50IHlFbmQ7Cit9OworCitpbmxp
bmUgSW50U2l6ZSBMaWdodGluZ0RhdGE6OnRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QK
IHsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7CkBAIC0xMDgsNyArMTc4LDcgQEAgaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRp
bmdEYXRhOjp0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotaW5s
aW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50IG9m
ZnNldCkgY29uc3QKK2lubGluZSBJbnRTaXplIExpZ2h0aW5nRGF0YTo6dG9wUm93Tm9ybWFsKGlu
dCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAg
IGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0xMjMsNyArMTkzLDcgQEAgaW5saW5lIEludFNpemUgRkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKICAg
ICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJp
Z2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50U2l6ZSBMaWdodGluZ0RhdGE6
OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwogICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0xMzYsNyArMjA2LDcgQEAg
aW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6
OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoraW5saW5l
IEludFNpemUgTGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0
CiB7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKICAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwpAQCAtMTUyLDcgKzIyMiw3IEBAIGlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAK
LWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwo
aW50IG9mZnNldCwgQWxwaGFXaW5kb3cmIGFscGhhV2luZG93KSBjb25zdAoraW5saW5lIEludFNp
emUgTGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYg
YWxwaGFXaW5kb3cpIGNvbnN0CiB7CiAgICAgaW50IHJpZ2h0QWxwaGFPZmZzZXQgPSBvZmZzZXQg
KyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldDsKICAgICAKQEAgLTE4Miw3ICsyNTIs
NyBAQCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9y
bWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93JgogICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXpl
IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkg
Y29uc3QKK2lubGluZSBJbnRTaXplIExpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwoaW50
IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAgICAg
aW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKQEAgLTE5OCw3ICsyNjgsNyBAQCBpbmxpbmUgSW50U2l6ZSBGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0
CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpi
b3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50U2l6ZSBMaWdodGlu
Z0RhdGE6OmJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgY2Vu
dGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwogICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVt
KG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0yMTEsNyAr
MjgxLDcgQEAgaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21M
ZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUg
RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29u
c3QKK2lubGluZSBJbnRTaXplIExpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsKGludCBvZmZz
ZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGludCBj
ZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7CkBAIC0yMjYsNyArMjk2LDcgQEAgaW5saW5lIEludFNpemUgRkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKICAgICB9
OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJp
Z2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50U2l6ZSBMaWdodGluZ0RhdGE6
OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwogICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0yMzksMjEgKzMwOSwx
NiBAQCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0
Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpz
ZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBm
YWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yKQotewotICAgIHNl
dFBpeGVsSW50ZXJuYWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3Rvclgs
IGZhY3RvclksIG5vcm1hbDJEVmVjdG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7Ci19Ci0KLXZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5h
bChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNl
OjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JY
LCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9hdCBhbHBoYSkKK3N0
YXRpYyB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRh
JiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwy
RFZlY3RvciwgZmxvYXQgYWxwaGEpCiB7CiAgICAgZmxvYXQgeiA9IGFscGhhICogZGF0YS5zdXJm
YWNlU2NhbGU7Ci0gICAgTGlnaHRTb3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIGxpZ2h0aW5n
RGF0YSA9IG1fbGlnaHRTb3VyY2UtPmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShwYWludGluZ0Rh
dGEsIHgsIHksIHopOworICAgIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBsaWdo
dGluZ0RhdGEgPSBkYXRhLmxpZ2h0U291cmNlLT5jb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEocGFp
bnRpbmdEYXRhLCB4LCB5LCB6KTsKIAogICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7CiAgICAgaWYg
KG5vcm1hbDJEVmVjdG9yLmlzWmVybygpKSB7CiAgICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMg
KDAsIDAsIDEpLiBUaGlzIGlzIGEgcXVpdGUgZnJlcXVlbnQgY2FzZS4KLSAgICAgICAgaWYgKG1f
bGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKLSAgICAgICAgICAg
IGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0YS5saWdodFZl
Y3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGg7CisgICAgICAgIGlmIChk
YXRhLmZpbHRlclR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykK
KyAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VDb25zdGFudCAqIGxpZ2h0
aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGg7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3Ig
PSB7CiAgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKQEAgLTI2
MSwxMCArMzI2LDEwIEBAIHZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zm
c2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpCiAgICAgICAgICAgICAgICAg
bGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxl
bmd0aAogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5n
dGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYgKG1fc3BlY3VsYXJF
eHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFy
Q29uc3RhbnQgKiBoYWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGg7CisgICAg
ICAgICAgICBpZiAoZGF0YS5zcGVjdWxhckV4cG9uZW50ID09IDEpCisgICAgICAgICAgICAgICAg
bGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIGhhbGZ3YXlWZWN0b3Iueigp
IC8gaGFsZndheVZlY3Rvckxlbmd0aDsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93ZihoYWxmd2F5VmVjdG9y
LnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGgsIG1fc3BlY3VsYXJFeHBvbmVudCk7CisgICAgICAg
ICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoaGFs
ZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoLCBkYXRhLnNwZWN1bGFyRXhwb25l
bnQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgRmxvYXRQb2ludDNEIG5vcm1h
bFZlY3RvciA9IHsKQEAgLTI3NCw4ICszMzksOCBAQCB2b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVs
SW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaQog
ICAgICAgICB9OwogICAgICAgICBmbG9hdCBub3JtYWxWZWN0b3JMZW5ndGggPSBub3JtYWxWZWN0
b3IubGVuZ3RoKCk7CiAKLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6
OkRpZmZ1c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VD
b25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5v
cm1hbFZlY3Rvckxlbmd0aCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CisgICAg
ICAgIGlmIChkYXRhLmZpbHRlclR5cGUgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VM
aWdodGluZykKKyAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VDb25zdGFu
dCAqIChub3JtYWxWZWN0b3IgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZl
Y3Rvckxlbmd0aCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7CiAgICAgICAg
ICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKQEAgLTI4MywxMCArMzQ4LDEw
IEBAIHZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBM
aWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpCiAgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRh
LmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAogICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5
VmVjdG9yLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAx
KQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiAo
bm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFs
ZndheVZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBpZiAoZGF0YS5zcGVjdWxhckV4cG9uZW50
ID09IDEpCisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25z
dGFudCAqIChub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5n
dGggKiBoYWxmd2F5VmVjdG9yTGVuZ3RoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93Zigobm9ybWFsVmVj
dG9yICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rv
ckxlbmd0aCksIG1fc3BlY3VsYXJFeHBvbmVudCk7CisgICAgICAgICAgICAgICAgbGlnaHRTdHJl
bmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3
YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBk
YXRhLnNwZWN1bGFyRXhwb25lbnQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMDQsOCArMzY5
LDEzIEBAIHZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25z
dCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpCiAgICAgZGF0YS5waXhlbHMtPnNldFJhbmdl
KHBpeGVsVmFsdWUsIDMsIG9mZnNldCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldFBpeGVsKGludCBv
ZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0
IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IpCit7CisgICAgc2V0UGl4ZWxJbnRlcm5h
bChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgZmFjdG9yWCwgZmFjdG9yWSwgbm9y
bWFsMkRWZWN0b3IsIGRhdGEucGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKK30KKwogLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhl
IHNhbWUgcGl4ZWwgYnVmZmVyLCBidXQgaXQgb25seSByZWFkcyB0aGUgYWxwaGEgY2hhbm5lbCwg
YW5kIHdyaXRlcyB0aGUgbm9uLWFscGhhIGNoYW5uZWxzLgotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0
Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGln
aHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5k
WSkKK3N0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQoY29uc3QgTGlnaHRpbmdE
YXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEs
IGludCBzdGFydFksIGludCBlbmRZKQogewogICAgIC8vIE1ha2Ugc3VyZSBzdGFydFkgaXMgPiAw
IHNpbmNlIHdlIHJlYWQgZnJvbSB0aGUgcHJldmlvdXMgcm93IGluIHRoZSBsb29wLgogICAgIEFT
U0VSVChzdGFydFkpOwpAQCAtMzM3LDE2ICs0MDcsMTkgQEAgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0
Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGln
aHQKICAgICB9CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNXb3Jr
ZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQorc3RhdGljIHZv
aWQgcGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0
ZXJzKiBwYXJhbWV0ZXJzKQogewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxhdGZvcm1BcHBs
eUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEs
IHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+eUVuZCk7CisgICAgcGxhdGZvcm1BcHBs
eUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEs
IHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+eUVuZCk7CiB9CiAKLXZvaWQgRkVMaWdo
dGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25z
dCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCitzdGF0aWMgdm9pZCBw
bGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKIHsKICAgICB1bnNpZ25lZCByb3dz
VG9Qcm9jZXNzID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAtIDE7CiAgICAgdW5zaWduZWQg
bWF4TnVtVGhyZWFkcyA9IHJvd3NUb1Byb2Nlc3MgLyA4OworICAgIAorICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNh
bCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCiAgICAgdW5zaWduZWQgb3B0aW1hbFRocmVh
ZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPigoKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSAt
IDEpICogcm93c1RvUHJvY2VzcykgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJl
YWRzKTsKKwogICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewogICAgICAgICAvLyBJ
bml0aWFsaXplIHBhcmFsbGVsIGpvYnMKICAgICAgICAgUGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBw
bHlHZW5lcmljUGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5R2VuZXJpY1dv
cmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CkBAIC0zNjIsNyArNDM1LDYgQEAgdm9pZCBGRUxp
Z2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNv
bnN0IExpZ2h0U291cmMKICAgICAgICAgICAgIGludCB5U3RhcnQgPSAxOwogICAgICAgICAgICAg
Zm9yICgtLWpvYjsgam9iID49IDA7IC0tam9iKSB7CiAgICAgICAgICAgICAgICAgUGxhdGZvcm1B
cHBseUdlbmVyaWNQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpv
Yik7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7CiAgICAgICAgICAgICAg
ICAgcGFyYW1zLmRhdGEgPSBkYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0Rh
dGEgPSBwYWludGluZ0RhdGE7CiAgICAgICAgICAgICAgICAgcGFyYW1zLnlTdGFydCA9IHlTdGFy
dDsKQEAgLTM3OCw3ICs0NTAsNyBAQCB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5l
cmljKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyYwogICAgIHBsYXRm
b3JtQXBwbHlHZW5lcmljUGFpbnQoZGF0YSwgcGFpbnRpbmdEYXRhLCAxLCBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lKTsKIH0KIAotaW5saW5lIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eShjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0
IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhKQogewogICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3Vs
ZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCiAjaWYgQ1BVKEFSTV9ORU9O
KSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKQEAg
LTM4OCwyNiArNDYwLDE0IEBAIGlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHko
Y29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjCiAjZW5kaWYKIH0KIAot
Ym9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorc3RhdGljIGJvb2wgZHJhd0xpZ2h0aW5nKGNvbnN0IExp
Z2h0aW5nRGF0YSYgZGF0YSkKIHsKICAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50
aW5nRGF0YTsKLSAgICBMaWdodGluZ0RhdGEgZGF0YTsKLQotICAgIC8vIEZJWE1FOiBkbyBzb21l
dGhpbmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBib3RoKSBpcyAxIHBpeGVsLgotICAgIC8vIFRo
ZSBXMyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlzIGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3Qg
cmV0dXJucy4KLSAgICBpZiAod2lkdGggPD0gMiB8fCBoZWlnaHQgPD0gMikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgZGF0YS5waXhlbHMgPSAmcGl4ZWxzOwotICAgIGRhdGEuc3VyZmFj
ZVNjYWxlID0gbV9zdXJmYWNlU2NhbGUgLyAyNTUuMGY7Ci0gICAgZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSA9IHdpZHRoICogY1BpeGVsU2l6ZTsKLSAgICBkYXRhLndpZHRoRGVjcmVh
c2VkQnlPbmUgPSB3aWR0aCAtIDE7Ci0gICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhl
aWdodCAtIDE7Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b0Nv
bG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGF1
dG8gW3IsIGcsIGIsIGFdID0gZGF0YS5saWdodGluZ0NvbG9yLnRvQ29sb3JDb21wb25lbnRzSW5D
b2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UpOwogICAgIHBhaW50aW5nRGF0YS5p
bml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwog
Ci0gICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRh
KTsKKyAgICBkYXRhLmxpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCpkYXRhLmVmZmVjdCwg
cGFpbnRpbmdEYXRhKTsKIAogICAgIC8vIFRvcCBsZWZ0LgogICAgIGludCBvZmZzZXQgPSAwOwpA
QCAtNDIyLDEwICs0ODIsMTAgQEAgYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhD
bGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIHNldFBpeGVs
KG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25l
LCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21MZWZ0Tm9ybWFsKG9mZnNl
dCkpOwogCiAgICAgLy8gQm90dG9tIHJpZ2h0LgotICAgIG9mZnNldCA9IGhlaWdodCAqIGRhdGEu
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAgIG9mZnNldCA9IChk
YXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICsgMSkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplIC0gY1BpeGVsU2l6ZTsKICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5n
RGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25l
LCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21SaWdodE5vcm1hbChvZmZz
ZXQpKTsKIAotICAgIGlmICh3aWR0aCA+PSAzKSB7CisgICAgaWYgKGRhdGEud2lkdGhEZWNyZWFz
ZWRCeU9uZSA+PSAyKSB7CiAgICAgICAgIC8vIFRvcCByb3cuCiAgICAgICAgIG9mZnNldCA9IGNQ
aXhlbFNpemU7CiAgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNl
ZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQpAQCAtNDM3LDcgKzQ5Nyw3IEBAIGJv
b2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKICAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwg
cGFpbnRpbmdEYXRhLCB4LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMWRpdjMs
IGNGYWN0b3IxZGl2MiwgZGF0YS5ib3R0b21Sb3dOb3JtYWwob2Zmc2V0KSk7CiAgICAgfQogCi0g
ICAgaWYgKGhlaWdodCA+PSAzKSB7CisgICAgaWYgKGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUg
Pj0gMikgewogICAgICAgICAvLyBMZWZ0IGNvbHVtbi4KICAgICAgICAgb2Zmc2V0ID0gZGF0YS53
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKICAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBk
YXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplKQpAQCAtNDQ5LDEzICs1MDksMTMgQEAgYm9vbCBGRUxpZ2h0aW5nOjpk
cmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQogICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRh
dGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRh
dGEucmlnaHRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7CiAgICAgfQogCi0gICAgaWYgKHdpZHRoID49
IDMgJiYgaGVpZ2h0ID49IDMpIHsKKyAgICBpZiAoZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID49
IDIgJiYgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA+PSAyKSB7CiAgICAgICAgIC8vIEludGVy
aW9yIHBpeGVscy4KICAgICAgICAgcGxhdGZvcm1BcHBseShkYXRhLCBwYWludGluZ0RhdGEpOwog
ICAgIH0KIAotICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplICogaGVpZ2h0OwotICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBEaWZmdXNlTGlnaHRpbmcp
IHsKKyAgICBpbnQgbGFzdFBpeGVsID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAq
IChkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICsgMSk7CisgICAgaWYgKGRhdGEuZmlsdGVyVHlw
ZSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKSB7CiAgICAgICAgIGZv
ciAoaW50IGkgPSBjQWxwaGFDaGFubmVsT2Zmc2V0OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhl
bFNpemUpCiAgICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7CiAg
ICAgfSBlbHNlIHsKQEAgLTQ3MSw2ICs1MzEsOCBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdo
dGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKK30gLy8gbmFtZXNwYWNlIEZFTGlnaHRpbmdTb2Z0d2FyZQor
CiBib29sIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQog
ewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKQEAgLTQ5MCw4ICs1NTIs
MzAgQEAgYm9vbCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
JikKICAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMga2VybmVsVW5pdExlbmd0aHMsIGFuZCBJIGFt
IG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgogICAgIC8vIEFueXdheSwgZmVDb252b2x2ZU1h
dHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0aW9uCiAKLSAgICBJbnRTaXplIGFi
c29sdXRlUGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZHJhd0xp
Z2h0aW5nKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgoKSwg
YWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOworICAgIEludFNpemUgc2l6ZSA9IEludFNpemUo
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOworCisgICAgLy8gRklYTUU6IGRvIHNvbWV0aGlu
ZyBpZiB3aWR0aCBvciBoZWlnaHQgKG9yIGJvdGgpIGlzIDEgcGl4ZWwuCisgICAgLy8gVGhlIFcz
IHNwZWMgZG9lcyBub3QgZGVmaW5lIHRoaXMgY2FzZS4gTm93IHRoZSBmaWx0ZXIganVzdCByZXR1
cm5zLgorICAgIGlmIChzaXplLndpZHRoKCkgPD0gMiB8fCBzaXplLmhlaWdodCgpIDw9IDIpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgRkVMaWdodGluZ1NvZnR3YXJlOjpMaWdodGluZ0Rh
dGEgZGF0YTsKKyAgICBkYXRhLmVmZmVjdCA9IHRoaXM7CisgICAgZGF0YS5saWdodGluZ0NvbG9y
ID0gbV9saWdodGluZ0NvbG9yOworICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9zdXJmYWNlU2Nh
bGUgLyAyNTUuMGY7CisgICAgZGF0YS5kaWZmdXNlQ29uc3RhbnQgPSBtX2RpZmZ1c2VDb25zdGFu
dDsKKyAgICBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgPSBtX3NwZWN1bGFyQ29uc3RhbnQ7CisgICAg
ZGF0YS5zcGVjdWxhckV4cG9uZW50ID0gbV9zcGVjdWxhckV4cG9uZW50OworICAgIGRhdGEubGln
aHRTb3VyY2UgPSBtX2xpZ2h0U291cmNlLnB0cigpOworICAgIGRhdGEub3BlcmF0aW5nQ29sb3JT
cGFjZSA9ICZvcGVyYXRpbmdDb2xvclNwYWNlKCk7CisgICAgZGF0YS5maWx0ZXJUeXBlID0gZmls
dGVyVHlwZSgpOworCisgICAgZGF0YS5waXhlbHMgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5Owor
ICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPSBzaXplLndpZHRoKCkgKiBGRUxp
Z2h0aW5nU29mdHdhcmU6OmNQaXhlbFNpemU7CisgICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25l
ID0gc2l6ZS53aWR0aCgpIC0gMTsKKyAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gc2l6
ZS5oZWlnaHQoKSAtIDE7CisKKyAgICBGRUxpZ2h0aW5nU29mdHdhcmU6OmRyYXdMaWdodGluZyhk
YXRhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAppbmRleCBhZDJmYzI4ZmE5ZTdm
NGJmMjkxM2Q2N2I5ODA1N2Y4ZWViYjA4ZGIyLi4wY2Q1MDMzNTMwZDk0ZjUyZTE0ZjE2M2UzMWI5
ZjliZjQzYjI2NTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaApAQCAtMjksOSArMjksNiBAQAogI2luY2x1ZGUgIkNv
bG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiTGlnaHRTb3VyY2Uu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+Ci0KLS8vIENvbW1vbiBiYXNl
IGNsYXNzIGZvciBGRURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxhckxpZ2h0aW5nCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTQsMTAxICs1MSwxNyBAQCBwdWJsaWM6CiAgICAgY29u
c3QgTGlnaHRTb3VyY2UmIGxpZ2h0U291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9saWdodFNvdXJj
ZS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxS
ZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFy
YWxsZWwgam9icwotCi0gICAgZW51bSBMaWdodGluZ1R5cGUgewotICAgICAgICBEaWZmdXNlTGln
aHRpbmcsCi0gICAgICAgIFNwZWN1bGFyTGlnaHRpbmcKLSAgICB9OwotICAgIAotICAgIHN0cnVj
dCBBbHBoYVdpbmRvdyB7Ci0gICAgICAgIHVpbnQ4X3QgYWxwaGFbM11bM10geyB9OwotICAgICAg
ICAKLSAgICAgICAgLy8gVGhlIGltcGxlbWVudGF0aW9ucyBhcmUgbGluZWQgdXAgdG8gbWFrZSBj
b21wYXJpbmcgaW5kaWNlcyBlYXNpZXIuCi0gICAgICAgIHVpbnQ4X3QgdG9wTGVmdCgpIGNvbnN0
ICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzBdOyB9Ci0gICAgICAgIHVpbnQ4X3QgbGVm
dCgpIGNvbnN0ICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzBdOyB9Ci0gICAgICAg
IHVpbnQ4X3QgYm90dG9tTGVmdCgpIGNvbnN0ICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzBd
OyB9Ci0KLSAgICAgICAgdWludDhfdCB0b3AoKSBjb25zdCAgICAgICAgICAgICAgICAgeyByZXR1
cm4gYWxwaGFbMF1bMV07IH0KLSAgICAgICAgdWludDhfdCBjZW50ZXIoKSBjb25zdCAgICAgICAg
ICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMV07IH0KLSAgICAgICAgdWludDhfdCBib3R0b20oKSBj
b25zdCAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMV07IH0KLQotICAgICAgICB2b2lk
IHNldFRvcCh1aW50OF90IHZhbHVlKSAgICAgICAgICB7IGFscGhhWzBdWzFdID0gdmFsdWU7IH0K
LSAgICAgICAgdm9pZCBzZXRDZW50ZXIodWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsxXVsx
XSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Qm90dG9tKHVpbnQ4X3QgdmFsdWUpICAgICAg
IHsgYWxwaGFbMl1bMV0gPSB2YWx1ZTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wUmlnaHQodWlu
dDhfdCB2YWx1ZSkgICAgIHsgYWxwaGFbMF1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNl
dFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICAgICB7IGFscGhhWzFdWzJdID0gdmFsdWU7IH0KLSAg
ICAgICAgdm9pZCBzZXRCb3R0b21SaWdodCh1aW50OF90IHZhbHVlKSAgeyBhbHBoYVsyXVsyXSA9
IHZhbHVlOyB9Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgc2hpZnRSb3codWludDhfdCBhbHBoYVsz
XSkKLSAgICAgICAgewotICAgICAgICAgICAgYWxwaGFbMF0gPSBhbHBoYVsxXTsKLSAgICAgICAg
ICAgIGFscGhhWzFdID0gYWxwaGFbMl07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZv
aWQgc2hpZnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVswXSk7Ci0g
ICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVsxXSk7Ci0gICAgICAgICAgICBzaGlmdFJvdyhhbHBo
YVsyXSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3RydWN0IExpZ2h0aW5nRGF0YSB7Ci0g
ICAgICAgIC8vIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIG9ubHkgcmVhZC1vbmx5IChTTVAgc2Fm
ZSkgZGF0YQotICAgICAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxzOwotICAgICAgICBmbG9h
dCBzdXJmYWNlU2NhbGU7Ci0gICAgICAgIGludCB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsK
LSAgICAgICAgaW50IHdpZHRoRGVjcmVhc2VkQnlPbmU7Ci0gICAgICAgIGludCBoZWlnaHREZWNy
ZWFzZWRCeU9uZTsKLQotICAgICAgICBpbmxpbmUgSW50U2l6ZSB0b3BMZWZ0Tm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSB0b3BSb3dOb3JtYWwoaW50IG9m
ZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcFJpZ2h0Tm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBsZWZ0Q29sdW1uTm9ybWFsKGlu
dCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBpbnRlcmlvck5vcm1hbChp
bnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBy
aWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNp
emUgYm90dG9tTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIElu
dFNpemUgYm90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUg
SW50U2l6ZSBib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICB9OwotCi0g
ICAgc3RydWN0IFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyB7Ci0gICAgICAgIEZFTGln
aHRpbmcqIGZpbHRlcjsKLSAgICAgICAgTGlnaHRpbmdEYXRhIGRhdGE7Ci0gICAgICAgIExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgICAgICBpbnQgeVN0YXJ0Owot
ICAgICAgICBpbnQgeUVuZDsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBs
eUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKik7Ci0gICAgc3Rh
dGljIHZvaWQgcGxhdGZvcm1BcHBseU5lb25Xb3JrZXIoRkVMaWdodGluZ1BhaW50aW5nRGF0YUZv
ck5lb24qKTsKLQotICAgIEZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZs
b2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYm
LCBUeXBlKTsKLQotICAgIGJvb2wgZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiwgaW50
LCBpbnQpOwotCi0gICAgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0Rh
dGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9h
dCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZlY3Rvcik7Ci0gICAgdm9p
ZCBzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0
IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3Rvclgs
IGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yLCBmbG9hdCBhbHBoYSk7CisgICAg
RkVMaWdodGluZyhUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFj
ZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZs
b2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIAogICAgIHZvaWQgZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBh
aW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CiAKICAgICBib29s
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHZv
aWQgcGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJik7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQoY29u
c3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCBz
dGFydFgsIGludCBzdGFydFkpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3Qg
TGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwotCiAjaWYg
Q1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0NfQ09N
UEFUSUJMRSkKICAgICBzdGF0aWMgaW50IGdldFBvd2VyQ29lZmZpY2llbnRzKGZsb2F0IGV4cG9u
ZW50KTsKICAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5TmVvbihjb25zdCBMaWdodGluZ0Rh
dGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7CiAjZW5kaWYKIAotICAgIExp
Z2h0aW5nVHlwZSBtX2xpZ2h0aW5nVHlwZTsKLSAgICBSZWY8TGlnaHRTb3VyY2U+IG1fbGlnaHRT
b3VyY2U7Ci0KICAgICBDb2xvciBtX2xpZ2h0aW5nQ29sb3I7CiAgICAgZmxvYXQgbV9zdXJmYWNl
U2NhbGU7CiAgICAgZmxvYXQgbV9kaWZmdXNlQ29uc3RhbnQ7CkBAIC0xNTYsNyArNjksNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50OwogICAgIGZsb2F0IG1fa2Vy
bmVsVW5pdExlbmd0aFg7CiAgICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICBSZWY8
TGlnaHRTb3VyY2U+IG1fbGlnaHRTb3VyY2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCA0MzI4OGQ5ZTU5MmYwMjgyODM4NDJlNzkyNGI3MTE1
ZmM4ZjZjMjc2Li4wOWY4ZWUyYzExNDhiYjU4ZTQ5MjI3NzZkYTkwYWE0ZmRhMjYwNTk5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhv
bG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1vcnBob2xvZ3kuY3BwCkBAIC04MywyMyArODMsNDAgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFi
c29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CiB9CiAKK25hbWVz
cGFjZSBGRU1vcnBob2xvZ3lTb2Z0d2FyZSB7CisKK3N0cnVjdCBQYWludGluZ0RhdGEgeworICAg
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZTsKKyAgICBpbnQgcmFkaXVzWDsKKyAgICBpbnQg
cmFkaXVzWTsKKyAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJheTsKKyAg
ICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheTsKKyAgICBpbnQgd2lkdGg7CisgICAg
aW50IGhlaWdodDsKK307CisKK3N0cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7CisgICAg
aW50IHN0YXJ0WTsKKyAgICBpbnQgZW5kWTsKKyAgICBjb25zdCBQYWludGluZ0RhdGEqIHBhaW50
aW5nRGF0YTsKK307CisKIHN0YXRpYyBpbmxpbmUgaW50IHBpeGVsQXJyYXlJbmRleChpbnQgeCwg
aW50IHksIGludCB3aWR0aCkKIHsKICAgICByZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsKIH0K
IAotaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JDb21wb25lbnRz
ZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4ZWwpCitzdGF0aWMgaW5saW5lIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFs
dWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4ZWwpCiB7CiAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGFzU1JHQkEocGl4ZWwpKTsKIH0KIAotaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQ
aXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4mIGNvbXBvbmVudHMpCitzdGF0aWMgaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQ
aXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4mIGNvbXBvbmVudHMpCiB7CiAgICAgcmV0dXJuIFBhY2tlZENvbG9yOjpSR0JBIHsgbWFr
ZUZyb21Db21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+Pihjb21wb25lbnRzKSB9OwogfQogCi10ZW1w
bGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYikKK3N0YXRpYyBB
TFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiYgYiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQogewogICAgIGlmICh0eXBl
ID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKICAgICAgICAgcmV0dXJuIHBlckNvbXBv
bmVudE1pbihhLCBiKTsKQEAgLTEwNyw0NyArMTI0LDI5IEBAIEFMV0FZU19JTkxJTkUgQ29sb3JD
b21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50
OF90CiAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1heChhLCBiKTsKIH0KIAotdGVtcGxhdGU8TW9y
cGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1Bp
eGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoKQorc3RhdGlj
IEFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVt
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFy
dCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQogewog
ICAgIGF1dG8gZXh0cmVtdW0gPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFj
a2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1Bp
eGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHlTdGFydCwgd2lkdGgpKSB9KTsK
IAogICAgIGZvciAoaW50IHkgPSB5U3RhcnQgKyAxOyB5IDwgeUVuZDsgKyt5KSB7CiAgICAgICAg
IGF1dG8gcGl4ZWwgPSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29s
b3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJy
YXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSkgfSk7Ci0gICAgICAgIGV4
dHJlbXVtID0gbWluT3JNYXg8dHlwZT4oZXh0cmVtdW0sIHBpeGVsKTsKKyAgICAgICAgZXh0cmVt
dW0gPSBtaW5Pck1heChleHRyZW11bSwgcGl4ZWwsIHR5cGUpOwogICAgIH0KICAgICByZXR1cm4g
ZXh0cmVtdW07CiB9CiAKLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBp
bnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9y
VHlwZSB0eXBlKQotewotICAgIGlmICh0eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9E
RSkKLSAgICAgICAgcmV0dXJuIGNvbHVtbkV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9F
Uk9ERT4oc3JjUGl4ZWxBcnJheSwgeCwgeVN0YXJ0LCB5RW5kLCB3aWR0aCk7Ci0KLSAgICByZXR1
cm4gY29sdW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURT4oc3JjUGl4ZWxB
cnJheSwgeCwgeVN0YXJ0LCB5RW5kLCB3aWR0aCk7Ci19Ci0KIHVzaW5nIENvbHVtbkV4dHJlbWEg
PSBWZWN0b3I8Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+LCAxNj47CiAKLXRlbXBsYXRlPE1v
cnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZT4KLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRz
PHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCkK
K3N0YXRpYyBBTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxF
eHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUgdHlwZSkKIHsKICAgICBhdXRvIGV4dHJlbXVtID0ga2VybmVsWzBdOwogICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwga2VybmVsLnNpemUoKTsgKytpKQotICAgICAgICBleHRyZW11bSA9IG1p
bk9yTWF4PHR5cGU+KGV4dHJlbXVtLCBrZXJuZWxbaV0pOworICAgICAgICBleHRyZW11bSA9IG1p
bk9yTWF4KGV4dHJlbXVtLCBrZXJuZWxbaV0sIHR5cGUpOwogCiAgICAgcmV0dXJuIGV4dHJlbXVt
OwogfQogCi1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxF
eHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUp
Ci0gICAgICAgIHJldHVybiBrZXJuZWxFeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJP
REU+KGtlcm5lbCk7Ci0KLSAgICByZXR1cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09Q
RVJBVE9SX0RJTEFURT4oa2VybmVsKTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3Jt
QXBwbHlHZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZ
LCBpbnQgZW5kWSkKK3N0YXRpYyB2b2lkIHBsYXRvZnJtQXBwbHlHZW5lcmljKGNvbnN0IFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKIHsKICAgICBBU1NF
UlQoZW5kWSA+IHN0YXJ0WSk7CiAKQEAgLTE3MywyOCArMTcyLDI4IEBAIHZvaWQgRkVNb3JwaG9s
b2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgaW50IHN0CiAKICAgICAgICAgLy8gV2Ugc3RhcnQgYXQgdGhlIGxlZnQgZWRnZSwgc28gY29t
cHV0ZSBleHRyZW1lIGZvciB0aGUgcmFkaXVzWCBjb2x1bW5zLgogICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHJhZGl1c1g7ICsreCkKLSAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVt
bkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHgsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lk
dGgsIG1fdHlwZSkpOworICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0o
c3JjUGl4ZWxBcnJheSwgeCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFpbnRp
bmdEYXRhLnR5cGUpKTsKIAogICAgICAgICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVt
YSBvZiBuZXh0IGNvbHVtbgogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gp
IHsKICAgICAgICAgICAgIGlmICh4IDwgd2lkdGggLSByYWRpdXNYKQotICAgICAgICAgICAgICAg
IGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHggKyByYWRpdXNY
LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKKyAgICAgICAgICAg
ICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4ICsgcmFk
aXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFpbnRpbmdEYXRhLnR5cGUp
KTsKIAogICAgICAgICAgICAgaWYgKHggPiByYWRpdXNYKQogICAgICAgICAgICAgICAgIGV4dHJl
bWEucmVtb3ZlKDApOwogCiAgICAgICAgICAgICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCo+KGRzdFBpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUlu
ZGV4KHgsIHksIHdpZHRoKSk7Ci0gICAgICAgICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFs
dWVGcm9tQ29sb3JDb21wb25lbnRzKGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEsIG1fdHlwZSkpLnZh
bHVlOworICAgICAgICAgICAgKmRlc3RQaXhlbCA9IG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29t
cG9uZW50cyhrZXJuZWxFeHRyZW11bShleHRyZW1hLCBwYWludGluZ0RhdGEudHlwZSkpLnZhbHVl
OwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBs
eVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW0pCitzdGF0aWMgdm9pZCBwbGF0
b2ZybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbSkKIHsKLSAgICBw
YXJhbS0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpYygqcGFyYW0tPnBhaW50aW5nRGF0YSwg
cGFyYW0tPnN0YXJ0WSwgcGFyYW0tPmVuZFkpOworICAgIHBsYXRvZnJtQXBwbHlHZW5lcmljKCpw
YXJhbS0+cGFpbnRpbmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7CiB9CiAKLXZv
aWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhKQorc3RhdGljIHZvaWQgcGxhdG9mcm1BcHBseShjb25zdCBQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSkKIHsKICAgICAvLyBFbXBpcmljYWxseSwgcnVudGltZSBpcyBhcHByb3hpbWF0
ZWx5IGxpbmVhciBvdmVyIHJlYXNvbmFibGUga2VybmVsIHNpemVzIHdpdGggYSBzbG9wZSBvZiBh
Ym91dCAwLjY1LgogICAgIGZsb2F0IGtlcm5lbEZhY3RvciA9IHNxcnQocGFpbnRpbmdEYXRhLnJh
ZGl1c1ggKiBwYWludGluZ0RhdGEucmFkaXVzWSkgKiAwLjY1OwpAQCAtMjA0LDcgKzIwMyw3IEBA
IHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhKQogICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBwYWludGluZ0RhdGEuaGVp
Z2h0IC8gODsKICAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5z
aWduZWQ+KChwYWludGluZ0RhdGEud2lkdGggKiBwYWludGluZ0RhdGEuaGVpZ2h0ICoga2VybmVs
RmFjdG9yKSAvIG1pbmltYWxBcmVhLCBtYXhOdW1UaHJlYWRzKTsKICAgICBpZiAob3B0aW1hbFRo
cmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgUGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlQYXJh
bWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBs
eVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAgIFBhcmFsbGVsSm9iczxQbGF0
Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZwbGF0b2ZybUFwcGx5V29ya2VyLCBv
cHRpbWFsVGhyZWFkTnVtYmVyKTsKICAgICAgICAgYXV0byBudW1PZlRocmVhZHMgPSBwYXJhbGxl
bEpvYnMubnVtYmVyT2ZKb2JzKCk7CiAgICAgICAgIGlmIChudW1PZlRocmVhZHMgPiAxKSB7CiAg
ICAgICAgICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gImpvYlNpemUiLXNpemVkIGpvYnMgYnV0
IHRoZXJlIGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQpA
QCAtMjE0LDcgKzIxMyw2IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0
IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogICAgICAgICAgICAgaW50IGN1cnJlbnRZID0g
MDsKICAgICAgICAgICAgIGZvciAoaW50IGpvYiA9IG51bU9mVGhyZWFkcyAtIDE7IGpvYiA+PSAw
OyAtLWpvYikgewogICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJh
bSA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBwYXJhbS5m
aWx0ZXIgPSB0aGlzOwogICAgICAgICAgICAgICAgIHBhcmFtLnN0YXJ0WSA9IGN1cnJlbnRZOwog
ICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBqb2JTaXpl
ICsgMSA6IGpvYlNpemU7CiAgICAgICAgICAgICAgICAgcGFyYW0uZW5kWSA9IGN1cnJlbnRZOwpA
QCAtMjI2LDE5ICsyMjQsMTYgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHkoY29u
c3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNp
bmdsZSB0aHJlYWQgbW9kZWwKICAgICB9CiAKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhwYWlu
dGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgIHBsYXRvZnJtQXBwbHlHZW5l
cmljKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRpbmdEYXRhLmhlaWdodCk7CiB9CiAKLWJvb2wgRkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYgZHN0
UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50IHJh
ZGl1c1kpCitzdGF0aWMgYm9vbCBpc0RlZ2VuZXJhdGUoaW50IHJhZGl1c1gsIGludCByYWRpdXNZ
KQogewotICAgIGlmIChyYWRpdXNYIDwgMCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYg
IXJhZGl1c1kpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
LSAgICAgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRzdFBpeGVsQXJyYXksIGltYWdl
UmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8
IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKTsKIH0KIAorfSAvLyBuYW1lc3BhY2UgRkVNb3Jw
aG9sb2d5U29mdHdhcmUKKwogYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7CkBAIC0yNTQsOCArMjQ5LDEwIEBAIGJvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgSW50UmVjdCBlZmZlY3RE
cmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7CiAKICAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZs
b2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVn
ZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXMu
d2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKKyAgICBpZiAoRkVNb3JwaG9sb2d5U29mdHdhcmU6
OmlzRGVnZW5lcmF0ZShyYWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkgeworICAgICAg
ICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZl
Y3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQogCiAgICAgYXV0byBzb3VyY2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxp
ZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAg
aWYgKCFzb3VyY2VQaXhlbEFycmF5KQpAQCAtMjY1LDE4ICsyNjIsMjIgQEAgYm9vbCBGRU1vcnBo
b2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBp
bnQgcmFkaXVzWCA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAxLCByYWRp
dXMud2lkdGgoKSk7CiAgICAgaW50IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVj
dC5oZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQoKSk7CiAKLSAgICBpZiAocGxhdGZvcm1BcHBs
eURlZ2VuZXJhdGUoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFk
aXVzWCwgcmFkaXVzWSkpCisgICAgaWYgKEZFTW9ycGhvbG9neVNvZnR3YXJlOjppc0RlZ2VuZXJh
dGUocmFkaXVzWCwgcmFkaXVzWSkpIHsKKyAgICAgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBGRU1v
cnBob2xvZ3lTb2Z0d2FyZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKyAgICBwYWludGlu
Z0RhdGEudHlwZSA9IG1fdHlwZTsKKyAgICBwYWludGluZ0RhdGEucmFkaXVzWCA9IGNlaWxmKHJh
ZGl1c1gpOworICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0gY2VpbGYocmFkaXVzWSk7CiAgICAg
Ci0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKICAgICBwYWludGluZ0RhdGEuc3JjUGl4
ZWxBcnJheSA9IHNvdXJjZVBpeGVsQXJyYXkuZ2V0KCk7CiAgICAgcGFpbnRpbmdEYXRhLmRzdFBp
eGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OwogICAgIHBhaW50aW5nRGF0YS53aWR0
aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkpOwogICAgIHBhaW50aW5nRGF0YS5o
ZWlnaHQgPSBjZWlsZihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSk7Ci0gICAgcGFpbnRpbmdE
YXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYKTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9
IGNlaWxmKHJhZGl1c1kpOwogCi0gICAgcGxhdGZvcm1BcHBseShwYWludGluZ0RhdGEpOworICAg
IEZFTW9ycGhvbG9neVNvZnR3YXJlOjpwbGF0b2ZybUFwcGx5KHBhaW50aW5nRGF0YSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCmluZGV4IDI4OGVlYTBlMWUyMTNjZTMyZDgx
NzMwYjYxOTlkZDVlMDQxYzk2M2QuLjU4OTUwMmE2ZjViYzZkMjBiOGUxOWVhOWZmNTdjYTc4OTI1
ZDgyNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNb3JwaG9sb2d5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuaApAQCAtNTMsMjkgKzUzLDYgQEAgcHJpdmF0ZToKIAogICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYm9vbCBwbGF0Zm9y
bUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgY29uc3Qg
SW50UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpOwotCi0gICAgc3Ry
dWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5KiBzcmNQ
aXhlbEFycmF5OwotICAgICAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheTsKLSAg
ICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0OwotICAgICAgICBpbnQgcmFkaXVz
WDsKLSAgICAgICAgaW50IHJhZGl1c1k7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIEZFTW9ycGhvbG9neSogZmlsdGVyOwotICAgICAgICBp
bnQgc3RhcnRZOwotICAgICAgICBpbnQgZW5kWTsKLSAgICAgICAgY29uc3QgUGFpbnRpbmdEYXRh
KiBwYWludGluZ0RhdGE7Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlX
b3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqKTsKLQotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eShjb25zdCBQYWludGluZ0RhdGEmKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKGNv
bnN0IFBhaW50aW5nRGF0YSYsIGludCBzdGFydFksIGludCBlbmRZKTsKLQogICAgIE1vcnBob2xv
Z3lPcGVyYXRvclR5cGUgbV90eXBlOwogICAgIGZsb2F0IG1fcmFkaXVzWDsKICAgICBmbG9hdCBt
X3JhZGl1c1k7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKaW5kZXggNjA3YTcxYzRjZjM1
ZjU2ZDRhMjJmY2Y1MDI2ZjE0MmI1MTdlNzBkNy4uYWM2MmIxMjA3MDdkYzZkOWY0NTBiYjVjYjkx
Mzc5MDA5MDRlYTk2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcApAQCAtMzMsNyAr
MzMsNyBAQCBSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0
ZShjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZgogfQogCiBGRVNwZWN1bGFyTGlnaHRpbmc6
OkZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3Vy
ZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxM
aWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoU3BlY3VsYXJMaWdo
dGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBz
cGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdU
Rk1vdmUobGlnaHRTb3VyY2UpLCBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFU3BlY3VsYXJMaWdodGlu
ZykKKyAgICA6IEZFTGlnaHRpbmcoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRp
bmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwgc3Bl
Y3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZN
b3ZlKGxpZ2h0U291cmNlKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IGRhNDc0ZjQx
MDVmMTY0ZTRkZGVlNDhiNmNhYjlkYjhmODNhMWE3ZmUuLjU1NzcxYWQ4OTg0MWIzNWY3OTI1NTBm
N2Q1ZDcxNGZmNTgxNTFhZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTM0LDIwICszNCw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLyoKLSAgICBQcm9kdWNlcyByZXN1bHRzIGluIHRo
ZSByYW5nZSBbMSwgMioqMzEgLSAyXS4gQWxnb3JpdGhtIGlzOgotICAgIHIgPSAoYSAqIHIpIG1v
ZCBtIHdoZXJlIGEgPSByYW5kQW1wbGl0dWRlID0gMTY4MDcgYW5kCi0gICAgbSA9IHJhbmRNYXhp
bXVtID0gMioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCi0gICAgU2VlIFtQYXJrICYg
TWlsbGVyXSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKLSAgICBUbyB0
ZXN0OiB0aGUgYWxnb3JpdGhtIHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2NQot
ICAgIGFzIHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVk
IGlzIDEuCi0qLwotc3RhdGljIGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsKLXN0YXRp
YyBjb25zdCBsb25nIHNfcmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKiozMSAtIDEKLXN0
YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7IHByaW1pdGl2
ZSByb290IG9mIG0KLXN0YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEK
LXN0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCi0KIFJlZjxGRVR1cmJ1
bGVuY2U+IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJh
c2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0
IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVU
dXJidWxlbmNlKHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZl
cywgc2VlZCwgc3RpdGNoVGlsZXMpKTsKQEAgLTExMiwxOCArOTgsNzggQEAgYm9vbCBGRVR1cmJ1
bGVuY2U6OnNldFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNoKQogICAgIHJldHVybiB0cnVlOwogfQog
CituYW1lc3BhY2UgRkVUdXJidWxlbmNlU29mdHdhcmUgeworCiAvLyBUaGUgdHVyYnVsZW5jZSBj
YWxjdWxhdGlvbiBjb2RlIGlzIGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVhcnMgaW4g
dGhlIFNWRyAxLjEgc3BlY2lmaWNhdGlvbjoKIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzEx
L2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2UKIAotLy8gQ29tcHV0ZSBwc2V1ZG8gcmFuZG9tIG51
bWJlci4KLWlubGluZSBsb25nIEZFVHVyYnVsZW5jZTo6UGFpbnRpbmdEYXRhOjpyYW5kb20oKQot
ewotICAgIGxvbmcgcmVzdWx0ID0gc19yYW5kQW1wbGl0dWRlICogKHNlZWQgJSBzX3JhbmRRKSAt
IHNfcmFuZFIgKiAoc2VlZCAvIHNfcmFuZFEpOwotICAgIGlmIChyZXN1bHQgPD0gMCkKLSAgICAg
ICAgcmVzdWx0ICs9IHNfcmFuZE1heGltdW07Ci0gICAgc2VlZCA9IHJlc3VsdDsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQorLyoKKyAgICBQcm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5nZSBbMSwg
MioqMzEgLSAyXS4gQWxnb3JpdGhtIGlzOgorICAgIHIgPSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEg
PSByYW5kQW1wbGl0dWRlID0gMTY4MDcgYW5kCisgICAgbSA9IHJhbmRNYXhpbXVtID0gMioqMzEg
LSAxID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCisgICAgU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FD
TSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKKyAgICBUbyB0ZXN0OiB0aGUgYWxn
b3JpdGhtIHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2NQorICAgIGFzIHRoZSAx
MCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCisqLwor
c3RhdGljIGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsKK3N0YXRpYyBjb25zdCBsb25n
IHNfcmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKiozMSAtIDEKK3N0YXRpYyBjb25zdCBp
bnQgc19yYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290IG9mIG0K
K3N0YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKK3N0YXRpYyBjb25z
dCBpbnQgc19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCisKK3N0YXRpYyBjb25zdCBpbnQgc19ibG9j
a1NpemUgPSAyNTY7CitzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9ja1NpemUg
LSAxOworCitzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKKyAgICBQYWludGluZ0RhdGEoVHVyYnVsZW5j
ZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBp
bnQgbnVtT2N0YXZlcywgbG9uZyBzZWVkLCBib29sIHN0aXRjaFRpbGVzLCBjb25zdCBJbnRTaXpl
JiBwYWludGluZ1NpemUpCisgICAgICAgIDogdHlwZSh0eXBlKQorICAgICAgICAsIGJhc2VGcmVx
dWVuY3lYKGJhc2VGcmVxdWVuY3lYKQorICAgICAgICAsIGJhc2VGcmVxdWVuY3lZKGJhc2VGcmVx
dWVuY3lZKQorICAgICAgICAsIG51bU9jdGF2ZXMobnVtT2N0YXZlcykKKyAgICAgICAgLCBzZWVk
KHNlZWQpCisgICAgICAgICwgc3RpdGNoVGlsZXMoc3RpdGNoVGlsZXMpCisgICAgICAgICwgcGFp
bnRpbmdTaXplKHBhaW50aW5nU2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gQ29tcHV0ZSBw
c2V1ZG8gcmFuZG9tIG51bWJlci4KKyAgICBpbmxpbmUgbG9uZyByYW5kb20oKQorICAgIHsKKyAg
ICAgICAgbG9uZyByZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUgKiAoc2VlZCAlIHNfcmFuZFEpIC0g
c19yYW5kUiAqIChzZWVkIC8gc19yYW5kUSk7CisgICAgICAgIGlmIChyZXN1bHQgPD0gMCkKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzX3JhbmRNYXhpbXVtOworICAgICAgICBzZWVkID0gcmVzdWx0
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIFR1cmJ1bGVuY2VUeXBlIHR5
cGU7CisgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVg7CisgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVk7
CisgICAgaW50IG51bU9jdGF2ZXM7CisgICAgbG9uZyBzZWVkOworICAgIGJvb2wgc3RpdGNoVGls
ZXM7CisgICAgSW50U2l6ZSBwYWludGluZ1NpemU7CisKKyAgICBpbnQgbGF0dGljZVNlbGVjdG9y
WzIgKiBzX2Jsb2NrU2l6ZSArIDJdOworICAgIGZsb2F0IGdyYWRpZW50WzRdWzIgKiBzX2Jsb2Nr
U2l6ZSArIDJdWzJdOworfTsKKworc3RydWN0IFN0aXRjaERhdGEgeworICAgIGludCB3aWR0aCB7
IDAgfTsgLy8gSG93IG11Y2ggdG8gc3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgorICAg
IGludCB3cmFwWCB7IDAgfTsgLy8gTWluaW11bSB2YWx1ZSB0byB3cmFwLgorICAgIGludCBoZWln
aHQgeyAwIH07CisgICAgaW50IHdyYXBZIHsgMCB9OworfTsKKworc3RydWN0IFBsYXRmb3JtQXBw
bHlQYXJhbWV0ZXJzIHsKKyAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbjsKKyAgICBGbG9hdFNpemUg
ZmlsdGVyU2NhbGU7CisgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7CisgICAgUGFp
bnRpbmdEYXRhKiBwYWludGluZ0RhdGE7CisgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOworICAg
IGludCBzdGFydFk7CisgICAgaW50IGVuZFk7Cit9OwogCiBpbmxpbmUgZmxvYXQgc21vb3RoQ3Vy
dmUoZmxvYXQgdCkKIHsKQEAgLTEzNSw5ICsxODEsOSBAQCBpbmxpbmUgZmxvYXQgbGluZWFySW50
ZXJwb2xhdGlvbihmbG9hdCB0LCBmbG9hdCBhLCBmbG9hdCBiKQogICAgIHJldHVybiBhICsgdCAq
IChiIC0gYSk7CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjppbml0UGFpbnQoUGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEpCitzdGF0aWMgUGFpbnRpbmdEYXRhIGluaXRQYWludGluZ0RhdGEoVHVy
YnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lZLCBpbnQgbnVtT2N0YXZlcywgbG9uZyBzZWVkLCBib29sIHN0aXRjaFRpbGVzLCBjb25zdCBJ
bnRTaXplJiBwYWludGluZ1NpemUpCiB7Ci0gICAgZmxvYXQgbm9ybWFsaXphdGlvbkZhY3RvcjsK
KyAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNl
RnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMsIHBhaW50aW5nU2l6ZSk7
CiAKICAgICAvLyBUaGUgc2VlZCB2YWx1ZSBjbGFtcCB0byB0aGUgcmFuZ2UgWzEsIHNfcmFuZE1h
eGltdW0gLSAxXS4KICAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPD0gMCkKQEAgLTE1NCw3ICsy
MDAsNyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhKQogICAgICAgICAgICAgICAgIGdyYWRpZW50WzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6
ZSkgLyBzX2Jsb2NrU2l6ZTsKICAgICAgICAgICAgICAgICBncmFkaWVudFsxXSA9IHN0YXRpY19j
YXN0PGZsb2F0PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0g
c19ibG9ja1NpemUpIC8gc19ibG9ja1NpemU7CiAgICAgICAgICAgICB9IHdoaWxlICghZ3JhZGll
bnRbMF0gJiYgIWdyYWRpZW50WzFdKTsKLSAgICAgICAgICAgIG5vcm1hbGl6YXRpb25GYWN0b3Ig
PSBzdGQ6Omh5cG90KGdyYWRpZW50WzBdLCBncmFkaWVudFsxXSk7CisgICAgICAgICAgICBmbG9h
dCBub3JtYWxpemF0aW9uRmFjdG9yID0gc3RkOjpoeXBvdChncmFkaWVudFswXSwgZ3JhZGllbnRb
MV0pOwogICAgICAgICAgICAgZ3JhZGllbnRbMF0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKICAg
ICAgICAgICAgIGdyYWRpZW50WzFdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7CiAgICAgICAgIH0K
QEAgLTE3NiwxMSArMjIyLDEzIEBAIHZvaWQgRkVUdXJidWxlbmNlOjppbml0UGFpbnQoUGFpbnRp
bmdEYXRhJiBwYWludGluZ0RhdGEpCiAgICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRb
Y2hhbm5lbF1bc19ibG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFu
bmVsXVtpXVsxXTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiBwYWludGluZ0RhdGE7
CiB9CiAKLUZFVHVyYnVsZW5jZTo6U3RpdGNoRGF0YSBGRVR1cmJ1bGVuY2U6OmNvbXB1dGVTdGl0
Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFz
ZUZyZXF1ZW5jeVkpIGNvbnN0CitzdGF0aWMgU3RpdGNoRGF0YSBjb21wdXRlU3RpdGNoaW5nKElu
dFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVu
Y3lZLCBib29sIHN0aXRjaFRpbGVzKQogewotICAgIGlmICghbV9zdGl0Y2hUaWxlcykKKyAgICBp
ZiAoIXN0aXRjaFRpbGVzKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgZmxvYXQgdGlsZVdp
ZHRoID0gdGlsZVNpemUud2lkdGgoKTsKQEAgLTIxNyw3ICsyNjUsNyBAQCBGRVR1cmJ1bGVuY2U6
OlN0aXRjaERhdGEgRkVUdXJidWxlbmNlOjpjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNp
emUsIGZsb2F0JgogfQogCiAvLyBUaGlzIGlzIHRha2VuIDE6MSBmcm9tIFNWRyBzcGVjOiBodHRw
Oi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxlbWVudC4K
LUNvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxlbmNlOjpub2lzZTJEKGNvbnN0IFBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhLCBj
b25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikgY29uc3QKK3N0YXRpYyBDb2xvckNvbXBvbmVu
dHM8ZmxvYXQsIDQ+IG5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNv
bnN0IFN0aXRjaERhdGEmIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9y
KQogewogICAgIHN0cnVjdCBOb2lzZVBvc2l0aW9uIHsKICAgICAgICAgaW50IGluZGV4OyAvLyBi
eDAsIGJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgpAQCAtMjU0LDcgKzMwMiw3IEBAIENvbG9yQ29tcG9u
ZW50czxmbG9hdCwgND4gRkVUdXJidWxlbmNlOjpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhCiAgICAgTm9pc2VQb3NpdGlvbiBub2lzZVkobm9pc2VWZWN0b3IueSgpKTsK
IAogICAgIC8vIElmIHN0aXRjaGluZywgYWRqdXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5
LgotICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7CisgICAgaWYgKHBhaW50aW5nRGF0YS5zdGl0Y2hU
aWxlcykgewogICAgICAgICBub2lzZVguc3RpdGNoKHN0aXRjaERhdGEud2lkdGgsIHN0aXRjaERh
dGEud3JhcFgpOwogICAgICAgICBub2lzZVkuc3RpdGNoKHN0aXRjaERhdGEuaGVpZ2h0LCBzdGl0
Y2hEYXRhLndyYXBZKTsKICAgICB9CkBAIC0zMzMsMTMgKzM4MSwxMyBAQCBzdGF0aWMgaW5saW5l
IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNv
bnN0IENvbG9yQwogICAgIH07CiB9CiAKLUNvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1
cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KSBjb25zdAorc3RhdGljIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjYWxj
dWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsK
ICAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdDsK
ICAgICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50LngoKSAqIHBhaW50aW5nRGF0YS5iYXNl
RnJlcXVlbmN5WCwgcG9pbnQueSgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lZKTsKICAg
ICBmbG9hdCByYXRpbyA9IDE7Ci0gICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgbV9u
dW1PY3RhdmVzOyArK29jdGF2ZSkgewotICAgICAgICBpZiAobV90eXBlID09IFR1cmJ1bGVuY2VU
eXBlOjpGcmFjdGFsTm9pc2UpCisgICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgcGFp
bnRpbmdEYXRhLm51bU9jdGF2ZXM7ICsrb2N0YXZlKSB7CisgICAgICAgIGlmIChwYWludGluZ0Rh
dGEudHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQogICAgICAgICAgICAgdHVy
YnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRh
LCBub2lzZVZlY3RvcikgLyByYXRpbzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdHVyYnVs
ZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBu
b2lzZVZlY3RvcikuYWJzKCkgLyByYXRpbzsKQEAgLTM0OCw3ICszOTYsNyBAQCBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVG
b3JQb2ludChjb25zdAogICAgICAgICBub2lzZVZlY3Rvci5zZXRZKG5vaXNlVmVjdG9yLnkoKSAq
IDIpOwogICAgICAgICByYXRpbyAqPSAyOwogCi0gICAgICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7
CisgICAgICAgIGlmIChwYWludGluZ0RhdGEuc3RpdGNoVGlsZXMpIHsKICAgICAgICAgICAgIC8v
IFVwZGF0ZSBzdGl0Y2ggdmFsdWVzLiBTdWJ0cmFjdGluZyBzX3Blcmxpbk5vaXNlIGJlZm9yZSB0
aGUgbXVsdGlwbGljYXRpb24gYW5kCiAgICAgICAgICAgICAvLyBhZGRpbmcgaXQgYWZ0ZXJ3YXJk
IHNpbXBsaWZpZXMgdG8gc3VidHJhY3RpbmcgaXQgb25jZS4KICAgICAgICAgICAgIHN0aXRjaERh
dGEud2lkdGggKj0gMjsKQEAgLTM2MCwyMCArNDA4LDE5IEBAIENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNv
bnN0CiAKICAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0IGNvbWVz
IGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1KSAvIDIgYnkgZnJh
Y3RhbE5vaXNlCiAgICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpIGJ5
IHR1cmJ1bGVuY2UuCi0gICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5v
aXNlKQorICAgIGlmIChwYWludGluZ0RhdGEudHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3Rh
bE5vaXNlKQogICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJidWxlbmNlRnVu
Y3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKIAogICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JD
b21wb25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7CiB9CiAKLXZvaWQgRkVUdXJidWxl
bmNlOjpmaWxsUmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBVaW50OENsYW1wZWRBcnJheSYg
cGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEg
c3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0CitzdGF0aWMgdm9pZCBwbGF0
b2ZybUFwcGx5R2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0
U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkKIHsKICAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7CiAKLSAgICBJbnRS
ZWN0IGZpbHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7CiAgICAgRmxvYXRQb2ludCBw
b2ludCgwLCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZKTsKICAgICBpbnQgaW5kZXhPZlBpeGVs
Q2hhbm5lbCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAyKTsKLSAgICBGbG9h
dFNpemUgaW52ZXJzZVNjYWxlID0geyAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkud2lkdGgoKSwg
MSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH07CisgICAgRmxvYXRTaXplIGludmVy
c2VTY2FsZSA9IHsgMSAvIGZpbHRlclNjYWxlLndpZHRoKCksIDEgLyBmaWx0ZXJTY2FsZS5oZWln
aHQoKSB9OwogCiAgICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgewogICAg
ICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEpOwpAQCAtMzg4LDQ1ICs0MzUsMjMgQEAgdm9p
ZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oY29uc3QgRmlsdGVyJiBmaWx0ZXIsIFVpbnQ4Q2xh
bXBlZEFycmF5JiBwaXhlbEFycmEKICAgICB9CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxs
UmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQorc3RhdGljIHZv
aWQgcGxhdG9mcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVy
cykKIHsKLSAgICBwYXJhbWV0ZXJzLT5lZmZlY3QtPmZpbGxSZWdpb24oKnBhcmFtZXRlcnMtPmZp
bHRlciwgKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEs
IHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+
ZW5kWSk7CisgICAgcGxhdG9mcm1BcHBseUdlbmVyaWMocGFyYW1ldGVycy0+ZmlsdGVyUmVnaW9u
LCBwYXJhbWV0ZXJzLT5maWx0ZXJTY2FsZSwgKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJh
bWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMt
PnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7CiB9CiAKLWJvb2wgRkVUdXJidWxlbmNlOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitzdGF0aWMgdm9pZCBwbGF0
b2ZybUFwcGx5KGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBm
aWx0ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIFN0aXRjaERhdGEmIHN0
aXRjaERhdGEsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogewotICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAg
IGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+
ZGF0YSgpOworICAgIGludCBoZWlnaHQgPSBmaWx0ZXJSZWdpb24uaGVpZ2h0KCk7CisgICAgdW5z
aWduZWQgYXJlYSA9IGZpbHRlclJlZ2lvbi5hcmVhKCk7CiAKLSAgICBJbnRTaXplIHJlc3VsdFNp
emUoYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOworICAgIHN0YXRpYyBjb25zdCBpbnQgc19t
aW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1p
dCBmb3IgcGFyYWxsZWwgam9icy4KIAotICAgIGlmIChyZXN1bHRTaXplLmlzRW1wdHkoKSkgewot
ICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgSW50U2l6ZSB0aWxlU2l6ZSA9IHJvdW5kZWRJbnRTaXplKGZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7Ci0KLSAgICBmbG9hdCBiYXNlRnJlcXVl
bmN5WCA9IG1fYmFzZUZyZXF1ZW5jeVg7Ci0gICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVkgPSBtX2Jh
c2VGcmVxdWVuY3lZOwotICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YSA9IGNvbXB1dGVTdGl0Y2hp
bmcodGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7Ci0KLSAgICBQYWlu
dGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgdGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBi
YXNlRnJlcXVlbmN5WSk7Ci0gICAgaW5pdFBhaW50KHBhaW50aW5nRGF0YSk7Ci0KLSAgICBhdXRv
IGFyZWEgPSByZXN1bHRTaXplLmFyZWEoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBoZWlnaHQgPSByZXN1bHRTaXplLmhl
aWdodCgpOwotCi0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IGhlaWdodCAvIDg7CisgICAg
dW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IGZpbHRlclJlZ2lvbi5oZWlnaHQoKSAvIDg7CiAgICAg
dW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPihhcmVhIC8g
c19taW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7CisKICAgICBpZiAob3B0aW1h
bFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgUGFyYWxsZWxKb2JzPEZpbGxSZWdpb25QYXJh
bWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldv
cmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAgIFBhcmFsbGVsSm9iczxQbGF0Zm9y
bUFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZwbGF0b2ZybUFwcGx5V29ya2VyLCBvcHRp
bWFsVGhyZWFkTnVtYmVyKTsKIAogICAgICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkK
ICAgICAgICAgYXV0byBudW1Kb2JzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwpAQCAt
NDM3LDEwICs0NjIsMTAgQEAgYm9vbCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0WSA9IDA7
CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2JzOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxK
b2JzLnBhcmFtZXRlcihpKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gJmZpbHRl
cjsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZWZmZWN0ID0gdGhpczsKLSAgICAgICAgICAgICAg
ICBwYXJhbXMucGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CisgICAgICAgICAg
ICAgICAgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJh
bWV0ZXIoaSk7CisgICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlclJlZ2lvbiA9IGZpbHRlclJl
Z2lvbjsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyU2NhbGUgPSBmaWx0ZXJTY2FsZTsK
KyAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJheSA9ICZwaXhlbEFycmF5OwogICAgICAg
ICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSAmcGFpbnRpbmdEYXRhOwogICAgICAgICAg
ICAgICAgIHBhcmFtcy5zdGl0Y2hEYXRhID0gc3RpdGNoRGF0YTsKICAgICAgICAgICAgICAgICBw
YXJhbXMuc3RhcnRZID0gc3RhcnRZOwpAQCAtNDUxLDEyICs0NzYsMzggQEAgYm9vbCBGRVR1cmJ1
bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgcGFyYWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQog
CiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8g
cm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAg
ICBmaWxsUmVnaW9uKGZpbHRlciwgZGVzdGluYXRpb25QaXhlbEFycmF5LCBwYWludGluZ0RhdGEs
IHN0aXRjaERhdGEsIDAsIGhlaWdodCk7CisgICAgcGxhdG9mcm1BcHBseUdlbmVyaWMoZmlsdGVy
UmVnaW9uLCBmaWx0ZXJTY2FsZSwgcGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRh
LCAwLCBoZWlnaHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZQor
Citib29sIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQoreworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVVbm11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5
ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgSW50U2l6ZSByZXN1bHRT
aXplKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKKyAgICBpZiAocmVzdWx0U2l6ZS5hcmVh
KCkuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAocmVz
dWx0U2l6ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5Lnplcm9G
aWxsKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGF1dG8gdGlsZVNpemUg
PSByb3VuZGVkSW50U2l6ZShmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5zaXplKCkpOworICAg
IGF1dG8gc3RpdGNoRGF0YSA9IEZFVHVyYnVsZW5jZVNvZnR3YXJlOjpjb21wdXRlU3RpdGNoaW5n
KHRpbGVTaXplLCBtX2Jhc2VGcmVxdWVuY3lYLCBtX2Jhc2VGcmVxdWVuY3lZLCBtX3N0aXRjaFRp
bGVzKTsKKyAgICBhdXRvIHBhaW50aW5nRGF0YSA9IEZFVHVyYnVsZW5jZVNvZnR3YXJlOjppbml0
UGFpbnRpbmdEYXRhKG1fdHlwZSwgbV9iYXNlRnJlcXVlbmN5WCwgbV9iYXNlRnJlcXVlbmN5WSwg
bV9udW1PY3RhdmVzLCBtX3NlZWQsIG1fc3RpdGNoVGlsZXMsIHRpbGVTaXplKTsKKworICAgIEZF
VHVyYnVsZW5jZVNvZnR3YXJlOjpwbGF0b2ZybUFwcGx5KGFic29sdXRlUGFpbnRSZWN0KCksIGZp
bHRlci5maWx0ZXJTY2FsZSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIHN0aXRjaERhdGEsIHBh
aW50aW5nRGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmluZGV4IGU2
OThiMzEzZjE4ODYyNTAwMzRiMDY1OTBkMWUyYjNlZDZkYzM5ODguLjdjNDdjNzg3NDliODU2ZmM5
ZjkxYWY4NGM2MTM0Y2Y0N2RmMDZlMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNTgsNjQgKzU4LDEz
IEBAIHB1YmxpYzoKICAgICBib29sIHNldFN0aXRjaFRpbGVzKGJvb2wpOwogCiBwcml2YXRlOgot
ICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7Ci0gICAgc3RhdGljIGNvbnN0
IGludCBzX2Jsb2NrTWFzayA9IHNfYmxvY2tTaXplIC0gMTsKLQotICAgIHN0YXRpYyBjb25zdCBp
bnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0
YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icy4KLQotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewot
ICAgICAgICBQYWludGluZ0RhdGEobG9uZyBwYWludGluZ1NlZWQsIGNvbnN0IEludFNpemUmIHBh
aW50aW5nU2l6ZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZKQot
ICAgICAgICAgICAgOiBzZWVkKHBhaW50aW5nU2VlZCkKLSAgICAgICAgICAgICwgZmlsdGVyU2l6
ZShwYWludGluZ1NpemUpCi0gICAgICAgICAgICAsIGJhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVu
Y3lYKQotICAgICAgICAgICAgLCBiYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKLSAgICAg
ICAgewotICAgICAgICB9Ci0KLSAgICAgICAgbG9uZyBzZWVkOwotICAgICAgICBpbnQgbGF0dGlj
ZVNlbGVjdG9yWzIgKiBzX2Jsb2NrU2l6ZSArIDJdOwotICAgICAgICBmbG9hdCBncmFkaWVudFs0
XVsyICogc19ibG9ja1NpemUgKyAyXVsyXTsKLSAgICAgICAgSW50U2l6ZSBmaWx0ZXJTaXplOwot
ICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WDsKLSAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5j
eVk7Ci0KLSAgICAgICAgaW5saW5lIGxvbmcgcmFuZG9tKCk7Ci0gICAgfTsKLQotICAgIHN0cnVj
dCBTdGl0Y2hEYXRhIHsKLSAgICAgICAgU3RpdGNoRGF0YSgpID0gZGVmYXVsdDsKLQotICAgICAg
ICBpbnQgd2lkdGggeyAwIH07IC8vIEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0
aXRjaGluZy4KLSAgICAgICAgaW50IHdyYXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdy
YXAuCi0gICAgICAgIGludCBoZWlnaHQgeyAwIH07Ci0gICAgICAgIGludCB3cmFwWSB7IDAgfTsK
LSAgICB9OwotCi0gICAgc3RydWN0IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgY29u
c3QgRmlsdGVyKiBmaWx0ZXI7Ci0gICAgICAgIEZFVHVyYnVsZW5jZSogZWZmZWN0OwotICAgICAg
ICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheTsKLSAgICAgICAgUGFpbnRpbmdEYXRhKiBw
YWludGluZ0RhdGE7Ci0gICAgICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKLSAgICAgICAgaW50
IHN0YXJ0WTsKLSAgICAgICAgaW50IGVuZFk7Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIGZp
bGxSZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMqKTsKLQogICAgIEZFVHVyYnVsZW5j
ZShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKICAg
ICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRl
IHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkp
KTsgfQotICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJy
aWRlOwotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9p
ZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRhJik7Ci0gICAgU3RpdGNoRGF0YSBjb21wdXRlU3RpdGNo
aW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VG
cmVxdWVuY3lZKSBjb25zdDsKLSAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNlMkQo
Y29uc3QgUGFpbnRpbmdEYXRhJiwgY29uc3QgU3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQm
KSBjb25zdDsKLSAgICBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY2FsY3VsYXRlVHVyYnVs
ZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgZmlsbFJlZ2lvbihjb25zdCBGaWx0ZXImLCBV
aW50OENsYW1wZWRBcnJheSYsIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBz
dGFydFksIGludCBlbmRZKSBjb25zdDsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3Jr
ZXIodm9pZCopOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgVHVyYnVsZW5jZVR5cGUgbV90eXBlOwogICAgIGZsb2F0IG1fYmFzZUZyZXF1ZW5jeVg7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuaAppbmRleCBjMDc1MjYzMTRmN2U3NzgxMjVlMDA1N2JiMDNiMTFjZjlkMDE3YjVi
Li44MjQ4MjY4Y2RlY2RiZTg4MDY4ZDUyYzFlMDA1NDJiNWJhMWUzZDExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmgKQEAgLTEyOSwxNCArMTI5LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0IGludCkgeyBpbi0+dHJh
bnNmb3JtUmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3BhY2UpOyB9CiAgICAgdm9p
ZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYp
OwogICAgIAotICAgIHN0YXRpYyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdmFsdWVzKQotICAgIHsKLSAgICAgICAgVmVjdG9yPGZsb2F0PiBub3Jt
YWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZXNbaV0g
PSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsKLSAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRW
YWx1ZXM7Ci0gICAgfQotCiBwcm90ZWN0ZWQ6CiAgICAgRmlsdGVyRWZmZWN0KFR5cGUpOwogICAg
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9M
aWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9M
aWdodFNvdXJjZS5oCmluZGV4IDk0ZDE5NTAxMzlkNmQyNDNhODY2MWU1ZWE1NWQyMzVhNzM4OWY1
ZDUuLjhkYjhlNTY1OTdiYWJlYzg2ODYxNjgzZmY4ZTA1ODI4OGM3MTI2ZjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNl
LmgKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIExpZ2h0VHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlOyB9CiAgICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgPSAwOwogCi0gICAgdmlydHVh
bCB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRh
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVm
ZmVjdCYsIFBhaW50aW5nRGF0YSYpIGNvbnN0ID0gMDsKICAgICAvLyB6IGlzIGEgZmxvYXQgbnVt
YmVyLCBzaW5jZSBpdCBpcyB0aGUgYWxwaGEgdmFsdWUgc2NhbGVkIGJ5IGEgdXNlcgogICAgIC8v
IHNwZWNpZmllZCAic3VyZmFjZVNjYWxlIiBjb25zdGFudCwgd2hpY2ggdHlwZSBpcyA8bnVtYmVy
PiBpbiB0aGUgU1ZHIHN0YW5kYXJkLgogICAgIC8vIHggYW5kIHkgYXJlIGluIHRoZSBjb29yZGlu
YXRlcyBvZiB0aGUgRmlsdGVyRWZmZWN0J3MgYnVmZmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5j
cHAKaW5kZXggMWFiNWUxOWUxMWE0ZjM2ZWEyYTQyNmE3NTAzODc5MTI4ZjU0YjQ0Yi4uYzJkODc0
OTNiMjhkZTM4NjEzZTNlMjAyODRmZmUyZmY0MjVmZWUyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3Vy
Y2UuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBQ
b2ludExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmls
dGVyRWZmZWN0LCBQYWludGluZ0RhdGEmKQordm9pZCBQb2ludExpZ2h0U291cmNlOjppbml0UGFp
bnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEm
KSBjb25zdAogewogICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBv
aW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkpOwogICAg
IC8vIFRvIHNjYWxlIFosIG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRp
b24gaW4gdGhlIHggZGlyZWN0aW9uIGJ5IHouCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCmluZGV4IDY3
YTNhMGJkMzlhOGE5Y2MxOTU0MzQ5ODU5NmQ3MTE1ZjRiYjk1YTUuLjQyYzNkYzYxNzg4NTIyZWM3
ODdjYWVlMmFjMzRhOGUzMmY5ZGJkNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCkBAIC0zOSw3
ICszOSw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFkoZmxvYXQpIG92ZXJyaWRlOwogICAgIGJv
b2wgc2V0WihmbG9hdCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29u
c3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgb3ZlcnJpZGU7CisgICAgdm9pZCBpbml0
UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIGNvbnN0IG92
ZXJyaWRlOwogICAgIENvbXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0
YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0IGZpbmFs
OwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNTIsNyArNTIsNyBAQCBwcml2YXRlOgogICAg
IH0KIAogICAgIEZsb2F0UG9pbnQzRCBtX3VzZXJTcGFjZVBvc2l0aW9uOwotICAgIEZsb2F0UG9p
bnQzRCBtX2J1ZmZlclBvc2l0aW9uOworICAgIG11dGFibGUgRmxvYXRQb2ludDNEIG1fYnVmZmVy
UG9zaXRpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJj
ZS5jcHAKaW5kZXggNzE2MDdhYjAwZmY5ZDZhNmQwMTY5MWQ5YmJiODU1M2QxZjM0OGQwMC4uZTdj
N2MwNGVkZWVkODcyZTc5YTIyM2JkYWQ4NmE5MWVkMzNmMDIyYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291
cmNlLmNwcApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBhY2NvcmRp
bmcgdG8gdGhlIFNWRyAxLjEgU0UgbGlnaHQgcmVncmVzc2lvbiB0ZXN0cwogc3RhdGljIGNvbnN0
IGZsb2F0IGFudGlBbGlhc1RyZXNob2xkID0gMC4wMTZmOwogCi12b2lkIFNwb3RMaWdodFNvdXJj
ZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFp
bnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCit2b2lkIFNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50
aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEpIGNvbnN0CiB7CiAgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJF
ZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54
eSgpKSk7CiAgICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2Vy
U3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5o
CmluZGV4IDM1MTUxNjM1MDc3ZWVmMGU3M2MyNmFlNDQyYTVlYTUzNGZkMWYzYmYuLjJlZGQ5MzA5
OWQ5NzI4MmIwNmQ3YzE5ZTc3MjdkNzVkNjQyZTljNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaApA
QCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZs
b2F0KSBvdmVycmlkZTsKICAgICBib29sIHNldExpbWl0aW5nQ29uZUFuZ2xlKGZsb2F0KSBvdmVy
cmlkZTsKIAotICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQ
YWludGluZ0RhdGEmKSBvdmVycmlkZTsKKyAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3Qg
RmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgQ29tcHV0
ZWRMaWdodGluZ0RhdGEgY29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0
YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRleHRT
dHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3Zl
cnJpZGU7CkBAIC02OCw3ICs2OCw3IEBAIHByaXZhdGU6CiAgICAgRmxvYXRQb2ludDNEIG1fdXNl
clNwYWNlUG9zaXRpb247CiAgICAgRmxvYXRQb2ludDNEIG1fdXNlclNwYWNlUG9pbnRzQXQ7CiAK
LSAgICBGbG9hdFBvaW50M0QgbV9idWZmZXJQb3NpdGlvbjsKKyAgICBtdXRhYmxlIEZsb2F0UG9p
bnQzRCBtX2J1ZmZlclBvc2l0aW9uOwogCiAgICAgZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50Owog
ICAgIGZsb2F0IG1fbGltaXRpbmdDb25lQW5nbGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444778</attachid>
            <date>2021-11-18 20:56:08 -0800</date>
            <delta_ts>2021-11-21 23:18:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232832-20211118205607.patch</filename>
            <type>text/plain</type>
            <size>130398</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1OTE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTcxNGQ5N2NiNDk1OTE2
ZjQ5ZDc5YWUwOGIzNjBjZjhiMjM4ODJkYS4uNDViMDRjZjM1ODY5NmFhMmMxOTY5NjlkN2U5MmQz
MDAyZDc3YTc3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2NyBAQAorMjAyMS0xMS0xOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1ha2UgdGhlIHNvZnR3YXJlIGZpbHRlcnMgZnVuY3Rpb25zIHN0YXRpYyBhbmQgcmVtb3ZlIHRo
ZW0gZnJvbSB0aGUgRmlsdGVyRWZmZWN0IGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjgzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgc3RlcCBpcyByZXF1aXJlZCB0byBtb3ZlIHRo
ZSBGaWx0ZXJFZmZlY3Qgc29mdHdhcmUgY29kZSB0byBzZXBhcmF0ZQorICAgICAgICBmaWxlcy4g
U2luY2UgdGhlIEZpbHRlckVmZmVjdCBjYW4gYmUgYXBwbGllZCB3aXRoIHRoZSBhY2NlbGVyYXRl
ZCBDb3JlSW1hZ2UKKyAgICAgICAgb3IgdGhlIHVuYWNjZWxlcmF0ZWQgc29mdHdhcmUgbWV0aG9k
cywgaXQgbWFrZSBzZW5zZSB0byByZW1vdmUgdGhlIHNvZnR3YXJlCisgICAgICAgIGNvZGUgZnJv
bSB0aGUgRmlsdGVyRWZmZWN0IGNsYXNzZXMuCisKKyAgICAgICAgVGhlIHBsYW4gaXMgdG8gaGF2
ZSB0aGUgc29mdHdhcmUgY29kZSBpbiBzZXBhcmF0ZSBjbGFzc2VzL2ZpbGVzLiBCdXQgdGhlCisg
ICAgICAgIGZpcnN0IHN0ZXAgaXMgdG8gcmVtb3ZlIHRoZSBjbGFzcyBtZW1iZXJzIGFuZCBtYWtl
IHRoZW0gc3RhdGljIG1ldGhvZHMuCisgICAgICAgIEFuZCBiZWNhdXNlIHRoZSB1bmlmaWVkIGJ1
aWxkIHN5c3RlbSBjYW4gY2F1c2Ugc3RhdGljIG1ldGhvZCBvciBzdHJ1Y3R1cmUKKyAgICAgICAg
bmFtZXMgdG8gY29sbGlkZSwgd2UgYXJlIGdvaW5nIHRvIHB1dCB0aGlzIGNvZGUgaW5zaWRlIGRp
ZmZlcmVudCBuYW1lc3BhY2VzCisgICAgICAgIGZvciBub3cuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEaXN0YW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzdGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJj
ZS5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRl
Q29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVI
dWVSb3RhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6Om5v
cm1hbGl6ZWRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJl
OjplZmZlY3RBcHBseUFjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRy
aXhTb2Z0d2FyZTo6ZWZmZWN0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4
U29mdHdhcmU6OmFwcGx5UGxhdGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJp
eDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6Om1hdHJpeCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpsdW1pbmFuY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6ZWZmZWN0QXBwbHlBY2NlbGVyYXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpl
ZmZlY3RUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OmNhbGN1
bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNv
bG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAg
ICAgTW92ZSBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoKSBhbmQgY2FsY3VsYXRlSHVlUm90
YXRlQ29tcG9uZW50cygpIGZyb20KKyAgICAgICAgdGhlIGhlYWRlciBmaWxlIHRvIHRoZSBzb3Vy
Y2UgZmlsZS4gTW92ZSBjaG9vc2luZyB0aGUgY2FsY3VsYXRpb24gbW9kZSBmb3IKKyAgICAgICAg
RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCBmcm9tIGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQoKSB0
byBhcHBseVBsYXRmb3JtKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2ZlclNvZnR3YXJlOjpjb21wdXRlSWRlbnRpdHlUYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmU6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlOjpjb21wdXRlRGlzY3Jl
dGVUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmU6
OmNvbXB1dGVMaW5lYXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5z
ZmVyU29mdHdhcmU6OmNvbXB1dGVHYW1tYVRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9uZW50VHJhbnNmZXJTb2Z0d2FyZTo6Y29tcHV0ZUxvb2t1cFRhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlUYWJsZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRl
VGFidWxhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFUYWJsZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlTG9v
a3VwVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuaDoKKyAgICAgICAgSW5zdGVhZCBvZiBjYWxsaW5nIGNvbXB1
dGVMb29rdXBUYWJsZXMoKSB0byBpbml0aWFsaXplIHRoZSBmb3VyIGxvb2t1cAorICAgICAgICB0
YWJsZXMsIGNhbGwgY29tcHV0ZUxvb2t1cFRhYmxlKCkgZm91ciB0aW1lczogb25lIGZvciBlYWNo
IGNvbG9yIGNoYW5uZWwuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlOjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZv
cm1Bcml0aG1ldGljU29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBCeXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFyaXRobWV0aWNTb2Z0d2FyZSk6IERlbGV0ZWQu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlOjpzZXREZXN0
aW5hdGlvblBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdh
cmU6OnNldEludGVyaW9yUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZTo6Z2V0UGl4ZWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZl
TWF0cml4U29mdHdhcmU6OnNldE91dGVyUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29u
dm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpj
bGFtcFJHQkFWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXREZXN0aW5hdGlv
blBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4Ojpm
YXN0U2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0T3V0ZXJQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0SW50ZXJpb3JQaXhlbHMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJp
eC5oOgorICAgICAgICBBZGQgdGhlIG1lbWJlcnMgb2YgRkVDb252b2x2ZU1hdHJpeCB0byBQYWlu
dGluZ0RhdGEuIFJlbW92ZSB0aGUgdGVtcGxhdGUKKyAgICAgICAgZnVuY3Rpb25zIGFuZCB0aGUg
TVNWQyB3YXJuaW5nLiBKdXN0IGlnbm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKToKKyAgICAg
ICAgTm8gbmVlZCB0byBwYXNzIEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZyB3aGVuIGNyZWF0
aW5nIEZFRGlmZnVzZUxpZ2h0aW5nLgorICAgICAgICBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlm
ZnVzZUxpZ2h0aW5nIGlzIGFscmVhZHkgcGFzc2VkIHRvIEZFTGlnaHRpbmcuIAorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oOgorICAgICAg
ICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsSW5kZXggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnlDaGFubmVsSW5kZXggY29uc3QpOgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAgIChXZWJDb3Jl
OjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdh
dXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2xhbXBlZFRvS2Vy
bmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5z
Y2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxj
dWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpjYWxj
dWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1
clNvZnR3YXJlOjprZXJuZWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFu
Qmx1clNvZnR3YXJlOjpib3hCbHVyQWxwaGFPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1
c3NpYW5CbHVyU29mdHdhcmU6OnBsYXRmb3JtQXBwbHlHZW5lcmljKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmU6OnBsYXRmb3JtQXBwbHlXb3JrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZTo6cGxhdGZvcm1BcHBseSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKGdhdXNzaWFuS2VybmVsRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Omtlcm5lbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJveEJsdXJBbHBo
YU9ubHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpzdGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVH
YXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6Cisg
ICAgICAgIEFkZCB0aGUgdHdvIG1lbWJlcnMgJ2lzQWxwaGFJbWFnZScgYW5kICdlZGdlTW9kZScg
dG8gUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
RkVMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkFscGhh
V2luZG93Ojp0b3BMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0
d2FyZTo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZ1NvZnR3YXJlOjpBbHBoYVdpbmRvdzo6Ym90dG9tTGVmdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkFscGhhV2luZG93Ojp0b3AgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpBbHBoYVdpbmRvdzo6Y2VudGVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6QWxwaGFXaW5kb3c6
OmJvdHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkFs
cGhhV2luZG93OjpzZXRUb3ApOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
OjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdT
b2Z0d2FyZTo6QWxwaGFXaW5kb3c6OnNldEJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nU29mdHdhcmU6OkFscGhhV2luZG93OjpzZXRUb3BSaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkFscGhhV2luZG93OjpzZXRSaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkFscGhhV2luZG93OjpzZXRCb3R0b21SaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkFscGhhV2luZG93Ojpz
aGlmdFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkFscGhhV2lu
ZG93OjpzaGlmdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkxpZ2h0
aW5nRGF0YTo6dG9wTGVmdE5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmU6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9ybWFsIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1h
bCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmU6OkxpZ2h0aW5n
RGF0YTo6bGVmdENvbHVtbk5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nU29mdHdhcmU6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1u
Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6TGln
aHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmdTb2Z0d2FyZTo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpMaWdodGluZ0RhdGE6OmJvdHRv
bVJpZ2h0Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2Fy
ZTo6c2V0UGl4ZWxJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdh
cmU6OnNldFBpeGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZTo6cGxh
dGZvcm1BcHBseUdlbmVyaWNQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29m
dHdhcmU6OnBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmdTb2Z0d2FyZTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZ1NvZnR3YXJlOjpwbGF0Zm9ybUFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmdTb2Z0d2FyZTo6ZHJhd0xpZ2h0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcExlZnROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRh
Ojp0b3BSaWdodE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1h
bCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGlu
Z0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1hbCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRv
bVJvd05vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5n
OjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldFBpeGVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5
R2VuZXJpYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9y
bUFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdo
dGluZyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6dG9w
TGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBo
YVdpbmRvdzo6bGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjpBbHBoYVdpbmRvdzo6Ym90dG9tTGVmdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6dG9wIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpjZW50ZXIgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmJvdHRv
bSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdp
bmRvdzo6c2V0VG9wKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFs
cGhhV2luZG93OjpzZXRDZW50ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6QWxwaGFXaW5kb3c6OnNldEJvdHRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0VG9wUmlnaHQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFJpZ2h0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRCb3R0b21SaWdo
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6
c2hpZnRSb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFX
aW5kb3c6OnNoaWZ0KTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aHJlZSBzdHJ1Y3R1cmVzIGZy
b20gdGhlIGhlYWRlciB0byB0aGUgc291cmNlLiBNb3ZlIGZpbGluZyB0aGUKKyAgICAgICAgc3Ry
dWN0dXJlIExpZ2h0aW5nRGF0YSBmcm9tIGRyYXdMaWdodGluZygpIHRvIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmU6Om1ha2VD
b2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBo
b2xvZ3lTb2Z0d2FyZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlOjptaW5Pck1heCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZTo6Y29sdW1uRXh0cmVtdW0pOgorICAgICAgICAo
V2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmU6Omtlcm5lbEV4dHJlbXVtKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlOjpwbGF0b2ZybUFwcGx5R2VuZXJpYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZTo6cGxhdG9mcm1BcHBseVdvcmtl
cik6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZTo6cGxhdG9mcm1BcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZTo6aXNEZWdlbmVyYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjptYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvbHVtbkV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omtlcm5l
bEV4dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxh
dGZvcm1BcHBseUdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9s
b2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oOgorICAgICAgICBSZW1v
dmUgdGhlIHRlbXBsYXRlIGZ1bmN0aW9ucyBhbmQganVzdCB0aGUgTW9ycGhvbG9neU9wZXJhdG9y
VHlwZSBhcyBhbgorICAgICAgICBhcmd1bWVudCB0byB0aGVzZSBmdW5jdGlvbnMuICBSZXBsYWNl
IHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKCkgd2l0aCBqdXN0CisgICAgICAgIGlzRGVnZW5lcmF0
ZSgpIGFuZCBtb3ZlIHRoZSBjYWxsIHRvIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkgdG8gCisg
ICAgICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcpOgorICAgICAgICBObyBuZWVk
IHRvIHBhc3MgRkVMaWdodGluZzo6U3BlY3VsYXJMaWdodGluZyB3aGVuIGNyZWF0aW5nIEZFRGlm
ZnVzZUxpZ2h0aW5nLgorICAgICAgICBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFU3BlY3VsYXJMaWdo
dGluZyBpcyBhbHJlYWR5IHBhc3NlZCB0byBGRUxpZ2h0aW5nLiAKKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlOjpQYWludGluZ0RhdGE6OlBhaW50aW5nRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZTo6UGFpbnRpbmdEYXRhOjpyYW5kb20p
OgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmU6OmluaXRQYWludGluZ0Rh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmU6OmNvbXB1dGVTdGl0
Y2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmU6Om5vaXNlMkQp
OgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmU6OmNhbGN1bGF0ZVR1cmJ1
bGVuY2VWYWx1ZUZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3
YXJlOjpwbGF0b2ZybUFwcGx5R2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVu
Y2VTb2Z0d2FyZTo6cGxhdG9mcm1BcHBseVdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpGRVR1
cmJ1bGVuY2VTb2Z0d2FyZTo6cGxhdG9mcm1BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1
cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1
cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6cmFuZG9tKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OnNtb290aEN1cnZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmxpbmVhckludGVy
cG9sYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjppbml0
UGFpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpjb21wdXRl
U3RpdGNoaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5j
ZTo6bm9pc2UyRCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp0b0ludEJhc2Vk
Q29sb3JDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5j
ZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcik6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6UGFpbnRpbmdEYXRhOjpQYWludGluZ0Rh
dGEpOiBEZWxldGVkLgorICAgICAgICBNb3ZlIHRoZSB0aHJlYWRpbmcgY29kZSBmcm9tIHBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpIHRvIGEgbmV3IGZ1bmN0aW9uCisgICAgICAgIGNhbGxlZCBwbGF0
b2ZybUFwcGx5KCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpub3JtYWxpemVkRmxv
YXRzKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSBub3JtYWxpemVkRmxvYXRzKCkgZnJvbSBGaWx0
ZXJFZmZlY3QgdG8gRkVDb2xvck1hdHJpeC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvTGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9pbnRMaWdodFNv
dXJjZTo6aW5pdFBhaW50aW5nRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQb2ludExp
Z2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTcG90TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oOgorICAgICAg
ICBNYWtlIGluaXRQYWludGluZ0RhdGEoKSBiZSBhIGNvbnN0YW50IGZ1bmN0aW9uLgorCiAyMDIx
LTExLTE2ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IFN0b3AgYSBtb21lbnR1bSBzY3JvbGwgYW5pbWF0aW9uIHdoZW4gcmVjZWl2aW5nIGEgbW9tZW50
dW0gZW5kIGV2ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKaW5kZXggZTVmYjFmZjY2
NWQzZWIwN2Y0OGVlMWQwMmJiZmZjYzZiMDQ0MWY4OS4uODk0N2E5ODYwZTQ2YjExYzU4ZTI3NzUz
NjI1NmZkYjlkNTFkMTU0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcApAQCAtMzUs
NyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgRGlzdGFudExpZ2h0U291
cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhKQordm9pZCBEaXN0YW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEo
Y29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpIGNvbnN0CiB7
CiAgICAgZmxvYXQgYXppbXV0aCA9IGRlZzJyYWQobV9hemltdXRoKTsKICAgICBmbG9hdCBlbGV2
YXRpb24gPSBkZWcycmFkKG1fZWxldmF0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oCmlu
ZGV4IGMxZTMwZWRlNzU5ODM3MjhhNjMyYmNjZmZiMDk5NzNhM2E0ZTcyZmQuLjMwMTkyYjBlZjBj
ZDFiZjQwM2Q0MjMzOGNlNDA4NzcxOGQ3NTE3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2Uu
aApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRBemltdXRoKGZsb2F0KSBv
dmVycmlkZTsKICAgICBib29sIHNldEVsZXZhdGlvbihmbG9hdCkgb3ZlcnJpZGU7CiAKLSAgICB2
b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYs
IFBhaW50aW5nRGF0YSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIENvbXB1dGVkTGlnaHRpbmdEYXRh
IGNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50
IHksIGZsb2F0IHopIGNvbnN0IGZpbmFsOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAKaW5kZXggNjc5ZTc4ZGFlYTg3M2Y1ZDMzYTFhZmY4NzE1MjViZmNmODc3MTBm
Yi4uOTUxNDQ5NjRhMjdmYjY2YmQ4MjljOGRmOWZjYWIyZTY0YjJiMTY1NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwCkBAIC02Myw2ICs2Myw0NCBAQCBib29sIEZFQ29sb3JNYXRyaXg6OnNldFZhbHVl
cyhjb25zdCBWZWN0b3I8ZmxvYXQ+ICZ2YWx1ZXMpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3Zv
aWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21w
b25lbnRzLCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBjb21wb25lbnRzWzBdID0gKDAuMjEzICsgMC43
ODcgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUp
OworICAgIGNvbXBvbmVudHNbMl0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKKyAgICBjb21w
b25lbnRzWzNdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s0XSA9
ICgwLjcxNSArIDAuMjg1ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbNV0gPSAoMC4wNzIgLSAw
LjA3MiAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzZdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1
ZSk7CisgICAgY29tcG9uZW50c1s3XSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOworICAgIGNv
bXBvbmVudHNbOF0gPSAoMC4wNzIgKyAwLjkyOCAqIHZhbHVlKTsKK30KKwordm9pZCBGRUNvbG9y
TWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBm
bG9hdCB2YWx1ZSkKK3sKKyAgICBmbG9hdCBjb3NIdWUgPSBjb3ModmFsdWUgKiBwaUZsb2F0IC8g
MTgwKTsKKyAgICBmbG9hdCBzaW5IdWUgPSBzaW4odmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKKyAg
ICBjb21wb25lbnRzWzBdID0gMC4yMTMgKyBjb3NIdWUgKiAwLjc4NyAtIHNpbkh1ZSAqIDAuMjEz
OworICAgIGNvbXBvbmVudHNbMV0gPSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1IC0gc2luSHVlICog
MC43MTU7CisgICAgY29tcG9uZW50c1syXSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIgKyBzaW5I
dWUgKiAwLjkyODsKKyAgICBjb21wb25lbnRzWzNdID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyAr
IHNpbkh1ZSAqIDAuMTQzOworICAgIGNvbXBvbmVudHNbNF0gPSAwLjcxNSArIGNvc0h1ZSAqIDAu
Mjg1ICsgc2luSHVlICogMC4xNDA7CisgICAgY29tcG9uZW50c1s1XSA9IDAuMDcyIC0gY29zSHVl
ICogMC4wNzIgLSBzaW5IdWUgKiAwLjI4MzsKKyAgICBjb21wb25lbnRzWzZdID0gMC4yMTMgLSBj
b3NIdWUgKiAwLjIxMyAtIHNpbkh1ZSAqIDAuNzg3OworICAgIGNvbXBvbmVudHNbN10gPSAwLjcx
NSAtIGNvc0h1ZSAqIDAuNzE1ICsgc2luSHVlICogMC43MTU7CisgICAgY29tcG9uZW50c1s4XSA9
IDAuMDcyICsgY29zSHVlICogMC45MjggKyBzaW5IdWUgKiAwLjA3MjsKK30KKworVmVjdG9yPGZs
b2F0PiBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcykKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNp
emUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCisg
ICAgICAgIG5vcm1hbGl6ZWRWYWx1ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsK
KyAgICByZXR1cm4gbm9ybWFsaXplZFZhbHVlczsKK30KKworbmFtZXNwYWNlIEZFQ29sb3JNYXRy
aXhTb2Z0d2FyZSB7CisKIGlubGluZSB2b2lkIG1hdHJpeChmbG9hdCYgcmVkLCBmbG9hdCYgZ3Jl
ZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVl
cykKIHsKICAgICBmbG9hdCByID0gcmVkOwpAQCAtOTcsMTggKzEzNSwxMCBAQCBpbmxpbmUgdm9p
ZCBsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQm
IGFscGhhKQogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCi10ZW1wbGF0ZTxDb2xvck1hdHJpeFR5
cGUgZmlsdGVyVHlwZT4KLWJvb2wgZWZmZWN0QXBwbHlBY2NlbGVyYXRlZChVaW50OENsYW1wZWRB
cnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBjb21w
b25lbnRzWzldLCBJbnRTaXplIGJ1ZmZlclNpemUpCitzdGF0aWMgdm9pZCBlZmZlY3RBcHBseUFj
Y2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8Zmxv
YXQ+JiB2YWx1ZXMsIGZsb2F0IGNvbXBvbmVudHNbOV0sIEludFNpemUgYnVmZmVyU2l6ZSwgQ29s
b3JNYXRyaXhUeXBlIG1hdHJpeFR5cGUpCiB7CiAgICAgQVNTRVJUKHBpeGVsQXJyYXkubGVuZ3Ro
KCkgPT0gYnVmZmVyU2l6ZS5hcmVhKCkgKiA0KTsKICAgICAKLSAgICBpZiAoZmlsdGVyVHlwZSA9
PSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYKSB7Ci0gICAgICAgIC8vIHZJbWFnZU1hdHJpeE11
bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYgYW55IHZhbHVlIGluIHRoZSBs
YXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0cml4Ci0gICAgICAgIC8vIGlz
IG5vdCB6ZXJvLCBmYWxsIGJhY2sgdG8gbm9uLXZJbWFnZSBjb2RlLgotICAgICAgICBpZiAodmFs
dWVzWzRdICE9IDAgfHwgdmFsdWVzWzldICE9IDAgfHwgdmFsdWVzWzE0XSAhPSAwIHx8IHZhbHVl
c1sxOV0gIT0gMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBjb25z
dCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7CiAgICAgdWludDhfdCogZGF0YSA9IHBpeGVsQXJyYXku
ZGF0YSgpOwogCkBAIC0xMjQsNyArMTU0LDEwIEBAIGJvb2wgZWZmZWN0QXBwbHlBY2NlbGVyYXRl
ZChVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYKICAg
ICBkZXN0LnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKICAgICBkZXN0LmRhdGEg
PSBkYXRhOwogCi0gICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7CisgICAgc3dpdGNoIChtYXRyaXhU
eXBlKSB7CisgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKKyAgICAgICAgYnJl
YWs7CisKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6IHsKICAgICAgICAgY29u
c3QgaW50MTZfdCBtYXRyaXhbNCAqIDRdID0gewogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKHZhbHVlc1sgMF0gKiBkaXZpc29yKSksCkBAIC0yMDMsMzEgKzIzNiwxNyBA
QCBib29sIGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJy
YXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKIAotdGVtcGxhdGU8Q29sb3JNYXRyaXhU
eXBlIGZpbHRlclR5cGU+Ci12b2lkIGVmZmVjdFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVs
QXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXplKQor
c3RhdGljIHZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29u
c3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBjb21wb25lbnRzWzldLCBDb2xvck1hdHJp
eFR5cGUgbWF0cml4VHlwZSkKIHsKLSAgICBmbG9hdCBjb21wb25lbnRzWzldOwotCi0gICAgaWYg
KGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFKQotICAgICAgICBGRUNv
bG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoY29tcG9uZW50cywgdmFsdWVz
WzBdKTsKLSAgICBlbHNlIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVS
T1RBVEUpCi0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVu
dHMoY29tcG9uZW50cywgdmFsdWVzWzBdKTsKLQogICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5n
dGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOwogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgaWYg
KGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQ8ZmlsdGVyVHlwZT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBj
b21wb25lbnRzLCBidWZmZXJTaXplKSkKLSAgICAgICAgcmV0dXJuOwotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0oYnVmZmVyU2l6ZSk7Ci0jZW5kaWYKKyAgICBzd2l0Y2ggKG1hdHJpeFR5cGUpIHsK
KyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgorICAgICAgICBicmVhazsKIAot
ICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01B
VFJJWDoKICAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5
dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewogICAg
ICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CkBA
IC0yNzMsNiArMjkyLDIzIEBAIHZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4
ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTCiAgICAgfQogfQogCitz
dGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBj
b25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIGZsb2F0IGNvbXBvbmVudHNbOV0sIEludFNpemUg
YnVmZmVyU2l6ZSwgQ29sb3JNYXRyaXhUeXBlIG1hdHJpeFR5cGUpCit7CisjaWYgVVNFKEFDQ0VM
RVJBVEUpCisgICAgLy8gdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQg
bWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0
cml4IDV4NCBtYXRyaXgKKyAgICAvLyBpcyBub3QgemVybywgZmFsbCBiYWNrIHRvIG5vbi12SW1h
Z2UgY29kZS4KKyAgICBpZiAobWF0cml4VHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklY
ICYmICh2YWx1ZXNbNF0gfHwgdmFsdWVzWzldIHx8IHZhbHVlc1sxNF0gfHwgdmFsdWVzWzE5XSkp
CisgICAgICAgIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZTo6ZWZmZWN0VHlwZShwaXhlbEFycmF5LCB2
YWx1ZXMsIGNvbXBvbmVudHMsIG1hdHJpeFR5cGUpOworICAgIGVsc2UKKyAgICAgICAgRkVDb2xv
ck1hdHJpeFNvZnR3YXJlOjplZmZlY3RBcHBseUFjY2VsZXJhdGVkKHBpeGVsQXJyYXksIHZhbHVl
cywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSwgbWF0cml4VHlwZSk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShidWZmZXJTaXplKTsKKyAgICBGRUNvbG9yTWF0cml4U29mdHdhcmU6OmVmZmVjdFR5
cGUocGl4ZWxBcnJheSwgdmFsdWVzLCBjb21wb25lbnRzLCBtYXRyaXhUeXBlKTsKKyNlbmRpZgor
fQorCit9IC8vIG5hbWVzcGFjZSBGRUNvbG9yTWF0cml4U29mdHdhcmUKKwogYm9vbCBGRUNvbG9y
TWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CkBAIC0yOTQsMjYgKzMzMCwyOCBAQCBib29s
IEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAg
IGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci0+ZGF0YSgpOwogICAgIGF1dG8gcGl4ZWxB
cnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1ZmZlci0+c2l6ZSgpOwogCi0gICAgVmVjdG9yPGZsb2F0
PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKLSAgICAKKyAgICBhdXRvIHZh
bHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOworICAgIGZsb2F0IGNvbXBvbmVudHNb
OV07CisKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBF
X1VOS05PV046Ci0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01B
VFJJWDoKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYPihwaXhl
bEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6IAotICAgICAgICBlZmZlY3RUeXBl
PEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFy
cmF5RGltZW5zaW9ucyk7CisKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURToK
KyAgICAgICAgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1sw
XSk7CiAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAgY2FzZSBGRUNPTE9STUFUUklY
X1RZUEVfSFVFUk9UQVRFOgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9I
VUVST1RBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAg
ICAgICBjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7
CiAgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNF
VE9BTFBIQToKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNF
VE9BTFBIQT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7CiAgICAg
ICAgIHNldElzQWxwaGFJbWFnZSh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAg
RkVDb2xvck1hdHJpeFNvZnR3YXJlOjphcHBseVBsYXRmb3JtKHBpeGVsQXJyYXksIHZhbHVlcywg
Y29tcG9uZW50cywgcGl4ZWxBcnJheURpbWVuc2lvbnMsIG1fdHlwZSk7CiAgICAgcmVzdWx0SW1h
Z2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmgKaW5kZXggNDk3ZWIxOTVlNDE3NWVjZGZkMGNhYjI0Y2Jj
ZDliMGUzOWE3ZjgwOS4uZjY5ZjBiMDFjOTUwN2UwNTI2ZTBkMTc3ZWJiZWY5NjkwMDljZTFkMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmgKQEAgLTQ0LDggKzQ0LDkgQEAgcHVibGljOgogICAgIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CiAgICAgYm9v
bCBzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYpOwogCi0gICAgc3RhdGljIGlubGluZSB2
b2lkIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQg
dmFsdWUpOwotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25l
bnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgY2Fs
Y3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7
CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29t
cG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHN0YXRpYyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6
ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKTsKIAogcHJpdmF0ZToKICAgICBG
RUNvbG9yTWF0cml4KENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKQEAgLTU4LDM1
ICs1OSw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPGZsb2F0PiBtX3ZhbHVlczsKIH07CiAKLWlu
bGluZSB2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9h
dCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCi17Ci0gICAgY29tcG9uZW50c1swXSA9ICgwLjIx
MyArIDAuNzg3ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAwLjcxNSAq
IHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7Ci0g
ICAgY29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOwotICAgIGNvbXBvbmVu
dHNbNF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzVdID0gKDAu
MDcyIC0gMC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAtIDAuMjEz
ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVlKTsK
LSAgICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7Ci19Ci0KLWlubGlu
ZSB2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQq
IGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQotewotICAgIGZsb2F0IGNvc0h1ZSA9IGNvcyh2YWx1
ZSAqIHBpRmxvYXQgLyAxODApOwotICAgIGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1ZSAqIHBpRmxv
YXQgLyAxODApOwotICAgIGNvbXBvbmVudHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0g
c2luSHVlICogMC4yMTM7Ci0gICAgY29tcG9uZW50c1sxXSA9IDAuNzE1IC0gY29zSHVlICogMC43
MTUgLSBzaW5IdWUgKiAwLjcxNTsKLSAgICBjb21wb25lbnRzWzJdID0gMC4wNzIgLSBjb3NIdWUg
KiAwLjA3MiArIHNpbkh1ZSAqIDAuOTI4OwotICAgIGNvbXBvbmVudHNbM10gPSAwLjIxMyAtIGNv
c0h1ZSAqIDAuMjEzICsgc2luSHVlICogMC4xNDM7Ci0gICAgY29tcG9uZW50c1s0XSA9IDAuNzE1
ICsgY29zSHVlICogMC4yODUgKyBzaW5IdWUgKiAwLjE0MDsKLSAgICBjb21wb25lbnRzWzVdID0g
MC4wNzIgLSBjb3NIdWUgKiAwLjA3MiAtIHNpbkh1ZSAqIDAuMjgzOwotICAgIGNvbXBvbmVudHNb
Nl0gPSAwLjIxMyAtIGNvc0h1ZSAqIDAuMjEzIC0gc2luSHVlICogMC43ODc7Ci0gICAgY29tcG9u
ZW50c1s3XSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgKyBzaW5IdWUgKiAwLjcxNTsKLSAgICBj
b21wb25lbnRzWzhdID0gMC4wNzIgKyBjb3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAqIDAuMDcyOwot
fQotCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19G
SUxURVJfRUZGRUNUKEZFQ29sb3JNYXRyaXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNw
cAppbmRleCA5NzdjYTViNTc4NDEzNDNlNzE4ZjQyMDE1ZGI0MTI0YzdlMGFlZmVhLi4xZDU1N2Nk
ODQ1MTczYjllNzdkZDZjOGIyOTdmMjQ0YzljOTllNDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRU
cmFuc2Zlci5jcHAKQEAgLTQ2LDExICs0NiwxNSBAQCBGRUNvbXBvbmVudFRyYW5zZmVyOjpGRUNv
bXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bgog
ewogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKExv
b2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpCituYW1lc3BhY2Ug
RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlIHsKKwordXNpbmcgTG9va3VwVGFibGUgPSBzdGQ6
OmFycmF5PHVpbnQ4X3QsIDI1Nj47CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxl
KExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpCiB7CiB9CiAK
LXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJs
ZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0
aW9uKQorc3RhdGljIHZvaWQgY29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVz
LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQogewog
ICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5jdGlvbi50
YWJsZVZhbHVlczsKICAgICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwpAQCAtNjcs
NyArNzEsNyBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUo
TG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZQogICAgIH0KIH0KIAotdm9pZCBGRUNv
bXBvbmVudFRyYW5zZmVyOjpjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVz
LCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQorc3Rh
dGljIHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKIHsKICAgICBjb25z
dCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVyRnVuY3Rpb24udGFibGVWYWx1
ZXM7CiAgICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUoKTsKQEAgLTgyLDcgKzg2LDcg
QEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBU
YWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb24KICAgICB9CiB9CiAKLXZvaWQgRkVDb21wb25lbnRU
cmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCitzdGF0aWMgdm9pZCBj
b21wdXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGRvdWJsZSB2YWwgPSB0cmFu
c2ZlckZ1bmN0aW9uLnNsb3BlICogaSArIDI1NSAqIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0
OwpAQCAtOTEsNyArOTUsNyBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMaW5l
YXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbgogICAgIH0KIH0KIAot
dm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFUYWJsZShMb29rdXBUYWJsZSYg
dmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9u
KQorc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKIHsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGRv
dWJsZSBleHBvbmVudCA9IHRyYW5zZmVyRnVuY3Rpb24uZXhwb25lbnQ7IC8vIFJDVlQgZG9lc24n
dCBsaWtlIHBhc3NpbmcgYSBkb3VibGUgYW5kIGEgZmxvYXQgdG8gcG93LCBzbyBwcm9tb3RlIHRo
aXMgdG8gZG91YmxlCkBAIC0xMDEsNiArMTA1LDMxIEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
cjo6Y29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50
CiAgICAgfQogfQogCitzdGF0aWMgTG9va3VwVGFibGUgY29tcHV0ZUxvb2t1cFRhYmxlKGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKQoreworICAgIExvb2t1cFRhYmxl
IHRhYmxlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlLnNpemUoKTsgKytp
KQorICAgICAgICB0YWJsZVtpXSA9IGk7CisKKyAgICB1c2luZyBUcmFuc2ZlclR5cGUgPSB2b2lk
ICgqKShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAg
ICBUcmFuc2ZlclR5cGUgY2FsbEVmZmVjdFtdID0geworICAgICAgICBjb21wdXRlSWRlbnRpdHlU
YWJsZSwKKyAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsCisgICAgICAgIGNvbXB1dGVUYWJ1
bGFyVGFibGUsCisgICAgICAgIGNvbXB1dGVEaXNjcmV0ZVRhYmxlLAorICAgICAgICBjb21wdXRl
TGluZWFyVGFibGUsCisgICAgICAgIGNvbXB1dGVHYW1tYVRhYmxlCisgICAgfTsKKworICAgIEFT
U0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KGZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdU
SChjYWxsRWZmZWN0KSk7CisgICAgY2FsbEVmZmVjdFtmdW5jdGlvbi50eXBlXSh0YWJsZSwgZnVu
Y3Rpb24pOworCisgICAgcmV0dXJuIHRhYmxlOworfQorCit9IC8vIG5hbWVzcGFjZSBGRUNvbXBv
bmVudFRyYW5zZmVyU29mdHdhcmUKKwogYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoMCk7CkBAIC0xMTEsMTEgKzE0MCwxMCBAQCBib29sIEZFQ29tcG9uZW50VHJh
bnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogCiAgICAgYXV0byYg
ZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwog
Ci0gICAgTG9va3VwVGFibGUgcmVkVGFibGU7Ci0gICAgTG9va3VwVGFibGUgZ3JlZW5UYWJsZTsK
LSAgICBMb29rdXBUYWJsZSBibHVlVGFibGU7Ci0gICAgTG9va3VwVGFibGUgYWxwaGFUYWJsZTsK
LSAgICBjb21wdXRlTG9va3VwVGFibGVzKHJlZFRhYmxlLCBncmVlblRhYmxlLCBibHVlVGFibGUs
IGFscGhhVGFibGUpOworICAgIGF1dG8gcmVkVGFibGUgPSBGRUNvbXBvbmVudFRyYW5zZmVyU29m
dHdhcmU6OmNvbXB1dGVMb29rdXBUYWJsZShtX3JlZEZ1bmN0aW9uKTsKKyAgICBhdXRvIGdyZWVu
VGFibGUgPSBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmU6OmNvbXB1dGVMb29rdXBUYWJsZSht
X2dyZWVuRnVuY3Rpb24pOworICAgIGF1dG8gYmx1ZVRhYmxlID0gRkVDb21wb25lbnRUcmFuc2Zl
clNvZnR3YXJlOjpjb21wdXRlTG9va3VwVGFibGUobV9ibHVlRnVuY3Rpb24pOworICAgIGF1dG8g
YWxwaGFUYWJsZSA9IEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZTo6Y29tcHV0ZUxvb2t1cFRh
YmxlKG1fYWxwaGFGdW5jdGlvbik7CiAKICAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAg
ICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRyYXdp
bmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwpAQCAtMTMxLDMyICsxNTksNiBAQCBib29s
IEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1
dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRhYmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5U
YWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9va3VwVGFibGUmIGFscGhhVGFibGUpCi17
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZFRhYmxlLnNpemUoKTsgKytpKQotICAg
ICAgICByZWRUYWJsZVtpXSA9IGdyZWVuVGFibGVbaV0gPSBibHVlVGFibGVbaV0gPSBhbHBoYVRh
YmxlW2ldID0gaTsKLQotICAgIHVzaW5nIFRyYW5zZmVyVHlwZSA9IHZvaWQgKCopKExvb2t1cFRh
YmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIFRyYW5zZmVyVHlw
ZSBjYWxsRWZmZWN0W10gPSB7Ci0gICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLCAgIC8vIEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9VTktOT1dOCi0gICAgICAgIGNvbXB1dGVJZGVudGl0eVRh
YmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9JREVOVElUWQotICAgICAgICBjb21w
dXRlVGFidWxhclRhYmxlLCAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEUKLSAg
ICAgICAgY29tcHV0ZURpc2NyZXRlVGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBF
X0RJU0NSRVRFCi0gICAgICAgIGNvbXB1dGVMaW5lYXJUYWJsZSwgICAgIC8vIEZFQ09NUE9ORU5U
VFJBTlNGRVJfVFlQRV9MSU5FQVIKLSAgICAgICAgY29tcHV0ZUdhbW1hVGFibGUgICAgICAgLy8g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0dBTU1BCi0gICAgfTsKLQotICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9yZWRGdW5jdGlvbi50
eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9ncmVlbkZ1bmN0aW9uLnR5
cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2JsdWVGdW5jdGlvbi50eXBl
KSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9hbHBoYUZ1bmN0aW9uLnR5cGUp
IDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0KLSAgICBjYWxsRWZmZWN0W21fcmVk
RnVuY3Rpb24udHlwZV0ocmVkVGFibGUsIG1fcmVkRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3Rb
bV9ncmVlbkZ1bmN0aW9uLnR5cGVdKGdyZWVuVGFibGUsIG1fZ3JlZW5GdW5jdGlvbik7Ci0gICAg
Y2FsbEVmZmVjdFttX2JsdWVGdW5jdGlvbi50eXBlXShibHVlVGFibGUsIG1fYmx1ZUZ1bmN0aW9u
KTsKLSAgICBjYWxsRWZmZWN0W21fYWxwaGFGdW5jdGlvbi50eXBlXShhbHBoYVRhYmxlLCBtX2Fs
cGhhRnVuY3Rpb24pOwotfQotCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgQ29tcG9uZW50VHJhbnNmZXJUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBl
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCmluZGV4IDZhZGE5YzBhYmJlNWMyZjlkNjVi
ZDkxOWZmZWM0ZjE3M2QwMDM0MTQuLjUxOGVhMTM0N2E0YWRkYmE0Y2Q1MDBjYjQyYzgxMzcwNmRj
Y2QxOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCkBAIC02MSwxNiArNjEsNiBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgZ3JlZW5GdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKIAotICAgIHVzaW5n
IExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+OwotCi0gICAgc3RhdGljIHZv
aWQgY29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZVRhYnVsYXJUYWJsZShMb29r
dXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMg
dm9pZCBjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlTGluZWFyVGFibGUoTG9v
a3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGlj
IHZvaWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJik7Ci0KLSAgICB2b2lkIGNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFi
bGUmIHJlZFRhYmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVU
YWJsZSwgTG9va3VwVGFibGUmIGFscGhhVGFibGUpOwotCiAgICAgYm9vbCBwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25U
eXBlKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggMjVhYzAwODQyNGJkODYz
MTE4NDc4OTA5NTBiY2Y2M2U1YWVmNWZhOC4uM2E1NTM2YWViM2E4NmQ2YTM1YTFhMTAyZmVlZDQ3
ZmI4MmQ3YzZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTk0LDcgKzk0LDMxIEBAIHZvaWQgRkVD
b21wb3NpdGU6OmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpCiAKICAgICBmb3JjZVZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscygpOwogfQotICAgIAorCit2b2lkIEZFQ29tcG9zaXRlOjpkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICBzd2l0
Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46CisgICAgY2Fz
ZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgorICAgICAgICAvLyBGb3IgSW4gYW5kIEF0b3Ag
dGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgorICAgICAgICAv
LyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBhaW50IHJlY3Qg
b2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KKyAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3Qo
aW5wdXRFZmZlY3QoMSktPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgICAgICBjbGlwQWJzb2x1
dGVQYWludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BF
UkFUT1JfQVJJVEhNRVRJQzoKKyAgICAgICAgLy8gQXJpdGhtZXRpYyBtYXkgaW5mbHVuY2UgdGhl
IGNvbXBlbGUgZmlsdGVyIHByaW1pdGl2ZSByZWdpb24uIFNvIHdlIGNhbid0CisgICAgICAgIC8v
IG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KKyAgICAgICAgc2V0QWJzb2x1dGVQYWlu
dFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFRha2UgdGhlIHVuaW9uIG9mIGJvdGggaW5wdXQg
ZWZmZWN0cy4KKyAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dChmaWx0ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCituYW1lc3BhY2UgRkVDb21w
b3NpdGVTb2Z0d2FyZSB7CisKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNsYW1wQnl0ZShpbnQgYykK
IHsKICAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZbXSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oYyksIDI1NSwgMCB9OwpAQCAtMTg4LDYgKzIxMiw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBh
cml0aG1ldGljU29mdHdhcmUodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBk
ZXN0CiB9CiAjZW5kaWYKIAorfSAvLyBuYW1lc3BhY2UgRkVDb21wb3NpdGVTb2Z0d2FyZQorCiBp
bmxpbmUgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1Bcml0aG1ldGljU29mdHdhcmUoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKIHsKICAgICBpbnQgbGVu
Z3RoID0gc291cmNlLmxlbmd0aCgpOwpAQCAtMTk3LDMyICsyMjMsMTAgQEAgaW5saW5lIHZvaWQg
RkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzb3UKICAgICBBU1NFUlQoIShsZW5ndGggJiAweDMpKTsKICAgICBwbGF0Zm9ybUFy
aXRobWV0aWNOZW9uKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBr
MSwgazIsIGszLCBrNCk7CiAjZWxzZQotICAgIGFyaXRobWV0aWNTb2Z0d2FyZShzb3VyY2UuZGF0
YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOworICAgIEZF
Q29tcG9zaXRlU29mdHdhcmU6OmFyaXRobWV0aWNTb2Z0d2FyZShzb3VyY2UuZGF0YSgpLCBkZXN0
aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOwogI2VuZGlmCiB9CiAKLXZv
aWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9JTjoKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAg
IC8vIEZvciBJbiBhbmQgQXRvcCB0aGUgZmlyc3QgZWZmZWN0IGp1c3QgaW5mbHVlbmNlcyB0aGUg
cmVzdWx0IG9mCi0gICAgICAgIC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUg
YWJzb2x1dGUgcGFpbnQgcmVjdCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgotICAgICAgICBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgxKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgotICAgICAgICAvLyBBcml0aG1l
dGljIG1heSBpbmZsdW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28g
d2UgY2FuJ3QKLSAgICAgICAgLy8gb3B0aW1pemUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgotICAg
ICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3Qo
KSkpOwotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGFrZSB0aGUg
dW5pb24gb2YgYm90aCBpbnB1dCBlZmZlY3RzLgotICAgICAgICBGaWx0ZXJFZmZlY3Q6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KGZpbHRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19
Ci0KIGJvb2wgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
KQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJp
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguY3BwCmluZGV4IDkzZjZkZjg3YThjYmQzYzE2NDI0M2YyNDM2MDRkY2VlZWI4MWE2
NjQuLmM0NjZjYjk1ZmMzNjlkMTYzNGNlYzBmN2NiY2RjODU1ODA5MDEwZDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJp
eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bnZvbHZlTWF0cml4LmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAorI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXgu
aCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMu
aD4KICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CkBAIC0xMTQsNiArMTE1LDggQEAgYm9vbCBG
RUNvbnZvbHZlTWF0cml4OjpzZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAorbmFtZXNwYWNlIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZSB7
CisKIC8qCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgQ29u
dm9sdmVNYXRyaXggaW1wbGVtZW50YXRpb24KQEAgLTE3MCw2ICsxNzMsMjEgQEAgYm9vbCBGRUNv
bnZvbHZlTWF0cml4OjpzZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkKICAgIGFu
ZCB3b3VsZCBtYWtlIGl0IHJlYWxseSBoYXJkIHRvIHVuZGVyc3RhbmQuCiAqLwogCitzdHJ1Y3Qg
UGFpbnRpbmdEYXRhIHsKKyAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJh
eTsKKyAgICBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheTsKKyAgICBpbnQgd2lkdGg7
CisgICAgaW50IGhlaWdodDsKKworICAgIEludFNpemUga2VybmVsU2l6ZTsKKyAgICBmbG9hdCBk
aXZpc29yOworICAgIGZsb2F0IGJpYXM7CisgICAgSW50UG9pbnQgdGFyZ2V0T2Zmc2V0OworICAg
IEVkZ2VNb2RlVHlwZSBlZGdlTW9kZTsKKyAgICBib29sIHByZXNlcnZlQWxwaGE7CisgICAgVmVj
dG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7Cit9OworCiBzdGF0aWMgQUxXQVlTX0lOTElORSB1bnNp
Z25lZCBjaGFyIGNsYW1wUkdCQVZhbHVlKGZsb2F0IGNoYW5uZWwsIHVuc2lnbmVkIGNoYXIgbWF4
ID0gMjU1KQogewogICAgIGlmIChjaGFubmVsIDw9IDApCkBAIC0xNzksOCArMTk3LDcgQEAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFu
bmVsLCB1bnNpZ25lZCBjaGFyIG0KICAgICByZXR1cm4gY2hhbm5lbDsKIH0KIAotdGVtcGxhdGU8
Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2b2lkIHNldERlc3RpbmF0
aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xh
bXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBk
aXZpc29yLCBmbG9hdCBiaWFzKQorc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5h
dGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVaW50OENs
YW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxvYXQg
ZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzKQogewogICAgIHVu
c2lnbmVkIGNoYXIgbWF4QWxwaGEgPSBwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMjU1IDogY2xhbXBS
R0JBVmFsdWUodG90YWxzWzNdIC8gZGl2aXNvciArIGJpYXMpOwogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMzsgKytpKQpAQCAtMTkzLDI1ICsyMTAsMTggQEAgQUxXQVlTX0lOTElORSB2b2lkIHNl
dERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMs
IFUKICAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgbWF4QWxwaGEpOwogfQogCi0jaWYg
Q09NUElMRVIoTVNWQykKLS8vIEluY29ycmVjdGx5IGRpYWdub3Npbmcgb3ZlcndyaXRlIG9mIHN0
YWNrIGluIHx0b3RhbHN8IGR1ZSB0byB8cHJlc2VydmVBbHBoYVZhbHVlc3wuCi0jcHJhZ21hIHdh
cm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0Nzg5KQotI2VuZGlmCi0KIC8v
IE9ubHkgZm9yIHJlZ2lvbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci1B
TFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9yUGl4ZWxz
KFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRv
bSwgaW50IHlTdGFydCwgaW50IHlFbmQpCitzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHNldElu
dGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBp
bnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCiB7CiAgICAgLy8gZWRnZSBtb2Rl
IGRvZXMgbm90IGFmZmVjdCB0aGVzZSBwaXhlbHMKLSAgICBpbnQgcGl4ZWwgPSAobV90YXJnZXRP
ZmZzZXQueSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgbV90YXJnZXRPZmZzZXQueCgpKSAqIDQ7
CisgICAgaW50IHBpeGVsID0gKHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpICogcGFpbnRp
bmdEYXRhLndpZHRoICsgcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC54KCkpICogNDsKICAgICBp
bnQga2VybmVsSW5jcmVhc2UgPSBjbGlwUmlnaHQgKiA0OwotICAgIGludCB4SW5jcmVhc2UgPSAo
bV9rZXJuZWxTaXplLndpZHRoKCkgLSAxKSAqIDQ7CisgICAgaW50IHhJbmNyZWFzZSA9IChwYWlu
dGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OwogICAgIC8vIENvbnRhaW5zIHRo
ZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2
ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKKyAgICBmbG9hdCB0b3RhbHNbNF07CiAKICAgICAvLyBt
X2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMg
dGhpcwotICAgIEFTU0VSVChtX2Rpdmlzb3IpOworICAgIEFTU0VSVChwYWludGluZ0RhdGEuZGl2
aXNvcik7CiAKICAgICAvLyBTa2lwIHRoZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGlu
ZXMKICAgICBwaXhlbCArPSAoY2xpcEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlw
UmlnaHQgKyAxKSAqIDQpOwpAQCAtMjIxLDI5ICsyMzEsMjggQEAgQUxXQVlTX0lOTElORSB2b2lk
IEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBh
aW50aW4KICAgICAgICAgZm9yIChpbnQgeCA9IGNsaXBSaWdodCArIDE7IHggPiAwOyAtLXgpIHsK
ICAgICAgICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXgu
c2l6ZSgpIC0gMTsKICAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbCA9IHN0YXJ0S2VybmVsUGl4
ZWw7Ci0gICAgICAgICAgICBpbnQgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICAg
ICAgICAgIGludCB3aWR0aCA9IHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CiAKICAg
ICAgICAgICAgIHRvdGFsc1swXSA9IDA7CiAgICAgICAgICAgICB0b3RhbHNbMV0gPSAwOwogICAg
ICAgICAgICAgdG90YWxzWzJdID0gMDsKLSAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZh
bHVlcykKLSAgICAgICAgICAgICAgICB0b3RhbHNbM10gPSAwOworICAgICAgICAgICAgdG90YWxz
WzNdID0gMDsKIAogICAgICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKICAgICAg
ICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxW
YWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRl
bShrZXJuZWxQaXhlbCsrKSk7CiAgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5n
RGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50
aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwogICAgICAgICAgICAg
ICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAq
IHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5l
bFBpeGVsKyspKTsKLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCisg
ICAgICAgICAgICAgICAgaWYgKCFwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSkKICAgICAgICAg
ICAgICAgICAgICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVs
VmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0
ZW0oa2VybmVsUGl4ZWwpKTsKICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsOwogICAgICAg
ICAgICAgICAgIC0ta2VybmVsVmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7
CiAgICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsICs9IGtlcm5lbEluY3JlYXNlOwotICAg
ICAgICAgICAgICAgICAgICB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgICAgICAg
ICAgICAgICAgICB3aWR0aCA9IHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzZXREZXN0aW5hdGlv
blBpeGVsczxwcmVzZXJ2ZUFscGhhVmFsdWVzPihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwg
cGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMsIG1fZGl2aXNvciwgcGFp
bnRpbmdEYXRhLmJpYXMpOworICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHMocGFpbnRp
bmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwg
dG90YWxzLCBwYWludGluZ0RhdGEuZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5n
RGF0YS5wcmVzZXJ2ZUFscGhhKTsKICAgICAgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0gNDsK
ICAgICAgICAgfQogICAgICAgICBwaXhlbCArPSB4SW5jcmVhc2U7CkBAIC0yNTEsMTIgKzI2MCwx
MiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9y
UGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbgogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBp
bnQgRkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4ZWxWYWx1ZShQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgaW50IHgsIGludCB5KQorc3RhdGljIEFMV0FZU19JTkxJTkUgaW50IGdldFBpeGVsVmFs
dWUoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSkKIHsKICAgICBpZiAo
eCA+PSAwICYmIHggPCBwYWludGluZ0RhdGEud2lkdGggJiYgeSA+PSAwICYmIHkgPCBwYWludGlu
Z0RhdGEuaGVpZ2h0KQogICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4
KSA8PCAyOwogCi0gICAgc3dpdGNoIChtX2VkZ2VNb2RlKSB7CisgICAgc3dpdGNoIChwYWludGlu
Z0RhdGEuZWRnZU1vZGUpIHsKICAgICBkZWZhdWx0OiAvLyBFREdFTU9ERV9OT05FCiAgICAgICAg
IHJldHVybiAtMTsKICAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKQEAgLTI4MSwzNCArMjkw
LDMyIEBAIEFMV0FZU19JTkxJTkUgaW50IEZFQ29udm9sdmVNYXRyaXg6OmdldFBpeGVsVmFsdWUo
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGluCiB9CiAKIC8vIEZvciBvdGhlciByZWdpb25z
IHRoYW4gQwotdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotdm9pZCBGRUNvbnZv
bHZlTWF0cml4OjpmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEs
IGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZv
aWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwgaW50
IHkxLCBpbnQgeDIsIGludCB5MikKIHsKICAgICBpbnQgcGl4ZWwgPSAoeTEgKiBwYWludGluZ0Rh
dGEud2lkdGggKyB4MSkgKiA0OwogICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOwogICAgIGludCB3
aWR0aCA9IHgyIC0geDE7Ci0gICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEgLSBtX3Rhcmdl
dE9mZnNldC54KCk7CisgICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEgLSBwYWludGluZ0Rh
dGEudGFyZ2V0T2Zmc2V0LngoKTsKICAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdpbktl
cm5lbFBpeGVsWDsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAtIG1fdGFyZ2V0T2Zm
c2V0LnkoKTsKKyAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAtIHBhaW50aW5nRGF0YS50
YXJnZXRPZmZzZXQueSgpOwogICAgIGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdEYXRhLndpZHRo
IC0gd2lkdGgpICogNDsKICAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihhKSBjb21wb25l
bnRzCi0gICAgZmxvYXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVlcyA/IDAgOiAxKV07
CisgICAgZmxvYXQgdG90YWxzWzRdOwogCi0gICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAwLCBT
VkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9kaXZp
c29yKTsKKyAgICAvLyBwYWludGluZ0RhdGEuZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCisgICAgQVNTRVJUKHBhaW50aW5nRGF0YS5k
aXZpc29yKTsKIAogICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkpIHsKICAgICAg
ICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7CiAgICAgICAgICAgICBpbnQga2Vy
bmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7CiAgICAgICAg
ICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7CiAgICAgICAgICAgICBp
bnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICBpbnQgd2lk
dGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgIGludCB3aWR0aCA9IHBhaW50
aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CiAKICAgICAgICAgICAgIHRvdGFsc1swXSA9IDA7
CiAgICAgICAgICAgICB0b3RhbHNbMV0gPSAwOwogICAgICAgICAgICAgdG90YWxzWzJdID0gMDsK
LSAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAgICB0
b3RhbHNbM10gPSAwOworICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKIAogICAgICAgICAgICAg
d2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxJbmRl
eCA9IGdldFBpeGVsVmFsdWUocGFpbnRpbmdEYXRhLCBrZXJuZWxQaXhlbFgsIGtlcm5lbFBpeGVs
WSk7CkBAIC0zMTcsMTggKzMyNCwxOCBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRP
dXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbgogICAgICAg
ICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJu
ZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXku
aXRlbShwaXhlbEluZGV4ICsgMSkpOwogICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0g
cGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9h
dD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMikpOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMg
JiYgcGl4ZWxJbmRleCA+PSAwKQorICAgICAgICAgICAgICAgIGlmICghcGFpbnRpbmdEYXRhLnBy
ZXNlcnZlQWxwaGEgJiYgcGl4ZWxJbmRleCA+PSAwKQogICAgICAgICAgICAgICAgICAgICB0b3Rh
bHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNf
Y2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsg
MykpOwogICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOwogICAgICAgICAgICAgICAgIC0t
a2VybmVsVmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwogICAgICAgICAgICAg
ICAgICAgICArK2tlcm5lbFBpeGVsWTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtX2tl
cm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBwYWludGluZ0Rh
dGEua2VybmVsU2l6ZS53aWR0aCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVlcz4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBw
aXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKKyAgICAgICAgICAg
IHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGlu
Z0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlzb3Is
IHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CiAgICAgICAg
ICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOwogICAgICAgICB9CiAgICAgICAgIHBpeGVsICs9IHhJ
bmNyZWFzZTsKQEAgLTMzNywyOSArMzQ0LDcgQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0
U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwgaW4KICAg
ICB9CiB9CiAKLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkgLy8gRGlz
YWJsZSBvZiA0Nzg5Ci0jZW5kaWYKLQotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRy
aXg6OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xp
cFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCi17Ci0gICAgLy8g
TXVzdCBiZSBpbXBsZW1lbnRlZCBoZXJlLCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdBWVNf
SU5MSU5FCi0gICAgLy8gZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291cmNl
IGZpbGUgYXMgd2VsbAotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RTZXRJ
bnRlcmlvclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwg
eVN0YXJ0LCB5RW5kKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczxm
YWxzZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVs
cyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50
IHkyKQotewotICAgIC8vIEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gY2FuIGJlIG1vdmVkIHRvIHRo
ZSBoZWFkZXIsIGl0IGlzIGltcGxlbWVudGVkIGhlcmUKLSAgICAvLyBiZWNhdXNlIHNldEludGVy
aW9yUGl4ZWxzIGlzIGFsc28gaW1wbGVtZW50ZWQgaGVyZQotICAgIGlmIChtX3ByZXNlcnZlQWxw
aGEpCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIHgxLCB5
MSwgeDIsIHkyKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxzZT4o
cGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci19Cit9IC8vIG5hbWVzcGFjZSBGRUNvbnZv
bHZlTWF0cml4U29mdHdhcmUKIAogYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikKIHsKQEAgLTM4MywxMyArMzY4LDE4IEBAIGJvb2wgRkVD
b252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAKICAg
ICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwogICAgIAot
ICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7CisgICAgRkVDb252b2x2ZU1hdHJpeFNv
ZnR3YXJlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewogICAgICAgICAqc291cmNlUGl4
ZWxBcnJheSwKICAgICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5LAogICAgICAgICBwYWludFNp
emUud2lkdGgoKSwKICAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLAorICAgICAgICBtX2tlcm5l
bFNpemUsCisgICAgICAgIG1fZGl2aXNvciwKICAgICAgICAgbV9iaWFzICogMjU1LAotICAgICAg
ICBub3JtYWxpemVkRmxvYXRzKG1fa2VybmVsTWF0cml4KQorICAgICAgICBtX3RhcmdldE9mZnNl
dCwKKyAgICAgICAgbV9lZGdlTW9kZSwKKyAgICAgICAgbV9wcmVzZXJ2ZUFscGhhLAorICAgICAg
ICBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRzKG1fa2VybmVsTWF0cml4KQogICAgIH07
CiAKICAgICAvLyBEcmF3aW5nIGZ1bGx5IGNvdmVyZWQgcGl4ZWxzCkBAIC00MDIsNiArMzkyLDgg
QEAgYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJikKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwg
ZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworCiAgICAgaWYgKGludCBpdGVyYXRpb25zID0g
KGFic29sdXRlUGFpbnRSZWN0KCkud2lkdGgoKSAqIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0
KCkpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbikgewogICAgICAgICBpbnQgc3RyaWRlID0gY2xp
cEJvdHRvbSAvIGl0ZXJhdGlvbnM7CiAgICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0
b20gKyBzdHJpZGUgLSAxKSAvIHN0cmlkZTsKQEAgLTQxMCwyMSArNDAyLDIxIEBAIGJvb2wgRkVD
b252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAg
ICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAqIGluZGV4KTsKICAgICAgICAgICAgIGludCB5
RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAoaW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7CiAK
LSAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBj
bGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOworICAgICAgICAgICAgRkVDb252b2x2ZU1hdHJpeFNv
ZnR3YXJlOjpzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJv
dHRvbSwgeVN0YXJ0LCB5RW5kKTsKICAgICAgICAgfSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHNl
dEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCAwLCBj
bGlwQm90dG9tKTsKKyAgICAgICAgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlOjpzZXRJbnRlcmlv
clBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgMCwgY2xpcEJvdHRv
bSk7CiAKICAgICBjbGlwUmlnaHQgKz0gbV90YXJnZXRPZmZzZXQueCgpICsgMTsKICAgICBjbGlw
Qm90dG9tICs9IG1fdGFyZ2V0T2Zmc2V0LnkoKSArIDE7CiAgICAgaWYgKG1fdGFyZ2V0T2Zmc2V0
LnkoKSA+IDApCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgcGFp
bnRTaXplLndpZHRoKCksIG1fdGFyZ2V0T2Zmc2V0LnkoKSk7CisgICAgICAgIEZFQ29udm9sdmVN
YXRyaXhTb2Z0d2FyZTo6c2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBwYWludFNp
emUud2lkdGgoKSwgbV90YXJnZXRPZmZzZXQueSgpKTsKICAgICBpZiAoY2xpcEJvdHRvbSA8IHBh
aW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAw
LCBjbGlwQm90dG9tLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKKyAg
ICAgICAgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlOjpzZXRPdXRlclBpeGVscyhwYWludGluZ0Rh
dGEsIDAsIGNsaXBCb3R0b20sIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkp
OwogICAgIGlmIChtX3RhcmdldE9mZnNldC54KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVs
cyhwYWludGluZ0RhdGEsIDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgp
LCBjbGlwQm90dG9tKTsKKyAgICAgICAgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlOjpzZXRPdXRl
clBpeGVscyhwYWludGluZ0RhdGEsIDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZz
ZXQueCgpLCBjbGlwQm90dG9tKTsKICAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRo
KCkpCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3Rh
cmdldE9mZnNldC55KCksIHBhaW50U2l6ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKKyAgICAgICAg
RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlOjpzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNs
aXBSaWdodCwgbV90YXJnZXRPZmZzZXQueSgpLCBwYWludFNpemUud2lkdGgoKSwgY2xpcEJvdHRv
bSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKaW5kZXggMDVj
MWE4MzdkMjM0Y2Y1ODRkZTg5MGY1OTRiMjIwNzNmMTMzNjVjNS4uNmI3YWRlNmYwYjIyODlmMzQz
ZTU2ODE0ZmQ4YzJkZTU0NDczZmY5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKQEAgLTY0LDE2
ICs2NCw2IEBAIHB1YmxpYzoKICAgICBib29sIHNldFByZXNlcnZlQWxwaGEoYm9vbCk7CiAKIHBy
aXZhdGU6Ci0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5JiBk
c3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0g
ICAgICAgIGZsb2F0IGJpYXM7Ci0gICAgICAgIFZlY3RvcjxmbG9hdD4ga2VybmVsTWF0cml4Owot
ICAgIH07Ci0KICAgICBGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUs
IGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQs
IEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBw
cmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCiAgICAg
dm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7
IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7
IH0KQEAgLTgyLDIxICs3Miw2IEBAIHByaXZhdGU6CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBl
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVl
cz4KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5n
RGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVu
ZCk7Ci0KLSAgICBBTFdBWVNfSU5MSU5FIGludCBnZXRQaXhlbFZhbHVlKFBhaW50aW5nRGF0YSYs
IGludCB4LCBpbnQgeSk7Ci0KLSAgICB0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+
Ci0gICAgdm9pZCBmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgxLCBpbnQg
eTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFdyYXBwZXIgZnVuY3Rpb25zCi0gICAgQUxX
QVlTX0lOTElORSB2b2lkIHNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlw
UmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCk7Ci0gICAgQUxXQVlT
X0lOTElORSB2b2lkIHNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCB4MSwgaW50IHkx
LCBpbnQgeDIsIGludCB5Mik7Ci0KLSAgICAvLyBQYXJhbGxlbGl6YXRpb24gcGFydHMKLSAgICBz
dGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAoMTAwICogMTAwKTsgLy8g
RW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQogICAgIEludFNpemUgbV9r
ZXJuZWxTaXplOwogICAgIGZsb2F0IG1fZGl2aXNvcjsKICAgICBmbG9hdCBtX2JpYXM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVz
ZUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaWZmdXNlTGlnaHRpbmcuY3BwCmluZGV4IDFhYWNlOWQ2OWEwOTBiNGYxMGYxM2RlNzU1NzUx
ZWYyODYyMDkxY2QuLmVjNzFiNTQ3YTFkZjg2YTkxMzlkMTNhZTYzMzg2NzQyOTVlOTg3ZGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZm
dXNlTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCkBAIC0zMyw3ICszMyw3IEBAIFJlZjxGRURpZmZ1
c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgbGlnaHRp
bmdDb2xvciwgZmxvCiB9CiAKIEZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhj
b25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZm
dXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdodGluZyhE
aWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0
YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUo
bGlnaHRTb3VyY2UpLCBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQorICAg
IDogRkVMaWdodGluZyhGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLCBsaWdo
dGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgMCwgMCwga2VybmVsVW5p
dExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkKIHsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpc3BsYWNlbWVudE1hcC5oCmluZGV4IDNjZDA1Y2M0OTU1MTcxOTlhY2RjODhlZDUx
Mzc2NjQzNjA2YjkyNWUuLjZjYmY1ZGJlZWFmZTc1ODA5YWNjNWRjYWQzYTlmNzc2OTU3OGY4NzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKQEAgLTUzLDEzICs1MywxMyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5u
ZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7
CiAKKyAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxl
Y3RvciAtIDE7IH0KKyAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNo
YW5uZWxTZWxlY3RvciAtIDE7IH0KKwogICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KIAotICAgIGludCB4Q2hhbm5lbEluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQotICAgIGludCB5Q2hh
bm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5lbFNlbGVjdG9yIC0gMTsgfQotCiAg
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBDaGFubmVsU2Vs
ZWN0b3JUeXBlIG1feENoYW5uZWxTZWxlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXgg
NTBiMmMxZTAyZDlkODhjOTFmY2NlODQ1MmJiYzkxOTg1MTg5NGQ1ZS4uM2MyMTFkZTVlNjdhZmE3
NmU2MGQxYzlhNmQ5NzU5ZDViOTQ0MDY0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTMw
LDI4ICszMCwxMjUgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgVVNFKEFDQ0VM
RVJBVEUpCiAjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KKyNlbHNlCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUmVmPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZsb2F0IHgsIGZs
b2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGRUdhdXNzaWFuQmx1cih4LCB5LCBlZGdlTW9kZSkpOworfQorCitGRUdhdXNzaWFuQmx1cjo6
RkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQor
ICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVHYXVzc2lhbkJsdXIpCisg
ICAgLCBtX3N0ZFgoeCkKKyAgICAsIG1fc3RkWSh5KQorICAgICwgbV9lZGdlTW9kZShlZGdlTW9k
ZSkKK3sKK30KKwordm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWChmbG9hdCB4
KQoreworICAgIG1fc3RkWCA9IHg7Cit9CisKK3ZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERl
dmlhdGlvblkoZmxvYXQgeSkKK3sKKyAgICBtX3N0ZFkgPSB5OworfQorCit2b2lkIEZFR2F1c3Np
YW5CbHVyOjpzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCit7CisgICAgbV9lZGdl
TW9kZSA9IGVkZ2VNb2RlOworfQogCiBzdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuS2VybmVs
RmFjdG9yKCkKIHsKICAgICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBwaUZsb2F0KTsKIH0K
IAotc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKK3N0YXRpYyBpbnQgY2xh
bXBlZFRvS2VybmVsU2l6ZShmbG9hdCB2YWx1ZSkKK3sKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIG1heEtlcm5lbFNpemUgPSA1MDA7CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAv
LyBMaW1pdCB0aGUga2VybmVsIHNpemUgdG8gNTAwLiBBIGJpZ2dlciByYWRpdXMgd29uJ3QgbWFr
ZSBhIGJpZyBkaWZmZXJlbmNlIGZvciB0aGUgcmVzdWx0IGltYWdlIGJ1dAorICAgIC8vIGluZmxh
dGVzIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHRvbyBtdWNoLiBUaGlzIGlzIGNvbXBhdGlibGUg
d2l0aCBGaXJlZm94JyBiZWhhdmlvci4KKyAgICB1bnNpZ25lZCBzaXplID0gc3RkOjptYXg8dW5z
aWduZWQ+KDIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmbG9vcmYodmFsdWUgKiBnYXVzc2lhbktl
cm5lbEZhY3RvcigpICsgMC41ZikpKTsKKyAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHN0ZDo6bWlu
KHNpemUsIG1heEtlcm5lbFNpemUpKTsKK30KKyAgICAKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQorewor
ICAgIEFTU0VSVChzdGREZXZpYXRpb24ud2lkdGgoKSA+PSAwICYmIHN0ZERldmlhdGlvbi5oZWln
aHQoKSA+PSAwKTsKKyAgICBJbnRTaXplIGtlcm5lbFNpemU7CisKKyAgICBpZiAoc3RkRGV2aWF0
aW9uLndpZHRoKCkpCisgICAgICAgIGtlcm5lbFNpemUuc2V0V2lkdGgoY2xhbXBlZFRvS2VybmVs
U2l6ZShzdGREZXZpYXRpb24ud2lkdGgoKSkpOworCisgICAgaWYgKHN0ZERldmlhdGlvbi5oZWln
aHQoKSkKKyAgICAgICAga2VybmVsU2l6ZS5zZXRIZWlnaHQoY2xhbXBlZFRvS2VybmVsU2l6ZShz
dGREZXZpYXRpb24uaGVpZ2h0KCkpKTsKKworICAgIHJldHVybiBrZXJuZWxTaXplOworfQorCitJ
bnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZpbHRlciYg
ZmlsdGVyLCBGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQoreworICAgIHJldHVybiBjYWxjdWxhdGVV
bnNjYWxlZEtlcm5lbFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoc3RkRGV2aWF0aW9u
KSk7Cit9CisKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoRmxv
YXRTaXplIHN0ZERldmlhdGlvbikKK3sKKyAgICBhdXRvIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVV
bnNjYWxlZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uKTsKKworICAgIC8vIFdlIHRha2UgdGhlIGhh
bGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVu
IGJveCBibHVyIHRocmVlIHRpbWVzLgorICAgIHJldHVybiB7IDMgKiBrZXJuZWxTaXplLndpZHRo
KCkgLyAyLCAzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAvIDIgfTsKK30KKwordm9pZCBGRUdhdXNz
aWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIp
Cit7CisgICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIs
IHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisKKyAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3Qg
PSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKKyAgICAvLyBFZGdlIG1vZGVz
IG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRoZSBhZmZlY3RlZCBwYWludCByZWN0
LgorICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUpIHsKKyAgICAgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6
ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhy
ZWUgdGltZXMuCisgICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUu
d2lkdGgoKSAqIDAuNWYpOworICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJu
ZWxTaXplLmhlaWdodCgpICogMC41Zik7CisKKyAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQorICAg
ICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKKyAgICBl
bHNlCisgICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7CisK
KyAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRS
ZWN0KSk7Cit9CisKK25hbWVzcGFjZSBGRUdhdXNzaWFuQmx1clNvZnR3YXJlIHsKIAotaW5saW5l
IHZvaWQga2VybmVsUG9zaXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMs
IGludCYgZGVsdGFMZWZ0LCBpbnQmIGRlbHRhUmlnaHQpCitzdHJ1Y3QgUGxhdGZvcm1BcHBseVBh
cmFtZXRlcnMgeworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW9QaXhlbEFycmF5Owor
ICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdG1wUGl4ZWxBcnJheTsKKyAgICBpbnQgd2lk
dGg7CisgICAgaW50IGhlaWdodDsKKyAgICB1bnNpZ25lZCBrZXJuZWxTaXplWDsKKyAgICB1bnNp
Z25lZCBrZXJuZWxTaXplWTsKKyAgICBib29sIGlzQWxwaGFJbWFnZTsKKyAgICBFZGdlTW9kZVR5
cGUgZWRnZU1vZGU7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQga2VybmVsUG9zaXRpb24oaW50
IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGludCYgZGVsdGFMZWZ0LCBpbnQmIGRl
bHRhUmlnaHQpCiB7CiAgICAgLy8gQ2hlY2sgaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRl
cnMuaHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9yIGRldGFpbHMuCiAgICAgc3dpdGNoIChi
bHVySXRlcmF0aW9uKSB7CkBAIC03OSwzNiArMTc2LDggQEAgaW5saW5lIHZvaWQga2VybmVsUG9z
aXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGludCYgZGVsdGFMZWZ0
LAogICAgIH0KIH0KIAotUmVmPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRl
KGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGRUdhdXNzaWFuQmx1cih4LCB5LCBlZGdlTW9kZSkpOwotfQotCi1GRUdh
dXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVHYXVz
c2lhbkJsdXIpCi0gICAgLCBtX3N0ZFgoeCkKLSAgICAsIG1fc3RkWSh5KQotICAgICwgbV9lZGdl
TW9kZShlZGdlTW9kZSkKLXsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0
aW9uWChmbG9hdCB4KQotewotICAgIG1fc3RkWCA9IHg7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJs
dXI6OnNldFN0ZERldmlhdGlvblkoZmxvYXQgeSkKLXsKLSAgICBtX3N0ZFkgPSB5OwotfQotCi12
b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17
Ci0gICAgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOwotfQotCiAvLyBUaGlzIGZ1bmN0aW9uIG9ubHkg
b3BlcmF0ZXMgb24gQWxwaGEgY2hhbm5lbC4KLWlubGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHko
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5
JiBkc3RQaXhlbEFycmF5LAorc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHkoY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBk
c3RQaXhlbEFycmF5LAogICAgIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0
LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVm
ZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxTaXplKQogewogICAgIGNvbnN0IHVpbnQ4
X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKQEAgLTM3MSwzMSArNDQwLDM1IEBA
IGlubGluZSB2b2lkIHN0YW5kYXJkQm94Qmx1cihVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIs
IFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wCiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBGRUdhdXNz
aWFuQmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVy
LCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgs
IHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpCitzdGF0aWMgaW5saW5l
IHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBV
aW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVu
c2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdl
LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7CiAgICAgaW50IHN0cmlkZSA9IDQgKiBwYWludFNp
emUud2lkdGgoKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIGlmIChrZXJuZWxTaXplWCA9
PSBrZXJuZWxTaXplWSAmJiAobV9lZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FIHx8IG1fZWRnZU1v
ZGUgPT0gRURHRU1PREVfRFVQTElDQVRFKSkgeworICAgIGlmIChrZXJuZWxTaXplWCA9PSBrZXJu
ZWxTaXplWSAmJiAoZWRnZU1vZGUgPT0gRURHRU1PREVfTk9ORSB8fCBlZGdlTW9kZSA9PSBFREdF
TU9ERV9EVVBMSUNBVEUpKSB7CiAgICAgICAgIGFjY2VsZXJhdGVCb3hCbHVyKGlvQnVmZmVyLCB0
bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFp
bnRTaXplLmhlaWdodCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCi0gICAg
c3RhbmRhcmRCb3hCbHVyKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2Vy
bmVsU2l6ZVksIHN0cmlkZSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UoKSwgbV9lZGdlTW9kZSk7
CisgICAgc3RhbmRhcmRCb3hCbHVyKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXpl
WCwga2VybmVsU2l6ZVksIHN0cmlkZSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2Rl
KTsKIH0KIAotdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9y
bUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKKyNpZiAhVVNFKEFDQ0VMRVJBVEUpCitzdGF0
aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBwYXJh
bWV0ZXJzKQogewogICAgIEludFNpemUgcGFpbnRTaXplKHBhcmFtZXRlcnMtPndpZHRoLCBwYXJh
bWV0ZXJzLT5oZWlnaHQpOwotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxhdGZvcm1BcHBseUdl
bmVyaWMoKnBhcmFtZXRlcnMtPmlvUGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnRtcFBpeGVsQXJy
YXksIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWSwgcGFp
bnRTaXplKTsKKyAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYygqcGFyYW1ldGVycy0+aW9QaXhlbEFy
cmF5LCAqcGFyYW1ldGVycy0+dG1wUGl4ZWxBcnJheSwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVgs
IHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBwYWludFNpemUsIHBhcmFtZXRlcnMtPmlzQWxwaGFJ
bWFnZSwgcGFyYW1ldGVycy0+ZWRnZU1vZGUpOwogfQorI2VuZGlmCiAKLWlubGluZSB2b2lkIEZF
R2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwg
VWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1
bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQorc3RhdGljIGlubGluZSB2
b2lkIHBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1w
ZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtl
cm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9k
ZVR5cGUgZWRnZU1vZGUpCiB7CiAjaWYgIVVTRShBQ0NFTEVSQVRFKQogICAgIGludCBzY2FubGlu
ZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKICAgICBpbnQgZXh0cmFIZWlnaHQgPSAzICoga2Vy
bmVsU2l6ZVkgKiAwLjVmOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc19taW5pbWFsUmVj
dERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFs
bGVsIGpvYnMKICAgICBpbnQgb3B0aW1hbFRocmVhZE51bWJlciA9IChwYWludFNpemUud2lkdGgo
KSAqIHBhaW50U2l6ZS5oZWlnaHQoKSkgLyAoc19taW5pbWFsUmVjdERpbWVuc2lvbiArIGV4dHJh
SGVpZ2h0ICogcGFpbnRTaXplLndpZHRoKCkpOwogCiAgICAgaWYgKG9wdGltYWxUaHJlYWROdW1i
ZXIgPiAxKSB7CkBAIC00MTEsNyArNDg0LDYgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6
OnBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW0KICAg
ICAgICAgICAgIGludCBjdXJyZW50WSA9IDA7CiAgICAgICAgICAgICBmb3IgKGludCBqb2IgPSAw
OyBqb2IgPCBqb2JzOyBqb2IrKykgewogICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJh
bWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAg
ICAgICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7CiAKICAgICAgICAgICAgICAgICBpbnQgc3RhcnRZ
ID0gIWpvYiA/IDAgOiBjdXJyZW50WSAtIGV4dHJhSGVpZ2h0OwogICAgICAgICAgICAgICAgIGN1
cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBibG9ja0hlaWdodCArIDEgOiBibG9ja0hl
aWdodDsKQEAgLTQzMSw2ICs1MDMsOCBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxh
dGZvcm1BcHBseShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbQogICAgICAg
ICAgICAgICAgIHBhcmFtcy5oZWlnaHQgPSBlbmRZIC0gc3RhcnRZOwogICAgICAgICAgICAgICAg
IHBhcmFtcy5rZXJuZWxTaXplWCA9IGtlcm5lbFNpemVYOwogICAgICAgICAgICAgICAgIHBhcmFt
cy5rZXJuZWxTaXplWSA9IGtlcm5lbFNpemVZOworICAgICAgICAgICAgICAgIHBhcmFtcy5pc0Fs
cGhhSW1hZ2UgPSBpc0FscGhhSW1hZ2U7CisgICAgICAgICAgICAgICAgcGFyYW1zLmVkZ2VNb2Rl
ID0gZWRnZU1vZGU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHBhcmFsbGVsSm9icy5l
eGVjdXRlKCk7CkBAIC00NTgsNjYgKzUzMiwxMCBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1
cjo6cGxhdGZvcm1BcHBseShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbQog
I2VuZGlmCiAKICAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFw
cGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZvcm1zLgotICAgIHBsYXRmb3JtQXBwbHlHZW5l
cmljKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHBh
aW50U2l6ZSk7CisgICAgcGxhdGZvcm1BcHBseUdlbmVyaWMoaW9CdWZmZXIsIHRtcFBpeGVsQXJy
YXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UsIGVk
Z2VNb2RlKTsKIH0KIAotc3RhdGljIGludCBjbGFtcGVkVG9LZXJuZWxTaXplKGZsb2F0IHZhbHVl
KQotewotICAgIC8vIExpbWl0IHRoZSBrZXJuZWwgc2l6ZSB0byA1MDAuIEEgYmlnZ2VyIHJhZGl1
cyB3b24ndCBtYWtlIGEgYmlnIGRpZmZlcmVuY2UgZm9yIHRoZSByZXN1bHQgaW1hZ2UgYnV0Ci0g
ICAgLy8gaW5mbGF0ZXMgdGhlIGFic29sdXRlIHBhaW50IHJlY3QgdG9vIG11Y2guIFRoaXMgaXMg
Y29tcGF0aWJsZSB3aXRoIEZpcmVmb3gnIGJlaGF2aW9yLgotICAgIHVuc2lnbmVkIHNpemUgPSBz
dGQ6Om1heDx1bnNpZ25lZD4oMiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZsb29yZih2YWx1ZSAq
IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkgKyAwLjVmKSkpOwotICAgIHJldHVybiBjbGFtcFRvPGlu
dD4oc3RkOjptaW4oc2l6ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdNYXhLZXJuZWxTaXplKSkp
OwotfQotICAgIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRLZXJu
ZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCi17Ci0gICAgQVNTRVJUKHN0ZERldmlhdGlv
bi53aWR0aCgpID49IDAgJiYgc3RkRGV2aWF0aW9uLmhlaWdodCgpID49IDApOwotICAgIEludFNp
emUga2VybmVsU2l6ZTsKLQotICAgIGlmIChzdGREZXZpYXRpb24ud2lkdGgoKSkKLSAgICAgICAg
a2VybmVsU2l6ZS5zZXRXaWR0aChjbGFtcGVkVG9LZXJuZWxTaXplKHN0ZERldmlhdGlvbi53aWR0
aCgpKSk7Ci0KLSAgICBpZiAoc3RkRGV2aWF0aW9uLmhlaWdodCgpKQotICAgICAgICBrZXJuZWxT
aXplLnNldEhlaWdodChjbGFtcGVkVG9LZXJuZWxTaXplKHN0ZERldmlhdGlvbi5oZWlnaHQoKSkp
OwotCi0gICAgcmV0dXJuIGtlcm5lbFNpemU7Ci19Ci0KLUludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIEZsb2F0U2l6ZSBzdGRE
ZXZpYXRpb24pCi17Ci0gICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0
ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZShzdGREZXZpYXRpb24pKTsKLX0KLQotSW50U2l6ZSBGRUdh
dXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQot
ewotICAgIGF1dG8ga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGRE
ZXZpYXRpb24pOwotCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVs
dGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMu
Ci0gICAgcmV0dXJuIHsgMyAqIGtlcm5lbFNpemUud2lkdGgoKSAvIDIsIDMgKiBrZXJuZWxTaXpl
LmhlaWdodCgpIC8gMiB9OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKLXsKLSAgICBJbnRTaXplIGtlcm5l
bFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsK
LQotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNv
bHV0ZVBhaW50UmVjdCgpOwotICAgIC8vIEVkZ2UgbW9kZXMgb3RoZXIgdGhhbiAnbm9uZScgZG8g
bm90IGluZmxhdGUgdGhlIGFmZmVjdGVkIHBhaW50IHJlY3QuCi0gICAgaWYgKG1fZWRnZU1vZGUg
IT0gRURHRU1PREVfTk9ORSkgewotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRo
IHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICBhYnNvbHV0
ZVBhaW50UmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7Ci0gICAg
YWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVm
KTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0
LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAgICAgYWJzb2x1dGVQ
YWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLQotICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKLX0KK30gLy8gbmFtZXNw
YWNlIEZFR2F1c3NpYW5CbHVyU29mdHdhcmUKIAogYm9vbCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewpAQCAtNTQzLDcgKzU2MSw3
IEBAIGJvb2wgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImIGZpbHRlcikKICAgICBpZiAoIXRtcEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgcGxhdGZvcm1BcHBseShkZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURh
dGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplKTsK
KyAgICBGRUdhdXNzaWFuQmx1clNvZnR3YXJlOjpwbGF0Zm9ybUFwcGx5KGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhl
aWdodCgpLCBwYWludFNpemUsIGlzQWxwaGFJbWFnZSgpLCBtX2VkZ2VNb2RlKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCmluZGV4IGQ3NGJkYWE3MmVkMzA0ZjViODAx
NzdhZDZjY2E3NzVhNWI0OTM3MTcuLjY1YWE2ZTE4ODk3ZmE4Y2M5NzY5ZDFlNTU3ZDdkMjZmNWU1
Y2EyMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKQEAgLTQ2LDI5ICs0NiwxMyBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEZFR2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlw
ZSk7CiAKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAg
KiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0KLSAgICBz
dHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMgewotICAgICAgICBGRUdhdXNzaWFuQmx1ciog
ZmlsdGVyOwotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGlvUGl4ZWxBcnJheTsK
LSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB0bXBQaXhlbEFycmF5OwotICAgICAg
ICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIHVuc2lnbmVkIGtlcm5l
bFNpemVYOwotICAgICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWTsKLSAgICB9OwotCiAgICAgdm9p
ZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAot
ICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwot
CiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3Jt
QXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqKTsKLSAgICB2b2lkIHBsYXRmb3Jt
QXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVt
cEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRT
aXplJiBwYWludFNpemUpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoVWludDhDbGFt
cGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWdu
ZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUp
OworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxvYXQg
bV9zdGRYOwogICAgIGZsb2F0IG1fc3RkWTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGU4M2NmM2I3Y2Q2
MzY4NmYxZjQ0MWU1MjI4ZjJjNTZiNGViNGExODIuLjI4ZDg0NmI0MDM3ZTllZTNmZjE1ZjQ3ZTFi
ZGJiYTBlMDlhMjEyNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMzUsMTAgKzM1LDggQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1GRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSBs
aWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2Nh
bGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQg
c3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UsIFR5cGUgdHlwZSkKK0ZF
TGlnaHRpbmc6OkZFTGlnaHRpbmcoVHlwZSB0eXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xv
ciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1
bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291
cmNlKQogICAgIDogRmlsdGVyRWZmZWN0KHR5cGUpCi0gICAgLCBtX2xpZ2h0aW5nVHlwZShsaWdo
dGluZ1R5cGUpCi0gICAgLCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGlnaHRTb3VyY2UpKQogICAg
ICwgbV9saWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IpCiAgICAgLCBtX3N1cmZhY2VTY2FsZShz
dXJmYWNlU2NhbGUpCiAgICAgLCBtX2RpZmZ1c2VDb25zdGFudChkaWZmdXNlQ29uc3RhbnQpCkBA
IC00Niw2ICs0NCw3IEBAIEZFTGlnaHRpbmc6OkZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlIGxpZ2h0
aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsCiAgICAgLCBtX3NwZWN1bGFy
RXhwb25lbnQoc3BlY3VsYXJFeHBvbmVudCkKICAgICAsIG1fa2VybmVsVW5pdExlbmd0aFgoa2Vy
bmVsVW5pdExlbmd0aFgpCiAgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhZKGtlcm5lbFVuaXRMZW5n
dGhZKQorICAgICwgbV9saWdodFNvdXJjZShXVEZNb3ZlKGxpZ2h0U291cmNlKSkKIHsKIH0KIApA
QCAtODUsNiArODQsOCBAQCBib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZKQogICAgIHJldHVybiB0cnVlOwogfQogCituYW1lc3BhY2Ug
RkVMaWdodGluZ1NvZnR3YXJlIHsKKwogc3RhdGljIGNvbnN0ZXhwciBpbnQgY1BpeGVsU2l6ZSA9
IDQ7CiBzdGF0aWMgY29uc3RleHByIGludCBjQWxwaGFDaGFubmVsT2Zmc2V0ID0gMzsKIHN0YXRp
YyBjb25zdGV4cHIgdWludDhfdCBjT3BhcXVlQWxwaGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Pigw
eEZGKTsKQEAgLTk1LDcgKzk2LDc2IEBAIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFk
aXYzID0gLTEgLyAzLmY7CiBzdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2NCA9IC0x
IC8gNC5mOwogc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMmRpdjMgPSAtMiAvIDMuZjsK
IAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFs
KGludCBvZmZzZXQpIGNvbnN0CitzdHJ1Y3QgQWxwaGFXaW5kb3cgeworICAgIHVpbnQ4X3QgYWxw
aGFbM11bM10geyB9OworICAgIAorICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGxpbmVk
IHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFzaWVyLgorICAgIHVpbnQ4X3QgdG9wTGVm
dCgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzBdOyB9CisgICAgdWludDhf
dCBsZWZ0KCkgY29uc3QgICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMF07IH0KKyAg
ICB1aW50OF90IGJvdHRvbUxlZnQoKSBjb25zdCAgICAgICAgICB7IHJldHVybiBhbHBoYVsyXVsw
XTsgfQorCisgICAgdWludDhfdCB0b3AoKSBjb25zdCAgICAgICAgICAgICAgICAgeyByZXR1cm4g
YWxwaGFbMF1bMV07IH0KKyAgICB1aW50OF90IGNlbnRlcigpIGNvbnN0ICAgICAgICAgICAgICB7
IHJldHVybiBhbHBoYVsxXVsxXTsgfQorICAgIHVpbnQ4X3QgYm90dG9tKCkgY29uc3QgICAgICAg
ICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzFdOyB9CisKKyAgICB2b2lkIHNldFRvcCh1aW50OF90
IHZhbHVlKSAgICAgICAgICB7IGFscGhhWzBdWzFdID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldENl
bnRlcih1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzFdWzFdID0gdmFsdWU7IH0KKyAgICB2
b2lkIHNldEJvdHRvbSh1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJdWzFdID0gdmFsdWU7
IH0KKworICAgIHZvaWQgc2V0VG9wUmlnaHQodWludDhfdCB2YWx1ZSkgICAgIHsgYWxwaGFbMF1b
Ml0gPSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0UmlnaHQodWludDhfdCB2YWx1ZSkgICAgICAgIHsg
YWxwaGFbMV1bMl0gPSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0Qm90dG9tUmlnaHQodWludDhfdCB2
YWx1ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQorCisgICAgc3RhdGljIHZvaWQgc2hpZnRS
b3codWludDhfdCBhbHBoYVszXSkKKyAgICB7CisgICAgICAgIGFscGhhWzBdID0gYWxwaGFbMV07
CisgICAgICAgIGFscGhhWzFdID0gYWxwaGFbMl07CisgICAgfQorICAgIAorICAgIHZvaWQgc2hp
ZnQoKQorICAgIHsKKyAgICAgICAgc2hpZnRSb3coYWxwaGFbMF0pOworICAgICAgICBzaGlmdFJv
dyhhbHBoYVsxXSk7CisgICAgICAgIHNoaWZ0Um93KGFscGhhWzJdKTsKKyAgICB9Cit9OworCitz
dHJ1Y3QgTGlnaHRpbmdEYXRhIHsKKyAgICAvLyBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBvbmx5
IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKKyAgICBGRUxpZ2h0aW5nKiBlZmZlY3Q7CisgICAg
RmlsdGVyRWZmZWN0OjpUeXBlIGZpbHRlclR5cGU7CisgICAgQ29sb3IgbGlnaHRpbmdDb2xvcjsK
KyAgICBmbG9hdCBzdXJmYWNlU2NhbGU7CisgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50OworICAg
IGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQ7CisgICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudDsKKyAg
ICBjb25zdCBMaWdodFNvdXJjZSogbGlnaHRTb3VyY2U7CisgICAgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlKiBvcGVyYXRpbmdDb2xvclNwYWNlOworCisgICAgVWludDhDbGFtcGVkQXJyYXkq
IHBpeGVsczsKKyAgICBpbnQgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IHdp
ZHRoRGVjcmVhc2VkQnlPbmU7CisgICAgaW50IGhlaWdodERlY3JlYXNlZEJ5T25lOworCisgICAg
aW5saW5lIEludFNpemUgdG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICBpbmxp
bmUgSW50U2l6ZSB0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgaW5saW5lIElu
dFNpemUgdG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgaW5saW5lIEludFNp
emUgbGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICBpbmxpbmUgSW50U2l6
ZSBpbnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYpIGNvbnN0OworICAgIGlu
bGluZSBJbnRTaXplIHJpZ2h0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgIGlu
bGluZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgaW5s
aW5lIEludFNpemUgYm90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgIGlubGlu
ZSBJbnRTaXplIGJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworfTsKKworc3Ry
dWN0IFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyB7CisgICAgTGlnaHRpbmdEYXRhIGRh
dGE7CisgICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CisgICAgaW50
IHlTdGFydDsKKyAgICBpbnQgeUVuZDsKK307CisKK2lubGluZSBJbnRTaXplIExpZ2h0aW5nRGF0
YTo6dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogewogICAgIGludCBjZW50ZXIgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7CiAgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAgLTEwOCw3ICsxNzgsNyBA
QCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcExlZnROb3JtYWwo
aW50IG9mZnNldCkgY29uc3QKICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5n
OjpMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoraW5saW5lIElu
dFNpemUgTGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAg
ICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAg
LTEyMyw3ICsxOTMsNyBAQCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6
OnRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAKLWlubGluZSBJbnRT
aXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkg
Y29uc3QKK2lubGluZSBJbnRTaXplIExpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwoaW50IG9m
ZnNldCkgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAgICAgaW50
IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNo
YW5uZWxPZmZzZXQpKTsKQEAgLTEzNiw3ICsyMDYsNyBAQCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0
aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiAgICAg
fTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29s
dW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50U2l6ZSBMaWdodGluZ0RhdGE6
OmxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgY2VudGVyID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwogICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0xNTIsNyArMjIyLDcg
QEAgaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRv
dyYgYWxwaGFXaW5kb3cpIGNvbnN0CitpbmxpbmUgSW50U2l6ZSBMaWdodGluZ0RhdGE6OmludGVy
aW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93JiBhbHBoYVdpbmRvdykgY29uc3QKIHsK
ICAgICBpbnQgcmlnaHRBbHBoYU9mZnNldCA9IG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0OwogICAgIApAQCAtMTgyLDcgKzI1Miw3IEBAIGlubGluZSBJbnRTaXplIEZF
TGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFX
aW5kb3cmCiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjpyaWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoraW5saW5lIEludFNpemUg
TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogewogICAg
IGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwpAQCAt
MTk4LDcgKzI2OCw3IEBAIGlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
cmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKICAgICB9OwogfQogCi1pbmxpbmUg
SW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwoaW50IG9m
ZnNldCkgY29uc3QKK2lubGluZSBJbnRTaXplIExpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdAogewogICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAgICAgaW50IHJp
Z2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAgLTIxMSw3ICsyODEsNyBAQCBpbmxpbmUgSW50U2l6
ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkg
Y29uc3QKICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0Rh
dGE6OmJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoraW5saW5lIEludFNpemUgTGln
aHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQg
bGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAgLTIyNiw3
ICsyOTYsNyBAQCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRv
bVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXpl
IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkg
Y29uc3QKK2lubGluZSBJbnRTaXplIExpZ2h0aW5nRGF0YTo6Ym90dG9tUmlnaHROb3JtYWwoaW50
IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAgICAg
aW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKQEAgLTIzOSwyMSArMzA5LDE2IEBAIGlubGluZSBJbnRTaXplIEZF
TGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29u
c3QKICAgICB9OwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsKGludCBvZmZzZXQsIGNv
bnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3Rvclks
IEludFNpemUgbm9ybWFsMkRWZWN0b3IpCi17Ci0gICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQs
IGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFsMkRWZWN0
b3IsIGRhdGEucGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLX0K
LQotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExp
Z2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNp
emUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFscGhhKQorc3RhdGljIHZvaWQgc2V0UGl4ZWxJbnRl
cm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291
cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0
b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9hdCBhbHBoYSkK
IHsKICAgICBmbG9hdCB6ID0gYWxwaGEgKiBkYXRhLnN1cmZhY2VTY2FsZTsKLSAgICBMaWdodFNv
dXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgbGlnaHRpbmdEYXRhID0gbV9saWdodFNvdXJjZS0+
Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKHBhaW50aW5nRGF0YSwgeCwgeSwgeik7CisgICAgTGln
aHRTb3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIGxpZ2h0aW5nRGF0YSA9IGRhdGEubGlnaHRT
b3VyY2UtPmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShwYWludGluZ0RhdGEsIHgsIHksIHopOwog
CiAgICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKICAgICBpZiAobm9ybWFsMkRWZWN0b3IuaXNaZXJv
KCkpIHsKICAgICAgICAgLy8gTm9ybWFsIHZlY3RvciBpcyAoMCwgMCwgMSkuIFRoaXMgaXMgYSBx
dWl0ZSBmcmVxdWVudCBjYXNlLgotICAgICAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRkVMaWdo
dGluZzo6RGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fZGlm
ZnVzZUNvbnN0YW50ICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSAvIGxpZ2h0aW5nRGF0
YS5saWdodFZlY3Rvckxlbmd0aDsKKyAgICAgICAgaWYgKGRhdGEuZWZmZWN0LT5maWx0ZXJUeXBl
KCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykKKyAgICAgICAgICAg
IGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0YS5saWdo
dFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGg7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7CiAgICAgICAg
ICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKQEAgLTI2MSwxMCArMzI2LDEw
IEBAIHZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBM
aWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpCiAgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRh
LmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAogICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5
VmVjdG9yLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAx
KQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBo
YWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGg7CisgICAgICAgICAgICBpZiAo
ZGF0YS5zcGVjdWxhckV4cG9uZW50ID09IDEpCisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0
aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZl
Y3Rvckxlbmd0aDsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVu
Z3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93ZihoYWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3
YXlWZWN0b3JMZW5ndGgsIG1fc3BlY3VsYXJFeHBvbmVudCk7CisgICAgICAgICAgICAgICAgbGln
aHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoaGFsZndheVZlY3Rvci56
KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoLCBkYXRhLnNwZWN1bGFyRXhwb25lbnQpOwogICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgRmxvYXRQb2ludDNEIG5vcm1hbFZlY3RvciA9IHsK
QEAgLTI3NCw4ICszMzksOCBAQCB2b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwoaW50
IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaQogICAgICAgICB9Owog
ICAgICAgICBmbG9hdCBub3JtYWxWZWN0b3JMZW5ndGggPSBub3JtYWxWZWN0b3IubGVuZ3RoKCk7
CiAKLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdo
dGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIChu
b3JtYWxWZWN0b3IgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxl
bmd0aCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CisgICAgICAgIGlmIChkYXRh
LmVmZmVjdC0+ZmlsdGVyVHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZmdXNlTGln
aHRpbmcpCisgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5kaWZmdXNlQ29uc3RhbnQg
KiAobm9ybWFsVmVjdG9yICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yKSAvIChub3JtYWxWZWN0
b3JMZW5ndGggKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgpOwogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gewogICAgICAgICAg
ICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci54KCksCkBAIC0yODMsMTAgKzM0OCwxMCBA
QCB2b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGln
aHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaQogICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5s
aWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgKICAgICAgICAg
ICAgIH07CiAgICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZl
Y3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMSkK
LSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogKG5v
cm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3
YXlWZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgaWYgKGRhdGEuc3BlY3VsYXJFeHBvbmVudCA9
PSAxKQorICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29uc3Rh
bnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3Ro
ICogaGFsZndheVZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoKG5vcm1hbFZlY3Rv
ciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JM
ZW5ndGgpLCBtX3NwZWN1bGFyRXhwb25lbnQpOworICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5n
dGggPSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKChub3JtYWxWZWN0b3IgKiBoYWxmd2F5
VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3RoKSwgZGF0
YS5zcGVjdWxhckV4cG9uZW50KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzA0LDggKzM2OSwx
MyBAQCB2b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3Qg
TGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaQogICAgIGRhdGEucGl4ZWxzLT5zZXRSYW5nZShw
aXhlbFZhbHVlLCAzLCBvZmZzZXQpOwogfQogCitzdGF0aWMgdm9pZCBzZXRQaXhlbChpbnQgb2Zm
c2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBm
YWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yKQoreworICAgIHNldFBpeGVsSW50ZXJuYWwo
b2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZhY3RvclksIG5vcm1h
bDJEVmVjdG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7Cit9CisKIC8vIFRoaXMgYXBwZWFycyB0byByZWFkIGZyb20gYW5kIHdyaXRlIHRvIHRoZSBz
YW1lIHBpeGVsIGJ1ZmZlciwgYnV0IGl0IG9ubHkgcmVhZHMgdGhlIGFscGhhIGNoYW5uZWwsIGFu
ZCB3cml0ZXMgdGhlIG5vbi1hbHBoYSBjaGFubmVscy4KLXZvaWQgRkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkp
CitzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0
YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBp
bnQgc3RhcnRZLCBpbnQgZW5kWSkKIHsKICAgICAvLyBNYWtlIHN1cmUgc3RhcnRZIGlzID4gMCBz
aW5jZSB3ZSByZWFkIGZyb20gdGhlIHByZXZpb3VzIHJvdyBpbiB0aGUgbG9vcC4KICAgICBBU1NF
UlQoc3RhcnRZKTsKQEAgLTMzNywxNiArNDA3LDE5IEBAIHZvaWQgRkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0
CiAgICAgfQogfQogCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2Vy
KFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyogcGFyYW1ldGVycykKK3N0YXRpYyB2b2lk
IHBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyKFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVy
cyogcGFyYW1ldGVycykKIHsKLSAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlH
ZW5lcmljUGFpbnQocGFyYW1ldGVycy0+ZGF0YSwgcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBw
YXJhbWV0ZXJzLT55U3RhcnQsIHBhcmFtZXRlcnMtPnlFbmQpOworICAgIHBsYXRmb3JtQXBwbHlH
ZW5lcmljUGFpbnQocGFyYW1ldGVycy0+ZGF0YSwgcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBw
YXJhbWV0ZXJzLT55U3RhcnQsIHBhcmFtZXRlcnMtPnlFbmQpOwogfQogCi12b2lkIEZFTGlnaHRp
bmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3Qg
TGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorc3RhdGljIHZvaWQgcGxh
dGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNv
dXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiB7CiAgICAgdW5zaWduZWQgcm93c1Rv
UHJvY2VzcyA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgLSAxOwogICAgIHVuc2lnbmVkIG1h
eE51bVRocmVhZHMgPSByb3dzVG9Qcm9jZXNzIC8gODsKKyAgICAKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwg
ZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icwogICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWRO
dW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKChkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgLSAx
KSAqIHJvd3NUb1Byb2Nlc3MpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFk
cyk7CisKICAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKICAgICAgICAgLy8gSW5p
dGlhbGl6ZSBwYXJhbGxlbCBqb2JzCiAgICAgICAgIFBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5
R2VuZXJpY1BhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBseUdlbmVyaWNXb3Jr
ZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwpAQCAtMzYyLDcgKzQzNSw2IEBAIHZvaWQgRkVMaWdo
dGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25z
dCBMaWdodFNvdXJjCiAgICAgICAgICAgICBpbnQgeVN0YXJ0ID0gMTsKICAgICAgICAgICAgIGZv
ciAoLS1qb2I7IGpvYiA+PSAwOyAtLWpvYikgewogICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBw
bHlHZW5lcmljUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2Ip
OwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOwogICAgICAgICAgICAgICAg
IHBhcmFtcy5kYXRhID0gZGF0YTsKICAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRh
ID0gcGFpbnRpbmdEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy55U3RhcnQgPSB5U3RhcnQ7
CkBAIC0zNzgsNyArNDUwLDcgQEAgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJp
Yyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmMKICAgICBwbGF0Zm9y
bUFwcGx5R2VuZXJpY1BhaW50KGRhdGEsIHBhaW50aW5nRGF0YSwgMSwgZGF0YS5oZWlnaHREZWNy
ZWFzZWRCeU9uZSk7CiB9CiAKLWlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHko
Y29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEpCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseShjb25zdCBM
aWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSkKIHsKICAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUgZXZlbnR1YWxseSBzaG91bGQg
aGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZvcm1zLgogI2lmIENQVShBUk1fTkVPTikg
JiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NPTVBBVElCTEUpCkBAIC0z
ODgsMjYgKzQ2MCwxNCBAQCBpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KGNv
bnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyYwogI2VuZGlmCiB9CiAKLWJv
b2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKK3N0YXRpYyBib29sIGRyYXdMaWdodGluZyhjb25zdCBMaWdo
dGluZ0RhdGEmIGRhdGEpCiB7CiAgICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGlu
Z0RhdGE7Ci0gICAgTGlnaHRpbmdEYXRhIGRhdGE7Ci0KLSAgICAvLyBGSVhNRTogZG8gc29tZXRo
aW5nIGlmIHdpZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4KLSAgICAvLyBUaGUg
VzMgc3BlYyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJl
dHVybnMuCi0gICAgaWYgKHdpZHRoIDw9IDIgfHwgaGVpZ2h0IDw9IDIpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGRhdGEucGl4ZWxzID0gJnBpeGVsczsKLSAgICBkYXRhLnN1cmZhY2VT
Y2FsZSA9IG1fc3VyZmFjZVNjYWxlIC8gMjU1LjBmOwotICAgIGRhdGEud2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemUgPSB3aWR0aCAqIGNQaXhlbFNpemU7Ci0gICAgZGF0YS53aWR0aERlY3JlYXNl
ZEJ5T25lID0gd2lkdGggLSAxOwotICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWln
aHQgLSAxOwotCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2xpZ2h0aW5nQ29sb3IudG9Db2xv
ckNvbXBvbmVudHNJbkNvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBhdXRv
IFtyLCBnLCBiLCBhXSA9IGRhdGEubGlnaHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50c0luQ29s
b3JTcGFjZSgqZGF0YS5vcGVyYXRpbmdDb2xvclNwYWNlKTsKICAgICBwYWludGluZ0RhdGEuaW5p
dGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKIAot
ICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKnRoaXMsIHBhaW50aW5nRGF0YSk7
CisgICAgZGF0YS5saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqZGF0YS5lZmZlY3QsIHBh
aW50aW5nRGF0YSk7CiAKICAgICAvLyBUb3AgbGVmdC4KICAgICBpbnQgb2Zmc2V0ID0gMDsKQEAg
LTQyMiwxMCArNDgyLDEwIEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xh
bXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBzZXRQaXhlbChv
ZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwg
Y0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tTGVmdE5vcm1hbChvZmZzZXQp
KTsKIAogICAgIC8vIEJvdHRvbSByaWdodC4KLSAgICBvZmZzZXQgPSBoZWlnaHQgKiBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAgICBvZmZzZXQgPSAoZGF0
YS5oZWlnaHREZWNyZWFzZWRCeU9uZSArIDEpICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZSAtIGNQaXhlbFNpemU7CiAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0Rh
dGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwg
Y0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tUmlnaHROb3JtYWwob2Zmc2V0
KSk7CiAKLSAgICBpZiAod2lkdGggPj0gMykgeworICAgIGlmIChkYXRhLndpZHRoRGVjcmVhc2Vk
QnlPbmUgPj0gMikgewogICAgICAgICAvLyBUb3Agcm93LgogICAgICAgICBvZmZzZXQgPSBjUGl4
ZWxTaXplOwogICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRC
eU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKQEAgLTQzNyw3ICs0OTcsNyBAQCBib29s
IEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQg
d2lkdGgsIGludCBoZWlnaHQpCiAgICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBh
aW50aW5nRGF0YSwgeCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjFkaXYzLCBj
RmFjdG9yMWRpdjIsIGRhdGEuYm90dG9tUm93Tm9ybWFsKG9mZnNldCkpOwogICAgIH0KIAotICAg
IGlmIChoZWlnaHQgPj0gMykgeworICAgIGlmIChkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID49
IDIpIHsKICAgICAgICAgLy8gTGVmdCBjb2x1bW4uCiAgICAgICAgIG9mZnNldCA9IGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CiAgICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0
YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSkKQEAgLTQ0OSwxMyArNTA5LDEzIEBAIGJvb2wgRkVMaWdodGluZzo6ZHJh
d0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdo
dCkKICAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRh
LndpZHRoRGVjcmVhc2VkQnlPbmUsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRh
LnJpZ2h0Q29sdW1uTm9ybWFsKG9mZnNldCkpOwogICAgIH0KIAotICAgIGlmICh3aWR0aCA+PSAz
ICYmIGhlaWdodCA+PSAzKSB7CisgICAgaWYgKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA+PSAy
ICYmIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPj0gMikgewogICAgICAgICAvLyBJbnRlcmlv
ciBwaXhlbHMuCiAgICAgICAgIHBsYXRmb3JtQXBwbHkoZGF0YSwgcGFpbnRpbmdEYXRhKTsKICAg
ICB9CiAKLSAgICBpbnQgbGFzdFBpeGVsID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZSAqIGhlaWdodDsKLSAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRGlmZnVzZUxpZ2h0aW5nKSB7
CisgICAgaW50IGxhc3RQaXhlbCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKiAo
ZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSArIDEpOworICAgIGlmIChkYXRhLmVmZmVjdC0+Zmls
dGVyVHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcpIHsKICAg
ICAgICAgZm9yIChpbnQgaSA9IGNBbHBoYUNoYW5uZWxPZmZzZXQ7IGkgPCBsYXN0UGl4ZWw7IGkg
Kz0gY1BpeGVsU2l6ZSkKICAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSwgY09wYXF1ZUFs
cGhhKTsKICAgICB9IGVsc2UgewpAQCAtNDcxLDYgKzUzMSw4IEBAIGJvb2wgRkVMaWdodGluZzo6
ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhl
aWdodCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorfSAvLyBuYW1lc3BhY2UgRkVMaWdodGluZ1Nv
ZnR3YXJlCisKIGJvb2wgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwpAQCAtNDkw
LDggKzU1MiwzMCBAQCBib29sIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImKQogICAgIC8vIG91dHB1dCBmb3IgdmFyaW91cyBrZXJuZWxVbml0TGVuZ3Rocywg
YW5kIEkgYW0gbm90IHN1cmUgdGhleSBhcmUgcmVsaWFibGUuCiAgICAgLy8gQW55d2F5LCBmZUNv
bnZvbHZlTWF0cml4IHNob3VsZCBhbHNvIHVzZSB0aGUgaW1wbGVtZW50YXRpb24KIAotICAgIElu
dFNpemUgYWJzb2x1dGVQYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAg
ICBkcmF3TGlnaHRpbmcoZGVzdGluYXRpb25QaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53
aWR0aCgpLCBhYnNvbHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgSW50U2l6ZSBzaXplID0g
SW50U2l6ZShhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CisKKyAgICAvLyBGSVhNRTogZG8g
c29tZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4KKyAgICAv
LyBUaGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBq
dXN0IHJldHVybnMuCisgICAgaWYgKHNpemUud2lkdGgoKSA8PSAyIHx8IHNpemUuaGVpZ2h0KCkg
PD0gMikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBGRUxpZ2h0aW5nU29mdHdhcmU6Okxp
Z2h0aW5nRGF0YSBkYXRhOworICAgIGRhdGEuZWZmZWN0ID0gdGhpczsKKyAgICBkYXRhLmZpbHRl
clR5cGUgPSBmaWx0ZXJUeXBlKCk7CisgICAgZGF0YS5saWdodGluZ0NvbG9yID0gbV9saWdodGlu
Z0NvbG9yOworICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9zdXJmYWNlU2NhbGUgLyAyNTUuMGY7
CisgICAgZGF0YS5kaWZmdXNlQ29uc3RhbnQgPSBtX2RpZmZ1c2VDb25zdGFudDsKKyAgICBkYXRh
LnNwZWN1bGFyQ29uc3RhbnQgPSBtX3NwZWN1bGFyQ29uc3RhbnQ7CisgICAgZGF0YS5zcGVjdWxh
ckV4cG9uZW50ID0gbV9zcGVjdWxhckV4cG9uZW50OworICAgIGRhdGEubGlnaHRTb3VyY2UgPSBt
X2xpZ2h0U291cmNlLnB0cigpOworICAgIGRhdGEub3BlcmF0aW5nQ29sb3JTcGFjZSA9ICZvcGVy
YXRpbmdDb2xvclNwYWNlKCk7CisKKyAgICBkYXRhLnBpeGVscyA9ICZkZXN0aW5hdGlvblBpeGVs
QXJyYXk7CisgICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHNpemUud2lkdGgo
KSAqIEZFTGlnaHRpbmdTb2Z0d2FyZTo6Y1BpeGVsU2l6ZTsKKyAgICBkYXRhLndpZHRoRGVjcmVh
c2VkQnlPbmUgPSBzaXplLndpZHRoKCkgLSAxOworICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlP
bmUgPSBzaXplLmhlaWdodCgpIC0gMTsKKworICAgIEZFTGlnaHRpbmdTb2Z0d2FyZTo6ZHJhd0xp
Z2h0aW5nKGRhdGEpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCmluZGV4IGFkMmZj
MjhmYTllN2Y0YmYyOTEzZDY3Yjk4MDU3ZjhlZWJiMDhkYjIuLjBjZDUwMzM1MzBkOTRmNTJlMTRm
MTYzZTMxYjlmOWJmNDNiMjY1MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCkBAIC0yOSw5ICsyOSw2IEBACiAjaW5j
bHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJMaWdo
dFNvdXJjZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQuaD4KLQotLy8gQ29t
bW9uIGJhc2UgY2xhc3MgZm9yIEZFRGlmZnVzZUxpZ2h0aW5nIGFuZCBGRVNwZWN1bGFyTGlnaHRp
bmcKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NCwxMDEgKzUxLDE3IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBMaWdodFNvdXJjZSYgbGlnaHRTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2xp
Z2h0U291cmNlLmdldCgpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgaW50IHNf
bWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0
IGZvciBwYXJhbGxlbCBqb2JzCi0KLSAgICBlbnVtIExpZ2h0aW5nVHlwZSB7Ci0gICAgICAgIERp
ZmZ1c2VMaWdodGluZywKLSAgICAgICAgU3BlY3VsYXJMaWdodGluZwotICAgIH07Ci0gICAgCi0g
ICAgc3RydWN0IEFscGhhV2luZG93IHsKLSAgICAgICAgdWludDhfdCBhbHBoYVszXVszXSB7IH07
Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgaW1wbGVtZW50YXRpb25zIGFyZSBsaW5lZCB1cCB0
byBtYWtlIGNvbXBhcmluZyBpbmRpY2VzIGVhc2llci4KLSAgICAgICAgdWludDhfdCB0b3BMZWZ0
KCkgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMF1bMF07IH0KLSAgICAgICAgdWlu
dDhfdCBsZWZ0KCkgY29uc3QgICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMF07IH0K
LSAgICAgICAgdWludDhfdCBib3R0b21MZWZ0KCkgY29uc3QgICAgICAgICAgeyByZXR1cm4gYWxw
aGFbMl1bMF07IH0KLQotICAgICAgICB1aW50OF90IHRvcCgpIGNvbnN0ICAgICAgICAgICAgICAg
ICB7IHJldHVybiBhbHBoYVswXVsxXTsgfQotICAgICAgICB1aW50OF90IGNlbnRlcigpIGNvbnN0
ICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVsxXTsgfQotICAgICAgICB1aW50OF90IGJv
dHRvbSgpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsyXVsxXTsgfQotCi0gICAg
ICAgIHZvaWQgc2V0VG9wKHVpbnQ4X3QgdmFsdWUpICAgICAgICAgIHsgYWxwaGFbMF1bMV0gPSB2
YWx1ZTsgfQotICAgICAgICB2b2lkIHNldENlbnRlcih1aW50OF90IHZhbHVlKSAgICAgICB7IGFs
cGhhWzFdWzFdID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRCb3R0b20odWludDhfdCB2YWx1
ZSkgICAgICAgeyBhbHBoYVsyXVsxXSA9IHZhbHVlOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3BS
aWdodCh1aW50OF90IHZhbHVlKSAgICAgeyBhbHBoYVswXVsyXSA9IHZhbHVlOyB9Ci0gICAgICAg
IHZvaWQgc2V0UmlnaHQodWludDhfdCB2YWx1ZSkgICAgICAgIHsgYWxwaGFbMV1bMl0gPSB2YWx1
ZTsgfQotICAgICAgICB2b2lkIHNldEJvdHRvbVJpZ2h0KHVpbnQ4X3QgdmFsdWUpICB7IGFscGhh
WzJdWzJdID0gdmFsdWU7IH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBzaGlmdFJvdyh1aW50OF90
IGFscGhhWzNdKQotICAgICAgICB7Ci0gICAgICAgICAgICBhbHBoYVswXSA9IGFscGhhWzFdOwot
ICAgICAgICAgICAgYWxwaGFbMV0gPSBhbHBoYVsyXTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgdm9pZCBzaGlmdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhh
WzBdKTsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzFdKTsKLSAgICAgICAgICAgIHNoaWZ0
Um93KGFscGhhWzJdKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgTGlnaHRpbmdE
YXRhIHsKLSAgICAgICAgLy8gVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgb25seSByZWFkLW9ubHkg
KFNNUCBzYWZlKSBkYXRhCi0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7Ci0gICAg
ICAgIGZsb2F0IHN1cmZhY2VTY2FsZTsKLSAgICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplOwotICAgICAgICBpbnQgd2lkdGhEZWNyZWFzZWRCeU9uZTsKLSAgICAgICAgaW50IGhl
aWdodERlY3JlYXNlZEJ5T25lOwotCi0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcFJvd05vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgdG9wUmlnaHROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5O
b3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGludGVyaW9y
Tm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93JikgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJ
bnRTaXplIHJpZ2h0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxp
bmUgSW50U2l6ZSBib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBp
bmxpbmUgSW50U2l6ZSBib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAg
IGlubGluZSBJbnRTaXplIGJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAg
IH07Ci0KLSAgICBzdHJ1Y3QgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzIHsKLSAgICAg
ICAgRkVMaWdodGluZyogZmlsdGVyOwotICAgICAgICBMaWdodGluZ0RhdGEgZGF0YTsKLSAgICAg
ICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgICAgIGludCB5
U3RhcnQ7Ci0gICAgICAgIGludCB5RW5kOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBwbGF0
Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcihQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqKTsK
LSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5TmVvbldvcmtlcihGRUxpZ2h0aW5nUGFpbnRp
bmdEYXRhRm9yTmVvbiopOwotCi0gICAgRkVMaWdodGluZyhMaWdodGluZ1R5cGUsIGNvbnN0IENv
bG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25z
dGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRT
b3VyY2U+JiYsIFR5cGUpOwotCi0gICAgYm9vbCBkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJy
YXkmLCBpbnQsIGludCk7Ci0KLSAgICB2b2lkIHNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExp
Z2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50
IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yKTsK
LSAgICB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRh
JiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQg
ZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3IsIGZsb2F0IGFscGhh
KTsKKyAgICBGRUxpZ2h0aW5nKFR5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9h
dCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25z
dGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYpOwogCiAgICAgdm9pZCBk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFi
c29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KIAog
ICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmKTsKLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNQ
YWludChjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRh
JiwgaW50IHN0YXJ0WCwgaW50IHN0YXJ0WSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJp
Yyhjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7
Ci0KICNpZiBDUFUoQVJNX05FT04pICYmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVS
KEdDQ19DT01QQVRJQkxFKQogICAgIHN0YXRpYyBpbnQgZ2V0UG93ZXJDb2VmZmljaWVudHMoZmxv
YXQgZXhwb25lbnQpOwogICAgIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uKGNvbnN0IExp
Z2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKICNlbmRpZgog
Ci0gICAgTGlnaHRpbmdUeXBlIG1fbGlnaHRpbmdUeXBlOwotICAgIFJlZjxMaWdodFNvdXJjZT4g
bV9saWdodFNvdXJjZTsKLQogICAgIENvbG9yIG1fbGlnaHRpbmdDb2xvcjsKICAgICBmbG9hdCBt
X3N1cmZhY2VTY2FsZTsKICAgICBmbG9hdCBtX2RpZmZ1c2VDb25zdGFudDsKQEAgLTE1Niw3ICs2
OSw3IEBAIHByb3RlY3RlZDoKICAgICBmbG9hdCBtX3NwZWN1bGFyRXhwb25lbnQ7CiAgICAgZmxv
YXQgbV9rZXJuZWxVbml0TGVuZ3RoWDsKICAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhZOwor
ICAgIFJlZjxMaWdodFNvdXJjZT4gbV9saWdodFNvdXJjZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IDQzMjg4ZDllNTkyZjAyODI4Mzg0MmU3
OTI0YjcxMTVmYzhmNmMyNzYuLjA5ZjhlZTJjMTE0OGJiNThlNDkyMjc3NmRhOTBhYTRmZGEyNjA1
OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKQEAgLTgzLDIzICs4Myw0MCBAQCB2b2lkIEZFTW9ycGhv
bG9neTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAg
ICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKIH0K
IAorbmFtZXNwYWNlIEZFTW9ycGhvbG9neVNvZnR3YXJlIHsKKworc3RydWN0IFBhaW50aW5nRGF0
YSB7CisgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlOworICAgIGludCByYWRpdXNYOwor
ICAgIGludCByYWRpdXNZOworICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5KiBzcmNQaXhlbEFy
cmF5OworICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5OworICAgIGludCB3aWR0
aDsKKyAgICBpbnQgaGVpZ2h0OworfTsKKworc3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJz
IHsKKyAgICBpbnQgc3RhcnRZOworICAgIGludCBlbmRZOworICAgIGNvbnN0IFBhaW50aW5nRGF0
YSogcGFpbnRpbmdEYXRhOworfTsKKwogc3RhdGljIGlubGluZSBpbnQgcGl4ZWxBcnJheUluZGV4
KGludCB4LCBpbnQgeSwgaW50IHdpZHRoKQogewogICAgIHJldHVybiAoeSAqIHdpZHRoICsgeCkg
KiA0OwogfQogCi1pbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xvckNv
bXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkKK3N0YXRpYyBp
bmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xvckNvbXBvbmVudHNmcm9t
UGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkKIHsKICAgICByZXR1cm4gYXNDb2xv
ckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkpOwogfQogCi1pbmxpbmUgUGFja2VkQ29sb3I6OlJH
QkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiYgY29tcG9uZW50cykKK3N0YXRpYyBpbmxpbmUgUGFja2VkQ29sb3I6OlJH
QkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiYgY29tcG9uZW50cykKIHsKICAgICByZXR1cm4gUGFja2VkQ29sb3I6OlJH
QkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KGNvbXBvbmVudHMpIH07CiB9
CiAKLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZT4KLUFMV0FZU19JTkxJTkUg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNvbnN0IENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBiKQor
c3RhdGljIEFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4
KGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+JiBiLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCiB7CiAgICAg
aWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQogICAgICAgICByZXR1cm4g
cGVyQ29tcG9uZW50TWluKGEsIGIpOwpAQCAtMTA3LDQ3ICsxMjQsMjkgQEAgQUxXQVlTX0lOTElO
RSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QKICAgICByZXR1cm4gcGVyQ29tcG9uZW50TWF4KGEsIGIpOwogfQogCi10ZW1w
bGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgp
CitzdGF0aWMgQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1u
RXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBp
bnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5
cGUpCiB7CiAgICAgYXV0byBleHRyZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxW
YWx1ZShQYWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
Kj4oc3JjUGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3aWR0
aCkpIH0pOwogCiAgICAgZm9yIChpbnQgeSA9IHlTdGFydCArIDE7IHkgPCB5RW5kOyArK3kpIHsK
ICAgICAgICAgYXV0byBwaXhlbCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQ
YWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3Jj
UGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKSB9KTsKLSAg
ICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwgcGl4ZWwpOworICAgICAg
ICBleHRyZW11bSA9IG1pbk9yTWF4KGV4dHJlbXVtLCBwaXhlbCwgdHlwZSk7CiAgICAgfQogICAg
IHJldHVybiBleHRyZW11bTsKIH0KIAotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVs
QXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJB
VE9SX0VST0RFKQotICAgICAgICByZXR1cm4gY29sdW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZX09Q
RVJBVE9SX0VST0RFPihzcmNQaXhlbEFycmF5LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKLQot
ICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihz
cmNQaXhlbEFycmF5LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKLX0KLQogdXNpbmcgQ29sdW1u
RXh0cmVtYSA9IFZlY3RvcjxDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4sIDE2PjsKIAotdGVt
cGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNv
bXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYg
a2VybmVsKQorc3RhdGljIEFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSB0eXBlKQogewogICAgIGF1dG8gZXh0cmVtdW0gPSBrZXJuZWxbMF07CiAgICAg
Zm9yIChzaXplX3QgaSA9IDE7IGkgPCBrZXJuZWwuc2l6ZSgpOyArK2kpCi0gICAgICAgIGV4dHJl
bXVtID0gbWluT3JNYXg8dHlwZT4oZXh0cmVtdW0sIGtlcm5lbFtpXSk7CisgICAgICAgIGV4dHJl
bXVtID0gbWluT3JNYXgoZXh0cmVtdW0sIGtlcm5lbFtpXSwgdHlwZSk7CiAKICAgICByZXR1cm4g
ZXh0cmVtdW07CiB9CiAKLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSB0eXBlKQotewotICAgIGlmICh0eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRP
Ul9FUk9ERSkKLSAgICAgICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVS
QVRPUl9FUk9ERT4oa2VybmVsKTsKLQotICAgIHJldHVybiBrZXJuZWxFeHRyZW11bTxGRU1PUlBI
T0xPR1lfT1BFUkFUT1JfRElMQVRFPihrZXJuZWwpOwotfQotCi12b2lkIEZFTW9ycGhvbG9neTo6
cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCBzdGFydFksIGludCBlbmRZKQorc3RhdGljIHZvaWQgcGxhdG9mcm1BcHBseUdlbmVyaWMoY29u
c3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBzdGFydFksIGludCBlbmRZKQogewog
ICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKIApAQCAtMTczLDI4ICsxNzIsMjggQEAgdm9pZCBG
RU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhLCBpbnQgc3QKIAogICAgICAgICAvLyBXZSBzdGFydCBhdCB0aGUgbGVmdCBlZGdl
LCBzbyBjb21wdXRlIGV4dHJlbWUgZm9yIHRoZSByYWRpdXNYIGNvbHVtbnMuCiAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgcmFkaXVzWDsgKyt4KQotICAgICAgICAgICAgZXh0cmVtYS5hcHBl
bmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVz
RW5kLCB3aWR0aCwgbV90eXBlKSk7CisgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5F
eHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRo
LCBwYWludGluZ0RhdGEudHlwZSkpOwogCiAgICAgICAgIC8vIEtlcm5lbCBpcyBmaWxsZWQsIGdl
dCBleHRyZW1hIG9mIG5leHQgY29sdW1uCiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7ICsreCkgewogICAgICAgICAgICAgaWYgKHggPCB3aWR0aCAtIHJhZGl1c1gpCi0gICAgICAg
ICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCAr
IHJhZGl1c1gsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgsIG1fdHlwZSkpOworICAg
ICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXks
IHggKyByYWRpdXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBwYWludGluZ0Rh
dGEudHlwZSkpOwogCiAgICAgICAgICAgICBpZiAoeCA+IHJhZGl1c1gpCiAgICAgICAgICAgICAg
ICAgZXh0cmVtYS5yZW1vdmUoMCk7CiAKICAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0UGl4ZWwg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhl
bEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKTsKLSAgICAgICAgICAgICpkZXN0UGl4ZWwgPSBtYWtl
UGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoa2VybmVsRXh0cmVtdW0oZXh0cmVtYSwgbV90
eXBlKSkudmFsdWU7CisgICAgICAgICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9t
Q29sb3JDb21wb25lbnRzKGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEsIHBhaW50aW5nRGF0YS50eXBl
KSkudmFsdWU7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbSkKK3N0YXRpYyB2
b2lkIHBsYXRvZnJtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBhcmFtKQog
ewotICAgIHBhcmFtLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRp
bmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7CisgICAgcGxhdG9mcm1BcHBseUdl
bmVyaWMoKnBhcmFtLT5wYWludGluZ0RhdGEsIHBhcmFtLT5zdGFydFksIHBhcmFtLT5lbmRZKTsK
IH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHkoY29uc3QgUGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEpCitzdGF0aWMgdm9pZCBwbGF0b2ZybUFwcGx5KGNvbnN0IFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhKQogewogICAgIC8vIEVtcGlyaWNhbGx5LCBydW50aW1lIGlzIGFw
cHJveGltYXRlbHkgbGluZWFyIG92ZXIgcmVhc29uYWJsZSBrZXJuZWwgc2l6ZXMgd2l0aCBhIHNs
b3BlIG9mIGFib3V0IDAuNjUuCiAgICAgZmxvYXQga2VybmVsRmFjdG9yID0gc3FydChwYWludGlu
Z0RhdGEucmFkaXVzWCAqIHBhaW50aW5nRGF0YS5yYWRpdXNZKSAqIDAuNjU7CkBAIC0yMDQsNyAr
MjAzLDcgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHkoY29uc3QgUGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEpCiAgICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHBhaW50aW5n
RGF0YS5oZWlnaHQgLyA4OwogICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6
Om1pbjx1bnNpZ25lZD4oKHBhaW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQg
KiBrZXJuZWxGYWN0b3IpIC8gbWluaW1hbEFyZWEsIG1heE51bVRocmVhZHMpOwogICAgIGlmIChv
cHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBQYXJhbGxlbEpvYnM8UGxhdGZvcm1B
cHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0
Zm9ybUFwcGx5V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKKyAgICAgICAgUGFyYWxsZWxK
b2JzPFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJnBsYXRvZnJtQXBwbHlX
b3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwogICAgICAgICBhdXRvIG51bU9mVGhyZWFkcyA9
IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKICAgICAgICAgaWYgKG51bU9mVGhyZWFkcyA+
IDEpIHsKICAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAiam9iU2l6ZSItc2l6ZWQg
am9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkgbGFyZ2Vy
IHNpbmNlCkBAIC0yMTQsNyArMjEzLDYgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBw
bHkoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiAgICAgICAgICAgICBpbnQgY3Vy
cmVudFkgPSAwOwogICAgICAgICAgICAgZm9yIChpbnQgam9iID0gbnVtT2ZUaHJlYWRzIC0gMTsg
am9iID49IDA7IC0tam9iKSB7CiAgICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseVBhcmFtZXRl
cnMmIHBhcmFtID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAg
IHBhcmFtLmZpbHRlciA9IHRoaXM7CiAgICAgICAgICAgICAgICAgcGFyYW0uc3RhcnRZID0gY3Vy
cmVudFk7CiAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/
IGpvYlNpemUgKyAxIDogam9iU2l6ZTsKICAgICAgICAgICAgICAgICBwYXJhbS5lbmRZID0gY3Vy
cmVudFk7CkBAIC0yMjYsMTkgKzIyNCwxNiBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1B
cHBseShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKICAgICAgICAgLy8gRmFsbGJh
Y2sgdG8gc2luZ2xlIHRocmVhZCBtb2RlbAogICAgIH0KIAotICAgIHBsYXRmb3JtQXBwbHlHZW5l
cmljKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRpbmdEYXRhLmhlaWdodCk7CisgICAgcGxhdG9mcm1B
cHBseUdlbmVyaWMocGFpbnRpbmdEYXRhLCAwLCBwYWludGluZ0RhdGEuaGVpZ2h0KTsKIH0KIAot
Ym9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkc3RQaXhlbEFycmF5LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGludCByYWRpdXNY
LCBpbnQgcmFkaXVzWSkKK3N0YXRpYyBib29sIGlzRGVnZW5lcmF0ZShpbnQgcmFkaXVzWCwgaW50
IHJhZGl1c1kpCiB7Ci0gICAgaWYgKHJhZGl1c1ggPCAwIHx8IHJhZGl1c1kgPCAwIHx8ICghcmFk
aXVzWCAmJiAhcmFkaXVzWSkpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOwotICAgICAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZHN0UGl4ZWxBcnJh
eSwgaW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiByYWRpdXNYIDwgMCB8fCBy
YWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpOwogfQogCit9IC8vIG5hbWVzcGFj
ZSBGRU1vcnBob2xvZ3lTb2Z0d2FyZQorCiBib29sIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewogICAgIEZpbHRlckVmZmVjdCogaW4g
PSBpbnB1dEVmZmVjdCgwKTsKQEAgLTI1NCw4ICsyNDksMTAgQEAgYm9vbCBGRU1vcnBob2xvZ3k6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBJbnRSZWN0
IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIAogICAgIEludFNpemUgcmFkaXVzID0gZmxvb3JlZElu
dFNpemUoRmxvYXRTaXplKG1fcmFkaXVzWCwgbV9yYWRpdXNZKSk7Ci0gICAgaWYgKHBsYXRmb3Jt
QXBwbHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3Qs
IHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKQorICAgIGlmIChGRU1vcnBob2xvZ3lT
b2Z0d2FyZTo6aXNEZWdlbmVyYXRlKHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKSB7
CisgICAgICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJy
YXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJl
bXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCkBAIC0yNjUsMTggKzI2MiwyMiBAQCBib29s
IEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQogICAgIGludCByYWRpdXNYID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAt
IDEsIHJhZGl1cy53aWR0aCgpKTsKICAgICBpbnQgcmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVjdERy
YXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVzLmhlaWdodCgpKTsKIAotICAgIGlmIChwbGF0
Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdS
ZWN0LCByYWRpdXNYLCByYWRpdXNZKSkKKyAgICBpZiAoRkVNb3JwaG9sb2d5U29mdHdhcmU6Omlz
RGVnZW5lcmF0ZShyYWRpdXNYLCByYWRpdXNZKSkgeworICAgICAgICBpbi0+Y29weVByZW11bHRp
cGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIEZFTW9ycGhvbG9neVNvZnR3YXJlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOworICAg
IHBhaW50aW5nRGF0YS50eXBlID0gbV90eXBlOworICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0g
Y2VpbGYocmFkaXVzWCk7CisgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1kgPSBjZWlsZihyYWRpdXNZ
KTsKICAgICAKLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwogICAgIHBhaW50aW5nRGF0
YS5zcmNQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxBcnJheS5nZXQoKTsKICAgICBwYWludGluZ0Rh
dGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CiAgICAgcGFpbnRpbmdE
YXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSk7CiAgICAgcGFpbnRp
bmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpKTsKLSAgICBw
YWludGluZ0RhdGEucmFkaXVzWCA9IGNlaWxmKHJhZGl1c1gpOwotICAgIHBhaW50aW5nRGF0YS5y
YWRpdXNZID0gY2VpbGYocmFkaXVzWSk7CiAKLSAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0
YSk7CisgICAgRkVNb3JwaG9sb2d5U29mdHdhcmU6OnBsYXRvZnJtQXBwbHkocGFpbnRpbmdEYXRh
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKaW5kZXggMjg4ZWVhMGUxZTIx
M2NlMzJkODE3MzBiNjE5OWRkNWUwNDFjOTYzZC4uNTg5NTAyYTZmNWJjNmQyMGI4ZTE5ZWE5ZmY1
N2NhNzg5MjVkODI2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCkBAIC01MywyOSArNTMsNiBAQCBwcml2YXRl
OgogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4
dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBib29s
IHBsYXRmb3JtQXBwbHlEZWdlbmVyYXRlKFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5
LCBjb25zdCBJbnRSZWN0JiBpbWFnZVJlY3QsIGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSk7Ci0K
LSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJy
YXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFy
cmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIGlu
dCByYWRpdXNYOwotICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICB9OwotCi0gICAgc3RydWN0IFBs
YXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVNb3JwaG9sb2d5KiBmaWx0ZXI7Ci0g
ICAgICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgICAgICBjb25zdCBQYWlu
dGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgcGxhdGZv
cm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwotCi0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdl
bmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwotCiAgICAg
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtX3R5cGU7CiAgICAgZmxvYXQgbV9yYWRpdXNYOwogICAg
IGZsb2F0IG1fcmFkaXVzWTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAppbmRleCA2MDdh
NzFjNGNmMzVmNTZkNGEyMmZjZjUwMjZmMTQyYjUxN2U3MGQ3Li5hYzYyYjEyMDcwN2RjNmQ5ZjQ1
MGJiNWNiOTEzNzkwMDkwNGVhOTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCkBA
IC0zMyw3ICszMyw3IEBAIFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJMaWdodGlu
Zzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmCiB9CiAKIEZFU3BlY3VsYXJM
aWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFy
RXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdodGluZyhTcGVj
dWxhckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29u
c3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVu
Z3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVTcGVjdWxh
ckxpZ2h0aW5nKQorICAgIDogRkVMaWdodGluZyhGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFU3BlY3Vs
YXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0
YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0
aFksIFdURk1vdmUobGlnaHRTb3VyY2UpKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXgg
ZGE0NzRmNDEwNWYxNjRlNGRkZWU0OGI2Y2FiOWRiOGY4M2ExYTdmZS4uNTU3NzFhZDg5ODQxYjM1
Zjc5MjU1MGY3ZDVkNzE0ZmY1ODE1MWFmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtMzQsMjAg
KzM0LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vKgotICAgIFByb2R1Y2VzIHJlc3Vs
dHMgaW4gdGhlIHJhbmdlIFsxLCAyKiozMSAtIDJdLiBBbGdvcml0aG0gaXM6Ci0gICAgciA9IChh
ICogcikgbW9kIG0gd2hlcmUgYSA9IHJhbmRBbXBsaXR1ZGUgPSAxNjgwNyBhbmQKLSAgICBtID0g
cmFuZE1heGltdW0gPSAyKiozMSAtIDEgPSAyMTQ3NDgzNjQ3LCByID0gc2VlZC4KLSAgICBTZWUg
W1BhcmsgJiBNaWxsZXJdLCBDQUNNIHZvbC4gMzEgbm8uIDEwIHAuIDExOTUsIE9jdC4gMTk4OAot
ICAgIFRvIHRlc3Q6IHRoZSBhbGdvcml0aG0gc2hvdWxkIHByb2R1Y2UgdGhlIHJlc3VsdCAxMDQz
NjE4MDY1Ci0gICAgYXMgdGhlIDEwLDAwMHRoIGdlbmVyYXRlZCBudW1iZXIgaWYgdGhlIG9yaWdp
bmFsIHNlZWQgaXMgMS4KLSovCi1zdGF0aWMgY29uc3QgaW50IHNfcGVybGluTm9pc2UgPSA0MDk2
Owotc3RhdGljIGNvbnN0IGxvbmcgc19yYW5kTWF4aW11bSA9IDIxNDc0ODM2NDc7IC8vIDIqKjMx
IC0gMQotc3RhdGljIGNvbnN0IGludCBzX3JhbmRBbXBsaXR1ZGUgPSAxNjgwNzsgLy8gNyoqNTsg
cHJpbWl0aXZlIHJvb3Qgb2YgbQotc3RhdGljIGNvbnN0IGludCBzX3JhbmRRID0gMTI3NzczOyAv
LyBtIC8gYQotc3RhdGljIGNvbnN0IGludCBzX3JhbmRSID0gMjgzNjsgLy8gbSAlIGEKLQogUmVm
PEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoVHVyYnVsZW5jZVR5cGUgdHlwZSwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZl
cywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKIHsKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGRVR1cmJ1bGVuY2UodHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBu
dW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOwpAQCAtMTEyLDE4ICs5OCw3OCBAQCBib29s
IEZFVHVyYnVsZW5jZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0Y2gpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK25hbWVzcGFjZSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZSB7CisKIC8vIFRoZSB0dXJi
dWxlbmNlIGNhbGN1bGF0aW9uIGNvZGUgaXMgYW4gYWRhcHRlZCB2ZXJzaW9uIG9mIHdoYXQgYXBw
ZWFycyBpbiB0aGUgU1ZHIDEuMSBzcGVjaWZpY2F0aW9uOgogLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZQogCi0vLyBDb21wdXRlIHBzZXVkbyBy
YW5kb20gbnVtYmVyLgotaW5saW5lIGxvbmcgRkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OnJh
bmRvbSgpCi17Ci0gICAgbG9uZyByZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUgKiAoc2VlZCAlIHNf
cmFuZFEpIC0gc19yYW5kUiAqIChzZWVkIC8gc19yYW5kUSk7Ci0gICAgaWYgKHJlc3VsdCA8PSAw
KQotICAgICAgICByZXN1bHQgKz0gc19yYW5kTWF4aW11bTsKLSAgICBzZWVkID0gcmVzdWx0Owot
ICAgIHJldHVybiByZXN1bHQ7Ci19CisvKgorICAgIFByb2R1Y2VzIHJlc3VsdHMgaW4gdGhlIHJh
bmdlIFsxLCAyKiozMSAtIDJdLiBBbGdvcml0aG0gaXM6CisgICAgciA9IChhICogcikgbW9kIG0g
d2hlcmUgYSA9IHJhbmRBbXBsaXR1ZGUgPSAxNjgwNyBhbmQKKyAgICBtID0gcmFuZE1heGltdW0g
PSAyKiozMSAtIDEgPSAyMTQ3NDgzNjQ3LCByID0gc2VlZC4KKyAgICBTZWUgW1BhcmsgJiBNaWxs
ZXJdLCBDQUNNIHZvbC4gMzEgbm8uIDEwIHAuIDExOTUsIE9jdC4gMTk4OAorICAgIFRvIHRlc3Q6
IHRoZSBhbGdvcml0aG0gc2hvdWxkIHByb2R1Y2UgdGhlIHJlc3VsdCAxMDQzNjE4MDY1CisgICAg
YXMgdGhlIDEwLDAwMHRoIGdlbmVyYXRlZCBudW1iZXIgaWYgdGhlIG9yaWdpbmFsIHNlZWQgaXMg
MS4KKyovCitzdGF0aWMgY29uc3QgaW50IHNfcGVybGluTm9pc2UgPSA0MDk2Oworc3RhdGljIGNv
bnN0IGxvbmcgc19yYW5kTWF4aW11bSA9IDIxNDc0ODM2NDc7IC8vIDIqKjMxIC0gMQorc3RhdGlj
IGNvbnN0IGludCBzX3JhbmRBbXBsaXR1ZGUgPSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJv
b3Qgb2YgbQorc3RhdGljIGNvbnN0IGludCBzX3JhbmRRID0gMTI3NzczOyAvLyBtIC8gYQorc3Rh
dGljIGNvbnN0IGludCBzX3JhbmRSID0gMjgzNjsgLy8gbSAlIGEKKworc3RhdGljIGNvbnN0IGlu
dCBzX2Jsb2NrU2l6ZSA9IDI1NjsKK3N0YXRpYyBjb25zdCBpbnQgc19ibG9ja01hc2sgPSBzX2Js
b2NrU2l6ZSAtIDE7CisKK3N0cnVjdCBQYWludGluZ0RhdGEgeworICAgIFBhaW50aW5nRGF0YShU
dXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1
ZW5jeVksIGludCBudW1PY3RhdmVzLCBsb25nIHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMsIGNvbnN0
IEludFNpemUmIHBhaW50aW5nU2l6ZSkKKyAgICAgICAgOiB0eXBlKHR5cGUpCisgICAgICAgICwg
YmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCisgICAgICAgICwgYmFzZUZyZXF1ZW5jeVko
YmFzZUZyZXF1ZW5jeVkpCisgICAgICAgICwgbnVtT2N0YXZlcyhudW1PY3RhdmVzKQorICAgICAg
ICAsIHNlZWQoc2VlZCkKKyAgICAgICAgLCBzdGl0Y2hUaWxlcyhzdGl0Y2hUaWxlcykKKyAgICAg
ICAgLCBwYWludGluZ1NpemUocGFpbnRpbmdTaXplKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBD
b21wdXRlIHBzZXVkbyByYW5kb20gbnVtYmVyLgorICAgIGlubGluZSBsb25nIHJhbmRvbSgpCisg
ICAgeworICAgICAgICBsb25nIHJlc3VsdCA9IHNfcmFuZEFtcGxpdHVkZSAqIChzZWVkICUgc19y
YW5kUSkgLSBzX3JhbmRSICogKHNlZWQgLyBzX3JhbmRRKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8
PSAwKQorICAgICAgICAgICAgcmVzdWx0ICs9IHNfcmFuZE1heGltdW07CisgICAgICAgIHNlZWQg
PSByZXN1bHQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgVHVyYnVsZW5j
ZVR5cGUgdHlwZTsKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WDsKKyAgICBmbG9hdCBiYXNlRnJl
cXVlbmN5WTsKKyAgICBpbnQgbnVtT2N0YXZlczsKKyAgICBsb25nIHNlZWQ7CisgICAgYm9vbCBz
dGl0Y2hUaWxlczsKKyAgICBJbnRTaXplIHBhaW50aW5nU2l6ZTsKKworICAgIGludCBsYXR0aWNl
U2VsZWN0b3JbMiAqIHNfYmxvY2tTaXplICsgMl07CisgICAgZmxvYXQgZ3JhZGllbnRbNF1bMiAq
IHNfYmxvY2tTaXplICsgMl1bMl07Cit9OworCitzdHJ1Y3QgU3RpdGNoRGF0YSB7CisgICAgaW50
IHdpZHRoIHsgMCB9OyAvLyBIb3cgbXVjaCB0byBzdWJ0cmFjdCB0byB3cmFwIGZvciBzdGl0Y2hp
bmcuCisgICAgaW50IHdyYXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCisgICAg
aW50IGhlaWdodCB7IDAgfTsKKyAgICBpbnQgd3JhcFkgeyAwIH07Cit9OworCitzdHJ1Y3QgUGxh
dGZvcm1BcHBseVBhcmFtZXRlcnMgeworICAgIEludFJlY3QgZmlsdGVyUmVnaW9uOworICAgIEZs
b2F0U2l6ZSBmaWx0ZXJTY2FsZTsKKyAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheTsK
KyAgICBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKKyAgICBTdGl0Y2hEYXRhIHN0aXRjaERh
dGE7CisgICAgaW50IHN0YXJ0WTsKKyAgICBpbnQgZW5kWTsKK307CiAKIGlubGluZSBmbG9hdCBz
bW9vdGhDdXJ2ZShmbG9hdCB0KQogewpAQCAtMTM1LDkgKzE4MSw5IEBAIGlubGluZSBmbG9hdCBs
aW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0IGIpCiAgICAgcmV0dXJu
IGEgKyB0ICogKGIgLSBhKTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2U6OmluaXRQYWludChQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3N0YXRpYyBQYWludGluZ0RhdGEgaW5pdFBhaW50aW5n
RGF0YShUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBsb25nIHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMs
IGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSkKIHsKLSAgICBmbG9hdCBub3JtYWxpemF0aW9u
RmFjdG9yOworICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEodHlwZSwgYmFzZUZyZXF1ZW5j
eVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcywgcGFpbnRp
bmdTaXplKTsKIAogICAgIC8vIFRoZSBzZWVkIHZhbHVlIGNsYW1wIHRvIHRoZSByYW5nZSBbMSwg
c19yYW5kTWF4aW11bSAtIDFdLgogICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA8PSAwKQpAQCAt
MTU0LDcgKzIwMCw3IEBAIHZvaWQgRkVUdXJidWxlbmNlOjppbml0UGFpbnQoUGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEpCiAgICAgICAgICAgICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNf
YmxvY2tTaXplKSAvIHNfYmxvY2tTaXplOwogICAgICAgICAgICAgICAgIGdyYWRpZW50WzFdID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tT
aXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKICAgICAgICAgICAgIH0gd2hpbGUg
KCFncmFkaWVudFswXSAmJiAhZ3JhZGllbnRbMV0pOwotICAgICAgICAgICAgbm9ybWFsaXphdGlv
bkZhY3RvciA9IHN0ZDo6aHlwb3QoZ3JhZGllbnRbMF0sIGdyYWRpZW50WzFdKTsKKyAgICAgICAg
ICAgIGZsb2F0IG5vcm1hbGl6YXRpb25GYWN0b3IgPSBzdGQ6Omh5cG90KGdyYWRpZW50WzBdLCBn
cmFkaWVudFsxXSk7CiAgICAgICAgICAgICBncmFkaWVudFswXSAvPSBub3JtYWxpemF0aW9uRmFj
dG9yOwogICAgICAgICAgICAgZ3JhZGllbnRbMV0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKICAg
ICAgICAgfQpAQCAtMTc2LDExICsyMjIsMTMgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmluaXRQYWlu
dChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKICAgICAgICAgICAgIHBhaW50aW5nRGF0YS5n
cmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6ZSArIGldWzFdID0gcGFpbnRpbmdEYXRhLmdyYWRp
ZW50W2NoYW5uZWxdW2ldWzFdOwogICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHBhaW50
aW5nRGF0YTsKIH0KIAotRkVUdXJidWxlbmNlOjpTdGl0Y2hEYXRhIEZFVHVyYnVsZW5jZTo6Y29t
cHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZs
b2F0JiBiYXNlRnJlcXVlbmN5WSkgY29uc3QKK3N0YXRpYyBTdGl0Y2hEYXRhIGNvbXB1dGVTdGl0
Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFz
ZUZyZXF1ZW5jeVksIGJvb2wgc3RpdGNoVGlsZXMpCiB7Ci0gICAgaWYgKCFtX3N0aXRjaFRpbGVz
KQorICAgIGlmICghc3RpdGNoVGlsZXMpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBmbG9h
dCB0aWxlV2lkdGggPSB0aWxlU2l6ZS53aWR0aCgpOwpAQCAtMjE3LDcgKzI2NSw3IEBAIEZFVHVy
YnVsZW5jZTo6U3RpdGNoRGF0YSBGRVR1cmJ1bGVuY2U6OmNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6
ZSB0aWxlU2l6ZSwgZmxvYXQmCiB9CiAKIC8vIFRoaXMgaXMgdGFrZW4gMToxIGZyb20gU1ZHIHNw
ZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VF
bGVtZW50LgotQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQo
Y29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRj
aERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKSBjb25zdAorc3RhdGljIENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gbm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgY29uc3QgU3RpdGNoRGF0YSYgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgbm9p
c2VWZWN0b3IpCiB7CiAgICAgc3RydWN0IE5vaXNlUG9zaXRpb24gewogICAgICAgICBpbnQgaW5k
ZXg7IC8vIGJ4MCwgYnkwIGluIHRoZSBzcGVjIHRleHQuCkBAIC0yNTQsNyArMzAyLDcgQEAgQ29s
b3JDb21wb25lbnRzPGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY29uc3QgUGFpbnRp
bmdEYXRhJiBwYWludGluZ0RhdGEKICAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWShub2lzZVZlY3Rv
ci55KCkpOwogCiAgICAgLy8gSWYgc3RpdGNoaW5nLCBhZGp1c3QgbGF0dGljZSBwb2ludHMgYWNj
b3JkaW5nbHkuCi0gICAgaWYgKG1fc3RpdGNoVGlsZXMpIHsKKyAgICBpZiAocGFpbnRpbmdEYXRh
LnN0aXRjaFRpbGVzKSB7CiAgICAgICAgIG5vaXNlWC5zdGl0Y2goc3RpdGNoRGF0YS53aWR0aCwg
c3RpdGNoRGF0YS53cmFwWCk7CiAgICAgICAgIG5vaXNlWS5zdGl0Y2goc3RpdGNoRGF0YS5oZWln
aHQsIHN0aXRjaERhdGEud3JhcFkpOwogICAgIH0KQEAgLTMzMywxMyArMzgxLDEzIEBAIHN0YXRp
YyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IHRvSW50QmFzZWRDb2xvckNvbXBv
bmVudHMoY29uc3QgQ29sb3JDCiAgICAgfTsKIH0KIAotQ29sb3JDb21wb25lbnRzPHVpbnQ4X3Qs
IDQ+IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3Qg
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CitzdGF0aWMgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3Qs
IDQ+IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KQogewogICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0OwogICAgIEZsb2F0UG9pbnQgbm9pc2VWZWN0b3IocG9pbnQueCgpICogcGFpbnRpbmdE
YXRhLmJhc2VGcmVxdWVuY3lYLCBwb2ludC55KCkgKiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5j
eVkpOwogICAgIGZsb2F0IHJhdGlvID0gMTsKLSAgICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3Rh
dmUgPCBtX251bU9jdGF2ZXM7ICsrb2N0YXZlKSB7Ci0gICAgICAgIGlmIChtX3R5cGUgPT0gVHVy
YnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKKyAgICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3Rh
dmUgPCBwYWludGluZ0RhdGEubnVtT2N0YXZlczsgKytvY3RhdmUpIHsKKyAgICAgICAgaWYgKHBh
aW50aW5nRGF0YS50eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCiAgICAgICAg
ICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0RhdGEsIHN0
aXRjaERhdGEsIG5vaXNlVmVjdG9yKSAvIHJhdGlvOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGluZ0RhdGEsIHN0aXRj
aERhdGEsIG5vaXNlVmVjdG9yKS5hYnMoKSAvIHJhdGlvOwpAQCAtMzQ4LDcgKzM5Niw3IEBAIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50KGNvbnN0CiAgICAgICAgIG5vaXNlVmVjdG9yLnNldFkobm9pc2VWZWN0
b3IueSgpICogMik7CiAgICAgICAgIHJhdGlvICo9IDI7CiAKLSAgICAgICAgaWYgKG1fc3RpdGNo
VGlsZXMpIHsKKyAgICAgICAgaWYgKHBhaW50aW5nRGF0YS5zdGl0Y2hUaWxlcykgewogICAgICAg
ICAgICAgLy8gVXBkYXRlIHN0aXRjaCB2YWx1ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGluTm9pc2Ug
YmVmb3JlIHRoZSBtdWx0aXBsaWNhdGlvbiBhbmQKICAgICAgICAgICAgIC8vIGFkZGluZyBpdCBh
ZnRlcndhcmQgc2ltcGxpZmllcyB0byBzdWJ0cmFjdGluZyBpdCBvbmNlLgogICAgICAgICAgICAg
c3RpdGNoRGF0YS53aWR0aCAqPSAyOwpAQCAtMzYwLDIwICs0MDgsMTkgQEAgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9y
UG9pbnQoY29uc3QKIAogICAgIC8vIFRoZSB2YWx1ZSBvZiB0dXJidWxlbmNlRnVuY3Rpb25SZXN1
bHQgY29tZXMgZnJvbSAoKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSkgKyAyNTUpIC8g
MiBieSBmcmFjdGFsTm9pc2UKICAgICAvLyBhbmQgKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAq
IDI1NSkgYnkgdHVyYnVsZW5jZS4KLSAgICBpZiAobV90eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpG
cmFjdGFsTm9pc2UpCisgICAgaWYgKHBhaW50aW5nRGF0YS50eXBlID09IFR1cmJ1bGVuY2VUeXBl
OjpGcmFjdGFsTm9pc2UpCiAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IHR1cmJ1
bGVuY2VGdW5jdGlvblJlc3VsdCAqIDAuNWYgKyAwLjVmOwogCiAgICAgcmV0dXJuIHRvSW50QmFz
ZWRDb2xvckNvbXBvbmVudHModHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0KTsKIH0KIAotdm9pZCBG
RVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oY29uc3QgRmlsdGVyJiBmaWx0ZXIsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3Rp
dGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3QKK3N0YXRpYyB2
b2lkIHBsYXRvZnJtQXBwbHlHZW5lcmljKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29u
c3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXks
IGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEs
IGludCBzdGFydFksIGludCBlbmRZKQogewogICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKIAot
ICAgIEludFJlY3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1dGVQYWludFJlY3QoKTsKICAgICBGbG9h
dFBvaW50IHBvaW50KDAsIGZpbHRlclJlZ2lvbi55KCkgKyBzdGFydFkpOwogICAgIGludCBpbmRl
eE9mUGl4ZWxDaGFubmVsID0gc3RhcnRZICogKGZpbHRlclJlZ2lvbi53aWR0aCgpIDw8IDIpOwot
ICAgIEZsb2F0U2l6ZSBpbnZlcnNlU2NhbGUgPSB7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53
aWR0aCgpLCAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkgfTsKKyAgICBGbG9hdFNp
emUgaW52ZXJzZVNjYWxlID0geyAxIC8gZmlsdGVyU2NhbGUud2lkdGgoKSwgMSAvIGZpbHRlclNj
YWxlLmhlaWdodCgpIH07CiAKICAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5
KSB7CiAgICAgICAgIHBvaW50LnNldFkocG9pbnQueSgpICsgMSk7CkBAIC0zODgsNDUgKzQzNSwy
MyBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbihjb25zdCBGaWx0ZXImIGZpbHRlciwg
VWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYQogICAgIH0KIH0KIAotdm9pZCBGRVR1cmJ1bGVu
Y2U6OmZpbGxSZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCitz
dGF0aWMgdm9pZCBwbGF0b2ZybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBw
YXJhbWV0ZXJzKQogewotICAgIHBhcmFtZXRlcnMtPmVmZmVjdC0+ZmlsbFJlZ2lvbigqcGFyYW1l
dGVycy0+ZmlsdGVyLCAqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50
aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJh
bWV0ZXJzLT5lbmRZKTsKKyAgICBwbGF0b2ZybUFwcGx5R2VuZXJpYyhwYXJhbWV0ZXJzLT5maWx0
ZXJSZWdpb24sIHBhcmFtZXRlcnMtPmZpbHRlclNjYWxlLCAqcGFyYW1ldGVycy0+cGl4ZWxBcnJh
eSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFy
YW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsKIH0KIAotYm9vbCBGRVR1cmJ1bGVu
Y2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3N0YXRpYyB2
b2lkIHBsYXRvZnJtQXBwbHkoY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9h
dFNpemUmIGZpbHRlclNjYWxlLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgU3RpdGNo
RGF0YSYgc3RpdGNoRGF0YSwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiB7Ci0gICAgYXV0
byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLT5kYXRhKCk7CisgICAgaW50IGhlaWdodCA9IGZpbHRlclJlZ2lvbi5oZWlnaHQoKTsK
KyAgICB1bnNpZ25lZCBhcmVhID0gZmlsdGVyUmVnaW9uLmFyZWEoKTsKIAotICAgIEludFNpemUg
cmVzdWx0U2l6ZShhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CisgICAgc3RhdGljIGNvbnN0
IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBk
YXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzLgogCi0gICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJvRmlsbCgpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBJbnRTaXplIHRpbGVTaXplID0gcm91bmRlZElu
dFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKTsKLQotICAgIGZsb2F0IGJh
c2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVlbmN5WDsKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5
WSA9IG1fYmFzZUZyZXF1ZW5jeVk7Ci0gICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhID0gY29tcHV0
ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLQot
ICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEobV9zZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1
ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLSAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKLQot
ICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNpemUuYXJlYSgpOwotICAgIGlmIChhcmVhLmhhc092ZXJm
bG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGhlaWdodCA9IHJlc3Vs
dFNpemUuaGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gaGVpZ2h0IC8g
ODsKKyAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gZmlsdGVyUmVnaW9uLmhlaWdodCgpIC8g
ODsKICAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+
KGFyZWEgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKKwogICAgIGlm
IChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBQYXJhbGxlbEpvYnM8RmlsbFJl
Z2lvblBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxs
UmVnaW9uV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKKyAgICAgICAgUGFyYWxsZWxKb2Jz
PFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJnBsYXRvZnJtQXBwbHlXb3Jr
ZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwogCiAgICAgICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRl
ciBhcnJheQogICAgICAgICBhdXRvIG51bUpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2Jz
KCk7CkBAIC00MzcsMTAgKzQ2MiwxMCBAQCBib29sIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgICAgICAgICAgdW5zaWduZWQgc3Rh
cnRZID0gMDsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpvYnM7
ICsraSkgewotICAgICAgICAgICAgICAgIEZpbGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMgPSBw
YXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIg
PSAmZmlsdGVyOwotICAgICAgICAgICAgICAgIHBhcmFtcy5lZmZlY3QgPSB0aGlzOwotICAgICAg
ICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKKyAg
ICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxK
b2JzLnBhcmFtZXRlcihpKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyUmVnaW9uID0g
ZmlsdGVyUmVnaW9uOworICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJTY2FsZSA9IGZpbHRl
clNjYWxlOworICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJnBpeGVsQXJyYXk7
CiAgICAgICAgICAgICAgICAgcGFyYW1zLnBhaW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7CiAg
ICAgICAgICAgICAgICAgcGFyYW1zLnN0aXRjaERhdGEgPSBzdGl0Y2hEYXRhOwogICAgICAgICAg
ICAgICAgIHBhcmFtcy5zdGFydFkgPSBzdGFydFk7CkBAIC00NTEsMTIgKzQ3NiwzOCBAQCBib29s
IEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICB9CiAKICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVy
ZSBpcyBubyByb29tIGZvciBhIG5ldyB0aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMgdG9vIHNt
YWxsLgotICAgIGZpbGxSZWdpb24oZmlsdGVyLCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50
aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICBwbGF0b2ZybUFwcGx5R2VuZXJp
YyhmaWx0ZXJSZWdpb24sIGZpbHRlclNjYWxlLCBwaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0
aXRjaERhdGEsIDAsIGhlaWdodCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEZFVHVyYnVsZW5jZVNv
ZnR3YXJlCisKK2Jvb2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCit7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNy
ZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVs
QnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBJbnRTaXpl
IHJlc3VsdFNpemUoYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOworICAgIGlmIChyZXN1bHRT
aXplLmFyZWEoKS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChyZXN1bHRTaXplLmlzRW1wdHkoKSkgeworICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJy
YXkuemVyb0ZpbGwoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYXV0byB0
aWxlU2l6ZSA9IHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUo
KSk7CisgICAgYXV0byBzdGl0Y2hEYXRhID0gRkVUdXJidWxlbmNlU29mdHdhcmU6OmNvbXB1dGVT
dGl0Y2hpbmcodGlsZVNpemUsIG1fYmFzZUZyZXF1ZW5jeVgsIG1fYmFzZUZyZXF1ZW5jeVksIG1f
c3RpdGNoVGlsZXMpOworICAgIGF1dG8gcGFpbnRpbmdEYXRhID0gRkVUdXJidWxlbmNlU29mdHdh
cmU6OmluaXRQYWludGluZ0RhdGEobV90eXBlLCBtX2Jhc2VGcmVxdWVuY3lYLCBtX2Jhc2VGcmVx
dWVuY3lZLCBtX251bU9jdGF2ZXMsIG1fc2VlZCwgbV9zdGl0Y2hUaWxlcywgdGlsZVNpemUpOwor
CisgICAgRkVUdXJidWxlbmNlU29mdHdhcmU6OnBsYXRvZnJtQXBwbHkoYWJzb2x1dGVQYWludFJl
Y3QoKSwgZmlsdGVyLmZpbHRlclNjYWxlKCksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgc3RpdGNo
RGF0YSwgcGFpbnRpbmdEYXRhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgK
aW5kZXggZTY5OGIzMTNmMTg4NjI1MDAzNGIwNjU5MGQxZTJiM2VkNmRjMzk4OC4uN2M0N2M3ODc0
OWI4NTZmYzlmOTFhZjg0YzYxMzRjZjQ3ZGYwNmUyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCkBAIC01OCw2
NCArNTgsMTMgQEAgcHVibGljOgogICAgIGJvb2wgc2V0U3RpdGNoVGlsZXMoYm9vbCk7CiAKIHBy
aXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrU2l6ZSA9IDI1NjsKLSAgICBzdGF0
aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9ja1NpemUgLSAxOwotCi0gICAgc3RhdGlj
IGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGly
aWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzLgotCi0gICAgc3RydWN0IFBhaW50aW5n
RGF0YSB7Ci0gICAgICAgIFBhaW50aW5nRGF0YShsb25nIHBhaW50aW5nU2VlZCwgY29uc3QgSW50
U2l6ZSYgcGFpbnRpbmdTaXplLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1
ZW5jeVkpCi0gICAgICAgICAgICA6IHNlZWQocGFpbnRpbmdTZWVkKQotICAgICAgICAgICAgLCBm
aWx0ZXJTaXplKHBhaW50aW5nU2l6ZSkKLSAgICAgICAgICAgICwgYmFzZUZyZXF1ZW5jeVgoYmFz
ZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICAsIGJhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZ
KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBsb25nIHNlZWQ7Ci0gICAgICAgIGlu
dCBsYXR0aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tTaXplICsgMl07Ci0gICAgICAgIGZsb2F0IGdy
YWRpZW50WzRdWzIgKiBzX2Jsb2NrU2l6ZSArIDJdWzJdOwotICAgICAgICBJbnRTaXplIGZpbHRl
clNpemU7Ci0gICAgICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYOwotICAgICAgICBmbG9hdCBiYXNl
RnJlcXVlbmN5WTsKLQotICAgICAgICBpbmxpbmUgbG9uZyByYW5kb20oKTsKLSAgICB9OwotCi0g
ICAgc3RydWN0IFN0aXRjaERhdGEgewotICAgICAgICBTdGl0Y2hEYXRhKCkgPSBkZWZhdWx0Owot
Ci0gICAgICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93IG11Y2ggdG8gc3VidHJhY3QgdG8gd3Jh
cCBmb3Igc3RpdGNoaW5nLgotICAgICAgICBpbnQgd3JhcFggeyAwIH07IC8vIE1pbmltdW0gdmFs
dWUgdG8gd3JhcC4KLSAgICAgICAgaW50IGhlaWdodCB7IDAgfTsKLSAgICAgICAgaW50IHdyYXBZ
IHsgMCB9OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgRmlsbFJlZ2lvblBhcmFtZXRlcnMgewotICAg
ICAgICBjb25zdCBGaWx0ZXIqIGZpbHRlcjsKLSAgICAgICAgRkVUdXJidWxlbmNlKiBlZmZlY3Q7
Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OwotICAgICAgICBQYWludGlu
Z0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICAgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwotICAg
ICAgICBpbnQgc3RhcnRZOwotICAgICAgICBpbnQgZW5kWTsKLSAgICB9OwotCi0gICAgc3RhdGlj
IHZvaWQgZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyopOwotCiAgICAgRkVU
dXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVz
KTsKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikg
b3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVj
dFJlY3QoKSkpOyB9Ci0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
Jikgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIGluaXRQYWludChQYWludGluZ0RhdGEmKTsKLSAgICBTdGl0Y2hEYXRhIGNvbXB1
dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9h
dCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0OwotICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4g
bm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmLCBjb25zdCBTdGl0Y2hEYXRhJiwgY29uc3QgRmxv
YXRQb2ludCYpIGNvbnN0OwotICAgIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjYWxjdWxh
dGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRh
LCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBmaWxsUmVnaW9uKGNvbnN0IEZp
bHRlciYsIFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0
YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0OworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgc3RhdGljIHZvaWQgZmlsbFJl
Z2lvbldvcmtlcih2b2lkKik7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICBUdXJidWxlbmNlVHlwZSBtX3R5cGU7CiAgICAgZmxvYXQgbV9iYXNlRnJlcXVl
bmN5WDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IGMwNzUyNjMxNGY3ZTc3ODEyNWUwMDU3YmIwM2IxMWNm
OWQwMTdiNWIuLjgyNDgyNjhjZGVjZGJlODgwNjhkNTJjMWUwMDU0MmI1YmExZTNkMTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuaApAQCAtMTI5LDE0ICsxMjksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7
IGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0K
ICAgICB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJik7CiAgICAgCi0gICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0
cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCi0gICAgewotICAgICAgICBWZWN0b3I8Zmxv
YXQ+IG5vcm1hbGl6ZWRWYWx1ZXModmFsdWVzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbm9ybWFsaXplZFZh
bHVlc1tpXSA9IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOwotICAgICAgICByZXR1cm4gbm9y
bWFsaXplZFZhbHVlczsKLSAgICB9Ci0KIHByb3RlY3RlZDoKICAgICBGaWx0ZXJFZmZlY3QoVHlw
ZSk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0xpZ2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0xpZ2h0U291cmNlLmgKaW5kZXggOTRkMTk1MDEzOWQ2ZDI0M2E4NjYxZTVlYTU1ZDIz
NWE3Mzg5ZjVkNS4uOGRiOGU1NjU5N2JhYmVjODY4NjE2ODNmZjhlMDU4Mjg4YzcxMjZmOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNv
dXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGln
aHRTb3VyY2UuaApAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgTGlnaHRUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCA9IDA7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWlu
dGluZ0RhdGEmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3Qg
RmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgY29uc3QgPSAwOwogICAgIC8vIHogaXMgYSBm
bG9hdCBudW1iZXIsIHNpbmNlIGl0IGlzIHRoZSBhbHBoYSB2YWx1ZSBzY2FsZWQgYnkgYSB1c2Vy
CiAgICAgLy8gc3BlY2lmaWVkICJzdXJmYWNlU2NhbGUiIGNvbnN0YW50LCB3aGljaCB0eXBlIGlz
IDxudW1iZXI+IGluIHRoZSBTVkcgc3RhbmRhcmQuCiAgICAgLy8geCBhbmQgeSBhcmUgaW4gdGhl
IGNvb3JkaW5hdGVzIG9mIHRoZSBGaWx0ZXJFZmZlY3QncyBidWZmZXIuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0
U291cmNlLmNwcAppbmRleCAxYWI1ZTE5ZTExYTRmMzZlYTJhNDI2YTc1MDM4NzkxMjhmNTRiNDRi
Li5jMmQ4NzQ5M2IyOGRlMzg2MTNlM2UyMDI4NGZmZTJmZjQyNWZlZTJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRM
aWdodFNvdXJjZS5jcHAKQEAgLTM2LDcgKzM2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIFBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZm
ZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYpCit2b2lkIFBvaW50TGlnaHRTb3VyY2U6
OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50
aW5nRGF0YSYpIGNvbnN0CiB7CiAgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZl
Y3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgp
KSk7CiAgICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3Bh
Y2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgK
aW5kZXggNjdhM2EwYmQzOWE4YTljYzE5NTQzNDk4NTk2ZDcxMTVmNGJiOTVhNS4uNDJjM2RjNjE3
ODg1MjJlYzc4N2NhZWUyYWMzNGE4ZTMyZjlkYmQ0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgK
QEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0WShmbG9hdCkgb3ZlcnJpZGU7
CiAgICAgYm9vbCBzZXRaKGZsb2F0KSBvdmVycmlkZTsKIAotICAgIHZvaWQgaW5pdFBhaW50aW5n
RGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgQ29tcHV0ZWRMaWdodGluZ0RhdGEgY29tcHV0ZVBpeGVsTGln
aHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29u
c3QgZmluYWw7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkBAIC01Miw3ICs1Miw3IEBAIHByaXZh
dGU6CiAgICAgfQogCiAgICAgRmxvYXRQb2ludDNEIG1fdXNlclNwYWNlUG9zaXRpb247Ci0gICAg
RmxvYXRQb2ludDNEIG1fYnVmZmVyUG9zaXRpb247CisgICAgbXV0YWJsZSBGbG9hdFBvaW50M0Qg
bV9idWZmZXJQb3NpdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291
cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExp
Z2h0U291cmNlLmNwcAppbmRleCA3MTYwN2FiMDBmZjlkNmE2ZDAxNjkxZDliYmI4NTUzZDFmMzQ4
ZDAwLi5lN2M3YzA0ZWRlZWQ4NzJlNzlhMjIzYmRhZDg2YTkxZWQzM2YwMjJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJj
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90
TGlnaHRTb3VyY2UuY3BwCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8v
IGFjY29yZGluZyB0byB0aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNzaW9uIHRlc3RzCiBzdGF0
aWMgY29uc3QgZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7CiAKLXZvaWQgU3BvdExp
Z2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZm
ZWN0LCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgU3BvdExpZ2h0U291cmNlOjpp
bml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSkgY29uc3QKIHsKICAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZ
KGZpbHRlckVmZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBv
c2l0aW9uLnh5KCkpKTsKICAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJv
bSBtX3VzZXJTcGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3Vy
Y2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0
U291cmNlLmgKaW5kZXggMzUxNTE2MzUwNzdlZWYwZTczYzI2YWU0NDJhNWVhNTM0ZmQxZjNiZi4u
MmVkZDkzMDk5ZDk3MjgyYjA2ZDdjMTllNzcyN2Q3NWQ2NDJlOWM1MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNv
dXJjZS5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFNwZWN1bGFyRXhw
b25lbnQoZmxvYXQpIG92ZXJyaWRlOwogICAgIGJvb2wgc2V0TGltaXRpbmdDb25lQW5nbGUoZmxv
YXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVm
ZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0
YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBjb25zdCBvdmVycmlkZTsKICAg
ICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFp
bnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKQEAgLTY4LDcgKzY4LDcgQEAgcHJpdmF0ZToKICAgICBGbG9hdFBvaW50
M0QgbV91c2VyU3BhY2VQb3NpdGlvbjsKICAgICBGbG9hdFBvaW50M0QgbV91c2VyU3BhY2VQb2lu
dHNBdDsKIAotICAgIEZsb2F0UG9pbnQzRCBtX2J1ZmZlclBvc2l0aW9uOworICAgIG11dGFibGUg
RmxvYXRQb2ludDNEIG1fYnVmZmVyUG9zaXRpb247CiAKICAgICBmbG9hdCBtX3NwZWN1bGFyRXhw
b25lbnQ7CiAgICAgZmxvYXQgbV9saW1pdGluZ0NvbmVBbmdsZTsK
</data>
<flag name="review"
          id="469902"
          type_id="1"
          status="+"
          setter="heycam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445001</attachid>
            <date>2021-11-22 21:44:22 -0800</date>
            <delta_ts>2021-11-22 22:58:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232832-20211122214421.patch</filename>
            <type>text/plain</type>
            <size>220278</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJmNzQ3MzJlNDRlYjJk
OWE3NmI4ZTMwZmVlYzc2ODM4NTgyM2E5My4uNDVlNThjOWRiMjQ3YTMzYzU1YzU0YjQ1ZTkzNzNl
N2E5OGNjMDM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0NyBAQAorMjAyMS0xMS0yMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1vdmUgdGhlIHNvZnR3YXJlIEZpbHRlckVmZmVjdCBmdW5jdGlvbnMgdG8gc2VwYXJhdGUgYXBw
bGllciBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzI4MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHN0ZXAgaXMgcmVxdWlyZWQgdG8gbW92ZSB0aGUgRmlsdGVyRWZmZWN0IHNvZnR3
YXJlIGNvZGUgdG8gc2VwYXJhdGUKKyAgICAgICAgZmlsZXMuIFNpbmNlIHRoZSBGaWx0ZXJFZmZl
Y3QgY2FuIGJlIGFwcGxpZWQgd2l0aCB0aGUgYWNjZWxlcmF0ZWQgQ29yZUltYWdlCisgICAgICAg
IG9yIHRoZSB1bmFjY2VsZXJhdGVkIHNvZnR3YXJlIG1ldGhvZHMsIGl0IG1ha2Ugc2Vuc2UgdG8g
cmVtb3ZlIHRoZSBzb2Z0d2FyZQorICAgICAgICBjb2RlIGZyb20gdGhlIEZpbHRlckVmZmVjdCBj
bGFzc2VzLgorCisgICAgICAgIFRoZSBwbGFuIGlzIHRvIGhhdmUgdGhlIHNvZnR3YXJlIGNvZGUg
aW4gc2VwYXJhdGUgZmlsZXMuIEVhY2ggRmlsdGVyRWZmZWN0CisgICAgICAgIHdpbGwgYmUgYXNr
ZWQgdG8gY3JlYXRlIGFuIGFwcGxpZXIgd2hpY2ggY2FuIGJlIFNvZnR3YXJlQXBwbGllciBvcgor
ICAgICAgICBDb3JlSW1hZ2VBcHBsaWVyLiBUaGlzIGFwcGxpZXIgd2lsbCBiZSBnaXZlbiB0byBG
aWx0ZXJFZmZlY3Q6OmFwcGx5KCkKKyAgICAgICAgd2hpY2ggd2lsbCBwYXNzIHRoZSBpbnB1dCBp
bWFnZXMgdG8gdGhlIGFwcGx5KCkgbWV0aG9kIG9mIHRoZSBhcHBsaWVyIHRvCisgICAgICAgIGdl
dCB0aGUgcmVzdWx0IGltYWdlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExp
Z2h0U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3RhbnRMaWdodFNvdXJjZTo6aW5p
dFBhaW50aW5nRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXN0YW50TGlnaHRTb3Vy
Y2U6OmluaXRQYWludGluZ0RhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmRTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlU2F0dXJhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6
OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6Om1hdHJpeCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0
ZUFuZEh1ZVJvdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyOjpsdW1pbmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxh
dGZvcm1VbmFjY2VsZXJhdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNv
cmU6Om1hdHJpeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1ZVJv
dGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsdW1pbmFuY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVyYXRlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjplZmZlY3RUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKTog
RGVsZXRlZC4KKyAgICAgICAgTW92ZSBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoKSBhbmQg
Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cygpIGZyb20KKyAgICAgICAgdGhlIGhlYWRlciBm
aWxlIHRvIHRoZSBzb3VyY2UgZmlsZS4gTW92ZSBjaG9vc2luZyB0aGUgY2FsY3VsYXRpb24gbW9k
ZSBmb3IKKyAgICAgICAgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCBmcm9tIGVmZmVjdEFwcGx5
QWNjZWxlcmF0ZWQoKSB0byBhcHBseVBsYXRmb3JtKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUlkZW50aXR5VGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGll
cjo6Y29tcHV0ZVRhYnVsYXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlRGlzY3JldGVUYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlTGluZWFy
VGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6Y29tcHV0ZUdhbW1hVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUxvb2t1cFRhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxp
bmVhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVHYW1tYVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAg
ICBJbnN0ZWFkIG9mIGNhbGxpbmcgY29tcHV0ZUxvb2t1cFRhYmxlcygpIHRvIGluaXRpYWxpemUg
dGhlIGZvdXIgbG9va3VwCisgICAgICAgIHRhYmxlcywgY2FsbCBjb21wdXRlTG9va3VwVGFibGUo
KSBmb3VyIHRpbWVzOiBvbmUgZm9yIGVhY2ggY29sb3IgY2hhbm5lbC4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjbGFtcEJ5dGUpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVBcml0aG1ldGljUGl4
ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21w
dXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBv
c2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFyaXRobWV0aWMpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5QXJpdGhtZXRpYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlOb25Bcml0
aG1ldGljKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjph
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wQnl0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKTogRGVsZXRlZC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpjbGFt
cFJHQkFWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVB
cHBsaWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpnZXRQaXhlbFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldEludGVyaW9yUGl4ZWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldE91
dGVyUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2
ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNs
YW1wUkdCQVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNldERlc3RpbmF0aW9u
UGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmZh
c3RTZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpnZXRQaXhlbFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
Lmg6CisgICAgICAgIEFkZCB0aGUgbWVtYmVycyBvZiBGRUNvbnZvbHZlTWF0cml4IHRvIFBhaW50
aW5nRGF0YS4gUmVtb3ZlIHRoZSB0ZW1wbGF0ZQorICAgICAgICBmdW5jdGlvbnMgYW5kIHRoZSBN
U1ZDIHdhcm5pbmcuIEp1c3QgaWdub3JlIHRoZSBhbHBoYSBjaGFubmVsIGlmIAorICAgICAgICBw
cmVzZXJ2ZUFscGhhVmFsdWVzIGlzIHRydWUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlm
ZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6CisgICAgICAgIE5vIG5lZWQgdG8gcGFz
cyBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcgd2hlbiBjcmVhdGluZyBGRURpZmZ1c2VMaWdo
dGluZy4KKyAgICAgICAgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZyBpcyBh
bHJlYWR5IHBhc3NlZCB0byBGRUxpZ2h0aW5nLiAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OmJ5dGVPZmZzZXRPZlBpeGVsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjp4Q2hhbm5lbElu
ZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVB
cHBsaWVyOjp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxh
Y2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGll
cik6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6
YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpieXRlT2Zmc2V0T2ZQaXhlbCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5oOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsSW5kZXgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnlD
aGFubmVsSW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRv
d1NvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kU29mdHdhcmVBcHBs
aWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2xh
bXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2Fs
Y3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdh
dXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6a2VybmVsUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBbHBoYU9ubHkpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXIp
OgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJs
dXJBY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJHZW5lcmljKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyV29ya2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKGdhdXNzaWFuS2VybmVsRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Omtlcm5lbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJv
eEJsdXJBbHBoYU9ubHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpzdGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5C
bHVyLmg6CisgICAgICAgIEFkZCB0aGUgdHdvIG1lbWJlcnMgJ2lzQWxwaGFJbWFnZScgYW5kICdl
ZGdlTW9kZScgdG8gQXBwbHlQYXJhbWV0ZXJzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6QWxwaGFXaW5kb3c6OnRvcExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmJvdHRvbUxl
ZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6
QWxwaGFXaW5kb3c6OnRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6Y2VudGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93Ojpib3R0b20gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5k
b3c6OnNldFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdT
b2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNldFRvcFJpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93
OjpzZXRSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNoaWZ0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzaGlmdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6
OnRvcExlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3
YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSaWdo
dE5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBs
aWVyOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5v
cm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5v
cm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9y
bWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6
OnNldFBpeGVsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6c2V0UGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
R2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRv
cExlZnROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6Omxl
ZnRDb2x1bW5Ob3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFs
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5n
RGF0YTo6Ym90dG9tTGVmdE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJp
Z2h0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldFBpeGVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldFBp
eGVsSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxh
dGZvcm1BcHBseUdlbmVyaWNQYWludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpsaWdodGluZ0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnNwZWN1bGFyRXhwb25lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcExlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OnRvcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBo
YVdpbmRvdzo6Y2VudGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmc6OkFscGhhV2luZG93Ojpib3R0b20gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRv
cFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2lu
ZG93OjpzZXRSaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpB
bHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNoaWZ0Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzaGlmdCk6IERlbGV0ZWQuCisgICAgICAg
IE1vdmUgZmlsaW5nIHRoZSBzdHJ1Y3R1cmUgTGlnaHRpbmdEYXRhIGZyb20gRkVMaWdodGluZzo6
ZHJhd0xpZ2h0aW5nKCkKKyAgICAgICAgdG8gRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBw
bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6cGl4ZWxBcnJheUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWFrZVBpeGVsVmFs
dWVGcm9tQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllcjo6bWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWluT3JNYXgpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpjb2x1bW5FeHRyZW11
bSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Omtlcm5l
bEV4dHJlbXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
cjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5
U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtl
Q29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbHVtbkV4
dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omtlcm5lbEV4dHJlbXVtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVy
aWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxh
dGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oOgorICAgICAgICBSZW1vdmUgdGhlIHRlbXBsYXRl
IGZ1bmN0aW9ucyBhbmQganVzdCB0aGUgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBhcyBhbgorICAg
ICAgICBhcmd1bWVudCB0byB0aGVzZSBmdW5jdGlvbnMuICBSZXBsYWNlIHBsYXRmb3JtQXBwbHlE
ZWdlbmVyYXRlKCkgd2l0aCBhCisgICAgICAgIGNhbGwgdG8gaXNEZWdlbmVyYXRlKCkgYW5kIG1v
dmUgdGhlIGNhbGwgdG8gY29weVByZW11bHRpcGxpZWRSZXN1bHQoKSB0byAKKyAgICAgICAgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0U29mdHdhcmVBcHBs
aWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxh
ckxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVT
cGVjdWxhckxpZ2h0aW5nKToKKyAgICAgICAgTm8gbmVlZCB0byBwYXNzIEZFTGlnaHRpbmc6OlNw
ZWN1bGFyTGlnaHRpbmcgd2hlbiBjcmVhdGluZyBGRURpZmZ1c2VMaWdodGluZy4KKyAgICAgICAg
RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcgaXMgYWxyZWFkeSBwYXNzZWQg
dG8gRkVMaWdodGluZy4gCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6UGFpbnRpbmdEYXRh
OjpyYW5kb20pOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
OjpzbW9vdGhDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFw
cGxpZXI6OmxpbmVhckludGVycG9sYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxl
bmNlU29mdHdhcmVBcHBsaWVyOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZVN0aXRjaGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6Om5vaXNlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjp0b0ludEJhc2VkQ29sb3JD
b21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGll
cjo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1X
b3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0Rh
dGE6OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVy
YnVsZW5jZTo6ZmlsbFJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgTW92ZSB0aGUgdGhyZWFkaW5nIGNvZGUgZnJvbSBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSB0
byBhIG5ldyBmdW5jdGlvbgorICAgICAgICBjYWxsZWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBs
aWVyOjphcHBseVBsYXRmb3JtKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpub3Jt
YWxpemVkRmxvYXRzKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSBub3JtYWxpemVkRmxvYXRzKCkg
ZnJvbSBGaWx0ZXJFZmZlY3QgdG8gRkVDb2xvck1hdHJpeC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBwbGllci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjo6RmlsdGVyRWZmZWN0Q29uY3Jl
dGVBcHBsaWVyKToKKyAgICAgICAgSW50cm9kdWNlIHRoaXMgY2xhc3Mgd2hpY2ggd2lsbCBiZSB0
aGUgYmFzZSBjbGFzcyBvZiBhbGwgdGhlIHNvZnR3YXJlIGFuZAorICAgICAgICB0aGUgQ29yZUlt
YWdlIEZpbHRlckVmZmVjdCBhcHBsaWVycy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvTGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9pbnRMaWdodFNv
dXJjZTo6aW5pdFBhaW50aW5nRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQb2ludExp
Z2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaDoKKyAgICAgICAgTWFrZSBpbml0
UGFpbnRpbmdEYXRhKCkgYmUgYSBjb25zdGFudCBmdW5jdGlvbi4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaDoKKyAgICAgICAg
TWFrZSBpbml0UGFpbnRpbmdEYXRhKCkgYmUgYSBjb25zdGFudCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVJbWFnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVJ
bWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmg6CisKIDIwMjEtMTEtMjEgIEFsYW4gQnVqdGFzICA8emFsYW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10gQ2FjaGUgbWVhc3VyZWQgd2lkdGggZXZlbiBp
ZiBjYW5Vc2VTaW1wbGlmaWVkVGV4dE1lYXN1cmluZyBpcyBmYWxzZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDg3NTU3NDQwODg0
Njk0ZjdlN2UzMTMyNDA3YzNmYzkzOGRkZmRlYWMuLjdiMDYwZjIxN2RlNzQxNzBlZTE5NmVkZmRm
ZjBjMGJhYTg4NWQ0ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTEwODkzLDYgKzEwODkzLDcgQEAKIAkJNzI5OUJDNjQyM0Q2
ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOUQwNTJF
MjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQTEzQTlGMjc0QzVDQzcwMEUyQTg4RSAvKiBGaWx0ZXJFZmZlY3RBcHBs
aWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdEFwcGxpZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVy
QmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1
ZmZlckJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNTIz
RTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTkzNyw2ICsyNTkzOCw3IEBACiAJ
CQkJODQ1RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oICovLAogCQkJCTA4QzkyNTE3
MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuY3BwICovLAogCQkJCTA4QzkyNTE4MEZD
QzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCAqLywKKwkJCQk3MkExM0E5RjI3NEM1Q0M3
MDBFMkE4OEUgLyogRmlsdGVyRWZmZWN0QXBwbGllci5oICovLAogCQkJCTJDODU2NTM4MjRDMTBC
MEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8sCiAJCQkJMkM4NTY1MzMy
NEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCiAJCQkJNzIxNEI5
QjcyNzQ0NThGQTAwM0JFNkRGIC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRT
b3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0
YW50TGlnaHRTb3VyY2UuY3BwCmluZGV4IGU1ZmIxZmY2NjVkM2ViMDdmNDhlZTFkMDJiYmZmY2M2
YjA0NDFmODkuLjg5NDdhOTg2MGU0NmIxMWM1OGUyNzc1MzYyNTZmZGI5ZDUxZDE1NDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExp
Z2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShj
b25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgRGlz
dGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKSBjb25zdAogewogICAgIGZsb2F0IGF6aW11dGggPSBk
ZWcycmFkKG1fYXppbXV0aCk7CiAgICAgZmxvYXQgZWxldmF0aW9uID0gZGVnMnJhZChtX2VsZXZh
dGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAppbmRleCBjMWUzMGVkZTc1OTgzNzI4YTYz
MmJjY2ZmYjA5OTczYTNhNGU3MmZkLi4zMDE5MmIwZWYwY2QxYmY0MDNkNDIzMzhjZTQwODc3MThk
NzUxNzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVi
bGljOgogICAgIGJvb2wgc2V0QXppbXV0aChmbG9hdCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRF
bGV2YXRpb24oZmxvYXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNv
bnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5p
dFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBjb25zdCBv
dmVycmlkZTsKICAgICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0Rh
dGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5h
bDsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCmluZGV4IDFhMTM3NTg4MWUyYTI5NjQw
ODAwY2YyM2ZjZTBhZGIwMjE3MTgwMDYuLjkyYjc5ZjNjMDVlMDQzOGE5MWFjMjQ2YzNjNDEwYWFm
MTViOTU3MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtMjYsMTAgKzI2LDEwIEBACiAjaW5jbHVkZSAiRkVCbGVu
ZC5oIgogCiAjaW5jbHVkZSAiRkVCbGVuZE5FT04uaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RB
cHBsaWVyLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUzLDI4ICs1Myw0MyBAQCBib29sIEZFQmxlbmQ6
OnNldEJsZW5kTW9kZShCbGVuZE1vZGUgbW9kZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorLy8g
RklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUg
c291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUJsZW5kU29mdHdhcmVBcHBsaWVyIDog
cHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUJsZW5kPiB7CisgICAgdXNpbmcg
QmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUJsZW5kPjsKKworcHVibGljOgor
ICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNv
bnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKK307CisKICNp
ZiAhSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotYm9vbCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK2Jvb2wgRkVCbGVuZFNvZnR3YXJlQXBwbGllcjo6YXBw
bHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMp
CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVm
ZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0c1swXS5nZXQoKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0c1sx
XS5nZXQoKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0
SW1hZ2UtPmNvbnRleHQoKTsKIAogICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGluLT5p
bWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcjIgPSBpbjIt
PmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZm
ZXIyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOwotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCB7IENvbXBvc2l0ZU9w
ZXJhdG9yOjpTb3VyY2VPdmVyLCBtX21vZGUgfSk7CisgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNh
bFNpemUoKSB9LCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBtX2VmZmVjdC5ibGVu
ZE1vZGUoKSB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KICNlbmRpZgogCitib29sIEZFQmxlbmQ6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1
cm4gRkVCbGVuZFNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVj
dHMoKSk7Cit9CisKIFRleHRTdHJlYW0mIEZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QK
IHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUJsZW5kIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmlu
ZGV4IDY3OWU3OGRhZWE4NzNmNWQzM2ExYWZmODcxNTI1YmZjZjg3NzEwZmIuLjA2YjUxOGRhZjZj
ZTU5YjdkMDllNmMwMDdhMDMxZmM2ODZmNTQ0ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAt
MjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29sb3JNYXRy
aXguaCIKIAorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCkBAIC02MywzMiArNjQsMTAzIEBAIGJvb2wgRkVDb2xvck1hdHJpeDo6c2V0VmFs
dWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4gJnZhbHVlcykKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
aW5saW5lIHZvaWQgbWF0cml4KGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUs
IGZsb2F0JiBhbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQordm9pZCBGRUNvbG9y
TWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZs
b2F0IHZhbHVlKQoreworICAgIGNvbXBvbmVudHNbMF0gPSAoMC4yMTMgKyAwLjc4NyAqIHZhbHVl
KTsKKyAgICBjb21wb25lbnRzWzFdID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29t
cG9uZW50c1syXSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbM10g
PSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzRdID0gKDAuNzE1ICsg
MC4yODUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s1XSA9ICgwLjA3MiAtIDAuMDcyICogdmFs
dWUpOworICAgIGNvbXBvbmVudHNbNl0gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKKyAgICBj
b21wb25lbnRzWzddID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s4
XSA9ICgwLjA3MiArIDAuOTI4ICogdmFsdWUpOworfQorCit2b2lkIEZFQ29sb3JNYXRyaXg6OmNh
bGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVl
KQoreworICAgIGZsb2F0IGNvc0h1ZSA9IGNvcyh2YWx1ZSAqIHBpRmxvYXQgLyAxODApOworICAg
IGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1ZSAqIHBpRmxvYXQgLyAxODApOworICAgIGNvbXBvbmVu
dHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0gc2luSHVlICogMC4yMTM7CisgICAgY29t
cG9uZW50c1sxXSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgLSBzaW5IdWUgKiAwLjcxNTsKKyAg
ICBjb21wb25lbnRzWzJdID0gMC4wNzIgLSBjb3NIdWUgKiAwLjA3MiArIHNpbkh1ZSAqIDAuOTI4
OworICAgIGNvbXBvbmVudHNbM10gPSAwLjIxMyAtIGNvc0h1ZSAqIDAuMjEzICsgc2luSHVlICog
MC4xNDM7CisgICAgY29tcG9uZW50c1s0XSA9IDAuNzE1ICsgY29zSHVlICogMC4yODUgKyBzaW5I
dWUgKiAwLjE0MDsKKyAgICBjb21wb25lbnRzWzVdID0gMC4wNzIgLSBjb3NIdWUgKiAwLjA3MiAt
IHNpbkh1ZSAqIDAuMjgzOworICAgIGNvbXBvbmVudHNbNl0gPSAwLjIxMyAtIGNvc0h1ZSAqIDAu
MjEzIC0gc2luSHVlICogMC43ODc7CisgICAgY29tcG9uZW50c1s3XSA9IDAuNzE1IC0gY29zSHVl
ICogMC43MTUgKyBzaW5IdWUgKiAwLjcxNTsKKyAgICBjb21wb25lbnRzWzhdID0gMC4wNzIgKyBj
b3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAqIDAuMDcyOworfQorCitWZWN0b3I8ZmxvYXQ+IEZFQ29s
b3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQor
eworICAgIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZFZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbm9y
bWFsaXplZFZhbHVlc1tpXSA9IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOworICAgIHJldHVy
biBub3JtYWxpemVkVmFsdWVzOworfQorCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVDb2xv
ck1hdHJpeFNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxl
cy4KK2NsYXNzIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZm
ZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29sb3JNYXRyaXg+IHsKKyAgICB1c2luZyBCYXNlID0gRmls
dGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29sb3JNYXRyaXg+OworCitwdWJsaWM6CisgICAg
RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcihGRUNvbG9yTWF0cml4Jik7CisKKyAgICBib29s
IGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZl
Y3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBpbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKSBjb25zdDsKKyAg
ICBpbmxpbmUgdm9pZCBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3Jl
ZW4sIGZsb2F0JiBibHVlKSBjb25zdDsKKyAgICBpbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKSBjb25zdDsKKwor
I2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHZvaWQgYXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVkKFBp
eGVsQnVmZmVyJikgY29uc3Q7CisjZW5kaWYKKyAgICB2b2lkIGFwcGx5UGxhdGZvcm1VbmFjY2Vs
ZXJhdGVkKFBpeGVsQnVmZmVyJikgY29uc3Q7CisKKyAgICB2b2lkIGFwcGx5UGxhdGZvcm0oUGl4
ZWxCdWZmZXImKSBjb25zdDsKKworICAgIGZsb2F0IG1fY29tcG9uZW50c1s5XTsKK307CisKK0ZF
Q29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIo
RkVDb2xvck1hdHJpeCYgZWZmZWN0KQorICAgIDogQmFzZShlZmZlY3QpCit7CisgICAgaWYgKG1f
ZWZmZWN0LnR5cGUoKSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUpCisgICAgICAgIEZF
Q29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhtX2NvbXBvbmVudHMsIG1f
ZWZmZWN0LnZhbHVlcygpWzBdKTsKKyAgICBlbHNlIGlmIChtX2VmZmVjdC50eXBlKCkgPT0gRkVD
T0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlSHVlUm90YXRlQ29tcG9uZW50cyhtX2NvbXBvbmVudHMsIG1fZWZmZWN0LnZhbHVlcygpWzBd
KTsKK30KKworaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6bWF0cml4
KGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkgY29u
c3QKIHsKICAgICBmbG9hdCByID0gcmVkOwogICAgIGZsb2F0IGcgPSBncmVlbjsKICAgICBmbG9h
dCBiID0gYmx1ZTsKICAgICBmbG9hdCBhID0gYWxwaGE7CiAKLSAgICByZWQgICAgID0gdmFsdWVz
WyAwXSAqIHIgKyB2YWx1ZXNbIDFdICogZyArIHZhbHVlc1sgMl0gKiBiICsgdmFsdWVzWyAzXSAq
IGEgKyB2YWx1ZXNbIDRdICogMjU1OwotICAgIGdyZWVuICAgPSB2YWx1ZXNbIDVdICogciArIHZh
bHVlc1sgNl0gKiBnICsgdmFsdWVzIFs3XSAqIGIgKyB2YWx1ZXNbIDhdICogYSArIHZhbHVlc1sg
OV0gKiAyNTU7Ci0gICAgYmx1ZSAgICA9IHZhbHVlc1sxMF0gKiByICsgdmFsdWVzWzExXSAqIGcg
KyB2YWx1ZXNbMTJdICogYiArIHZhbHVlc1sxM10gKiBhICsgdmFsdWVzWzE0XSAqIDI1NTsKLSAg
ICBhbHBoYSAgID0gdmFsdWVzWzE1XSAqIHIgKyB2YWx1ZXNbMTZdICogZyArIHZhbHVlc1sxN10g
KiBiICsgdmFsdWVzWzE4XSAqIGEgKyB2YWx1ZXNbMTldICogMjU1OworICAgIGNvbnN0IGF1dG8m
IHZhbHVlcyA9IG1fZWZmZWN0LnZhbHVlcygpOworCisgICAgcmVkICAgPSB2YWx1ZXNbIDBdICog
ciArIHZhbHVlc1sgMV0gKiBnICsgdmFsdWVzWyAyXSAqIGIgKyB2YWx1ZXNbIDNdICogYSArIHZh
bHVlc1sgNF0gKiAyNTU7CisgICAgZ3JlZW4gPSB2YWx1ZXNbIDVdICogciArIHZhbHVlc1sgNl0g
KiBnICsgdmFsdWVzWyA3XSAqIGIgKyB2YWx1ZXNbIDhdICogYSArIHZhbHVlc1sgOV0gKiAyNTU7
CisgICAgYmx1ZSAgPSB2YWx1ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEy
XSAqIGIgKyB2YWx1ZXNbMTNdICogYSArIHZhbHVlc1sxNF0gKiAyNTU7CisgICAgYWxwaGEgPSB2
YWx1ZXNbMTVdICogciArIHZhbHVlc1sxNl0gKiBnICsgdmFsdWVzWzE3XSAqIGIgKyB2YWx1ZXNb
MThdICogYSArIHZhbHVlc1sxOV0gKiAyNTU7CiB9CiAKLWlubGluZSB2b2lkIHNhdHVyYXRlQW5k
SHVlUm90YXRlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGNvbnN0IGZs
b2F0KiBjb21wb25lbnRzKQoraW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGll
cjo6c2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYg
Ymx1ZSkgY29uc3QKIHsKICAgICBmbG9hdCByID0gcmVkOwogICAgIGZsb2F0IGcgPSBncmVlbjsK
ICAgICBmbG9hdCBiID0gYmx1ZTsKIAotICAgIHJlZCAgICAgPSByICogY29tcG9uZW50c1swXSAr
IGcgKiBjb21wb25lbnRzWzFdICsgYiAqIGNvbXBvbmVudHNbMl07Ci0gICAgZ3JlZW4gICA9IHIg
KiBjb21wb25lbnRzWzNdICsgZyAqIGNvbXBvbmVudHNbNF0gKyBiICogY29tcG9uZW50c1s1XTsK
LSAgICBibHVlICAgID0gciAqIGNvbXBvbmVudHNbNl0gKyBnICogY29tcG9uZW50c1s3XSArIGIg
KiBjb21wb25lbnRzWzhdOworICAgIHJlZCAgICAgPSByICogbV9jb21wb25lbnRzWzBdICsgZyAq
IG1fY29tcG9uZW50c1sxXSArIGIgKiBtX2NvbXBvbmVudHNbMl07CisgICAgZ3JlZW4gICA9IHIg
KiBtX2NvbXBvbmVudHNbM10gKyBnICogbV9jb21wb25lbnRzWzRdICsgYiAqIG1fY29tcG9uZW50
c1s1XTsKKyAgICBibHVlICAgID0gciAqIG1fY29tcG9uZW50c1s2XSArIGcgKiBtX2NvbXBvbmVu
dHNbN10gKyBiICogbV9jb21wb25lbnRzWzhdOwogfQogCiAvLyBGSVhNRTogdGhpcyBzaG91bGQg
dXNlIHRoZSBsdW1pbmFuY2UoLi4uKSBmdW5jdGlvbiBpbiBDb2xvckx1bWluYW5jZS5oLgotaW5s
aW5lIHZvaWQgbHVtaW5hbmNlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUs
IGZsb2F0JiBhbHBoYSkKK2lubGluZSB2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6
Omx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYg
YWxwaGEpIGNvbnN0CiB7CiAgICAgYWxwaGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBncmVl
biArIDAuMDcyMSAqIGJsdWU7CiAgICAgcmVkID0gMDsKQEAgLTk3LDE4ICsxNjksMTMgQEAgaW5s
aW5lIHZvaWQgbHVtaW5hbmNlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUs
IGZsb2F0JiBhbHBoYSkKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFKQotdGVtcGxhdGU8Q29sb3JN
YXRyaXhUeXBlIGZpbHRlclR5cGU+Ci1ib29sIGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhD
bGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgZmxv
YXQgY29tcG9uZW50c1s5XSwgSW50U2l6ZSBidWZmZXJTaXplKQordm9pZCBGRUNvbG9yTWF0cml4
U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtQWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImIHBp
eGVsQnVmZmVyKSBjb25zdAogeworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci5k
YXRhKCk7CisgICAgYXV0byBidWZmZXJTaXplID0gcGl4ZWxCdWZmZXIuc2l6ZSgpOworCiAgICAg
QVNTRVJUKHBpeGVsQXJyYXkubGVuZ3RoKCkgPT0gYnVmZmVyU2l6ZS5hcmVhKCkgKiA0KTsKICAg
ICAKLSAgICBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYKSB7Ci0g
ICAgICAgIC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1hdHJp
eCwgaWYgYW55IHZhbHVlIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xvck1hdHJpeCA1
eDQgbWF0cml4Ci0gICAgICAgIC8vIGlzIG5vdCB6ZXJvLCBmYWxsIGJhY2sgdG8gbm9uLXZJbWFn
ZSBjb2RlLgotICAgICAgICBpZiAodmFsdWVzWzRdICE9IDAgfHwgdmFsdWVzWzldICE9IDAgfHwg
dmFsdWVzWzE0XSAhPSAwIHx8IHZhbHVlc1sxOV0gIT0gMCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KICAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7CiAgICAgdWlu
dDhfdCogZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOwogCkBAIC0xMjQsOCArMTkxLDEzIEBAIGJv
b2wgZWZmZWN0QXBwbHlBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwg
Y29uc3QgVmVjdG9yPGZsb2F0PiYKICAgICBkZXN0LnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0
aCgpICogNDsKICAgICBkZXN0LmRhdGEgPSBkYXRhOwogCi0gICAgc3dpdGNoIChmaWx0ZXJUeXBl
KSB7CisgICAgc3dpdGNoIChtX2VmZmVjdC50eXBlKCkpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9VTktOT1dOOgorICAgICAgICBicmVhazsKKwogICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX01BVFJJWDogeworICAgICAgICBjb25zdCBhdXRvJiB2YWx1ZXMgPSBtX2VmZmVjdC52
YWx1ZXMoKTsKKwogICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7CiAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAwXSAqIGRpdmlzb3Ip
KSwKICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDVdICog
ZGl2aXNvcikpLApAQCAtMTU0LDE5ICsyMjYsMTkgQEAgYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJh
dGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jgog
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgogICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX0hVRVJPVEFURTogewogICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICog
NF0gPSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50
c1swXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zihjb21wb25lbnRzWzNdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbNl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21wb25lbnRzWzBdICogZGl2aXNvcikpLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1szXSAqIGRp
dmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBv
bmVudHNbNl0gKiBkaXZpc29yKSksCiAgICAgICAgICAgICAwLAogCi0gICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1sxXSAqIGRpdmlzb3IpKSwKLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzRdICogZGl2aXNv
cikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNb
N10gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
bV9jb21wb25lbnRzWzFdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s0XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbN10gKiBkaXZpc29yKSksCiAg
ICAgICAgICAgICAwLAogCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
Y29tcG9uZW50c1syXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZihjb21wb25lbnRzWzVdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21wb25lbnRzWzJdICogZGl2aXNv
cikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50
c1s1XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
ZihtX2NvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCiAgICAgICAgICAgICAwLAogCiAgICAgICAg
ICAgICAwLApAQCAtMjAzLDM4ICsyNzUsMjUgQEAgYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVk
KFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JgogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwogfQogI2Vu
ZGlmCiAKLXRlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlPgotdm9pZCBlZmZlY3RU
eXBlKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2
YWx1ZXMsIEludFNpemUgYnVmZmVyU2l6ZSkKK3ZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBw
bGllcjo6YXBwbHlQbGF0Zm9ybVVuYWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVy
KSBjb25zdAogewotICAgIGZsb2F0IGNvbXBvbmVudHNbOV07Ci0KLSAgICBpZiAoZmlsdGVyVHlw
ZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUpCi0gICAgICAgIEZFQ29sb3JNYXRyaXg6
OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotICAg
IGVsc2UgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkKLSAg
ICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhjb21wb25l
bnRzLCB2YWx1ZXNbMF0pOwotCisgICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRh
dGEoKTsKICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgo
KTsKIAotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIGlmIChlZmZlY3RBcHBseUFjY2VsZXJhdGVk
PGZpbHRlclR5cGU+KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSkp
Ci0gICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlclNpemUpOwot
I2VuZGlmCisgICAgc3dpdGNoIChtX2VmZmVjdC50eXBlKCkpIHsKKyAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9VTktOT1dOOgorICAgICAgICBicmVhazsKIAotICAgIHN3aXRjaCAoZmlsdGVy
VHlwZSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFy
cmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVk
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAgICBmbG9hdCBy
ZWQgICA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwogICAgICAgICAgICAgZmxv
YXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAgICAg
ICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwor
ICAgICAgICAgICAgZmxvYXQgYmx1ZSAgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
ICsgMik7CiAgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQgKyAzKTsKLSAgICAgICAgICAgIG1hdHJpeChyZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSwgdmFsdWVzKTsKKyAgICAgICAgICAgIG1hdHJpeChyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
CiAgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7CiAgICAg
ICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CiAgICAg
ICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKQEAgLTI0
NSwxMSArMzA0LDExIEBAIHZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxB
cnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTCiAgICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfU0FUVVJBVEU6CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9U
QVRFOgogICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0
ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7Ci0gICAg
ICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAg
ICAgICAgICAgIGZsb2F0IHJlZCAgID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7
CiAgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBibHVlICA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKICAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgc2F0dXJhdGVBbmRI
dWVSb3RhdGUocmVkLCBncmVlbiwgYmx1ZSwgY29tcG9uZW50cyk7CisgICAgICAgICAgICBzYXR1
cmF0ZUFuZEh1ZVJvdGF0ZShyZWQsIGdyZWVuLCBibHVlKTsKICAgICAgICAgICAgIHBpeGVsQXJy
YXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0
KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0
KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOwpAQCAtMjU5LDkgKzMxOCw5IEBAIHZvaWQgZWZm
ZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0
PiYgdmFsdWVzLCBJbnRTCiAKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VU
T0FMUEhBOgogICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVs
Qnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7Ci0g
ICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsK
KyAgICAgICAgICAgIGZsb2F0IHJlZCAgID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNl
dCk7CiAgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVP
ZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4
ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBibHVlICA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKICAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwogICAgICAgICAgICAgbHVtaW5hbmNl
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBp
eGVsQnl0ZU9mZnNldCwgcmVkKTsKQEAgLTI3Myw1MSArMzMyLDUyIEBAIHZvaWQgZWZmZWN0VHlw
ZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFs
dWVzLCBJbnRTCiAgICAgfQogfQogCi1ib29sIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImKQordm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKK3sKKyNpZiBV
U0UoQUNDRUxFUkFURSkKKyAgICBjb25zdCBhdXRvJiB2YWx1ZXMgPSBtX2VmZmVjdC52YWx1ZXMo
KTsKKworICAgIC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1h
dHJpeCwgaWYgYW55IHZhbHVlIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xvck1hdHJp
eCA1eDQgbWF0cml4CisgICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdl
IGNvZGUuCisgICAgaWYgKG1fZWZmZWN0LnR5cGUoKSAhPSBGRUNPTE9STUFUUklYX1RZUEVfTUFU
UklYIHx8ICghdmFsdWVzWzRdICYmICF2YWx1ZXNbOV0gJiYgIXZhbHVlc1sxNF0gJiYgIXZhbHVl
c1sxOV0pKSB7CisgICAgICAgIGFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChwaXhlbEJ1ZmZlcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBhcHBseVBsYXRmb3JtVW5hY2Nl
bGVyYXRlZChwaXhlbEJ1ZmZlcik7Cit9CisKK2Jvb2wgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBw
bGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1
dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CiAKLSAgICBJbWFnZUJ1
ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8g
cmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5jcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlm
ICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEltYWdlQnVmZmVy
KiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gaW5CdWZmZXIg
PSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoaW5CdWZmZXIpCi0gICAgICAgIHJl
c3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICByZXN1
bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIG1fZWZmZWN0LmRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAotICAg
IFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHRDb2xvclNwYWNlKCkgfTsKKyAg
ICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9lZmZlY3QucmVzdWx0Q29sb3JTcGFj
ZSgpIH07CiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPnRy
dW5jYXRlZExvZ2ljYWxTaXplKCkpOwogICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFn
ZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBpbWFnZVJlY3QpOwogICAgIGlmICghcGl4ZWxCdWZm
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhl
bEJ1ZmZlci0+ZGF0YSgpOwotICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1
ZmZlci0+c2l6ZSgpOwotCi0gICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxv
YXRzKG1fdmFsdWVzKTsKLSAgICAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZ
UEVfTUFUUklYPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6IAotICAg
ICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURT4ocGl4ZWxBcnJheSwg
dmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9S
TUFUUklYX1RZUEVfSFVFUk9UQVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1l
bnNpb25zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVN
SU5BTkNFVE9BTFBIQToKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTFVN
SU5BTkNFVE9BTFBIQT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7
Ci0gICAgICAgIHNldElzQWxwaGFJbWFnZSh0cnVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQor
ICAgIGlmIChtX2VmZmVjdC50eXBlKCkgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRP
QUxQSEEpCisgICAgICAgIG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZSh0cnVlKTsKIAorICAgIGFw
cGx5UGxhdGZvcm0oKnBpeGVsQnVmZmVyKTsKICAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZm
ZXIoKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29s
IEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRl
cikKK3sKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBw
bHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCiB7CiAg
ICAgc3dpdGNoICh0eXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCmluZGV4IDQ5N2ViMTk1ZTQxNzVlY2Rm
ZDBjYWIyNGNiY2Q5YjBlMzlhN2Y4MDkuLmY2OWYwYjAxYzk1MDdlMDUyNmUwZDE3N2ViYmVmOTY5
MDA5Y2UxZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC00NCw4ICs0NCw5IEBAIHB1YmxpYzoKICAg
ICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsg
fQogICAgIGJvb2wgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKIAotICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVu
dHMsIGZsb2F0IHZhbHVlKTsKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlSHVlUm90
YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHN0YXRp
YyB2b2lkIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxv
YXQgdmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMo
ZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMgVmVjdG9yPGZsb2F0
PiBub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcyk7CiAKIHByaXZh
dGU6CiAgICAgRkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4mJik7
CkBAIC01OCwzNSArNTksNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxmbG9hdD4gbV92YWx1ZXM7
CiB9OwogCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBv
bmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQotewotICAgIGNvbXBvbmVudHNb
MF0gPSAoMC4yMTMgKyAwLjc4NyAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzFdID0gKDAuNzE1
IC0gMC43MTUgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1syXSA9ICgwLjA3MiAtIDAuMDcyICog
dmFsdWUpOwotICAgIGNvbXBvbmVudHNbM10gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKLSAg
ICBjb21wb25lbnRzWzRdID0gKDAuNzE1ICsgMC4yODUgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50
c1s1XSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbNl0gPSAoMC4y
MTMgLSAwLjIxMyAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzddID0gKDAuNzE1IC0gMC43MTUg
KiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s4XSA9ICgwLjA3MiArIDAuOTI4ICogdmFsdWUpOwot
fQotCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25l
bnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKLXsKLSAgICBmbG9hdCBjb3NIdWUg
PSBjb3ModmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKLSAgICBmbG9hdCBzaW5IdWUgPSBzaW4odmFs
dWUgKiBwaUZsb2F0IC8gMTgwKTsKLSAgICBjb21wb25lbnRzWzBdID0gMC4yMTMgKyBjb3NIdWUg
KiAwLjc4NyAtIHNpbkh1ZSAqIDAuMjEzOwotICAgIGNvbXBvbmVudHNbMV0gPSAwLjcxNSAtIGNv
c0h1ZSAqIDAuNzE1IC0gc2luSHVlICogMC43MTU7Ci0gICAgY29tcG9uZW50c1syXSA9IDAuMDcy
IC0gY29zSHVlICogMC4wNzIgKyBzaW5IdWUgKiAwLjkyODsKLSAgICBjb21wb25lbnRzWzNdID0g
MC4yMTMgLSBjb3NIdWUgKiAwLjIxMyArIHNpbkh1ZSAqIDAuMTQzOwotICAgIGNvbXBvbmVudHNb
NF0gPSAwLjcxNSArIGNvc0h1ZSAqIDAuMjg1ICsgc2luSHVlICogMC4xNDA7Ci0gICAgY29tcG9u
ZW50c1s1XSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIgLSBzaW5IdWUgKiAwLjI4MzsKLSAgICBj
b21wb25lbnRzWzZdID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyAtIHNpbkh1ZSAqIDAuNzg3Owot
ICAgIGNvbXBvbmVudHNbN10gPSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1ICsgc2luSHVlICogMC43
MTU7Ci0gICAgY29tcG9uZW50c1s4XSA9IDAuMDcyICsgY29zSHVlICogMC45MjggKyBzaW5IdWUg
KiAwLjA3MjsKLX0KLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbG9yTWF0cml4KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRU
cmFuc2Zlci5jcHAKaW5kZXggOTc3Y2E1YjU3ODQxMzQzZTcxOGY0MjAxNWRiNDEyNGM3ZTBhZWZl
YS4uZDE2MDdkYWRkZWY4ZGQ2ZDgwNzJlOTFmZmZiN2M3YjFhNDM4MDBkMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5z
ZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgogCisjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTQ2LDE4ICs0
Nyw0MSBAQCBGRUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bgogewogfQogCi12b2lkIEZFQ29tcG9uZW50
VHJhbnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYpCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVDb21wb25l
bnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBm
aWxlcy4KK2NsYXNzIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9uZW50VHJhbnNmZXI+IHsKKyAgICB1
c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9uZW50VHJhbnNm
ZXI+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHko
Y29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92
ZXJyaWRlOworCitwcml2YXRlOgorICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1
aW50OF90LCAyNTY+OworCisgICAgc3RhdGljIHZvaWQgY29tcHV0ZUlkZW50aXR5VGFibGUoTG9v
a3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgc3RhdGlj
IHZvaWQgY29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mKTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlRGlzY3JldGVUYWJsZShM
b29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAgICBzdGF0
aWMgdm9pZCBjb21wdXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJik7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1hVGFibGUoTG9v
a3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisKKyAgICBzdGF0
aWMgTG9va3VwVGFibGUgY29tcHV0ZUxvb2t1cFRhYmxlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mKTsKKworICAgIHZvaWQgYXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYpIGNvbnN0
OworfTsKKwordm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRl
SWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mKQogewogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVUYWJ1bGFyVGFi
bGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
dHJhbnNmZXJGdW5jdGlvbikKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGll
cjo6Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQogewogICAgIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKICAg
ICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwogICAgIGlmIChuIDwgMSkKLSAgICAg
ICAgcmV0dXJuOyAgICAgICAgICAgIAorICAgICAgICByZXR1cm47CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgYyA9IGkg
LyAyNTUuMDsgICAgICAgICAgICAgICAgCisgICAgICAgIGRvdWJsZSBjID0gaSAvIDI1NS4wOwog
ICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAtIDEpKTsK
ICAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107CiAgICAgICAgIGRvdWJsZSB2MiA9
IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKQEAgLTY3LDcgKzkxLDcg
QEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRh
YmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmUKICAgICB9CiB9CiAKLXZvaWQgRkVDb21wb25lbnRU
cmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3ZvaWQgRkVDb21w
b25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3Vw
VGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJG
dW5jdGlvbikKIHsKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5z
ZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7CiAgICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNp
emUoKTsKQEAgLTgyLDcgKzEwNiw3IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0
ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uCiAgICAgfQog
fQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJsZShMb29rdXBU
YWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1
bmN0aW9uKQordm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRl
TGluZWFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdmFsdWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGRvdWJsZSB2YWwgPSB0cmFuc2ZlckZ1
bmN0aW9uLnNsb3BlICogaSArIDI1NSAqIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0OwpAQCAt
OTEsNyArMTE1LDcgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlTGluZWFyVGFi
bGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW4KICAgICB9CiB9CiAKLXZvaWQg
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmIHZhbHVl
cywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3Zv
aWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUdhbW1hVGFibGUo
TG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJh
bnNmZXJGdW5jdGlvbikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIGRvdWJsZSBleHBvbmVudCA9IHRyYW5zZmVyRnVuY3Rpb24u
ZXhwb25lbnQ7IC8vIFJDVlQgZG9lc24ndCBsaWtlIHBhc3NpbmcgYSBkb3VibGUgYW5kIGEgZmxv
YXQgdG8gcG93LCBzbyBwcm9tb3RlIHRoaXMgdG8gZG91YmxlCkBAIC0xMDEsNDAgKzEyNSwxMiBA
QCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxl
JiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudAogICAgIH0KIH0KIAotYm9vbCBGRUNvbXBvbmVudFRy
YW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK0ZFQ29tcG9uZW50
VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6Okxvb2t1cFRhYmxlIEZFQ29tcG9uZW50VHJhbnNmZXJT
b2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVMb29rdXBUYWJsZShjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiBmdW5jdGlvbikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBMb29rdXBUYWJsZSB0YWJsZTsKIAotICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsK
LQotICAgIExvb2t1cFRhYmxlIHJlZFRhYmxlOwotICAgIExvb2t1cFRhYmxlIGdyZWVuVGFibGU7
Ci0gICAgTG9va3VwVGFibGUgYmx1ZVRhYmxlOwotICAgIExvb2t1cFRhYmxlIGFscGhhVGFibGU7
Ci0gICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxl
LCBhbHBoYVRhYmxlKTsKLQotICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdp
b25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5j
b3B5VW5tdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZHJhd2luZ1JlY3Qs
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgdW5zaWduZWQgZGVzdGluYXRpb25QaXhlbEFy
cmF5TGVuZ3RoID0gZGVzdGluYXRpb25QaXhlbEFycmF5Lmxlbmd0aCgpOwotICAgIHVpbnQ4X3Qq
IGRhdGEgPSBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpOwotICAgIGZvciAodW5zaWduZWQg
cGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0
aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0XSA9IHJlZFRh
YmxlW2RhdGFbcGl4ZWxPZmZzZXRdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDFdID0g
Z3JlZW5UYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMV1dOwotICAgICAgICBkYXRhW3BpeGVsT2Zm
c2V0ICsgMl0gPSBibHVlVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDJdXTsKLSAgICAgICAgZGF0
YVtwaXhlbE9mZnNldCArIDNdID0gYWxwaGFUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgM11dOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6
OmNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRhYmxlLCBMb29rdXBUYWJsZSYg
Z3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9va3VwVGFibGUmIGFscGhhVGFi
bGUpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZFRhYmxlLnNpemUoKTsgKytp
KQotICAgICAgICByZWRUYWJsZVtpXSA9IGdyZWVuVGFibGVbaV0gPSBibHVlVGFibGVbaV0gPSBh
bHBoYVRhYmxlW2ldID0gaTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUuc2l6
ZSgpOyArK2kpCisgICAgICAgIHRhYmxlW2ldID0gaTsKIAogICAgIHVzaW5nIFRyYW5zZmVyVHlw
ZSA9IHZvaWQgKCopKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYpOwogICAgIFRyYW5zZmVyVHlwZSBjYWxsRWZmZWN0W10gPSB7CkBAIC0xNDYsMTUgKzE0Miw1
MCBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3Vw
VGFibGUmIHJlZFRhYmxlLCBMb29rdXBUYWJsZQogICAgICAgICBjb21wdXRlR2FtbWFUYWJsZSAg
ICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEKICAgICB9OwogCi0gICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3JlZEZ1
bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2dyZWVuRnVu
Y3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYmx1ZUZ1bmN0
aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FscGhhRnVuY3Rp
b24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKKyAgICBSRUxFQVNFX0FT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4oZnVuY3Rp
b24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKKyAgICBjYWxsRWZmZWN0
W2Z1bmN0aW9uLnR5cGVdKHRhYmxlLCBmdW5jdGlvbik7CiAKLSAgICBjYWxsRWZmZWN0W21fcmVk
RnVuY3Rpb24udHlwZV0ocmVkVGFibGUsIG1fcmVkRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3Rb
bV9ncmVlbkZ1bmN0aW9uLnR5cGVdKGdyZWVuVGFibGUsIG1fZ3JlZW5GdW5jdGlvbik7Ci0gICAg
Y2FsbEVmZmVjdFttX2JsdWVGdW5jdGlvbi50eXBlXShibHVlVGFibGUsIG1fYmx1ZUZ1bmN0aW9u
KTsKLSAgICBjYWxsRWZmZWN0W21fYWxwaGFGdW5jdGlvbi50eXBlXShhbHBoYVRhYmxlLCBtX2Fs
cGhhRnVuY3Rpb24pOworICAgIHJldHVybiB0YWJsZTsKK30KKwordm9pZCBGRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJiBwaXhlbEJ1
ZmZlcikgY29uc3QKK3sKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgp
OworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOwor
ICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKKworICAgIGF1dG8gcmVkVGFi
bGUgICA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2VmZmVjdC5yZWRGdW5jdGlvbigpKTsKKyAgICBh
dXRvIGdyZWVuVGFibGUgPSBjb21wdXRlTG9va3VwVGFibGUobV9lZmZlY3QuZ3JlZW5GdW5jdGlv
bigpKTsKKyAgICBhdXRvIGJsdWVUYWJsZSAgPSBjb21wdXRlTG9va3VwVGFibGUobV9lZmZlY3Qu
Ymx1ZUZ1bmN0aW9uKCkpOworICAgIGF1dG8gYWxwaGFUYWJsZSA9IGNvbXB1dGVMb29rdXBUYWJs
ZShtX2VmZmVjdC5hbHBoYUZ1bmN0aW9uKCkpOworCisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9m
ZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0g
NCkgeworICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0XSAgICAgPSByZWRUYWJsZVtkYXRhW3BpeGVs
T2Zmc2V0XV07CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0
YVtwaXhlbE9mZnNldCArIDFdXTsKKyAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDJdID0gYmx1
ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQg
KyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDNdXTsKKyAgICB9Cit9CisKK2Jv
b2wgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCit7CisgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKyAgICAKKyAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QuY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhdXRvIGRyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAg
ICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRyYXdp
bmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOworCisgICAgYXBwbHlQbGF0
Zm9ybSgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBs
aWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKIH0KIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvbmVudFRyYW5zZmVyVHlw
ZSB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAppbmRleCA2YWRhOWMwYWJiZTVjMmY5
ZDY1YmQ5MTlmZmVjNGYxNzNkMDAzNDE0Li41MThlYTEzNDdhNGFkZGJhNGNkNTAwY2I0MmM4MTM3
MDZkY2NkMTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaApAQCAtNjEsMTYgKzYxLDYg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIGdyZWVuRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1
bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuYyk7CiAKLSAgICB1
c2luZyBMb29rdXBUYWJsZSA9IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PjsKLQotICAgIHN0YXRp
YyB2b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUo
TG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3Rh
dGljIHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxl
KExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0
YXRpYyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpOwotCi0gICAgdm9pZCBjb21wdXRlTG9va3VwVGFibGVzKExvb2t1
cFRhYmxlJiByZWRUYWJsZSwgTG9va3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBi
bHVlVGFibGUsIExvb2t1cFRhYmxlJiBhbHBoYVRhYmxlKTsKLQogICAgIGJvb2wgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDI1YWMwMDg0MjRi
ZDg2MzExODQ3ODkwOTUwYmNmNjNlNWFlZjVmYTguLmYxMjlmNDU1NzEwYWM3ZmI1NGRlYTY1MmQy
ZjNkODI3NTU3NTFhYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5j
bHVkZSAiRkVDb21wb3NpdGUuaCIKIAogI2luY2x1ZGUgIkZFQ29tcG9zaXRlQXJpdGhtZXRpY05F
T04uaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJQaXhlbEJ1
ZmZlci5oIgpAQCAtOTQsMTYgKzk1LDYyIEBAIHZvaWQgRkVDb21wb3NpdGU6OmNvcnJlY3RGaWx0
ZXJSZXN1bHRJZk5lZWRlZCgpCiAKICAgICBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygp
OwogfQotICAgIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgY2xhbXBCeXRlKGludCBjKQorCit2b2lk
IEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZp
bHRlcikKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BF
UkFUT1JfSU46CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgorICAgICAgICAv
LyBGb3IgSW4gYW5kIEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJl
c3VsdCBvZgorICAgICAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFi
c29sdXRlIHBhaW50IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KKyAgICAgICAgc2V0
QWJzb2x1dGVQYWludFJlY3QoaW5wdXRFZmZlY3QoMSktPmFic29sdXRlUGFpbnRSZWN0KCkpOwor
ICAgICAgICBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzoKKyAgICAgICAgLy8gQXJpdGhtZXRp
YyBtYXkgaW5mbHVuY2UgdGhlIGNvbXBlbGUgZmlsdGVyIHByaW1pdGl2ZSByZWdpb24uIFNvIHdl
IGNhbid0CisgICAgICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KKyAgICAg
ICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFRha2UgdGhlIHVu
aW9uIG9mIGJvdGggaW5wdXQgZWZmZWN0cy4KKyAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdChmaWx0ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorfQor
CisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIgdG8g
c2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUNvbXBvc2l0ZVNvZnR3
YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb21wb3Np
dGU+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29t
cG9zaXRlPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFw
cGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3Rz
KSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdWludDhfdCBjbGFtcEJ5dGUoaW50
KTsKKworICAgIHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KKyAgICBzdGF0aWMgaW5saW5lIHZv
aWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHModW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25l
ZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9h
dCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKworICAgIHRlbXBsYXRlIDxpbnQgYjEsIGludCBi
ND4KKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1w
ZWQodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50
IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0
KTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseVBsYXRmb3JtQXJpdGhtZXRpYyh1bnNp
Z25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxB
cnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOworCisg
ICAgYm9vbCBhcHBseUFyaXRobWV0aWMoRmlsdGVyRWZmZWN0JiBpbnB1dCwgRmlsdGVyRWZmZWN0
JiBpbnB1dDIpOworICAgIGJvb2wgYXBwbHlOb25Bcml0aG1ldGljKEZpbHRlckVmZmVjdCYgaW5w
dXQsIEZpbHRlckVmZmVjdCYgaW5wdXQyKTsKK307CisKK3VpbnQ4X3QgRkVDb21wb3NpdGVTb2Z0
d2FyZUFwcGxpZXI6OmNsYW1wQnl0ZShpbnQgYykKIHsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZb
XSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1NSwgMCB9OworICAgIHVpbnQ4
X3QgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1aW50OF90PihjKSwgMjU1LCAwIH07CiAgICAgdW5z
aWduZWQgdWMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYyk7CiAgICAgcmV0dXJuIGJ1ZmZbISEo
dWMgJiB+MHhmZikgKyAhISh1YyAmIH4ofjB1ID4+IDEpKV07CiB9CiAKIHRlbXBsYXRlIDxpbnQg
YjEsIGludCBiND4KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVscyh1
bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4
ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCitp
bmxpbmUgdm9pZCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUFyaXRobWV0aWNQ
aXhlbHModW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwg
aW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0
IGs0KQogewogICAgIGZsb2F0IHNjYWxlZEsxOwogICAgIGZsb2F0IHNjYWxlZEs0OwpAQCAtMTMw
LDcgKzE3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVscyh1
bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqCiAvLyBjb21wdXRlQXJpdGhtZXRp
Y1BpeGVsc1VuY2xhbXBlZCBpcyBhIGZhc3RlciB2ZXJzaW9uIG9mIGNvbXB1dGVBcml0aG1ldGlj
UGl4ZWxzIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgY2xhbXBpbmcKIC8vIGlzIG5vdCBuZWNl
c3NhcnkuIFRoaXMgZW5hYmxlcyBhZ2dyZXNpdmUgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBzdWNo
IGFzIGF1dG8tdmVjdG9yaXphdGlvbi4KIHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KLXN0YXRp
YyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCh1bnNpZ25lZCBj
aGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxl
bmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCitpbmxpbmUgdm9p
ZCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNs
YW1wZWQodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwg
aW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0
IGs0KQogewogICAgIGZsb2F0IHNjYWxlZEsxOwogICAgIGZsb2F0IHNjYWxlZEs0OwpAQCAtMTU1
LDcgKzIwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1Vu
Y2xhbXBlZCh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnCiB9CiAKICNpZiAhSEFWRShBUk1f
TkVPTl9JTlRSSU5TSUNTKQotc3RhdGljIGlubGluZSB2b2lkIGFyaXRobWV0aWNTb2Z0d2FyZSh1
bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4
ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCitp
bmxpbmUgdm9pZCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFyaXRo
bWV0aWModW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwg
aW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0
IGs0KQogewogICAgIGZsb2F0IHVwcGVyTGltaXQgPSBzdGQ6Om1heCgwLjBmLCBrMSkgKyBzdGQ6
Om1heCgwLjBmLCBrMikgKyBzdGQ6Om1heCgwLjBmLCBrMykgKyBrNDsKICAgICBmbG9hdCBsb3dl
ckxpbWl0ID0gc3RkOjptaW4oMC4wZiwgazEpICsgc3RkOjptaW4oMC4wZiwgazIpICsgc3RkOjpt
aW4oMC4wZiwgazMpICsgazQ7CkBAIC0xODgsMTE3ICsyMzUsMTA4IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBhcml0aG1ldGljU29mdHdhcmUodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBj
aGFyKiBkZXN0CiB9CiAjZW5kaWYKIAotaW5saW5lIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3Jt
QXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywg
ZmxvYXQgazQpCitib29sIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBseUFyaXRobWV0
aWMoRmlsdGVyRWZmZWN0JiBpbnB1dCwgRmlsdGVyRWZmZWN0JiBpbnB1dDIpCiB7Ci0gICAgaW50
IGxlbmd0aCA9IHNvdXJjZS5sZW5ndGgoKTsKLSAgICBBU1NFUlQobGVuZ3RoID09IHN0YXRpY19j
YXN0PGludD4oZGVzdGluYXRpb24ubGVuZ3RoKCkpKTsKLSAgICAvLyBUaGUgc2VsZWN0aW9uIGhl
cmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5LgotI2lmIEhBVkUoQVJNX05F
T05fSU5UUklOU0lDUykKLSAgICBBU1NFUlQoIShsZW5ndGggJiAweDMpKTsKLSAgICBwbGF0Zm9y
bUFyaXRobWV0aWNOZW9uKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3Ro
LCBrMSwgazIsIGszLCBrNCk7Ci0jZWxzZQotICAgIGFyaXRobWV0aWNTb2Z0d2FyZShzb3VyY2Uu
ZGF0YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotI2Vu
ZGlmCi19CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LmNyZWF0
ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi12b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKLXsKLSAgICBzd2l0Y2gg
KG1fdHlwZSkgewotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46Ci0gICAgY2FzZSBG
RUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICAvLyBGb3IgSW4gYW5kIEF0b3AgdGhl
IGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgotICAgICAgICAvLyB0
aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBhaW50IHJlY3Qgb2Yg
dGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoaW5w
dXRFZmZlY3QoMSktPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBjbGlwQWJzb2x1dGVQ
YWludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfQVJJVEhNRVRJQzoKLSAgICAgICAgLy8gQXJpdGhtZXRpYyBtYXkgaW5mbHVuY2UgdGhlIGNv
bXBlbGUgZmlsdGVyIHByaW1pdGl2ZSByZWdpb24uIFNvIHdlIGNhbid0Ci0gICAgICAgIC8vIG9w
dGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJl
Y3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRha2UgdGhlIHVuaW9uIG9mIGJvdGggaW5wdXQgZWZm
ZWN0cy4KLSAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChm
aWx0ZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIEludFJlY3Qg
ZWZmZWN0QURyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVs
QnVmZmVyKGlucHV0LmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gc291cmNlUGl4ZWxB
cnJheSA9IGlucHV0LnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0LCBtX2Vm
ZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3Qg
PSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW5wdXQyLmFic29s
dXRlUGFpbnRSZWN0KCkpOworICAgIGlucHV0Mi5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0
aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCwgbV9lZmZlY3Qub3BlcmF0aW5n
Q29sb3JTcGFjZSgpKTsKKworICAgIGludCBsZW5ndGggPSBzb3VyY2VQaXhlbEFycmF5LT5sZW5n
dGgoKTsKKyAgICBBU1NFUlQobGVuZ3RoID09IHN0YXRpY19jYXN0PGludD4oZGVzdGluYXRpb25Q
aXhlbEFycmF5Lmxlbmd0aCgpKSk7CisgICAgYXBwbHlQbGF0Zm9ybUFyaXRobWV0aWMoc291cmNl
UGl4ZWxBcnJheS0+ZGF0YSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpLCBsZW5ndGgs
IG1fZWZmZWN0LmsxKCksIG1fZWZmZWN0LmsyKCksIG1fZWZmZWN0LmszKCksIG1fZWZmZWN0Lms0
KCkpOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK2Jvb2wgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5Tm9uQXJpdGhtZXRpYyhGaWx0ZXJFZmZlY3QmIGlucHV0LCBGaWx0ZXJFZmZlY3Qm
IGlucHV0MikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKLQotICAgIGlmIChtX3R5cGUgPT0g
RkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykgewotICAgICAgICBhdXRvJiBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAg
ICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0
aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
LSAgICAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGlu
Mi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3RC
RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0KLSAgICAgICAgcGxhdGZvcm1B
cml0aG1ldGljU29mdHdhcmUoKnNvdXJjZVBpeGVsQXJyYXksIGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7CisgICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmNyZWF0ZUltYWdlQnVmZmVyUmVz
dWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7
CiAKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbnB1dC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwor
ICAgIGF1dG8gaW1hZ2VCdWZmZXIyID0gaW5wdXQyLmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAg
aWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGF1dG8mIGZpbHRlckNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOworCisgICAgc3dpdGNoIChtX2VmZmVjdC5vcGVyYXRpb24oKSkg
eworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfVU5LTk9XTjoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgotICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbnB1dDIuYWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW5wdXQuYWJzb2x1dGVQYWludFJlY3QoKSkpOwogICAgICAgICBicmVhazsK
KwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46IHsKICAgICAgICAgLy8gQXBwbGll
cyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdpb24uCi0gICAgICAgIEludFJlY3QgZGVzdGlu
YXRpb25SZWN0ID0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIGRlc3RpbmF0aW9u
UmVjdC5pbnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgZGVzdGlu
YXRpb25SZWN0LmludGVyc2VjdChhYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICAgICAgSW50UmVj
dCBkZXN0aW5hdGlvblJlY3QgPSBpbnB1dC5hYnNvbHV0ZVBhaW50UmVjdCgpOworICAgICAgICBk
ZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGlucHV0Mi5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAg
ICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVj
dCgpKTsKICAgICAgICAgaWYgKGRlc3RpbmF0aW9uUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgSW50UmVjdCBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRlc3Rp
bmF0aW9uUmVjdCAtIGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50
UmVjdCBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3RpbmF0aW9u
UmVjdCAtIGluMi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOworICAgICAgICBJbnRS
ZWN0IGFkanVzdGVkRGVzdGluYXRpb25SZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gbV9lZmZlY3Qu
YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOworICAgICAgICBJbnRSZWN0IHNvdXJjZVJl
Y3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbnB1dC5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9u
KCk7CisgICAgICAgIEludFJlY3Qgc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbnB1
dDIuYWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwogICAgICAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3QoYWRqdXN0ZWREZXN0aW5h
dGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlMlJlY3QpKTsKICAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBGbG9hdFJlY3QoYWRqdXN0ZWREZXN0aW5h
dGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlUmVjdCksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNv
dXJjZUluIH0pOwogICAgICAgICBicmVhazsKICAgICB9CisKICAgICBjYXNlIEZFQ09NUE9TSVRF
X09QRVJBVE9SX09VVDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlt
YWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
cjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwg
eyB7IH0sIGltYWdlQnVmZmVyMi0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6
RGVzdGluYXRpb25PdXQpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW5wdXQuYWJz
b2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlucHV0
Mi5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyMi0+bG9naWNhbFNpemUo
KSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdXQpOwogICAgICAgICBicmVhazsK
KwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgp
IH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsKKyAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbnB1dDIuYWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW5wdXQuYWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1
ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlQXRvcCk7CiAg
ICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6Ci0gICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+
bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKKyAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbnB1dDIuYWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW5wdXQuYWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBp
bWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKICAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisK
ICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI6Ci0gICAgICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUo
KSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VC
dWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlucHV0Mi5hYnNvbHV0
ZVBhaW50UmVjdCgpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbnB1dC5hYnNv
bHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENv
bXBvc2l0ZU9wZXJhdG9yOjpQbHVzTGlnaHRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAog
ICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjph
cHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0
cykKK3sKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOworICAg
IEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3RzWzFdLmdldCgpOworCisgICAgaWYgKG1f
ZWZmZWN0Lm9wZXJhdGlvbigpID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCisg
ICAgICAgIHJldHVybiBhcHBseUFyaXRobWV0aWMoKmluLCAqaW4yKTsKKyAgICByZXR1cm4gYXBw
bHlOb25Bcml0aG1ldGljKCppbiwgKmluMik7Cit9CisKK2Jvb2wgRkVDb21wb3NpdGU6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVD
b21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3Rz
KCkpOworfQorCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDkzZjZkZjg3YThjYmQzYzE2NDI0M2Yy
NDM2MDRkY2VlZWI4MWE2NjQuLmE2NzNhMWUwYzIzOTVhMmI1NTczMjQyNDI2OWFiMzUwMjc2ODUx
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtMjQsOCArMjQsOSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAorI2luY2x1ZGUg
IkZFQ29sb3JNYXRyaXguaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5j
bHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
IApAQCAtMTE0LDYgKzExNSw0MiBAQCBib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldFByZXNlcnZl
QWxwaGEoYm9vbCBwcmVzZXJ2ZUFscGhhKQogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBGSVhN
RTogTW92ZSB0aGUgY2xhc3MgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllciB0byBzZXBh
cmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFQ29udm9sdmVNYXRyaXhTb2Z0
d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29udm9s
dmVNYXRyaXg+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVy
PEZFQ29udm9sdmVNYXRyaXg+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKwor
ICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0cnVjdCBQYWludGluZ0Rh
dGEgeworICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsKKyAg
ICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7CisgICAgICAgIGludCB3aWR0
aDsKKyAgICAgICAgaW50IGhlaWdodDsKKworICAgICAgICBJbnRTaXplIGtlcm5lbFNpemU7Cisg
ICAgICAgIGZsb2F0IGRpdmlzb3I7CisgICAgICAgIGZsb2F0IGJpYXM7CisgICAgICAgIEludFBv
aW50IHRhcmdldE9mZnNldDsKKyAgICAgICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlOworICAgICAg
ICBib29sIHByZXNlcnZlQWxwaGE7CisgICAgICAgIFZlY3RvcjxmbG9hdD4ga2VybmVsTWF0cml4
OworICAgIH07CisKKyAgICBzdGF0aWMgaW5saW5lIHVpbnQ4X3QgY2xhbXBSR0JBVmFsdWUoZmxv
YXQgY2hhbm5lbCwgdWludDhfdCBtYXggPSAyNTUpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBz
ZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4ZWxz
LCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFs
cywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzKTsK
KworICAgIHN0YXRpYyBpbmxpbmUgaW50IGdldFBpeGVsVmFsdWUoY29uc3QgUGFpbnRpbmdEYXRh
JiwgaW50IHgsIGludCB5KTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRJbnRlcmlvclBp
eGVscyhQYWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlT
dGFydCwgaW50IHlFbmQpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRPdXRlclBpeGVscyhQ
YWludGluZ0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOworCisgICAgdm9p
ZCBhcHBseVBsYXRmb3JtKFBhaW50aW5nRGF0YSYpIGNvbnN0OworfTsKKwogLyoKICAgIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICBDb252b2x2ZU1hdHJpeCBpbXBs
ZW1lbnRhdGlvbgpAQCAtMTcwLDcgKzIwNyw3IEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0
UHJlc2VydmVBbHBoYShib29sIHByZXNlcnZlQWxwaGEpCiAgICBhbmQgd291bGQgbWFrZSBpdCBy
ZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgogKi8KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgdW5z
aWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIG1h
eCA9IDI1NSkKK2lubGluZSB1aW50OF90IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6
OmNsYW1wUkdCQVZhbHVlKGZsb2F0IGNoYW5uZWwsIHVpbnQ4X3QgbWF4KQogewogICAgIGlmIChj
aGFubmVsIDw9IDApCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTc5LDEwICsyMTYsOSBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBjaGFyIGNsYW1wUkdCQVZhbHVlKGZsb2F0IGNoYW5u
ZWwsIHVuc2lnbmVkIGNoYXIgbQogICAgIHJldHVybiBjaGFubmVsOwogfQogCi10ZW1wbGF0ZTxi
b29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgc2V0RGVzdGluYXRp
b25QaXhlbHMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZVBpeGVscywgVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RQaXhlbHMsIGludCYgcGl4ZWwsIGZsb2F0KiB0b3RhbHMsIGZsb2F0IGRp
dmlzb3IsIGZsb2F0IGJpYXMpCitpbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVB
cHBsaWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291
cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxv
YXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhh
VmFsdWVzKQogewotICAgIHVuc2lnbmVkIGNoYXIgbWF4QWxwaGEgPSBwcmVzZXJ2ZUFscGhhVmFs
dWVzID8gMjU1IDogY2xhbXBSR0JBVmFsdWUodG90YWxzWzNdIC8gZGl2aXNvciArIGJpYXMpOwor
ICAgIHVpbnQ4X3QgbWF4QWxwaGEgPSBwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMjU1IDogY2xhbXBS
R0JBVmFsdWUodG90YWxzWzNdIC8gZGl2aXNvciArIGJpYXMpOwogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMzsgKytpKQogICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCsrLCBjbGFtcFJHQkFW
YWx1ZSh0b3RhbHNbaV0gLyBkaXZpc29yICsgYmlhcywgbWF4QWxwaGEpKTsKIApAQCAtMTkzLDI1
ICsyMjksNDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFUKICAgICAgICAgZGVzdFBpeGVscy5z
ZXQocGl4ZWwrKywgbWF4QWxwaGEpOwogfQogCi0jaWYgQ09NUElMRVIoTVNWQykKLS8vIEluY29y
cmVjdGx5IGRpYWdub3Npbmcgb3ZlcndyaXRlIG9mIHN0YWNrIGluIHx0b3RhbHN8IGR1ZSB0byB8
cHJlc2VydmVBbHBoYVZhbHVlc3wuCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2Fy
bmluZyhkaXNhYmxlOiA0Nzg5KQotI2VuZGlmCitpbmxpbmUgaW50IEZFQ29udm9sdmVNYXRyaXhT
b2Z0d2FyZUFwcGxpZXI6OmdldFBpeGVsVmFsdWUoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEsIGludCB4LCBpbnQgeSkKK3sKKyAgICBpZiAoeCA+PSAwICYmIHggPCBwYWludGluZ0Rh
dGEud2lkdGggJiYgeSA+PSAwICYmIHkgPCBwYWludGluZ0RhdGEuaGVpZ2h0KQorICAgICAgICBy
ZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOworCisgICAgc3dpdGNoIChw
YWludGluZ0RhdGEuZWRnZU1vZGUpIHsKKyAgICBkZWZhdWx0OiAvLyBFREdFTU9ERV9OT05FCisg
ICAgICAgIHJldHVybiAtMTsKKyAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKKyAgICAgICAg
aWYgKHggPCAwKQorICAgICAgICAgICAgeCA9IDA7CisgICAgICAgIGVsc2UgaWYgKHggPj0gcGFp
bnRpbmdEYXRhLndpZHRoKQorICAgICAgICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0aCAtIDE7
CisgICAgICAgIGlmICh5IDwgMCkKKyAgICAgICAgICAgIHkgPSAwOworICAgICAgICBlbHNlIGlm
ICh5ID49IHBhaW50aW5nRGF0YS5oZWlnaHQpCisgICAgICAgICAgICB5ID0gcGFpbnRpbmdEYXRh
LmhlaWdodCAtIDE7CisgICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgp
IDw8IDI7CisgICAgY2FzZSBFREdFTU9ERV9XUkFQOgorICAgICAgICB3aGlsZSAoeCA8IDApCisg
ICAgICAgICAgICB4ICs9IHBhaW50aW5nRGF0YS53aWR0aDsKKyAgICAgICAgeCAlPSBwYWludGlu
Z0RhdGEud2lkdGg7CisgICAgICAgIHdoaWxlICh5IDwgMCkKKyAgICAgICAgICAgIHkgKz0gcGFp
bnRpbmdEYXRhLmhlaWdodDsKKyAgICAgICAgeSAlPSBwYWludGluZ0RhdGEuaGVpZ2h0OworICAg
ICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOworICAgIH0KK30K
IAogLy8gT25seSBmb3IgcmVnaW9uIEMKLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVl
cz4KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQ
aXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBjbGlwUmlnaHQsIGludCBjbGlw
Qm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCkKK2lubGluZSB2b2lkIEZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlF
bmQpCiB7CiAgICAgLy8gZWRnZSBtb2RlIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBwaXhlbHMKLSAg
ICBpbnQgcGl4ZWwgPSAobV90YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsg
bV90YXJnZXRPZmZzZXQueCgpKSAqIDQ7CisgICAgaW50IHBpeGVsID0gKHBhaW50aW5nRGF0YS50
YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgcGFpbnRpbmdEYXRhLnRhcmdl
dE9mZnNldC54KCkpICogNDsKICAgICBpbnQga2VybmVsSW5jcmVhc2UgPSBjbGlwUmlnaHQgKiA0
OwotICAgIGludCB4SW5jcmVhc2UgPSAobV9rZXJuZWxTaXplLndpZHRoKCkgLSAxKSAqIDQ7Cisg
ICAgaW50IHhJbmNyZWFzZSA9IChwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpIC0gMSkg
KiA0OwogICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBm
bG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKKyAgICBmbG9h
dCB0b3RhbHNbNF07CiAKLSAgICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcwotICAgIEFTU0VSVChtX2Rpdmlzb3IpOworICAg
IC8vIGRpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3Vy
ZXMgdGhpcworICAgIEFTU0VSVChwYWludGluZ0RhdGEuZGl2aXNvcik7CiAKICAgICAvLyBTa2lw
IHRoZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKICAgICBwaXhlbCArPSAoY2xp
cEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwpAQCAt
MjIxLDI5ICsyNzksMjggQEAgQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZh
c3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW4KICAgICAgICAgZm9yIChp
bnQgeCA9IGNsaXBSaWdodCArIDE7IHggPiAwOyAtLXgpIHsKICAgICAgICAgICAgIGludCBrZXJu
ZWxWYWx1ZSA9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXguc2l6ZSgpIC0gMTsKICAgICAgICAg
ICAgIGludCBrZXJuZWxQaXhlbCA9IHN0YXJ0S2VybmVsUGl4ZWw7Ci0gICAgICAgICAgICBpbnQg
d2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgIGludCB3aWR0aCA9IHBh
aW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CiAKICAgICAgICAgICAgIHRvdGFsc1swXSA9
IDA7CiAgICAgICAgICAgICB0b3RhbHNbMV0gPSAwOwogICAgICAgICAgICAgdG90YWxzWzJdID0g
MDsKLSAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAg
ICB0b3RhbHNbM10gPSAwOworICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKIAogICAgICAgICAg
ICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKICAgICAgICAgICAgICAgICB0b3RhbHNbMF0g
Kz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxm
bG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7CiAg
ICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2Vy
bmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwogICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWlu
dGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0Pihw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCisgICAgICAgICAgICAgICAgaWYgKCFw
YWludGluZ0RhdGEucHJlc2VydmVBbHBoYSkKICAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNd
ICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwpKTsKICAg
ICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsOwogICAgICAgICAgICAgICAgIC0ta2VybmVsVmFs
dWU7CiAgICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7CiAgICAgICAgICAgICAgICAgICAg
IGtlcm5lbFBpeGVsICs9IGtlcm5lbEluY3JlYXNlOwotICAgICAgICAgICAgICAgICAgICB3aWR0
aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHBh
aW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVsczxwcmVzZXJ2ZUFscGhh
VmFsdWVzPihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLmRzdFBpeGVs
QXJyYXksIHBpeGVsLCB0b3RhbHMsIG1fZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMpOworICAg
ICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHMocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXks
IHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBwYWludGluZ0RhdGEu
ZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKTsK
ICAgICAgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0gNDsKICAgICAgICAgfQogICAgICAgICBw
aXhlbCArPSB4SW5jcmVhc2U7CkBAIC0yNTEsNjQgKzMwOCwzMyBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYg
cGFpbnRpbgogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBpbnQgRkVDb252b2x2ZU1hdHJpeDo6
Z2V0UGl4ZWxWYWx1ZShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQot
ewotICAgIGlmICh4ID49IDAgJiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYg
eSA8IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0
YS53aWR0aCArIHgpIDw8IDI7Ci0KLSAgICBzd2l0Y2ggKG1fZWRnZU1vZGUpIHsKLSAgICBkZWZh
dWx0OiAvLyBFREdFTU9ERV9OT05FCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBjYXNlIEVER0VN
T0RFX0RVUExJQ0FURToKLSAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgeCA9IDA7Ci0g
ICAgICAgIGVsc2UgaWYgKHggPj0gcGFpbnRpbmdEYXRhLndpZHRoKQotICAgICAgICAgICAgeCA9
IHBhaW50aW5nRGF0YS53aWR0aCAtIDE7Ci0gICAgICAgIGlmICh5IDwgMCkKLSAgICAgICAgICAg
IHkgPSAwOwotICAgICAgICBlbHNlIGlmICh5ID49IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAg
ICAgICAgICB5ID0gcGFpbnRpbmdEYXRhLmhlaWdodCAtIDE7Ci0gICAgICAgIHJldHVybiAoeSAq
IHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAgY2FzZSBFREdFTU9ERV9XUkFQOgot
ICAgICAgICB3aGlsZSAoeCA8IDApCi0gICAgICAgICAgICB4ICs9IHBhaW50aW5nRGF0YS53aWR0
aDsKLSAgICAgICAgeCAlPSBwYWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHdoaWxlICh5IDwg
MCkKLSAgICAgICAgICAgIHkgKz0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgeSAlPSBw
YWludGluZ0RhdGEuaGVpZ2h0OwotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lk
dGggKyB4KSA8PCAyOwotICAgIH0KLX0KLQogLy8gRm9yIG90aGVyIHJlZ2lvbnMgdGhhbiBDCi10
ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci12b2lkIEZFQ29udm9sdmVNYXRyaXg6
OmZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBp
bnQgeTEsIGludCB4MiwgaW50IHkyKQoraW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3
YXJlQXBwbGllcjo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKIHsKICAgICBpbnQgcGl4ZWwgPSAoeTEgKiBw
YWludGluZ0RhdGEud2lkdGggKyB4MSkgKiA0OwogICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOwog
ICAgIGludCB3aWR0aCA9IHgyIC0geDE7Ci0gICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEg
LSBtX3RhcmdldE9mZnNldC54KCk7CisgICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEgLSBw
YWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKTsKICAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFgg
PSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAtIG1f
dGFyZ2V0T2Zmc2V0LnkoKTsKKyAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAtIHBhaW50
aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpOwogICAgIGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdE
YXRhLndpZHRoIC0gd2lkdGgpICogNDsKICAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihh
KSBjb21wb25lbnRzCi0gICAgZmxvYXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVlcyA/
IDAgOiAxKV07CisgICAgZmxvYXQgdG90YWxzWzRdOwogCi0gICAgLy8gbV9kaXZpc29yIGNhbm5v
dCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NF
UlQobV9kaXZpc29yKTsKKyAgICAvLyBwYWludGluZ0RhdGEuZGl2aXNvciBjYW5ub3QgYmUgMCwg
U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCisgICAgQVNTRVJUKHBhaW50
aW5nRGF0YS5kaXZpc29yKTsKIAogICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkp
IHsKICAgICAgICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7CiAgICAgICAgICAg
ICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7
CiAgICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7CiAgICAg
ICAgICAgICBpbnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgICAgICAg
ICBpbnQgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgIGludCB3aWR0
aCA9IHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CiAKICAgICAgICAgICAgIHRvdGFs
c1swXSA9IDA7CiAgICAgICAgICAgICB0b3RhbHNbMV0gPSAwOwogICAgICAgICAgICAgdG90YWxz
WzJdID0gMDsKLSAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAg
ICAgICAgICB0b3RhbHNbM10gPSAwOworICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKIAogICAg
ICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKICAgICAgICAgICAgICAgICBpbnQg
cGl4ZWxJbmRleCA9IGdldFBpeGVsVmFsdWUocGFpbnRpbmdEYXRhLCBrZXJuZWxQaXhlbFgsIGtl
cm5lbFBpeGVsWSk7CkBAIC0zMTcsMTggKzM0MywxOCBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6
OmZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBp
bgogICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1h
dHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1Bp
eGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMSkpOwogICAgICAgICAgICAgICAgICAgICB0b3Rh
bHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNf
Y2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsg
MikpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxw
aGFWYWx1ZXMgJiYgcGl4ZWxJbmRleCA+PSAwKQorICAgICAgICAgICAgICAgIGlmICghcGFpbnRp
bmdEYXRhLnByZXNlcnZlQWxwaGEgJiYgcGl4ZWxJbmRleCA+PSAwKQogICAgICAgICAgICAgICAg
ICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhl
bEluZGV4ICsgMykpOwogICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOwogICAgICAgICAg
ICAgICAgIC0ta2VybmVsVmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwogICAg
ICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWTsKLSAgICAgICAgICAgICAgICAgICAgd2lk
dGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBw
YWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBo
YVZhbHVlcz4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhl
bEFycmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKKyAg
ICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRh
LmRpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7
CiAgICAgICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOwogICAgICAgICB9CiAgICAgICAgIHBp
eGVsICs9IHhJbmNyZWFzZTsKQEAgLTMzNyw5OCArMzYzLDkxIEBAIHZvaWQgRkVDb252b2x2ZU1h
dHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQg
eDEsIGluCiAgICAgfQogfQogCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhw
b3ApIC8vIERpc2FibGUgb2YgNDc4OQotI2VuZGlmCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNv
bnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQor
dm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhKSBjb25zdAogewotICAgIC8vIE11c3QgYmUgaW1wbGVtZW50
ZWQgaGVyZSwgc2luY2UgaXQgcmVmZXJzIGFub3RoZXIgQUxXQVlTX0lOTElORQotICAgIC8vIGZ1
bmN0aW9uLCB3aGljaCBkZWZpbmVkIGluIHRoaXMgQysrIHNvdXJjZSBmaWxlIGFzIHdlbGwKLSAg
ICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8dHJ1
ZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7Ci0g
ICAgZWxzZQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0
YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotfQorICAgIC8vIERyYXdp
bmcgZnVsbHkgY292ZXJlZCBwaXhlbHMKKyAgICBpbnQgY2xpcFJpZ2h0ID0gcGFpbnRpbmdEYXRh
LndpZHRoIC0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKKyAgICBpbnQgY2xpcEJv
dHRvbSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS5oZWln
aHQoKTsKIAotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVyUGl4
ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBp
bnQgeTIpCi17Ci0gICAgLy8gQWx0aG91Z2ggdGhpcyBmdW5jdGlvbiBjYW4gYmUgbW92ZWQgdG8g
dGhlIGhlYWRlciwgaXQgaXMgaW1wbGVtZW50ZWQgaGVyZQotICAgIC8vIGJlY2F1c2Ugc2V0SW50
ZXJpb3JQaXhlbHMgaXMgYWxzbyBpbXBsZW1lbnRlZCBoZXJlCi0gICAgaWYgKG1fcHJlc2VydmVB
bHBoYSkKLSAgICAgICAgZmFzdFNldE91dGVyUGl4ZWxzPHRydWU+KHBhaW50aW5nRGF0YSwgeDEs
IHkxLCB4MiwgeTIpOwotICAgIGVsc2UKLSAgICAgICAgZmFzdFNldE91dGVyUGl4ZWxzPGZhbHNl
PihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKKyAgICBpZiAoY2xpcFJpZ2h0IDwgMCB8
fCBjbGlwQm90dG9tIDwgMCkgeworICAgICAgICAvLyBSYXJlIHNpdHVhdGlvbiwgbm90IG9wdGlt
aXplZCBmb3Igc3BlZWQKKyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAw
LCBwYWludGluZ0RhdGEud2lkdGgsIHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWluaW1hbFJlY3REaW1lbnNp
b24gPSAoMTAwICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpv
YnMKKworICAgIGlmIChpbnQgaXRlcmF0aW9ucyA9IChwYWludGluZ0RhdGEud2lkdGggKiBwYWlu
dGluZ0RhdGEuaGVpZ2h0KSAvIG1pbmltYWxSZWN0RGltZW5zaW9uKSB7CisgICAgICAgIGludCBz
dHJpZGUgPSBjbGlwQm90dG9tIC8gaXRlcmF0aW9uczsKKyAgICAgICAgaW50IGNodW5rQ291bnQg
PSAoY2xpcEJvdHRvbSArIHN0cmlkZSAtIDEpIC8gc3RyaWRlOworCisgICAgICAgIENvbmN1cnJl
bnRXb3JrUXVldWU6OmFwcGx5KGNodW5rQ291bnQsIFsmXShzaXplX3QgaW5kZXgpIHsKKyAgICAg
ICAgICAgIGludCB5U3RhcnQgPSAoc3RyaWRlICogaW5kZXgpOworICAgICAgICAgICAgaW50IHlF
bmQgPSBzdGQ6Om1pbjxpbnQ+KHN0cmlkZSAqIChpbmRleCArIDEpLCBjbGlwQm90dG9tKTsKKwor
ICAgICAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNs
aXBCb3R0b20sIHlTdGFydCwgeUVuZCk7CisgICAgICAgIH0pOworICAgIH0gZWxzZQorICAgICAg
ICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwg
MCwgY2xpcEJvdHRvbSk7CisKKyAgICBjbGlwUmlnaHQgKz0gcGFpbnRpbmdEYXRhLnRhcmdldE9m
ZnNldC54KCkgKyAxOworICAgIGNsaXBCb3R0b20gKz0gcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNl
dC55KCkgKyAxOworCisgICAgaWYgKHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpID4gMCkK
KyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBwYWludGluZ0RhdGEu
d2lkdGgsIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpKTsKKyAgICBpZiAoY2xpcEJvdHRv
bSA8IHBhaW50aW5nRGF0YS5oZWlnaHQpCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5n
RGF0YSwgMCwgY2xpcEJvdHRvbSwgcGFpbnRpbmdEYXRhLndpZHRoLCBwYWludGluZ0RhdGEuaGVp
Z2h0KTsKKyAgICBpZiAocGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC54KCkgPiAwKQorICAgICAg
ICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS50YXJnZXRPZmZz
ZXQueSgpLCBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7CisgICAg
aWYgKGNsaXBSaWdodCA8IHBhaW50aW5nRGF0YS53aWR0aCkKKyAgICAgICAgc2V0T3V0ZXJQaXhl
bHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgp
LCBwYWludGluZ0RhdGEud2lkdGgsIGNsaXBCb3R0b20pOwogfQogCi1ib29sIEZFQ29udm9sdmVN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorYm9vbCBGRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0
ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoMCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5n
ZXQoKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX3ByZXNlcnZlQWxw
aGEgPyBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpIDogY3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZm
ZWN0LnByZXNlcnZlQWxwaGEoKSA/IG1fZWZmZWN0LmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KCkgOiBtX2VmZmVjdC5jcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBp
ZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRh
dGEoKTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25P
ZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gZWZm
ZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZm
ZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogCiAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBzb3VyY2VQaXhlbEFycmF5OwotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAg
IHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmIChtX2VmZmVjdC5wcmVzZXJ2ZUFs
cGhhKCkpCisgICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+dW5tdWx0aXBsaWVkUmVzdWx0
KGVmZmVjdERyYXdpbmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAg
IGVsc2UKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0
KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAgICBzb3Vy
Y2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3Qs
IG1fZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgaWYgKCFzb3VyY2VQaXhlbEFy
cmF5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFi
c29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIAorICAgIGF1dG8gcGFpbnRTaXplID0gbV9l
ZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CisKICAgICBQYWludGluZ0RhdGEgcGFp
bnRpbmdEYXRhID0gewogICAgICAgICAqc291cmNlUGl4ZWxBcnJheSwKICAgICAgICAgZGVzdGlu
YXRpb25QaXhlbEFycmF5LAogICAgICAgICBwYWludFNpemUud2lkdGgoKSwKICAgICAgICAgcGFp
bnRTaXplLmhlaWdodCgpLAotICAgICAgICBtX2JpYXMgKiAyNTUsCi0gICAgICAgIG5vcm1hbGl6
ZWRGbG9hdHMobV9rZXJuZWxNYXRyaXgpCisgICAgICAgIG1fZWZmZWN0Lmtlcm5lbFNpemUoKSwK
KyAgICAgICAgbV9lZmZlY3QuZGl2aXNvcigpLAorICAgICAgICBtX2VmZmVjdC5iaWFzKCkgKiAy
NTUsCisgICAgICAgIG1fZWZmZWN0LnRhcmdldE9mZnNldCgpLAorICAgICAgICBtX2VmZmVjdC5l
ZGdlTW9kZSgpLAorICAgICAgICBtX2VmZmVjdC5wcmVzZXJ2ZUFscGhhKCksCisgICAgICAgIEZF
Q29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMobV9lZmZlY3Qua2VybmVsKCkpCiAgICAgfTsK
IAotICAgIC8vIERyYXdpbmcgZnVsbHkgY292ZXJlZCBwaXhlbHMKLSAgICBpbnQgY2xpcFJpZ2h0
ID0gcGFpbnRTaXplLndpZHRoKCkgLSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICBpbnQgY2xp
cEJvdHRvbSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAtIG1fa2VybmVsU2l6ZS5oZWlnaHQoKTsKLQot
ICAgIGlmIChjbGlwUmlnaHQgPCAwIHx8IGNsaXBCb3R0b20gPCAwKSB7Ci0gICAgICAgIC8vIFJh
cmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1pemVkIGZvciBzcGVlZAotICAgICAgICBzZXRPdXRlclBp
eGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVp
Z2h0KCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoaW50IGl0ZXJh
dGlvbnMgPSAoYWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgpICogYWJzb2x1dGVQYWludFJlY3Qo
KS5oZWlnaHQoKSkgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uKSB7Ci0gICAgICAgIGludCBzdHJp
ZGUgPSBjbGlwQm90dG9tIC8gaXRlcmF0aW9uczsKLSAgICAgICAgaW50IGNodW5rQ291bnQgPSAo
Y2xpcEJvdHRvbSArIHN0cmlkZSAtIDEpIC8gc3RyaWRlOwotCi0gICAgICAgIENvbmN1cnJlbnRX
b3JrUXVldWU6OmFwcGx5KGNodW5rQ291bnQsIFsmXShzaXplX3QgaW5kZXgpIHsKLSAgICAgICAg
ICAgIGludCB5U3RhcnQgPSAoc3RyaWRlICogaW5kZXgpOwotICAgICAgICAgICAgaW50IHlFbmQg
PSBzdGQ6Om1pbjxpbnQ+KHN0cmlkZSAqIChpbmRleCArIDEpLCBjbGlwQm90dG9tKTsKLQotICAg
ICAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBC
b3R0b20sIHlTdGFydCwgeUVuZCk7Ci0gICAgICAgIH0pOwotICAgIH0gZWxzZQotICAgICAgICBz
ZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgMCwg
Y2xpcEJvdHRvbSk7Ci0KLSAgICBjbGlwUmlnaHQgKz0gbV90YXJnZXRPZmZzZXQueCgpICsgMTsK
LSAgICBjbGlwQm90dG9tICs9IG1fdGFyZ2V0T2Zmc2V0LnkoKSArIDE7Ci0gICAgaWYgKG1fdGFy
Z2V0T2Zmc2V0LnkoKSA+IDApCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwg
MCwgMCwgcGFpbnRTaXplLndpZHRoKCksIG1fdGFyZ2V0T2Zmc2V0LnkoKSk7Ci0gICAgaWYgKGNs
aXBCb3R0b20gPCBwYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBh
aW50aW5nRGF0YSwgMCwgY2xpcEJvdHRvbSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5o
ZWlnaHQoKSk7Ci0gICAgaWYgKG1fdGFyZ2V0T2Zmc2V0LngoKSA+IDApCi0gICAgICAgIHNldE91
dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgbV90YXJnZXRPZmZzZXQueSgpLCBtX3RhcmdldE9m
ZnNldC54KCksIGNsaXBCb3R0b20pOwotICAgIGlmIChjbGlwUmlnaHQgPCBwYWludFNpemUud2lk
dGgoKSkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIG1f
dGFyZ2V0T2Zmc2V0LnkoKSwgcGFpbnRTaXplLndpZHRoKCksIGNsaXBCb3R0b20pOwotCisgICAg
YXBwbHlQbGF0Zm9ybShwYWludGluZ0RhdGEpOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29s
IEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZp
bHRlcikKK3sKKyAgICByZXR1cm4gRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcigqdGhp
cykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBFZGdlTW9kZVR5cGUmIHR5cGUpCiB7
CiAgICAgc3dpdGNoICh0eXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4IDA1YzFhODM3
ZDIzNGNmNTg0ZGU4OTBmNTk0YjIyMDczZjEzMzY1YzUuLjZiN2FkZTZmMGIyMjg5ZjM0M2U1Njgx
NGZkOGMyZGU1NDQ3M2ZmOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC02NCwxNiArNjQs
NiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOwogCiBwcml2YXRl
OgotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzcmNQaXhlbEFycmF5OwotICAgICAgICBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4
ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0OwotICAgICAg
ICBmbG9hdCBiaWFzOwotICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtlcm5lbE1hdHJpeDsKLSAgICB9
OwotCiAgICAgRkVDb252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9h
dCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdl
TW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2Vy
dmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsKIAogICAgIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CkBA
IC04MiwyMSArNzIsNiBAQCBwcml2YXRlOgogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci0g
ICAgQUxXQVlTX0lOTElORSB2b2lkIGZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEm
LCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpOwot
Ci0gICAgQUxXQVlTX0lOTElORSBpbnQgZ2V0UGl4ZWxWYWx1ZShQYWludGluZ0RhdGEmLCBpbnQg
eCwgaW50IHkpOwotCi0gICAgdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotICAg
IHZvaWQgZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCB4MSwgaW50IHkxLCBp
bnQgeDIsIGludCB5Mik7Ci0KLSAgICAvLyBXcmFwcGVyIGZ1bmN0aW9ucwotICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0
LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpOwotICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50
IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gUGFyYWxsZWxpemF0aW9uIHBhcnRzCi0gICAgc3RhdGlj
IGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGly
aWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0KICAgICBJbnRTaXplIG1fa2VybmVs
U2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CiAgICAgZmxvYXQgbV9iaWFzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlm
ZnVzZUxpZ2h0aW5nLmNwcAppbmRleCAxYWFjZTlkNjlhMDkwYjRmMTBmMTNkZTc1NTc1MWVmMjg2
MjA5MWNkLi5lYzcxYjU0N2ExZGY4NmE5MTM5ZDEzYWU2MzM4Njc0Mjk1ZTk4N2RkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxp
Z2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcApAQCAtMzMsNyArMzMsNyBAQCBSZWY8RkVEaWZmdXNlTGln
aHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29s
b3IsIGZsbwogfQogCiBGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRpbmcoY29uc3Qg
Q29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNv
bnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFks
IFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoRGlmZnVz
ZUxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwg
MCwgMCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0
U291cmNlKSwgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykKKyAgICA6IEZF
TGlnaHRpbmcoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdD
b2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5n
dGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpCiB7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggMmRmZDg1NzZmN2YxZTAyZjFkMDM0OTE5NWRk
MGMyNWY0NjQ0MzZkYy4uOWRhY2NjMTI3MDVlZjg1YWRlZDFhNGFmYmI0ZTc1ZDY3OTM0ZTBmNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
c3BsYWNlbWVudE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRl
ICJGRURpc3BsYWNlbWVudE1hcC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpA
QCAtODQsMzAgKzg1LDQ4IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnRyYW5zZm9ybVJlc3Vs
dENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50IGluCiAgICAgICAgIGluLT50
cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWdu
ZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMpCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVDb21w
b3NpdGVTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMu
CitjbGFzcyBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVEaXNwbGFjZW1lbnRNYXA+IHsKKyAgICB1c2luZyBCYXNl
ID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRGlzcGxhY2VtZW50TWFwPjsKKworcHVi
bGljOgorICAgIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyKEZFRGlzcGxhY2VtZW50
TWFwJik7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVj
dFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMg
aW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHks
IHVuc2lnbmVkIHJvd0J5dGVzKQorICAgIHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQ
ZXJQaXhlbCA9IDQ7CisgICAgICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhlbCArIHkgKiByb3dC
eXRlczsKKyAgICB9CisKKyAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWZmZWN0LnhDaGFubmVsU2VsZWN0b3IoKSAtIDE7IH0KKyAgICBpbnQgeUNoYW5uZWxJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0LnlDaGFubmVsU2VsZWN0b3IoKSAtIDE7IH0KK307CisK
K0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3
YXJlQXBwbGllcihGRURpc3BsYWNlbWVudE1hcCYgZWZmZWN0KQorICAgIDogQmFzZShlZmZlY3Qp
CiB7Ci0gICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQZXJQaXhlbCA9IDQ7Ci0gICAgcmV0dXJuIHgg
KiBieXRlc1BlclBpeGVsICsgeSAqIHJvd0J5dGVzOworICAgIEFTU0VSVChtX2VmZmVjdC54Q2hh
bm5lbFNlbGVjdG9yKCkgIT0gQ0hBTk5FTF9VTktOT1dOKTsKKyAgICBBU1NFUlQobV9lZmZlY3Qu
eUNoYW5uZWxTZWxlY3RvcigpICE9IENIQU5ORUxfVU5LTk9XTik7CiB9CiAKLWJvb2wgRkVEaXNw
bGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikK
K2Jvb2wgRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRl
ciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKIHsKLSAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBp
bjIgPSBpbnB1dEVmZmVjdCgxKTsKLQotICAgIEFTU0VSVChtX3hDaGFubmVsU2VsZWN0b3IgIT0g
Q0hBTk5FTF9VTktOT1dOKTsKLSAgICBBU1NFUlQobV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5O
RUxfVU5LTk9XTik7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQo
KTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0c1sxXS5nZXQoKTsKIAotICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QuY3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVs
QnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBJbnRSZWN0
IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3Qg
PSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpOwogICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVz
dWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVj
dCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRS
ZWN0KCkpOworICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAg
ICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g4oCYaW4y
4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQgY29sb3IgdmFsdWVzLgog
ICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2UgPSBpbjItPnVubXVsdGlwbGllZFJlc3VsdChlZmZl
Y3RCRHJhd2luZ1JlY3QpOwogICAgIApAQCAtMTE2LDkgKzEzNSw5IEBAIGJvb2wgRkVEaXNwbGFj
ZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIAog
ICAgIEFTU0VSVChpbnB1dEltYWdlLT5sZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRJbWFnZS0+bGVu
Z3RoKCkpOwogCi0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKTsKKyAgICBJbnRTaXplIHBhaW50U2l6ZSA9IG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpOwogCi0gICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVy
U2NhbGUoeyBtX3NjYWxlLCBtX3NjYWxlIH0pOworICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRl
ci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3Quc2NhbGUoKSwgbV9lZmZlY3Quc2NhbGUo
KSB9KTsKICAgICBmbG9hdCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsK
ICAgICBmbG9hdCBzY2FsZUZvckNvbG9yWSA9IHNjYWxlLmhlaWdodCgpIC8gMjU1LjA7CiAgICAg
ZmxvYXQgc2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7CkBAIC0xNTEs
NiArMTcwLDExIEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRURp
c3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQoreworICAgIHJldHVybiBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcigqdGhpcyku
YXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBl
KQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCmluZGV4IDNj
ZDA1Y2M0OTU1MTcxOTlhY2RjODhlZDUxMzc2NjQzNjA2YjkyNWUuLjljNDdhZDkyZmM2YzgzZjIx
YjhkMDgxMzZjZTVlOWI0Yzc4NzU5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKQEAgLTU3
LDkgKzU3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CiAKLSAgICBpbnQgeENoYW5uZWxJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KLSAgICBpbnQgeUNoYW5u
ZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7IH0KLQogICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ2hhbm5lbFNlbGVj
dG9yVHlwZSBtX3hDaGFubmVsU2VsZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggYzE3Mzkw
YTFhNzYyMTVlMTY5M2EzZDdmZGI3YmE5NmMxMmQzOWU3Yi4uYTZhNTIzYTEyNjM3NmJiMzFlMzNl
ODdkYjY0MjIzNDc0MjFhNjJhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMjMsNiArMjMsNyBA
QAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkZFR2F1c3NpYW5C
bHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGll
ci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKQEAgLTY5LDE4ICs3MCwyOCBAQCB2b2lkIEZF
RHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBh
aW50UmVjdCkpOwogfQogCi1ib29sIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYgZmlsdGVyKQorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFRHJvcFNo
YWRvd1NvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4K
K2NsYXNzIEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RD
b25jcmV0ZUFwcGxpZXI8RkVEcm9wU2hhZG93PiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVm
ZmVjdENvbmNyZXRlQXBwbGllcjxGRURyb3BTaGFkb3c+OworCitwdWJsaWM6CisgICAgdXNpbmcg
QmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworfTsKKworYm9vbCBGRURyb3BT
aGFkb3dTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBG
aWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1sw
XS5nZXQoKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFNpemUgYmx1clJhZGl1cyA9IDIgKiBmaWx0ZXIuc2Nh
bGVkQnlGaWx0ZXJTY2FsZSh7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIEZsb2F0U2l6ZSBvZmZz
ZXQgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkgfSk7CisgICAgRmxv
YXRTaXplIGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2Vm
ZmVjdC5zdGREZXZpYXRpb25YKCksIG1fZWZmZWN0LnN0ZERldmlhdGlvblkoKSB9KTsKKyAgICBG
bG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2VmZmVjdC5k
eCgpLCBtX2VmZmVjdC5keSgpIH0pOwogCi0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBG
bG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9u
V2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKICAgICBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldC5t
b3ZlKG9mZnNldCk7CiAKQEAgLTg5LDEzICsxMDAsMTMgQEAgYm9vbCBGRURyb3BTaGFkb3c6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgR3JhcGhpY3NDb250ZXh0JiByZXN1bHRDb250ZXh0ID0gcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKG1fc2hhZG93T3BhY2l0
eSk7CisgICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYShtX2VmZmVjdC5zaGFkb3dPcGFjaXR5KCkp
OwogICAgIHJlc3VsdENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2lu
Z1JlZ2lvbldpdGhPZmZzZXQpOwogICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEoMSk7CiAKLSAg
ICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0Nv
bG9yKTsKKyAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBt
X2VmZmVjdC5zaGFkb3dDb2xvcigpKTsKIAotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JB
OCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBtX2VmZmVjdC5yZXN1bHRDb2xvclNwYWNlKCkgfTsKICAgICBJbnRSZWN0IHNoYWRvd0FyZWEo
SW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPnRydW5jYXRlZExvZ2ljYWxTaXplKCkpOwogICAgIGF1
dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBzaGFk
b3dBcmVhKTsKICAgICBpZiAoIXBpeGVsQnVmZmVyKQpAQCAtMTA3LDE0ICsxMTgsMTggQEAgYm9v
bCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRl
cikKICAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBzaGFkb3dB
cmVhKTsKIAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0
ZU9wZXJhdG9yOjpTb3VyY2VJbik7Ci0gICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9hdFJl
Y3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93Q29s
b3IpOworICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
bV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX2VmZmVjdC5zaGFkb3dDb2xv
cigpKTsKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVP
cGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKIAogICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCku
ZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2luZ1JlZ2lvbik7Ci0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVEcm9wU2hhZG93U29mdHdhcmVB
cHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKyAgICAKIElu
dE91dHNldHMgRkVEcm9wU2hhZG93OjpvdXRzZXRzKCkgY29uc3QKIHsKICAgICBJbnRTaXplIG91
dHNldFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3RkWCwg
bV9zdGRZIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUZsb29kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHAKaW5kZXggMjQzMWU3OTE1NTQ2Njk1MDE3NjQ4MWNkMzllY2QzMGQy
OGYxYWM2Yi4uNzdiMjUyYjk2YTUxOTljYzg0NmY4ZjNlZjI3YWIxOTg4MTI4MDIxMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
Y3BwCkBAIC01OCwxOCArNTgsMzMgQEAgYm9vbCBGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkoZmxv
YXQgZmxvb2RPcGFjaXR5KQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZFRmxvb2Q6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorLy8gRklYTUU6IE1vdmUgdGhlIGNs
YXNzIEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhl
YWRlciBmaWxlcy4KK2NsYXNzIEZFRmxvb2RTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVy
RWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRmxvb2Q+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVy
RWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRmxvb2Q+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFz
ZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZm
ZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworfTsKKworYm9vbCBGRUZsb29kU29m
dHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0
b3ImKQogewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuY3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBhdXRvIGNvbG9yID0gZmxvb2RDb2xvcigpLmNvbG9yV2l0aEFscGhh
TXVsdGlwbGllZEJ5KGZsb29kT3BhY2l0eSgpKTsKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgp
LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6
ZSgpKSwgY29sb3IpOworICAgIGF1dG8gY29sb3IgPSBtX2VmZmVjdC5mbG9vZENvbG9yKCkuY29s
b3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkobV9lZmZlY3QuZmxvb2RPcGFjaXR5KCkpOworICAgIHJl
c3VsdEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9l
ZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBjb2xvcik7CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorYm9vbCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZFRmxvb2RTb2Z0d2FyZUFwcGxpZXIoKnRoaXMp
LmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBUZXh0U3RyZWFtJiBGRUZsb29k
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5
cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVGbG9v
ZCI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCmluZGV4IDUwYjJjMWUwMmQ5ZDg4YzkxZmNjZTg0NTJi
YmM5MTk4NTE4OTRkNWUuLmI3ZDg4N2I3MmYzNTI4OWE2ZGE5NGE3MmM1ZmU3N2M0NzY2YWNkOTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBAIC0yOCwzMCArMjgsMTUwIEBACiAKICNpbmNsdWRl
ICJGRUdhdXNzaWFuQmx1ck5FT04uaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJG
aWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFKQogI2luY2x1
ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0NJbmxpbmVzLmg+CisjZWxzZQogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5
cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVk
QXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXJh
bGxlbEpvYnMuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxGRUdhdXNz
aWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9k
ZVR5cGUgZWRnZU1vZGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lhbkJs
dXIoeCwgeSwgZWRnZU1vZGUpKTsKK30KKworRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5CbHVy
KGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKKyAgICA6IEZpbHRlckVm
ZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFR2F1c3NpYW5CbHVyKQorICAgICwgbV9zdGRYKHgp
CisgICAgLCBtX3N0ZFkoeSkKKyAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUpCit7Cit9CisKK3Zv
aWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgoZmxvYXQgeCkKK3sKKyAgICBtX3N0
ZFggPSB4OworfQorCit2b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25ZKGZsb2F0
IHkpCit7CisgICAgbV9zdGRZID0geTsKK30KKwordm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0RWRn
ZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoreworICAgIG1fZWRnZU1vZGUgPSBlZGdlTW9k
ZTsKK30KIAogc3RhdGljIGlubGluZSBmbG9hdCBnYXVzc2lhbktlcm5lbEZhY3RvcigpCiB7CiAg
ICAgcmV0dXJuIDMgLyA0LmYgKiBzcXJ0ZigyICogcGlGbG9hdCk7CiB9CiAKLXN0YXRpYyBjb25z
dCBpbnQgZ01heEtlcm5lbFNpemUgPSA1MDA7CitzdGF0aWMgaW50IGNsYW1wZWRUb0tlcm5lbFNp
emUoZmxvYXQgdmFsdWUpCit7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhLZXJu
ZWxTaXplID0gNTAwOworCisgICAgLy8gTGltaXQgdGhlIGtlcm5lbCBzaXplIHRvIDUwMC4gQSBi
aWdnZXIgcmFkaXVzIHdvbid0IG1ha2UgYSBiaWcgZGlmZmVyZW5jZSBmb3IgdGhlIHJlc3VsdCBp
bWFnZSBidXQKKyAgICAvLyBpbmZsYXRlcyB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCB0b28gbXVj
aC4gVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggRmlyZWZveCcgYmVoYXZpb3IuCisgICAgdW5zaWdu
ZWQgc2l6ZSA9IHN0ZDo6bWF4PHVuc2lnbmVkPigyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmxv
b3JmKHZhbHVlICogZ2F1c3NpYW5LZXJuZWxGYWN0b3IoKSArIDAuNWYpKSk7CisgICAgcmV0dXJu
IGNsYW1wVG88aW50PihzdGQ6Om1pbihzaXplLCBtYXhLZXJuZWxTaXplKSk7Cit9CisgICAgCitJ
bnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRT
aXplIHN0ZERldmlhdGlvbikKK3sKKyAgICBBU1NFUlQoc3RkRGV2aWF0aW9uLndpZHRoKCkgPj0g
MCAmJiBzdGREZXZpYXRpb24uaGVpZ2h0KCkgPj0gMCk7CisgICAgSW50U2l6ZSBrZXJuZWxTaXpl
OwogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgaWYgKHN0ZERldmlhdGlvbi53aWR0aCgpKQor
ICAgICAgICBrZXJuZWxTaXplLnNldFdpZHRoKGNsYW1wZWRUb0tlcm5lbFNpemUoc3RkRGV2aWF0
aW9uLndpZHRoKCkpKTsKKworICAgIGlmIChzdGREZXZpYXRpb24uaGVpZ2h0KCkpCisgICAgICAg
IGtlcm5lbFNpemUuc2V0SGVpZ2h0KGNsYW1wZWRUb0tlcm5lbFNpemUoc3RkRGV2aWF0aW9uLmhl
aWdodCgpKSk7CisKKyAgICByZXR1cm4ga2VybmVsU2l6ZTsKK30KKworSW50U2l6ZSBGRUdhdXNz
aWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRT
aXplIHN0ZERldmlhdGlvbikKK3sKKyAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxT
aXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHN0ZERldmlhdGlvbikpOworfQorCitJbnRT
aXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZp
YXRpb24pCit7CisgICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxT
aXplKHN0ZERldmlhdGlvbik7CisKKyAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXpl
IGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJl
ZSB0aW1lcy4KKyAgICByZXR1cm4geyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAqIGtl
cm5lbFNpemUuaGVpZ2h0KCkgLyAyIH07Cit9CisKK3ZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIEludFNp
emUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9z
dGRZIH0pOworCisgICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3Qo
MCktPmFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgLy8gRWRnZSBtb2RlcyBvdGhlciB0aGFuICdu
b25lJyBkbyBub3QgaW5mbGF0ZSB0aGUgYWZmZWN0ZWQgcGFpbnQgcmVjdC4KKyAgICBpZiAobV9l
ZGdlTW9kZSAhPSBFREdFTU9ERV9OT05FKSB7CisgICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0
KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5
IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgorICAg
IGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVm
KTsKKyAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQo
KSAqIDAuNWYpOworCisgICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKKyAgICAgICAgYWJzb2x1dGVQ
YWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7CisgICAgZWxzZQorICAgICAgICBh
YnNvbHV0ZVBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOworCisgICAgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOworfQorCisv
LyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIgdG8g
c2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUdhdXNzaWFuQmx1clNv
ZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVHYXVz
c2lhbkJsdXI+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVy
PEZFR2F1c3NpYW5CbHVyPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAg
ICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5w
dXRFZmZlY3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgQXBwbHlQYXJhbWV0
ZXJzIHsKKyAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBpb1BpeGVsQXJyYXk7Cisg
ICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdG1wUGl4ZWxBcnJheTsKKyAgICAgICAg
aW50IHdpZHRoOworICAgICAgICBpbnQgaGVpZ2h0OworICAgICAgICB1bnNpZ25lZCBrZXJuZWxT
aXplWDsKKyAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVk7CisgICAgICAgIGJvb2wgaXNBbHBo
YUltYWdlOworICAgICAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGU7CisgICAgfTsKKworICAgIHN0
YXRpYyBpbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWdu
ZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCk7CiAKLWlubGluZSB2
b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBp
bnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0YVJpZ2h0KQorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBi
b3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBV
aW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0
LCBpbnQmIGR4UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0
V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpOworICAg
IHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQ
aXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgs
IGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50
IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2Rl
VHlwZSk7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckFjY2VsZXJhdGVkKFVpbnQ4
Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVu
c2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVj
dEhlaWdodCk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJVbmFjY2VsZXJhdGVkKFVp
bnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIs
IHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0cmlkZSwg
SW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsKKwor
ICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyR2VuZXJpYyhVaW50OENsYW1wZWRBcnJheSYg
aW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJu
ZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBp
c0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJs
dXJXb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBw
bHlQbGF0Zm9ybShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5
JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6
ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7
Cit9OworCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6a2VybmVs
UG9zaXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGludCYgZGVsdGFM
ZWZ0LCBpbnQmIGRlbHRhUmlnaHQpCiB7CiAgICAgLy8gQ2hlY2sgaHR0cDovL3d3dy53My5vcmcv
VFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9yIGRldGFpbHMuCiAg
ICAgc3dpdGNoIChibHVySXRlcmF0aW9uKSB7CkBAIC03OSwzNyArMTk5LDggQEAgaW5saW5lIHZv
aWQga2VybmVsUG9zaXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGlu
dCYgZGVsdGFMZWZ0LAogICAgIH0KIH0KIAotUmVmPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNzaWFu
Qmx1cjo6Y3JlYXRlKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUdhdXNzaWFuQmx1cih4LCB5LCBlZGdlTW9kZSkp
OwotfQotCi1GRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwgZmxvYXQgeSwg
RWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6
VHlwZTo6RkVHYXVzc2lhbkJsdXIpCi0gICAgLCBtX3N0ZFgoeCkKLSAgICAsIG1fc3RkWSh5KQot
ICAgICwgbV9lZGdlTW9kZShlZGdlTW9kZSkKLXsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6
c2V0U3RkRGV2aWF0aW9uWChmbG9hdCB4KQotewotICAgIG1fc3RkWCA9IHg7Ci19Ci0KLXZvaWQg
RkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblkoZmxvYXQgeSkKLXsKLSAgICBtX3N0ZFkg
PSB5OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUg
ZWRnZU1vZGUpCi17Ci0gICAgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOwotfQotCiAvLyBUaGlzIGZ1
bmN0aW9uIG9ubHkgb3BlcmF0ZXMgb24gQWxwaGEgY2hhbm5lbC4KLWlubGluZSB2b2lkIGJveEJs
dXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4
Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LAotICAgIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVm
dCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVj
dFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxTaXplKQoraW5s
aW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBbHBoYU9ubHko
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5
JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdodCwg
aW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZl
Y3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSkKIHsKICAgICBjb25zdCB1aW50OF90
KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7CiAgICAgdWludDhfdCogZHN0RGF0YSA9
IGRzdFBpeGVsQXJyYXkuZGF0YSgpOwpAQCAtMTQ5LDggKzI0MCw3IEBAIGlubGluZSB2b2lkIGJv
eEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVp
bnQ4Q2xhbXBlCiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJh
eSwKLSAgICB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUs
IGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wg
YWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoraW5saW5lIHZvaWQgRkVHYXVzc2lh
bkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXIoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNy
Y1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBk
eCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBp
bnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlKQogewogICAgIGNvbnN0IGludCBtYXhLZXJuZWxTaXplID0gc3RkOjpt
aW4oZHhSaWdodCwgZWZmZWN0V2lkdGgpOwogICAgIGlmIChhbHBoYUltYWdlKQpAQCAtMjgwLDcg
KzM3MCw3IEBAIGlubGluZSB2b2lkIGJveEJsdXIoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNy
Y1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkCiB9CiAKICNpZiBVU0UoQUNDRUxFUkFU
RSkKLWlubGluZSB2b2lkIGFjY2VsZXJhdGVCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1
ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUs
IGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCkKK2lubGluZSB2
b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyQWNjZWxlcmF0ZWQoVWlu
dDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwg
dW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZm
ZWN0SGVpZ2h0KQogewogICAgIGlmICghaW9CdWZmZXIuZGF0YSgpIHx8ICF0ZW1wQnVmZmVyLmRh
dGEoKSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTMyNiw3ICs0MTYsNyBA
QCBpbmxpbmUgdm9pZCBhY2NlbGVyYXRlQm94Qmx1cihVaW50OENsYW1wZWRBcnJheSYgaW9CdWZm
ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZQogfQogI2VuZGlmCiAKLWlubGluZSB2b2lkIHN0YW5k
YXJkQm94Qmx1cihVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5
JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVks
IGludCBzdHJpZGUsIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VN
b2RlVHlwZSBlZGdlTW9kZSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBs
aWVyOjpib3hCbHVyVW5hY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVp
bnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWdu
ZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUsIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0Fs
cGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKICAgICBpbnQgZHhMZWZ0ID0gMDsK
ICAgICBpbnQgZHhSaWdodCA9IDA7CkBAIC0zNzEsMzUgKzQ2MSwzOSBAQCBpbmxpbmUgdm9pZCBz
dGFuZGFyZEJveEJsdXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRB
cnJheSYgdGVtcAogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRm
b3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVk
QXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJu
ZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJT
b2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZl
ciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVY
LCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJ
bWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQogewogICAgIGludCBzdHJpZGUgPSA0ICogcGFp
bnRTaXplLndpZHRoKCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBpZiAoa2VybmVsU2l6
ZVggPT0ga2VybmVsU2l6ZVkgJiYgKG1fZWRnZU1vZGUgPT0gRURHRU1PREVfTk9ORSB8fCBtX2Vk
Z2VNb2RlID09IEVER0VNT0RFX0RVUExJQ0FURSkpIHsKLSAgICAgICAgYWNjZWxlcmF0ZUJveEJs
dXIoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBzdHJpZGUsIHBhaW50U2l6
ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOworICAgIGlmIChrZXJuZWxTaXplWCA9PSBr
ZXJuZWxTaXplWSAmJiAoZWRnZU1vZGUgPT0gRURHRU1PREVfTk9ORSB8fCBlZGdlTW9kZSA9PSBF
REdFTU9ERV9EVVBMSUNBVEUpKSB7CisgICAgICAgIGJveEJsdXJBY2NlbGVyYXRlZChpb0J1ZmZl
ciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCks
IHBhaW50U2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAot
ICAgIHN0YW5kYXJkQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgs
IGtlcm5lbFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlKCksIG1fZWRnZU1v
ZGUpOworICAgIGJveEJsdXJVbmFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBr
ZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHN0cmlkZSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2Us
IGVkZ2VNb2RlKTsKIH0KIAotdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVdvcmtl
cihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKKyNpZiAhVVNFKEFDQ0VMRVJB
VEUpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1cldv
cmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCiB7CiAgICAgSW50U2l6ZSBwYWludFNp
emUocGFyYW1ldGVycy0+d2lkdGgsIHBhcmFtZXRlcnMtPmhlaWdodCk7Ci0gICAgcGFyYW1ldGVy
cy0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpYygqcGFyYW1ldGVycy0+aW9QaXhlbEFycmF5
LCAqcGFyYW1ldGVycy0+dG1wUGl4ZWxBcnJheSwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVgsIHBh
cmFtZXRlcnMtPmtlcm5lbFNpemVZLCBwYWludFNpemUpOworICAgIGJveEJsdXJHZW5lcmljKCpw
YXJhbWV0ZXJzLT5pb1BpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBwYXJh
bWV0ZXJzLT5rZXJuZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6ZSwg
cGFyYW1ldGVycy0+aXNBbHBoYUltYWdlLCBwYXJhbWV0ZXJzLT5lZGdlTW9kZSk7CiB9CisjZW5k
aWYKIAotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkoVWludDhDbGFt
cGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5z
aWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNp
emUpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0
Zm9ybShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQ
aXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIElu
dFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9k
ZSkKIHsKICNpZiAhVVNFKEFDQ0VMRVJBVEUpCiAgICAgaW50IHNjYW5saW5lID0gNCAqIHBhaW50
U2l6ZS53aWR0aCgpOwogICAgIGludCBleHRyYUhlaWdodCA9IDMgKiBrZXJuZWxTaXplWSAqIDAu
NWY7Ci0gICAgaW50IG9wdGltYWxUaHJlYWROdW1iZXIgPSAocGFpbnRTaXplLndpZHRoKCkgKiBw
YWludFNpemUuaGVpZ2h0KCkpIC8gKHNfbWluaW1hbFJlY3REaW1lbnNpb24gKyBleHRyYUhlaWdo
dCAqIHBhaW50U2l6ZS53aWR0aCgpKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1pbmlt
YWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3Ig
cGFyYWxsZWwgam9icworICAgIGludCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gKHBhaW50U2l6ZS53
aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpKSAvIChtaW5pbWFsUmVjdERpbWVuc2lvbiArIGV4
dHJhSGVpZ2h0ICogcGFpbnRTaXplLndpZHRoKCkpOwogCiAgICAgaWYgKG9wdGltYWxUaHJlYWRO
dW1iZXIgPiAxKSB7Ci0gICAgICAgIFBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1ldGVy
cz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVy
KTsKKyAgICAgICAgUGFyYWxsZWxKb2JzPEFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZi
b3hCbHVyV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKIAogICAgICAgICBpbnQgam9icyA9
IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKICAgICAgICAgaWYgKGpvYnMgPiAxKSB7CkBA
IC00MTAsOCArNTA0LDcgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBw
bHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW0KIAogICAgICAgICAgICAg
aW50IGN1cnJlbnRZID0gMDsKICAgICAgICAgICAgIGZvciAoaW50IGpvYiA9IDA7IGpvYiA8IGpv
YnM7IGpvYisrKSB7Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMmIHBh
cmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBwYXJh
bXMuZmlsdGVyID0gdGhpczsKKyAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBhcmFt
cyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKIAogICAgICAgICAgICAgICAgIGludCBz
dGFydFkgPSAham9iID8gMCA6IGN1cnJlbnRZIC0gZXh0cmFIZWlnaHQ7CiAgICAgICAgICAgICAg
ICAgY3VycmVudFkgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0ICsgMSA6IGJs
b2NrSGVpZ2h0OwpAQCAtNDMxLDYgKzUyNCw4IEBAIGlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVy
OjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtCiAg
ICAgICAgICAgICAgICAgcGFyYW1zLmhlaWdodCA9IGVuZFkgLSBzdGFydFk7CiAgICAgICAgICAg
ICAgICAgcGFyYW1zLmtlcm5lbFNpemVYID0ga2VybmVsU2l6ZVg7CiAgICAgICAgICAgICAgICAg
cGFyYW1zLmtlcm5lbFNpemVZID0ga2VybmVsU2l6ZVk7CisgICAgICAgICAgICAgICAgcGFyYW1z
LmlzQWxwaGFJbWFnZSA9IGlzQWxwaGFJbWFnZTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZWRn
ZU1vZGUgPSBlZGdlTW9kZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcGFyYWxsZWxK
b2JzLmV4ZWN1dGUoKTsKQEAgLTQzOCw3ICs1MzMsNyBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFu
Qmx1cjo6cGxhdGZvcm1BcHBseShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xh
bQogICAgICAgICAgICAgLy8gQ29weSB0b2dldGhlciB0aGUgcGFydHMgb2YgdGhlIGltYWdlLgog
ICAgICAgICAgICAgY3VycmVudFkgPSAwOwogICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMTsg
am9iIDwgam9iczsgam9iKyspIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1l
dGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOworICAgICAgICAgICAg
ICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2Ip
OwogICAgICAgICAgICAgICAgIGludCBzb3VyY2VPZmZzZXQ7CiAgICAgICAgICAgICAgICAgaW50
IGRlc3RpbmF0aW9uT2Zmc2V0OwogICAgICAgICAgICAgICAgIGludCBzaXplOwpAQCAtNDU4LDk1
ICs1NTMsNDIgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkoVWlu
dDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW0KICNlbmRpZgogCiAgICAgLy8gVGhl
IHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxseSBvbiBz
b21lIHBsYXRmb3Jtcy4KLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhpb0J1ZmZlciwgdG1wUGl4
ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBwYWludFNpemUpOwotfQotCi1zdGF0
aWMgaW50IGNsYW1wZWRUb0tlcm5lbFNpemUoZmxvYXQgdmFsdWUpCi17Ci0gICAgLy8gTGltaXQg
dGhlIGtlcm5lbCBzaXplIHRvIDUwMC4gQSBiaWdnZXIgcmFkaXVzIHdvbid0IG1ha2UgYSBiaWcg
ZGlmZmVyZW5jZSBmb3IgdGhlIHJlc3VsdCBpbWFnZSBidXQKLSAgICAvLyBpbmZsYXRlcyB0aGUg
YWJzb2x1dGUgcGFpbnQgcmVjdCB0b28gbXVjaC4gVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggRmly
ZWZveCcgYmVoYXZpb3IuCi0gICAgdW5zaWduZWQgc2l6ZSA9IHN0ZDo6bWF4PHVuc2lnbmVkPigy
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmxvb3JmKHZhbHVlICogZ2F1c3NpYW5LZXJuZWxGYWN0
b3IoKSArIDAuNWYpKSk7Ci0gICAgcmV0dXJuIGNsYW1wVG88aW50PihzdGQ6Om1pbihzaXplLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZ01heEtlcm5lbFNpemUpKSk7Ci19Ci0gICAgCi1JbnRTaXpl
IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0
ZERldmlhdGlvbikKLXsKLSAgICBBU1NFUlQoc3RkRGV2aWF0aW9uLndpZHRoKCkgPj0gMCAmJiBz
dGREZXZpYXRpb24uaGVpZ2h0KCkgPj0gMCk7Ci0gICAgSW50U2l6ZSBrZXJuZWxTaXplOwotCi0g
ICAgaWYgKHN0ZERldmlhdGlvbi53aWR0aCgpKQotICAgICAgICBrZXJuZWxTaXplLnNldFdpZHRo
KGNsYW1wZWRUb0tlcm5lbFNpemUoc3RkRGV2aWF0aW9uLndpZHRoKCkpKTsKLQotICAgIGlmIChz
dGREZXZpYXRpb24uaGVpZ2h0KCkpCi0gICAgICAgIGtlcm5lbFNpemUuc2V0SGVpZ2h0KGNsYW1w
ZWRUb0tlcm5lbFNpemUoc3RkRGV2aWF0aW9uLmhlaWdodCgpKSk7Ci0KLSAgICByZXR1cm4ga2Vy
bmVsU2l6ZTsKKyAgICBib3hCbHVyR2VuZXJpYyhpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2Vy
bmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBwYWludFNpemUsIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUp
OwogfQogCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0
IEZpbHRlciYgZmlsdGVyLCBGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQorYm9vbCBGRUdhdXNzaWFu
Qmx1clNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZp
bHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIHJldHVybiBjYWxjdWxhdGVV
bnNjYWxlZEtlcm5lbFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoc3RkRGV2aWF0aW9u
KSk7Ci19CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKIAot
SW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3Rk
RGV2aWF0aW9uKQotewotICAgIGF1dG8ga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZVVuc2NhbGVkS2Vy
bmVsU2l6ZShzdGREZXZpYXRpb24pOwotCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwg
c2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIg
dGhyZWUgdGltZXMuCi0gICAgcmV0dXJuIHsgMyAqIGtlcm5lbFNpemUud2lkdGgoKSAvIDIsIDMg
KiBrZXJuZWxTaXplLmhlaWdodCgpIC8gMiB9OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpk
ZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKLXsKLSAgICBJ
bnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgs
IG1fc3RkWSB9KTsKLQotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0RWZm
ZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIC8vIEVkZ2UgbW9kZXMgb3RoZXIgdGhh
biAnbm9uZScgZG8gbm90IGluZmxhdGUgdGhlIGFmZmVjdGVkIHBhaW50IHJlY3QuCi0gICAgaWYg
KG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkgewotICAgICAgICBzZXRBYnNvbHV0ZVBhaW50
UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0
aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4K
LSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgpICog
MC41Zik7Ci0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVp
Z2h0KCkgKiAwLjVmKTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFic29s
dXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAgICAg
ICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLQotICAgIHNldEFi
c29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKLX0K
LQotYm9vbCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLQot
ICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3Qu
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBp
eGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBzZXRJ
c0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKKyAgICBtX2VmZmVjdC5zZXRJc0FscGhh
SW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1Jl
Y3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVs
QXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgIGlm
ICghbV9zdGRYICYmICFtX3N0ZFkpCisgICAgYXV0byBlZmZlY3REcmF3aW5nUmVjdCA9IG1fZWZm
ZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7CisgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG1fZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7
CisgICAgaWYgKCFtX2VmZmVjdC5zdGREZXZpYXRpb25YKCkgJiYgIW1fZWZmZWN0LnN0ZERldmlh
dGlvblkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBJbnRTaXplIGtlcm5lbFNpemUg
PSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBh
dXRvIGtlcm5lbFNpemUgPSBtX2VmZmVjdC5jYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBt
X2VmZmVjdC5zdGREZXZpYXRpb25YKCksIG1fZWZmZWN0LnN0ZERldmlhdGlvblkoKSB9KTsKIAot
ICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CisgICAg
SW50U2l6ZSBwYWludFNpemUgPSBtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsK
ICAgICBhdXRvIHRtcEltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKHBhaW50U2l6ZS5hcmVhKCkgKiA0KTsKICAgICBpZiAoIXRtcEltYWdlRGF0YSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcGxhdGZvcm1BcHBseShkZXN0aW5hdGlvblBp
eGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5o
ZWlnaHQoKSwgcGFpbnRTaXplKTsKKyAgICBhcHBseVBsYXRmb3JtKGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdo
dCgpLCBwYWludFNpemUsIG1fZWZmZWN0LmlzQWxwaGFJbWFnZSgpLCBtX2VmZmVjdC5lZGdlTW9k
ZSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRUdh
dXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVj
dHMoKSk7Cit9CisKIEludE91dHNldHMgRkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25zdAog
ewogICAgIEludFNpemUgb3V0c2V0U2l6ZSA9IGNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgs
IG1fc3RkWSB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAppbmRleCBkNzRiZGFhNzJlZDMwNGY1YjgwMTc3
YWQ2Y2NhNzc1YTViNDkzNzE3Li42NWFhNmUxODg5N2ZhOGNjOTc2OWQxZTU1N2Q3ZDI2ZjVlNWNh
MjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCkBAIC00NiwyOSArNDYsMTMgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBGRUdhdXNzaWFuQmx1cihmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUp
OwogCi0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gMTAwICog
MTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icwotCi0gICAgc3Ry
dWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVHYXVzc2lhbkJsdXIqIGZp
bHRlcjsKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBpb1BpeGVsQXJyYXk7Ci0g
ICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdG1wUGl4ZWxBcnJheTsKLSAgICAgICAg
aW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0OwotICAgICAgICB1bnNpZ25lZCBrZXJuZWxT
aXplWDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVk7Ci0gICAgfTsKLQogICAgIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKLSAg
ICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKLQog
ICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2Vu
dGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFw
cGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7Ci0gICAgdm9pZCBwbGF0Zm9ybUFw
cGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBC
dWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6
ZSYgcGFpbnRTaXplKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVk
IGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsK
KyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3Ry
ZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1f
c3RkWDsKICAgICBmbG9hdCBtX3N0ZFk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCBlODNjZjNiN2NkNjM2
ODZmMWY0NDFlNTIyOGYyYzU2YjRlYjRhMTgyLi42ZWRjMzMxM2RiODRmYWZiODE5ZGExNmRmY2Q4
ODM3YjdkZWRmMTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTMwLDE1ICszMCwxNCBAQAogCiAjaW5j
bHVkZSAiQ29sb3JDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRkVMaWdodGluZ05FT04uaCIKKyNp
bmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
ICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RkVMaWdodGluZzo6RkVMaWdodGluZyhMaWdodGluZ1R5cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBD
b2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29u
c3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0
U291cmNlPiYmIGxpZ2h0U291cmNlLCBUeXBlIHR5cGUpCitGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5n
KFR5cGUgdHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2Fs
ZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBz
cGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKICAgICA6IEZpbHRlckVm
ZmVjdCh0eXBlKQotICAgICwgbV9saWdodGluZ1R5cGUobGlnaHRpbmdUeXBlKQotICAgICwgbV9s
aWdodFNvdXJjZShXVEZNb3ZlKGxpZ2h0U291cmNlKSkKICAgICAsIG1fbGlnaHRpbmdDb2xvcihs
aWdodGluZ0NvbG9yKQogICAgICwgbV9zdXJmYWNlU2NhbGUoc3VyZmFjZVNjYWxlKQogICAgICwg
bV9kaWZmdXNlQ29uc3RhbnQoZGlmZnVzZUNvbnN0YW50KQpAQCAtNDYsNiArNDUsNyBAQCBGRUxp
Z2h0aW5nOjpGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENvbG9y
JiBsaWdodGluZ0NvbG9yLCBmbAogICAgICwgbV9zcGVjdWxhckV4cG9uZW50KHNwZWN1bGFyRXhw
b25lbnQpCiAgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhYKGtlcm5lbFVuaXRMZW5ndGhYKQogICAg
ICwgbV9rZXJuZWxVbml0TGVuZ3RoWShrZXJuZWxVbml0TGVuZ3RoWSkKKyAgICAsIG1fbGlnaHRT
b3VyY2UoV1RGTW92ZShsaWdodFNvdXJjZSkpCiB7CiB9CiAKQEAgLTg1LDE3ICs4NSwxMDUgQEAg
Ym9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVuZ3RoWShmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGNvbnN0ZXhwciBpbnQgY1BpeGVs
U2l6ZSA9IDQ7Ci1zdGF0aWMgY29uc3RleHByIGludCBjQWxwaGFDaGFubmVsT2Zmc2V0ID0gMzsK
LXN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBjT3BhcXVlQWxwaGEgPSBzdGF0aWNfY2FzdDx1aW50
OF90PigweEZGKTsKKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRUxpZ2h0aW5nU29mdHdhcmVB
cHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8
RkVMaWdodGluZz4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxp
ZXI8RkVMaWdodGluZz47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAg
Ym9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
Y1BpeGVsU2l6ZSA9IDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgY0FscGhhQ2hhbm5lbE9m
ZnNldCA9IDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGNPcGFxdWVBbHBoYSA9IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYpOworCisgICAgLy8gVGhlc2UgZmFjdG9ycyBhbmQgdGhl
IG5vcm1hbCBjb2VmZmljaWVudHMgY29tZSBmcm9tIHRoZSB0YWJsZSB1bmRlciBodHRwczovL3d3
dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjIgPSAtMSAvIDIuZjsKKyAgICBz
dGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2MyA9IC0xIC8gMy5mOworICAgIHN0YXRp
YyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXY0ID0gLTEgLyA0LmY7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBmbG9hdCBjRmFjdG9yMmRpdjMgPSAtMiAvIDMuZjsKIAotLy8gVGhlc2UgZmFjdG9y
cyBhbmQgdGhlIG5vcm1hbCBjb2VmZmljaWVudHMgY29tZSBmcm9tIHRoZSB0YWJsZSB1bmRlciBo
dHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnQuCi1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2MiA9IC0xIC8gMi5mOwot
c3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjMgPSAtMSAvIDMuZjsKLXN0YXRpYyBj
b25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXY0ID0gLTEgLyA0LmY7Ci1zdGF0aWMgY29uc3RleHBy
IGZsb2F0IGNGYWN0b3IyZGl2MyA9IC0yIC8gMy5mOworICAgIHN0cnVjdCBBbHBoYVdpbmRvdyB7
CisgICAgICAgIHVpbnQ4X3QgYWxwaGFbM11bM10geyB9OworICAgIAorICAgICAgICAvLyBUaGUg
aW1wbGVtZW50YXRpb25zIGFyZSBsaW5lZCB1cCB0byBtYWtlIGNvbXBhcmluZyBpbmRpY2VzIGVh
c2llci4KKyAgICAgICAgdWludDhfdCB0b3BMZWZ0KCkgY29uc3QgICAgICAgICAgICAgeyByZXR1
cm4gYWxwaGFbMF1bMF07IH0KKyAgICAgICAgdWludDhfdCBsZWZ0KCkgY29uc3QgICAgICAgICAg
ICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMF07IH0KKyAgICAgICAgdWludDhfdCBib3R0b21MZWZ0
KCkgY29uc3QgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMF07IH0KKworICAgICAgICB1aW50
OF90IHRvcCgpIGNvbnN0ICAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVsxXTsgfQor
ICAgICAgICB1aW50OF90IGNlbnRlcigpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVybiBhbHBo
YVsxXVsxXTsgfQorICAgICAgICB1aW50OF90IGJvdHRvbSgpIGNvbnN0ICAgICAgICAgICAgICB7
IHJldHVybiBhbHBoYVsyXVsxXTsgfQorCisgICAgICAgIHZvaWQgc2V0VG9wKHVpbnQ4X3QgdmFs
dWUpICAgICAgICAgIHsgYWxwaGFbMF1bMV0gPSB2YWx1ZTsgfQorICAgICAgICB2b2lkIHNldENl
bnRlcih1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzFdWzFdID0gdmFsdWU7IH0KKyAgICAg
ICAgdm9pZCBzZXRCb3R0b20odWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsyXVsxXSA9IHZh
bHVlOyB9CisKKyAgICAgICAgdm9pZCBzZXRUb3BSaWdodCh1aW50OF90IHZhbHVlKSAgICAgeyBh
bHBoYVswXVsyXSA9IHZhbHVlOyB9CisgICAgICAgIHZvaWQgc2V0UmlnaHQodWludDhfdCB2YWx1
ZSkgICAgICAgIHsgYWxwaGFbMV1bMl0gPSB2YWx1ZTsgfQorICAgICAgICB2b2lkIHNldEJvdHRv
bVJpZ2h0KHVpbnQ4X3QgdmFsdWUpICB7IGFscGhhWzJdWzJdID0gdmFsdWU7IH0KKworICAgICAg
ICBzdGF0aWMgdm9pZCBzaGlmdFJvdyh1aW50OF90IGFscGhhWzNdKQorICAgICAgICB7CisgICAg
ICAgICAgICBhbHBoYVswXSA9IGFscGhhWzFdOworICAgICAgICAgICAgYWxwaGFbMV0gPSBhbHBo
YVsyXTsKKyAgICAgICAgfQorICAgIAorICAgICAgICB2b2lkIHNoaWZ0KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMF0pOworICAgICAgICAgICAgc2hpZnRSb3coYWxw
aGFbMV0pOworICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMl0pOworICAgICAgICB9CisgICAg
fTsKIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0CisgICAgc3RydWN0IExpZ2h0aW5nRGF0YSB7CisgICAgICAg
IC8vIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIG9ubHkgcmVhZC1vbmx5IChTTVAgc2FmZSkgZGF0
YQorICAgICAgICBGRUxpZ2h0aW5nKiBlZmZlY3Q7CisgICAgICAgIEZpbHRlckVmZmVjdDo6VHlw
ZSBmaWx0ZXJUeXBlOworICAgICAgICBDb2xvciBsaWdodGluZ0NvbG9yOworICAgICAgICBmbG9h
dCBzdXJmYWNlU2NhbGU7CisgICAgICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudDsKKyAgICAgICAg
ZmxvYXQgc3BlY3VsYXJDb25zdGFudDsKKyAgICAgICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudDsK
KyAgICAgICAgY29uc3QgTGlnaHRTb3VyY2UqIGxpZ2h0U291cmNlOworICAgICAgICBjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UqIG9wZXJhdGluZ0NvbG9yU3BhY2U7CisKKyAgICAgICAgVWlu
dDhDbGFtcGVkQXJyYXkqIHBpeGVsczsKKyAgICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplOworICAgICAgICBpbnQgd2lkdGg7CisgICAgICAgIGludCBoZWlnaHQ7CisKKyAgICAg
ICAgaW5saW5lIEludFNpemUgdG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAg
ICAgaW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAg
ICBpbmxpbmUgSW50U2l6ZSB0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAg
ICAgaW5saW5lIEludFNpemUgbGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAg
ICAgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5k
b3cmKSBjb25zdDsKKyAgICAgICAgaW5saW5lIEludFNpemUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50
IG9mZnNldCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwo
aW50IG9mZnNldCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUmlnaHRO
b3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgfTsKKworICAgIHN0cnVjdCBBcHBseVBhcmFt
ZXRlcnMgeworICAgICAgICBMaWdodGluZ0RhdGEgZGF0YTsKKyAgICAgICAgTGlnaHRTb3VyY2U6
OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CisgICAgICAgIGludCB5U3RhcnQ7CisgICAgICAg
IGludCB5RW5kOworICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBzZXRQaXhlbEludGVybmFsKGlu
dCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGlu
Z0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNp
emUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFscGhhKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRQaXhl
bChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFp
bnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJ
bnRTaXplIG5vcm1hbDJEVmVjdG9yKTsKKworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1H
ZW5lcmljUGFpbnQoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50
aW5nRGF0YSYsIGludCBzdGFydFksIGludCBlbmRZKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBs
YXRmb3JtR2VuZXJpY1dvcmtlcihBcHBseVBhcmFtZXRlcnMqKTsKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJj
ZTo6UGFpbnRpbmdEYXRhJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybShjb25zdCBM
aWdodGluZ0RhdGEmKTsKK307CisKK2lubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFw
cGxpZXI6OkxpZ2h0aW5nRGF0YTo6dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogewog
ICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
QEAgLTEwOCw3ICsxOTYsNyBAQCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0Rh
dGE6OnRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKICAgICB9OwogfQogCi1pbmxpbmUg
SW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbChpbnQgb2Zmc2V0
KSBjb25zdAoraW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRp
bmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAgLTEyMyw3ICsyMTEs
NyBAQCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJvd05vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRp
bmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGlu
ZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6dG9wUmln
aHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAgLTEzNiw3ICsyMjQsNyBAQCBpbmxpbmUg
SW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZz
ZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRp
bmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50U2l6
ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGludCBy
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0xNTIsNyArMjQwLDcgQEAgaW5saW5lIEludFNp
emUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQp
IGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjppbnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYgYWxwaGFXaW5kb3cp
IGNvbnN0CitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGlu
Z0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93JiBhbHBoYVdpbmRv
dykgY29uc3QKIHsKICAgICBpbnQgcmlnaHRBbHBoYU9mZnNldCA9IG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0OwogICAgIApAQCAtMTgyLDcgKzI3MCw3IEBAIGlubGlu
ZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwoaW50IG9m
ZnNldCwgQWxwaGFXaW5kb3cmCiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoraW5s
aW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpyaWdo
dENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogewogICAgIGludCBsZWZ0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwpAQCAtMTk4LDcgKzI4Niw3IEBAIGlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwo
aW50IG9mZnNldCkgY29uc3QKICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5n
OjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGlu
ZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9t
TGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogewogICAgIGludCBjZW50ZXIgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAg
ICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAgLTIxMSw3ICsyOTksNyBAQCBpbmxp
bmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwoaW50
IG9mZnNldCkgY29uc3QKICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpM
aWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoraW5saW5lIElu
dFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dO
b3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAgLTIyNiw3ICszMTQsNyBAQCBpbmxpbmUgSW50
U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0
KSBjb25zdAogICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5n
RGF0YTo6Ym90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJbnRTaXpl
IEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUmlnaHROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAgLTIzOSwyMSArMzI3LDE2IEBAIGlubGluZSBJbnRT
aXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNl
dCkgY29uc3QKICAgICB9OwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsKGludCBvZmZz
ZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZh
Y3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IpCi17Ci0gICAgc2V0UGl4ZWxJbnRlcm5hbChv
ZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFs
MkRWZWN0b3IsIGRhdGEucGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNv
bnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3Rvclks
IEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFscGhhKQordm9pZCBGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyOjpzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5n
RGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9y
bWFsMkRWZWN0b3IsIGZsb2F0IGFscGhhKQogewogICAgIGZsb2F0IHogPSBhbHBoYSAqIGRhdGEu
c3VyZmFjZVNjYWxlOwotICAgIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBsaWdo
dGluZ0RhdGEgPSBtX2xpZ2h0U291cmNlLT5jb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEocGFpbnRp
bmdEYXRhLCB4LCB5LCB6KTsKKyAgICBMaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEg
bGlnaHRpbmdEYXRhID0gZGF0YS5saWdodFNvdXJjZS0+Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRh
KHBhaW50aW5nRGF0YSwgeCwgeSwgeik7CiAKICAgICBmbG9hdCBsaWdodFN0cmVuZ3RoOwogICAg
IGlmIChub3JtYWwyRFZlY3Rvci5pc1plcm8oKSkgewogICAgICAgICAvLyBOb3JtYWwgdmVjdG9y
IGlzICgwLCAwLCAxKS4gVGhpcyBpcyBhIHF1aXRlIGZyZXF1ZW50IGNhc2UuCi0gICAgICAgIGlm
IChtX2xpZ2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCi0gICAgICAg
ICAgICBsaWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiBsaWdodGluZ0RhdGEubGln
aHRWZWN0b3IueigpIC8gbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoOworICAgICAgICBp
ZiAoZGF0YS5lZmZlY3QtPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlm
ZnVzZUxpZ2h0aW5nKQorICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuZGlmZnVzZUNv
bnN0YW50ICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSAvIGxpZ2h0aW5nRGF0YS5saWdo
dFZlY3Rvckxlbmd0aDsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBGbG9hdFBvaW50M0Qg
aGFsZndheVZlY3RvciA9IHsKICAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0
b3IueCgpLApAQCAtMjYxLDEwICszNDQsMTAgQEAgdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbElu
dGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGkKICAg
ICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueigpICsgbGlnaHRpbmdEYXRh
LmxpZ2h0VmVjdG9yTGVuZ3RoCiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgZmxvYXQgaGFs
ZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0b3IubGVuZ3RoKCk7Ci0gICAgICAgICAgICBp
ZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEpCi0gICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0
aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rv
ckxlbmd0aDsKKyAgICAgICAgICAgIGlmIChkYXRhLnNwZWN1bGFyRXhwb25lbnQgPT0gMSkKKyAg
ICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5zcGVjdWxhckNvbnN0YW50ICogaGFs
ZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoOwogICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dm
KGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0aCwgbV9zcGVjdWxhckV4cG9u
ZW50KTsKKyAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5zcGVjdWxhckNvbnN0
YW50ICogcG93ZihoYWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGgsIGRhdGEu
c3BlY3VsYXJFeHBvbmVudCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBGbG9h
dFBvaW50M0Qgbm9ybWFsVmVjdG9yID0gewpAQCAtMjc0LDggKzM1Nyw4IEBAIHZvaWQgRkVMaWdo
dGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRh
dGEsIGNvbnN0IExpCiAgICAgICAgIH07CiAgICAgICAgIGZsb2F0IG5vcm1hbFZlY3Rvckxlbmd0
aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKIAotICAgICAgICBpZiAobV9saWdodGluZ1R5cGUg
PT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAgICAgbGlnaHRTdHJlbmd0
aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGxpZ2h0aW5nRGF0YS5saWdo
dFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9y
TGVuZ3RoKTsKKyAgICAgICAgaWYgKGRhdGEuZWZmZWN0LT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVy
RWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykKKyAgICAgICAgICAgIGxpZ2h0U3RyZW5n
dGggPSBkYXRhLmRpZmZ1c2VDb25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBsaWdodGluZ0RhdGEu
bGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGxpZ2h0aW5nRGF0YS5saWdodFZl
Y3Rvckxlbmd0aCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhh
bGZ3YXlWZWN0b3IgPSB7CiAgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9y
LngoKSwKQEAgLTI4MywxMCArMzY2LDEwIEBAIHZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRl
cm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpCiAgICAg
ICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0aW5nRGF0YS5s
aWdodFZlY3Rvckxlbmd0aAogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGZsb2F0IGhhbGZ3
YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYg
KG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGgg
PSBtX3NwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAo
bm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBp
ZiAoZGF0YS5zcGVjdWxhckV4cG9uZW50ID09IDEpCisgICAgICAgICAgICAgICAgbGlnaHRTdHJl
bmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVj
dG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3RoKTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNv
bnN0YW50ICogcG93Zigobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVj
dG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCksIG1fc3BlY3VsYXJFeHBvbmVudCk7Cisg
ICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIHBv
d2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAq
IGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBkYXRhLnNwZWN1bGFyRXhwb25lbnQpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC0zMDQsOCArMzg3LDEzIEBAIHZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJ
bnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpCiAg
ICAgZGF0YS5waXhlbHMtPnNldFJhbmdlKHBpeGVsVmFsdWUsIDMsIG9mZnNldCk7CiB9CiAKK3Zv
aWQgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6c2V0UGl4ZWwoaW50IG9mZnNldCwgY29uc3Qg
TGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50
U2l6ZSBub3JtYWwyRFZlY3RvcikKK3sKKyAgICBzZXRQaXhlbEludGVybmFsKG9mZnNldCwgZGF0
YSwgcGFpbnRpbmdEYXRhLCB4LCB5LCBmYWN0b3JYLCBmYWN0b3JZLCBub3JtYWwyRFZlY3Rvciwg
ZGF0YS5waXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworfQorCiAv
LyBUaGlzIGFwcGVhcnMgdG8gcmVhZCBmcm9tIGFuZCB3cml0ZSB0byB0aGUgc2FtZSBwaXhlbCBi
dWZmZXIsIGJ1dCBpdCBvbmx5IHJlYWRzIHRoZSBhbHBoYSBjaGFubmVsLCBhbmQgd3JpdGVzIHRo
ZSBub24tYWxwaGEgY2hhbm5lbHMuCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5l
cmljUGFpbnQoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFp
bnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBzdGFydFksIGludCBlbmRZKQordm9pZCBGRUxp
Z2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KGNvbnN0IExp
Z2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKIHsKICAgICAvLyBNYWtlIHN1cmUgc3RhcnRZ
IGlzID4gMCBzaW5jZSB3ZSByZWFkIGZyb20gdGhlIHByZXZpb3VzIHJvdyBpbiB0aGUgbG9vcC4K
ICAgICBBU1NFUlQoc3RhcnRZKTsKQEAgLTMzMCwyNiArNDE4LDMwIEBAIHZvaWQgRkVMaWdodGlu
Zzo6cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNv
bnN0IExpZ2h0CiAgICAgICAgIGFscGhhV2luZG93LnNldEJvdHRvbVJpZ2h0KGRhdGEucGl4ZWxz
LT5pdGVtKG5leHRSb3dTdGFydCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
CiAKICAgICAgICAgaW50IG9mZnNldCA9IHJvd1N0YXJ0T2Zmc2V0ICsgY1BpeGVsU2l6ZTsKLSAg
ICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwg
b2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRh
LndpZHRoIC0gMTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkgewogICAgICAgICAgICAgYWxw
aGFXaW5kb3cuc2hpZnQoKTsKICAgICAgICAgICAgIHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0LCBk
YXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGNGYWN0b3IxZGl2NCwgY0ZhY3RvcjFkaXY0LCBkYXRh
LmludGVyaW9yTm9ybWFsKG9mZnNldCwgYWxwaGFXaW5kb3cpLCBhbHBoYVdpbmRvdy5jZW50ZXIo
KSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
KQordm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1dv
cmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCiB7Ci0gICAgcGFyYW1ldGVycy0+Zmls
dGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KHBhcmFtZXRlcnMtPmRhdGEsIHBhcmFtZXRl
cnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+eVN0YXJ0LCBwYXJhbWV0ZXJzLT55RW5kKTsK
KyAgICBhcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KHBhcmFtZXRlcnMtPmRhdGEsIHBhcmFtZXRl
cnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+eVN0YXJ0LCBwYXJhbWV0ZXJzLT55RW5kKTsK
IH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGlu
Z0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSkKKyNpZiAhKENQVShBUk1fTkVPTikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElM
RVIoR0NDX0NPTVBBVElCTEUpKQordm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBs
eVBsYXRmb3JtR2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291
cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKIHsKLSAgICB1bnNpZ25lZCByb3dzVG9Q
cm9jZXNzID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAtIDE7CisgICAgdW5zaWduZWQgcm93
c1RvUHJvY2VzcyA9IGRhdGEuaGVpZ2h0IC0gMjsKICAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRz
ID0gcm93c1RvUHJvY2VzcyAvIDg7Ci0gICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9
IHN0ZDo6bWluPHVuc2lnbmVkPigoKGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSAtIDEpICogcm93
c1RvUHJvY2VzcykgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKKyAg
ICAKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBtaW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAq
IDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKyAgICB1bnNp
Z25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KCgoZGF0YS53aWR0
aCAtIDIpICogcm93c1RvUHJvY2VzcykgLyBtaW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhy
ZWFkcyk7CisKICAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKICAgICAgICAgLy8g
SW5pdGlhbGl6ZSBwYXJhbGxlbCBqb2JzCi0gICAgICAgIFBhcmFsbGVsSm9iczxQbGF0Zm9ybUFw
cGx5R2VuZXJpY1BhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBseUdlbmVyaWNX
b3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOworICAgICAgICBQYXJhbGxlbEpvYnM8QXBwbHlQ
YXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJmFwcGx5UGxhdGZvcm1HZW5lcmljV29ya2VyLCBvcHRp
bWFsVGhyZWFkTnVtYmVyKTsKIAogICAgICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkK
ICAgICAgICAgaW50IGpvYiA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKQEAgLTM2MSw4
ICs0NTMsNyBAQCB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IExp
Z2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyYwogCiAgICAgICAgICAgICBpbnQgeVN0
YXJ0ID0gMTsKICAgICAgICAgICAgIGZvciAoLS1qb2I7IGpvYiA+PSAwOyAtLWpvYikgewotICAg
ICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyYgcGFyYW1zID0gcGFy
YWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIg
PSB0aGlzOworICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxs
ZWxKb2JzLnBhcmFtZXRlcihqb2IpOwogICAgICAgICAgICAgICAgIHBhcmFtcy5kYXRhID0gZGF0
YTsKICAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRpbmdEYXRhID0gcGFpbnRpbmdEYXRhOwog
ICAgICAgICAgICAgICAgIHBhcmFtcy55U3RhcnQgPSB5U3RhcnQ7CkBAIC0zNzUsMzkgKzQ2Niwx
OCBAQCB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IExpZ2h0aW5n
RGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyYwogICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5n
bGUgdGhyZWFkZWQgbW9kZS4KICAgICB9CiAKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50
KGRhdGEsIHBhaW50aW5nRGF0YSwgMSwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSk7CisgICAg
YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChkYXRhLCBwYWludGluZ0RhdGEsIDEsIGRhdGEuaGVp
Z2h0IC0gMSk7CiB9Ci0KLWlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHkoY29u
c3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEpCi17Ci0gICAgLy8gVGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hv
dWxkIGhhcHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBsYXRmb3Jtcy4KLSNpZiBDUFUoQVJNX05F
T04pICYmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVSKEdDQ19DT01QQVRJQkxFKQot
ICAgIHBsYXRmb3JtQXBwbHlOZW9uKGRhdGEsIHBhaW50aW5nRGF0YSk7Ci0jZWxzZQotICAgIHBs
YXRmb3JtQXBwbHlHZW5lcmljKGRhdGEsIHBhaW50aW5nRGF0YSk7CiAjZW5kaWYKLX0KIAotYm9v
bCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQordm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBs
eVBsYXRmb3JtKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSkKIHsKICAgICBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBMaWdodGluZ0RhdGEgZGF0YTsKLQotICAg
IC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBib3RoKSBpcyAx
IHBpeGVsLgotICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlzIGNhc2UuIE5v
dyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KLSAgICBpZiAod2lkdGggPD0gMiB8fCBoZWlnaHQg
PD0gMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZGF0YS5waXhlbHMgPSAmcGl4ZWxz
OwotICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9zdXJmYWNlU2NhbGUgLyAyNTUuMGY7Ci0gICAg
ZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9IHdpZHRoICogY1BpeGVsU2l6ZTsKLSAg
ICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7Ci0gICAgZGF0YS5oZWlnaHRE
ZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1f
bGlnaHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZShvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gZGF0YS5saWdodGluZ0NvbG9yLnRv
Q29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKCpkYXRhLm9wZXJhdGluZ0NvbG9yU3BhY2UpOwog
ICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQ
b2ludDNEKHIsIGcsIGIpOwogCi0gICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgq
dGhpcywgcGFpbnRpbmdEYXRhKTsKKyAgICBkYXRhLmxpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdE
YXRhKCpkYXRhLmVmZmVjdCwgcGFpbnRpbmdEYXRhKTsKIAogICAgIC8vIFRvcCBsZWZ0LgogICAg
IGludCBvZmZzZXQgPSAwOwpAQCAtNDE1LDQ3ICs0ODUsNDcgQEAgYm9vbCBGRUxpZ2h0aW5nOjpk
cmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQogCiAgICAgLy8gVG9wIHJpZ2h0LgogICAgIG9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwg
cGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIDAsIGNGYWN0b3IyZGl2Mywg
Y0ZhY3RvcjJkaXYzLCBkYXRhLnRvcFJpZ2h0Tm9ybWFsKG9mZnNldCkpOworICAgIHNldFBpeGVs
KG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoIC0gMSwgMCwgY0ZhY3RvcjJk
aXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9wUmlnaHROb3JtYWwob2Zmc2V0KSk7CiAKICAgICAv
LyBCb3R0b20gbGVmdC4KLSAgICBvZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICog
ZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRh
dGEsIHBhaW50aW5nRGF0YSwgMCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJk
aXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tTGVmdE5vcm1hbChvZmZzZXQpKTsKKyAgICBv
ZmZzZXQgPSAoZGF0YS5oZWlnaHQgLSAxKSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emU7CisgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIGRhdGEuaGVp
Z2h0IC0gMSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tTGVmdE5vcm1h
bChvZmZzZXQpKTsKIAogICAgIC8vIEJvdHRvbSByaWdodC4KLSAgICBvZmZzZXQgPSBoZWlnaHQg
KiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQ
aXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25l
LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2Mywg
ZGF0YS5ib3R0b21SaWdodE5vcm1hbChvZmZzZXQpKTsKKyAgICBvZmZzZXQgPSBkYXRhLmhlaWdo
dCAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAgIHNl
dFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoIC0gMSwgZGF0YS5o
ZWlnaHQgLSAxLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21SaWdodE5v
cm1hbChvZmZzZXQpKTsKIAotICAgIGlmICh3aWR0aCA+PSAzKSB7CisgICAgaWYgKGRhdGEud2lk
dGggPj0gMykgewogICAgICAgICAvLyBUb3Agcm93LgogICAgICAgICBvZmZzZXQgPSBjUGl4ZWxT
aXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9u
ZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKKyAgICAgICAgZm9yIChpbnQgeCA9IDE7IHgg
PCBkYXRhLndpZHRoIC0gMTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKICAgICAgICAgICAg
IHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCAwLCBjRmFjdG9yMWRpdjMs
IGNGYWN0b3IxZGl2MiwgZGF0YS50b3BSb3dOb3JtYWwob2Zmc2V0KSk7CiAKICAgICAgICAgLy8g
Qm90dG9tIHJvdy4KLSAgICAgICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAq
IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplOwotICAgICAgICBm
b3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQg
Kz0gY1BpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRp
bmdEYXRhLCB4LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMWRpdjMsIGNGYWN0
b3IxZGl2MiwgZGF0YS5ib3R0b21Sb3dOb3JtYWwob2Zmc2V0KSk7CisgICAgICAgIG9mZnNldCA9
IChkYXRhLmhlaWdodCAtIDEpICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQ
aXhlbFNpemU7CisgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aCAtIDE7ICsr
eCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCisgICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRh
dGEsIHBhaW50aW5nRGF0YSwgeCwgZGF0YS5oZWlnaHQgLSAxLCBjRmFjdG9yMWRpdjMsIGNGYWN0
b3IxZGl2MiwgZGF0YS5ib3R0b21Sb3dOb3JtYWwob2Zmc2V0KSk7CiAgICAgfQogCi0gICAgaWYg
KGhlaWdodCA+PSAzKSB7CisgICAgaWYgKGRhdGEuaGVpZ2h0ID49IDMpIHsKICAgICAgICAgLy8g
TGVmdCBjb2x1bW4uCiAgICAgICAgIG9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRC
eU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkKKyAg
ICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodCAtIDE7ICsreSwgb2Zmc2V0ICs9
IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCiAgICAgICAgICAgICBzZXRQaXhlbChv
ZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRp
djMsIGRhdGEubGVmdENvbHVtbk5vcm1hbChvZmZzZXQpKTsKIAogICAgICAgICAvLyBSaWdodCBj
b2x1bW4uCiAgICAgICAgIG9mZnNldCA9IDIgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplIC0gY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdo
dERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEs
IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMs
IGRhdGEucmlnaHRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7CisgICAgICAgIGZvciAoaW50IHkgPSAx
OyB5IDwgZGF0YS5oZWlnaHQgLSAxOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplKQorICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGlu
Z0RhdGEsIGRhdGEud2lkdGggLSAxLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0
YS5yaWdodENvbHVtbk5vcm1hbChvZmZzZXQpKTsKICAgICB9CiAKLSAgICBpZiAod2lkdGggPj0g
MyAmJiBoZWlnaHQgPj0gMykgeworICAgIGlmIChkYXRhLndpZHRoID49IDMgJiYgZGF0YS5oZWln
aHQgPj0gMykgewogICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMuCi0gICAgICAgIHBsYXRmb3Jt
QXBwbHkoZGF0YSwgcGFpbnRpbmdEYXRhKTsKKyAgICAgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMo
ZGF0YSwgcGFpbnRpbmdEYXRhKTsKICAgICB9CiAKLSAgICBpbnQgbGFzdFBpeGVsID0gZGF0YS53
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGhlaWdodDsKLSAgICBpZiAobV9saWdodGluZ1R5
cGUgPT0gRGlmZnVzZUxpZ2h0aW5nKSB7CisgICAgaW50IGxhc3RQaXhlbCA9IGRhdGEud2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemUgKiBkYXRhLmhlaWdodDsKKyAgICBpZiAoZGF0YS5lZmZlY3Qt
PmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKSB7
CiAgICAgICAgIGZvciAoaW50IGkgPSBjQWxwaGFDaGFubmVsT2Zmc2V0OyBpIDwgbGFzdFBpeGVs
OyBpICs9IGNQaXhlbFNpemUpCiAgICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGksIGNPcGFx
dWVBbHBoYSk7CiAgICAgfSBlbHNlIHsKQEAgLTQ2NywzMiArNTM3LDU3IEBAIGJvb2wgRkVMaWdo
dGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwg
aW50IGhlaWdodCkKICAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSArIDMsIGExID49IGEy
ID8gKGExID49IGEzID8gYTEgOiBhMykgOiAoYTIgPj0gYTMgPyBhMiA6IGEzKSk7CiAgICAgICAg
IH0KICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBGRUxpZ2h0aW5nOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK2Jvb2wgRkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwor
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CiAKLSAgICBhdXRv
JiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LmNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFy
cmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAgc2V0SXNBbHBoYUlt
YWdlKGZhbHNlKTsKKyAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwogCi0gICAg
SW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVk
UmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CisgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IG1fZWZmZWN0
LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7CisgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSwgZWZmZWN0RHJhd2luZ1JlY3QsIG1fZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAg
ICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4g
VGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKICAgICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVz
dCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3NlcnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0
cmFuZ2UKICAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMga2VybmVsVW5pdExlbmd0aHMsIGFuZCBJ
IGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgogICAgIC8vIEFueXdheSwgZmVDb252b2x2
ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0aW9uCiAKLSAgICBJbnRTaXpl
IGFic29sdXRlUGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgZHJh
d0xpZ2h0aW5nKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgYWJzb2x1dGVQYWludFNpemUud2lkdGgo
KSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOworICAgIEludFNpemUgc2l6ZSA9IEludFNp
emUobV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOworCisgICAgLy8gRklYTUU6
IGRvIHNvbWV0aGluZyBpZiB3aWR0aCBvciBoZWlnaHQgKG9yIGJvdGgpIGlzIDEgcGl4ZWwuCisg
ICAgLy8gVGhlIFczIHNwZWMgZG9lcyBub3QgZGVmaW5lIHRoaXMgY2FzZS4gTm93IHRoZSBmaWx0
ZXIganVzdCByZXR1cm5zLgorICAgIGlmIChzaXplLndpZHRoKCkgPD0gMiB8fCBzaXplLmhlaWdo
dCgpIDw9IDIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgTGlnaHRpbmdEYXRhIGRhdGE7
CisgICAgZGF0YS5lZmZlY3QgPSAmbV9lZmZlY3Q7CisgICAgZGF0YS5maWx0ZXJUeXBlID0gbV9l
ZmZlY3QuZmlsdGVyVHlwZSgpOworICAgIGRhdGEubGlnaHRpbmdDb2xvciA9IG1fZWZmZWN0Lmxp
Z2h0aW5nQ29sb3IoKTsKKyAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fZWZmZWN0LnN1cmZhY2VT
Y2FsZSgpIC8gMjU1LjBmOworICAgIGRhdGEuZGlmZnVzZUNvbnN0YW50ID0gbV9lZmZlY3QuZGlm
ZnVzZUNvbnN0YW50KCk7CisgICAgZGF0YS5zcGVjdWxhckNvbnN0YW50ID0gbV9lZmZlY3Quc3Bl
Y3VsYXJDb25zdGFudCgpOworICAgIGRhdGEuc3BlY3VsYXJFeHBvbmVudCA9IG1fZWZmZWN0LnNw
ZWN1bGFyRXhwb25lbnQoKTsKKyAgICBkYXRhLmxpZ2h0U291cmNlID0gJm1fZWZmZWN0LmxpZ2h0
U291cmNlKCk7CisgICAgZGF0YS5vcGVyYXRpbmdDb2xvclNwYWNlID0gJm1fZWZmZWN0Lm9wZXJh
dGluZ0NvbG9yU3BhY2UoKTsKKworICAgIGRhdGEucGl4ZWxzID0gJmRlc3RpbmF0aW9uUGl4ZWxB
cnJheTsKKyAgICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplID0gc2l6ZS53aWR0aCgp
ICogY1BpeGVsU2l6ZTsKKyAgICBkYXRhLndpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGRhdGEu
aGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKKworICAgIGFwcGx5UGxhdGZvcm0oZGF0YSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRUxpZ2h0aW5nU29mdHdhcmVB
cHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAppbmRleCBhZDJmYzI4ZmE5ZTdmNGJmMjkxM2Q2N2I5
ODA1N2Y4ZWViYjA4ZGIyLi5hODRmZTg1YTM4MWZhODQwNzVlNTE2NTRjYzJjMGM1YmI4YzFhYjJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTGlnaHRpbmcuaApAQCAtMjksOSArMjksNiBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5j
bHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+Ci0KLS8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBG
RURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxhckxpZ2h0aW5nCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMzksMTEgKzM2LDE1IEBAIHN0cnVjdCBGRUxpZ2h0aW5nUGFpbnRpbmdEYXRh
Rm9yTmVvbjsKIAogY2xhc3MgRkVMaWdodGluZyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVi
bGljOgorICAgIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9s
aWdodGluZ0NvbG9yOyB9CisgICAgYm9vbCBzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENvbG9yJik7
CisKICAgICBmbG9hdCBzdXJmYWNlU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2VTY2Fs
ZTsgfQogICAgIGJvb2wgc2V0U3VyZmFjZVNjYWxlKGZsb2F0KTsKIAotICAgIGNvbnN0IENvbG9y
JiBsaWdodGluZ0NvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9saWdodGluZ0NvbG9yOyB9Ci0gICAg
Ym9vbCBzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENvbG9yJik7CisgICAgZmxvYXQgZGlmZnVzZUNv
bnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9kaWZmdXNlQ29uc3RhbnQ7IH0KKyAgICBmbG9hdCBz
cGVjdWxhckNvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckNvbnN0YW50OyB9Cisg
ICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJFeHBv
bmVudDsgfQogCiAgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFgoKSBjb25zdCB7IHJldHVybiBt
X2tlcm5lbFVuaXRMZW5ndGhYOyB9CiAgICAgYm9vbCBzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9h
dCk7CkBAIC01NCwxMDEgKzU1LDE3IEBAIHB1YmxpYzoKICAgICBjb25zdCBMaWdodFNvdXJjZSYg
bGlnaHRTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0U291cmNlLmdldCgpOyB9CiAKIHBy
b3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAx
MDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0KLSAg
ICBlbnVtIExpZ2h0aW5nVHlwZSB7Ci0gICAgICAgIERpZmZ1c2VMaWdodGluZywKLSAgICAgICAg
U3BlY3VsYXJMaWdodGluZwotICAgIH07Ci0gICAgCi0gICAgc3RydWN0IEFscGhhV2luZG93IHsK
LSAgICAgICAgdWludDhfdCBhbHBoYVszXVszXSB7IH07Ci0gICAgICAgIAotICAgICAgICAvLyBU
aGUgaW1wbGVtZW50YXRpb25zIGFyZSBsaW5lZCB1cCB0byBtYWtlIGNvbXBhcmluZyBpbmRpY2Vz
IGVhc2llci4KLSAgICAgICAgdWludDhfdCB0b3BMZWZ0KCkgY29uc3QgICAgICAgICAgICAgeyBy
ZXR1cm4gYWxwaGFbMF1bMF07IH0KLSAgICAgICAgdWludDhfdCBsZWZ0KCkgY29uc3QgICAgICAg
ICAgICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMF07IH0KLSAgICAgICAgdWludDhfdCBib3R0b21M
ZWZ0KCkgY29uc3QgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMF07IH0KLQotICAgICAgICB1
aW50OF90IHRvcCgpIGNvbnN0ICAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVsxXTsg
fQotICAgICAgICB1aW50OF90IGNlbnRlcigpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVybiBh
bHBoYVsxXVsxXTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbSgpIGNvbnN0ICAgICAgICAgICAg
ICB7IHJldHVybiBhbHBoYVsyXVsxXTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wKHVpbnQ4X3Qg
dmFsdWUpICAgICAgICAgIHsgYWxwaGFbMF1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNl
dENlbnRlcih1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzFdWzFdID0gdmFsdWU7IH0KLSAg
ICAgICAgdm9pZCBzZXRCb3R0b20odWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsyXVsxXSA9
IHZhbHVlOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRUb3BSaWdodCh1aW50OF90IHZhbHVlKSAgICAg
eyBhbHBoYVswXVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0UmlnaHQodWludDhfdCB2
YWx1ZSkgICAgICAgIHsgYWxwaGFbMV1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldEJv
dHRvbVJpZ2h0KHVpbnQ4X3QgdmFsdWUpICB7IGFscGhhWzJdWzJdID0gdmFsdWU7IH0KLQotICAg
ICAgICBzdGF0aWMgdm9pZCBzaGlmdFJvdyh1aW50OF90IGFscGhhWzNdKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBhbHBoYVswXSA9IGFscGhhWzFdOwotICAgICAgICAgICAgYWxwaGFbMV0gPSBh
bHBoYVsyXTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBzaGlmdCgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzBdKTsKLSAgICAgICAgICAgIHNoaWZ0
Um93KGFscGhhWzFdKTsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzJdKTsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKLSAgICAgICAgLy8gVGhpcyBz
dHJ1Y3R1cmUgY29udGFpbnMgb25seSByZWFkLW9ubHkgKFNNUCBzYWZlKSBkYXRhCi0gICAgICAg
IFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7Ci0gICAgICAgIGZsb2F0IHN1cmZhY2VTY2FsZTsK
LSAgICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQgd2lk
dGhEZWNyZWFzZWRCeU9uZTsKLSAgICAgICAgaW50IGhlaWdodERlY3JlYXNlZEJ5T25lOwotCi0g
ICAgICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0g
ICAgICAgIGlubGluZSBJbnRTaXplIHRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAg
ICAgICAgaW5saW5lIEludFNpemUgdG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0g
ICAgICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhh
V2luZG93JikgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHJpZ2h0Q29sdW1uTm9ybWFs
KGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21MZWZ0Tm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21Sb3dO
b3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJp
Z2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGxhdGZv
cm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVMaWdodGluZyogZmlsdGVyOwot
ICAgICAgICBMaWdodGluZ0RhdGEgZGF0YTsKLSAgICAgICAgTGlnaHRTb3VyY2U6OlBhaW50aW5n
RGF0YSBwYWludGluZ0RhdGE7Ci0gICAgICAgIGludCB5U3RhcnQ7Ci0gICAgICAgIGludCB5RW5k
OwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcihQ
bGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqKTsKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9y
bUFwcGx5TmVvbldvcmtlcihGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbiopOwotCi0gICAg
RkVMaWdodGluZyhMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9h
dCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25z
dGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYsIFR5cGUpOwotCi0gICAg
Ym9vbCBkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmLCBpbnQsIGludCk7Ci0KLSAgICB2
b2lkIHNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0
IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yKTsKLSAgICB2b2lkIHNldFBpeGVsSW50ZXJu
YWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBh
aW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwg
SW50U2l6ZSBub3JtYWxWZWN0b3IsIGZsb2F0IGFscGhhKTsKKyAgICBGRUxpZ2h0aW5nKFR5cGUs
IGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRp
ZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBv
bmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBS
ZWY8TGlnaHRTb3VyY2U+JiYpOwogCiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2lu
Z0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KIAogICAgIGJvb2wgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5
KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsK
LQotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0RhdGEm
LCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WCwgaW50IHN0YXJ0
WSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmLCBj
b25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7Ci0KICNpZiBDUFUoQVJNX05FT04pICYm
IENQVShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVSKEdDQ19DT01QQVRJQkxFKQogICAgIHN0
YXRpYyBpbnQgZ2V0UG93ZXJDb2VmZmljaWVudHMoZmxvYXQgZXhwb25lbnQpOwogICAgIGlubGlu
ZSB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uKGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmKTsKICNlbmRpZgogCi0gICAgTGlnaHRpbmdUeXBlIG1fbGln
aHRpbmdUeXBlOwotICAgIFJlZjxMaWdodFNvdXJjZT4gbV9saWdodFNvdXJjZTsKLQogICAgIENv
bG9yIG1fbGlnaHRpbmdDb2xvcjsKICAgICBmbG9hdCBtX3N1cmZhY2VTY2FsZTsKICAgICBmbG9h
dCBtX2RpZmZ1c2VDb25zdGFudDsKQEAgLTE1Niw3ICs3Myw3IEBAIHByb3RlY3RlZDoKICAgICBm
bG9hdCBtX3NwZWN1bGFyRXhwb25lbnQ7CiAgICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWDsK
ICAgICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhZOworICAgIFJlZjxMaWdodFNvdXJjZT4gbV9s
aWdodFNvdXJjZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5kZXgg
MTFiYzg3OTU3ODdlYTQyMTdmMDgwNmY3YzU2M2UwZjU4YWM1YTAyYy4uNGVkMjJkNDQ0ZDU5OTFi
ZTY0MjFlYTg5ZDUyYjBlODMxYTEwMDIzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVNZXJnZS5oIgogCisjaW5jbHVkZSAiRmls
dGVyRWZmZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAt
MzgsMjUgKzM5LDQxIEBAIEZFTWVyZ2U6OkZFTWVyZ2UoKQogewogfQogCi1ib29sIEZFTWVyZ2U6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorLy8gRklYTUU6IE1vdmUgdGhl
IGNsYXNzIEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFk
ZXIgZmlsZXMuCitjbGFzcyBGRU1lcmdlU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVm
ZmVjdENvbmNyZXRlQXBwbGllcjxGRU1lcmdlPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVm
ZmVjdENvbmNyZXRlQXBwbGllcjxGRU1lcmdlPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6
OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVj
dFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKK307CisKK2Jvb2wgRkVNZXJnZVNvZnR3
YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9y
JiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5w
dXRzKCk7Ci0gICAgQVNTRVJUKHNpemUgPiAwKTsKKyAgICBBU1NFUlQoaW5wdXRFZmZlY3RzLnNp
emUoKSA+IDApOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuY3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
LSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KGkpOwotICAgICAgICBpZiAo
SW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCkpCi0gICAgICAg
ICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICBhdXRvJiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKworICAgIGZvciAoYXV0byYgaW4g
OiBpbnB1dEVmZmVjdHMpIHsKKyAgICAgICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZl
clJlc3VsdCgpOworICAgICAgICBpZiAoIWluQnVmZmVyKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgbV9lZmZl
Y3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwog
ICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEZFTWVyZ2U6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVNZXJnZVNv
ZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisK
IFRleHRTdHJlYW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8
PCBpbmRlbnQgPDwgIltmZU1lcmdlIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCA0MzI4OGQ5ZTU5
MmYwMjgyODM4NDJlNzkyNGI3MTE1ZmM4ZjZjMjc2Li4zMWNkMWI4YjliNjkzN2QyMjViZGY0Yzg5
Njk2YjUwYjNiNzEyOTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW5jbHVkZSAiQ29sb3JDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgogI2lu
Y2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CkBAIC04MywyMyArODQsNDggQEAgdm9pZCBGRU1vcnBob2xvZ3k6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgaW50IHBpeGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGludCB3aWR0aCkK
LXsKLSAgICByZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsKLX0KKy8vIEZJWE1FOiBNb3ZlIHRo
ZSBjbGFzcyBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFu
ZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFTW9ycGhvbG9neT4geworICAgIHVzaW5n
IEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVNb3JwaG9sb2d5PjsKIAotaW5s
aW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBp
eGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4ZWwpCi17Ci0gICAgcmV0dXJuIGFzQ29sb3JD
b21wb25lbnRzKGFzU1JHQkEocGl4ZWwpKTsKLX0KK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpC
YXNlOwogCi1pbmxpbmUgUGFja2VkQ29sb3I6OlJHQkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JD
b21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29tcG9uZW50cykK
LXsKLSAgICByZXR1cm4gUGFja2VkQ29sb3I6OlJHQkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JH
QkE8dWludDhfdD4+KGNvbXBvbmVudHMpIH07Ci19CisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0
ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgdXNpbmcgQ29sdW1uRXh0cmVtYSA9IFZlY3RvcjxDb2xvckNvbXBvbmVu
dHM8dWludDhfdCwgND4sIDE2PjsKKworICAgIHN0cnVjdCBQYWludGluZ0RhdGEgeworICAgICAg
ICBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU7CisgICAgICAgIGludCByYWRpdXNYOworICAg
ICAgICBpbnQgcmFkaXVzWTsKKyAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkqIHNyY1Bp
eGVsQXJyYXk7CisgICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5OworICAg
ICAgICBpbnQgd2lkdGg7CisgICAgICAgIGludCBoZWlnaHQ7CisgICAgfTsKKworICAgIHN0cnVj
dCBBcHBseVBhcmFtZXRlcnMgeworICAgICAgICBjb25zdCBQYWludGluZ0RhdGEqIHBhaW50aW5n
RGF0YTsKKyAgICAgICAgaW50IHN0YXJ0WTsKKyAgICAgICAgaW50IGVuZFk7CisgICAgfTsKKwor
ICAgIHN0YXRpYyBpbmxpbmUgaW50IHBpeGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGludCB3
aWR0aCkgeyByZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsgfQorICAgIHN0YXRpYyBpbmxpbmUg
UGFja2VkQ29sb3I6OlJHQkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGNvbnN0
IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29tcG9uZW50cykgeyByZXR1cm4gUGFja2Vk
Q29sb3I6OlJHQkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KGNvbXBvbmVu
dHMpIH07IH0KKworICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhl
bCkgeyByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkpOyB9CisgICAgc3Rh
dGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWluT3JNYXgoY29uc3QgQ29s
b3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4mIGIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOworICAgIHN0YXRpYyBpbmxpbmUgQ29s
b3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3
aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CisgICAgc3RhdGljIGlubGluZSBDb2xvckNv
bXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYg
a2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKIAotdGVtcGxhdGU8TW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4gbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0
Zm9ybUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7Cisg
ICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybShjb25zdCBQYWludGluZ0RhdGEmKTsKK307CisK
K2lubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVNb3JwaG9sb2d5U29mdHdhcmVB
cHBsaWVyOjptaW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGEsIGNv
bnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYiwgTW9ycGhvbG9neU9wZXJhdG9yVHlw
ZSB0eXBlKQogewogICAgIGlmICh0eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkK
ICAgICAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1pbihhLCBiKTsKQEAgLTEwNyw0NyArMTMzLDI3
IEBAIEFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNv
bnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90CiAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1heChh
LCBiKTsKIH0KIAotdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlT
X0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQg
eUVuZCwgaW50IHdpZHRoKQoraW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRU1v
cnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3
aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQogewogICAgIGF1dG8gZXh0cmVtdW0g
PSBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAq
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsg
cGl4ZWxBcnJheUluZGV4KHgsIHlTdGFydCwgd2lkdGgpKSB9KTsKIAogICAgIGZvciAoaW50IHkg
PSB5U3RhcnQgKyAxOyB5IDwgeUVuZDsgKyt5KSB7CiAgICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtl
Q29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxB
cnJheUluZGV4KHgsIHksIHdpZHRoKSkgfSk7Ci0gICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8
dHlwZT4oZXh0cmVtdW0sIHBpeGVsKTsKKyAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heChleHRy
ZW11bSwgcGl4ZWwsIHR5cGUpOwogICAgIH0KICAgICByZXR1cm4gZXh0cmVtdW07CiB9CiAKLUFM
V0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwg
aW50IHlFbmQsIGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQotewotICAg
IGlmICh0eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKLSAgICAgICAgcmV0dXJu
IGNvbHVtbkV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERT4oc3JjUGl4ZWxBcnJh
eSwgeCwgeVN0YXJ0LCB5RW5kLCB3aWR0aCk7Ci0KLSAgICByZXR1cm4gY29sdW1uRXh0cmVtdW08
RkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURT4oc3JjUGl4ZWxBcnJheSwgeCwgeVN0YXJ0LCB5
RW5kLCB3aWR0aCk7Ci19Ci0KLXVzaW5nIENvbHVtbkV4dHJlbWEgPSBWZWN0b3I8Q29sb3JDb21w
b25lbnRzPHVpbnQ4X3QsIDQ+LCAxNj47Ci0KLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUgdHlwZT4KLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5l
bEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCkKK2lubGluZSBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4gRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjprZXJuZWxFeHRy
ZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUg
dHlwZSkKIHsKICAgICBhdXRvIGV4dHJlbXVtID0ga2VybmVsWzBdOwogICAgIGZvciAoc2l6ZV90
IGkgPSAxOyBpIDwga2VybmVsLnNpemUoKTsgKytpKQotICAgICAgICBleHRyZW11bSA9IG1pbk9y
TWF4PHR5cGU+KGV4dHJlbXVtLCBrZXJuZWxbaV0pOworICAgICAgICBleHRyZW11bSA9IG1pbk9y
TWF4KGV4dHJlbXVtLCBrZXJuZWxbaV0sIHR5cGUpOwogCiAgICAgcmV0dXJuIGV4dHJlbXVtOwog
fQogCi1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRy
ZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUg
dHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0g
ICAgICAgIHJldHVybiBrZXJuZWxFeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU+
KGtlcm5lbCk7Ci0KLSAgICByZXR1cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJB
VE9SX0RJTEFURT4oa2VybmVsKTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBw
bHlHZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBp
bnQgZW5kWSkKK3ZvaWQgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
R2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50
IGVuZFkpCiB7CiAgICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwogCkBAIC0xNzMsMjggKzE3OSwy
OCBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgUGFpbnRp
bmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBzdAogCiAgICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRo
ZSBsZWZ0IGVkZ2UsIHNvIGNvbXB1dGUgZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4K
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCByYWRpdXNYOyArK3gpCi0gICAgICAgICAgICBl
eHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3Rh
cnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKKyAgICAgICAgICAgIGV4dHJlbWEuYXBw
ZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHgsIHlSYWRpdXNTdGFydCwgeVJhZGl1
c0VuZCwgd2lkdGgsIHBhaW50aW5nRGF0YS50eXBlKSk7CiAKICAgICAgICAgLy8gS2VybmVsIGlz
IGZpbGxlZCwgZ2V0IGV4dHJlbWEgb2YgbmV4dCBjb2x1bW4KICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB3aWR0aDsgKyt4KSB7CiAgICAgICAgICAgICBpZiAoeCA8IHdpZHRoIC0gcmFkaXVz
WCkKLSAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhl
bEFycmF5LCB4ICsgcmFkaXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgbV90
eXBlKSk7CisgICAgICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3Jj
UGl4ZWxBcnJheSwgeCArIHJhZGl1c1gsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgs
IHBhaW50aW5nRGF0YS50eXBlKSk7CiAKICAgICAgICAgICAgIGlmICh4ID4gcmFkaXVzWCkKICAg
ICAgICAgICAgICAgICBleHRyZW1hLnJlbW92ZSgwKTsKIAogICAgICAgICAgICAgdW5zaWduZWQq
IGRlc3RQaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkc3RQaXhlbEFycmF5LmRh
dGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpOwotICAgICAgICAgICAgKmRlc3RQ
aXhlbCA9IG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhrZXJuZWxFeHRyZW11bShl
eHRyZW1hLCBtX3R5cGUpKS52YWx1ZTsKKyAgICAgICAgICAgICpkZXN0UGl4ZWwgPSBtYWtlUGl4
ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoa2VybmVsRXh0cmVtdW0oZXh0cmVtYSwgcGFpbnRp
bmdEYXRhLnR5cGUpKS52YWx1ZTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBGRU1vcnBo
b2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBhcmFt
KQordm9pZCBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1Xb3JrZXIo
QXBwbHlQYXJhbWV0ZXJzKiBwYXJhbXMpCiB7Ci0gICAgcGFyYW0tPmZpbHRlci0+cGxhdGZvcm1B
cHBseUdlbmVyaWMoKnBhcmFtLT5wYWludGluZ0RhdGEsIHBhcmFtLT5zdGFydFksIHBhcmFtLT5l
bmRZKTsKKyAgICBhcHBseVBsYXRmb3JtR2VuZXJpYygqcGFyYW1zLT5wYWludGluZ0RhdGEsIHBh
cmFtcy0+c3RhcnRZLCBwYXJhbXMtPmVuZFkpOwogfQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxh
dGZvcm1BcHBseShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgRkVNb3Jw
aG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhKQogewogICAgIC8vIEVtcGlyaWNhbGx5LCBydW50aW1lIGlzIGFwcHJveGlt
YXRlbHkgbGluZWFyIG92ZXIgcmVhc29uYWJsZSBrZXJuZWwgc2l6ZXMgd2l0aCBhIHNsb3BlIG9m
IGFib3V0IDAuNjUuCiAgICAgZmxvYXQga2VybmVsRmFjdG9yID0gc3FydChwYWludGluZ0RhdGEu
cmFkaXVzWCAqIHBhaW50aW5nRGF0YS5yYWRpdXNZKSAqIDAuNjU7CkBAIC0yMDQsNyArMjEwLDcg
QEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHkoY29uc3QgUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEpCiAgICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHBhaW50aW5nRGF0YS5o
ZWlnaHQgLyA4OwogICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1
bnNpZ25lZD4oKHBhaW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQgKiBrZXJu
ZWxGYWN0b3IpIC8gbWluaW1hbEFyZWEsIG1heE51bVRocmVhZHMpOwogICAgIGlmIChvcHRpbWFs
VGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseVBh
cmFtZXRlcnM+IHBhcmFsbGVsSm9icygmV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKKyAgICAgICAgUGFyYWxsZWxKb2JzPEFw
cGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZhcHBseVBsYXRmb3JtV29ya2VyLCBvcHRpbWFs
VGhyZWFkTnVtYmVyKTsKICAgICAgICAgYXV0byBudW1PZlRocmVhZHMgPSBwYXJhbGxlbEpvYnMu
bnVtYmVyT2ZKb2JzKCk7CiAgICAgICAgIGlmIChudW1PZlRocmVhZHMgPiAxKSB7CiAgICAgICAg
ICAgICAvLyBTcGxpdCB0aGUgam9iIGludG8gImpvYlNpemUiLXNpemVkIGpvYnMgYnV0IHRoZXJl
IGEgZmV3IGpvYnMgdGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQpAQCAtMjEz
LDggKzIxOSw3IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogICAgICAgICAgICAgaW50IGpvYnNXaXRoRXh0cmEgPSBw
YWludGluZ0RhdGEuaGVpZ2h0ICUgbnVtT2ZUaHJlYWRzOwogICAgICAgICAgICAgaW50IGN1cnJl
bnRZID0gMDsKICAgICAgICAgICAgIGZvciAoaW50IGpvYiA9IG51bU9mVGhyZWFkcyAtIDE7IGpv
YiA+PSAwOyAtLWpvYikgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJz
JiBwYXJhbSA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBw
YXJhbS5maWx0ZXIgPSB0aGlzOworICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFy
YW0gPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7CiAgICAgICAgICAgICAgICAgcGFyYW0u
c3RhcnRZID0gY3VycmVudFk7CiAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gam9iIDwgam9i
c1dpdGhFeHRyYSA/IGpvYlNpemUgKyAxIDogam9iU2l6ZTsKICAgICAgICAgICAgICAgICBwYXJh
bS5lbmRZID0gY3VycmVudFk7CkBAIC0yMjYsNjAgKzIzMSw2NSBAQCB2b2lkIEZFTW9ycGhvbG9n
eTo6cGxhdGZvcm1BcHBseShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKICAgICAg
ICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZCBtb2RlbAogICAgIH0KIAotICAgIHBsYXRm
b3JtQXBwbHlHZW5lcmljKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRpbmdEYXRhLmhlaWdodCk7Ci19
Ci0KLWJvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1w
ZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFk
aXVzWCwgaW50IHJhZGl1c1kpCi17Ci0gICAgaWYgKHJhZGl1c1ggPCAwIHx8IHJhZGl1c1kgPCAw
IHx8ICghcmFkaXVzWCAmJiAhcmFkaXVzWSkpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwotICAgICAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZHN0
UGl4ZWxBcnJheSwgaW1hZ2VSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGFwcGx5UGxhdGZvcm1H
ZW5lcmljKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRpbmdEYXRhLmhlaWdodCk7CiB9CiAKLWJvb2wg
RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIp
Citib29sIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3RzWzBdLmdldCgpOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ciA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5jcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXItPmRhdGEoKTsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkp
OworICAgIG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCi0g
ICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgSW50UmVjdCBlZmZlY3REcmF3
aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7CiAKLSAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRT
aXplKEZsb2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwotICAgIGlmIChwbGF0Zm9ybUFw
cGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBy
YWRpdXMud2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKSkKKyAgICBhdXRvIGlzRGVnZW5lcmF0ZSA9
IFtdKGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiBy
YWRpdXNYIDwgMCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpOworICAg
IH07CisKKyAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0U2l6ZShtX2Vm
ZmVjdC5yYWRpdXNYKCksIG1fZWZmZWN0LnJhZGl1c1koKSkpOworICAgIGlmIChpc0RlZ2VuZXJh
dGUocmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpIHsKKyAgICAgICAgaW4tPmNvcHlQ
cmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1Jl
Y3QsIG1fZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KIAotICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVk
UmVzdWx0KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGF1
dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdp
bmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgIGlmICghc291cmNl
UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmFkaXVzID0gZmxvb3Jl
ZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX3JhZGl1c1gsIG1fcmFkaXVz
WSB9KSk7CisgICAgcmFkaXVzID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVy
U2NhbGUoeyBtX2VmZmVjdC5yYWRpdXNYKCksIG1fZWZmZWN0LnJhZGl1c1koKSB9KSk7CiAgICAg
aW50IHJhZGl1c1ggPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFk
aXVzLndpZHRoKCkpOwogICAgIGludCByYWRpdXNZID0gc3RkOjptaW4oZWZmZWN0RHJhd2luZ1Jl
Y3QuaGVpZ2h0KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkpOwogCi0gICAgaWYgKHBsYXRmb3JtQXBw
bHlEZWdlbmVyYXRlKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIHJh
ZGl1c1gsIHJhZGl1c1kpKQorICAgIGlmIChpc0RlZ2VuZXJhdGUocmFkaXVzWCwgcmFkaXVzWSkp
IHsKKyAgICAgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxB
cnJheSwgZWZmZWN0RHJhd2luZ1JlY3QsIG1fZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICAKICAgICBQYWludGluZ0RhdGEgcGFp
bnRpbmdEYXRhOworICAgIHBhaW50aW5nRGF0YS50eXBlID0gbV9lZmZlY3QubW9ycGhvbG9neU9w
ZXJhdG9yKCk7CisgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYKTsKKyAg
ICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kpOworICAgIAogICAgIHBhaW50
aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gc291cmNlUGl4ZWxBcnJheS5nZXQoKTsKICAgICBwYWlu
dGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CiAgICAgcGFp
bnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSk7CiAgICAg
cGFpbnRpbmdEYXRhLmhlaWdodCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpKTsK
LSAgICBwYWludGluZ0RhdGEucmFkaXVzWCA9IGNlaWxmKHJhZGl1c1gpOwotICAgIHBhaW50aW5n
RGF0YS5yYWRpdXNZID0gY2VpbGYocmFkaXVzWSk7CiAKLSAgICBwbGF0Zm9ybUFwcGx5KHBhaW50
aW5nRGF0YSk7CisgICAgYXBwbHlQbGF0Zm9ybShwYWludGluZ0RhdGEpOwogICAgIHJldHVybiB0
cnVlOwogfQogCitib29sIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxp
ZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJh
dG9yVHlwZSYgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCmluZGV4
IDI4OGVlYTBlMWUyMTNjZTMyZDgxNzMwYjYxOTlkZDVlMDQxYzk2M2QuLjU4OTUwMmE2ZjViYzZk
MjBiOGUxOWVhOWZmNTdjYTc4OTI1ZDgyNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaApAQCAtNTMsMjkgKzUz
LDYgQEAgcHJpdmF0ZToKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRh
dGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShVaW50OENsYW1wZWRBcnJheSYg
ZHN0UGl4ZWxBcnJheSwgY29uc3QgSW50UmVjdCYgaW1hZ2VSZWN0LCBpbnQgcmFkaXVzWCwgaW50
IHJhZGl1c1kpOwotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5KiBzcmNQaXhlbEFycmF5OwotICAgICAgICBVaW50OENsYW1wZWRBcnJh
eSogZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0
OwotICAgICAgICBpbnQgcmFkaXVzWDsKLSAgICAgICAgaW50IHJhZGl1c1k7Ci0gICAgfTsKLQot
ICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIEZFTW9ycGhvbG9n
eSogZmlsdGVyOwotICAgICAgICBpbnQgc3RhcnRZOwotICAgICAgICBpbnQgZW5kWTsKLSAgICAg
ICAgY29uc3QgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7Ci0gICAgfTsKLQotICAgIHN0YXRp
YyB2b2lkIHBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqKTsKLQot
ICAgIHZvaWQgcGxhdGZvcm1BcHBseShjb25zdCBQYWludGluZ0RhdGEmKTsKLSAgICB2b2lkIHBs
YXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYsIGludCBzdGFydFksIGludCBl
bmRZKTsKLQogICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbV90eXBlOwogICAgIGZsb2F0IG1f
cmFkaXVzWDsKICAgICBmbG9hdCBtX3JhZGl1c1k7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCmluZGV4IDAxNDU1N2EzMWQ3
MDk3MjM2MjJkNzY2MzBhYWM3MjgzYmIyNjVmNzguLjdkNTUwMzY0OTVmYWVmZGM3NTYwOTUzMzgx
MzllMmRjYzZjMGQ3NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAi
RkVPZmZzZXQuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVj
dEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTY0LDI0ICs2
NSwzOSBAQCB2b2lkIEZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBG
aWx0ZXImIGZpbHRlcikKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0
KHBhaW50UmVjdCkpOwogfQogCi1ib29sIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIpCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVPZmZzZXRT
b2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFz
cyBGRU9mZnNldFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFw
cGxpZXI8RkVPZmZzZXQ+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVB
cHBsaWVyPEZFT2Zmc2V0PjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAg
ICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5w
dXRFZmZlY3RzKSBvdmVycmlkZTsKK307CisKK2Jvb2wgRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXI6
OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlu
cHV0RWZmZWN0cykKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Cisg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKIAotICAgIEltYWdl
QnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQo
KTsKICAgICBJbWFnZUJ1ZmZlciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
ICAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CisgICAgbV9lZmZl
Y3Quc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKLSAgICBGbG9hdFJlY3Qg
ZHJhd2luZ1JlZ2lvbiA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgIGRyYXdpbmdSZWdpb24ubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJT
Y2FsZSh7IG1fZHgsIG1fZHkgfSkpOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gbV9l
ZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
CisgICAgZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9l
ZmZlY3QuZHgoKSwgbV9lZmZlY3QuZHkoKSB9KSk7CiAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQo
KS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uKTsKIAogICAgIHJldHVy
biB0cnVlOwogfQogCitib29sIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyKCp0
aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogVGV4dFN0cmVhbSYgRkVP
ZmZzZXQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0
aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltm
ZU9mZnNldCI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKaW5kZXggNjA3YTcxYzRjZjM1
ZjU2ZDRhMjJmY2Y1MDI2ZjE0MmI1MTdlNzBkNy4uYWM2MmIxMjA3MDdkYzZkOWY0NTBiYjVjYjkx
Mzc5MDA5MDRlYTk2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcApAQCAtMzMsNyAr
MzMsNyBAQCBSZWY8RkVTcGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0
ZShjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZgogfQogCiBGRVNwZWN1bGFyTGlnaHRpbmc6
OkZFU3BlY3VsYXJMaWdodGluZyhjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3Vy
ZmFjZVNjYWxlLCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxM
aWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoU3BlY3VsYXJMaWdo
dGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBz
cGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdU
Rk1vdmUobGlnaHRTb3VyY2UpLCBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFU3BlY3VsYXJMaWdodGlu
ZykKKyAgICA6IEZFTGlnaHRpbmcoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRp
bmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwgc3Bl
Y3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZN
b3ZlKGxpZ2h0U291cmNlKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCmluZGV4IDRmZTI0YTRmMjYyYjE3NDIyZTc4
M2I0NzYwZjMzMTUwMTg1MmRjMTguLjFlY2FkN2YxMTQyNzY3OGE2MmNkNDYxNjJlYjVjYTg1Zjkw
NTVlM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVGlsZS5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxp
ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKQEAgLTQyLDIzICs0MywzMiBAQCBGRVRpbGU6OkZF
VGlsZSgpCiB7CiB9CiAKLWJvb2wgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVUaWxlU29mdHdhcmVB
cHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVUaWxl
U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRVRp
bGU+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFVGls
ZT47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShj
b25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3Zl
cnJpZGU7Cit9OworCitib29sIEZFVGlsZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmls
dGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewot
Ly8gRklYTUU6IFNlZSBidWcgNDczMTUuIFRoaXMgaXMgYSBoYWNrIHRvIHdvcmsgYXJvdW5kIGEg
Y29tcGlsZSBmYWlsdXJlLCBidXQgaXMgaW5jb3JyZWN0IGJlaGF2aW9yIG90aGVyd2lzZS4KLSAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgRmlsdGVyRWZmZWN0KiBp
biA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFn
ZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdElt
YWdlID0gbV9lZmZlY3QuY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBJbWFnZUJ1ZmZl
ciogaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdElt
YWdlIHx8ICFpbkJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2V0SXNBbHBo
YUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CisgICAgbV9lZmZlY3Quc2V0SXNBbHBoYUltYWdl
KGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICAvLyBTb3VyY2UgaW5wdXQgbmVlZHMgbW9yZSBh
dHRlbnRpb24uIEl0IGhhcyB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyUmVnaW9uIGJ1dCBnaXZlcyB0
aGUKICAgICAvLyBzaXplIG9mIHRoZSBjdXR0ZWQgc291cmNlSW1hZ2UgYmFjay4gVGhpcyBpcyBw
YXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBvcHRpbWl6YXRpb24uCiAgICAgRmxvYXRSZWN0
IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKICAgICBGbG9hdFBvaW50IGluTWF4RWZm
ZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOwotICAgIEZsb2F0UG9pbnQgbWF4RWZm
ZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKKyAgICBGbG9hdFBvaW50
IG1heEVmZmVjdExvY2F0aW9uID0gbV9lZmZlY3QubWF4RWZmZWN0UmVjdCgpLmxvY2F0aW9uKCk7
CiAgICAgaWYgKGluLT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VH
cmFwaGljIHx8IGluLT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VB
bHBoYSkgewogICAgICAgICB0aWxlUmVjdCA9IGZpbHRlci5maWx0ZXJSZWdpb24oKTsKICAgICAg
ICAgdGlsZVJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwpAQCAtODMsMTEgKzkzLDE2
IEBAIGJvb2wgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCiAKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+
Y29udGV4dCgpOwogICAgIGZpbHRlckNvbnRleHQuc2V0RmlsbFBhdHRlcm4oV1RGTW92ZShwYXR0
ZXJuKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgp
LCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpOworICAgIGZpbHRlckNvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5z
aXplKCkpKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEZFVGlsZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRVRpbGVT
b2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQor
CiBUZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8
PCBpbmRlbnQgPDwgIltmZVRpbGUiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IGRhNDc0ZjQxMDVm
MTY0ZTRkZGVlNDhiNmNhYjlkYjhmODNhMWE3ZmUuLjExOTAwZDQwNzA3YjAzMzUwNmNmYTlkNjQ5
NzQyMjQ5NTJmYzQxMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUg
IkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgpAQCAt
MzQsMjAgKzM1LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vKgotICAgIFByb2R1Y2Vz
IHJlc3VsdHMgaW4gdGhlIHJhbmdlIFsxLCAyKiozMSAtIDJdLiBBbGdvcml0aG0gaXM6Ci0gICAg
ciA9IChhICogcikgbW9kIG0gd2hlcmUgYSA9IHJhbmRBbXBsaXR1ZGUgPSAxNjgwNyBhbmQKLSAg
ICBtID0gcmFuZE1heGltdW0gPSAyKiozMSAtIDEgPSAyMTQ3NDgzNjQ3LCByID0gc2VlZC4KLSAg
ICBTZWUgW1BhcmsgJiBNaWxsZXJdLCBDQUNNIHZvbC4gMzEgbm8uIDEwIHAuIDExOTUsIE9jdC4g
MTk4OAotICAgIFRvIHRlc3Q6IHRoZSBhbGdvcml0aG0gc2hvdWxkIHByb2R1Y2UgdGhlIHJlc3Vs
dCAxMDQzNjE4MDY1Ci0gICAgYXMgdGhlIDEwLDAwMHRoIGdlbmVyYXRlZCBudW1iZXIgaWYgdGhl
IG9yaWdpbmFsIHNlZWQgaXMgMS4KLSovCi1zdGF0aWMgY29uc3QgaW50IHNfcGVybGluTm9pc2Ug
PSA0MDk2Owotc3RhdGljIGNvbnN0IGxvbmcgc19yYW5kTWF4aW11bSA9IDIxNDc0ODM2NDc7IC8v
IDIqKjMxIC0gMQotc3RhdGljIGNvbnN0IGludCBzX3JhbmRBbXBsaXR1ZGUgPSAxNjgwNzsgLy8g
NyoqNTsgcHJpbWl0aXZlIHJvb3Qgb2YgbQotc3RhdGljIGNvbnN0IGludCBzX3JhbmRRID0gMTI3
NzczOyAvLyBtIC8gYQotc3RhdGljIGNvbnN0IGludCBzX3JhbmRSID0gMjgzNjsgLy8gbSAlIGEK
LQogUmVmPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoVHVyYnVsZW5jZVR5cGUg
dHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVt
T2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKIHsKICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UodHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVu
Y3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOwpAQCAtMTE1LDcyICsxMDIsMTM0
IEBAIGJvb2wgRkVUdXJidWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyhib29sIHN0aXRjaCkKIC8vIFRo
ZSB0dXJidWxlbmNlIGNhbGN1bGF0aW9uIGNvZGUgaXMgYW4gYWRhcHRlZCB2ZXJzaW9uIG9mIHdo
YXQgYXBwZWFycyBpbiB0aGUgU1ZHIDEuMSBzcGVjaWZpY2F0aW9uOgogLy8gaHR0cDovL3d3dy53
My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZQogCi0vLyBDb21wdXRlIHBz
ZXVkbyByYW5kb20gbnVtYmVyLgotaW5saW5lIGxvbmcgRkVUdXJidWxlbmNlOjpQYWludGluZ0Rh
dGE6OnJhbmRvbSgpCi17Ci0gICAgbG9uZyByZXN1bHQgPSBzX3JhbmRBbXBsaXR1ZGUgKiAoc2Vl
ZCAlIHNfcmFuZFEpIC0gc19yYW5kUiAqIChzZWVkIC8gc19yYW5kUSk7Ci0gICAgaWYgKHJlc3Vs
dCA8PSAwKQotICAgICAgICByZXN1bHQgKz0gc19yYW5kTWF4aW11bTsKLSAgICBzZWVkID0gcmVz
dWx0OwotICAgIHJldHVybiByZXN1bHQ7Ci19CisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVU
dXJidWxlbmNlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZp
bGVzLgorY2xhc3MgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVm
ZmVjdENvbmNyZXRlQXBwbGllcjxGRVR1cmJ1bGVuY2U+IHsKKyAgICB1c2luZyBCYXNlID0gRmls
dGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFVHVyYnVsZW5jZT47CisKK3B1YmxpYzoKKyAgICB1
c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBG
aWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgLy8gUHJvZHVjZXMgcmVzdWx0cyBpbiB0aGUgcmFuZ2UgWzEsIDIqKjMxIC0gMl0uIEFsZ29y
aXRobSBpczoKKyAgICAvLyByID0gKGEgKiByKSBtb2QgbSB3aGVyZSBhID0gcmFuZEFtcGxpdHVk
ZSA9IDE2ODA3IGFuZAorICAgIC8vIG0gPSByYW5kTWF4aW11bSA9IDIqKjMxIC0gMSA9IDIxNDc0
ODM2NDcsIHIgPSBzZWVkLgorICAgIC8vIFNlZSBbUGFyayAmIE1pbGxlcl0sIENBQ00gdm9sLiAz
MSBuby4gMTAgcC4gMTE5NSwgT2N0LiAxOTg4CisgICAgLy8gVG8gdGVzdDogdGhlIGFsZ29yaXRo
bSBzaG91bGQgcHJvZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgwNjUKKyAgICAvLyBhcyB0aGUgMTAs
MDAwdGggZ2VuZXJhdGVkIG51bWJlciBpZiB0aGUgb3JpZ2luYWwgc2VlZCBpcyAxLgorICAgIHN0
YXRpYyBjb25zdCBpbnQgcGVybGluTm9pc2UgPSA0MDk2OworICAgIHN0YXRpYyBjb25zdCBsb25n
IHJhbmRNYXhpbXVtID0gMjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAxCisgICAgc3RhdGljIGNvbnN0
IGludCByYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290IG9mIG0K
KyAgICBzdGF0aWMgY29uc3QgaW50IHJhbmRRID0gMTI3NzczOyAvLyBtIC8gYQorICAgIHN0YXRp
YyBjb25zdCBpbnQgcmFuZFIgPSAyODM2OyAvLyBtICUgYQorCisgICAgc3RhdGljIGNvbnN0IGlu
dCBibG9ja1NpemUgPSAyNTY7CisgICAgc3RhdGljIGNvbnN0IGludCBibG9ja01hc2sgPSBibG9j
a1NpemUgLSAxOworCisgICAgc3RydWN0IFBhaW50aW5nRGF0YSB7CisgICAgICAgIC8vIENvbXB1
dGUgcHNldWRvIHJhbmRvbSBudW1iZXIuCisgICAgICAgIGxvbmcgcmFuZG9tKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbG9uZyByZXN1bHQgPSByYW5kQW1wbGl0dWRlICogKHNlZWQgJSByYW5k
USkgLSByYW5kUiAqIChzZWVkIC8gcmFuZFEpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA8PSAw
KQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSByYW5kTWF4aW11bTsKKyAgICAgICAgICAgIHNl
ZWQgPSByZXN1bHQ7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CiAKLWlu
bGluZSBmbG9hdCBzbW9vdGhDdXJ2ZShmbG9hdCB0KQotewotICAgIHJldHVybiB0ICogdCAqICgz
IC0gMiAqIHQpOwotfQorICAgICAgICBUdXJidWxlbmNlVHlwZSB0eXBlOworICAgICAgICBmbG9h
dCBiYXNlRnJlcXVlbmN5WDsKKyAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVk7CisgICAgICAg
IGludCBudW1PY3RhdmVzOworICAgICAgICBsb25nIHNlZWQ7CisgICAgICAgIGJvb2wgc3RpdGNo
VGlsZXM7CisgICAgICAgIEludFNpemUgcGFpbnRpbmdTaXplOwogCi1pbmxpbmUgZmxvYXQgbGlu
ZWFySW50ZXJwb2xhdGlvbihmbG9hdCB0LCBmbG9hdCBhLCBmbG9hdCBiKQotewotICAgIHJldHVy
biBhICsgdCAqIChiIC0gYSk7Ci19CisgICAgICAgIGludCBsYXR0aWNlU2VsZWN0b3JbMiAqIGJs
b2NrU2l6ZSArIDJdOworICAgICAgICBmbG9hdCBncmFkaWVudFs0XVsyICogYmxvY2tTaXplICsg
Ml1bMl07CisgICAgfTsKKworICAgIHN0cnVjdCBTdGl0Y2hEYXRhIHsKKyAgICAgICAgaW50IHdp
ZHRoIHsgMCB9OyAvLyBIb3cgbXVjaCB0byBzdWJ0cmFjdCB0byB3cmFwIGZvciBzdGl0Y2hpbmcu
CisgICAgICAgIGludCB3cmFwWCB7IDAgfTsgLy8gTWluaW11bSB2YWx1ZSB0byB3cmFwLgorICAg
ICAgICBpbnQgaGVpZ2h0IHsgMCB9OworICAgICAgICBpbnQgd3JhcFkgeyAwIH07CisgICAgfTsK
KworICAgIHN0cnVjdCBBcHBseVBhcmFtZXRlcnMgeworICAgICAgICBJbnRSZWN0IGZpbHRlclJl
Z2lvbjsKKyAgICAgICAgRmxvYXRTaXplIGZpbHRlclNjYWxlOworICAgICAgICBVaW50OENsYW1w
ZWRBcnJheSogcGl4ZWxBcnJheTsKKyAgICAgICAgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7
CisgICAgICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKKyAgICAgICAgaW50IHN0YXJ0WTsKKyAg
ICAgICAgaW50IGVuZFk7CisgICAgfTsKIAotdm9pZCBGRVR1cmJ1bGVuY2U6OmluaXRQYWludChQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IHNtb290
aEN1cnZlKGZsb2F0IHQpIHsgcmV0dXJuIHQgKiB0ICogKDMgLSAyICogdCk7IH0KKyAgICBzdGF0
aWMgaW5saW5lIGZsb2F0IGxpbmVhckludGVycG9sYXRpb24oZmxvYXQgdCwgZmxvYXQgYSwgZmxv
YXQgYikgeyByZXR1cm4gYSArIHQgKiAoYiAtIGEpOyB9CisKKyAgICBzdGF0aWMgUGFpbnRpbmdE
YXRhIGluaXRQYWludGluZ0RhdGEoVHVyYnVsZW5jZVR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lY
LCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGxvbmcgc2VlZCwgYm9vbCBz
dGl0Y2hUaWxlcywgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplKTsKKyAgICBzdGF0aWMgU3Rp
dGNoRGF0YSBjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJl
cXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZLCBib29sIHN0aXRjaFRpbGVzKTsKKworICAg
IHN0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNlMkQoY29uc3QgUGFpbnRpbmdE
YXRhJiwgY29uc3QgU3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKTsK
KyAgICBzdGF0aWMgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IHRvSW50QmFzZWRDb2xvckNv
bXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiYgZmxvYXRDb21wb25lbnRz
KTsKKyAgICBzdGF0aWMgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNhbGN1bGF0ZVR1cmJ1
bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGNvbnN0
IEZsb2F0UG9pbnQmKTsKKworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1HZW5lcmljKGNv
bnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwg
VWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRj
aERhdGEsIGludCBzdGFydFksIGludCBlbmRZKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRm
b3JtV29ya2VyKEFwcGx5UGFyYW1ldGVycyopOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZv
cm0oY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNj
YWxlLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgUGFpbnRpbmdEYXRhJiwgU3RpdGNo
RGF0YSYpOworfTsKKworRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpQYWludGluZ0RhdGEg
RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjppbml0UGFpbnRpbmdEYXRhKFR1cmJ1bGVuY2VU
eXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50
IG51bU9jdGF2ZXMsIGxvbmcgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcywgY29uc3QgSW50U2l6ZSYg
cGFpbnRpbmdTaXplKQogewotICAgIGZsb2F0IG5vcm1hbGl6YXRpb25GYWN0b3I7CisgICAgUGFp
bnRpbmdEYXRhIHBhaW50aW5nRGF0YSB7IHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVl
bmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMsIHBhaW50aW5nU2l6ZSwgeyB9LCB7
IH0gfTsKIAotICAgIC8vIFRoZSBzZWVkIHZhbHVlIGNsYW1wIHRvIHRoZSByYW5nZSBbMSwgc19y
YW5kTWF4aW11bSAtIDFdLgorICAgIC8vIFRoZSBzZWVkIHZhbHVlIGNsYW1wIHRvIHRoZSByYW5n
ZSBbMSwgcmFuZE1heGltdW0gLSAxXS4KICAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPD0gMCkK
LSAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQgPSAtKHBhaW50aW5nRGF0YS5zZWVkICUgKHNfcmFu
ZE1heGltdW0gLSAxKSkgKyAxOwotICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA+IHNfcmFuZE1h
eGltdW0gLSAxKQotICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9IHNfcmFuZE1heGltdW0gLSAx
OworICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9IC0ocGFpbnRpbmdEYXRhLnNlZWQgJSAocmFu
ZE1heGltdW0gLSAxKSkgKyAxOworICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA+IHJhbmRNYXhp
bXVtIC0gMSkKKyAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQgPSByYW5kTWF4aW11bSAtIDE7CiAK
ICAgICBmbG9hdCogZ3JhZGllbnQ7CiAgICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwg
PCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6
ZTsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmxvY2tTaXplOyArK2kpIHsK
ICAgICAgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV0gPSBpOwogICAgICAg
ICAgICAgZ3JhZGllbnQgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV07CiAgICAg
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2FzdDxm
bG9hdD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxv
Y2tTaXplKSAvIHNfYmxvY2tTaXplOwotICAgICAgICAgICAgICAgIGdyYWRpZW50WzFdID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXpl
KSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKKyAgICAgICAgICAgICAgICBncmFkaWVu
dFswXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBi
bG9ja1NpemUpKSAtIGJsb2NrU2l6ZSkgLyBibG9ja1NpemU7CisgICAgICAgICAgICAgICAgZ3Jh
ZGllbnRbMV0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgy
ICogYmxvY2tTaXplKSkgLSBibG9ja1NpemUpIC8gYmxvY2tTaXplOwogICAgICAgICAgICAgfSB3
aGlsZSAoIWdyYWRpZW50WzBdICYmICFncmFkaWVudFsxXSk7Ci0gICAgICAgICAgICBub3JtYWxp
emF0aW9uRmFjdG9yID0gc3RkOjpoeXBvdChncmFkaWVudFswXSwgZ3JhZGllbnRbMV0pOworICAg
ICAgICAgICAgZmxvYXQgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0ZDo6aHlwb3QoZ3JhZGllbnRb
MF0sIGdyYWRpZW50WzFdKTsKICAgICAgICAgICAgIGdyYWRpZW50WzBdIC89IG5vcm1hbGl6YXRp
b25GYWN0b3I7CiAgICAgICAgICAgICBncmFkaWVudFsxXSAvPSBub3JtYWxpemF0aW9uRmFjdG9y
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yIChpbnQgaSA9IHNfYmxvY2tTaXplIC0gMTsg
aSA+IDA7IC0taSkgeworICAgIGZvciAoaW50IGkgPSBibG9ja1NpemUgLSAxOyBpID4gMDsgLS1p
KSB7CiAgICAgICAgIGludCBrID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXTsKLSAg
ICAgICAgaW50IGogPSBwYWludGluZ0RhdGEucmFuZG9tKCkgJSBzX2Jsb2NrU2l6ZTsKKyAgICAg
ICAgaW50IGogPSBwYWludGluZ0RhdGEucmFuZG9tKCkgJSBibG9ja1NpemU7CiAgICAgICAgIEFT
U0VSVChqID49IDApOwotICAgICAgICBBU1NFUlQoaiA8IDIgKiBzX2Jsb2NrU2l6ZSArIDIpOwor
ICAgICAgICBBU1NFUlQoaiA8IDIgKiBibG9ja1NpemUgKyAyKTsKICAgICAgICAgcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal07
CiAgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jbal0gPSBrOwogICAgIH0KIAot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemUgKyAyOyArK2kpIHsKLSAgICAgICAg
cGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltzX2Jsb2NrU2l6ZSArIGldID0gcGFpbnRpbmdE
YXRhLmxhdHRpY2VTZWxlY3RvcltpXTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGJsb2NrU2l6
ZSArIDI7ICsraSkgeworICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2Jsb2Nr
U2l6ZSArIGldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXTsKICAgICAgICAgZm9y
IChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAgICAg
IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2NrU2l6ZSArIGldWzBdID0gcGFp
bnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzBdOwotICAgICAgICAgICAgcGFpbnRpbmdE
YXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMV0gPSBwYWludGluZ0RhdGEu
Z3JhZGllbnRbY2hhbm5lbF1baV1bMV07CisgICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGll
bnRbY2hhbm5lbF1bYmxvY2tTaXplICsgaV1bMF0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hh
bm5lbF1baV1bMF07CisgICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1b
YmxvY2tTaXplICsgaV1bMV0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMV07
CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1cm4gcGFpbnRpbmdEYXRhOwogfQogCi1GRVR1
cmJ1bGVuY2U6OlN0aXRjaERhdGEgRkVUdXJidWxlbmNlOjpjb21wdXRlU3RpdGNoaW5nKEludFNp
emUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZ
KSBjb25zdAorRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpTdGl0Y2hEYXRhIEZFVHVyYnVs
ZW5jZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBm
bG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSwgYm9vbCBzdGl0Y2hU
aWxlcykKIHsKLSAgICBpZiAoIW1fc3RpdGNoVGlsZXMpCisgICAgaWYgKCFzdGl0Y2hUaWxlcykK
ICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGZsb2F0IHRpbGVXaWR0aCA9IHRpbGVTaXplLndp
ZHRoKCk7CkBAIC0yMDksMTUgKzI1OCwxNSBAQCBGRVR1cmJ1bGVuY2U6OlN0aXRjaERhdGEgRkVU
dXJidWxlbmNlOjpjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JgogCiAg
ICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwogICAgIHN0aXRjaERhdGEud2lkdGggPSByb3VuZGYo
dGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpOwotICAgIHN0aXRjaERhdGEud3JhcFggPSBzX3Bl
cmxpbk5vaXNlICsgc3RpdGNoRGF0YS53aWR0aDsKKyAgICBzdGl0Y2hEYXRhLndyYXBYID0gcGVy
bGluTm9pc2UgKyBzdGl0Y2hEYXRhLndpZHRoOwogICAgIHN0aXRjaERhdGEuaGVpZ2h0ID0gcm91
bmRmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSk7Ci0gICAgc3RpdGNoRGF0YS53cmFwWSA9
IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLmhlaWdodDsKKyAgICBzdGl0Y2hEYXRhLndyYXBZ
ID0gcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLmhlaWdodDsKIAogICAgIHJldHVybiBzdGl0Y2hE
YXRhOwogfQogCiAvLyBUaGlzIGlzIHRha2VuIDE6MSBmcm9tIFNWRyBzcGVjOiBodHRwOi8vd3d3
LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxlbWVudC4KLUNvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxlbmNlOjpub2lzZTJEKGNvbnN0IFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhLCBjb25zdCBG
bG9hdFBvaW50JiBub2lzZVZlY3RvcikgY29uc3QKK0NvbG9yQ29tcG9uZW50czxmbG9hdCwgND4g
RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBv
aW50JiBub2lzZVZlY3RvcikKIHsKICAgICBzdHJ1Y3QgTm9pc2VQb3NpdGlvbiB7CiAgICAgICAg
IGludCBpbmRleDsgLy8gYngwLCBieTAgaW4gdGhlIHNwZWMgdGV4dC4KQEAgLTIzMCw3ICsyNzks
NyBAQCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChjb25z
dCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YQogICAgICAgICAgICAgLy8gIGJ4MCA9IChpbnQp
dDsKICAgICAgICAgICAgIC8vICBieDEgPSBieDArMTsKICAgICAgICAgICAgIC8vICByeDAgPSB0
IC0gKGludCl0OwotICAgICAgICAgICAgZmxvYXQgcG9zaXRpb24gPSBjb21wb25lbnQgKyBzX3Bl
cmxpbk5vaXNlOworICAgICAgICAgICAgZmxvYXQgcG9zaXRpb24gPSBjb21wb25lbnQgKyBwZXJs
aW5Ob2lzZTsKICAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbik7
CiAgICAgICAgICAgICBuZXh0SW5kZXggPSBpbmRleCArIDE7CiAgICAgICAgICAgICBmcmFjdGlv
biA9IHBvc2l0aW9uIC0gaW5kZXg7CkBAIC0yNTQsNyArMzAzLDcgQEAgQ29sb3JDb21wb25lbnRz
PGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEKICAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWShub2lzZVZlY3Rvci55KCkpOwogCiAg
ICAgLy8gSWYgc3RpdGNoaW5nLCBhZGp1c3QgbGF0dGljZSBwb2ludHMgYWNjb3JkaW5nbHkuCi0g
ICAgaWYgKG1fc3RpdGNoVGlsZXMpIHsKKyAgICBpZiAocGFpbnRpbmdEYXRhLnN0aXRjaFRpbGVz
KSB7CiAgICAgICAgIG5vaXNlWC5zdGl0Y2goc3RpdGNoRGF0YS53aWR0aCwgc3RpdGNoRGF0YS53
cmFwWCk7CiAgICAgICAgIG5vaXNlWS5zdGl0Y2goc3RpdGNoRGF0YS5oZWlnaHQsIHN0aXRjaERh
dGEud3JhcFkpOwogICAgIH0KQEAgLTI2MywxMCArMzEyLDEwIEBAIENvbG9yQ29tcG9uZW50czxm
bG9hdCwgND4gRkVUdXJidWxlbmNlOjpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhCiAgICAgLy8gYngxICY9IEJNOwogICAgIC8vIGJ5MCAmPSBCTTsKICAgICAvLyBieTEg
Jj0gQk07Ci0gICAgbm9pc2VYLmluZGV4ICY9IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWC5uZXh0
SW5kZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VZLmluZGV4ICY9IHNfYmxvY2tNYXNrOwot
ICAgIG5vaXNlWS5uZXh0SW5kZXggJj0gc19ibG9ja01hc2s7CisgICAgbm9pc2VYLmluZGV4ICY9
IGJsb2NrTWFzazsKKyAgICBub2lzZVgubmV4dEluZGV4ICY9IGJsb2NrTWFzazsKKyAgICBub2lz
ZVkuaW5kZXggJj0gYmxvY2tNYXNrOworICAgIG5vaXNlWS5uZXh0SW5kZXggJj0gYmxvY2tNYXNr
OwogCiAgICAgLy8gaSA9IHVMYXR0aWNlU2VsZWN0b3JbYngwXTsKICAgICAvLyBqID0gdUxhdHRp
Y2VTZWxlY3RvcltieDFdOwpAQCAtMzIzLDcgKzM3Miw3IEBAIENvbG9yQ29tcG9uZW50czxmbG9h
dCwgND4gRkVUdXJidWxlbmNlOjpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhCiAKIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlVHVyYnVs
ZW5jZUVsZW1lbnQgZGVzY3JpYmVzIHRoaXMgY29udmVyc2lvbiB0byBjb2xvciBjb21wb25lbnRz
LgogLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBjb2xvckNvbnZlcnQ8U1JHQkE8dWludDg+PihT
UkdCQTxmbG9hdD4pIHRvIGdldCB0aGUgc2FtZSBiZWhhdmlvci4KLXN0YXRpYyBpbmxpbmUgQ29s
b3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMoY29uc3Qg
Q29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiYgZmxvYXRDb21wb25lbnRzKQorQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6dG9JbnRCYXNlZENv
bG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENvbXBv
bmVudHMpCiB7CiAgICAgcmV0dXJuIHsKICAgICAgICAgc3RkOjpjbGFtcDx1aW50OF90PihzdGF0
aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1swXSAqIDI1NSksIDAsIDI1NSksCkBAIC0zMzMs
MTMgKzM4MiwxMyBAQCBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiB0
b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQwogICAgIH07CiB9CiAKLUNvbG9y
Q29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VW
YWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRh
IHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6Y2FsY3VsYXRlVHVy
YnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0
aXRjaERhdGEgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7CiAgICAgQ29s
b3JDb21wb25lbnRzPGZsb2F0LCA0PiB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQ7CiAgICAgRmxv
YXRQb2ludCBub2lzZVZlY3Rvcihwb2ludC54KCkgKiBwYWludGluZ0RhdGEuYmFzZUZyZXF1ZW5j
eVgsIHBvaW50LnkoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJlcXVlbmN5WSk7CiAgICAgZmxvYXQg
cmF0aW8gPSAxOwotICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2ZSA8IG1fbnVtT2N0YXZl
czsgKytvY3RhdmUpIHsKLSAgICAgICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJh
Y3RhbE5vaXNlKQorICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2ZSA8IHBhaW50aW5nRGF0
YS5udW1PY3RhdmVzOyArK29jdGF2ZSkgeworICAgICAgICBpZiAocGFpbnRpbmdEYXRhLnR5cGUg
PT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKICAgICAgICAgICAgIHR1cmJ1bGVuY2VG
dW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbm9pc2VW
ZWN0b3IpIC8gcmF0aW87CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5j
dGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0
b3IpLmFicygpIC8gcmF0aW87CkBAIC0zNDgsMzIgKzM5NywzMSBAQCBDb2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2lu
dChjb25zdAogICAgICAgICBub2lzZVZlY3Rvci5zZXRZKG5vaXNlVmVjdG9yLnkoKSAqIDIpOwog
ICAgICAgICByYXRpbyAqPSAyOwogCi0gICAgICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7Ci0gICAg
ICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZhbHVlcy4gU3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lz
ZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAorICAgICAgICBpZiAocGFpbnRpbmdEYXRh
LnN0aXRjaFRpbGVzKSB7CisgICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZhbHVlcy4gU3Vi
dHJhY3RpbmcgcGVybGluTm9pc2UgYmVmb3JlIHRoZSBtdWx0aXBsaWNhdGlvbiBhbmQKICAgICAg
ICAgICAgIC8vIGFkZGluZyBpdCBhZnRlcndhcmQgc2ltcGxpZmllcyB0byBzdWJ0cmFjdGluZyBp
dCBvbmNlLgogICAgICAgICAgICAgc3RpdGNoRGF0YS53aWR0aCAqPSAyOwotICAgICAgICAgICAg
c3RpdGNoRGF0YS53cmFwWCA9IDIgKiBzdGl0Y2hEYXRhLndyYXBYIC0gc19wZXJsaW5Ob2lzZTsK
KyAgICAgICAgICAgIHN0aXRjaERhdGEud3JhcFggPSAyICogc3RpdGNoRGF0YS53cmFwWCAtIHBl
cmxpbk5vaXNlOwogICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKLSAgICAgICAg
ICAgIHN0aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9p
c2U7CisgICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBZID0gMiAqIHN0aXRjaERhdGEud3JhcFkg
LSBwZXJsaW5Ob2lzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIFRoZSB2YWx1ZSBvZiB0
dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgY29tZXMgZnJvbSAoKHR1cmJ1bGVuY2VGdW5jdGlvblJl
c3VsdCAqIDI1NSkgKyAyNTUpIC8gMiBieSBmcmFjdGFsTm9pc2UKICAgICAvLyBhbmQgKHR1cmJ1
bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSkgYnkgdHVyYnVsZW5jZS4KLSAgICBpZiAobV90eXBl
ID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCisgICAgaWYgKHBhaW50aW5nRGF0YS50
eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCiAgICAgICAgIHR1cmJ1bGVuY2VG
dW5jdGlvblJlc3VsdCA9IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDAuNWYgKyAwLjVmOwog
CiAgICAgcmV0dXJuIHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHModHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0KTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oY29uc3QgRmlsdGVy
JiBmaWx0ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQg
ZW5kWSkgY29uc3QKK3ZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRm
b3JtR2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYg
ZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBp
bnQgZW5kWSkKIHsKICAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7CiAKLSAgICBJbnRSZWN0IGZp
bHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7CiAgICAgRmxvYXRQb2ludCBwb2ludCgw
LCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZKTsKICAgICBpbnQgaW5kZXhPZlBpeGVsQ2hhbm5l
bCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAyKTsKLSAgICBGbG9hdFNpemUg
aW52ZXJzZVNjYWxlID0geyAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkud2lkdGgoKSwgMSAvIGZp
bHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH07CisgICAgRmxvYXRTaXplIGludmVyc2VTY2Fs
ZSA9IHsgMSAvIGZpbHRlclNjYWxlLndpZHRoKCksIDEgLyBmaWx0ZXJTY2FsZS5oZWlnaHQoKSB9
OwogCiAgICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7ICsreSkgewogICAgICAgICBw
b2ludC5zZXRZKHBvaW50LnkoKSArIDEpOwpAQCAtMzg4LDQ1ICs0MzYsMjIgQEAgdm9pZCBGRVR1
cmJ1bGVuY2U6OmZpbGxSZWdpb24oY29uc3QgRmlsdGVyJiBmaWx0ZXIsIFVpbnQ4Q2xhbXBlZEFy
cmF5JiBwaXhlbEFycmEKICAgICB9CiB9CiAKLXZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9u
V29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQordm9pZCBGRVR1cmJ1bGVu
Y2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKiBw
YXJhbWV0ZXJzKQogewotICAgIHBhcmFtZXRlcnMtPmVmZmVjdC0+ZmlsbFJlZ2lvbigqcGFyYW1l
dGVycy0+ZmlsdGVyLCAqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50
aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJh
bWV0ZXJzLT5lbmRZKTsKKyAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhwYXJhbWV0ZXJzLT5maWx0
ZXJSZWdpb24sIHBhcmFtZXRlcnMtPmZpbHRlclNjYWxlLCAqcGFyYW1ldGVycy0+cGl4ZWxBcnJh
eSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFy
YW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsKIH0KIAotYm9vbCBGRVR1cmJ1bGVu
Y2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3ZvaWQgRkVU
dXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IEludFJlY3QmIGZp
bHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJy
YXkmIHBpeGVsQXJyYXksIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhJiBz
dGl0Y2hEYXRhKQogewotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVV
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFy
cmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworICAgIGludCBoZWlnaHQgPSBm
aWx0ZXJSZWdpb24uaGVpZ2h0KCk7CisgICAgdW5zaWduZWQgYXJlYSA9IGZpbHRlclJlZ2lvbi5h
cmVhKCk7CiAKLSAgICBJbnRTaXplIHJlc3VsdFNpemUoYWJzb2x1dGVQYWludFJlY3QoKS5zaXpl
KCkpOworICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW1hbFJlY3REaW1lbnNpb24gPSAoMTAwICog
MTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMuCisgICAgdW5z
aWduZWQgbWF4TnVtVGhyZWFkcyA9IGZpbHRlclJlZ2lvbi5oZWlnaHQoKSAvIDg7CisgICAgdW5z
aWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPihhcmVhIC8gbWlu
aW1hbFJlY3REaW1lbnNpb24sIG1heE51bVRocmVhZHMpOwogCi0gICAgaWYgKHJlc3VsdFNpemUu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJvRmlsbCgpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBJbnRTaXplIHRpbGVTaXplID0gcm91
bmRlZEludFNpemUoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKTsKLQotICAgIGZs
b2F0IGJhc2VGcmVxdWVuY3lYID0gbV9iYXNlRnJlcXVlbmN5WDsKLSAgICBmbG9hdCBiYXNlRnJl
cXVlbmN5WSA9IG1fYmFzZUZyZXF1ZW5jeVk7Ci0gICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhID0g
Y29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZ
KTsKLQotICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEobV9zZWVkLCB0aWxlU2l6ZSwgYmFz
ZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKLSAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRh
KTsKLQotICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNpemUuYXJlYSgpOwotICAgIGlmIChhcmVhLmhh
c092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGhlaWdodCA9
IHJlc3VsdFNpemUuaGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gaGVp
Z2h0IC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5z
aWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsKICAg
ICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgUGFyYWxsZWxKb2JzPEZp
bGxSZWdpb25QYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFVHVyYnVsZW5jZTo6
ZmlsbFJlZ2lvbldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAgIFBhcmFsbGVs
Sm9iczxBcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYXBwbHlQbGF0Zm9ybVdvcmtlciwg
b3B0aW1hbFRocmVhZE51bWJlcik7CiAKICAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFy
cmF5CiAgICAgICAgIGF1dG8gbnVtSm9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsK
QEAgLTQzNywxMCArNDYyLDEwIEBAIGJvb2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgICAgICAgICB1bnNpZ25lZCBzdGFydFkg
PSAwOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtSm9iczsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgRmlsbFJlZ2lvblBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFs
bGVsSm9icy5wYXJhbWV0ZXIoaSk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9ICZm
aWx0ZXI7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmVmZmVjdCA9IHRoaXM7Ci0gICAgICAgICAg
ICAgICAgcGFyYW1zLnBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OworICAgICAg
ICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRl
cihpKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9u
OworICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJTY2FsZSA9IGZpbHRlclNjYWxlOworICAg
ICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJnBpeGVsQXJyYXk7CiAgICAgICAgICAg
ICAgICAgcGFyYW1zLnBhaW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7CiAgICAgICAgICAgICAg
ICAgcGFyYW1zLnN0aXRjaERhdGEgPSBzdGl0Y2hEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFt
cy5zdGFydFkgPSBzdGFydFk7CkBAIC00NTEsMTUgKzQ3Niw0OCBAQCBib29sIEZFVHVyYnVsZW5j
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBubyByb29t
IGZvciBhIG5ldyB0aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMgdG9vIHNtYWxsLgotICAgIGZp
bGxSZWdpb24oZmlsdGVyLCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3Rp
dGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhmaWx0ZXJSZWdp
b24sIGZpbHRlclNjYWxlLCBwaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAs
IGhlaWdodCk7Cit9CisKK2Jvb2wgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseShj
b25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJikKK3sKKyAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QuY3JlYXRlVW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Vm
ZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CisgICAgaWYgKHJlc3VsdFNpemUuYXJl
YSgpLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHJl
c3VsdFNpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJv
RmlsbCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBhdXRvIHRpbGVTaXpl
ID0gcm91bmRlZEludFNpemUobV9lZmZlY3QuZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6
ZSgpKTsKKyAgICAKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCA9IG1fZWZmZWN0LmJhc2VGcmVx
dWVuY3lYKCk7CisgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVkgPSBtX2VmZmVjdC5iYXNlRnJlcXVl
bmN5WSgpOworICAgIGF1dG8gc3RpdGNoRGF0YSA9IGNvbXB1dGVTdGl0Y2hpbmcodGlsZVNpemUs
IGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbV9lZmZlY3Quc3RpdGNoVGlsZXMoKSk7
CisKKyAgICBhdXRvIHBhaW50aW5nRGF0YSA9IGluaXRQYWludGluZ0RhdGEobV9lZmZlY3QudHlw
ZSgpLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG1fZWZmZWN0Lm51bU9jdGF2ZXMo
KSwgbV9lZmZlY3Quc2VlZCgpLCBtX2VmZmVjdC5zdGl0Y2hUaWxlcygpLCB0aWxlU2l6ZSk7CisK
KyAgICBhcHBseVBsYXRmb3JtKG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCksIGZpbHRlci5m
aWx0ZXJTY2FsZSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3RpdGNo
RGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZFVHVy
YnVsZW5jZVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMo
KSk7Cit9CisKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBU
dXJidWxlbmNlVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgK
aW5kZXggZTY5OGIzMTNmMTg4NjI1MDAzNGIwNjU5MGQxZTJiM2VkNmRjMzk4OC4uN2M0N2M3ODc0
OWI4NTZmYzlmOTFhZjg0YzYxMzRjZjQ3ZGYwNmUyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCkBAIC01OCw2
NCArNTgsMTMgQEAgcHVibGljOgogICAgIGJvb2wgc2V0U3RpdGNoVGlsZXMoYm9vbCk7CiAKIHBy
aXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrU2l6ZSA9IDI1NjsKLSAgICBzdGF0
aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9ja1NpemUgLSAxOwotCi0gICAgc3RhdGlj
IGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGly
aWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzLgotCi0gICAgc3RydWN0IFBhaW50aW5n
RGF0YSB7Ci0gICAgICAgIFBhaW50aW5nRGF0YShsb25nIHBhaW50aW5nU2VlZCwgY29uc3QgSW50
U2l6ZSYgcGFpbnRpbmdTaXplLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1
ZW5jeVkpCi0gICAgICAgICAgICA6IHNlZWQocGFpbnRpbmdTZWVkKQotICAgICAgICAgICAgLCBm
aWx0ZXJTaXplKHBhaW50aW5nU2l6ZSkKLSAgICAgICAgICAgICwgYmFzZUZyZXF1ZW5jeVgoYmFz
ZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICAsIGJhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVuY3lZ
KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBsb25nIHNlZWQ7Ci0gICAgICAgIGlu
dCBsYXR0aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tTaXplICsgMl07Ci0gICAgICAgIGZsb2F0IGdy
YWRpZW50WzRdWzIgKiBzX2Jsb2NrU2l6ZSArIDJdWzJdOwotICAgICAgICBJbnRTaXplIGZpbHRl
clNpemU7Ci0gICAgICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYOwotICAgICAgICBmbG9hdCBiYXNl
RnJlcXVlbmN5WTsKLQotICAgICAgICBpbmxpbmUgbG9uZyByYW5kb20oKTsKLSAgICB9OwotCi0g
ICAgc3RydWN0IFN0aXRjaERhdGEgewotICAgICAgICBTdGl0Y2hEYXRhKCkgPSBkZWZhdWx0Owot
Ci0gICAgICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93IG11Y2ggdG8gc3VidHJhY3QgdG8gd3Jh
cCBmb3Igc3RpdGNoaW5nLgotICAgICAgICBpbnQgd3JhcFggeyAwIH07IC8vIE1pbmltdW0gdmFs
dWUgdG8gd3JhcC4KLSAgICAgICAgaW50IGhlaWdodCB7IDAgfTsKLSAgICAgICAgaW50IHdyYXBZ
IHsgMCB9OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgRmlsbFJlZ2lvblBhcmFtZXRlcnMgewotICAg
ICAgICBjb25zdCBGaWx0ZXIqIGZpbHRlcjsKLSAgICAgICAgRkVUdXJidWxlbmNlKiBlZmZlY3Q7
Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OwotICAgICAgICBQYWludGlu
Z0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICAgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwotICAg
ICAgICBpbnQgc3RhcnRZOwotICAgICAgICBpbnQgZW5kWTsKLSAgICB9OwotCi0gICAgc3RhdGlj
IHZvaWQgZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyopOwotCiAgICAgRkVU
dXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVz
KTsKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikg
b3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVj
dFJlY3QoKSkpOyB9Ci0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
Jikgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIGluaXRQYWludChQYWludGluZ0RhdGEmKTsKLSAgICBTdGl0Y2hEYXRhIGNvbXB1
dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9h
dCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0OwotICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4g
bm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmLCBjb25zdCBTdGl0Y2hEYXRhJiwgY29uc3QgRmxv
YXRQb2ludCYpIGNvbnN0OwotICAgIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjYWxjdWxh
dGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRh
LCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBmaWxsUmVnaW9uKGNvbnN0IEZp
bHRlciYsIFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0
YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0OworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgc3RhdGljIHZvaWQgZmlsbFJl
Z2lvbldvcmtlcih2b2lkKik7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICBUdXJidWxlbmNlVHlwZSBtX3R5cGU7CiAgICAgZmxvYXQgbV9iYXNlRnJlcXVl
bmN5WDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IGMwNzUyNjMxNGY3ZTc3ODEyNWUwMDU3YmIwM2IxMWNm
OWQwMTdiNWIuLjBmNGIzYWMyNjExM2E3ZDNiNmI3Njk4YWUyM2ZlN2ZiYWI3MTIxZjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuaApAQCAtNDksMTEgKzQ5LDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyUmVz
dWx0KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIAorICAg
IEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIEltYWdlQnVmZmVy
KiBpbWFnZUJ1ZmZlclJlc3VsdCgpOworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4m
IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiB1bm11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYsIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7Ci0gICAgUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmLCBzdGQ6Om9w
dGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwogICAgIHZvaWQg
Y29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNv
bnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6
Om51bGxvcHQpOworCisgICAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIGNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJl
bXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlv
bkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKICAgICB2b2lkIGNvcHlQcmVtdWx0aXBsaWVk
UmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYsIHN0
ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7CisKICAg
ICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJuIG1faW5wdXRFZmZl
Y3RzOyB9CiAgICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCkgY29uc3Q7CiAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdCB7IHJldHVybiBtX2lucHV0
RWZmZWN0cy5zaXplKCk7IH0KQEAgLTEyOSwyMSArMTM1LDkgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4sIGNvbnN0
IGludCkgeyBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShtX29wZXJhdGluZ0NvbG9yU3Bh
Y2UpOyB9CiAgICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYpOwogICAgIAotICAgIHN0YXRpYyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6
ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQotICAgIHsKLSAgICAgICAgVmVj
dG9yPGZsb2F0PiBub3JtYWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG5vcm1h
bGl6ZWRWYWx1ZXNbaV0gPSBub3JtYWxpemVkRmxvYXQodmFsdWVzW2ldKTsKLSAgICAgICAgcmV0
dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Ci0gICAgfQotCiBwcm90ZWN0ZWQ6CiAgICAgRmlsdGVyRWZm
ZWN0KFR5cGUpOwogICAgIAotICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3Vs
dCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOwotICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLQogICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0
ZXIgd2lsbCBvbmx5IG9wZXJhdGUgY29ycmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRo
CiAgICAgLy8gYWxwaGEgaW4gWzAsMjU1XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAs
IGFscGhhXS4KICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNWYWxpZFByZU11bHRpcGxpZWRQaXhl
bHMoKSB7IHJldHVybiB0cnVlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdEFwcGxpZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBwbGllci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQ3ZTE0MjUxYzU2MmU5NjdmZmI5YWI3MWVjM2FmYTcwZGNiOWMyYjEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdEFwcGxpZXIuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEZpbHRlckVmZmVjdEFwcGxpZXIgeworcHVibGljOgorICAgIEZpbHRlckVmZmVj
dEFwcGxpZXIoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0QXBwbGllcigp
ID0gZGVmYXVsdDsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwg
Y29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dHMpID0gMDsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEZpbHRlckVmZmVjdFR5cGU+CitjbGFzcyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxp
ZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0QXBwbGllciB7CitwdWJsaWM6CisgICAgRmlsdGVyRWZm
ZWN0Q29uY3JldGVBcHBsaWVyKEZpbHRlckVmZmVjdFR5cGUmIGVmZmVjdCkKKyAgICAgICAgOiBt
X2VmZmVjdChlZmZlY3QpCisgICAgeworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBGaWx0
ZXJFZmZlY3RUeXBlJiBtX2VmZmVjdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRT
b3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRT
b3VyY2UuaAppbmRleCA5NGQxOTUwMTM5ZDZkMjQzYTg2NjFlNWVhNTVkMjM1YTczODlmNWQ1Li44
ZGI4ZTU2NTk3YmFiZWM4Njg2MTY4M2ZmOGUwNTgyODhjNzEyNmY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCkBA
IC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBMaWdodFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZTsgfQogICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgdm9p
ZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3Qm
LCBQYWludGluZ0RhdGEmKSBjb25zdCA9IDA7CiAgICAgLy8geiBpcyBhIGZsb2F0IG51bWJlciwg
c2luY2UgaXQgaXMgdGhlIGFscGhhIHZhbHVlIHNjYWxlZCBieSBhIHVzZXIKICAgICAvLyBzcGVj
aWZpZWQgInN1cmZhY2VTY2FsZSIgY29uc3RhbnQsIHdoaWNoIHR5cGUgaXMgPG51bWJlcj4gaW4g
dGhlIFNWRyBzdGFuZGFyZC4KICAgICAvLyB4IGFuZCB5IGFyZSBpbiB0aGUgY29vcmRpbmF0ZXMg
b2YgdGhlIEZpbHRlckVmZmVjdCdzIGJ1ZmZlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCmlu
ZGV4IDFhYjVlMTllMTFhNGYzNmVhMmE0MjZhNzUwMzg3OTEyOGY1NGI0NGIuLmMyZDg3NDkzYjI4
ZGUzODYxM2UzZTIwMjg0ZmZlMmZmNDI1ZmVlMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNw
cApAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgUG9pbnRM
aWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVm
ZmVjdCwgUGFpbnRpbmdEYXRhJikKK3ZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5n
RGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJikgY29u
c3QKIHsKICAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRlckVmZmVjdC5tYXBQb2ludEZy
b21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkpKTsKICAgICAvLyBU
byBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBvc2l0aW9uIGlu
IHRoZSB4IGRpcmVjdGlvbiBieSB6LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaAppbmRleCA2N2EzYTBi
ZDM5YThhOWNjMTk1NDM0OTg1OTZkNzExNWY0YmI5NWE1Li40MmMzZGM2MTc4ODUyMmVjNzg3Y2Fl
ZTJhYzM0YThlMzJmOWRiZDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaApAQCAtMzksNyArMzks
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRZKGZsb2F0KSBvdmVycmlkZTsKICAgICBib29sIHNl
dFooZmxvYXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZp
bHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5pdFBhaW50
aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBjb25zdCBvdmVycmlk
ZTsKICAgICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29u
c3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKIAog
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKQEAgLTUyLDcgKzUyLDcgQEAgcHJpdmF0ZToKICAgICB9CiAK
ICAgICBGbG9hdFBvaW50M0QgbV91c2VyU3BhY2VQb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50M0Qg
bV9idWZmZXJQb3NpdGlvbjsKKyAgICBtdXRhYmxlIEZsb2F0UG9pbnQzRCBtX2J1ZmZlclBvc2l0
aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAppbmRleCBj
ZmI1NzQ0YTdkYTY2ODY3OWExYmQ4NTE4YWU1YjJkZjNkODJjYTNlLi5kNGI0YjEwNTA2ZjEzMmQ2
ZWVkNjg5OTAxMTk5ZDMzZjc5ODNiYjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAtMjIsNiArMjIs
NyBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC00NSwxNyArNDYsMjcgQEAgdm9p
ZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBm
aWx0ZXIpCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoaW5wdXRFZmZlY3QoMCktPmFic29sdXRl
UGFpbnRSZWN0KCkpOwogfQogCi1ib29sIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJikKKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBTb3VyY2VBbHBoYVNv
ZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNz
IFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRl
QXBwbGllcjxTb3VyY2VBbHBoYT4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25j
cmV0ZUFwcGxpZXI8U291cmNlQWxwaGE+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFz
ZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVj
dG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworfTsKKworYm9vbCBTb3VyY2VBbHBoYVNvZnR3
YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9y
JiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBtX2Vm
ZmVjdC5jcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIg
PSBpbnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXIgPSBpbnB1dEVmZmVjdHNbMF0tPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRSZWN0
IGltYWdlUmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKKyAg
ICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgbV9lZmZlY3QuYWJzb2x1dGVQYWlu
dFJlY3QoKS5zaXplKCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJl
c3VsdEltYWdlLT5jb250ZXh0KCk7CiAKICAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KGltYWdl
UmVjdCwgQ29sb3I6OmJsYWNrKTsKQEAgLTY0LDYgKzc1LDExIEBAIGJvb2wgU291cmNlQWxwaGE6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAgIHJldHVybiB0cnVlOwog
fQogCitib29sIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
JiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyKCp0aGlz
KS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogVGV4dFN0cmVhbSYgU291cmNl
QWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltTb3VyY2VBbHBoYV1cbiI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUdyYXBoaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VHcmFwaGljLmNwcAppbmRleCBmYTIxMGM3MjA3NDFlNDM1Mjc2ZWQ1ZWYyMTFkNzcy
NjM3Yzk3NzZjLi4wMjk2N2YyODI5NDM0ZTk5NTU5NjdjOWJjZDA5ODEwZmNhMDNkOTg5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdy
YXBoaWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJTb3VyY2VHcmFw
aGljLmgiCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBs
aWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCkBAIC00Myw5ICs0NCwxOSBAQCB2b2lkIFNvdXJjZUdyYXBoaWM6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFi
c29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CiB9CiAKLWJvb2wg
U291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIg
dG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBTb3VyY2VHcmFwaGlj
U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxTb3Vy
Y2VHcmFwaGljPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGll
cjxTb3VyY2VHcmFwaGljPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAg
ICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5w
dXRFZmZlY3RzKSBvdmVycmlkZTsKK307CisKK2Jvb2wgU291cmNlR3JhcGhpY1NvZnR3YXJlQXBw
bGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3Rv
ciYpCiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5jcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZpbHRl
ci5zb3VyY2VJbWFnZSgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIXNvdXJjZUltYWdlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NCw2ICs2NSwxMSBAQCBib29sIFNvdXJjZUdyYXBo
aWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorYm9vbCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIFNvdXJjZUdyYXBoaWNTb2Z0d2Fy
ZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBUZXh0
U3RyZWFtJiBTb3VyY2VHcmFwaGljOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJb
U291cmNlR3JhcGhpY11cbiI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKaW5kZXggNzE2MDdhYjAw
ZmY5ZDZhNmQwMTY5MWQ5YmJiODU1M2QxZjM0OGQwMC4uZTdjN2MwNGVkZWVkODcyZTc5YTIyM2Jk
YWQ4NmE5MWVkMzNmMDIyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcApAQCAtNDEsNyArNDEs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBhY2NvcmRpbmcgdG8gdGhlIFNWRyAxLjEgU0Ug
bGlnaHQgcmVncmVzc2lvbiB0ZXN0cwogc3RhdGljIGNvbnN0IGZsb2F0IGFudGlBbGlhc1RyZXNo
b2xkID0gMC4wMTZmOwogCi12b2lkIFNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShj
b25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEpCit2b2lkIFNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJF
ZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpIGNvbnN0CiB7
CiAgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNl
clNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CiAgICAgLy8gVG8gc2Nh
bGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUg
eCBkaXJlY3Rpb24gYnkgei4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCmluZGV4IDM1MTUxNjM1MDc3ZWVm
MGU3M2MyNmFlNDQyYTVlYTUzNGZkMWYzYmYuLjJlZGQ5MzA5OWQ5NzI4MmIwNmQ3YzE5ZTc3Mjdk
NzVkNjQyZTljNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBzZXRTcGVjdWxhckV4cG9uZW50KGZsb2F0KSBvdmVycmlkZTsKICAgICBi
b29sIHNldExpbWl0aW5nQ29uZUFuZ2xlKGZsb2F0KSBvdmVycmlkZTsKIAotICAgIHZvaWQgaW5p
dFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRp
bmdEYXRhJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgQ29tcHV0ZWRMaWdodGluZ0RhdGEgY29tcHV0
ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxv
YXQgeikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkBAIC02OCw3ICs2OCw3
IEBAIHByaXZhdGU6CiAgICAgRmxvYXRQb2ludDNEIG1fdXNlclNwYWNlUG9zaXRpb247CiAgICAg
RmxvYXRQb2ludDNEIG1fdXNlclNwYWNlUG9pbnRzQXQ7CiAKLSAgICBGbG9hdFBvaW50M0QgbV9i
dWZmZXJQb3NpdGlvbjsKKyAgICBtdXRhYmxlIEZsb2F0UG9pbnQzRCBtX2J1ZmZlclBvc2l0aW9u
OwogCiAgICAgZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50OwogICAgIGZsb2F0IG1fbGltaXRpbmdD
b25lQW5nbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuY3BwCmluZGV4IDU1NDAwYjdlYmEzZTRmNmMyYmVkOTg0YmNjYjUxZDIzN2UzNDQ0
N2EuLmM4MDFiNThkZGNkNjAwYzg5OTQwNTFjMDI0NmQ1MDllNDc2NzRkZTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCkBAIC0y
NSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiU1ZHRkVJbWFnZS5oIgogCiAjaW5jbHVkZSAiRmlsdGVy
LmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtNzQsMzgg
Kzc1LDUzIEBAIHZvaWQgRkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVj
dChpbWFnZVJlY3QpKTsKIH0KIAotYm9vbCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIpCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVJbWFnZVNv
ZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNz
IEZFSW1hZ2VTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBs
aWVyPEZFSW1hZ2U+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBs
aWVyPEZFSW1hZ2U+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJv
b2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVm
ZmVjdHMpIG92ZXJyaWRlOworfTsKKworYm9vbCBGRUltYWdlU29mdHdhcmVBcHBsaWVyOjphcHBs
eShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJikKIHsKICAg
ICAvLyBGRUltYWdlIHJlc3VsdHMgYXJlIGFsd2F5cyBpbiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKQotICAgIHNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkpOworICAgIG1fZWZmZWN0LnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOwogCi0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBtX2Vm
ZmVjdC5jcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gcHJpbWl0aXZlU3VicmVnaW9uID0gZmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CisgICAgYXV0byBwcmltaXRpdmVTdWJyZWdpb24gPSBt
X2VmZmVjdC5maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKICAgICBhdXRvJiBjb250ZXh0ID0g
cmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKIAotICAgIFdURjo6c3dpdGNoT24obV9zb3VyY2VJbWFn
ZSwKKyAgICBXVEY6OnN3aXRjaE9uKG1fZWZmZWN0LnNvdXJjZUltYWdlKCksCiAgICAgICAgIFsm
XSAoY29uc3QgUmVmPEltYWdlPiYgaW1hZ2UpIHsKICAgICAgICAgICAgIGF1dG8gaW1hZ2VSZWN0
ID0gcHJpbWl0aXZlU3VicmVnaW9uOwotICAgICAgICAgICAgYXV0byBzcmNSZWN0ID0gbV9zb3Vy
Y2VJbWFnZVJlY3Q7Ci0gICAgICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3Jt
UmVjdChpbWFnZVJlY3QsIHNyY1JlY3QpOworICAgICAgICAgICAgYXV0byBzcmNSZWN0ID0gbV9l
ZmZlY3Quc291cmNlSW1hZ2VSZWN0KCk7CisgICAgICAgICAgICBtX2VmZmVjdC5wcmVzZXJ2ZUFz
cGVjdFJhdGlvKCkudHJhbnNmb3JtUmVjdChpbWFnZVJlY3QsIHNyY1JlY3QpOwogICAgICAgICAg
ICAgaW1hZ2VSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIGlt
YWdlUmVjdCA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoSW50UmVjdChpbWFnZVJlY3QpKTsK
KyAgICAgICAgICAgIGltYWdlUmVjdCA9IG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoSW50UmVjdChpbWFnZVJlY3QpKTsKICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGlt
YWdlLCBpbWFnZVJlY3QsIHNyY1JlY3QpOwogICAgICAgICB9LAogICAgICAgICBbJl0gKGNvbnN0
IFJlZjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKSB7CiAgICAgICAgICAgICBhdXRvIGltYWdl
UmVjdCA9IHByaW1pdGl2ZVN1YnJlZ2lvbjsKLSAgICAgICAgICAgIGltYWdlUmVjdC5tb3ZlQnko
bV9zb3VyY2VJbWFnZVJlY3QubG9jYXRpb24oKSk7CisgICAgICAgICAgICBpbWFnZVJlY3QubW92
ZUJ5KG1fZWZmZWN0LnNvdXJjZUltYWdlUmVjdCgpLmxvY2F0aW9uKCkpOwogICAgICAgICAgICAg
aW1hZ2VSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIGltYWdl
UmVjdCA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoSW50UmVjdChpbWFnZVJlY3QpKTsKKyAg
ICAgICAgICAgIGltYWdlUmVjdCA9IG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
SW50UmVjdChpbWFnZVJlY3QpKTsKICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KGltYWdlQnVmZmVyLCBpbWFnZVJlY3QubG9jYXRpb24oKSk7CiAgICAgICAgIH0KICAgICApOwog
CiAgICAgcmV0dXJuIHRydWU7CiB9CisgICAgCitib29sIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVJbWFnZVNvZnR3
YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CiAKIFRl
eHRTdHJlYW0mIEZFSW1hZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMs
IFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAppbmRleCAzNGY3MWJh
ODQ2ZWMwZmYyZGQ2ODI3MDE2ZDlhMDU4OTRjYjRlOGQ5Li4yODA5M2FhMWU0NTE0NGNiMmY3NzYw
N2ZhMTZkY2NiMTdjOWZlN2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCkBAIC00MSw2ICs0MSw5IEBAIHB1YmxpYzoKICAgICBTb3Vy
Y2VJbWFnZSYgc291cmNlSW1hZ2UoKSB7IHJldHVybiBtX3NvdXJjZUltYWdlOyB9CiAgICAgdm9p
ZCBzZXRJbWFnZVNvdXJjZShTb3VyY2VJbWFnZSYmIHNvdXJjZUltYWdlKSB7IG1fc291cmNlSW1h
Z2UgPSBXVEZNb3ZlKHNvdXJjZUltYWdlKTsgfQogCisgICAgRmxvYXRSZWN0IHNvdXJjZUltYWdl
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSW1hZ2VSZWN0OyB9CisgICAgY29uc3QgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29uc3QgeyBy
ZXR1cm4gbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvOyB9CisKIHByaXZhdGU6CiAgICAgRkVJbWFnZShT
b3VyY2VJbWFnZSYmLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CiAK
</data>
<flag name="commit-queue"
          id="470136"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445004</attachid>
            <date>2021-11-22 22:58:16 -0800</date>
            <delta_ts>2021-11-23 13:08:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232832-20211122225815.patch</filename>
            <type>text/plain</type>
            <size>220477</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJmNzQ3MzJlNDRlYjJk
OWE3NmI4ZTMwZmVlYzc2ODM4NTgyM2E5My4uNDVlNThjOWRiMjQ3YTMzYzU1YzU0YjQ1ZTkzNzNl
N2E5OGNjMDM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0NyBAQAorMjAyMS0xMS0yMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1vdmUgdGhlIHNvZnR3YXJlIEZpbHRlckVmZmVjdCBmdW5jdGlvbnMgdG8gc2VwYXJhdGUgYXBw
bGllciBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzI4MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHN0ZXAgaXMgcmVxdWlyZWQgdG8gbW92ZSB0aGUgRmlsdGVyRWZmZWN0IHNvZnR3
YXJlIGNvZGUgdG8gc2VwYXJhdGUKKyAgICAgICAgZmlsZXMuIFNpbmNlIHRoZSBGaWx0ZXJFZmZl
Y3QgY2FuIGJlIGFwcGxpZWQgd2l0aCB0aGUgYWNjZWxlcmF0ZWQgQ29yZUltYWdlCisgICAgICAg
IG9yIHRoZSB1bmFjY2VsZXJhdGVkIHNvZnR3YXJlIG1ldGhvZHMsIGl0IG1ha2Ugc2Vuc2UgdG8g
cmVtb3ZlIHRoZSBzb2Z0d2FyZQorICAgICAgICBjb2RlIGZyb20gdGhlIEZpbHRlckVmZmVjdCBj
bGFzc2VzLgorCisgICAgICAgIFRoZSBwbGFuIGlzIHRvIGhhdmUgdGhlIHNvZnR3YXJlIGNvZGUg
aW4gc2VwYXJhdGUgZmlsZXMuIEVhY2ggRmlsdGVyRWZmZWN0CisgICAgICAgIHdpbGwgYmUgYXNr
ZWQgdG8gY3JlYXRlIGFuIGFwcGxpZXIgd2hpY2ggY2FuIGJlIFNvZnR3YXJlQXBwbGllciBvcgor
ICAgICAgICBDb3JlSW1hZ2VBcHBsaWVyLiBUaGlzIGFwcGxpZXIgd2lsbCBiZSBnaXZlbiB0byBG
aWx0ZXJFZmZlY3Q6OmFwcGx5KCkKKyAgICAgICAgd2hpY2ggd2lsbCBwYXNzIHRoZSBpbnB1dCBp
bWFnZXMgdG8gdGhlIGFwcGx5KCkgbWV0aG9kIG9mIHRoZSBhcHBsaWVyIHRvCisgICAgICAgIGdl
dCB0aGUgcmVzdWx0IGltYWdlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExp
Z2h0U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3RhbnRMaWdodFNvdXJjZTo6aW5p
dFBhaW50aW5nRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXN0YW50TGlnaHRTb3Vy
Y2U6OmluaXRQYWludGluZ0RhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmRTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlU2F0dXJhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6
OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6Om1hdHJpeCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0
ZUFuZEh1ZVJvdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyOjpsdW1pbmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxh
dGZvcm1VbmFjY2VsZXJhdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNv
cmU6Om1hdHJpeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1ZVJv
dGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsdW1pbmFuY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVyYXRlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjplZmZlY3RUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKTog
RGVsZXRlZC4KKyAgICAgICAgTW92ZSBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoKSBhbmQg
Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cygpIGZyb20KKyAgICAgICAgdGhlIGhlYWRlciBm
aWxlIHRvIHRoZSBzb3VyY2UgZmlsZS4gTW92ZSBjaG9vc2luZyB0aGUgY2FsY3VsYXRpb24gbW9k
ZSBmb3IKKyAgICAgICAgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCBmcm9tIGVmZmVjdEFwcGx5
QWNjZWxlcmF0ZWQoKSB0byBhcHBseVBsYXRmb3JtKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUlkZW50aXR5VGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGll
cjo6Y29tcHV0ZVRhYnVsYXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlRGlzY3JldGVUYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlTGluZWFy
VGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6Y29tcHV0ZUdhbW1hVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUxvb2t1cFRhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxp
bmVhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVHYW1tYVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAg
ICBJbnN0ZWFkIG9mIGNhbGxpbmcgY29tcHV0ZUxvb2t1cFRhYmxlcygpIHRvIGluaXRpYWxpemUg
dGhlIGZvdXIgbG9va3VwCisgICAgICAgIHRhYmxlcywgY2FsbCBjb21wdXRlTG9va3VwVGFibGUo
KSBmb3VyIHRpbWVzOiBvbmUgZm9yIGVhY2ggY29sb3IgY2hhbm5lbC4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjbGFtcEJ5dGUpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVBcml0aG1ldGljUGl4
ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21w
dXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBv
c2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFyaXRobWV0aWMpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5QXJpdGhtZXRpYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlOb25Bcml0
aG1ldGljKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjph
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wQnl0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKTogRGVsZXRlZC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpjbGFt
cFJHQkFWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVB
cHBsaWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpnZXRQaXhlbFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldEludGVyaW9yUGl4ZWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldE91
dGVyUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2
ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNs
YW1wUkdCQVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNldERlc3RpbmF0aW9u
UGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmZh
c3RTZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpnZXRQaXhlbFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
Lmg6CisgICAgICAgIEFkZCB0aGUgbWVtYmVycyBvZiBGRUNvbnZvbHZlTWF0cml4IHRvIFBhaW50
aW5nRGF0YS4gUmVtb3ZlIHRoZSB0ZW1wbGF0ZQorICAgICAgICBmdW5jdGlvbnMgYW5kIHRoZSBN
U1ZDIHdhcm5pbmcuIEp1c3QgaWdub3JlIHRoZSBhbHBoYSBjaGFubmVsIGlmIAorICAgICAgICBw
cmVzZXJ2ZUFscGhhVmFsdWVzIGlzIHRydWUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlm
ZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6CisgICAgICAgIE5vIG5lZWQgdG8gcGFz
cyBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcgd2hlbiBjcmVhdGluZyBGRURpZmZ1c2VMaWdo
dGluZy4KKyAgICAgICAgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZyBpcyBh
bHJlYWR5IHBhc3NlZCB0byBGRUxpZ2h0aW5nLiAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OmJ5dGVPZmZzZXRPZlBpeGVsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjp4Q2hhbm5lbElu
ZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVB
cHBsaWVyOjp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxh
Y2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGll
cik6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6
YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpieXRlT2Zmc2V0T2ZQaXhlbCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5oOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsSW5kZXgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnlD
aGFubmVsSW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRv
d1NvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kU29mdHdhcmVBcHBs
aWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2xh
bXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2Fs
Y3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdh
dXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6a2VybmVsUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBbHBoYU9ubHkpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXIp
OgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJs
dXJBY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJHZW5lcmljKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyV29ya2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKGdhdXNzaWFuS2VybmVsRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Omtlcm5lbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJv
eEJsdXJBbHBoYU9ubHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpzdGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5C
bHVyLmg6CisgICAgICAgIEFkZCB0aGUgdHdvIG1lbWJlcnMgJ2lzQWxwaGFJbWFnZScgYW5kICdl
ZGdlTW9kZScgdG8gQXBwbHlQYXJhbWV0ZXJzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6QWxwaGFXaW5kb3c6OnRvcExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmJvdHRvbUxl
ZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6
QWxwaGFXaW5kb3c6OnRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6Y2VudGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93Ojpib3R0b20gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5k
b3c6OnNldFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdT
b2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNldFRvcFJpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93
OjpzZXRSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNoaWZ0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzaGlmdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6
OnRvcExlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3
YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSaWdo
dE5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBs
aWVyOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5v
cm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5v
cm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9y
bWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6
OnNldFBpeGVsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6c2V0UGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
R2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRv
cExlZnROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6Omxl
ZnRDb2x1bW5Ob3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFs
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5n
RGF0YTo6Ym90dG9tTGVmdE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJp
Z2h0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldFBpeGVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldFBp
eGVsSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxh
dGZvcm1BcHBseUdlbmVyaWNQYWludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpsaWdodGluZ0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnNwZWN1bGFyRXhwb25lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcExlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OnRvcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBo
YVdpbmRvdzo6Y2VudGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmc6OkFscGhhV2luZG93Ojpib3R0b20gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRv
cFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2lu
ZG93OjpzZXRSaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpB
bHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNoaWZ0Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzaGlmdCk6IERlbGV0ZWQuCisgICAgICAg
IE1vdmUgZmlsaW5nIHRoZSBzdHJ1Y3R1cmUgTGlnaHRpbmdEYXRhIGZyb20gRkVMaWdodGluZzo6
ZHJhd0xpZ2h0aW5nKCkKKyAgICAgICAgdG8gRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBw
bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6cGl4ZWxBcnJheUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWFrZVBpeGVsVmFs
dWVGcm9tQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllcjo6bWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWluT3JNYXgpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpjb2x1bW5FeHRyZW11
bSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Omtlcm5l
bEV4dHJlbXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
cjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5
U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtl
Q29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbHVtbkV4
dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omtlcm5lbEV4dHJlbXVtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVy
aWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxh
dGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oOgorICAgICAgICBSZW1vdmUgdGhlIHRlbXBsYXRl
IGZ1bmN0aW9ucyBhbmQganVzdCB0aGUgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBhcyBhbgorICAg
ICAgICBhcmd1bWVudCB0byB0aGVzZSBmdW5jdGlvbnMuICBSZXBsYWNlIHBsYXRmb3JtQXBwbHlE
ZWdlbmVyYXRlKCkgd2l0aCBhCisgICAgICAgIGNhbGwgdG8gaXNEZWdlbmVyYXRlKCkgYW5kIG1v
dmUgdGhlIGNhbGwgdG8gY29weVByZW11bHRpcGxpZWRSZXN1bHQoKSB0byAKKyAgICAgICAgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0U29mdHdhcmVBcHBs
aWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxh
ckxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVT
cGVjdWxhckxpZ2h0aW5nKToKKyAgICAgICAgTm8gbmVlZCB0byBwYXNzIEZFTGlnaHRpbmc6OlNw
ZWN1bGFyTGlnaHRpbmcgd2hlbiBjcmVhdGluZyBGRURpZmZ1c2VMaWdodGluZy4KKyAgICAgICAg
RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcgaXMgYWxyZWFkeSBwYXNzZWQg
dG8gRkVMaWdodGluZy4gCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6UGFpbnRpbmdEYXRh
OjpyYW5kb20pOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
OjpzbW9vdGhDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFw
cGxpZXI6OmxpbmVhckludGVycG9sYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxl
bmNlU29mdHdhcmVBcHBsaWVyOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZVN0aXRjaGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6Om5vaXNlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjp0b0ludEJhc2VkQ29sb3JD
b21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGll
cjo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1X
b3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0Rh
dGE6OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVy
YnVsZW5jZTo6ZmlsbFJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgTW92ZSB0aGUgdGhyZWFkaW5nIGNvZGUgZnJvbSBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSB0
byBhIG5ldyBmdW5jdGlvbgorICAgICAgICBjYWxsZWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBs
aWVyOjphcHBseVBsYXRmb3JtKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpub3Jt
YWxpemVkRmxvYXRzKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSBub3JtYWxpemVkRmxvYXRzKCkg
ZnJvbSBGaWx0ZXJFZmZlY3QgdG8gRkVDb2xvck1hdHJpeC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBwbGllci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjo6RmlsdGVyRWZmZWN0Q29uY3Jl
dGVBcHBsaWVyKToKKyAgICAgICAgSW50cm9kdWNlIHRoaXMgY2xhc3Mgd2hpY2ggd2lsbCBiZSB0
aGUgYmFzZSBjbGFzcyBvZiBhbGwgdGhlIHNvZnR3YXJlIGFuZAorICAgICAgICB0aGUgQ29yZUlt
YWdlIEZpbHRlckVmZmVjdCBhcHBsaWVycy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvTGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9pbnRMaWdodFNv
dXJjZTo6aW5pdFBhaW50aW5nRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQb2ludExp
Z2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaDoKKyAgICAgICAgTWFrZSBpbml0
UGFpbnRpbmdEYXRhKCkgYmUgYSBjb25zdGFudCBmdW5jdGlvbi4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaDoKKyAgICAgICAg
TWFrZSBpbml0UGFpbnRpbmdEYXRhKCkgYmUgYSBjb25zdGFudCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVJbWFnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVJ
bWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmg6CisKIDIwMjEtMTEtMjEgIEFsYW4gQnVqdGFzICA8emFsYW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10gQ2FjaGUgbWVhc3VyZWQgd2lkdGggZXZlbiBp
ZiBjYW5Vc2VTaW1wbGlmaWVkVGV4dE1lYXN1cmluZyBpcyBmYWxzZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDg3NTU3NDQwODg0
Njk0ZjdlN2UzMTMyNDA3YzNmYzkzOGRkZmRlYWMuLjdiMDYwZjIxN2RlNzQxNzBlZTE5NmVkZmRm
ZjBjMGJhYTg4NWQ0ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTEwODkzLDYgKzEwODkzLDcgQEAKIAkJNzI5OUJDNjQyM0Q2
ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOUQwNTJF
MjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQTEzQTlGMjc0QzVDQzcwMEUyQTg4RSAvKiBGaWx0ZXJFZmZlY3RBcHBs
aWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdEFwcGxpZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVy
QmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1
ZmZlckJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNTIz
RTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTkzNyw2ICsyNTkzOCw3IEBACiAJ
CQkJODQ1RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5oICovLAogCQkJCTA4QzkyNTE3
MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuY3BwICovLAogCQkJCTA4QzkyNTE4MEZD
QzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCAqLywKKwkJCQk3MkExM0E5RjI3NEM1Q0M3
MDBFMkE4OEUgLyogRmlsdGVyRWZmZWN0QXBwbGllci5oICovLAogCQkJCTJDODU2NTM4MjRDMTBC
MEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8sCiAJCQkJMkM4NTY1MzMy
NEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCiAJCQkJNzIxNEI5
QjcyNzQ0NThGQTAwM0JFNkRGIC8qIEZpbHRlckVmZmVjdFZlY3Rvci5oICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRT
b3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0
YW50TGlnaHRTb3VyY2UuY3BwCmluZGV4IGU1ZmIxZmY2NjVkM2ViMDdmNDhlZTFkMDJiYmZmY2M2
YjA0NDFmODkuLjg5NDdhOTg2MGU0NmIxMWM1OGUyNzc1MzYyNTZmZGI5ZDUxZDE1NDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExp
Z2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShj
b25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgRGlz
dGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKSBjb25zdAogewogICAgIGZsb2F0IGF6aW11dGggPSBk
ZWcycmFkKG1fYXppbXV0aCk7CiAgICAgZmxvYXQgZWxldmF0aW9uID0gZGVnMnJhZChtX2VsZXZh
dGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAppbmRleCBjMWUzMGVkZTc1OTgzNzI4YTYz
MmJjY2ZmYjA5OTczYTNhNGU3MmZkLi4zMDE5MmIwZWYwY2QxYmY0MDNkNDIzMzhjZTQwODc3MThk
NzUxNzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVi
bGljOgogICAgIGJvb2wgc2V0QXppbXV0aChmbG9hdCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRF
bGV2YXRpb24oZmxvYXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNv
bnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5p
dFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBjb25zdCBv
dmVycmlkZTsKICAgICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0Rh
dGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5h
bDsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCmluZGV4IDFhMTM3NTg4MWUyYTI5NjQw
ODAwY2YyM2ZjZTBhZGIwMjE3MTgwMDYuLjkyYjc5ZjNjMDVlMDQzOGE5MWFjMjQ2YzNjNDEwYWFm
MTViOTU3MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtMjYsMTAgKzI2LDEwIEBACiAjaW5jbHVkZSAiRkVCbGVu
ZC5oIgogCiAjaW5jbHVkZSAiRkVCbGVuZE5FT04uaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RB
cHBsaWVyLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUzLDI4ICs1Myw0MyBAQCBib29sIEZFQmxlbmQ6
OnNldEJsZW5kTW9kZShCbGVuZE1vZGUgbW9kZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorLy8g
RklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUg
c291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUJsZW5kU29mdHdhcmVBcHBsaWVyIDog
cHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUJsZW5kPiB7CisgICAgdXNpbmcg
QmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUJsZW5kPjsKKworcHVibGljOgor
ICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNv
bnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKK307CisKICNp
ZiAhSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotYm9vbCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK2Jvb2wgRkVCbGVuZFNvZnR3YXJlQXBwbGllcjo6YXBw
bHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMp
CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVm
ZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0c1swXS5nZXQoKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0c1sx
XS5nZXQoKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0
SW1hZ2UtPmNvbnRleHQoKTsKIAogICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGluLT5p
bWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcjIgPSBpbjIt
PmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZm
ZXIyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOwotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCB7IENvbXBvc2l0ZU9w
ZXJhdG9yOjpTb3VyY2VPdmVyLCBtX21vZGUgfSk7CisgICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0
ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNh
bFNpemUoKSB9LCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBtX2VmZmVjdC5ibGVu
ZE1vZGUoKSB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KICNlbmRpZgogCitib29sIEZFQmxlbmQ6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1
cm4gRkVCbGVuZFNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVj
dHMoKSk7Cit9CisKIFRleHRTdHJlYW0mIEZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QK
IHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUJsZW5kIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmlu
ZGV4IDY3OWU3OGRhZWE4NzNmNWQzM2ExYWZmODcxNTI1YmZjZjg3NzEwZmIuLjA2YjUxOGRhZjZj
ZTU5YjdkMDllNmMwMDdhMDMxZmM2ODZmNTQ0ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAt
MjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29sb3JNYXRy
aXguaCIKIAorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVs
QnVmZmVyLmgiCkBAIC02MywzMiArNjQsMTAzIEBAIGJvb2wgRkVDb2xvck1hdHJpeDo6c2V0VmFs
dWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4gJnZhbHVlcykKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
aW5saW5lIHZvaWQgbWF0cml4KGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUs
IGZsb2F0JiBhbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQordm9pZCBGRUNvbG9y
TWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZs
b2F0IHZhbHVlKQoreworICAgIGNvbXBvbmVudHNbMF0gPSAoMC4yMTMgKyAwLjc4NyAqIHZhbHVl
KTsKKyAgICBjb21wb25lbnRzWzFdID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29t
cG9uZW50c1syXSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbM10g
PSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzRdID0gKDAuNzE1ICsg
MC4yODUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s1XSA9ICgwLjA3MiAtIDAuMDcyICogdmFs
dWUpOworICAgIGNvbXBvbmVudHNbNl0gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKKyAgICBj
b21wb25lbnRzWzddID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s4
XSA9ICgwLjA3MiArIDAuOTI4ICogdmFsdWUpOworfQorCit2b2lkIEZFQ29sb3JNYXRyaXg6OmNh
bGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVl
KQoreworICAgIGZsb2F0IGNvc0h1ZSA9IGNvcyh2YWx1ZSAqIHBpRmxvYXQgLyAxODApOworICAg
IGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1ZSAqIHBpRmxvYXQgLyAxODApOworICAgIGNvbXBvbmVu
dHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0gc2luSHVlICogMC4yMTM7CisgICAgY29t
cG9uZW50c1sxXSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgLSBzaW5IdWUgKiAwLjcxNTsKKyAg
ICBjb21wb25lbnRzWzJdID0gMC4wNzIgLSBjb3NIdWUgKiAwLjA3MiArIHNpbkh1ZSAqIDAuOTI4
OworICAgIGNvbXBvbmVudHNbM10gPSAwLjIxMyAtIGNvc0h1ZSAqIDAuMjEzICsgc2luSHVlICog
MC4xNDM7CisgICAgY29tcG9uZW50c1s0XSA9IDAuNzE1ICsgY29zSHVlICogMC4yODUgKyBzaW5I
dWUgKiAwLjE0MDsKKyAgICBjb21wb25lbnRzWzVdID0gMC4wNzIgLSBjb3NIdWUgKiAwLjA3MiAt
IHNpbkh1ZSAqIDAuMjgzOworICAgIGNvbXBvbmVudHNbNl0gPSAwLjIxMyAtIGNvc0h1ZSAqIDAu
MjEzIC0gc2luSHVlICogMC43ODc7CisgICAgY29tcG9uZW50c1s3XSA9IDAuNzE1IC0gY29zSHVl
ICogMC43MTUgKyBzaW5IdWUgKiAwLjcxNTsKKyAgICBjb21wb25lbnRzWzhdID0gMC4wNzIgKyBj
b3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAqIDAuMDcyOworfQorCitWZWN0b3I8ZmxvYXQ+IEZFQ29s
b3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQor
eworICAgIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZFZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbm9y
bWFsaXplZFZhbHVlc1tpXSA9IG5vcm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOworICAgIHJldHVy
biBub3JtYWxpemVkVmFsdWVzOworfQorCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVDb2xv
ck1hdHJpeFNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxl
cy4KK2NsYXNzIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZm
ZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29sb3JNYXRyaXg+IHsKKyAgICB1c2luZyBCYXNlID0gRmls
dGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29sb3JNYXRyaXg+OworCitwdWJsaWM6CisgICAg
RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcihGRUNvbG9yTWF0cml4Jik7CisKKyAgICBib29s
IGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZl
Y3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBpbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKSBjb25zdDsKKyAg
ICBpbmxpbmUgdm9pZCBzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3Jl
ZW4sIGZsb2F0JiBibHVlKSBjb25zdDsKKyAgICBpbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKSBjb25zdDsKKwor
I2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHZvaWQgYXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVkKFBp
eGVsQnVmZmVyJikgY29uc3Q7CisjZW5kaWYKKyAgICB2b2lkIGFwcGx5UGxhdGZvcm1VbmFjY2Vs
ZXJhdGVkKFBpeGVsQnVmZmVyJikgY29uc3Q7CisKKyAgICB2b2lkIGFwcGx5UGxhdGZvcm0oUGl4
ZWxCdWZmZXImKSBjb25zdDsKKworICAgIGZsb2F0IG1fY29tcG9uZW50c1s5XTsKK307CisKK0ZF
Q29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIo
RkVDb2xvck1hdHJpeCYgZWZmZWN0KQorICAgIDogQmFzZShlZmZlY3QpCit7CisgICAgaWYgKG1f
ZWZmZWN0LnR5cGUoKSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUpCisgICAgICAgIEZF
Q29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhtX2NvbXBvbmVudHMsIG1f
ZWZmZWN0LnZhbHVlcygpWzBdKTsKKyAgICBlbHNlIGlmIChtX2VmZmVjdC50eXBlKCkgPT0gRkVD
T0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlSHVlUm90YXRlQ29tcG9uZW50cyhtX2NvbXBvbmVudHMsIG1fZWZmZWN0LnZhbHVlcygpWzBd
KTsKK30KKworaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6bWF0cml4
KGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkgY29u
c3QKIHsKICAgICBmbG9hdCByID0gcmVkOwogICAgIGZsb2F0IGcgPSBncmVlbjsKICAgICBmbG9h
dCBiID0gYmx1ZTsKICAgICBmbG9hdCBhID0gYWxwaGE7CiAKLSAgICByZWQgICAgID0gdmFsdWVz
WyAwXSAqIHIgKyB2YWx1ZXNbIDFdICogZyArIHZhbHVlc1sgMl0gKiBiICsgdmFsdWVzWyAzXSAq
IGEgKyB2YWx1ZXNbIDRdICogMjU1OwotICAgIGdyZWVuICAgPSB2YWx1ZXNbIDVdICogciArIHZh
bHVlc1sgNl0gKiBnICsgdmFsdWVzIFs3XSAqIGIgKyB2YWx1ZXNbIDhdICogYSArIHZhbHVlc1sg
OV0gKiAyNTU7Ci0gICAgYmx1ZSAgICA9IHZhbHVlc1sxMF0gKiByICsgdmFsdWVzWzExXSAqIGcg
KyB2YWx1ZXNbMTJdICogYiArIHZhbHVlc1sxM10gKiBhICsgdmFsdWVzWzE0XSAqIDI1NTsKLSAg
ICBhbHBoYSAgID0gdmFsdWVzWzE1XSAqIHIgKyB2YWx1ZXNbMTZdICogZyArIHZhbHVlc1sxN10g
KiBiICsgdmFsdWVzWzE4XSAqIGEgKyB2YWx1ZXNbMTldICogMjU1OworICAgIGNvbnN0IGF1dG8m
IHZhbHVlcyA9IG1fZWZmZWN0LnZhbHVlcygpOworCisgICAgcmVkICAgPSB2YWx1ZXNbIDBdICog
ciArIHZhbHVlc1sgMV0gKiBnICsgdmFsdWVzWyAyXSAqIGIgKyB2YWx1ZXNbIDNdICogYSArIHZh
bHVlc1sgNF0gKiAyNTU7CisgICAgZ3JlZW4gPSB2YWx1ZXNbIDVdICogciArIHZhbHVlc1sgNl0g
KiBnICsgdmFsdWVzWyA3XSAqIGIgKyB2YWx1ZXNbIDhdICogYSArIHZhbHVlc1sgOV0gKiAyNTU7
CisgICAgYmx1ZSAgPSB2YWx1ZXNbMTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEy
XSAqIGIgKyB2YWx1ZXNbMTNdICogYSArIHZhbHVlc1sxNF0gKiAyNTU7CisgICAgYWxwaGEgPSB2
YWx1ZXNbMTVdICogciArIHZhbHVlc1sxNl0gKiBnICsgdmFsdWVzWzE3XSAqIGIgKyB2YWx1ZXNb
MThdICogYSArIHZhbHVlc1sxOV0gKiAyNTU7CiB9CiAKLWlubGluZSB2b2lkIHNhdHVyYXRlQW5k
SHVlUm90YXRlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGNvbnN0IGZs
b2F0KiBjb21wb25lbnRzKQoraW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGll
cjo6c2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYg
Ymx1ZSkgY29uc3QKIHsKICAgICBmbG9hdCByID0gcmVkOwogICAgIGZsb2F0IGcgPSBncmVlbjsK
ICAgICBmbG9hdCBiID0gYmx1ZTsKIAotICAgIHJlZCAgICAgPSByICogY29tcG9uZW50c1swXSAr
IGcgKiBjb21wb25lbnRzWzFdICsgYiAqIGNvbXBvbmVudHNbMl07Ci0gICAgZ3JlZW4gICA9IHIg
KiBjb21wb25lbnRzWzNdICsgZyAqIGNvbXBvbmVudHNbNF0gKyBiICogY29tcG9uZW50c1s1XTsK
LSAgICBibHVlICAgID0gciAqIGNvbXBvbmVudHNbNl0gKyBnICogY29tcG9uZW50c1s3XSArIGIg
KiBjb21wb25lbnRzWzhdOworICAgIHJlZCAgICAgPSByICogbV9jb21wb25lbnRzWzBdICsgZyAq
IG1fY29tcG9uZW50c1sxXSArIGIgKiBtX2NvbXBvbmVudHNbMl07CisgICAgZ3JlZW4gICA9IHIg
KiBtX2NvbXBvbmVudHNbM10gKyBnICogbV9jb21wb25lbnRzWzRdICsgYiAqIG1fY29tcG9uZW50
c1s1XTsKKyAgICBibHVlICAgID0gciAqIG1fY29tcG9uZW50c1s2XSArIGcgKiBtX2NvbXBvbmVu
dHNbN10gKyBiICogbV9jb21wb25lbnRzWzhdOwogfQogCiAvLyBGSVhNRTogdGhpcyBzaG91bGQg
dXNlIHRoZSBsdW1pbmFuY2UoLi4uKSBmdW5jdGlvbiBpbiBDb2xvckx1bWluYW5jZS5oLgotaW5s
aW5lIHZvaWQgbHVtaW5hbmNlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUs
IGZsb2F0JiBhbHBoYSkKK2lubGluZSB2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6
Omx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYg
YWxwaGEpIGNvbnN0CiB7CiAgICAgYWxwaGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBncmVl
biArIDAuMDcyMSAqIGJsdWU7CiAgICAgcmVkID0gMDsKQEAgLTk3LDE4ICsxNjksMTMgQEAgaW5s
aW5lIHZvaWQgbHVtaW5hbmNlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUs
IGZsb2F0JiBhbHBoYSkKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFKQotdGVtcGxhdGU8Q29sb3JN
YXRyaXhUeXBlIGZpbHRlclR5cGU+Ci1ib29sIGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhD
bGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgZmxv
YXQgY29tcG9uZW50c1s5XSwgSW50U2l6ZSBidWZmZXJTaXplKQordm9pZCBGRUNvbG9yTWF0cml4
U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtQWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImIHBp
eGVsQnVmZmVyKSBjb25zdAogeworICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci5k
YXRhKCk7CisgICAgYXV0byBidWZmZXJTaXplID0gcGl4ZWxCdWZmZXIuc2l6ZSgpOworCiAgICAg
QVNTRVJUKHBpeGVsQXJyYXkubGVuZ3RoKCkgPT0gYnVmZmVyU2l6ZS5hcmVhKCkgKiA0KTsKICAg
ICAKLSAgICBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYKSB7Ci0g
ICAgICAgIC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1hdHJp
eCwgaWYgYW55IHZhbHVlIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xvck1hdHJpeCA1
eDQgbWF0cml4Ci0gICAgICAgIC8vIGlzIG5vdCB6ZXJvLCBmYWxsIGJhY2sgdG8gbm9uLXZJbWFn
ZSBjb2RlLgotICAgICAgICBpZiAodmFsdWVzWzRdICE9IDAgfHwgdmFsdWVzWzldICE9IDAgfHwg
dmFsdWVzWzE0XSAhPSAwIHx8IHZhbHVlc1sxOV0gIT0gMCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KICAgICBjb25zdCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7CiAgICAgdWlu
dDhfdCogZGF0YSA9IHBpeGVsQXJyYXkuZGF0YSgpOwogCkBAIC0xMjQsOCArMTkxLDEzIEBAIGJv
b2wgZWZmZWN0QXBwbHlBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwg
Y29uc3QgVmVjdG9yPGZsb2F0PiYKICAgICBkZXN0LnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0
aCgpICogNDsKICAgICBkZXN0LmRhdGEgPSBkYXRhOwogCi0gICAgc3dpdGNoIChmaWx0ZXJUeXBl
KSB7CisgICAgc3dpdGNoIChtX2VmZmVjdC50eXBlKCkpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9VTktOT1dOOgorICAgICAgICBicmVhazsKKwogICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX01BVFJJWDogeworICAgICAgICBjb25zdCBhdXRvJiB2YWx1ZXMgPSBtX2VmZmVjdC52
YWx1ZXMoKTsKKwogICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7CiAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYodmFsdWVzWyAwXSAqIGRpdmlzb3Ip
KSwKICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDVdICog
ZGl2aXNvcikpLApAQCAtMTU0LDE5ICsyMjYsMTkgQEAgYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJh
dGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+Jgog
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOgogICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX0hVRVJPVEFURTogewogICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICog
NF0gPSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50
c1swXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
Zihjb21wb25lbnRzWzNdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbNl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21wb25lbnRzWzBdICogZGl2aXNvcikpLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1szXSAqIGRp
dmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBv
bmVudHNbNl0gKiBkaXZpc29yKSksCiAgICAgICAgICAgICAwLAogCi0gICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1sxXSAqIGRpdmlzb3IpKSwKLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzRdICogZGl2aXNv
cikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNb
N10gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
bV9jb21wb25lbnRzWzFdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s0XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbN10gKiBkaXZpc29yKSksCiAg
ICAgICAgICAgICAwLAogCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYo
Y29tcG9uZW50c1syXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZihjb21wb25lbnRzWzVdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21wb25lbnRzWzJdICogZGl2aXNv
cikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50
c1s1XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5k
ZihtX2NvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCiAgICAgICAgICAgICAwLAogCiAgICAgICAg
ICAgICAwLApAQCAtMjAzLDM4ICsyNzUsMjUgQEAgYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVk
KFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JgogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwogfQogI2Vu
ZGlmCiAKLXRlbXBsYXRlPENvbG9yTWF0cml4VHlwZSBmaWx0ZXJUeXBlPgotdm9pZCBlZmZlY3RU
eXBlKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2
YWx1ZXMsIEludFNpemUgYnVmZmVyU2l6ZSkKK3ZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBw
bGllcjo6YXBwbHlQbGF0Zm9ybVVuYWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVy
KSBjb25zdAogewotICAgIGZsb2F0IGNvbXBvbmVudHNbOV07Ci0KLSAgICBpZiAoZmlsdGVyVHlw
ZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUpCi0gICAgICAgIEZFQ29sb3JNYXRyaXg6
OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotICAg
IGVsc2UgaWYgKGZpbHRlclR5cGUgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkKLSAg
ICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhjb21wb25l
bnRzLCB2YWx1ZXNbMF0pOwotCisgICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRh
dGEoKTsKICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgo
KTsKIAotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIGlmIChlZmZlY3RBcHBseUFjY2VsZXJhdGVk
PGZpbHRlclR5cGU+KHBpeGVsQXJyYXksIHZhbHVlcywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSkp
Ci0gICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlclNpemUpOwot
I2VuZGlmCisgICAgc3dpdGNoIChtX2VmZmVjdC50eXBlKCkpIHsKKyAgICBjYXNlIEZFQ09MT1JN
QVRSSVhfVFlQRV9VTktOT1dOOgorICAgICAgICBicmVhazsKIAotICAgIHN3aXRjaCAoZmlsdGVy
VHlwZSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBwaXhlbEJ5dGVPZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFy
cmF5TGVuZ3RoOyBwaXhlbEJ5dGVPZmZzZXQgKz0gNCkgewotICAgICAgICAgICAgZmxvYXQgcmVk
ID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7CisgICAgICAgICAgICBmbG9hdCBy
ZWQgICA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQpOwogICAgICAgICAgICAgZmxv
YXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMSk7Ci0gICAgICAg
ICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDIpOwor
ICAgICAgICAgICAgZmxvYXQgYmx1ZSAgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0
ICsgMik7CiAgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5
dGVPZmZzZXQgKyAzKTsKLSAgICAgICAgICAgIG1hdHJpeChyZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSwgdmFsdWVzKTsKKyAgICAgICAgICAgIG1hdHJpeChyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
CiAgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJlZCk7CiAgICAg
ICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVlbik7CiAgICAg
ICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVlKTsKQEAgLTI0
NSwxMSArMzA0LDExIEBAIHZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxB
cnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTCiAgICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfU0FUVVJBVEU6CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9U
QVRFOgogICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0
ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7Ci0gICAg
ICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKKyAg
ICAgICAgICAgIGZsb2F0IHJlZCAgID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCk7
CiAgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBibHVlICA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKICAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxB
cnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgc2F0dXJhdGVBbmRI
dWVSb3RhdGUocmVkLCBncmVlbiwgYmx1ZSwgY29tcG9uZW50cyk7CisgICAgICAgICAgICBzYXR1
cmF0ZUFuZEh1ZVJvdGF0ZShyZWQsIGdyZWVuLCBibHVlKTsKICAgICAgICAgICAgIHBpeGVsQXJy
YXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0
KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0
KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOwpAQCAtMjU5LDkgKzMxOCw5IEBAIHZvaWQgZWZm
ZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0
PiYgdmFsdWVzLCBJbnRTCiAKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VU
T0FMUEhBOgogICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVs
Qnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7Ci0g
ICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsK
KyAgICAgICAgICAgIGZsb2F0IHJlZCAgID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNl
dCk7CiAgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVP
ZmZzZXQgKyAxKTsKLSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4
ZWxCeXRlT2Zmc2V0ICsgMik7CisgICAgICAgICAgICBmbG9hdCBibHVlICA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKICAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwogICAgICAgICAgICAgbHVtaW5hbmNl
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBp
eGVsQnl0ZU9mZnNldCwgcmVkKTsKQEAgLTI3Myw1MSArMzMyLDUyIEBAIHZvaWQgZWZmZWN0VHlw
ZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFs
dWVzLCBJbnRTCiAgICAgfQogfQogCi1ib29sIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImKQordm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKK3sKKyNpZiBV
U0UoQUNDRUxFUkFURSkKKyAgICBjb25zdCBhdXRvJiB2YWx1ZXMgPSBtX2VmZmVjdC52YWx1ZXMo
KTsKKworICAgIC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1h
dHJpeCwgaWYgYW55IHZhbHVlIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xvck1hdHJp
eCA1eDQgbWF0cml4CisgICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdl
IGNvZGUuCisgICAgaWYgKG1fZWZmZWN0LnR5cGUoKSAhPSBGRUNPTE9STUFUUklYX1RZUEVfTUFU
UklYIHx8ICghdmFsdWVzWzRdICYmICF2YWx1ZXNbOV0gJiYgIXZhbHVlc1sxNF0gJiYgIXZhbHVl
c1sxOV0pKSB7CisgICAgICAgIGFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChwaXhlbEJ1ZmZlcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBhcHBseVBsYXRmb3JtVW5hY2Nl
bGVyYXRlZChwaXhlbEJ1ZmZlcik7Cit9CisKK2Jvb2wgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBw
bGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1
dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CiAKLSAgICBJbWFnZUJ1
ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8g
cmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5jcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlm
ICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEltYWdlQnVmZmVy
KiBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gaW5CdWZmZXIg
PSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoaW5CdWZmZXIpCi0gICAgICAgIHJl
c3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICByZXN1
bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIG1fZWZmZWN0LmRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAotICAg
IFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCByZXN1bHRDb2xvclNwYWNlKCkgfTsKKyAg
ICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9lZmZlY3QucmVzdWx0Q29sb3JTcGFj
ZSgpIH07CiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPnRy
dW5jYXRlZExvZ2ljYWxTaXplKCkpOwogICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFn
ZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBpbWFnZVJlY3QpOwogICAgIGlmICghcGl4ZWxCdWZm
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhl
bEJ1ZmZlci0+ZGF0YSgpOwotICAgIGF1dG8gcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBwaXhlbEJ1
ZmZlci0+c2l6ZSgpOwotCi0gICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxv
YXRzKG1fdmFsdWVzKTsKLSAgICAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX1VOS05PV046Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWDoKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZ
UEVfTUFUUklYPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6IAotICAg
ICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURT4ocGl4ZWxBcnJheSwg
dmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURToKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9S
TUFUUklYX1RZUEVfSFVFUk9UQVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1l
bnNpb25zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTFVN
SU5BTkNFVE9BTFBIQToKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfTFVN
SU5BTkNFVE9BTFBIQT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7
Ci0gICAgICAgIHNldElzQWxwaGFJbWFnZSh0cnVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQor
ICAgIGlmIChtX2VmZmVjdC50eXBlKCkgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRP
QUxQSEEpCisgICAgICAgIG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZSh0cnVlKTsKIAorICAgIGFw
cGx5UGxhdGZvcm0oKnBpeGVsQnVmZmVyKTsKICAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZm
ZXIoKnBpeGVsQnVmZmVyLCBpbWFnZVJlY3QpOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29s
IEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRl
cikKK3sKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBw
bHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCiB7CiAg
ICAgc3dpdGNoICh0eXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCmluZGV4IDQ5N2ViMTk1ZTQxNzVlY2Rm
ZDBjYWIyNGNiY2Q5YjBlMzlhN2Y4MDkuLmY2OWYwYjAxYzk1MDdlMDUyNmUwZDE3N2ViYmVmOTY5
MDA5Y2UxZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCkBAIC00NCw4ICs0NCw5IEBAIHB1YmxpYzoKICAg
ICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsg
fQogICAgIGJvb2wgc2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKIAotICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVu
dHMsIGZsb2F0IHZhbHVlKTsKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlSHVlUm90
YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpOworICAgIHN0YXRp
YyB2b2lkIGNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxv
YXQgdmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMo
ZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMgVmVjdG9yPGZsb2F0
PiBub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcyk7CiAKIHByaXZh
dGU6CiAgICAgRkVDb2xvck1hdHJpeChDb2xvck1hdHJpeFR5cGUsIFZlY3RvcjxmbG9hdD4mJik7
CkBAIC01OCwzNSArNTksNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxmbG9hdD4gbV92YWx1ZXM7
CiB9OwogCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1cmF0ZUNvbXBv
bmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQotewotICAgIGNvbXBvbmVudHNb
MF0gPSAoMC4yMTMgKyAwLjc4NyAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzFdID0gKDAuNzE1
IC0gMC43MTUgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1syXSA9ICgwLjA3MiAtIDAuMDcyICog
dmFsdWUpOwotICAgIGNvbXBvbmVudHNbM10gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKLSAg
ICBjb21wb25lbnRzWzRdID0gKDAuNzE1ICsgMC4yODUgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50
c1s1XSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbNl0gPSAoMC4y
MTMgLSAwLjIxMyAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzddID0gKDAuNzE1IC0gMC43MTUg
KiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s4XSA9ICgwLjA3MiArIDAuOTI4ICogdmFsdWUpOwot
fQotCi1pbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25l
bnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKLXsKLSAgICBmbG9hdCBjb3NIdWUg
PSBjb3ModmFsdWUgKiBwaUZsb2F0IC8gMTgwKTsKLSAgICBmbG9hdCBzaW5IdWUgPSBzaW4odmFs
dWUgKiBwaUZsb2F0IC8gMTgwKTsKLSAgICBjb21wb25lbnRzWzBdID0gMC4yMTMgKyBjb3NIdWUg
KiAwLjc4NyAtIHNpbkh1ZSAqIDAuMjEzOwotICAgIGNvbXBvbmVudHNbMV0gPSAwLjcxNSAtIGNv
c0h1ZSAqIDAuNzE1IC0gc2luSHVlICogMC43MTU7Ci0gICAgY29tcG9uZW50c1syXSA9IDAuMDcy
IC0gY29zSHVlICogMC4wNzIgKyBzaW5IdWUgKiAwLjkyODsKLSAgICBjb21wb25lbnRzWzNdID0g
MC4yMTMgLSBjb3NIdWUgKiAwLjIxMyArIHNpbkh1ZSAqIDAuMTQzOwotICAgIGNvbXBvbmVudHNb
NF0gPSAwLjcxNSArIGNvc0h1ZSAqIDAuMjg1ICsgc2luSHVlICogMC4xNDA7Ci0gICAgY29tcG9u
ZW50c1s1XSA9IDAuMDcyIC0gY29zSHVlICogMC4wNzIgLSBzaW5IdWUgKiAwLjI4MzsKLSAgICBj
b21wb25lbnRzWzZdID0gMC4yMTMgLSBjb3NIdWUgKiAwLjIxMyAtIHNpbkh1ZSAqIDAuNzg3Owot
ICAgIGNvbXBvbmVudHNbN10gPSAwLjcxNSAtIGNvc0h1ZSAqIDAuNzE1ICsgc2luSHVlICogMC43
MTU7Ci0gICAgY29tcG9uZW50c1s4XSA9IDAuMDcyICsgY29zSHVlICogMC45MjggKyBzaW5IdWUg
KiAwLjA3MjsKLX0KLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbG9yTWF0cml4KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRU
cmFuc2Zlci5jcHAKaW5kZXggOTc3Y2E1YjU3ODQxMzQzZTcxOGY0MjAxNWRiNDEyNGM3ZTBhZWZl
YS4uZDE2MDdkYWRkZWY4ZGQ2ZDgwNzJlOTFmZmZiN2M3YjFhNDM4MDBkMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5z
ZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgogCisjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTQ2LDE4ICs0
Nyw0MSBAQCBGRUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bgogewogfQogCi12b2lkIEZFQ29tcG9uZW50
VHJhbnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYpCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVDb21wb25l
bnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBm
aWxlcy4KK2NsYXNzIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9uZW50VHJhbnNmZXI+IHsKKyAgICB1
c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9uZW50VHJhbnNm
ZXI+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHko
Y29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92
ZXJyaWRlOworCitwcml2YXRlOgorICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1
aW50OF90LCAyNTY+OworCisgICAgc3RhdGljIHZvaWQgY29tcHV0ZUlkZW50aXR5VGFibGUoTG9v
a3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgc3RhdGlj
IHZvaWQgY29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24mKTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlRGlzY3JldGVUYWJsZShM
b29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAgICBzdGF0
aWMgdm9pZCBjb21wdXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJik7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1hVGFibGUoTG9v
a3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisKKyAgICBzdGF0
aWMgTG9va3VwVGFibGUgY29tcHV0ZUxvb2t1cFRhYmxlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mKTsKKworICAgIHZvaWQgYXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYpIGNvbnN0
OworfTsKKwordm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRl
SWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mKQogewogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVUYWJ1bGFyVGFi
bGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
dHJhbnNmZXJGdW5jdGlvbikKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGll
cjo6Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQogewogICAgIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKICAg
ICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwogICAgIGlmIChuIDwgMSkKLSAgICAg
ICAgcmV0dXJuOyAgICAgICAgICAgIAorICAgICAgICByZXR1cm47CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICBkb3VibGUgYyA9IGkg
LyAyNTUuMDsgICAgICAgICAgICAgICAgCisgICAgICAgIGRvdWJsZSBjID0gaSAvIDI1NS4wOwog
ICAgICAgICB1bnNpZ25lZCBrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGMgKiAobiAtIDEpKTsK
ICAgICAgICAgZG91YmxlIHYxID0gdGFibGVWYWx1ZXNba107CiAgICAgICAgIGRvdWJsZSB2MiA9
IHRhYmxlVmFsdWVzW3N0ZDo6bWluKChrICsgMSksIChuIC0gMSkpXTsKQEAgLTY3LDcgKzkxLDcg
QEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRh
YmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmUKICAgICB9CiB9CiAKLXZvaWQgRkVDb21wb25lbnRU
cmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3ZvaWQgRkVDb21w
b25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3Vw
VGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJG
dW5jdGlvbikKIHsKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5z
ZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7CiAgICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNp
emUoKTsKQEAgLTgyLDcgKzEwNiw3IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0
ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uCiAgICAgfQog
fQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJsZShMb29rdXBU
YWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1
bmN0aW9uKQordm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRl
TGluZWFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdmFsdWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGRvdWJsZSB2YWwgPSB0cmFuc2ZlckZ1
bmN0aW9uLnNsb3BlICogaSArIDI1NSAqIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0OwpAQCAt
OTEsNyArMTE1LDcgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlTGluZWFyVGFi
bGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW4KICAgICB9CiB9CiAKLXZvaWQg
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmIHZhbHVl
cywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3Zv
aWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUdhbW1hVGFibGUo
TG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJh
bnNmZXJGdW5jdGlvbikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIGRvdWJsZSBleHBvbmVudCA9IHRyYW5zZmVyRnVuY3Rpb24u
ZXhwb25lbnQ7IC8vIFJDVlQgZG9lc24ndCBsaWtlIHBhc3NpbmcgYSBkb3VibGUgYW5kIGEgZmxv
YXQgdG8gcG93LCBzbyBwcm9tb3RlIHRoaXMgdG8gZG91YmxlCkBAIC0xMDEsNDAgKzEyNSwxMiBA
QCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxl
JiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudAogICAgIH0KIH0KIAotYm9vbCBGRUNvbXBvbmVudFRy
YW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK0ZFQ29tcG9uZW50
VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6Okxvb2t1cFRhYmxlIEZFQ29tcG9uZW50VHJhbnNmZXJT
b2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVMb29rdXBUYWJsZShjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiBmdW5jdGlvbikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBMb29rdXBUYWJsZSB0YWJsZTsKIAotICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsK
LQotICAgIExvb2t1cFRhYmxlIHJlZFRhYmxlOwotICAgIExvb2t1cFRhYmxlIGdyZWVuVGFibGU7
Ci0gICAgTG9va3VwVGFibGUgYmx1ZVRhYmxlOwotICAgIExvb2t1cFRhYmxlIGFscGhhVGFibGU7
Ci0gICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRUYWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxl
LCBhbHBoYVRhYmxlKTsKLQotICAgIEludFJlY3QgZHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdp
b25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5j
b3B5VW5tdWx0aXBsaWVkUmVzdWx0KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgZHJhd2luZ1JlY3Qs
IG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0gICAgdW5zaWduZWQgZGVzdGluYXRpb25QaXhlbEFy
cmF5TGVuZ3RoID0gZGVzdGluYXRpb25QaXhlbEFycmF5Lmxlbmd0aCgpOwotICAgIHVpbnQ4X3Qq
IGRhdGEgPSBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpOwotICAgIGZvciAodW5zaWduZWQg
cGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0
aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0XSA9IHJlZFRh
YmxlW2RhdGFbcGl4ZWxPZmZzZXRdXTsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDFdID0g
Z3JlZW5UYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMV1dOwotICAgICAgICBkYXRhW3BpeGVsT2Zm
c2V0ICsgMl0gPSBibHVlVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDJdXTsKLSAgICAgICAgZGF0
YVtwaXhlbE9mZnNldCArIDNdID0gYWxwaGFUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgM11dOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6
OmNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRhYmxlLCBMb29rdXBUYWJsZSYg
Z3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9va3VwVGFibGUmIGFscGhhVGFi
bGUpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZFRhYmxlLnNpemUoKTsgKytp
KQotICAgICAgICByZWRUYWJsZVtpXSA9IGdyZWVuVGFibGVbaV0gPSBibHVlVGFibGVbaV0gPSBh
bHBoYVRhYmxlW2ldID0gaTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUuc2l6
ZSgpOyArK2kpCisgICAgICAgIHRhYmxlW2ldID0gaTsKIAogICAgIHVzaW5nIFRyYW5zZmVyVHlw
ZSA9IHZvaWQgKCopKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYpOwogICAgIFRyYW5zZmVyVHlwZSBjYWxsRWZmZWN0W10gPSB7CkBAIC0xNDYsMTUgKzE0Miw1
MCBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3Vw
VGFibGUmIHJlZFRhYmxlLCBMb29rdXBUYWJsZQogICAgICAgICBjb21wdXRlR2FtbWFUYWJsZSAg
ICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEKICAgICB9OwogCi0gICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3JlZEZ1
bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2dyZWVuRnVu
Y3Rpb24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYmx1ZUZ1bmN0
aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2FscGhhRnVuY3Rp
b24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKKyAgICBSRUxFQVNFX0FT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4oZnVuY3Rp
b24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKKyAgICBjYWxsRWZmZWN0
W2Z1bmN0aW9uLnR5cGVdKHRhYmxlLCBmdW5jdGlvbik7CiAKLSAgICBjYWxsRWZmZWN0W21fcmVk
RnVuY3Rpb24udHlwZV0ocmVkVGFibGUsIG1fcmVkRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3Rb
bV9ncmVlbkZ1bmN0aW9uLnR5cGVdKGdyZWVuVGFibGUsIG1fZ3JlZW5GdW5jdGlvbik7Ci0gICAg
Y2FsbEVmZmVjdFttX2JsdWVGdW5jdGlvbi50eXBlXShibHVlVGFibGUsIG1fYmx1ZUZ1bmN0aW9u
KTsKLSAgICBjYWxsRWZmZWN0W21fYWxwaGFGdW5jdGlvbi50eXBlXShhbHBoYVRhYmxlLCBtX2Fs
cGhhRnVuY3Rpb24pOworICAgIHJldHVybiB0YWJsZTsKK30KKwordm9pZCBGRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJiBwaXhlbEJ1
ZmZlcikgY29uc3QKK3sKKyAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgp
OworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOwor
ICAgIHVpbnQ4X3QqIGRhdGEgPSBwaXhlbEFycmF5LmRhdGEoKTsKKworICAgIGF1dG8gcmVkVGFi
bGUgICA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2VmZmVjdC5yZWRGdW5jdGlvbigpKTsKKyAgICBh
dXRvIGdyZWVuVGFibGUgPSBjb21wdXRlTG9va3VwVGFibGUobV9lZmZlY3QuZ3JlZW5GdW5jdGlv
bigpKTsKKyAgICBhdXRvIGJsdWVUYWJsZSAgPSBjb21wdXRlTG9va3VwVGFibGUobV9lZmZlY3Qu
Ymx1ZUZ1bmN0aW9uKCkpOworICAgIGF1dG8gYWxwaGFUYWJsZSA9IGNvbXB1dGVMb29rdXBUYWJs
ZShtX2VmZmVjdC5hbHBoYUZ1bmN0aW9uKCkpOworCisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9m
ZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0g
NCkgeworICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0XSAgICAgPSByZWRUYWJsZVtkYXRhW3BpeGVs
T2Zmc2V0XV07CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0
YVtwaXhlbE9mZnNldCArIDFdXTsKKyAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDJdID0gYmx1
ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQg
KyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDNdXTsKKyAgICB9Cit9CisKK2Jv
b2wgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCit7CisgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKyAgICAKKyAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QuY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhdXRvIGRyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAg
ICBpbi0+Y29weVVubXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGRyYXdp
bmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOworCisgICAgYXBwbHlQbGF0
Zm9ybSgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBs
aWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKIH0KIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvbmVudFRyYW5zZmVyVHlw
ZSB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAppbmRleCA2YWRhOWMwYWJiZTVjMmY5
ZDY1YmQ5MTlmZmVjNGYxNzNkMDAzNDE0Li41MThlYTEzNDdhNGFkZGJhNGNkNTAwY2I0MmM4MTM3
MDZkY2NkMTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaApAQCAtNjEsMTYgKzYxLDYg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUNvbXBvbmVudFRyYW5zZmVyKGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIGdyZWVuRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1
bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuYyk7CiAKLSAgICB1
c2luZyBMb29rdXBUYWJsZSA9IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PjsKLQotICAgIHN0YXRp
YyB2b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUo
TG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3Rh
dGljIHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxl
KExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0
YXRpYyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYpOwotCi0gICAgdm9pZCBjb21wdXRlTG9va3VwVGFibGVzKExvb2t1
cFRhYmxlJiByZWRUYWJsZSwgTG9va3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBi
bHVlVGFibGUsIExvb2t1cFRhYmxlJiBhbHBoYVRhYmxlKTsKLQogICAgIGJvb2wgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDI1YWMwMDg0MjRi
ZDg2MzExODQ3ODkwOTUwYmNmNjNlNWFlZjVmYTguLmYxMjlmNDU1NzEwYWM3ZmI1NGRlYTY1MmQy
ZjNkODI3NTU3NTFhYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5j
bHVkZSAiRkVDb21wb3NpdGUuaCIKIAogI2luY2x1ZGUgIkZFQ29tcG9zaXRlQXJpdGhtZXRpY05F
T04uaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJQaXhlbEJ1
ZmZlci5oIgpAQCAtOTQsMTYgKzk1LDYyIEBAIHZvaWQgRkVDb21wb3NpdGU6OmNvcnJlY3RGaWx0
ZXJSZXN1bHRJZk5lZWRlZCgpCiAKICAgICBmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygp
OwogfQotICAgIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgY2xhbXBCeXRlKGludCBjKQorCit2b2lk
IEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZp
bHRlcikKK3sKKyAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BF
UkFUT1JfSU46CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgorICAgICAgICAv
LyBGb3IgSW4gYW5kIEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJl
c3VsdCBvZgorICAgICAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFi
c29sdXRlIHBhaW50IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KKyAgICAgICAgc2V0
QWJzb2x1dGVQYWludFJlY3QoaW5wdXRFZmZlY3QoMSktPmFic29sdXRlUGFpbnRSZWN0KCkpOwor
ICAgICAgICBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzoKKyAgICAgICAgLy8gQXJpdGhtZXRp
YyBtYXkgaW5mbHVuY2UgdGhlIGNvbXBlbGUgZmlsdGVyIHByaW1pdGl2ZSByZWdpb24uIFNvIHdl
IGNhbid0CisgICAgICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KKyAgICAg
ICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFRha2UgdGhlIHVu
aW9uIG9mIGJvdGggaW5wdXQgZWZmZWN0cy4KKyAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdChmaWx0ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorfQor
CisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIgdG8g
c2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUNvbXBvc2l0ZVNvZnR3
YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb21wb3Np
dGU+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29t
cG9zaXRlPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFw
cGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3Rz
KSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdWludDhfdCBjbGFtcEJ5dGUoaW50
KTsKKworICAgIHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KKyAgICBzdGF0aWMgaW5saW5lIHZv
aWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHModW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25l
ZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9h
dCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKworICAgIHRlbXBsYXRlIDxpbnQgYjEsIGludCBi
ND4KKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgY29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNsYW1w
ZWQodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50
IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0
KTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseVBsYXRmb3JtQXJpdGhtZXRpYyh1bnNp
Z25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxB
cnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOworCisg
ICAgYm9vbCBhcHBseUFyaXRobWV0aWMoRmlsdGVyRWZmZWN0JiBpbnB1dCwgRmlsdGVyRWZmZWN0
JiBpbnB1dDIpOworICAgIGJvb2wgYXBwbHlOb25Bcml0aG1ldGljKEZpbHRlckVmZmVjdCYgaW5w
dXQsIEZpbHRlckVmZmVjdCYgaW5wdXQyKTsKK307CisKK3VpbnQ4X3QgRkVDb21wb3NpdGVTb2Z0
d2FyZUFwcGxpZXI6OmNsYW1wQnl0ZShpbnQgYykKIHsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZb
XSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1NSwgMCB9OworICAgIHVpbnQ4
X3QgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1aW50OF90PihjKSwgMjU1LCAwIH07CiAgICAgdW5z
aWduZWQgdWMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYyk7CiAgICAgcmV0dXJuIGJ1ZmZbISEo
dWMgJiB+MHhmZikgKyAhISh1YyAmIH4ofjB1ID4+IDEpKV07CiB9CiAKIHRlbXBsYXRlIDxpbnQg
YjEsIGludCBiND4KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVscyh1
bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4
ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCitp
bmxpbmUgdm9pZCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUFyaXRobWV0aWNQ
aXhlbHModW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwg
aW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0
IGs0KQogewogICAgIGZsb2F0IHNjYWxlZEsxOwogICAgIGZsb2F0IHNjYWxlZEs0OwpAQCAtMTMw
LDcgKzE3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVscyh1
bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqCiAvLyBjb21wdXRlQXJpdGhtZXRp
Y1BpeGVsc1VuY2xhbXBlZCBpcyBhIGZhc3RlciB2ZXJzaW9uIG9mIGNvbXB1dGVBcml0aG1ldGlj
UGl4ZWxzIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgY2xhbXBpbmcKIC8vIGlzIG5vdCBuZWNl
c3NhcnkuIFRoaXMgZW5hYmxlcyBhZ2dyZXNpdmUgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBzdWNo
IGFzIGF1dG8tdmVjdG9yaXphdGlvbi4KIHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KLXN0YXRp
YyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCh1bnNpZ25lZCBj
aGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxl
bmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCitpbmxpbmUgdm9p
ZCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUFyaXRobWV0aWNQaXhlbHNVbmNs
YW1wZWQodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwg
aW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0
IGs0KQogewogICAgIGZsb2F0IHNjYWxlZEsxOwogICAgIGZsb2F0IHNjYWxlZEs0OwpAQCAtMTU1
LDcgKzIwMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1Vu
Y2xhbXBlZCh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnCiB9CiAKICNpZiAhSEFWRShBUk1f
TkVPTl9JTlRSSU5TSUNTKQotc3RhdGljIGlubGluZSB2b2lkIGFyaXRobWV0aWNTb2Z0d2FyZSh1
bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4
ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCitp
bmxpbmUgdm9pZCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFyaXRo
bWV0aWModW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwg
aW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0
IGs0KQogewogICAgIGZsb2F0IHVwcGVyTGltaXQgPSBzdGQ6Om1heCgwLjBmLCBrMSkgKyBzdGQ6
Om1heCgwLjBmLCBrMikgKyBzdGQ6Om1heCgwLjBmLCBrMykgKyBrNDsKICAgICBmbG9hdCBsb3dl
ckxpbWl0ID0gc3RkOjptaW4oMC4wZiwgazEpICsgc3RkOjptaW4oMC4wZiwgazIpICsgc3RkOjpt
aW4oMC4wZiwgazMpICsgazQ7CkBAIC0xODgsMTE3ICsyMzUsMTA4IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBhcml0aG1ldGljU29mdHdhcmUodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBj
aGFyKiBkZXN0CiB9CiAjZW5kaWYKIAotaW5saW5lIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3Jt
QXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywg
ZmxvYXQgazQpCitib29sIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBseUFyaXRobWV0
aWMoRmlsdGVyRWZmZWN0JiBpbnB1dCwgRmlsdGVyRWZmZWN0JiBpbnB1dDIpCiB7Ci0gICAgaW50
IGxlbmd0aCA9IHNvdXJjZS5sZW5ndGgoKTsKLSAgICBBU1NFUlQobGVuZ3RoID09IHN0YXRpY19j
YXN0PGludD4oZGVzdGluYXRpb24ubGVuZ3RoKCkpKTsKLSAgICAvLyBUaGUgc2VsZWN0aW9uIGhl
cmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5LgotI2lmIEhBVkUoQVJNX05F
T05fSU5UUklOU0lDUykKLSAgICBBU1NFUlQoIShsZW5ndGggJiAweDMpKTsKLSAgICBwbGF0Zm9y
bUFyaXRobWV0aWNOZW9uKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3Ro
LCBrMSwgazIsIGszLCBrNCk7Ci0jZWxzZQotICAgIGFyaXRobWV0aWNTb2Z0d2FyZShzb3VyY2Uu
ZGF0YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotI2Vu
ZGlmCi19CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LmNyZWF0
ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi12b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKLXsKLSAgICBzd2l0Y2gg
KG1fdHlwZSkgewotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46Ci0gICAgY2FzZSBG
RUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgotICAgICAgICAvLyBGb3IgSW4gYW5kIEF0b3AgdGhl
IGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5jZXMgdGhlIHJlc3VsdCBvZgotICAgICAgICAvLyB0
aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1c2UgdGhlIGFic29sdXRlIHBhaW50IHJlY3Qgb2Yg
dGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoaW5w
dXRFZmZlY3QoMSktPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBjbGlwQWJzb2x1dGVQ
YWludFJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFU
T1JfQVJJVEhNRVRJQzoKLSAgICAgICAgLy8gQXJpdGhtZXRpYyBtYXkgaW5mbHVuY2UgdGhlIGNv
bXBlbGUgZmlsdGVyIHByaW1pdGl2ZSByZWdpb24uIFNvIHdlIGNhbid0Ci0gICAgICAgIC8vIG9w
dGltaXplIHRoZSBwYWludCByZWdpb24gaGVyZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJl
Y3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRha2UgdGhlIHVuaW9uIG9mIGJvdGggaW5wdXQgZWZm
ZWN0cy4KLSAgICAgICAgRmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChm
aWx0ZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIEludFJlY3Qg
ZWZmZWN0QURyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVs
QnVmZmVyKGlucHV0LmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gc291cmNlUGl4ZWxB
cnJheSA9IGlucHV0LnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0QURyYXdpbmdSZWN0LCBtX2Vm
ZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3Qg
PSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW5wdXQyLmFic29s
dXRlUGFpbnRSZWN0KCkpOworICAgIGlucHV0Mi5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0
aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdEJEcmF3aW5nUmVjdCwgbV9lZmZlY3Qub3BlcmF0aW5n
Q29sb3JTcGFjZSgpKTsKKworICAgIGludCBsZW5ndGggPSBzb3VyY2VQaXhlbEFycmF5LT5sZW5n
dGgoKTsKKyAgICBBU1NFUlQobGVuZ3RoID09IHN0YXRpY19jYXN0PGludD4oZGVzdGluYXRpb25Q
aXhlbEFycmF5Lmxlbmd0aCgpKSk7CisgICAgYXBwbHlQbGF0Zm9ybUFyaXRobWV0aWMoc291cmNl
UGl4ZWxBcnJheS0+ZGF0YSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpLCBsZW5ndGgs
IG1fZWZmZWN0LmsxKCksIG1fZWZmZWN0LmsyKCksIG1fZWZmZWN0LmszKCksIG1fZWZmZWN0Lms0
KCkpOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK2Jvb2wgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5Tm9uQXJpdGhtZXRpYyhGaWx0ZXJFZmZlY3QmIGlucHV0LCBGaWx0ZXJFZmZlY3Qm
IGlucHV0MikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKLQotICAgIGlmIChtX3R5cGUgPT0g
RkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykgewotICAgICAgICBhdXRvJiBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAg
ICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLQotICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0
aXBsaWVkUmVzdWx0KGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsK
LSAgICAgICAgaWYgKCFzb3VyY2VQaXhlbEFycmF5KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGlu
Mi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3RC
RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0KLSAgICAgICAgcGxhdGZvcm1B
cml0aG1ldGljU29mdHdhcmUoKnNvdXJjZVBpeGVsQXJyYXksIGRlc3RpbmF0aW9uUGl4ZWxBcnJh
eSwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7CisgICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmNyZWF0ZUltYWdlQnVmZmVyUmVz
dWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7
CiAKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQo
KTsKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIyID0gaW4yLT5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbnB1dC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwor
ICAgIGF1dG8gaW1hZ2VCdWZmZXIyID0gaW5wdXQyLmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAg
aWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgIGF1dG8mIGZpbHRlckNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOworCisgICAgc3dpdGNoIChtX2VmZmVjdC5vcGVyYXRpb24oKSkg
eworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfVU5LTk9XTjoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVkVSOgotICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbnB1dDIuYWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250
ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW5wdXQuYWJzb2x1dGVQYWludFJlY3QoKSkpOwogICAgICAgICBicmVhazsK
KwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfSU46IHsKICAgICAgICAgLy8gQXBwbGll
cyBvbmx5IHRvIHRoZSBpbnRlcnNlY3RlZCByZWdpb24uCi0gICAgICAgIEludFJlY3QgZGVzdGlu
YXRpb25SZWN0ID0gaW4tPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgICAgIGRlc3RpbmF0aW9u
UmVjdC5pbnRlcnNlY3QoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgZGVzdGlu
YXRpb25SZWN0LmludGVyc2VjdChhYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICAgICAgSW50UmVj
dCBkZXN0aW5hdGlvblJlY3QgPSBpbnB1dC5hYnNvbHV0ZVBhaW50UmVjdCgpOworICAgICAgICBk
ZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGlucHV0Mi5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAg
ICAgICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVj
dCgpKTsKICAgICAgICAgaWYgKGRlc3RpbmF0aW9uUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgSW50UmVjdCBhZGp1c3RlZERlc3RpbmF0aW9uUmVjdCA9IGRlc3Rp
bmF0aW9uUmVjdCAtIGFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50
UmVjdCBzb3VyY2VSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkubG9jYXRpb24oKTsKLSAgICAgICAgSW50UmVjdCBzb3VyY2UyUmVjdCA9IGRlc3RpbmF0aW9u
UmVjdCAtIGluMi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOworICAgICAgICBJbnRS
ZWN0IGFkanVzdGVkRGVzdGluYXRpb25SZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gbV9lZmZlY3Qu
YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOworICAgICAgICBJbnRSZWN0IHNvdXJjZVJl
Y3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbnB1dC5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9u
KCk7CisgICAgICAgIEludFJlY3Qgc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbnB1
dDIuYWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwogICAgICAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBGbG9hdFJlY3QoYWRqdXN0ZWREZXN0aW5h
dGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlMlJlY3QpKTsKICAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBGbG9hdFJlY3QoYWRqdXN0ZWREZXN0aW5h
dGlvblJlY3QpLCBGbG9hdFJlY3Qoc291cmNlUmVjdCksIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNv
dXJjZUluIH0pOwogICAgICAgICBicmVhazsKICAgICB9CisKICAgICBjYXNlIEZFQ09NUE9TSVRF
X09QRVJBVE9SX09VVDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlt
YWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
cjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwg
eyB7IH0sIGltYWdlQnVmZmVyMi0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6
RGVzdGluYXRpb25PdXQpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW5wdXQuYWJz
b2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlucHV0
Mi5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyMi0+bG9naWNhbFNpemUo
KSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdXQpOwogICAgICAgICBicmVhazsK
KwogICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgp
IH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsKKyAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbnB1dDIuYWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW5wdXQuYWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1
ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlQXRvcCk7CiAg
ICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6Ci0gICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+
bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKKyAgICAgICAgZmlsdGVy
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbnB1dDIuYWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW5wdXQuYWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBp
bWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKICAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisK
ICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0xJR0hURVI6Ci0gICAgICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUo
KSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6UGx1c0xpZ2h0ZXIpOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgorICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VC
dWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlucHV0Mi5hYnNvbHV0
ZVBhaW50UmVjdCgpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbnB1dC5hYnNv
bHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENv
bXBvc2l0ZU9wZXJhdG9yOjpQbHVzTGlnaHRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAog
ICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjph
cHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0
cykKK3sKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOworICAg
IEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3RzWzFdLmdldCgpOworCisgICAgaWYgKG1f
ZWZmZWN0Lm9wZXJhdGlvbigpID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCisg
ICAgICAgIHJldHVybiBhcHBseUFyaXRobWV0aWMoKmluLCAqaW4yKTsKKyAgICByZXR1cm4gYXBw
bHlOb25Bcml0aG1ldGljKCppbiwgKmluMik7Cit9CisKK2Jvb2wgRkVDb21wb3NpdGU6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVD
b21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3Rz
KCkpOworfQorCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDkzZjZkZjg3YThjYmQzYzE2NDI0M2Yy
NDM2MDRkY2VlZWI4MWE2NjQuLmE2NzNhMWUwYzIzOTVhMmI1NTczMjQyNDI2OWFiMzUwMjc2ODUx
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtMjQsOCArMjQsOSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAorI2luY2x1ZGUg
IkZFQ29sb3JNYXRyaXguaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5j
bHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
IApAQCAtMTE0LDYgKzExNSw0MiBAQCBib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldFByZXNlcnZl
QWxwaGEoYm9vbCBwcmVzZXJ2ZUFscGhhKQogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBGSVhN
RTogTW92ZSB0aGUgY2xhc3MgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllciB0byBzZXBh
cmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFQ29udm9sdmVNYXRyaXhTb2Z0
d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29udm9s
dmVNYXRyaXg+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVy
PEZFQ29udm9sdmVNYXRyaXg+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKwor
ICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0cnVjdCBQYWludGluZ0Rh
dGEgeworICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsKKyAg
ICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7CisgICAgICAgIGludCB3aWR0
aDsKKyAgICAgICAgaW50IGhlaWdodDsKKworICAgICAgICBJbnRTaXplIGtlcm5lbFNpemU7Cisg
ICAgICAgIGZsb2F0IGRpdmlzb3I7CisgICAgICAgIGZsb2F0IGJpYXM7CisgICAgICAgIEludFBv
aW50IHRhcmdldE9mZnNldDsKKyAgICAgICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlOworICAgICAg
ICBib29sIHByZXNlcnZlQWxwaGE7CisgICAgICAgIFZlY3RvcjxmbG9hdD4ga2VybmVsTWF0cml4
OworICAgIH07CisKKyAgICBzdGF0aWMgaW5saW5lIHVpbnQ4X3QgY2xhbXBSR0JBVmFsdWUoZmxv
YXQgY2hhbm5lbCwgdWludDhfdCBtYXggPSAyNTUpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBz
ZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4ZWxz
LCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFs
cywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzKTsK
KworICAgIHN0YXRpYyBpbmxpbmUgaW50IGdldFBpeGVsVmFsdWUoY29uc3QgUGFpbnRpbmdEYXRh
JiwgaW50IHgsIGludCB5KTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRJbnRlcmlvclBp
eGVscyhQYWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlT
dGFydCwgaW50IHlFbmQpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRPdXRlclBpeGVscyhQ
YWludGluZ0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOworCisgICAgdm9p
ZCBhcHBseVBsYXRmb3JtKFBhaW50aW5nRGF0YSYpIGNvbnN0OworfTsKKwogLyoKICAgIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICBDb252b2x2ZU1hdHJpeCBpbXBs
ZW1lbnRhdGlvbgpAQCAtMTcwLDcgKzIwNyw3IEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0
UHJlc2VydmVBbHBoYShib29sIHByZXNlcnZlQWxwaGEpCiAgICBhbmQgd291bGQgbWFrZSBpdCBy
ZWFsbHkgaGFyZCB0byB1bmRlcnN0YW5kLgogKi8KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgdW5z
aWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIG1h
eCA9IDI1NSkKK2lubGluZSB1aW50OF90IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6
OmNsYW1wUkdCQVZhbHVlKGZsb2F0IGNoYW5uZWwsIHVpbnQ4X3QgbWF4KQogewogICAgIGlmIChj
aGFubmVsIDw9IDApCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTc5LDEwICsyMTYsOSBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBjaGFyIGNsYW1wUkdCQVZhbHVlKGZsb2F0IGNoYW5u
ZWwsIHVuc2lnbmVkIGNoYXIgbQogICAgIHJldHVybiBjaGFubmVsOwogfQogCi10ZW1wbGF0ZTxi
b29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgc2V0RGVzdGluYXRp
b25QaXhlbHMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZVBpeGVscywgVWludDhDbGFt
cGVkQXJyYXkmIGRlc3RQaXhlbHMsIGludCYgcGl4ZWwsIGZsb2F0KiB0b3RhbHMsIGZsb2F0IGRp
dmlzb3IsIGZsb2F0IGJpYXMpCitpbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVB
cHBsaWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291
cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxv
YXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhh
VmFsdWVzKQogewotICAgIHVuc2lnbmVkIGNoYXIgbWF4QWxwaGEgPSBwcmVzZXJ2ZUFscGhhVmFs
dWVzID8gMjU1IDogY2xhbXBSR0JBVmFsdWUodG90YWxzWzNdIC8gZGl2aXNvciArIGJpYXMpOwor
ICAgIHVpbnQ4X3QgbWF4QWxwaGEgPSBwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMjU1IDogY2xhbXBS
R0JBVmFsdWUodG90YWxzWzNdIC8gZGl2aXNvciArIGJpYXMpOwogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMzsgKytpKQogICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCsrLCBjbGFtcFJHQkFW
YWx1ZSh0b3RhbHNbaV0gLyBkaXZpc29yICsgYmlhcywgbWF4QWxwaGEpKTsKIApAQCAtMTkzLDI1
ICsyMjksNDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFUKICAgICAgICAgZGVzdFBpeGVscy5z
ZXQocGl4ZWwrKywgbWF4QWxwaGEpOwogfQogCi0jaWYgQ09NUElMRVIoTVNWQykKLS8vIEluY29y
cmVjdGx5IGRpYWdub3Npbmcgb3ZlcndyaXRlIG9mIHN0YWNrIGluIHx0b3RhbHN8IGR1ZSB0byB8
cHJlc2VydmVBbHBoYVZhbHVlc3wuCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2Fy
bmluZyhkaXNhYmxlOiA0Nzg5KQotI2VuZGlmCitpbmxpbmUgaW50IEZFQ29udm9sdmVNYXRyaXhT
b2Z0d2FyZUFwcGxpZXI6OmdldFBpeGVsVmFsdWUoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEsIGludCB4LCBpbnQgeSkKK3sKKyAgICBpZiAoeCA+PSAwICYmIHggPCBwYWludGluZ0Rh
dGEud2lkdGggJiYgeSA+PSAwICYmIHkgPCBwYWludGluZ0RhdGEuaGVpZ2h0KQorICAgICAgICBy
ZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOworCisgICAgc3dpdGNoIChw
YWludGluZ0RhdGEuZWRnZU1vZGUpIHsKKyAgICBkZWZhdWx0OiAvLyBFREdFTU9ERV9OT05FCisg
ICAgICAgIHJldHVybiAtMTsKKyAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKKyAgICAgICAg
aWYgKHggPCAwKQorICAgICAgICAgICAgeCA9IDA7CisgICAgICAgIGVsc2UgaWYgKHggPj0gcGFp
bnRpbmdEYXRhLndpZHRoKQorICAgICAgICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0aCAtIDE7
CisgICAgICAgIGlmICh5IDwgMCkKKyAgICAgICAgICAgIHkgPSAwOworICAgICAgICBlbHNlIGlm
ICh5ID49IHBhaW50aW5nRGF0YS5oZWlnaHQpCisgICAgICAgICAgICB5ID0gcGFpbnRpbmdEYXRh
LmhlaWdodCAtIDE7CisgICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgp
IDw8IDI7CisgICAgY2FzZSBFREdFTU9ERV9XUkFQOgorICAgICAgICB3aGlsZSAoeCA8IDApCisg
ICAgICAgICAgICB4ICs9IHBhaW50aW5nRGF0YS53aWR0aDsKKyAgICAgICAgeCAlPSBwYWludGlu
Z0RhdGEud2lkdGg7CisgICAgICAgIHdoaWxlICh5IDwgMCkKKyAgICAgICAgICAgIHkgKz0gcGFp
bnRpbmdEYXRhLmhlaWdodDsKKyAgICAgICAgeSAlPSBwYWludGluZ0RhdGEuaGVpZ2h0OworICAg
ICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOworICAgIH0KK30K
IAogLy8gT25seSBmb3IgcmVnaW9uIEMKLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVl
cz4KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQ
aXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBjbGlwUmlnaHQsIGludCBjbGlw
Qm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCkKK2lubGluZSB2b2lkIEZFQ29udm9sdmVNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlF
bmQpCiB7CiAgICAgLy8gZWRnZSBtb2RlIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBwaXhlbHMKLSAg
ICBpbnQgcGl4ZWwgPSAobV90YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsg
bV90YXJnZXRPZmZzZXQueCgpKSAqIDQ7CisgICAgaW50IHBpeGVsID0gKHBhaW50aW5nRGF0YS50
YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgcGFpbnRpbmdEYXRhLnRhcmdl
dE9mZnNldC54KCkpICogNDsKICAgICBpbnQga2VybmVsSW5jcmVhc2UgPSBjbGlwUmlnaHQgKiA0
OwotICAgIGludCB4SW5jcmVhc2UgPSAobV9rZXJuZWxTaXplLndpZHRoKCkgLSAxKSAqIDQ7Cisg
ICAgaW50IHhJbmNyZWFzZSA9IChwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpIC0gMSkg
KiA0OwogICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBm
bG9hdCB0b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKKyAgICBmbG9h
dCB0b3RhbHNbNF07CiAKLSAgICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9s
dmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcwotICAgIEFTU0VSVChtX2Rpdmlzb3IpOworICAg
IC8vIGRpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3Vy
ZXMgdGhpcworICAgIEFTU0VSVChwYWludGluZ0RhdGEuZGl2aXNvcik7CiAKICAgICAvLyBTa2lw
IHRoZSBmaXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKICAgICBwaXhlbCArPSAoY2xp
cEJvdHRvbSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwpAQCAt
MjIxLDI5ICsyNzksMjggQEAgQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZh
c3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW4KICAgICAgICAgZm9yIChp
bnQgeCA9IGNsaXBSaWdodCArIDE7IHggPiAwOyAtLXgpIHsKICAgICAgICAgICAgIGludCBrZXJu
ZWxWYWx1ZSA9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXguc2l6ZSgpIC0gMTsKICAgICAgICAg
ICAgIGludCBrZXJuZWxQaXhlbCA9IHN0YXJ0S2VybmVsUGl4ZWw7Ci0gICAgICAgICAgICBpbnQg
d2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgIGludCB3aWR0aCA9IHBh
aW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CiAKICAgICAgICAgICAgIHRvdGFsc1swXSA9
IDA7CiAgICAgICAgICAgICB0b3RhbHNbMV0gPSAwOwogICAgICAgICAgICAgdG90YWxzWzJdID0g
MDsKLSAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAg
ICB0b3RhbHNbM10gPSAwOworICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKIAogICAgICAgICAg
ICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKICAgICAgICAgICAgICAgICB0b3RhbHNbMF0g
Kz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxm
bG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7CiAg
ICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2Vy
bmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwogICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWlu
dGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0Pihw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCisgICAgICAgICAgICAgICAgaWYgKCFw
YWludGluZ0RhdGEucHJlc2VydmVBbHBoYSkKICAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNd
ICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwpKTsKICAg
ICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsOwogICAgICAgICAgICAgICAgIC0ta2VybmVsVmFs
dWU7CiAgICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7CiAgICAgICAgICAgICAgICAgICAg
IGtlcm5lbFBpeGVsICs9IGtlcm5lbEluY3JlYXNlOwotICAgICAgICAgICAgICAgICAgICB3aWR0
aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHBh
aW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVsczxwcmVzZXJ2ZUFscGhh
VmFsdWVzPihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLmRzdFBpeGVs
QXJyYXksIHBpeGVsLCB0b3RhbHMsIG1fZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMpOworICAg
ICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHMocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXks
IHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBwYWludGluZ0RhdGEu
ZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKTsK
ICAgICAgICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0gNDsKICAgICAgICAgfQogICAgICAgICBw
aXhlbCArPSB4SW5jcmVhc2U7CkBAIC0yNTEsNjQgKzMwOCwzMyBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYg
cGFpbnRpbgogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBpbnQgRkVDb252b2x2ZU1hdHJpeDo6
Z2V0UGl4ZWxWYWx1ZShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQot
ewotICAgIGlmICh4ID49IDAgJiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYg
eSA8IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0
YS53aWR0aCArIHgpIDw8IDI7Ci0KLSAgICBzd2l0Y2ggKG1fZWRnZU1vZGUpIHsKLSAgICBkZWZh
dWx0OiAvLyBFREdFTU9ERV9OT05FCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBjYXNlIEVER0VN
T0RFX0RVUExJQ0FURToKLSAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgeCA9IDA7Ci0g
ICAgICAgIGVsc2UgaWYgKHggPj0gcGFpbnRpbmdEYXRhLndpZHRoKQotICAgICAgICAgICAgeCA9
IHBhaW50aW5nRGF0YS53aWR0aCAtIDE7Ci0gICAgICAgIGlmICh5IDwgMCkKLSAgICAgICAgICAg
IHkgPSAwOwotICAgICAgICBlbHNlIGlmICh5ID49IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAg
ICAgICAgICB5ID0gcGFpbnRpbmdEYXRhLmhlaWdodCAtIDE7Ci0gICAgICAgIHJldHVybiAoeSAq
IHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAgY2FzZSBFREdFTU9ERV9XUkFQOgot
ICAgICAgICB3aGlsZSAoeCA8IDApCi0gICAgICAgICAgICB4ICs9IHBhaW50aW5nRGF0YS53aWR0
aDsKLSAgICAgICAgeCAlPSBwYWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHdoaWxlICh5IDwg
MCkKLSAgICAgICAgICAgIHkgKz0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgeSAlPSBw
YWludGluZ0RhdGEuaGVpZ2h0OwotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lk
dGggKyB4KSA8PCAyOwotICAgIH0KLX0KLQogLy8gRm9yIG90aGVyIHJlZ2lvbnMgdGhhbiBDCi10
ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci12b2lkIEZFQ29udm9sdmVNYXRyaXg6
OmZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBp
bnQgeTEsIGludCB4MiwgaW50IHkyKQoraW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3
YXJlQXBwbGllcjo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKIHsKICAgICBpbnQgcGl4ZWwgPSAoeTEgKiBw
YWludGluZ0RhdGEud2lkdGggKyB4MSkgKiA0OwogICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOwog
ICAgIGludCB3aWR0aCA9IHgyIC0geDE7Ci0gICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEg
LSBtX3RhcmdldE9mZnNldC54KCk7CisgICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEgLSBw
YWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKTsKICAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFgg
PSBiZWdpbktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAtIG1f
dGFyZ2V0T2Zmc2V0LnkoKTsKKyAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAtIHBhaW50
aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpOwogICAgIGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdE
YXRhLndpZHRoIC0gd2lkdGgpICogNDsKICAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihh
KSBjb21wb25lbnRzCi0gICAgZmxvYXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVlcyA/
IDAgOiAxKV07CisgICAgZmxvYXQgdG90YWxzWzRdOwogCi0gICAgLy8gbV9kaXZpc29yIGNhbm5v
dCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NF
UlQobV9kaXZpc29yKTsKKyAgICAvLyBwYWludGluZ0RhdGEuZGl2aXNvciBjYW5ub3QgYmUgMCwg
U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCisgICAgQVNTRVJUKHBhaW50
aW5nRGF0YS5kaXZpc29yKTsKIAogICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkp
IHsKICAgICAgICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7CiAgICAgICAgICAg
ICBpbnQga2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7
CiAgICAgICAgICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7CiAgICAg
ICAgICAgICBpbnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgICAgICAg
ICBpbnQgd2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgIGludCB3aWR0
aCA9IHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CiAKICAgICAgICAgICAgIHRvdGFs
c1swXSA9IDA7CiAgICAgICAgICAgICB0b3RhbHNbMV0gPSAwOwogICAgICAgICAgICAgdG90YWxz
WzJdID0gMDsKLSAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAg
ICAgICAgICB0b3RhbHNbM10gPSAwOworICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKIAogICAg
ICAgICAgICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKICAgICAgICAgICAgICAgICBpbnQg
cGl4ZWxJbmRleCA9IGdldFBpeGVsVmFsdWUocGFpbnRpbmdEYXRhLCBrZXJuZWxQaXhlbFgsIGtl
cm5lbFBpeGVsWSk7CkBAIC0zMTcsMTggKzM0MywxOCBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6
OmZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBp
bgogICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1h
dHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1Bp
eGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMSkpOwogICAgICAgICAgICAgICAgICAgICB0b3Rh
bHNbMl0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNf
Y2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsg
MikpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxw
aGFWYWx1ZXMgJiYgcGl4ZWxJbmRleCA+PSAwKQorICAgICAgICAgICAgICAgIGlmICghcGFpbnRp
bmdEYXRhLnByZXNlcnZlQWxwaGEgJiYgcGl4ZWxJbmRleCA+PSAwKQogICAgICAgICAgICAgICAg
ICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0g
KiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhl
bEluZGV4ICsgMykpOwogICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOwogICAgICAgICAg
ICAgICAgIC0ta2VybmVsVmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwogICAg
ICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWTsKLSAgICAgICAgICAgICAgICAgICAgd2lk
dGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBw
YWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBo
YVZhbHVlcz4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhl
bEFycmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKKyAg
ICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRh
LmRpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7
CiAgICAgICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOwogICAgICAgICB9CiAgICAgICAgIHBp
eGVsICs9IHhJbmNyZWFzZTsKQEAgLTMzNyw5OCArMzYzLDkxIEBAIHZvaWQgRkVDb252b2x2ZU1h
dHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQg
eDEsIGluCiAgICAgfQogfQogCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhw
b3ApIC8vIERpc2FibGUgb2YgNDc4OQotI2VuZGlmCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNv
bnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQor
dm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhKSBjb25zdAogewotICAgIC8vIE11c3QgYmUgaW1wbGVtZW50
ZWQgaGVyZSwgc2luY2UgaXQgcmVmZXJzIGFub3RoZXIgQUxXQVlTX0lOTElORQotICAgIC8vIGZ1
bmN0aW9uLCB3aGljaCBkZWZpbmVkIGluIHRoaXMgQysrIHNvdXJjZSBmaWxlIGFzIHdlbGwKLSAg
ICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8dHJ1
ZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7Ci0g
ICAgZWxzZQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0
YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotfQorICAgIC8vIERyYXdp
bmcgZnVsbHkgY292ZXJlZCBwaXhlbHMKKyAgICBpbnQgY2xpcFJpZ2h0ID0gcGFpbnRpbmdEYXRh
LndpZHRoIC0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKKyAgICBpbnQgY2xpcEJv
dHRvbSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS5oZWln
aHQoKTsKIAotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVyUGl4
ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBp
bnQgeTIpCi17Ci0gICAgLy8gQWx0aG91Z2ggdGhpcyBmdW5jdGlvbiBjYW4gYmUgbW92ZWQgdG8g
dGhlIGhlYWRlciwgaXQgaXMgaW1wbGVtZW50ZWQgaGVyZQotICAgIC8vIGJlY2F1c2Ugc2V0SW50
ZXJpb3JQaXhlbHMgaXMgYWxzbyBpbXBsZW1lbnRlZCBoZXJlCi0gICAgaWYgKG1fcHJlc2VydmVB
bHBoYSkKLSAgICAgICAgZmFzdFNldE91dGVyUGl4ZWxzPHRydWU+KHBhaW50aW5nRGF0YSwgeDEs
IHkxLCB4MiwgeTIpOwotICAgIGVsc2UKLSAgICAgICAgZmFzdFNldE91dGVyUGl4ZWxzPGZhbHNl
PihwYWludGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKKyAgICBpZiAoY2xpcFJpZ2h0IDwgMCB8
fCBjbGlwQm90dG9tIDwgMCkgeworICAgICAgICAvLyBSYXJlIHNpdHVhdGlvbiwgbm90IG9wdGlt
aXplZCBmb3Igc3BlZWQKKyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAw
LCBwYWludGluZ0RhdGEud2lkdGgsIHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWluaW1hbFJlY3REaW1lbnNp
b24gPSAoMTAwICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpv
YnMKKworICAgIGlmIChpbnQgaXRlcmF0aW9ucyA9IChwYWludGluZ0RhdGEud2lkdGggKiBwYWlu
dGluZ0RhdGEuaGVpZ2h0KSAvIG1pbmltYWxSZWN0RGltZW5zaW9uKSB7CisgICAgICAgIGludCBz
dHJpZGUgPSBjbGlwQm90dG9tIC8gaXRlcmF0aW9uczsKKyAgICAgICAgaW50IGNodW5rQ291bnQg
PSAoY2xpcEJvdHRvbSArIHN0cmlkZSAtIDEpIC8gc3RyaWRlOworCisgICAgICAgIENvbmN1cnJl
bnRXb3JrUXVldWU6OmFwcGx5KGNodW5rQ291bnQsIFsmXShzaXplX3QgaW5kZXgpIHsKKyAgICAg
ICAgICAgIGludCB5U3RhcnQgPSAoc3RyaWRlICogaW5kZXgpOworICAgICAgICAgICAgaW50IHlF
bmQgPSBzdGQ6Om1pbjxpbnQ+KHN0cmlkZSAqIChpbmRleCArIDEpLCBjbGlwQm90dG9tKTsKKwor
ICAgICAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNs
aXBCb3R0b20sIHlTdGFydCwgeUVuZCk7CisgICAgICAgIH0pOworICAgIH0gZWxzZQorICAgICAg
ICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwg
MCwgY2xpcEJvdHRvbSk7CisKKyAgICBjbGlwUmlnaHQgKz0gcGFpbnRpbmdEYXRhLnRhcmdldE9m
ZnNldC54KCkgKyAxOworICAgIGNsaXBCb3R0b20gKz0gcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNl
dC55KCkgKyAxOworCisgICAgaWYgKHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpID4gMCkK
KyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBwYWludGluZ0RhdGEu
d2lkdGgsIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpKTsKKyAgICBpZiAoY2xpcEJvdHRv
bSA8IHBhaW50aW5nRGF0YS5oZWlnaHQpCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5n
RGF0YSwgMCwgY2xpcEJvdHRvbSwgcGFpbnRpbmdEYXRhLndpZHRoLCBwYWludGluZ0RhdGEuaGVp
Z2h0KTsKKyAgICBpZiAocGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC54KCkgPiAwKQorICAgICAg
ICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS50YXJnZXRPZmZz
ZXQueSgpLCBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7CisgICAg
aWYgKGNsaXBSaWdodCA8IHBhaW50aW5nRGF0YS53aWR0aCkKKyAgICAgICAgc2V0T3V0ZXJQaXhl
bHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgp
LCBwYWludGluZ0RhdGEud2lkdGgsIGNsaXBCb3R0b20pOwogfQogCi1ib29sIEZFQ29udm9sdmVN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorYm9vbCBGRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0
ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoMCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5n
ZXQoKTsKIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX3ByZXNlcnZlQWxw
aGEgPyBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpIDogY3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZm
ZWN0LnByZXNlcnZlQWxwaGEoKSA/IG1fZWZmZWN0LmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KCkgOiBtX2VmZmVjdC5jcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBp
ZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRh
dGEoKTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25P
ZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gZWZm
ZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZm
ZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogCiAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBzb3VyY2VQaXhlbEFycmF5OwotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAg
IHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+dW5tdWx0aXBsaWVkUmVzdWx0KGVmZmVjdERyYXdpbmdS
ZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmIChtX2VmZmVjdC5wcmVzZXJ2ZUFs
cGhhKCkpCisgICAgICAgIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+dW5tdWx0aXBsaWVkUmVzdWx0
KGVmZmVjdERyYXdpbmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAg
IGVsc2UKLSAgICAgICAgc291cmNlUGl4ZWxBcnJheSA9IGluLT5wcmVtdWx0aXBsaWVkUmVzdWx0
KGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgICAgICBzb3Vy
Y2VQaXhlbEFycmF5ID0gaW4tPnByZW11bHRpcGxpZWRSZXN1bHQoZWZmZWN0RHJhd2luZ1JlY3Qs
IG1fZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgaWYgKCFzb3VyY2VQaXhlbEFy
cmF5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFi
c29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIAorICAgIGF1dG8gcGFpbnRTaXplID0gbV9l
ZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CisKICAgICBQYWludGluZ0RhdGEgcGFp
bnRpbmdEYXRhID0gewogICAgICAgICAqc291cmNlUGl4ZWxBcnJheSwKICAgICAgICAgZGVzdGlu
YXRpb25QaXhlbEFycmF5LAogICAgICAgICBwYWludFNpemUud2lkdGgoKSwKICAgICAgICAgcGFp
bnRTaXplLmhlaWdodCgpLAotICAgICAgICBtX2JpYXMgKiAyNTUsCi0gICAgICAgIG5vcm1hbGl6
ZWRGbG9hdHMobV9rZXJuZWxNYXRyaXgpCisgICAgICAgIG1fZWZmZWN0Lmtlcm5lbFNpemUoKSwK
KyAgICAgICAgbV9lZmZlY3QuZGl2aXNvcigpLAorICAgICAgICBtX2VmZmVjdC5iaWFzKCkgKiAy
NTUsCisgICAgICAgIG1fZWZmZWN0LnRhcmdldE9mZnNldCgpLAorICAgICAgICBtX2VmZmVjdC5l
ZGdlTW9kZSgpLAorICAgICAgICBtX2VmZmVjdC5wcmVzZXJ2ZUFscGhhKCksCisgICAgICAgIEZF
Q29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMobV9lZmZlY3Qua2VybmVsKCkpCiAgICAgfTsK
IAotICAgIC8vIERyYXdpbmcgZnVsbHkgY292ZXJlZCBwaXhlbHMKLSAgICBpbnQgY2xpcFJpZ2h0
ID0gcGFpbnRTaXplLndpZHRoKCkgLSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAgICBpbnQgY2xp
cEJvdHRvbSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAtIG1fa2VybmVsU2l6ZS5oZWlnaHQoKTsKLQot
ICAgIGlmIChjbGlwUmlnaHQgPCAwIHx8IGNsaXBCb3R0b20gPCAwKSB7Ci0gICAgICAgIC8vIFJh
cmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1pemVkIGZvciBzcGVlZAotICAgICAgICBzZXRPdXRlclBp
eGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVp
Z2h0KCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoaW50IGl0ZXJh
dGlvbnMgPSAoYWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgpICogYWJzb2x1dGVQYWludFJlY3Qo
KS5oZWlnaHQoKSkgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uKSB7Ci0gICAgICAgIGludCBzdHJp
ZGUgPSBjbGlwQm90dG9tIC8gaXRlcmF0aW9uczsKLSAgICAgICAgaW50IGNodW5rQ291bnQgPSAo
Y2xpcEJvdHRvbSArIHN0cmlkZSAtIDEpIC8gc3RyaWRlOwotCi0gICAgICAgIENvbmN1cnJlbnRX
b3JrUXVldWU6OmFwcGx5KGNodW5rQ291bnQsIFsmXShzaXplX3QgaW5kZXgpIHsKLSAgICAgICAg
ICAgIGludCB5U3RhcnQgPSAoc3RyaWRlICogaW5kZXgpOwotICAgICAgICAgICAgaW50IHlFbmQg
PSBzdGQ6Om1pbjxpbnQ+KHN0cmlkZSAqIChpbmRleCArIDEpLCBjbGlwQm90dG9tKTsKLQotICAg
ICAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBC
b3R0b20sIHlTdGFydCwgeUVuZCk7Ci0gICAgICAgIH0pOwotICAgIH0gZWxzZQotICAgICAgICBz
ZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgMCwg
Y2xpcEJvdHRvbSk7Ci0KLSAgICBjbGlwUmlnaHQgKz0gbV90YXJnZXRPZmZzZXQueCgpICsgMTsK
LSAgICBjbGlwQm90dG9tICs9IG1fdGFyZ2V0T2Zmc2V0LnkoKSArIDE7Ci0gICAgaWYgKG1fdGFy
Z2V0T2Zmc2V0LnkoKSA+IDApCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwg
MCwgMCwgcGFpbnRTaXplLndpZHRoKCksIG1fdGFyZ2V0T2Zmc2V0LnkoKSk7Ci0gICAgaWYgKGNs
aXBCb3R0b20gPCBwYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBh
aW50aW5nRGF0YSwgMCwgY2xpcEJvdHRvbSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5o
ZWlnaHQoKSk7Ci0gICAgaWYgKG1fdGFyZ2V0T2Zmc2V0LngoKSA+IDApCi0gICAgICAgIHNldE91
dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgbV90YXJnZXRPZmZzZXQueSgpLCBtX3RhcmdldE9m
ZnNldC54KCksIGNsaXBCb3R0b20pOwotICAgIGlmIChjbGlwUmlnaHQgPCBwYWludFNpemUud2lk
dGgoKSkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIG1f
dGFyZ2V0T2Zmc2V0LnkoKSwgcGFpbnRTaXplLndpZHRoKCksIGNsaXBCb3R0b20pOwotCisgICAg
YXBwbHlQbGF0Zm9ybShwYWludGluZ0RhdGEpOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29s
IEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZp
bHRlcikKK3sKKyAgICByZXR1cm4gRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcigqdGhp
cykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBFZGdlTW9kZVR5cGUmIHR5cGUpCiB7
CiAgICAgc3dpdGNoICh0eXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4IDA1YzFhODM3
ZDIzNGNmNTg0ZGU4OTBmNTk0YjIyMDczZjEzMzY1YzUuLjZiN2FkZTZmMGIyMjg5ZjM0M2U1Njgx
NGZkOGMyZGU1NDQ3M2ZmOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC02NCwxNiArNjQs
NiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOwogCiBwcml2YXRl
OgotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzcmNQaXhlbEFycmF5OwotICAgICAgICBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4
ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0OwotICAgICAg
ICBmbG9hdCBiaWFzOwotICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtlcm5lbE1hdHJpeDsKLSAgICB9
OwotCiAgICAgRkVDb252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiBrZXJuZWxTaXplLCBmbG9h
dCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zmc2V0LCBFZGdl
TW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJvb2wgcHJlc2Vy
dmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsKIAogICAgIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRB
YnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CkBA
IC04MiwyMSArNzIsNiBAQCBwcml2YXRlOgogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci0g
ICAgQUxXQVlTX0lOTElORSB2b2lkIGZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEm
LCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpOwot
Ci0gICAgQUxXQVlTX0lOTElORSBpbnQgZ2V0UGl4ZWxWYWx1ZShQYWludGluZ0RhdGEmLCBpbnQg
eCwgaW50IHkpOwotCi0gICAgdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotICAg
IHZvaWQgZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCB4MSwgaW50IHkxLCBp
bnQgeDIsIGludCB5Mik7Ci0KLSAgICAvLyBXcmFwcGVyIGZ1bmN0aW9ucwotICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0
LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpOwotICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50
IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gUGFyYWxsZWxpemF0aW9uIHBhcnRzCi0gICAgc3RhdGlj
IGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGly
aWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0KICAgICBJbnRTaXplIG1fa2VybmVs
U2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CiAgICAgZmxvYXQgbV9iaWFzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlm
ZnVzZUxpZ2h0aW5nLmNwcAppbmRleCAxYWFjZTlkNjlhMDkwYjRmMTBmMTNkZTc1NTc1MWVmMjg2
MjA5MWNkLi5lYzcxYjU0N2ExZGY4NmE5MTM5ZDEzYWU2MzM4Njc0Mjk1ZTk4N2RkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxp
Z2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcApAQCAtMzMsNyArMzMsNyBAQCBSZWY8RkVEaWZmdXNlTGln
aHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29s
b3IsIGZsbwogfQogCiBGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRpbmcoY29uc3Qg
Q29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNv
bnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFks
IFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoRGlmZnVz
ZUxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwg
MCwgMCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0
U291cmNlKSwgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykKKyAgICA6IEZF
TGlnaHRpbmcoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdD
b2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5n
dGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpCiB7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggMmRmZDg1NzZmN2YxZTAyZjFkMDM0OTE5NWRk
MGMyNWY0NjQ0MzZkYy4uOWRhY2NjMTI3MDVlZjg1YWRlZDFhNGFmYmI0ZTc1ZDY3OTM0ZTBmNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
c3BsYWNlbWVudE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRl
ICJGRURpc3BsYWNlbWVudE1hcC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpA
QCAtODQsMzAgKzg1LDQ4IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnRyYW5zZm9ybVJlc3Vs
dENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50IGluCiAgICAgICAgIGluLT50
cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWdu
ZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMpCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVDb21w
b3NpdGVTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMu
CitjbGFzcyBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVEaXNwbGFjZW1lbnRNYXA+IHsKKyAgICB1c2luZyBCYXNl
ID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRGlzcGxhY2VtZW50TWFwPjsKKworcHVi
bGljOgorICAgIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyKEZFRGlzcGxhY2VtZW50
TWFwJik7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVj
dFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMg
aW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHks
IHVuc2lnbmVkIHJvd0J5dGVzKQorICAgIHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQ
ZXJQaXhlbCA9IDQ7CisgICAgICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhlbCArIHkgKiByb3dC
eXRlczsKKyAgICB9CisKKyAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWZmZWN0LnhDaGFubmVsU2VsZWN0b3IoKSAtIDE7IH0KKyAgICBpbnQgeUNoYW5uZWxJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0LnlDaGFubmVsU2VsZWN0b3IoKSAtIDE7IH0KK307CisK
K0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3
YXJlQXBwbGllcihGRURpc3BsYWNlbWVudE1hcCYgZWZmZWN0KQorICAgIDogQmFzZShlZmZlY3Qp
CiB7Ci0gICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQZXJQaXhlbCA9IDQ7Ci0gICAgcmV0dXJuIHgg
KiBieXRlc1BlclBpeGVsICsgeSAqIHJvd0J5dGVzOworICAgIEFTU0VSVChtX2VmZmVjdC54Q2hh
bm5lbFNlbGVjdG9yKCkgIT0gQ0hBTk5FTF9VTktOT1dOKTsKKyAgICBBU1NFUlQobV9lZmZlY3Qu
eUNoYW5uZWxTZWxlY3RvcigpICE9IENIQU5ORUxfVU5LTk9XTik7CiB9CiAKLWJvb2wgRkVEaXNw
bGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikK
K2Jvb2wgRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRl
ciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKIHsKLSAg
ICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBp
bjIgPSBpbnB1dEVmZmVjdCgxKTsKLQotICAgIEFTU0VSVChtX3hDaGFubmVsU2VsZWN0b3IgIT0g
Q0hBTk5FTF9VTktOT1dOKTsKLSAgICBBU1NFUlQobV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5O
RUxfVU5LTk9XTik7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQo
KTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0c1sxXS5nZXQoKTsKIAotICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QuY3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVs
QnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBJbnRSZWN0
IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3Qg
PSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpOwogICAgIGF1dG8gaW5wdXRJbWFnZSA9IGluLT5wcmVtdWx0aXBsaWVkUmVz
dWx0KGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVj
dCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRS
ZWN0KCkpOworICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAg
ICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g4oCYaW4y
4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQgY29sb3IgdmFsdWVzLgog
ICAgIGF1dG8gZGlzcGxhY2VtZW50SW1hZ2UgPSBpbjItPnVubXVsdGlwbGllZFJlc3VsdChlZmZl
Y3RCRHJhd2luZ1JlY3QpOwogICAgIApAQCAtMTE2LDkgKzEzNSw5IEBAIGJvb2wgRkVEaXNwbGFj
ZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKIAog
ICAgIEFTU0VSVChpbnB1dEltYWdlLT5sZW5ndGgoKSA9PSBkaXNwbGFjZW1lbnRJbWFnZS0+bGVu
Z3RoKCkpOwogCi0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKTsKKyAgICBJbnRTaXplIHBhaW50U2l6ZSA9IG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpOwogCi0gICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVy
U2NhbGUoeyBtX3NjYWxlLCBtX3NjYWxlIH0pOworICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRl
ci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3Quc2NhbGUoKSwgbV9lZmZlY3Quc2NhbGUo
KSB9KTsKICAgICBmbG9hdCBzY2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsK
ICAgICBmbG9hdCBzY2FsZUZvckNvbG9yWSA9IHNjYWxlLmhlaWdodCgpIC8gMjU1LjA7CiAgICAg
ZmxvYXQgc2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7CkBAIC0xNTEs
NiArMTcwLDExIEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRURp
c3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQoreworICAgIHJldHVybiBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcigqdGhpcyku
YXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBl
KQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCmluZGV4IDNj
ZDA1Y2M0OTU1MTcxOTlhY2RjODhlZDUxMzc2NjQzNjA2YjkyNWUuLjljNDdhZDkyZmM2YzgzZjIx
YjhkMDgxMzZjZTVlOWI0Yzc4NzU5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKQEAgLTU3
LDkgKzU3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CiAKLSAgICBpbnQgeENoYW5uZWxJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxlY3RvciAtIDE7IH0KLSAgICBpbnQgeUNoYW5u
ZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNoYW5uZWxTZWxlY3RvciAtIDE7IH0KLQogICAg
IFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0m
LCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ2hhbm5lbFNlbGVj
dG9yVHlwZSBtX3hDaGFubmVsU2VsZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggYzE3Mzkw
YTFhNzYyMTVlMTY5M2EzZDdmZGI3YmE5NmMxMmQzOWU3Yi4uYTZhNTIzYTEyNjM3NmJiMzFlMzNl
ODdkYjY0MjIzNDc0MjFhNjJhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMjMsNiArMjMsNyBA
QAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkZFR2F1c3NpYW5C
bHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGll
ci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKQEAgLTY5LDE4ICs3MCwyOCBAQCB2b2lkIEZF
RHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBh
aW50UmVjdCkpOwogfQogCi1ib29sIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYgZmlsdGVyKQorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFRHJvcFNo
YWRvd1NvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4K
K2NsYXNzIEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RD
b25jcmV0ZUFwcGxpZXI8RkVEcm9wU2hhZG93PiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVm
ZmVjdENvbmNyZXRlQXBwbGllcjxGRURyb3BTaGFkb3c+OworCitwdWJsaWM6CisgICAgdXNpbmcg
QmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworfTsKKworYm9vbCBGRURyb3BT
aGFkb3dTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBG
aWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1sw
XS5nZXQoKTsKIAotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFNpemUgYmx1clJhZGl1cyA9IDIgKiBmaWx0ZXIuc2Nh
bGVkQnlGaWx0ZXJTY2FsZSh7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIEZsb2F0U2l6ZSBvZmZz
ZXQgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkgfSk7CisgICAgRmxv
YXRTaXplIGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2Vm
ZmVjdC5zdGREZXZpYXRpb25YKCksIG1fZWZmZWN0LnN0ZERldmlhdGlvblkoKSB9KTsKKyAgICBG
bG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2VmZmVjdC5k
eCgpLCBtX2VmZmVjdC5keSgpIH0pOwogCi0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBG
bG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9u
V2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKICAgICBkcmF3aW5nUmVnaW9uV2l0aE9mZnNldC5t
b3ZlKG9mZnNldCk7CiAKQEAgLTg5LDEzICsxMDAsMTMgQEAgYm9vbCBGRURyb3BTaGFkb3c6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgR3JhcGhpY3NDb250ZXh0JiByZXN1bHRDb250ZXh0ID0gcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKG1fc2hhZG93T3BhY2l0
eSk7CisgICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYShtX2VmZmVjdC5zaGFkb3dPcGFjaXR5KCkp
OwogICAgIHJlc3VsdENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2lu
Z1JlZ2lvbldpdGhPZmZzZXQpOwogICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEoMSk7CiAKLSAg
ICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0Nv
bG9yKTsKKyAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBt
X2VmZmVjdC5zaGFkb3dDb2xvcigpKTsKIAotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JB
OCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCBtX2VmZmVjdC5yZXN1bHRDb2xvclNwYWNlKCkgfTsKICAgICBJbnRSZWN0IHNoYWRvd0FyZWEo
SW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPnRydW5jYXRlZExvZ2ljYWxTaXplKCkpOwogICAgIGF1
dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBzaGFk
b3dBcmVhKTsKICAgICBpZiAoIXBpeGVsQnVmZmVyKQpAQCAtMTA3LDE0ICsxMTgsMTggQEAgYm9v
bCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRl
cikKICAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBzaGFkb3dB
cmVhKTsKIAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0
ZU9wZXJhdG9yOjpTb3VyY2VJbik7Ci0gICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9hdFJl
Y3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93Q29s
b3IpOworICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
bV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX2VmZmVjdC5zaGFkb3dDb2xv
cigpKTsKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVP
cGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKIAogICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCku
ZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2luZ1JlZ2lvbik7Ci0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVEcm9wU2hhZG93U29mdHdhcmVB
cHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKyAgICAKIElu
dE91dHNldHMgRkVEcm9wU2hhZG93OjpvdXRzZXRzKCkgY29uc3QKIHsKICAgICBJbnRTaXplIG91
dHNldFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3RkWCwg
bV9zdGRZIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUZsb29kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHAKaW5kZXggMjQzMWU3OTE1NTQ2Njk1MDE3NjQ4MWNkMzllY2QzMGQy
OGYxYWM2Yi4uOGI2ZjRhNGIyOTM4NDhiODk4ZTA1ZDU2OWIwOWUwMjg3NWFhOTBjYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2Qu
Y3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiRkVGbG9vZC5oIgogCiAjaW5jbHVkZSAi
Q29sb3JTZXJpYWxpemF0aW9uLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtNTgsMTggKzU5LDMzIEBAIGJvb2wg
RkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJikKKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxp
ZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUZsb29kU29m
dHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUZsb29k
PiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUZsb29k
PjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNv
bnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVy
cmlkZTsKK307CisKK2Jvb2wgRkVGbG9vZFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmls
dGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJikKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVz
dWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiBy
ZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYg
KCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBjb2xvciA9
IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9vZE9wYWNpdHkoKSk7
Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNvbG9yKTsKKyAgICBhdXRvIGNvbG9y
ID0gbV9lZmZlY3QuZmxvb2RDb2xvcigpLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KG1fZWZm
ZWN0LmZsb29kT3BhY2l0eSgpKTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0
KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6
ZSgpKSwgY29sb3IpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVGbG9vZDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBG
RUZsb29kU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygp
KTsKK30KKwogVGV4dFN0cmVhbSYgRkVGbG9vZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewog
ICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlRmxvb2QiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRl
eCA1MGIyYzFlMDJkOWQ4OGM5MWZjY2U4NDUyYmJjOTE5ODUxODk0ZDVlLi5iN2Q4ODdiNzJmMzUy
ODlhNmRhOTRhNzJjNWZlNzdjNDc2NmFjZDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAt
MjgsMzAgKzI4LDE1MCBAQAogCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXJORU9OLmgiCiAjaW5j
bHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAK
ICNpZiBVU0UoQUNDRUxFUkFURSkKICNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4K
LSNlbmRpZgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2Vsc2UK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitSZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVh
dGUoZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoreworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFR2F1c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2RlKSk7Cit9CisKK0ZF
R2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5
cGUgZWRnZU1vZGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUdh
dXNzaWFuQmx1cikKKyAgICAsIG1fc3RkWCh4KQorICAgICwgbV9zdGRZKHkpCisgICAgLCBtX2Vk
Z2VNb2RlKGVkZ2VNb2RlKQoreworfQorCit2b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZp
YXRpb25YKGZsb2F0IHgpCit7CisgICAgbV9zdGRYID0geDsKK30KKwordm9pZCBGRUdhdXNzaWFu
Qmx1cjo6c2V0U3RkRGV2aWF0aW9uWShmbG9hdCB5KQoreworICAgIG1fc3RkWSA9IHk7Cit9CisK
K3ZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkK
K3sKKyAgICBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7Cit9CiAKIHN0YXRpYyBpbmxpbmUgZmxvYXQg
Z2F1c3NpYW5LZXJuZWxGYWN0b3IoKQogewogICAgIHJldHVybiAzIC8gNC5mICogc3FydGYoMiAq
IHBpRmxvYXQpOwogfQogCi1zdGF0aWMgY29uc3QgaW50IGdNYXhLZXJuZWxTaXplID0gNTAwOwor
c3RhdGljIGludCBjbGFtcGVkVG9LZXJuZWxTaXplKGZsb2F0IHZhbHVlKQoreworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbWF4S2VybmVsU2l6ZSA9IDUwMDsKKworICAgIC8vIExpbWl0
IHRoZSBrZXJuZWwgc2l6ZSB0byA1MDAuIEEgYmlnZ2VyIHJhZGl1cyB3b24ndCBtYWtlIGEgYmln
IGRpZmZlcmVuY2UgZm9yIHRoZSByZXN1bHQgaW1hZ2UgYnV0CisgICAgLy8gaW5mbGF0ZXMgdGhl
IGFic29sdXRlIHBhaW50IHJlY3QgdG9vIG11Y2guIFRoaXMgaXMgY29tcGF0aWJsZSB3aXRoIEZp
cmVmb3gnIGJlaGF2aW9yLgorICAgIHVuc2lnbmVkIHNpemUgPSBzdGQ6Om1heDx1bnNpZ25lZD4o
Miwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZsb29yZih2YWx1ZSAqIGdhdXNzaWFuS2VybmVsRmFj
dG9yKCkgKyAwLjVmKSkpOworICAgIHJldHVybiBjbGFtcFRvPGludD4oc3RkOjptaW4oc2l6ZSwg
bWF4S2VybmVsU2l6ZSkpOworfQorICAgIAorSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3Vs
YXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCit7CisgICAgQVNT
RVJUKHN0ZERldmlhdGlvbi53aWR0aCgpID49IDAgJiYgc3RkRGV2aWF0aW9uLmhlaWdodCgpID49
IDApOworICAgIEludFNpemUga2VybmVsU2l6ZTsKIAotbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IGlmIChzdGREZXZpYXRpb24ud2lkdGgoKSkKKyAgICAgICAga2VybmVsU2l6ZS5zZXRXaWR0aChj
bGFtcGVkVG9LZXJuZWxTaXplKHN0ZERldmlhdGlvbi53aWR0aCgpKSk7CisKKyAgICBpZiAoc3Rk
RGV2aWF0aW9uLmhlaWdodCgpKQorICAgICAgICBrZXJuZWxTaXplLnNldEhlaWdodChjbGFtcGVk
VG9LZXJuZWxTaXplKHN0ZERldmlhdGlvbi5oZWlnaHQoKSkpOworCisgICAgcmV0dXJuIGtlcm5l
bFNpemU7Cit9CisKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIsIEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCit7CisgICAgcmV0
dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2Fs
ZShzdGREZXZpYXRpb24pKTsKK30KKworSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
T3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQoreworICAgIGF1dG8ga2VybmVsU2l6
ZSA9IGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGREZXZpYXRpb24pOworCisgICAgLy8g
V2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwg
YmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCisgICAgcmV0dXJuIHsgMyAqIGtl
cm5lbFNpemUud2lkdGgoKSAvIDIsIDMgKiBrZXJuZWxTaXplLmhlaWdodCgpIC8gMiB9OworfQor
Cit2b2lkIEZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBG
aWx0ZXImIGZpbHRlcikKK3sKKyAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJu
ZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKworICAgIEZsb2F0UmVjdCBhYnNv
bHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOworICAg
IC8vIEVkZ2UgbW9kZXMgb3RoZXIgdGhhbiAnbm9uZScgZG8gbm90IGluZmxhdGUgdGhlIGFmZmVj
dGVkIHBhaW50IHJlY3QuCisgICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkgewor
ICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFp
bnRSZWN0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSB0YWtlIHRoZSBo
YWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1
biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKyAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgz
ICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgYWJzb2x1dGVQYWludFJlY3QuaW5m
bGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKKworICAgIGlmIChjbGlwc1Rv
Qm91bmRzKCkpCisgICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RS
ZWN0KCkpOworICAgIGVsc2UKKyAgICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUobWF4RWZm
ZWN0UmVjdCgpKTsKKworICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3Qo
YWJzb2x1dGVQYWludFJlY3QpKTsKK30KKworLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFR2F1
c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZp
bGVzLgorY2xhc3MgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVy
RWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFR2F1c3NpYW5CbHVyPiB7CisgICAgdXNpbmcgQmFzZSA9
IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUdhdXNzaWFuQmx1cj47CisKK3B1YmxpYzoK
KyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBj
b25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7CisgICAgICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gaW9QaXhlbEFycmF5OworICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IHRtcFBpeGVsQXJyYXk7CisgICAgICAgIGludCB3aWR0aDsKKyAgICAgICAgaW50IGhlaWdo
dDsKKyAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVg7CisgICAgICAgIHVuc2lnbmVkIGtlcm5l
bFNpemVZOworICAgICAgICBib29sIGlzQWxwaGFJbWFnZTsKKyAgICAgICAgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlOworICAgIH07CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQga2VybmVsUG9zaXRp
b24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGludCYgZGVsdGFMZWZ0LCBp
bnQmIGRlbHRhUmlnaHQpOwogCi1pbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0
ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdo
dCkKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckFscGhhT25seShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJy
YXksIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwg
aW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdodCwgY29u
c3QgaW50JiBtYXhLZXJuZWxTaXplKTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1cihj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkm
IGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwgaW50
IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdo
dCwgYm9vbCBhbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOworCisgICAgc3RhdGljIGlubGluZSB2
b2lkIGJveEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4
Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplLCBpbnQgc3RyaWRl
LCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQpOworICAgIHN0YXRpYyBpbmxpbmUg
dm9pZCBib3hCbHVyVW5hY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVp
bnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWdu
ZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUsIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0Fs
cGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1
ckdlbmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYg
dG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZ
LCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOwor
ICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyV29ya2VyKEFwcGx5UGFyYW1ldGVycyopOwor
CisgICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5UGxhdGZvcm0oVWludDhDbGFtcGVkQXJyYXkm
IGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2Vy
bmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wg
aXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOworfTsKKworaW5saW5lIHZvaWQgRkVHYXVzc2lh
bkJsdXJTb2Z0d2FyZUFwcGxpZXI6Omtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1
bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0YVJpZ2h0KQogewogICAg
IC8vIENoZWNrIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVHYXVzc2lh
bkJsdXJFbGVtZW50IGZvciBkZXRhaWxzLgogICAgIHN3aXRjaCAoYmx1ckl0ZXJhdGlvbikgewpA
QCAtNzksMzcgKzE5OSw4IEBAIGlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVySXRl
cmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwKICAgICB9CiB9CiAKLVJl
ZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5
LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVH
YXVzc2lhbkJsdXIoeCwgeSwgZWRnZU1vZGUpKTsKLX0KLQotRkVHYXVzc2lhbkJsdXI6OkZFR2F1
c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLSAgICA6
IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFR2F1c3NpYW5CbHVyKQotICAgICwg
bV9zdGRYKHgpCi0gICAgLCBtX3N0ZFkoeSkKLSAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUpCi17
Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgoZmxvYXQgeCkKLXsK
LSAgICBtX3N0ZFggPSB4OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRp
b25ZKGZsb2F0IHkpCi17Ci0gICAgbV9zdGRZID0geTsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1
cjo6c2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIG1fZWRnZU1vZGUg
PSBlZGdlTW9kZTsKLX0KLQogLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJhdGVzIG9uIEFscGhh
IGNoYW5uZWwuCi1pbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwK
LSAgICB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUs
IGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNv
bnN0IGludCYgbWF4S2VybmVsU2l6ZSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdh
cmVBcHBsaWVyOjpib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQ
aXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgs
IGludCYgZHhMZWZ0LCBpbnQmIGR4UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUs
IGludCYgZWZmZWN0V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5l
bFNpemUpCiB7CiAgICAgY29uc3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQXJyYXkuZGF0
YSgpOwogICAgIHVpbnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhlbEFycmF5LmRhdGEoKTsKQEAgLTE0
OSw4ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZQogICAgIH0KIH0KIAotaW5saW5l
IHZvaWQgYm94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWlu
dDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksCi0gICAgdW5zaWduZWQgZHgsIGludCBkeExl
ZnQsIGludCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdp
ZHRoLCBpbnQgZWZmZWN0SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdl
TW9kZSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVy
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJh
eSYgZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBp
bnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVp
Z2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKICAgICBjb25z
dCBpbnQgbWF4S2VybmVsU2l6ZSA9IHN0ZDo6bWluKGR4UmlnaHQsIGVmZmVjdFdpZHRoKTsKICAg
ICBpZiAoYWxwaGFJbWFnZSkKQEAgLTI4MCw3ICszNzAsNyBAQCBpbmxpbmUgdm9pZCBib3hCbHVy
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJh
eSYgZAogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCi1pbmxpbmUgdm9pZCBhY2NlbGVyYXRlQm94
Qmx1cihVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1w
QnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplLCBpbnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lkdGgs
IGludCBlZmZlY3RIZWlnaHQpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBw
bGllcjo6Ym94Qmx1ckFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWlu
dDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJp
ZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCkKIHsKICAgICBpZiAoIWlvQnVm
ZmVyLmRhdGEoKSB8fCAhdGVtcEJ1ZmZlci5kYXRhKCkpIHsKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC0zMjYsNyArNDE2LDcgQEAgaW5saW5lIHZvaWQgYWNjZWxlcmF0ZUJveEJs
dXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGUKIH0K
ICNlbmRpZgogCi1pbmxpbmUgdm9pZCBzdGFuZGFyZEJveEJsdXIoVWludDhDbGFtcGVkQXJyYXkm
IGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVs
U2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNp
emUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCitpbmxpbmUgdm9p
ZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQoVWlu
dDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwg
dW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJ
bnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1v
ZGUpCiB7CiAgICAgaW50IGR4TGVmdCA9IDA7CiAgICAgaW50IGR4UmlnaHQgPSAwOwpAQCAtMzcx
LDM1ICs0NjEsMzkgQEAgaW5saW5lIHZvaWQgc3RhbmRhcmRCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFy
cmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXAKICAgICB9CiB9CiAKLWlubGlu
ZSB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25l
ZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSkK
K2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyR2VuZXJp
YyhVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhl
bEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNp
emUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkK
IHsKICAgICBpbnQgc3RyaWRlID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOwogCiAjaWYgVVNFKEFD
Q0VMRVJBVEUpCi0gICAgaWYgKGtlcm5lbFNpemVYID09IGtlcm5lbFNpemVZICYmIChtX2VkZ2VN
b2RlID09IEVER0VNT0RFX05PTkUgfHwgbV9lZGdlTW9kZSA9PSBFREdFTU9ERV9EVVBMSUNBVEUp
KSB7Ci0gICAgICAgIGFjY2VsZXJhdGVCb3hCbHVyKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBr
ZXJuZWxTaXplWCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgp
KTsKKyAgICBpZiAoa2VybmVsU2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKGVkZ2VNb2RlID09IEVE
R0VNT0RFX05PTkUgfHwgZWRnZU1vZGUgPT0gRURHRU1PREVfRFVQTElDQVRFKSkgeworICAgICAg
ICBib3hCbHVyQWNjZWxlcmF0ZWQoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVY
LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAKLSAgICBzdGFuZGFyZEJveEJsdXIoaW9CdWZmZXIs
IHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWludFNp
emUsIGlzQWxwaGFJbWFnZSgpLCBtX2VkZ2VNb2RlKTsKKyAgICBib3hCbHVyVW5hY2NlbGVyYXRl
ZChpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBzdHJp
ZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7CiB9CiAKLXZvaWQgRkVHYXVz
c2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBh
cmFtZXRlcnMpCisjaWYgIVVTRShBQ0NFTEVSQVRFKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJs
dXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJXb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbWV0
ZXJzKQogewogICAgIEludFNpemUgcGFpbnRTaXplKHBhcmFtZXRlcnMtPndpZHRoLCBwYXJhbWV0
ZXJzLT5oZWlnaHQpOwotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVy
aWMoKnBhcmFtZXRlcnMtPmlvUGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnRtcFBpeGVsQXJyYXks
IHBhcmFtZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWSwgcGFpbnRT
aXplKTsKKyAgICBib3hCbHVyR2VuZXJpYygqcGFyYW1ldGVycy0+aW9QaXhlbEFycmF5LCAqcGFy
YW1ldGVycy0+dG1wUGl4ZWxBcnJheSwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVgsIHBhcmFtZXRl
cnMtPmtlcm5lbFNpemVZLCBwYWludFNpemUsIHBhcmFtZXRlcnMtPmlzQWxwaGFJbWFnZSwgcGFy
YW1ldGVycy0+ZWRnZU1vZGUpOwogfQorI2VuZGlmCiAKLWlubGluZSB2b2lkIEZFR2F1c3NpYW5C
bHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFt
cGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBr
ZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJs
dXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oVWludDhDbGFtcGVkQXJyYXkmIGlvQnVm
ZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6
ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBo
YUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7CiAjaWYgIVVTRShBQ0NFTEVSQVRFKQog
ICAgIGludCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKICAgICBpbnQgZXh0cmFI
ZWlnaHQgPSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOwotICAgIGludCBvcHRpbWFsVGhyZWFkTnVt
YmVyID0gKHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpKSAvIChzX21pbmlt
YWxSZWN0RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWludFNpemUud2lkdGgoKSk7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIGludCBtaW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsg
Ly8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKyAgICBpbnQgb3B0aW1h
bFRocmVhZE51bWJlciA9IChwYWludFNpemUud2lkdGgoKSAqIHBhaW50U2l6ZS5oZWlnaHQoKSkg
LyAobWluaW1hbFJlY3REaW1lbnNpb24gKyBleHRyYUhlaWdodCAqIHBhaW50U2l6ZS53aWR0aCgp
KTsKIAogICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBQYXJhbGxl
bEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBs
eVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAgIFBhcmFsbGVsSm9iczxBcHBs
eVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYm94Qmx1cldvcmtlciwgb3B0aW1hbFRocmVhZE51
bWJlcik7CiAKICAgICAgICAgaW50IGpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7
CiAgICAgICAgIGlmIChqb2JzID4gMSkgewpAQCAtNDEwLDggKzUwNCw3IEBAIGlubGluZSB2b2lk
IEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZl
ciwgVWludDhDbGFtCiAKICAgICAgICAgICAgIGludCBjdXJyZW50WSA9IDA7CiAgICAgICAgICAg
ICBmb3IgKGludCBqb2IgPSAwOyBqb2IgPCBqb2JzOyBqb2IrKykgewotICAgICAgICAgICAgICAg
IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVy
KGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7CisgICAgICAgICAg
ICAgICAgQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpv
Yik7CiAKICAgICAgICAgICAgICAgICBpbnQgc3RhcnRZID0gIWpvYiA/IDAgOiBjdXJyZW50WSAt
IGV4dHJhSGVpZ2h0OwogICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRo
RXh0cmEgPyBibG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdodDsKQEAgLTQzMSw2ICs1MjQsOCBA
QCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseShVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbQogICAgICAgICAgICAgICAgIHBhcmFtcy5oZWlnaHQg
PSBlbmRZIC0gc3RhcnRZOwogICAgICAgICAgICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWCA9IGtl
cm5lbFNpemVYOwogICAgICAgICAgICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWSA9IGtlcm5lbFNp
emVZOworICAgICAgICAgICAgICAgIHBhcmFtcy5pc0FscGhhSW1hZ2UgPSBpc0FscGhhSW1hZ2U7
CisgICAgICAgICAgICAgICAgcGFyYW1zLmVkZ2VNb2RlID0gZWRnZU1vZGU7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7CkBAIC00MzgsNyArNTMz
LDcgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkoVWludDhDbGFt
cGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW0KICAgICAgICAgICAgIC8vIENvcHkgdG9nZXRo
ZXIgdGhlIHBhcnRzIG9mIHRoZSBpbWFnZS4KICAgICAgICAgICAgIGN1cnJlbnRZID0gMDsKICAg
ICAgICAgICAgIGZvciAoaW50IGpvYiA9IDE7IGpvYiA8IGpvYnM7IGpvYisrKSB7Ci0gICAgICAg
ICAgICAgICAgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5w
YXJhbWV0ZXIoam9iKTsKKyAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9
IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKICAgICAgICAgICAgICAgICBpbnQgc291cmNl
T2Zmc2V0OwogICAgICAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbk9mZnNldDsKICAgICAgICAg
ICAgICAgICBpbnQgc2l6ZTsKQEAgLTQ1OCw5NSArNTUzLDQyIEBAIGlubGluZSB2b2lkIEZFR2F1
c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWlu
dDhDbGFtCiAjZW5kaWYKIAogICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNo
b3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCi0gICAgcGxhdGZvcm1B
cHBseUdlbmVyaWMoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxT
aXplWSwgcGFpbnRTaXplKTsKLX0KLQotc3RhdGljIGludCBjbGFtcGVkVG9LZXJuZWxTaXplKGZs
b2F0IHZhbHVlKQotewotICAgIC8vIExpbWl0IHRoZSBrZXJuZWwgc2l6ZSB0byA1MDAuIEEgYmln
Z2VyIHJhZGl1cyB3b24ndCBtYWtlIGEgYmlnIGRpZmZlcmVuY2UgZm9yIHRoZSByZXN1bHQgaW1h
Z2UgYnV0Ci0gICAgLy8gaW5mbGF0ZXMgdGhlIGFic29sdXRlIHBhaW50IHJlY3QgdG9vIG11Y2gu
IFRoaXMgaXMgY29tcGF0aWJsZSB3aXRoIEZpcmVmb3gnIGJlaGF2aW9yLgotICAgIHVuc2lnbmVk
IHNpemUgPSBzdGQ6Om1heDx1bnNpZ25lZD4oMiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZsb29y
Zih2YWx1ZSAqIGdhdXNzaWFuS2VybmVsRmFjdG9yKCkgKyAwLjVmKSkpOwotICAgIHJldHVybiBj
bGFtcFRvPGludD4oc3RkOjptaW4oc2l6ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdNYXhLZXJu
ZWxTaXplKSkpOwotfQotICAgIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5z
Y2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCi17Ci0gICAgQVNTRVJUKHN0
ZERldmlhdGlvbi53aWR0aCgpID49IDAgJiYgc3RkRGV2aWF0aW9uLmhlaWdodCgpID49IDApOwot
ICAgIEludFNpemUga2VybmVsU2l6ZTsKLQotICAgIGlmIChzdGREZXZpYXRpb24ud2lkdGgoKSkK
LSAgICAgICAga2VybmVsU2l6ZS5zZXRXaWR0aChjbGFtcGVkVG9LZXJuZWxTaXplKHN0ZERldmlh
dGlvbi53aWR0aCgpKSk7Ci0KLSAgICBpZiAoc3RkRGV2aWF0aW9uLmhlaWdodCgpKQotICAgICAg
ICBrZXJuZWxTaXplLnNldEhlaWdodChjbGFtcGVkVG9LZXJuZWxTaXplKHN0ZERldmlhdGlvbi5o
ZWlnaHQoKSkpOwotCi0gICAgcmV0dXJuIGtlcm5lbFNpemU7CisgICAgYm94Qmx1ckdlbmVyaWMo
aW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgcGFpbnRT
aXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKIH0KIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1
cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRTaXplIHN0
ZERldmlhdGlvbikKK2Jvb2wgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNv
bnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0
cykKIHsKLSAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclNjYWxlKHN0ZERldmlhdGlvbikpOwotfQorICAgIEZpbHRlckVmZmVjdCogaW4g
PSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CiAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1
bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKLXsKLSAgICBhdXRvIGtlcm5l
bFNpemUgPSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uKTsKLQotICAg
IC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhy
ZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgotICAgIHJldHVybiB7IDMg
KiBrZXJuZWxTaXplLndpZHRoKCkgLyAyLCAzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAvIDIgfTsK
LX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCi17Ci0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRl
S2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0KLSAgICBGbG9hdFJlY3Qg
YWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsK
LSAgICAvLyBFZGdlIG1vZGVzIG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRoZSBh
ZmZlY3RlZCBwYWludCByZWN0LgotICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUp
IHsKLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0
ZVBhaW50UmVjdCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgdGFrZSB0
aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3
ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0
ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0
LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xp
cHNUb0JvdW5kcygpKQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZm
ZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1h
eEVmZmVjdFJlY3QoKSk7Ci0KLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci19Ci0KLWJvb2wgRkVHYXVzc2lhbkJsdXI6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKLXsKLSAgICBGaWx0ZXJFZmZl
Y3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2Uo
KSk7CisgICAgbV9lZmZlY3Quc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAK
LSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBp
eGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRp
cGxpZWRSZXN1bHQoZGVzdGluYXRpb25QaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgb3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQorICAgIGF1
dG8gZWZmZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGluLT5jb3B5UHJlbXVsdGlw
bGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBtX2Vm
ZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICghbV9lZmZlY3Quc3RkRGV2aWF0
aW9uWCgpICYmICFtX2VmZmVjdC5zdGREZXZpYXRpb25ZKCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIs
IHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgYXV0byBrZXJuZWxTaXplID0gbV9lZmZlY3QuY2Fs
Y3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9lZmZlY3Quc3RkRGV2aWF0aW9uWCgpLCBtX2Vm
ZmVjdC5zdGREZXZpYXRpb25ZKCkgfSk7CiAKLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29s
dXRlUGFpbnRSZWN0KCkuc2l6ZSgpOworICAgIEludFNpemUgcGFpbnRTaXplID0gbV9lZmZlY3Qu
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CiAgICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50
OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICog
NCk7CiAgICAgaWYgKCF0bXBJbWFnZURhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IHBsYXRmb3JtQXBwbHkoZGVzdGluYXRpb25QaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJu
ZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CisgICAgYXBw
bHlQbGF0Zm9ybShkZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNp
emUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplLCBtX2VmZmVjdC5pc0Fs
cGhhSW1hZ2UoKSwgbV9lZmZlY3QuZWRnZU1vZGUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K2Jvb2wgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
IGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIoKnRo
aXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBJbnRPdXRzZXRzIEZFR2F1
c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKIHsKICAgICBJbnRTaXplIG91dHNldFNpemUgPSBj
YWxjdWxhdGVPdXRzZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkgfSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgK
aW5kZXggZDc0YmRhYTcyZWQzMDRmNWI4MDE3N2FkNmNjYTc3NWE1YjQ5MzcxNy4uNjVhYTZlMTg4
OTdmYThjYzk3NjlkMWU1NTdkN2QyNmY1ZTVjYTIyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaApAQCAt
NDYsMjkgKzQ2LDEzIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRkVHYXVzc2lhbkJsdXIoZmxv
YXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlKTsKIAotICAgIHN0YXRpYyBjb25zdCBpbnQgc19t
aW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQg
Zm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7
Ci0gICAgICAgIEZFR2F1c3NpYW5CbHVyKiBmaWx0ZXI7Ci0gICAgICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gaW9QaXhlbEFycmF5OwotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IHRtcFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdo
dDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVg7Ci0gICAgICAgIHVuc2lnbmVkIGtlcm5l
bFNpemVZOwotICAgIH07Ci0KICAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNv
bnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7Ci0KICAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwog
Ci0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1l
dGVycyopOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZm
ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwg
dW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSk7Ci0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVs
U2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSk7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICBmbG9hdCBtX3N0ZFg7CiAgICAgZmxvYXQgbV9zdGRZOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0
aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5jcHAKaW5kZXggZTgzY2YzYjdjZDYzNjg2ZjFmNDQxZTUyMjhmMmM1NmI0ZWI0YTE4Mi4u
NmVkYzMzMTNkYjg0ZmFmYjgxOWRhMTZkZmNkODgzN2I3ZGVkZjEyZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3Bw
CkBAIC0zMCwxNSArMzAsMTQgQEAKIAogI2luY2x1ZGUgIkNvbG9yQ29udmVyc2lvbi5oIgogI2lu
Y2x1ZGUgIkZFTGlnaHRpbmdORU9OLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5o
IgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFTGlnaHRpbmc6OkZFTGlnaHRpbmcoTGlnaHRp
bmdUeXBlIGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1
cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50
LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQg
a2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSwgVHlwZSB0
eXBlKQorRkVMaWdodGluZzo6RkVMaWdodGluZyhUeXBlIHR5cGUsIGNvbnN0IENvbG9yJiBsaWdo
dGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxv
YXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVs
VW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYg
bGlnaHRTb3VyY2UpCiAgICAgOiBGaWx0ZXJFZmZlY3QodHlwZSkKLSAgICAsIG1fbGlnaHRpbmdU
eXBlKGxpZ2h0aW5nVHlwZSkKLSAgICAsIG1fbGlnaHRTb3VyY2UoV1RGTW92ZShsaWdodFNvdXJj
ZSkpCiAgICAgLCBtX2xpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xvcikKICAgICAsIG1fc3VyZmFj
ZVNjYWxlKHN1cmZhY2VTY2FsZSkKICAgICAsIG1fZGlmZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25z
dGFudCkKQEAgLTQ2LDYgKzQ1LDcgQEAgRkVMaWdodGluZzo6RkVMaWdodGluZyhMaWdodGluZ1R5
cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmwKICAgICAsIG1f
c3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KQogICAgICwgbV9rZXJuZWxVbml0TGVu
Z3RoWChrZXJuZWxVbml0TGVuZ3RoWCkKICAgICAsIG1fa2VybmVsVW5pdExlbmd0aFkoa2VybmVs
VW5pdExlbmd0aFkpCisgICAgLCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGlnaHRTb3VyY2UpKQog
ewogfQogCkBAIC04NSwxNyArODUsMTA1IEBAIGJvb2wgRkVMaWdodGluZzo6c2V0S2VybmVsVW5p
dExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXN0YXRpYyBjb25zdGV4cHIgaW50IGNQaXhlbFNpemUgPSA0Owotc3RhdGljIGNvbnN0ZXhwciBp
bnQgY0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7Ci1zdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgY09w
YXF1ZUFscGhhID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRik7CisvLyBGSVhNRTogTW92ZSB0
aGUgY2xhc3MgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5k
IGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFTGlnaHRpbmc+IHsKKyAgICB1c2luZyBCYXNl
ID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFTGlnaHRpbmc+OworCitwdWJsaWM6Cisg
ICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGNQaXhlbFNpemUgPSA0OworICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IGNBbHBoYUNoYW5uZWxPZmZzZXQgPSAzOworICAgIHN0YXRpYyBjb25zdGV4
cHIgdWludDhfdCBjT3BhcXVlQWxwaGEgPSBzdGF0aWNfY2FzdDx1aW50OF90PigweEZGKTsKKwor
ICAgIC8vIFRoZXNlIGZhY3RvcnMgYW5kIHRoZSBub3JtYWwgY29lZmZpY2llbnRzIGNvbWUgZnJv
bSB0aGUgdGFibGUgdW5kZXIgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwj
ZmVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LgorICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0Zh
Y3RvcjFkaXYyID0gLTEgLyAyLmY7CisgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9y
MWRpdjMgPSAtMSAvIDMuZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2
NCA9IC0xIC8gNC5mOworICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjJkaXYzID0g
LTIgLyAzLmY7CiAKLS8vIFRoZXNlIGZhY3RvcnMgYW5kIHRoZSBub3JtYWwgY29lZmZpY2llbnRz
IGNvbWUgZnJvbSB0aGUgdGFibGUgdW5kZXIgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0
ZXJzLmh0bWwjZmVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Lgotc3RhdGljIGNvbnN0ZXhwciBmbG9h
dCBjRmFjdG9yMWRpdjIgPSAtMSAvIDIuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3Rv
cjFkaXYzID0gLTEgLyAzLmY7Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2NCA9
IC0xIC8gNC5mOwotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMmRpdjMgPSAtMiAvIDMu
ZjsKKyAgICBzdHJ1Y3QgQWxwaGFXaW5kb3cgeworICAgICAgICB1aW50OF90IGFscGhhWzNdWzNd
IHsgfTsKKyAgICAKKyAgICAgICAgLy8gVGhlIGltcGxlbWVudGF0aW9ucyBhcmUgbGluZWQgdXAg
dG8gbWFrZSBjb21wYXJpbmcgaW5kaWNlcyBlYXNpZXIuCisgICAgICAgIHVpbnQ4X3QgdG9wTGVm
dCgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzBdOyB9CisgICAgICAgIHVp
bnQ4X3QgbGVmdCgpIGNvbnN0ICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzBdOyB9
CisgICAgICAgIHVpbnQ4X3QgYm90dG9tTGVmdCgpIGNvbnN0ICAgICAgICAgIHsgcmV0dXJuIGFs
cGhhWzJdWzBdOyB9CisKKyAgICAgICAgdWludDhfdCB0b3AoKSBjb25zdCAgICAgICAgICAgICAg
ICAgeyByZXR1cm4gYWxwaGFbMF1bMV07IH0KKyAgICAgICAgdWludDhfdCBjZW50ZXIoKSBjb25z
dCAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMV07IH0KKyAgICAgICAgdWludDhfdCBi
b3R0b20oKSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMV07IH0KKworICAg
ICAgICB2b2lkIHNldFRvcCh1aW50OF90IHZhbHVlKSAgICAgICAgICB7IGFscGhhWzBdWzFdID0g
dmFsdWU7IH0KKyAgICAgICAgdm9pZCBzZXRDZW50ZXIodWludDhfdCB2YWx1ZSkgICAgICAgeyBh
bHBoYVsxXVsxXSA9IHZhbHVlOyB9CisgICAgICAgIHZvaWQgc2V0Qm90dG9tKHVpbnQ4X3QgdmFs
dWUpICAgICAgIHsgYWxwaGFbMl1bMV0gPSB2YWx1ZTsgfQorCisgICAgICAgIHZvaWQgc2V0VG9w
UmlnaHQodWludDhfdCB2YWx1ZSkgICAgIHsgYWxwaGFbMF1bMl0gPSB2YWx1ZTsgfQorICAgICAg
ICB2b2lkIHNldFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICAgICB7IGFscGhhWzFdWzJdID0gdmFs
dWU7IH0KKyAgICAgICAgdm9pZCBzZXRCb3R0b21SaWdodCh1aW50OF90IHZhbHVlKSAgeyBhbHBo
YVsyXVsyXSA9IHZhbHVlOyB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgc2hpZnRSb3codWludDhf
dCBhbHBoYVszXSkKKyAgICAgICAgeworICAgICAgICAgICAgYWxwaGFbMF0gPSBhbHBoYVsxXTsK
KyAgICAgICAgICAgIGFscGhhWzFdID0gYWxwaGFbMl07CisgICAgICAgIH0KKyAgICAKKyAgICAg
ICAgdm9pZCBzaGlmdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzBd
KTsKKyAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzFdKTsKKyAgICAgICAgICAgIHNoaWZ0Um93
KGFscGhhWzJdKTsKKyAgICAgICAgfQorICAgIH07CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRp
bmc6OkxpZ2h0aW5nRGF0YTo6dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAorICAgIHN0
cnVjdCBMaWdodGluZ0RhdGEgeworICAgICAgICAvLyBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBv
bmx5IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKKyAgICAgICAgRkVMaWdodGluZyogZWZmZWN0
OworICAgICAgICBGaWx0ZXJFZmZlY3Q6OlR5cGUgZmlsdGVyVHlwZTsKKyAgICAgICAgQ29sb3Ig
bGlnaHRpbmdDb2xvcjsKKyAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxlOworICAgICAgICBmbG9h
dCBkaWZmdXNlQ29uc3RhbnQ7CisgICAgICAgIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQ7CisgICAg
ICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQ7CisgICAgICAgIGNvbnN0IExpZ2h0U291cmNlKiBs
aWdodFNvdXJjZTsKKyAgICAgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlKiBvcGVyYXRp
bmdDb2xvclNwYWNlOworCisgICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7CisgICAg
ICAgIGludCB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAgaW50IHdpZHRoOwor
ICAgICAgICBpbnQgaGVpZ2h0OworCisgICAgICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIHRvcFJvd05vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAgICAgaW5saW5lIEludFNpemUgdG9wUmlnaHROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5O
b3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIGludGVyaW9y
Tm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93JikgY29uc3Q7CisgICAgICAgIGlubGluZSBJ
bnRTaXplIHJpZ2h0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAgICBpbmxp
bmUgSW50U2l6ZSBib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAgICBp
bmxpbmUgSW50U2l6ZSBib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgICAg
IGlubGluZSBJbnRTaXplIGJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAg
IH07CisKKyAgICBzdHJ1Y3QgQXBwbHlQYXJhbWV0ZXJzIHsKKyAgICAgICAgTGlnaHRpbmdEYXRh
IGRhdGE7CisgICAgICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwor
ICAgICAgICBpbnQgeVN0YXJ0OworICAgICAgICBpbnQgeUVuZDsKKyAgICB9OworCisgICAgc3Rh
dGljIHZvaWQgc2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEm
LCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBm
YWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9hdCBhbHBo
YSk7CisgICAgc3RhdGljIHZvaWQgc2V0UGl4ZWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdE
YXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxv
YXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3Rvcik7CisKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0
YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgc3RhcnRZLCBpbnQgZW5k
WSk7CisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWNXb3JrZXIoQXBwbHlQYXJh
bWV0ZXJzKik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgTGln
aHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOworICAgIHN0YXRp
YyB2b2lkIGFwcGx5UGxhdGZvcm0oY29uc3QgTGlnaHRpbmdEYXRhJik7Cit9OworCitpbmxpbmUg
SW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRvcExlZnRO
b3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGlu
dCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0xMDgsNyArMTk2LDcgQEAgaW5saW5lIElu
dFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQp
IGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJbnRTaXplIEZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9ybWFsKGludCBvZmZz
ZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGludCBj
ZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7CkBAIC0xMjMsNyArMjExLDcgQEAgaW5saW5lIEludFNpemUgRkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKICAgICB9Owog
fQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVB
cHBsaWVyOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7
CiAgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGludCBjZW50ZXIgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
CkBAIC0xMzYsNyArMjI0LDcgQEAgaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjp0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAKLWlubGlu
ZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdAoraW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6
TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAg
aW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKICAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwpAQCAt
MTUyLDcgKzI0MCw3IEBAIGlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAKLWlubGluZSBJ
bnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwoaW50IG9mZnNl
dCwgQWxwaGFXaW5kb3cmIGFscGhhV2luZG93KSBjb25zdAoraW5saW5lIEludFNpemUgRkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbChpbnQgb2Zm
c2V0LCBBbHBoYVdpbmRvdyYgYWxwaGFXaW5kb3cpIGNvbnN0CiB7CiAgICAgaW50IHJpZ2h0QWxw
aGFPZmZzZXQgPSBvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldDsKICAg
ICAKQEAgLTE4Miw3ICsyNzAsNyBAQCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGlu
Z0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93JgogICAgIH07CiB9
CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5O
b3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2Fy
ZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29u
c3QKIHsKICAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAgICAgaW50IGNlbnRlciA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKQEAgLTE5OCw3ICsyODYsNyBAQCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdo
dGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0K
IAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVB
cHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QK
IHsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7CkBAIC0yMTEsNyArMjk5LDcgQEAgaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRp
bmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0KIAot
aW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwo
aW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAg
ICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGludCBjZW50ZXIgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBA
IC0yMjYsNyArMzE0LDcgQEAgaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRh
Ojpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKICAgICB9OwogfQogCi1pbmxpbmUg
SW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpM
aWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAg
aW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0y
MzksMjEgKzMyNywxNiBAQCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6
OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotdm9pZCBG
RUxpZ2h0aW5nOjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEs
IGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGlu
dCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9y
KQotewotICAgIHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgs
IHksIGZhY3RvclgsIGZhY3RvclksIG5vcm1hbDJEVmVjdG9yLCBkYXRhLnBpeGVscy0+aXRlbShv
ZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci19Ci0KLXZvaWQgRkVMaWdodGluZzo6c2V0
UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0
IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBm
bG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9h
dCBhbHBoYSkKK3ZvaWQgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6c2V0UGl4ZWxJbnRlcm5h
bChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNl
OjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JY
LCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9hdCBhbHBoYSkKIHsK
ICAgICBmbG9hdCB6ID0gYWxwaGEgKiBkYXRhLnN1cmZhY2VTY2FsZTsKLSAgICBMaWdodFNvdXJj
ZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgbGlnaHRpbmdEYXRhID0gbV9saWdodFNvdXJjZS0+Y29t
cHV0ZVBpeGVsTGlnaHRpbmdEYXRhKHBhaW50aW5nRGF0YSwgeCwgeSwgeik7CisgICAgTGlnaHRT
b3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIGxpZ2h0aW5nRGF0YSA9IGRhdGEubGlnaHRTb3Vy
Y2UtPmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShwYWludGluZ0RhdGEsIHgsIHksIHopOwogCiAg
ICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKICAgICBpZiAobm9ybWFsMkRWZWN0b3IuaXNaZXJvKCkp
IHsKICAgICAgICAgLy8gTm9ybWFsIHZlY3RvciBpcyAoMCwgMCwgMSkuIFRoaXMgaXMgYSBxdWl0
ZSBmcmVxdWVudCBjYXNlLgotICAgICAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRkVMaWdodGlu
Zzo6RGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fZGlmZnVz
ZUNvbnN0YW50ICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSAvIGxpZ2h0aW5nRGF0YS5s
aWdodFZlY3Rvckxlbmd0aDsKKyAgICAgICAgaWYgKGRhdGEuZWZmZWN0LT5maWx0ZXJUeXBlKCkg
PT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykKKyAgICAgICAgICAgIGxp
Z2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0YS5saWdodFZl
Y3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGg7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7CiAgICAgICAgICAg
ICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKQEAgLTI2MSwxMCArMzQ0LDEwIEBA
IHZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdo
dGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpCiAgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxp
Z2h0VmVjdG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAogICAgICAgICAg
ICAgfTsKICAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVj
dG9yLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxKQot
ICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBoYWxm
d2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGg7CisgICAgICAgICAgICBpZiAoZGF0
YS5zcGVjdWxhckV4cG9uZW50ID09IDEpCisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9
IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rv
ckxlbmd0aDsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3Ro
ID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93ZihoYWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlW
ZWN0b3JMZW5ndGgsIG1fc3BlY3VsYXJFeHBvbmVudCk7CisgICAgICAgICAgICAgICAgbGlnaHRT
dHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoaGFsZndheVZlY3Rvci56KCkg
LyBoYWxmd2F5VmVjdG9yTGVuZ3RoLCBkYXRhLnNwZWN1bGFyRXhwb25lbnQpOwogICAgICAgICB9
CiAgICAgfSBlbHNlIHsKICAgICAgICAgRmxvYXRQb2ludDNEIG5vcm1hbFZlY3RvciA9IHsKQEAg
LTI3NCw4ICszNTcsOCBAQCB2b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9m
ZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaQogICAgICAgICB9OwogICAg
ICAgICBmbG9hdCBub3JtYWxWZWN0b3JMZW5ndGggPSBub3JtYWxWZWN0b3IubGVuZ3RoKCk7CiAK
LSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGlu
ZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIChub3Jt
YWxWZWN0b3IgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0
aCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CisgICAgICAgIGlmIChkYXRhLmVm
ZmVjdC0+ZmlsdGVyVHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZmdXNlTGlnaHRp
bmcpCisgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5kaWZmdXNlQ29uc3RhbnQgKiAo
bm9ybWFsVmVjdG9yICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yKSAvIChub3JtYWxWZWN0b3JM
ZW5ndGggKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gewogICAgICAgICAgICAg
ICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci54KCksCkBAIC0yODMsMTAgKzM2NiwxMCBAQCB2
b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRp
bmdEYXRhJiBkYXRhLCBjb25zdCBMaQogICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdo
dFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgKICAgICAgICAgICAg
IH07CiAgICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rv
ci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMSkKLSAg
ICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogKG5vcm1h
bFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlW
ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgaWYgKGRhdGEuc3BlY3VsYXJFeHBvbmVudCA9PSAx
KQorICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQg
KiAobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICog
aGFsZndheVZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
bGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoKG5vcm1hbFZlY3RvciAq
IGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5n
dGgpLCBtX3NwZWN1bGFyRXhwb25lbnQpOworICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGgg
PSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKChub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVj
dG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3RoKSwgZGF0YS5z
cGVjdWxhckV4cG9uZW50KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzA0LDggKzM4NywxMyBA
QCB2b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGln
aHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaQogICAgIGRhdGEucGl4ZWxzLT5zZXRSYW5nZShwaXhl
bFZhbHVlLCAzLCBvZmZzZXQpOwogfQogCit2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6
OnNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGln
aHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0
IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IpCit7CisgICAg
c2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgZmFjdG9y
WCwgZmFjdG9yWSwgbm9ybWFsMkRWZWN0b3IsIGRhdGEucGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKK30KKwogLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgZnJvbSBh
bmQgd3JpdGUgdG8gdGhlIHNhbWUgcGl4ZWwgYnVmZmVyLCBidXQgaXQgb25seSByZWFkcyB0aGUg
YWxwaGEgY2hhbm5lbCwgYW5kIHdyaXRlcyB0aGUgbm9uLWFscGhhIGNoYW5uZWxzLgotdm9pZCBG
RUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYg
ZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQg
c3RhcnRZLCBpbnQgZW5kWSkKK3ZvaWQgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQ
bGF0Zm9ybUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkp
CiB7CiAgICAgLy8gTWFrZSBzdXJlIHN0YXJ0WSBpcyA+IDAgc2luY2Ugd2UgcmVhZCBmcm9tIHRo
ZSBwcmV2aW91cyByb3cgaW4gdGhlIGxvb3AuCiAgICAgQVNTRVJUKHN0YXJ0WSk7CkBAIC0zMzAs
MjYgKzQxOCwzMCBAQCB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQo
Y29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodAogICAgICAgICBhbHBoYVdpbmRv
dy5zZXRCb3R0b21SaWdodChkYXRhLnBpeGVscy0+aXRlbShuZXh0Um93U3RhcnQgKyBjUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogCiAgICAgICAgIGludCBvZmZzZXQgPSByb3dT
dGFydE9mZnNldCArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0
YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKSB7CisgICAg
ICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aCAtIDE7ICsreCwgb2Zmc2V0ICs9IGNQ
aXhlbFNpemUpIHsKICAgICAgICAgICAgIGFscGhhV2luZG93LnNoaWZ0KCk7CiAgICAgICAgICAg
ICBzZXRQaXhlbEludGVybmFsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCB5LCBjRmFj
dG9yMWRpdjQsIGNGYWN0b3IxZGl2NCwgZGF0YS5pbnRlcmlvck5vcm1hbChvZmZzZXQsIGFscGhh
V2luZG93KSwgYWxwaGFXaW5kb3cuY2VudGVyKCkpOwogICAgICAgICB9CiAgICAgfQogfQogCi12
b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyKFBsYXRmb3JtQXBwbHlH
ZW5lcmljUGFyYW1ldGVycyogcGFyYW1ldGVycykKK3ZvaWQgRkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNXb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbWV0
ZXJzKQogewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVyaWNQYWlu
dChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMt
PnlTdGFydCwgcGFyYW1ldGVycy0+eUVuZCk7CisgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWlu
dChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMt
PnlTdGFydCwgcGFyYW1ldGVycy0+eUVuZCk7CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6cGxhdGZv
cm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJj
ZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCisjaWYgIShDUFUoQVJNX05FT04pICYmIENQ
VShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVSKEdDQ19DT01QQVRJQkxFKSkKK3ZvaWQgRkVM
aWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgTGlnaHRp
bmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEpCiB7Ci0gICAgdW5zaWduZWQgcm93c1RvUHJvY2VzcyA9IGRhdGEuaGVpZ2h0RGVjcmVhc2Vk
QnlPbmUgLSAxOworICAgIHVuc2lnbmVkIHJvd3NUb1Byb2Nlc3MgPSBkYXRhLmhlaWdodCAtIDI7
CiAgICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHJvd3NUb1Byb2Nlc3MgLyA4OwotICAgIHVu
c2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKChkYXRhLndp
ZHRoRGVjcmVhc2VkQnlPbmUgLSAxKSAqIHJvd3NUb1Byb2Nlc3MpIC8gc19taW5pbWFsUmVjdERp
bWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7CisgICAgCisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
bWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0
IGZvciBwYXJhbGxlbCBqb2JzCisgICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0
ZDo6bWluPHVuc2lnbmVkPigoKGRhdGEud2lkdGggLSAyKSAqIHJvd3NUb1Byb2Nlc3MpIC8gbWlu
aW1hbFJlY3REaW1lbnNpb24sIG1heE51bVRocmVhZHMpOworCiAgICAgaWYgKG9wdGltYWxUaHJl
YWROdW1iZXIgPiAxKSB7CiAgICAgICAgIC8vIEluaXRpYWxpemUgcGFyYWxsZWwgam9icwotICAg
ICAgICBQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzPiBwYXJhbGxl
bEpvYnMoJnBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsK
KyAgICAgICAgUGFyYWxsZWxKb2JzPEFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZhcHBs
eVBsYXRmb3JtR2VuZXJpY1dvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CiAKICAgICAgICAg
Ly8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5CiAgICAgICAgIGludCBqb2IgPSBwYXJhbGxlbEpv
YnMubnVtYmVyT2ZKb2JzKCk7CkBAIC0zNjEsOCArNDUzLDcgQEAgdm9pZCBGRUxpZ2h0aW5nOjpw
bGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0
U291cmMKIAogICAgICAgICAgICAgaW50IHlTdGFydCA9IDE7CiAgICAgICAgICAgICBmb3IgKC0t
am9iOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5R2Vu
ZXJpY1BhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAg
ICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhpczsKKyAgICAgICAgICAgICAgICBBcHBs
eVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKICAgICAg
ICAgICAgICAgICBwYXJhbXMuZGF0YSA9IGRhdGE7CiAgICAgICAgICAgICAgICAgcGFyYW1zLnBh
aW50aW5nRGF0YSA9IHBhaW50aW5nRGF0YTsKICAgICAgICAgICAgICAgICBwYXJhbXMueVN0YXJ0
ID0geVN0YXJ0OwpAQCAtMzc1LDM5ICs0NjYsMTggQEAgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9y
bUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmMK
ICAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZGVkIG1vZGUuCiAgICAgfQogCi0g
ICAgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChkYXRhLCBwYWludGluZ0RhdGEsIDEsIGRhdGEu
aGVpZ2h0RGVjcmVhc2VkQnlPbmUpOworICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljUGFpbnQoZGF0
YSwgcGFpbnRpbmdEYXRhLCAxLCBkYXRhLmhlaWdodCAtIDEpOwogfQotCi1pbmxpbmUgdm9pZCBG
RUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3Qg
TGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQotewotICAgIC8vIFRoZSBz
ZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29t
ZSBwbGF0Zm9ybXMuCi0jaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAm
JiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBwbGF0Zm9ybUFwcGx5TmVvbihkYXRhLCBw
YWludGluZ0RhdGEpOwotI2Vsc2UKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhkYXRhLCBwYWlu
dGluZ0RhdGEpOwogI2VuZGlmCi19CiAKLWJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVp
bnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3ZvaWQgRkVM
aWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShjb25zdCBMaWdodGluZ0RhdGEm
IGRhdGEpCiB7CiAgICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0g
ICAgTGlnaHRpbmdEYXRhIGRhdGE7Ci0KLSAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIGlmIHdp
ZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4KLSAgICAvLyBUaGUgVzMgc3BlYyBk
b2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZpbHRlciBqdXN0IHJldHVybnMuCi0g
ICAgaWYgKHdpZHRoIDw9IDIgfHwgaGVpZ2h0IDw9IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGRhdGEucGl4ZWxzID0gJnBpeGVsczsKLSAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1f
c3VyZmFjZVNjYWxlIC8gMjU1LjBmOwotICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emUgPSB3aWR0aCAqIGNQaXhlbFNpemU7Ci0gICAgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lID0g
d2lkdGggLSAxOwotICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgPSBoZWlnaHQgLSAxOwot
Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2xpZ2h0aW5nQ29sb3IudG9Db2xvckNvbXBvbmVu
dHNJbkNvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBhdXRvIFtyLCBnLCBi
LCBhXSA9IGRhdGEubGlnaHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50c0luQ29sb3JTcGFjZSgq
ZGF0YS5vcGVyYXRpbmdDb2xvclNwYWNlKTsKICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0
aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsKIAotICAgIG1fbGln
aHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKnRoaXMsIHBhaW50aW5nRGF0YSk7CisgICAgZGF0
YS5saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqZGF0YS5lZmZlY3QsIHBhaW50aW5nRGF0
YSk7CiAKICAgICAvLyBUb3AgbGVmdC4KICAgICBpbnQgb2Zmc2V0ID0gMDsKQEAgLTQxNSw0NyAr
NDg1LDQ3IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5
JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIAogICAgIC8vIFRvcCByaWdodC4KICAg
ICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsK
LSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3Jl
YXNlZEJ5T25lLCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS50b3BSaWdodE5v
cm1hbChvZmZzZXQpKTsKKyAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwg
ZGF0YS53aWR0aCAtIDEsIDAsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLnRvcFJp
Z2h0Tm9ybWFsKG9mZnNldCkpOwogCiAgICAgLy8gQm90dG9tIGxlZnQuCi0gICAgb2Zmc2V0ID0g
ZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIGRhdGEuaGVp
Z2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRv
bUxlZnROb3JtYWwob2Zmc2V0KSk7CisgICAgb2Zmc2V0ID0gKGRhdGEuaGVpZ2h0IC0gMSkgKiBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIHNldFBpeGVsKG9mZnNldCwgZGF0
YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhlaWdodCAtIDEsIGNGYWN0b3IyZGl2MywgY0ZhY3Rv
cjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3JtYWwob2Zmc2V0KSk7CiAKICAgICAvLyBCb3R0b20g
cmlnaHQuCi0gICAgb2Zmc2V0ID0gaGVpZ2h0ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0Rh
dGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwg
Y0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tUmlnaHROb3JtYWwob2Zmc2V0
KSk7CisgICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHQgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5n
RGF0YSwgZGF0YS53aWR0aCAtIDEsIGRhdGEuaGVpZ2h0IC0gMSwgY0ZhY3RvcjJkaXYzLCBjRmFj
dG9yMmRpdjMsIGRhdGEuYm90dG9tUmlnaHROb3JtYWwob2Zmc2V0KSk7CiAKLSAgICBpZiAod2lk
dGggPj0gMykgeworICAgIGlmIChkYXRhLndpZHRoID49IDMpIHsKICAgICAgICAgLy8gVG9wIHJv
dy4KICAgICAgICAgb2Zmc2V0ID0gY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDE7
IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUp
CisgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aCAtIDE7ICsreCwgb2Zmc2V0
ICs9IGNQaXhlbFNpemUpCiAgICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50
aW5nRGF0YSwgeCwgMCwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEudG9wUm93Tm9y
bWFsKG9mZnNldCkpOwogCiAgICAgICAgIC8vIEJvdHRvbSByb3cuCi0gICAgICAgIG9mZnNldCA9
IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplICsgY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRo
RGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCi0gICAgICAgICAgICBz
ZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgZGF0YS5oZWlnaHREZWNyZWFz
ZWRCeU9uZSwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEuYm90dG9tUm93Tm9ybWFs
KG9mZnNldCkpOworICAgICAgICBvZmZzZXQgPSAoZGF0YS5oZWlnaHQgLSAxKSAqIGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplOworICAgICAgICBmb3IgKGludCB4
ID0gMTsgeCA8IGRhdGEud2lkdGggLSAxOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQorICAg
ICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIGRhdGEuaGVp
Z2h0IC0gMSwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIGRhdGEuYm90dG9tUm93Tm9ybWFs
KG9mZnNldCkpOwogICAgIH0KIAotICAgIGlmIChoZWlnaHQgPj0gMykgeworICAgIGlmIChkYXRh
LmhlaWdodCA+PSAzKSB7CiAgICAgICAgIC8vIExlZnQgY29sdW1uLgogICAgICAgICBvZmZzZXQg
PSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB5ID0g
MTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCisgICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0
YS5oZWlnaHQgLSAxOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplKQogICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAs
IHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLmxlZnRDb2x1bW5Ob3JtYWwob2Zm
c2V0KSk7CiAKICAgICAgICAgLy8gUmlnaHQgY29sdW1uLgogICAgICAgICBvZmZzZXQgPSAyICog
ZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgICAgIGZv
ciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBvZmZzZXQg
Kz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBpeGVs
KG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIHks
IGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLnJpZ2h0Q29sdW1uTm9ybWFsKG9mZnNl
dCkpOworICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0IC0gMTsgKyt5LCBv
ZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkKKyAgICAgICAgICAgIHNl
dFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoIC0gMSwgeSwgY0Zh
Y3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEucmlnaHRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7
CiAgICAgfQogCi0gICAgaWYgKHdpZHRoID49IDMgJiYgaGVpZ2h0ID49IDMpIHsKKyAgICBpZiAo
ZGF0YS53aWR0aCA+PSAzICYmIGRhdGEuaGVpZ2h0ID49IDMpIHsKICAgICAgICAgLy8gSW50ZXJp
b3IgcGl4ZWxzLgotICAgICAgICBwbGF0Zm9ybUFwcGx5KGRhdGEsIHBhaW50aW5nRGF0YSk7Cisg
ICAgICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKGRhdGEsIHBhaW50aW5nRGF0YSk7CiAgICAgfQog
Ci0gICAgaW50IGxhc3RQaXhlbCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKiBo
ZWlnaHQ7Ci0gICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IERpZmZ1c2VMaWdodGluZykgeworICAg
IGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICogZGF0YS5o
ZWlnaHQ7CisgICAgaWYgKGRhdGEuZWZmZWN0LT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0
OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykgewogICAgICAgICBmb3IgKGludCBpID0gY0FscGhh
Q2hhbm5lbE9mZnNldDsgaSA8IGxhc3RQaXhlbDsgaSArPSBjUGl4ZWxTaXplKQogICAgICAgICAg
ICAgZGF0YS5waXhlbHMtPnNldChpLCBjT3BhcXVlQWxwaGEpOwogICAgIH0gZWxzZSB7CkBAIC00
NjcsMzIgKzUzNyw1NyBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1w
ZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgICAgICAgICBkYXRh
LnBpeGVscy0+c2V0KGkgKyAzLCBhMSA+PSBhMiA/IChhMSA+PSBhMyA/IGExIDogYTMpIDogKGEy
ID49IGEzID8gYTIgOiBhMykpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYpCitib29sIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYs
IGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3RzWzBdLmdldCgpOwogCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IGNy
ZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIgPSBtX2VmZmVjdC5jcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAg
ICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIt
PmRhdGEoKTsKIAotICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7CisgICAgbV9lZmZlY3Quc2V0
SXNBbHBoYUltYWdlKGZhbHNlKTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXks
IGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIEludFJlY3Qg
ZWZmZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxC
dWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGluLT5jb3B5UHJlbXVsdGlwbGll
ZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBtX2VmZmVj
dC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgIC8vIEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVu
aXRMZW5ndGhzIG90aGVyIHRoYW4gKDEsMSkuIFRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFcz
CiAgICAgLy8gc3RhbmRhcmQgaGFzIG5vIHRlc3QgY2FzZSBmb3IgdGhlbSwgYW5kIG90aGVyIGJy
b3dzZXJzIChsaWtlIEZpcmVmb3gpIGhhcyBzdHJhbmdlCiAgICAgLy8gb3V0cHV0IGZvciB2YXJp
b3VzIGtlcm5lbFVuaXRMZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJs
ZS4KICAgICAvLyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBp
bXBsZW1lbnRhdGlvbgogCi0gICAgSW50U2l6ZSBhYnNvbHV0ZVBhaW50U2l6ZSA9IGFic29sdXRl
UGFpbnRSZWN0KCkuc2l6ZSgpOwotICAgIGRyYXdMaWdodGluZyhkZXN0aW5hdGlvblBpeGVsQXJy
YXksIGFic29sdXRlUGFpbnRTaXplLndpZHRoKCksIGFic29sdXRlUGFpbnRTaXplLmhlaWdodCgp
KTsKKyAgICBJbnRTaXplIHNpemUgPSBJbnRTaXplKG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpKTsKKworICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGggb3IgaGVp
Z2h0IChvciBib3RoKSBpcyAxIHBpeGVsLgorICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMgbm90IGRl
ZmluZSB0aGlzIGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KKyAgICBpZiAoc2l6
ZS53aWR0aCgpIDw9IDIgfHwgc2l6ZS5oZWlnaHQoKSA8PSAyKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIExpZ2h0aW5nRGF0YSBkYXRhOworICAgIGRhdGEuZWZmZWN0ID0gJm1fZWZmZWN0
OworICAgIGRhdGEuZmlsdGVyVHlwZSA9IG1fZWZmZWN0LmZpbHRlclR5cGUoKTsKKyAgICBkYXRh
LmxpZ2h0aW5nQ29sb3IgPSBtX2VmZmVjdC5saWdodGluZ0NvbG9yKCk7CisgICAgZGF0YS5zdXJm
YWNlU2NhbGUgPSBtX2VmZmVjdC5zdXJmYWNlU2NhbGUoKSAvIDI1NS4wZjsKKyAgICBkYXRhLmRp
ZmZ1c2VDb25zdGFudCA9IG1fZWZmZWN0LmRpZmZ1c2VDb25zdGFudCgpOworICAgIGRhdGEuc3Bl
Y3VsYXJDb25zdGFudCA9IG1fZWZmZWN0LnNwZWN1bGFyQ29uc3RhbnQoKTsKKyAgICBkYXRhLnNw
ZWN1bGFyRXhwb25lbnQgPSBtX2VmZmVjdC5zcGVjdWxhckV4cG9uZW50KCk7CisgICAgZGF0YS5s
aWdodFNvdXJjZSA9ICZtX2VmZmVjdC5saWdodFNvdXJjZSgpOworICAgIGRhdGEub3BlcmF0aW5n
Q29sb3JTcGFjZSA9ICZtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCk7CisKKyAgICBkYXRh
LnBpeGVscyA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CisgICAgZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSA9IHNpemUud2lkdGgoKSAqIGNQaXhlbFNpemU7CisgICAgZGF0YS53aWR0
aCA9IHNpemUud2lkdGgoKTsKKyAgICBkYXRhLmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisKKyAg
ICBhcHBseVBsYXRmb3JtKGRhdGEpOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEZFTGln
aHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAg
ICByZXR1cm4gRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBp
bnB1dEVmZmVjdHMoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKaW5k
ZXggYWQyZmMyOGZhOWU3ZjRiZjI5MTNkNjdiOTgwNTdmOGVlYmIwOGRiMi4uYTg0ZmU4NWEzODFm
YTg0MDc1ZTUxNjU0Y2MyYzBjNWJiOGMxYWIyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKQEAgLTI5LDkgKzI5LDYg
QEAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1
ZGUgIkxpZ2h0U291cmNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgot
Ci0vLyBDb21tb24gYmFzZSBjbGFzcyBmb3IgRkVEaWZmdXNlTGlnaHRpbmcgYW5kIEZFU3BlY3Vs
YXJMaWdodGluZwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDExICszNiwxNSBAQCBz
dHJ1Y3QgRkVMaWdodGluZ1BhaW50aW5nRGF0YUZvck5lb247CiAKIGNsYXNzIEZFTGlnaHRpbmcg
OiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKKyAgICBjb25zdCBDb2xvciYgbGlnaHRp
bmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsgfQorICAgIGJvb2wgc2V0
TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworCiAgICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0KICAgICBib29sIHNldFN1cmZhY2VTY2Fs
ZShmbG9hdCk7CiAKLSAgICBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIG1fbGlnaHRpbmdDb2xvcjsgfQotICAgIGJvb2wgc2V0TGlnaHRpbmdDb2xvcihjb25zdCBD
b2xvciYpOworICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlm
ZnVzZUNvbnN0YW50OyB9CisgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQorICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQoKSBj
b25zdCB7IHJldHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KIAogICAgIGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhYKCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWDsgfQogICAgIGJv
b2wgc2V0S2VybmVsVW5pdExlbmd0aFgoZmxvYXQpOwpAQCAtNTQsMTAxICs1NSwxNyBAQCBwdWJs
aWM6CiAgICAgY29uc3QgTGlnaHRTb3VyY2UmIGxpZ2h0U291cmNlKCkgY29uc3QgeyByZXR1cm4g
bV9saWdodFNvdXJjZS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IGlu
dCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBs
aW1pdCBmb3IgcGFyYWxsZWwgam9icwotCi0gICAgZW51bSBMaWdodGluZ1R5cGUgewotICAgICAg
ICBEaWZmdXNlTGlnaHRpbmcsCi0gICAgICAgIFNwZWN1bGFyTGlnaHRpbmcKLSAgICB9OwotICAg
IAotICAgIHN0cnVjdCBBbHBoYVdpbmRvdyB7Ci0gICAgICAgIHVpbnQ4X3QgYWxwaGFbM11bM10g
eyB9OwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIGltcGxlbWVudGF0aW9ucyBhcmUgbGluZWQg
dXAgdG8gbWFrZSBjb21wYXJpbmcgaW5kaWNlcyBlYXNpZXIuCi0gICAgICAgIHVpbnQ4X3QgdG9w
TGVmdCgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzBdOyB9Ci0gICAgICAg
IHVpbnQ4X3QgbGVmdCgpIGNvbnN0ICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzBd
OyB9Ci0gICAgICAgIHVpbnQ4X3QgYm90dG9tTGVmdCgpIGNvbnN0ICAgICAgICAgIHsgcmV0dXJu
IGFscGhhWzJdWzBdOyB9Ci0KLSAgICAgICAgdWludDhfdCB0b3AoKSBjb25zdCAgICAgICAgICAg
ICAgICAgeyByZXR1cm4gYWxwaGFbMF1bMV07IH0KLSAgICAgICAgdWludDhfdCBjZW50ZXIoKSBj
b25zdCAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMV07IH0KLSAgICAgICAgdWludDhf
dCBib3R0b20oKSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMV07IH0KLQot
ICAgICAgICB2b2lkIHNldFRvcCh1aW50OF90IHZhbHVlKSAgICAgICAgICB7IGFscGhhWzBdWzFd
ID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRDZW50ZXIodWludDhfdCB2YWx1ZSkgICAgICAg
eyBhbHBoYVsxXVsxXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Qm90dG9tKHVpbnQ4X3Qg
dmFsdWUpICAgICAgIHsgYWxwaGFbMl1bMV0gPSB2YWx1ZTsgfQotCi0gICAgICAgIHZvaWQgc2V0
VG9wUmlnaHQodWludDhfdCB2YWx1ZSkgICAgIHsgYWxwaGFbMF1bMl0gPSB2YWx1ZTsgfQotICAg
ICAgICB2b2lkIHNldFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICAgICB7IGFscGhhWzFdWzJdID0g
dmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRCb3R0b21SaWdodCh1aW50OF90IHZhbHVlKSAgeyBh
bHBoYVsyXVsyXSA9IHZhbHVlOyB9Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgc2hpZnRSb3codWlu
dDhfdCBhbHBoYVszXSkKLSAgICAgICAgewotICAgICAgICAgICAgYWxwaGFbMF0gPSBhbHBoYVsx
XTsKLSAgICAgICAgICAgIGFscGhhWzFdID0gYWxwaGFbMl07Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIHZvaWQgc2hpZnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBzaGlmdFJvdyhh
bHBoYVswXSk7Ci0gICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVsxXSk7Ci0gICAgICAgICAgICBz
aGlmdFJvdyhhbHBoYVsyXSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3RydWN0IExpZ2h0
aW5nRGF0YSB7Ci0gICAgICAgIC8vIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIG9ubHkgcmVhZC1v
bmx5IChTTVAgc2FmZSkgZGF0YQotICAgICAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxzOwot
ICAgICAgICBmbG9hdCBzdXJmYWNlU2NhbGU7Ci0gICAgICAgIGludCB3aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZTsKLSAgICAgICAgaW50IHdpZHRoRGVjcmVhc2VkQnlPbmU7Ci0gICAgICAgIGlu
dCBoZWlnaHREZWNyZWFzZWRCeU9uZTsKLQotICAgICAgICBpbmxpbmUgSW50U2l6ZSB0b3BMZWZ0
Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSB0b3BSb3dO
b3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcFJpZ2h0
Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBsZWZ0Q29s
dW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBpbnRl
cmlvck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYpIGNvbnN0OwotICAgICAgICBpbmxp
bmUgSW50U2l6ZSByaWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAg
aW5saW5lIEludFNpemUgYm90dG9tTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAg
ICAgaW5saW5lIEludFNpemUgYm90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAg
ICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsK
LSAgICB9OwotCi0gICAgc3RydWN0IFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyB7Ci0g
ICAgICAgIEZFTGlnaHRpbmcqIGZpbHRlcjsKLSAgICAgICAgTGlnaHRpbmdEYXRhIGRhdGE7Ci0g
ICAgICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgICAgICBp
bnQgeVN0YXJ0OwotICAgICAgICBpbnQgeUVuZDsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQg
cGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJz
Kik7Ci0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseU5lb25Xb3JrZXIoRkVMaWdodGluZ1Bh
aW50aW5nRGF0YUZvck5lb24qKTsKLQotICAgIEZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlLCBjb25z
dCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNl
Q29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQs
IGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExp
Z2h0U291cmNlPiYmLCBUeXBlKTsKLQotICAgIGJvb2wgZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBl
ZEFycmF5JiwgaW50LCBpbnQpOwotCi0gICAgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25z
dCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgs
IGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZlY3Rv
cik7Ci0gICAgdm9pZCBzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5n
RGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZs
b2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yLCBmbG9hdCBh
bHBoYSk7CisgICAgRkVMaWdodGluZyhUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwg
ZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFy
Q29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIAogICAgIHZv
aWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9
CiAKICAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlk
ZTsKIAotICAgIHZvaWQgcGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBM
aWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5l
cmljUGFpbnQoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5n
RGF0YSYsIGludCBzdGFydFgsIGludCBzdGFydFkpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdl
bmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0
YSYpOwotCiAjaWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01Q
SUxFUihHQ0NfQ09NUEFUSUJMRSkKICAgICBzdGF0aWMgaW50IGdldFBvd2VyQ29lZmZpY2llbnRz
KGZsb2F0IGV4cG9uZW50KTsKICAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5TmVvbihjb25z
dCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7CiAjZW5k
aWYKIAotICAgIExpZ2h0aW5nVHlwZSBtX2xpZ2h0aW5nVHlwZTsKLSAgICBSZWY8TGlnaHRTb3Vy
Y2U+IG1fbGlnaHRTb3VyY2U7Ci0KICAgICBDb2xvciBtX2xpZ2h0aW5nQ29sb3I7CiAgICAgZmxv
YXQgbV9zdXJmYWNlU2NhbGU7CiAgICAgZmxvYXQgbV9kaWZmdXNlQ29uc3RhbnQ7CkBAIC0xNTYs
NyArNzMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50OwogICAg
IGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFg7CiAgICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3Ro
WTsKKyAgICBSZWY8TGlnaHRTb3VyY2U+IG1fbGlnaHRTb3VyY2U7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCmluZGV4IDExYmM4Nzk1Nzg3ZWE0MjE3ZjA4MDZmN2M1NjNl
MGY1OGFjNWEwMmMuLjRlZDIyZDQ0NGQ1OTkxYmU2NDIxZWE4OWQ1MmIwZTgzMWExMDAyMzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1l
cmdlLmNwcApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZFTWVyZ2UuaCIKIAorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTM4LDI1ICszOSw0MSBAQCBGRU1lcmdlOjpGRU1l
cmdlKCkKIHsKIH0KIAotYm9vbCBGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJikKKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRU1lcmdlU29mdHdhcmVBcHBsaWVy
IHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVNZXJnZVNvZnR3
YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVNZXJnZT4g
eworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVNZXJnZT47
CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25z
dCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJp
ZGU7Cit9OworCitib29sIEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRl
ciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIHVuc2ln
bmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7
CisgICAgQVNTRVJUKGlucHV0RWZmZWN0cy5zaXplKCkgPiAwKTsKIAotICAgIEltYWdlQnVmZmVy
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byByZXN1
bHRJbWFnZSA9IG1fZWZmZWN0LmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFy
ZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgR3JhcGhpY3NDb250ZXh0
JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdChpKTsKLSAgICAgICAgaWYgKEltYWdlQnVmZmVyKiBpbkJ1ZmZlciA9IGluLT5p
bWFnZUJ1ZmZlclJlc3VsdCgpKQotICAgICAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7CisgICAgYXV0byYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250
ZXh0KCk7CisKKyAgICBmb3IgKGF1dG8mIGluIDogaW5wdXRFZmZlY3RzKSB7CisgICAgICAgIGF1
dG8gaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICAgICAgaWYgKCFpbkJ1
ZmZlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW5CdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorYm9vbCBGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCit7CisgICAgcmV0dXJuIEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZp
bHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBUZXh0U3RyZWFtJiBGRU1lcmdlOjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVz
ZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVNZXJnZSI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhv
bG9neS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9y
cGhvbG9neS5jcHAKaW5kZXggNDMyODhkOWU1OTJmMDI4MjgzODQyZTc5MjRiNzExNWZjOGY2YzI3
Ni4uMzFjZDFiOGI5YjY5MzdkMjI1YmRmNGM4OTY5NmI1MGIzYjcxMjkyNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9s
b2d5LmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgog
I2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJG
aWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRl
IDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtODMsMjMg
Kzg0LDQ4IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChj
b25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KHBhaW50UmVjdCkpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5k
ZXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgpCi17Ci0gICAgcmV0dXJuICh5ICogd2lkdGggKyB4
KSAqIDQ7Ci19CisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVNb3JwaG9sb2d5U29mdHdhcmVB
cHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVNb3Jw
aG9sb2d5U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGll
cjxGRU1vcnBob2xvZ3k+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVB
cHBsaWVyPEZFTW9ycGhvbG9neT47CiAKLWlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBp
eGVsKQotewotICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKSk7Ci19
CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKIAotaW5saW5lIFBhY2tlZENvbG9yOjpS
R0JBIG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVu
dHM8dWludDhfdCwgND4mIGNvbXBvbmVudHMpCi17Ci0gICAgcmV0dXJuIFBhY2tlZENvbG9yOjpS
R0JBIHsgbWFrZUZyb21Db21wb25lbnRzPFNSR0JBPHVpbnQ4X3Q+Pihjb21wb25lbnRzKSB9Owot
fQorICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9y
JiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHVzaW5nIENvbHVtbkV4
dHJlbWEgPSBWZWN0b3I8Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+LCAxNj47CisKKyAgICBz
dHJ1Y3QgUGFpbnRpbmdEYXRhIHsKKyAgICAgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBl
OworICAgICAgICBpbnQgcmFkaXVzWDsKKyAgICAgICAgaW50IHJhZGl1c1k7CisgICAgICAgIGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5KiBzcmNQaXhlbEFycmF5OworICAgICAgICBVaW50OENsYW1w
ZWRBcnJheSogZHN0UGl4ZWxBcnJheTsKKyAgICAgICAgaW50IHdpZHRoOworICAgICAgICBpbnQg
aGVpZ2h0OworICAgIH07CisKKyAgICBzdHJ1Y3QgQXBwbHlQYXJhbWV0ZXJzIHsKKyAgICAgICAg
Y29uc3QgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7CisgICAgICAgIGludCBzdGFydFk7Cisg
ICAgICAgIGludCBlbmRZOworICAgIH07CisKKyAgICBzdGF0aWMgaW5saW5lIGludCBwaXhlbEFy
cmF5SW5kZXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgpIHsgcmV0dXJuICh5ICogd2lkdGggKyB4
KSAqIDQ7IH0KKyAgICBzdGF0aWMgaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQaXhlbFZh
bHVlRnJvbUNvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4m
IGNvbXBvbmVudHMpIHsgcmV0dXJuIFBhY2tlZENvbG9yOjpSR0JBIHsgbWFrZUZyb21Db21wb25l
bnRzPFNSR0JBPHVpbnQ4X3Q+Pihjb21wb25lbnRzKSB9OyB9CisKKyAgICBzdGF0aWMgaW5saW5l
IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVs
VmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgcGl4ZWwpIHsgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRz
KGFzU1JHQkEocGl4ZWwpKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVp
bnQ4X3QsIDQ+IG1pbk9yTWF4KGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYSwg
Y29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBiLCBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlKTsKKyAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1
bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgs
IGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUp
OworICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4
dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yVHlw
ZSk7CiAKLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZT4KLUFMV0FZU19JTkxJ
TkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNvbnN0IENvbG9yQ29tcG9u
ZW50czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBi
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0
YSYsIGludCBzdGFydFksIGludCBlbmRZKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3Jt
V29ya2VyKEFwcGx5UGFyYW1ldGVycyopOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm0o
Y29uc3QgUGFpbnRpbmdEYXRhJik7Cit9OworCitpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4
X3QsIDQ+IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWluT3JNYXgoY29uc3QgQ29sb3JD
b21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4mIGIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKIHsKICAgICBpZiAodHlwZSA9PSBG
RU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCiAgICAgICAgIHJldHVybiBwZXJDb21wb25lbnRN
aW4oYSwgYik7CkBAIC0xMDcsNDcgKzEzMywyNyBAQCBBTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9u
ZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdAog
ICAgIHJldHVybiBwZXJDb21wb25lbnRNYXgoYSwgYik7CiB9CiAKLXRlbXBsYXRlPE1vcnBob2xv
Z3lPcGVyYXRvclR5cGUgdHlwZT4KLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4
X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFy
cmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCkKK2lubGluZSBDb2xv
ckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpjb2x1
bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgs
IGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUg
dHlwZSkKIHsKICAgICBhdXRvIGV4dHJlbXVtID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhl
bFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQqPihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5U3RhcnQsIHdp
ZHRoKSkgfSk7CiAKICAgICBmb3IgKGludCB5ID0geVN0YXJ0ICsgMTsgeSA8IHlFbmQ7ICsreSkg
ewogICAgICAgICBhdXRvIHBpeGVsID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVl
KFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihz
cmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpIH0pOwot
ICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4PHR5cGU+KGV4dHJlbXVtLCBwaXhlbCk7CisgICAg
ICAgIGV4dHJlbXVtID0gbWluT3JNYXgoZXh0cmVtdW0sIHBpeGVsLCB0eXBlKTsKICAgICB9CiAg
ICAgcmV0dXJuIGV4dHJlbXVtOwogfQogCi1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1
aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4
ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xv
Z3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BF
UkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xPR1lf
T1BFUkFUT1JfRVJPREU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOwot
Ci0gICAgcmV0dXJuIGNvbHVtbkV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+
KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOwotfQotCi11c2luZyBDb2x1
bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+OwotCi10
ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9y
Q29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1h
JiBrZXJuZWwpCitpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFTW9ycGhvbG9n
eVNvZnR3YXJlQXBwbGllcjo6a2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2Vy
bmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCiB7CiAgICAgYXV0byBleHRyZW11bSA9
IGtlcm5lbFswXTsKICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGtlcm5lbC5zaXplKCk7ICsr
aSkKLSAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwga2VybmVsW2ld
KTsKKyAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heChleHRyZW11bSwga2VybmVsW2ldLCB0eXBl
KTsKIAogICAgIHJldHVybiBleHRyZW11bTsKIH0KIAotQUxXQVlTX0lOTElORSBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2Vy
bmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVN
T1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAgICByZXR1cm4ga2VybmVsRXh0cmVtdW08
RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFPihrZXJuZWwpOwotCi0gICAgcmV0dXJuIGtlcm5l
bEV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KGtlcm5lbCk7Ci19Ci0KLXZv
aWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCit2b2lkIEZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsIGludCBzdGFydFksIGludCBlbmRZKQogewogICAgIEFTU0VSVChlbmRZID4g
c3RhcnRZKTsKIApAQCAtMTczLDI4ICsxNzksMjggQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRm
b3JtQXBwbHlHZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3QK
IAogICAgICAgICAvLyBXZSBzdGFydCBhdCB0aGUgbGVmdCBlZGdlLCBzbyBjb21wdXRlIGV4dHJl
bWUgZm9yIHRoZSByYWRpdXNYIGNvbHVtbnMuCiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
cmFkaXVzWDsgKyt4KQotICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0o
c3JjUGl4ZWxBcnJheSwgeCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgbV90eXBl
KSk7CisgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFy
cmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBwYWludGluZ0RhdGEudHlw
ZSkpOwogCiAgICAgICAgIC8vIEtlcm5lbCBpcyBmaWxsZWQsIGdldCBleHRyZW1hIG9mIG5leHQg
Y29sdW1uCiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCkgewogICAgICAg
ICAgICAgaWYgKHggPCB3aWR0aCAtIHJhZGl1c1gpCi0gICAgICAgICAgICAgICAgZXh0cmVtYS5h
cHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCArIHJhZGl1c1gsIHlSYWRpdXNT
dGFydCwgeVJhZGl1c0VuZCwgd2lkdGgsIG1fdHlwZSkpOworICAgICAgICAgICAgICAgIGV4dHJl
bWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFk
aXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBwYWludGluZ0RhdGEudHlwZSkpOwogCiAgICAg
ICAgICAgICBpZiAoeCA+IHJhZGl1c1gpCiAgICAgICAgICAgICAgICAgZXh0cmVtYS5yZW1vdmUo
MCk7CiAKICAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0UGl4ZWwgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkKj4oZHN0UGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwg
d2lkdGgpKTsKLSAgICAgICAgICAgICpkZXN0UGl4ZWwgPSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xv
ckNvbXBvbmVudHMoa2VybmVsRXh0cmVtdW0oZXh0cmVtYSwgbV90eXBlKSkudmFsdWU7CisgICAg
ICAgICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtl
cm5lbEV4dHJlbXVtKGV4dHJlbWEsIHBhaW50aW5nRGF0YS50eXBlKSkudmFsdWU7CiAgICAgICAg
IH0KICAgICB9CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKFBs
YXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbSkKK3ZvaWQgRkVNb3JwaG9sb2d5U29mdHdhcmVB
cHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1zKQogewot
ICAgIHBhcmFtLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRpbmdE
YXRhLCBwYXJhbS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7CisgICAgYXBwbHlQbGF0Zm9ybUdlbmVy
aWMoKnBhcmFtcy0+cGFpbnRpbmdEYXRhLCBwYXJhbXMtPnN0YXJ0WSwgcGFyYW1zLT5lbmRZKTsK
IH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHkoY29uc3QgUGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEpCit2b2lkIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQ
bGF0Zm9ybShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKIHsKICAgICAvLyBFbXBp
cmljYWxseSwgcnVudGltZSBpcyBhcHByb3hpbWF0ZWx5IGxpbmVhciBvdmVyIHJlYXNvbmFibGUg
a2VybmVsIHNpemVzIHdpdGggYSBzbG9wZSBvZiBhYm91dCAwLjY1LgogICAgIGZsb2F0IGtlcm5l
bEZhY3RvciA9IHNxcnQocGFpbnRpbmdEYXRhLnJhZGl1c1ggKiBwYWludGluZ0RhdGEucmFkaXVz
WSkgKiAwLjY1OwpAQCAtMjA0LDcgKzIxMCw3IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9y
bUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogICAgIHVuc2lnbmVkIG1h
eE51bVRocmVhZHMgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC8gODsKICAgICB1bnNpZ25lZCBvcHRp
bWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KChwYWludGluZ0RhdGEud2lkdGgg
KiBwYWludGluZ0RhdGEuaGVpZ2h0ICoga2VybmVsRmFjdG9yKSAvIG1pbmltYWxBcmVhLCBtYXhO
dW1UaHJlYWRzKTsKICAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAg
UGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNv
cmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJl
cik7CisgICAgICAgIFBhcmFsbGVsSm9iczxBcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygm
YXBwbHlQbGF0Zm9ybVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CiAgICAgICAgIGF1dG8g
bnVtT2ZUaHJlYWRzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwogICAgICAgICBpZiAo
bnVtT2ZUaHJlYWRzID4gMSkgewogICAgICAgICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJq
b2JTaXplIi1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBz
bGlnaHRseSBsYXJnZXIgc2luY2UKQEAgLTIxMyw4ICsyMTksNyBAQCB2b2lkIEZFTW9ycGhvbG9n
eTo6cGxhdGZvcm1BcHBseShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKICAgICAg
ICAgICAgIGludCBqb2JzV2l0aEV4dHJhID0gcGFpbnRpbmdEYXRhLmhlaWdodCAlIG51bU9mVGhy
ZWFkczsKICAgICAgICAgICAgIGludCBjdXJyZW50WSA9IDA7CiAgICAgICAgICAgICBmb3IgKGlu
dCBqb2IgPSBudW1PZlRocmVhZHMgLSAxOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAg
ICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW0gPSBwYXJhbGxlbEpvYnMucGFyYW1l
dGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW0uZmlsdGVyID0gdGhpczsKKyAgICAgICAg
ICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBhcmFtID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihq
b2IpOwogICAgICAgICAgICAgICAgIHBhcmFtLnN0YXJ0WSA9IGN1cnJlbnRZOwogICAgICAgICAg
ICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEgPyBqb2JTaXplICsgMSA6IGpv
YlNpemU7CiAgICAgICAgICAgICAgICAgcGFyYW0uZW5kWSA9IGN1cnJlbnRZOwpAQCAtMjI2LDYw
ICsyMzEsNjUgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHkoY29uc3QgUGFpbnRp
bmdEYXRhJiBwYWludGluZ0RhdGEpCiAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJl
YWQgbW9kZWwKICAgICB9CiAKLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhwYWludGluZ0RhdGEs
IDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOwotfQotCi1ib29sIEZFTW9ycGhvbG9neTo6cGxhdGZv
cm1BcHBseURlZ2VuZXJhdGUoVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIGNvbnN0
IEludFJlY3QmIGltYWdlUmVjdCwgaW50IHJhZGl1c1gsIGludCByYWRpdXNZKQotewotICAgIGlm
IChyYWRpdXNYIDwgMCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpKSB7
Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICAgICAgaW4t
PmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KGRzdFBpeGVsQXJyYXksIGltYWdlUmVjdCwgb3BlcmF0
aW5nQ29sb3JTcGFjZSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVy
biBmYWxzZTsKKyAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBhaW50
aW5nRGF0YS5oZWlnaHQpOwogfQogCi1ib29sIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorYm9vbCBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0
b3ImIGlucHV0RWZmZWN0cykKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Qo
MCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKIAotICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QuY3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVs
QnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBzZXRJc0Fs
cGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKKyAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1h
Z2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3Qg
PSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOworICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRS
ZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogCi0gICAg
SW50U2l6ZSByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShGbG9hdFNpemUobV9yYWRpdXNYLCBtX3Jh
ZGl1c1kpKTsKLSAgICBpZiAocGxhdGZvcm1BcHBseURlZ2VuZXJhdGUoZGVzdGluYXRpb25QaXhl
bEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCwgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQo
KSkpCisgICAgYXV0byBpc0RlZ2VuZXJhdGUgPSBbXShpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kp
IC0+IGJvb2wgeworICAgICAgICByZXR1cm4gcmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwg
KCFyYWRpdXNYICYmICFyYWRpdXNZKTsKKyAgICB9OworCisgICAgSW50U2l6ZSByYWRpdXMgPSBm
bG9vcmVkSW50U2l6ZShGbG9hdFNpemUobV9lZmZlY3QucmFkaXVzWCgpLCBtX2VmZmVjdC5yYWRp
dXNZKCkpKTsKKyAgICBpZiAoaXNEZWdlbmVyYXRlKHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVp
Z2h0KCkpKSB7CisgICAgICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdChkZXN0aW5hdGlv
blBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNw
YWNlKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKLSAgICBhdXRvIHNvdXJjZVBp
eGVsQXJyYXkgPSBpbi0+cHJlbXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgb3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBhdXRvIHNvdXJjZVBpeGVsQXJyYXkgPSBpbi0+cHJl
bXVsdGlwbGllZFJlc3VsdChlZmZlY3REcmF3aW5nUmVjdCwgbV9lZmZlY3Qub3BlcmF0aW5nQ29s
b3JTcGFjZSgpKTsKICAgICBpZiAoIXNvdXJjZVBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRl
clNjYWxlKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOworICAgIHJhZGl1cyA9IGZsb29yZWRJ
bnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3QucmFkaXVzWCgpLCBt
X2VmZmVjdC5yYWRpdXNZKCkgfSkpOwogICAgIGludCByYWRpdXNYID0gc3RkOjptaW4oZWZmZWN0
RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1cy53aWR0aCgpKTsKICAgICBpbnQgcmFkaXVz
WSA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpIC0gMSwgcmFkaXVzLmhlaWdo
dCgpKTsKIAotICAgIGlmIChwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZShkZXN0aW5hdGlvblBpeGVs
QXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCByYWRpdXNYLCByYWRpdXNZKSkKKyAgICBpZiAoaXNE
ZWdlbmVyYXRlKHJhZGl1c1gsIHJhZGl1c1kpKSB7CisgICAgICAgIGluLT5jb3B5UHJlbXVsdGlw
bGllZFJlc3VsdChkZXN0aW5hdGlvblBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0LCBtX2Vm
ZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CiAgICAgCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKKyAgICBwYWludGluZ0RhdGEu
dHlwZSA9IG1fZWZmZWN0Lm1vcnBob2xvZ3lPcGVyYXRvcigpOworICAgIHBhaW50aW5nRGF0YS5y
YWRpdXNYID0gY2VpbGYocmFkaXVzWCk7CisgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1kgPSBjZWls
ZihyYWRpdXNZKTsKKyAgICAKICAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSA9IHNvdXJj
ZVBpeGVsQXJyYXkuZ2V0KCk7CiAgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVz
dGluYXRpb25QaXhlbEFycmF5OwogICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVmZmVj
dERyYXdpbmdSZWN0LndpZHRoKCkpOwogICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBjZWlsZihl
ZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBj
ZWlsZihyYWRpdXNYKTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kp
OwogCi0gICAgcGxhdGZvcm1BcHBseShwYWludGluZ0RhdGEpOworICAgIGFwcGx5UGxhdGZvcm0o
cGFpbnRpbmdEYXRhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRU1vcnBob2xvZ3k6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1
cm4gRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0
RWZmZWN0cygpKTsKK30KKwogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUmIHR5cGUpCiB7CiAgICAgc3dpdGNo
ICh0eXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTW9ycGhvbG9neS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuaAppbmRleCAyODhlZWEwZTFlMjEzY2UzMmQ4MTczMGI2MTk5
ZGQ1ZTA0MWM5NjNkLi41ODk1MDJhNmY1YmM2ZDIwYjhlMTllYTlmZjU3Y2E3ODkyNWQ4MjY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9y
cGhvbG9neS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmgKQEAgLTUzLDI5ICs1Myw2IEBAIHByaXZhdGU6CiAKICAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGJvb2wgcGxhdGZvcm1BcHBseURl
Z2VuZXJhdGUoVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIGNvbnN0IEludFJlY3Qm
IGltYWdlUmVjdCwgaW50IHJhZGl1c1gsIGludCByYWRpdXNZKTsKLQotICAgIHN0cnVjdCBQYWlu
dGluZ0RhdGEgewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJh
eTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXk7Ci0gICAgICAgIGlu
dCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgaW50IHJhZGl1c1g7Ci0gICAg
ICAgIGludCByYWRpdXNZOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFt
ZXRlcnMgewotICAgICAgICBGRU1vcnBob2xvZ3kqIGZpbHRlcjsKLSAgICAgICAgaW50IHN0YXJ0
WTsKLSAgICAgICAgaW50IGVuZFk7Ci0gICAgICAgIGNvbnN0IFBhaW50aW5nRGF0YSogcGFpbnRp
bmdEYXRhOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBs
YXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3Qg
UGFpbnRpbmdEYXRhJik7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWlu
dGluZ0RhdGEmLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7Ci0KICAgICBNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIG1fdHlwZTsKICAgICBmbG9hdCBtX3JhZGl1c1g7CiAgICAgZmxvYXQgbV9yYWRpdXNZ
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
T2Zmc2V0LmNwcAppbmRleCAwMTQ1NTdhMzFkNzA5NzIzNjIyZDc2NjMwYWFjNzI4M2JiMjY1Zjc4
Li43ZDU1MDM2NDk1ZmFlZmRjNzU2MDk1MzM4MTM5ZTJkY2M2YzBkNzc5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcApA
QCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCiAKICNpbmNsdWRlICJGaWx0
ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CkBAIC02NCwyNCArNjUsMzkgQEAgdm9pZCBGRU9mZnNldDo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKIH0KIAotYm9vbCBGRU9m
ZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorLy8gRklY
TUU6IE1vdmUgdGhlIGNsYXNzIEZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNv
dXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIgOiBw
dWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFT2Zmc2V0PiB7CisgICAgdXNpbmcg
QmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRU9mZnNldD47CisKK3B1YmxpYzoK
KyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBj
b25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCiti
b29sIEZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwg
Y29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdHNbMF0uZ2V0KCk7CiAKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IG1fZWZm
ZWN0LmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVy
ID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5C
dWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+
aXNBbHBoYUltYWdlKCkpOworICAgIG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBo
YUltYWdlKCkpOwogCi0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBkcmF3aW5nUmVnaW9u
Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2R4LCBtX2R5IH0pKTsKKyAgICBG
bG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGRyYXdpbmdSZWdpb24ubW92ZShmaWx0
ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LmR4KCksIG1fZWZmZWN0LmR5KCkgfSkp
OwogICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwg
ZHJhd2luZ1JlZ2lvbik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRU9mZnNldDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJldHVy
biBGRU9mZnNldFNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVj
dHMoKSk7Cit9CisKIFRleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0
CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVPZmZzZXQiOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGln
aHRpbmcuY3BwCmluZGV4IDYwN2E3MWM0Y2YzNWY1NmQ0YTIyZmNmNTAyNmYxNDJiNTE3ZTcwZDcu
LmFjNjJiMTIwNzA3ZGM2ZDlmNDUwYmI1Y2I5MTM3OTAwOTA0ZWE5NjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5n
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3Bl
Y3VsYXJMaWdodGluZy5jcHAKQEAgLTMzLDcgKzMzLDcgQEAgUmVmPEZFU3BlY3VsYXJMaWdodGlu
Zz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3Is
IGYKIH0KIAogRkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29s
b3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25z
dGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCi0g
ICAgOiBGRUxpZ2h0aW5nKFNwZWN1bGFyTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VT
Y2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExl
bmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSwgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcpCisgICAgOiBGRUxpZ2h0aW5nKEZpbHRlckVm
ZmVjdDo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2Nh
bGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5n
dGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpCiB7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNw
cAppbmRleCA0ZmUyNGE0ZjI2MmIxNzQyMmU3ODNiNDc2MGYzMzE1MDE4NTJkYzE4Li4xZWNhZDdm
MTE0Mjc2NzhhNjJjZDQ2MTYyZWI1Y2E4NWY5MDU1ZTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCkBAIC0yMyw2ICsyMyw3
IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIK
KyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCkBA
IC00MiwyMyArNDMsMzIgQEAgRkVUaWxlOjpGRVRpbGUoKQogewogfQogCi1ib29sIEZFVGlsZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorLy8gRklYTUU6IE1v
dmUgdGhlIGNsYXNzIEZFVGlsZVNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5k
IGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFVGlsZVNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0
ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVUaWxlPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRl
ckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRVRpbGU+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFz
ZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZm
ZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworfTsKKworYm9vbCBGRVRpbGVTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZl
Y3RWZWN0b3ImIGlucHV0RWZmZWN0cykKIHsKLS8vIEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlz
IGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29y
cmVjdCBiZWhhdmlvciBvdGhlcndpc2UuCi0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CiAK
LSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OworICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmNyZWF0ZUltYWdlQnVm
ZmVyUmVzdWx0KCk7CiAgICAgSW1hZ2VCdWZmZXIqIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVy
UmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwor
ICAgIG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCiAgICAg
Ly8gU291cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhlIHNpemUgb2Yg
dGhlIGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCiAgICAgLy8gc2l6ZSBvZiB0aGUgY3V0dGVk
IHNvdXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiBhbmQg
b3B0aW1pemF0aW9uLgogICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5tYXhFZmZlY3RSZWN0
KCk7CiAgICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJlY3QubG9jYXRp
b24oKTsKLSAgICBGbG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4RWZmZWN0UmVjdCgp
LmxvY2F0aW9uKCk7CisgICAgRmxvYXRQb2ludCBtYXhFZmZlY3RMb2NhdGlvbiA9IG1fZWZmZWN0
Lm1heEVmZmVjdFJlY3QoKS5sb2NhdGlvbigpOwogICAgIGlmIChpbi0+ZmlsdGVyVHlwZSgpID09
IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYyB8fCBpbi0+ZmlsdGVyVHlwZSgpID09
IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGEpIHsKICAgICAgICAgdGlsZVJlY3QgPSBm
aWx0ZXIuZmlsdGVyUmVnaW9uKCk7CiAgICAgICAgIHRpbGVSZWN0LnNjYWxlKGZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKQEAgLTgzLDExICs5MywxNiBAQCBib29sIEZFVGlsZTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogCiAgICAgR3JhcGhpY3NDb250ZXh0JiBm
aWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKICAgICBmaWx0ZXJDb250ZXh0
LnNldEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybikpOwotICAgIGZpbHRlckNvbnRleHQuZmls
bFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkp
KTsKKyAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1f
ZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAorYm9vbCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZp
bHRlcikKK3sKKyAgICByZXR1cm4gRkVUaWxlU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShm
aWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogVGV4dFN0cmVhbSYgRkVUaWxlOjpleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVz
ZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUaWxlIjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcAppbmRleCBkYTQ3NGY0MTA1ZjE2NGU0ZGRlZTQ4YjZjYWI5ZGI4ZjgzYTFhN2Zl
Li4xMTkwMGQ0MDcwN2IwMzM1MDZjZmE5ZDY0OTc0MjI0OTUyZmM0MTEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCiAKICNp
bmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KQEAgLTM0LDIwICszNSw2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotLyoKLSAgICBQcm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioq
MzEgLSAyXS4gQWxnb3JpdGhtIGlzOgotICAgIHIgPSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEgPSBy
YW5kQW1wbGl0dWRlID0gMTY4MDcgYW5kCi0gICAgbSA9IHJhbmRNYXhpbXVtID0gMioqMzEgLSAx
ID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCi0gICAgU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2
b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKLSAgICBUbyB0ZXN0OiB0aGUgYWxnb3Jp
dGhtIHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2NQotICAgIGFzIHRoZSAxMCww
MDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCi0qLwotc3Rh
dGljIGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsKLXN0YXRpYyBjb25zdCBsb25nIHNf
cmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKiozMSAtIDEKLXN0YXRpYyBjb25zdCBpbnQg
c19yYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290IG9mIG0KLXN0
YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKLXN0YXRpYyBjb25zdCBp
bnQgc19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCi0KIFJlZjxGRVR1cmJ1bGVuY2U+IEZFVHVyYnVs
ZW5jZTo6Y3JlYXRlKFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBm
bG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3Rp
dGNoVGlsZXMpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUdXJidWxlbmNlKHR5cGUs
IGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNo
VGlsZXMpKTsKQEAgLTExNSw3MiArMTAyLDEzNCBAQCBib29sIEZFVHVyYnVsZW5jZTo6c2V0U3Rp
dGNoVGlsZXMoYm9vbCBzdGl0Y2gpCiAvLyBUaGUgdHVyYnVsZW5jZSBjYWxjdWxhdGlvbiBjb2Rl
IGlzIGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVhcnMgaW4gdGhlIFNWRyAxLjEgc3Bl
Y2lmaWNhdGlvbjoKIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNm
ZVR1cmJ1bGVuY2UKIAotLy8gQ29tcHV0ZSBwc2V1ZG8gcmFuZG9tIG51bWJlci4KLWlubGluZSBs
b25nIEZFVHVyYnVsZW5jZTo6UGFpbnRpbmdEYXRhOjpyYW5kb20oKQotewotICAgIGxvbmcgcmVz
dWx0ID0gc19yYW5kQW1wbGl0dWRlICogKHNlZWQgJSBzX3JhbmRRKSAtIHNfcmFuZFIgKiAoc2Vl
ZCAvIHNfcmFuZFEpOwotICAgIGlmIChyZXN1bHQgPD0gMCkKLSAgICAgICAgcmVzdWx0ICs9IHNf
cmFuZE1heGltdW07Ci0gICAgc2VlZCA9IHJlc3VsdDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQor
Ly8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllciB0byBz
ZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFVHVyYnVsZW5jZVNvZnR3
YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVUdXJidWxl
bmNlPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRVR1
cmJ1bGVuY2U+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wg
YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVj
dHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIC8vIFByb2R1Y2VzIHJlc3VsdHMgaW4gdGhl
IHJhbmdlIFsxLCAyKiozMSAtIDJdLiBBbGdvcml0aG0gaXM6CisgICAgLy8gciA9IChhICogcikg
bW9kIG0gd2hlcmUgYSA9IHJhbmRBbXBsaXR1ZGUgPSAxNjgwNyBhbmQKKyAgICAvLyBtID0gcmFu
ZE1heGltdW0gPSAyKiozMSAtIDEgPSAyMTQ3NDgzNjQ3LCByID0gc2VlZC4KKyAgICAvLyBTZWUg
W1BhcmsgJiBNaWxsZXJdLCBDQUNNIHZvbC4gMzEgbm8uIDEwIHAuIDExOTUsIE9jdC4gMTk4OAor
ICAgIC8vIFRvIHRlc3Q6IHRoZSBhbGdvcml0aG0gc2hvdWxkIHByb2R1Y2UgdGhlIHJlc3VsdCAx
MDQzNjE4MDY1CisgICAgLy8gYXMgdGhlIDEwLDAwMHRoIGdlbmVyYXRlZCBudW1iZXIgaWYgdGhl
IG9yaWdpbmFsIHNlZWQgaXMgMS4KKyAgICBzdGF0aWMgY29uc3QgaW50IHBlcmxpbk5vaXNlID0g
NDA5NjsKKyAgICBzdGF0aWMgY29uc3QgbG9uZyByYW5kTWF4aW11bSA9IDIxNDc0ODM2NDc7IC8v
IDIqKjMxIC0gMQorICAgIHN0YXRpYyBjb25zdCBpbnQgcmFuZEFtcGxpdHVkZSA9IDE2ODA3OyAv
LyA3Kio1OyBwcmltaXRpdmUgcm9vdCBvZiBtCisgICAgc3RhdGljIGNvbnN0IGludCByYW5kUSA9
IDEyNzc3MzsgLy8gbSAvIGEKKyAgICBzdGF0aWMgY29uc3QgaW50IHJhbmRSID0gMjgzNjsgLy8g
bSAlIGEKKworICAgIHN0YXRpYyBjb25zdCBpbnQgYmxvY2tTaXplID0gMjU2OworICAgIHN0YXRp
YyBjb25zdCBpbnQgYmxvY2tNYXNrID0gYmxvY2tTaXplIC0gMTsKKworICAgIHN0cnVjdCBQYWlu
dGluZ0RhdGEgeworICAgICAgICAvLyBDb21wdXRlIHBzZXVkbyByYW5kb20gbnVtYmVyLgorICAg
ICAgICBsb25nIHJhbmRvbSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvbmcgcmVzdWx0ID0g
cmFuZEFtcGxpdHVkZSAqIChzZWVkICUgcmFuZFEpIC0gcmFuZFIgKiAoc2VlZCAvIHJhbmRRKTsK
KyAgICAgICAgICAgIGlmIChyZXN1bHQgPD0gMCkKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0g
cmFuZE1heGltdW07CisgICAgICAgICAgICBzZWVkID0gcmVzdWx0OworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQogCi1pbmxpbmUgZmxvYXQgc21vb3RoQ3VydmUoZmxvYXQg
dCkKLXsKLSAgICByZXR1cm4gdCAqIHQgKiAoMyAtIDIgKiB0KTsKLX0KKyAgICAgICAgVHVyYnVs
ZW5jZVR5cGUgdHlwZTsKKyAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVg7CisgICAgICAgIGZs
b2F0IGJhc2VGcmVxdWVuY3lZOworICAgICAgICBpbnQgbnVtT2N0YXZlczsKKyAgICAgICAgbG9u
ZyBzZWVkOworICAgICAgICBib29sIHN0aXRjaFRpbGVzOworICAgICAgICBJbnRTaXplIHBhaW50
aW5nU2l6ZTsKIAotaW5saW5lIGZsb2F0IGxpbmVhckludGVycG9sYXRpb24oZmxvYXQgdCwgZmxv
YXQgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYSArIHQgKiAoYiAtIGEpOwotfQorICAgICAg
ICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBibG9ja1NpemUgKyAyXTsKKyAgICAgICAgZmxvYXQg
Z3JhZGllbnRbNF1bMiAqIGJsb2NrU2l6ZSArIDJdWzJdOworICAgIH07CisKKyAgICBzdHJ1Y3Qg
U3RpdGNoRGF0YSB7CisgICAgICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93IG11Y2ggdG8gc3Vi
dHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgorICAgICAgICBpbnQgd3JhcFggeyAwIH07IC8v
IE1pbmltdW0gdmFsdWUgdG8gd3JhcC4KKyAgICAgICAgaW50IGhlaWdodCB7IDAgfTsKKyAgICAg
ICAgaW50IHdyYXBZIHsgMCB9OworICAgIH07CisKKyAgICBzdHJ1Y3QgQXBwbHlQYXJhbWV0ZXJz
IHsKKyAgICAgICAgSW50UmVjdCBmaWx0ZXJSZWdpb247CisgICAgICAgIEZsb2F0U2l6ZSBmaWx0
ZXJTY2FsZTsKKyAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7CisgICAgICAg
IFBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworICAgICAgICBTdGl0Y2hEYXRhIHN0aXRjaERh
dGE7CisgICAgICAgIGludCBzdGFydFk7CisgICAgICAgIGludCBlbmRZOworICAgIH07CiAKLXZv
aWQgRkVUdXJidWxlbmNlOjppbml0UGFpbnQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCisg
ICAgc3RhdGljIGlubGluZSBmbG9hdCBzbW9vdGhDdXJ2ZShmbG9hdCB0KSB7IHJldHVybiB0ICog
dCAqICgzIC0gMiAqIHQpOyB9CisgICAgc3RhdGljIGlubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBv
bGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0IGIpIHsgcmV0dXJuIGEgKyB0ICogKGIgLSBh
KTsgfQorCisgICAgc3RhdGljIFBhaW50aW5nRGF0YSBpbml0UGFpbnRpbmdEYXRhKFR1cmJ1bGVu
Y2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBu
dW1PY3RhdmVzLCBsb25nIHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMsIGNvbnN0IEludFNpemUmIHBh
aW50aW5nU2l6ZSk7CisgICAgc3RhdGljIFN0aXRjaERhdGEgY29tcHV0ZVN0aXRjaGluZyhJbnRT
aXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5
WSwgYm9vbCBzdGl0Y2hUaWxlcyk7CisKKyAgICBzdGF0aWMgQ29sb3JDb21wb25lbnRzPGZsb2F0
LCA0PiBub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBjb25z
dCBGbG9hdFBvaW50JiBub2lzZVZlY3Rvcik7CisgICAgc3RhdGljIENvbG9yQ29tcG9uZW50czx1
aW50OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50
czxmbG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cyk7CisgICAgc3RhdGljIENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWlu
dGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50Jik7CisKKyAgICBzdGF0aWMg
dm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNv
bnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5
LCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7
CisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybVdvcmtlcihBcHBseVBhcmFtZXRlcnMqKTsK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lv
biwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVs
QXJyYXksIFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEmKTsKK307CisKK0ZFVHVyYnVsZW5jZVNv
ZnR3YXJlQXBwbGllcjo6UGFpbnRpbmdEYXRhIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6
aW5pdFBhaW50aW5nRGF0YShUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5
WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBsb25nIHNlZWQsIGJvb2wg
c3RpdGNoVGlsZXMsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSkKIHsKLSAgICBmbG9hdCBu
b3JtYWxpemF0aW9uRmFjdG9yOworICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgeyB0eXBl
LCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRj
aFRpbGVzLCBwYWludGluZ1NpemUsIHsgfSwgeyB9IH07CiAKLSAgICAvLyBUaGUgc2VlZCB2YWx1
ZSBjbGFtcCB0byB0aGUgcmFuZ2UgWzEsIHNfcmFuZE1heGltdW0gLSAxXS4KKyAgICAvLyBUaGUg
c2VlZCB2YWx1ZSBjbGFtcCB0byB0aGUgcmFuZ2UgWzEsIHJhbmRNYXhpbXVtIC0gMV0uCiAgICAg
aWYgKHBhaW50aW5nRGF0YS5zZWVkIDw9IDApCi0gICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0g
LShwYWludGluZ0RhdGEuc2VlZCAlIChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsKLSAgICBpZiAo
cGFpbnRpbmdEYXRhLnNlZWQgPiBzX3JhbmRNYXhpbXVtIC0gMSkKLSAgICAgICAgcGFpbnRpbmdE
YXRhLnNlZWQgPSBzX3JhbmRNYXhpbXVtIC0gMTsKKyAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQg
PSAtKHBhaW50aW5nRGF0YS5zZWVkICUgKHJhbmRNYXhpbXVtIC0gMSkpICsgMTsKKyAgICBpZiAo
cGFpbnRpbmdEYXRhLnNlZWQgPiByYW5kTWF4aW11bSAtIDEpCisgICAgICAgIHBhaW50aW5nRGF0
YS5zZWVkID0gcmFuZE1heGltdW0gLSAxOwogCiAgICAgZmxvYXQqIGdyYWRpZW50OwogICAgIGZv
ciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7Ci0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemU7ICsraSkgeworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGJsb2NrU2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBwYWludGluZ0RhdGEubGF0
dGljZVNlbGVjdG9yW2ldID0gaTsKICAgICAgICAgICAgIGdyYWRpZW50ID0gcGFpbnRpbmdEYXRh
LmdyYWRpZW50W2NoYW5uZWxdW2ldOwogICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAg
IGdyYWRpZW50WzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkg
JSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKLSAgICAg
ICAgICAgICAgICBncmFkaWVudFsxXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdEYXRh
LnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8gc19ibG9ja1Np
emU7CisgICAgICAgICAgICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBh
aW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogYmxvY2tTaXplKSkgLSBibG9ja1NpemUpIC8gYmxv
Y2tTaXplOworICAgICAgICAgICAgICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIGJsb2NrU2l6ZSkpIC0gYmxvY2tTaXplKSAv
IGJsb2NrU2l6ZTsKICAgICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVudFswXSAmJiAhZ3JhZGll
bnRbMV0pOwotICAgICAgICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0ZDo6aHlwb3QoZ3Jh
ZGllbnRbMF0sIGdyYWRpZW50WzFdKTsKKyAgICAgICAgICAgIGZsb2F0IG5vcm1hbGl6YXRpb25G
YWN0b3IgPSBzdGQ6Omh5cG90KGdyYWRpZW50WzBdLCBncmFkaWVudFsxXSk7CiAgICAgICAgICAg
ICBncmFkaWVudFswXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwogICAgICAgICAgICAgZ3JhZGll
bnRbMV0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGZv
ciAoaW50IGkgPSBzX2Jsb2NrU2l6ZSAtIDE7IGkgPiAwOyAtLWkpIHsKKyAgICBmb3IgKGludCBp
ID0gYmxvY2tTaXplIC0gMTsgaSA+IDA7IC0taSkgewogICAgICAgICBpbnQgayA9IHBhaW50aW5n
RGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07Ci0gICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRhLnJh
bmRvbSgpICUgc19ibG9ja1NpemU7CisgICAgICAgIGludCBqID0gcGFpbnRpbmdEYXRhLnJhbmRv
bSgpICUgYmxvY2tTaXplOwogICAgICAgICBBU1NFUlQoaiA+PSAwKTsKLSAgICAgICAgQVNTRVJU
KGogPCAyICogc19ibG9ja1NpemUgKyAyKTsKKyAgICAgICAgQVNTRVJUKGogPCAyICogYmxvY2tT
aXplICsgMik7CiAgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV0gPSBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdOwogICAgICAgICBwYWludGluZ0RhdGEubGF0dGlj
ZVNlbGVjdG9yW2pdID0gazsKICAgICB9CiAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNfYmxv
Y2tTaXplICsgMjsgKytpKSB7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jb
c19ibG9ja1NpemUgKyBpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBibG9ja1NpemUgKyAyOyArK2kpIHsKKyAgICAgICAgcGFpbnRp
bmdEYXRhLmxhdHRpY2VTZWxlY3RvcltibG9ja1NpemUgKyBpXSA9IHBhaW50aW5nRGF0YS5sYXR0
aWNlU2VsZWN0b3JbaV07CiAgICAgICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwg
NDsgKytjaGFubmVsKSB7Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5l
bF1bc19ibG9ja1NpemUgKyBpXVswXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtp
XVswXTsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2Nr
U2l6ZSArIGldWzFdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzFdOworICAg
ICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2Jsb2NrU2l6ZSArIGldWzBd
ID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzBdOworICAgICAgICAgICAgcGFp
bnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2Jsb2NrU2l6ZSArIGldWzFdID0gcGFpbnRpbmdE
YXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzFdOwogICAgICAgICB9CiAgICAgfQorCisgICAgcmV0
dXJuIHBhaW50aW5nRGF0YTsKIH0KIAotRkVUdXJidWxlbmNlOjpTdGl0Y2hEYXRhIEZFVHVyYnVs
ZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1
ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkgY29uc3QKK0ZFVHVyYnVsZW5jZVNvZnR3YXJl
QXBwbGllcjo6U3RpdGNoRGF0YSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVT
dGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYg
YmFzZUZyZXF1ZW5jeVksIGJvb2wgc3RpdGNoVGlsZXMpCiB7Ci0gICAgaWYgKCFtX3N0aXRjaFRp
bGVzKQorICAgIGlmICghc3RpdGNoVGlsZXMpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBm
bG9hdCB0aWxlV2lkdGggPSB0aWxlU2l6ZS53aWR0aCgpOwpAQCAtMjA5LDE1ICsyNTgsMTUgQEAg
RkVUdXJidWxlbmNlOjpTdGl0Y2hEYXRhIEZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyhJ
bnRTaXplIHRpbGVTaXplLCBmbG9hdCYKIAogICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKICAg
ICBzdGl0Y2hEYXRhLndpZHRoID0gcm91bmRmKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKTsK
LSAgICBzdGl0Y2hEYXRhLndyYXBYID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7
CisgICAgc3RpdGNoRGF0YS53cmFwWCA9IHBlcmxpbk5vaXNlICsgc3RpdGNoRGF0YS53aWR0aDsK
ICAgICBzdGl0Y2hEYXRhLmhlaWdodCA9IHJvdW5kZih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5j
eVkpOwotICAgIHN0aXRjaERhdGEud3JhcFkgPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS5o
ZWlnaHQ7CisgICAgc3RpdGNoRGF0YS53cmFwWSA9IHBlcmxpbk5vaXNlICsgc3RpdGNoRGF0YS5o
ZWlnaHQ7CiAKICAgICByZXR1cm4gc3RpdGNoRGF0YTsKIH0KIAogLy8gVGhpcyBpcyB0YWtlbiAx
OjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1s
I2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVs
ZW5jZTo6bm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgU3Rp
dGNoRGF0YSYgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpIGNvbnN0
CitDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6
bm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3QgU3RpdGNoRGF0
YSYgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpCiB7CiAgICAgc3Ry
dWN0IE5vaXNlUG9zaXRpb24gewogICAgICAgICBpbnQgaW5kZXg7IC8vIGJ4MCwgYnkwIGluIHRo
ZSBzcGVjIHRleHQuCkBAIC0yMzAsNyArMjc5LDcgQEAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0
PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEK
ICAgICAgICAgICAgIC8vICBieDAgPSAoaW50KXQ7CiAgICAgICAgICAgICAvLyAgYngxID0gYngw
KzE7CiAgICAgICAgICAgICAvLyAgcngwID0gdCAtIChpbnQpdDsKLSAgICAgICAgICAgIGZsb2F0
IHBvc2l0aW9uID0gY29tcG9uZW50ICsgc19wZXJsaW5Ob2lzZTsKKyAgICAgICAgICAgIGZsb2F0
IHBvc2l0aW9uID0gY29tcG9uZW50ICsgcGVybGluTm9pc2U7CiAgICAgICAgICAgICBpbmRleCA9
IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24pOwogICAgICAgICAgICAgbmV4dEluZGV4ID0gaW5k
ZXggKyAxOwogICAgICAgICAgICAgZnJhY3Rpb24gPSBwb3NpdGlvbiAtIGluZGV4OwpAQCAtMjU0
LDcgKzMwMyw3IEBAIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxlbmNlOjpub2lz
ZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhCiAgICAgTm9pc2VQb3NpdGlvbiBu
b2lzZVkobm9pc2VWZWN0b3IueSgpKTsKIAogICAgIC8vIElmIHN0aXRjaGluZywgYWRqdXN0IGxh
dHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgotICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7CisgICAg
aWYgKHBhaW50aW5nRGF0YS5zdGl0Y2hUaWxlcykgewogICAgICAgICBub2lzZVguc3RpdGNoKHN0
aXRjaERhdGEud2lkdGgsIHN0aXRjaERhdGEud3JhcFgpOwogICAgICAgICBub2lzZVkuc3RpdGNo
KHN0aXRjaERhdGEuaGVpZ2h0LCBzdGl0Y2hEYXRhLndyYXBZKTsKICAgICB9CkBAIC0yNjMsMTAg
KzMxMiwxMCBAQCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZTo6bm9pc2Uy
RChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YQogICAgIC8vIGJ4MSAmPSBCTTsKICAg
ICAvLyBieTAgJj0gQk07CiAgICAgLy8gYnkxICY9IEJNOwotICAgIG5vaXNlWC5pbmRleCAmPSBz
X2Jsb2NrTWFzazsKLSAgICBub2lzZVgubmV4dEluZGV4ICY9IHNfYmxvY2tNYXNrOwotICAgIG5v
aXNlWS5pbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBub2lzZVkubmV4dEluZGV4ICY9IHNfYmxv
Y2tNYXNrOworICAgIG5vaXNlWC5pbmRleCAmPSBibG9ja01hc2s7CisgICAgbm9pc2VYLm5leHRJ
bmRleCAmPSBibG9ja01hc2s7CisgICAgbm9pc2VZLmluZGV4ICY9IGJsb2NrTWFzazsKKyAgICBu
b2lzZVkubmV4dEluZGV4ICY9IGJsb2NrTWFzazsKIAogICAgIC8vIGkgPSB1TGF0dGljZVNlbGVj
dG9yW2J4MF07CiAgICAgLy8gaiA9IHVMYXR0aWNlU2VsZWN0b3JbYngxXTsKQEAgLTMyMyw3ICsz
NzIsNyBAQCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChj
b25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YQogCiAvLyBodHRwczovL3d3dy53My5vcmcv
VFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50IGRlc2NyaWJlcyB0aGlzIGNv
bnZlcnNpb24gdG8gY29sb3IgY29tcG9uZW50cy4KIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ug
Y29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4Pj4oU1JHQkE8ZmxvYXQ+KSB0byBnZXQgdGhlIHNhbWUg
YmVoYXZpb3IuCi1zdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiB0b0lu
dEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4mIGZs
b2F0Q29tcG9uZW50cykKK0NvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2VT
b2Z0d2FyZUFwcGxpZXI6OnRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21w
b25lbnRzPGZsb2F0LCA0PiYgZmxvYXRDb21wb25lbnRzKQogewogICAgIHJldHVybiB7CiAgICAg
ICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENvbXBvbmVudHNb
MF0gKiAyNTUpLCAwLCAyNTUpLApAQCAtMzMzLDEzICszODIsMTMgQEAgc3RhdGljIGlubGluZSBD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyhjb25z
dCBDb2xvckMKICAgICB9OwogfQogCi1Db2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJi
dWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkgY29uc3QKK0NvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2VT
b2Z0d2FyZUFwcGxpZXI6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50KQogewogICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdHVyYnVs
ZW5jZUZ1bmN0aW9uUmVzdWx0OwogICAgIEZsb2F0UG9pbnQgbm9pc2VWZWN0b3IocG9pbnQueCgp
ICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lYLCBwb2ludC55KCkgKiBwYWludGluZ0RhdGEu
YmFzZUZyZXF1ZW5jeVkpOwogICAgIGZsb2F0IHJhdGlvID0gMTsKLSAgICBmb3IgKGludCBvY3Rh
dmUgPSAwOyBvY3RhdmUgPCBtX251bU9jdGF2ZXM7ICsrb2N0YXZlKSB7Ci0gICAgICAgIGlmICht
X3R5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKKyAgICBmb3IgKGludCBvY3Rh
dmUgPSAwOyBvY3RhdmUgPCBwYWludGluZ0RhdGEubnVtT2N0YXZlczsgKytvY3RhdmUpIHsKKyAg
ICAgICAgaWYgKHBhaW50aW5nRGF0YS50eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9p
c2UpCiAgICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWlu
dGluZ0RhdGEsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yKSAvIHJhdGlvOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2UyRChwYWludGlu
Z0RhdGEsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yKS5hYnMoKSAvIHJhdGlvOwpAQCAtMzQ4LDMy
ICszOTcsMzEgQEAgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5jZTo6Y2Fs
Y3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QKICAgICAgICAgbm9pc2VWZWN0b3Iu
c2V0WShub2lzZVZlY3Rvci55KCkgKiAyKTsKICAgICAgICAgcmF0aW8gKj0gMjsKIAotICAgICAg
ICBpZiAobV9zdGl0Y2hUaWxlcykgewotICAgICAgICAgICAgLy8gVXBkYXRlIHN0aXRjaCB2YWx1
ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGluTm9pc2UgYmVmb3JlIHRoZSBtdWx0aXBsaWNhdGlvbiBh
bmQKKyAgICAgICAgaWYgKHBhaW50aW5nRGF0YS5zdGl0Y2hUaWxlcykgeworICAgICAgICAgICAg
Ly8gVXBkYXRlIHN0aXRjaCB2YWx1ZXMuIFN1YnRyYWN0aW5nIHBlcmxpbk5vaXNlIGJlZm9yZSB0
aGUgbXVsdGlwbGljYXRpb24gYW5kCiAgICAgICAgICAgICAvLyBhZGRpbmcgaXQgYWZ0ZXJ3YXJk
IHNpbXBsaWZpZXMgdG8gc3VidHJhY3RpbmcgaXQgb25jZS4KICAgICAgICAgICAgIHN0aXRjaERh
dGEud2lkdGggKj0gMjsKLSAgICAgICAgICAgIHN0aXRjaERhdGEud3JhcFggPSAyICogc3RpdGNo
RGF0YS53cmFwWCAtIHNfcGVybGluTm9pc2U7CisgICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBY
ID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBwZXJsaW5Ob2lzZTsKICAgICAgICAgICAgIHN0aXRj
aERhdGEuaGVpZ2h0ICo9IDI7Ci0gICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBZID0gMiAqIHN0
aXRjaERhdGEud3JhcFkgLSBzX3Blcmxpbk5vaXNlOworICAgICAgICAgICAgc3RpdGNoRGF0YS53
cmFwWSA9IDIgKiBzdGl0Y2hEYXRhLndyYXBZIC0gcGVybGluTm9pc2U7CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0IGNvbWVz
IGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1KSAvIDIgYnkgZnJh
Y3RhbE5vaXNlCiAgICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpIGJ5
IHR1cmJ1bGVuY2UuCi0gICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5v
aXNlKQorICAgIGlmIChwYWludGluZ0RhdGEudHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3Rh
bE5vaXNlKQogICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJidWxlbmNlRnVu
Y3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKIAogICAgIHJldHVybiB0b0ludEJhc2VkQ29sb3JD
b21wb25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7CiB9CiAKLXZvaWQgRkVUdXJidWxl
bmNlOjpmaWxsUmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBVaW50OENsYW1wZWRBcnJheSYg
cGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEg
c3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0Cit2b2lkIEZFVHVyYnVsZW5j
ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgSW50UmVjdCYgZmls
dGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBVaW50OENsYW1wZWRBcnJh
eSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERh
dGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCiB7CiAgICAgQVNTRVJUKGVuZFkg
PiBzdGFydFkpOwogCi0gICAgSW50UmVjdCBmaWx0ZXJSZWdpb24gPSBhYnNvbHV0ZVBhaW50UmVj
dCgpOwogICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0YXJ0WSk7
CiAgICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVnaW9uLndp
ZHRoKCkgPDwgMik7Ci0gICAgRmxvYXRTaXplIGludmVyc2VTY2FsZSA9IHsgMSAvIGZpbHRlci5m
aWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5oZWlnaHQoKSB9
OworICAgIEZsb2F0U2l6ZSBpbnZlcnNlU2NhbGUgPSB7IDEgLyBmaWx0ZXJTY2FsZS53aWR0aCgp
LCAxIC8gZmlsdGVyU2NhbGUuaGVpZ2h0KCkgfTsKIAogICAgIGZvciAoaW50IHkgPSBzdGFydFk7
IHkgPCBlbmRZOyArK3kpIHsKICAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAxKTsKQEAg
LTM4OCw0NSArNDM2LDIyIEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKGNvbnN0IEZp
bHRlciYgZmlsdGVyLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJhCiAgICAgfQogfQogCi12
b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyog
cGFyYW1ldGVycykKK3ZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRm
b3JtV29ya2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKIHsKLSAgICBwYXJhbWV0ZXJz
LT5lZmZlY3QtPmZpbGxSZWdpb24oKnBhcmFtZXRlcnMtPmZpbHRlciwgKnBhcmFtZXRlcnMtPnBp
eGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnN0aXRjaERh
dGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7CisgICAgYXBwbHlQbGF0
Zm9ybUdlbmVyaWMocGFyYW1ldGVycy0+ZmlsdGVyUmVnaW9uLCBwYXJhbWV0ZXJzLT5maWx0ZXJT
Y2FsZSwgKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEs
IHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+
ZW5kWSk7CiB9CiAKLWJvb2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCit2b2lkIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBw
bHlQbGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYg
ZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSYgc3RpdGNoRGF0YSkKIHsKLSAgICBhdXRvJiBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAg
ICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIt
PmRhdGEoKTsKKyAgICBpbnQgaGVpZ2h0ID0gZmlsdGVyUmVnaW9uLmhlaWdodCgpOworICAgIHVu
c2lnbmVkIGFyZWEgPSBmaWx0ZXJSZWdpb24uYXJlYSgpOwogCi0gICAgSW50U2l6ZSByZXN1bHRT
aXplKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1p
bmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0
IGZvciBwYXJhbGxlbCBqb2JzLgorICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBmaWx0ZXJS
ZWdpb24uaGVpZ2h0KCkgLyA4OworICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBz
dGQ6Om1pbjx1bnNpZ25lZD4oYXJlYSAvIG1pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJl
YWRzKTsKIAotICAgIGlmIChyZXN1bHRTaXplLmlzRW1wdHkoKSkgewotICAgICAgICBkZXN0aW5h
dGlvblBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgSW50U2l6ZSB0aWxlU2l6ZSA9IHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbigpLnNpemUoKSk7Ci0KLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCA9IG1fYmFzZUZy
ZXF1ZW5jeVg7Ci0gICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVkgPSBtX2Jhc2VGcmVxdWVuY3lZOwot
ICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YSA9IGNvbXB1dGVTdGl0Y2hpbmcodGlsZVNpemUsIGJh
c2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7Ci0KLSAgICBQYWludGluZ0RhdGEgcGFpbnRp
bmdEYXRhKG1fc2VlZCwgdGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7
Ci0gICAgaW5pdFBhaW50KHBhaW50aW5nRGF0YSk7Ci0KLSAgICBhdXRvIGFyZWEgPSByZXN1bHRT
aXplLmFyZWEoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGludCBoZWlnaHQgPSByZXN1bHRTaXplLmhlaWdodCgpOwotCi0gICAg
dW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IGhlaWdodCAvIDg7Ci0gICAgdW5zaWduZWQgb3B0aW1h
bFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPihhcmVhIC8gc19taW5pbWFsUmVjdERp
bWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7CiAgICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAx
KSB7Ci0gICAgICAgIFBhcmFsbGVsSm9iczxGaWxsUmVnaW9uUGFyYW1ldGVycz4gcGFyYWxsZWxK
b2JzKCZXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIsIG9wdGltYWxUaHJl
YWROdW1iZXIpOworICAgICAgICBQYXJhbGxlbEpvYnM8QXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxl
bEpvYnMoJmFwcGx5UGxhdGZvcm1Xb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwogCiAgICAg
ICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJheQogICAgICAgICBhdXRvIG51bUpvYnMgPSBw
YXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CkBAIC00MzcsMTAgKzQ2MiwxMCBAQCBib29sIEZF
VHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQog
ICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRZID0gMDsKIAogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bUpvYnM7ICsraSkgewotICAgICAgICAgICAgICAgIEZpbGxSZWdp
b25QYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAgICAg
ICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSAmZmlsdGVyOwotICAgICAgICAgICAgICAgIHBhcmFt
cy5lZmZlY3QgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJmRl
c3RpbmF0aW9uUGl4ZWxBcnJheTsKKyAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBh
cmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoaSk7CisgICAgICAgICAgICAgICAgcGFyYW1z
LmZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZmls
dGVyU2NhbGUgPSBmaWx0ZXJTY2FsZTsKKyAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxBcnJh
eSA9ICZwaXhlbEFycmF5OwogICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSAm
cGFpbnRpbmdEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5zdGl0Y2hEYXRhID0gc3RpdGNo
RGF0YTsKICAgICAgICAgICAgICAgICBwYXJhbXMuc3RhcnRZID0gc3RhcnRZOwpAQCAtNDUxLDE1
ICs0NzYsNDggQEAgYm9vbCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImIGZpbHRlcikKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcGFyYWxsZWxK
b2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVh
ZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBwYWlu
dCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKGZpbHRlciwgZGVzdGluYXRpb25Q
aXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7CisgICAgYXBw
bHlQbGF0Zm9ybUdlbmVyaWMoZmlsdGVyUmVnaW9uLCBmaWx0ZXJTY2FsZSwgcGl4ZWxBcnJheSwg
cGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworfQorCitib29sIEZFVHVyYnVs
ZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZp
bHRlckVmZmVjdFZlY3RvciYpCit7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9
IG1fZWZmZWN0LmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgaWYgKCFkZXN0
aW5hdGlvblBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisK
KyAgICBJbnRTaXplIHJlc3VsdFNpemUobV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXpl
KCkpOworICAgIGlmIChyZXN1bHRTaXplLmFyZWEoKS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChyZXN1bHRTaXplLmlzRW1wdHkoKSkgeworICAgICAg
ICBkZXN0aW5hdGlvblBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgYXV0byB0aWxlU2l6ZSA9IHJvdW5kZWRJbnRTaXplKG1fZWZmZWN0LmZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7CisgICAgCisgICAgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVggPSBtX2VmZmVjdC5iYXNlRnJlcXVlbmN5WCgpOworICAgIGZsb2F0IGJhc2VGcmVx
dWVuY3lZID0gbV9lZmZlY3QuYmFzZUZyZXF1ZW5jeVkoKTsKKyAgICBhdXRvIHN0aXRjaERhdGEg
PSBjb21wdXRlU3RpdGNoaW5nKHRpbGVTaXplLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5j
eVksIG1fZWZmZWN0LnN0aXRjaFRpbGVzKCkpOworCisgICAgYXV0byBwYWludGluZ0RhdGEgPSBp
bml0UGFpbnRpbmdEYXRhKG1fZWZmZWN0LnR5cGUoKSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVx
dWVuY3lZLCBtX2VmZmVjdC5udW1PY3RhdmVzKCksIG1fZWZmZWN0LnNlZWQoKSwgbV9lZmZlY3Qu
c3RpdGNoVGlsZXMoKSwgdGlsZVNpemUpOworCisgICAgYXBwbHlQbGF0Zm9ybShtX2VmZmVjdC5h
YnNvbHV0ZVBhaW50UmVjdCgpLCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSwgZGVzdGluYXRpb25QaXhl
bEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEpOwogICAgIHJldHVybiB0cnVlOwogfQog
Citib29sIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQoreworICAgIHJldHVybiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIoKnRoaXMp
LmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVHVyYnVsZW5jZVR5cGUgdHlwZSkKIHsKICAgICBz
d2l0Y2ggKHR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmluZGV4IGU2OThiMzEzZjE4ODYyNTAwMzRiMDY1
OTBkMWUyYjNlZDZkYzM5ODguLjdjNDdjNzg3NDliODU2ZmM5ZjkxYWY4NGM2MTM0Y2Y0N2RmMDZl
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNTgsNjQgKzU4LDEzIEBAIHB1YmxpYzoKICAgICBib29s
IHNldFN0aXRjaFRpbGVzKGJvb2wpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBpbnQg
c19ibG9ja1NpemUgPSAyNTY7Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrTWFzayA9IHNf
YmxvY2tTaXplIC0gMTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVu
c2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwg
am9icy4KLQotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBQYWludGluZ0RhdGEo
bG9uZyBwYWludGluZ1NlZWQsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAgOiBzZWVkKHBh
aW50aW5nU2VlZCkKLSAgICAgICAgICAgICwgZmlsdGVyU2l6ZShwYWludGluZ1NpemUpCi0gICAg
ICAgICAgICAsIGJhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQotICAgICAgICAgICAgLCBi
YXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAg
ICAgICAgbG9uZyBzZWVkOwotICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBzX2Jsb2Nr
U2l6ZSArIDJdOwotICAgICAgICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9ja1NpemUgKyAy
XVsyXTsKLSAgICAgICAgSW50U2l6ZSBmaWx0ZXJTaXplOwotICAgICAgICBmbG9hdCBiYXNlRnJl
cXVlbmN5WDsKLSAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVk7Ci0KLSAgICAgICAgaW5saW5l
IGxvbmcgcmFuZG9tKCk7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTdGl0Y2hEYXRhIHsKLSAgICAg
ICAgU3RpdGNoRGF0YSgpID0gZGVmYXVsdDsKLQotICAgICAgICBpbnQgd2lkdGggeyAwIH07IC8v
IEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KLSAgICAgICAgaW50
IHdyYXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCi0gICAgICAgIGludCBoZWln
aHQgeyAwIH07Ci0gICAgICAgIGludCB3cmFwWSB7IDAgfTsKLSAgICB9OwotCi0gICAgc3RydWN0
IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgY29uc3QgRmlsdGVyKiBmaWx0ZXI7Ci0g
ICAgICAgIEZFVHVyYnVsZW5jZSogZWZmZWN0OwotICAgICAgICBVaW50OENsYW1wZWRBcnJheSog
cGl4ZWxBcnJheTsKLSAgICAgICAgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7Ci0gICAgICAg
IFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKLSAgICAgICAgaW50IHN0YXJ0WTsKLSAgICAgICAgaW50
IGVuZFk7Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIoRmlsbFJl
Z2lvblBhcmFtZXRlcnMqKTsKLQogICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwgZmxv
YXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywg
ZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKICAgICB2b2lkIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJl
Y3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotICAgIGJvb2wgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdE
YXRhJik7Ci0gICAgU3RpdGNoRGF0YSBjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUs
IGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZKSBjb25zdDsKLSAg
ICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiwg
Y29uc3QgU3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBDb2xvckNv
bXBvbmVudHM8dWludDhfdCwgND4gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29u
c3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owot
ICAgIHZvaWQgZmlsbFJlZ2lvbihjb25zdCBGaWx0ZXImLCBVaW50OENsYW1wZWRBcnJheSYsIGNv
bnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25z
dDsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlk
ZTsKIAotICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXBy
ZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVHVyYnVsZW5jZVR5cGUgbV90
eXBlOwogICAgIGZsb2F0IG1fYmFzZUZyZXF1ZW5jeVg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAppbmRleCBjMDc1
MjYzMTRmN2U3NzgxMjVlMDA1N2JiMDNiMTFjZjlkMDE3YjViLi4wZjRiM2FjMjYxMTNhN2QzYjZi
NzY5OGFlMjNmZTdmYmFiNzEyMWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTQ5LDExICs0OSwxNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhclJlc3VsdCgpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xl
YXJSZXN1bHRzUmVjdXJzaXZlKCk7CiAKKyAgICBJbWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKworICAg
IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOwogICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdW5tdWx0aXBsaWVkUmVzdWx0KGNv
bnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6
Om51bGxvcHQpOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZFJl
c3VsdChjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+
ID0gc3RkOjpudWxsb3B0KTsKICAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jiwgc3RkOjpvcHRpb25hbDxE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0KTsKKworICAgIHN0ZDo6b3B0aW9u
YWw8UGl4ZWxCdWZmZXI+JiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVj
dCYsIHN0ZDo6b3B0aW9uYWw8RGVzdGluYXRpb25Db2xvclNwYWNlPiA9IHN0ZDo6bnVsbG9wdCk7
CiAgICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVz
dGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uQ29sb3JT
cGFjZT4gPSBzdGQ6Om51bGxvcHQpOworCiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVm
ZmVjdHMoKSB7IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQogICAgIEZpbHRlckVmZmVjdCogaW5w
dXRFZmZlY3QodW5zaWduZWQpIGNvbnN0OwogICAgIHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5w
dXRzKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOyB9CkBAIC0xMjksMjEg
KzEzNSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JT
cGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQpIHsgaW4tPnRyYW5zZm9ybVJlc3VsdENv
bG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNwYWNlKTsgfQogICAgIHZvaWQgdHJhbnNmb3JtUmVz
dWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKICAgICAKLSAgICBz
dGF0aWMgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkRmxvYXRzKGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcykKLSAgICB7Ci0gICAgICAgIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZFZhbHVlcyh2
YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFsaXplZEZs
b2F0KHZhbHVlc1tpXSk7Ci0gICAgICAgIHJldHVybiBub3JtYWxpemVkVmFsdWVzOwotICAgIH0K
LQogcHJvdGVjdGVkOgogICAgIEZpbHRlckVmZmVjdChUeXBlKTsKICAgICAKLSAgICBJbWFnZUJ1
ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFBpeGVs
QnVmZmVyPiYgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBzdGQ6Om9wdGlv
bmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0KICAg
ICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3Rs
eSBvbiB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAogICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5k
IGVhY2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCiAgICAgdmlydHVhbCBib29sIHJl
cXVpcmVzVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3RBcHBsaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdEFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2UxNDI1MWM1NjJlOTY3ZmZiOWFiNzFl
YzNhZmE3MGRjYjljMmIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RBcHBsaWVyLmgKQEAgLTAsMCArMSw1MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJFZmZlY3RBcHBsaWVy
IHsKK3B1YmxpYzoKKyAgICBGaWx0ZXJFZmZlY3RBcHBsaWVyKCkgPSBkZWZhdWx0OworICAgIHZp
cnR1YWwgfkZpbHRlckVmZmVjdEFwcGxpZXIoKSA9IGRlZmF1bHQ7CisgICAgCisgICAgdmlydHVh
bCBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5w
dXRzKSA9IDA7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXJFZmZlY3RUeXBlPgorY2xh
c3MgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdEFwcGxp
ZXIgeworcHVibGljOgorICAgIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcihGaWx0ZXJFZmZl
Y3RUeXBlJiBlZmZlY3QpCisgICAgICAgIDogbV9lZmZlY3QoZWZmZWN0KQorICAgIHsKKyAgICB9
CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRmlsdGVyRWZmZWN0VHlwZSYgbV9lZmZlY3Q7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKaW5kZXggOTRkMTk1MDEzOWQ2ZDI0
M2E4NjYxZTVlYTU1ZDIzNWE3Mzg5ZjVkNS4uOGRiOGU1NjU5N2JhYmVjODY4NjE2ODNmZjhlMDU4
Mjg4YzcxMjZmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9MaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaApAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAg
TGlnaHRUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICB2aXJ0dWFsIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBj
b25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0
ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGluaXRQYWlu
dGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgY29uc3QgPSAwOwog
ICAgIC8vIHogaXMgYSBmbG9hdCBudW1iZXIsIHNpbmNlIGl0IGlzIHRoZSBhbHBoYSB2YWx1ZSBz
Y2FsZWQgYnkgYSB1c2VyCiAgICAgLy8gc3BlY2lmaWVkICJzdXJmYWNlU2NhbGUiIGNvbnN0YW50
LCB3aGljaCB0eXBlIGlzIDxudW1iZXI+IGluIHRoZSBTVkcgc3RhbmRhcmQuCiAgICAgLy8geCBh
bmQgeSBhcmUgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBGaWx0ZXJFZmZlY3QncyBidWZmZXIu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Bv
aW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAppbmRleCAxYWI1ZTE5ZTExYTRmMzZlYTJhNDI2YTc1
MDM4NzkxMjhmNTRiNDRiLi5jMmQ4NzQ5M2IyOGRlMzg2MTNlM2UyMDI4NGZmZTJmZjQyNWZlZTJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Bv
aW50TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM2LDcgKzM2LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi12b2lkIFBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEo
Y29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYpCit2b2lkIFBv
aW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0
ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYpIGNvbnN0CiB7CiAgICAgbV9idWZmZXJQb3NpdGlvbi5z
ZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3Bh
Y2VQb3NpdGlvbi54eSgpKSk7CiAgICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0
IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdo
dFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2lu
dExpZ2h0U291cmNlLmgKaW5kZXggNjdhM2EwYmQzOWE4YTljYzE5NTQzNDk4NTk2ZDcxMTVmNGJi
OTVhNS4uNDJjM2RjNjE3ODg1MjJlYzc4N2NhZWUyYWMzNGE4ZTMyZjlkYmQ0ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291
cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2lu
dExpZ2h0U291cmNlLmgKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0WShm
bG9hdCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRaKGZsb2F0KSBvdmVycmlkZTsKIAotICAgIHZv
aWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBv
dmVycmlkZTsKKyAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0Jiwg
UGFpbnRpbmdEYXRhJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgQ29tcHV0ZWRMaWdodGluZ0RhdGEg
Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQg
eSwgZmxvYXQgeikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CkBAIC01Miw3
ICs1Miw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgRmxvYXRQb2ludDNEIG1fdXNlclNwYWNl
UG9zaXRpb247Ci0gICAgRmxvYXRQb2ludDNEIG1fYnVmZmVyUG9zaXRpb247CisgICAgbXV0YWJs
ZSBGbG9hdFBvaW50M0QgbV9idWZmZXJQb3NpdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlQWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXggY2ZiNTc0NGE3ZGE2Njg2NzlhMWJkODUxOGFlNWIy
ZGYzZDgyY2EzZS4uZDRiNGIxMDUwNmYxMzJkNmVlZDY4OTkwMTE5OWQzM2Y3OTgzYmIyMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VB
bHBoYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yLmgiCiAj
aW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIApAQCAtNDUsMTcgKzQ2LDI3IEBAIHZvaWQgU291cmNlQWxwaGE6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIH0KIAotYm9vbCBTb3Vy
Y2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCisvLyBGSVhNRTog
TW92ZSB0aGUgY2xhc3MgU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291
cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllciA6
IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8U291cmNlQWxwaGE+IHsKKyAgICB1
c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPFNvdXJjZUFscGhhPjsKKwor
cHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZp
bHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsK
K307CisKK2Jvb2wgU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRl
ciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIEltYWdl
QnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQo
KTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW5wdXRFZmZlY3QoMCktPmltYWdlQnVmZmVy
UmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW5wdXRFZmZlY3RzWzBd
LT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBhYnNv
bHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CisgICAgRmxvYXRSZWN0IGltYWdlUmVjdChGbG9hdFBv
aW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKICAgICBHcmFwaGlj
c0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwogCiAgICAg
ZmlsdGVyQ29udGV4dC5maWxsUmVjdChpbWFnZVJlY3QsIENvbG9yOjpibGFjayk7CkBAIC02NCw2
ICs3NSwxMSBAQCBib29sIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBTb3VyY2VBbHBoYTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBTb3Vy
Y2VBbHBoYVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMo
KSk7Cit9CisKIFRleHRTdHJlYW0mIFNvdXJjZUFscGhhOjpleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0CiB7CiAgICAgdHMgPDwg
aW5kZW50IDw8ICJbU291cmNlQWxwaGFdXG4iOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKaW5kZXggZmEy
MTBjNzIwNzQxZTQzNTI3NmVkNWVmMjExZDc3MjYzN2M5Nzc2Yy4uMDI5NjdmMjgyOTQzNGU5OTU1
OTY3YzliY2QwOTgxMGZjYTAzZDk4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCkBAIC0yMSw2ICsy
MSw3IEBACiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgi
CisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtNDMsOSArNDQs
MTkgQEAgdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25z
dCBGaWx0ZXImIGZpbHRlcikKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KHBhaW50UmVjdCkpOwogfQogCi1ib29sIFNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBT
b3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVy
IGZpbGVzLgorY2xhc3MgU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0
ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8U291cmNlR3JhcGhpYz4geworICAgIHVzaW5nIEJhc2Ug
PSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8U291cmNlR3JhcGhpYz47CisKK3B1YmxpYzoK
KyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBj
b25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCiti
b29sIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmls
dGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImKQogewotICAgIEltYWdlQnVmZmVyKiByZXN1
bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1hZ2VCdWZmZXIqIHJl
c3VsdEltYWdlID0gbV9lZmZlY3QuY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBJbWFn
ZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBmaWx0ZXIuc291cmNlSW1hZ2UoKTsKICAgICBpZiAoIXJl
c3VsdEltYWdlIHx8ICFzb3VyY2VJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTQs
NiArNjUsMTEgQEAgYm9vbCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgU291cmNlR3Jh
cGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAg
IHJldHVybiBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIs
IGlucHV0RWZmZWN0cygpKTsKK30KKwogVGV4dFN0cmVhbSYgU291cmNlR3JhcGhpYzo6ZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25z
dAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUdyYXBoaWNdXG4iOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3Vy
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGln
aHRTb3VyY2UuY3BwCmluZGV4IDcxNjA3YWIwMGZmOWQ2YTZkMDE2OTFkOWJiYjg1NTNkMWYzNDhk
MDAuLmU3YzdjMDRlZGVlZDg3MmU3OWEyMjNiZGFkODZhOTFlZDMzZjAyMmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RM
aWdodFNvdXJjZS5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8g
YWNjb3JkaW5nIHRvIHRoZSBTVkcgMS4xIFNFIGxpZ2h0IHJlZ3Jlc3Npb24gdGVzdHMKIHN0YXRp
YyBjb25zdCBmbG9hdCBhbnRpQWxpYXNUcmVzaG9sZCA9IDAuMDE2ZjsKIAotdm9pZCBTcG90TGln
aHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZl
Y3QsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQordm9pZCBTcG90TGlnaHRTb3VyY2U6Omlu
aXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhKSBjb25zdAogewogICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFko
ZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9z
aXRpb24ueHkoKSkpOwogICAgIC8vIFRvIHNjYWxlIFosIG1hcCBhIHBvaW50IG9mZnNldCBmcm9t
IG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9uIGJ5IHouCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJj
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRT
b3VyY2UuaAppbmRleCAzNTE1MTYzNTA3N2VlZjBlNzNjMjZhZTQ0MmE1ZWE1MzRmZDFmM2JmLi4y
ZWRkOTMwOTlkOTcyODJiMDZkN2MxOWU3NzI3ZDc1ZDY0MmU5YzUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291
cmNlLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0U3BlY3VsYXJFeHBv
bmVudChmbG9hdCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRMaW1pdGluZ0NvbmVBbmdsZShmbG9h
dCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZm
ZWN0JiwgUGFpbnRpbmdEYXRhJikgb3ZlcnJpZGU7CisgICAgdm9pZCBpbml0UGFpbnRpbmdEYXRh
KGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIGNvbnN0IG92ZXJyaWRlOwogICAg
IENvbXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWlu
dGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0IGZpbmFsOwogCiAgICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOwpAQCAtNjgsNyArNjgsNyBAQCBwcml2YXRlOgogICAgIEZsb2F0UG9pbnQz
RCBtX3VzZXJTcGFjZVBvc2l0aW9uOwogICAgIEZsb2F0UG9pbnQzRCBtX3VzZXJTcGFjZVBvaW50
c0F0OwogCi0gICAgRmxvYXRQb2ludDNEIG1fYnVmZmVyUG9zaXRpb247CisgICAgbXV0YWJsZSBG
bG9hdFBvaW50M0QgbV9idWZmZXJQb3NpdGlvbjsKIAogICAgIGZsb2F0IG1fc3BlY3VsYXJFeHBv
bmVudDsKICAgICBmbG9hdCBtX2xpbWl0aW5nQ29uZUFuZ2xlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAppbmRleCA1NTQwMGI3ZWJh
M2U0ZjZjMmJlZDk4NGJjY2I1MWQyMzdlMzQ0NDdhLi5jODAxYjU4ZGRjZDYwMGM4OTk0MDUxYzAy
NDZkNTA5ZTQ3Njc0ZGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIlNWR0ZF
SW1hZ2UuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFw
cGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTc0LDM4ICs3NSw1MyBAQCB2b2lkIEZFSW1hZ2U6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFic29s
dXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoaW1hZ2VSZWN0KSk7CiB9CiAKLWJvb2wgRkVJ
bWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorLy8gRklY
TUU6IE1vdmUgdGhlIGNsYXNzIEZFSW1hZ2VTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291
cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUltYWdlU29mdHdhcmVBcHBsaWVyIDogcHVi
bGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUltYWdlPiB7CisgICAgdXNpbmcgQmFz
ZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUltYWdlPjsKKworcHVibGljOgorICAg
IHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0
IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKK307CisKK2Jvb2wg
RkVJbWFnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IEZpbHRlckVmZmVjdFZlY3RvciYpCiB7CiAgICAgLy8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdh
eXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkKLSAgICBzZXRSZXN1bHRDb2xvclNw
YWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICBtX2VmZmVjdC5zZXRSZXN1
bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKIAotICAgIEltYWdl
QnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQo
KTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
dXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAg
IGF1dG8gcHJpbWl0aXZlU3VicmVnaW9uID0gbV9lZmZlY3QuZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKCk7CiAgICAgYXV0byYgY29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CiAKLSAg
ICBXVEY6OnN3aXRjaE9uKG1fc291cmNlSW1hZ2UsCisgICAgV1RGOjpzd2l0Y2hPbihtX2VmZmVj
dC5zb3VyY2VJbWFnZSgpLAogICAgICAgICBbJl0gKGNvbnN0IFJlZjxJbWFnZT4mIGltYWdlKSB7
CiAgICAgICAgICAgICBhdXRvIGltYWdlUmVjdCA9IHByaW1pdGl2ZVN1YnJlZ2lvbjsKLSAgICAg
ICAgICAgIGF1dG8gc3JjUmVjdCA9IG1fc291cmNlSW1hZ2VSZWN0OwotICAgICAgICAgICAgbV9w
cmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QoaW1hZ2VSZWN0LCBzcmNSZWN0KTsKKyAg
ICAgICAgICAgIGF1dG8gc3JjUmVjdCA9IG1fZWZmZWN0LnNvdXJjZUltYWdlUmVjdCgpOworICAg
ICAgICAgICAgbV9lZmZlY3QucHJlc2VydmVBc3BlY3RSYXRpbygpLnRyYW5zZm9ybVJlY3QoaW1h
Z2VSZWN0LCBzcmNSZWN0KTsKICAgICAgICAgICAgIGltYWdlUmVjdC5zY2FsZShmaWx0ZXIuZmls
dGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICBpbWFnZVJlY3QgPSBkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKEludFJlY3QoaW1hZ2VSZWN0KSk7CisgICAgICAgICAgICBpbWFnZVJlY3QgPSBtX2Vm
ZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKEludFJlY3QoaW1hZ2VSZWN0KSk7CiAgICAg
ICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgaW1hZ2VSZWN0LCBzcmNSZWN0KTsKICAg
ICAgICAgfSwKICAgICAgICAgWyZdIChjb25zdCBSZWY8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1ZmZl
cikgewogICAgICAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBwcmltaXRpdmVTdWJyZWdpb247Ci0g
ICAgICAgICAgICBpbWFnZVJlY3QubW92ZUJ5KG1fc291cmNlSW1hZ2VSZWN0LmxvY2F0aW9uKCkp
OworICAgICAgICAgICAgaW1hZ2VSZWN0Lm1vdmVCeShtX2VmZmVjdC5zb3VyY2VJbWFnZVJlY3Qo
KS5sb2NhdGlvbigpKTsKICAgICAgICAgICAgIGltYWdlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVy
U2NhbGUoKSk7Ci0gICAgICAgICAgICBpbWFnZVJlY3QgPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKEludFJlY3QoaW1hZ2VSZWN0KSk7CisgICAgICAgICAgICBpbWFnZVJlY3QgPSBtX2VmZmVj
dC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKEludFJlY3QoaW1hZ2VSZWN0KSk7CiAgICAgICAg
ICAgICBjb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgaW1hZ2VSZWN0LmxvY2F0
aW9uKCkpOwogICAgICAgICB9CiAgICAgKTsKIAogICAgIHJldHVybiB0cnVlOwogfQorICAgIAor
Ym9vbCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIp
Cit7CisgICAgcmV0dXJuIEZFSW1hZ2VTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRl
ciwgaW5wdXRFZmZlY3RzKCkpOworfQogCiBUZXh0U3RyZWFtJiBGRUltYWdlOjpleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50
YXRpb24pIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUltYWdlLmgKaW5kZXggMzRmNzFiYTg0NmVjMGZmMmRkNjgyNzAxNmQ5YTA1ODk0Y2I0
ZThkOS4uMjgwOTNhYTFlNDUxNDRjYjJmNzc2MDdmYTE2ZGNjYjE3YzlmZTdjZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaApAQCAtNDEs
NiArNDEsOSBAQCBwdWJsaWM6CiAgICAgU291cmNlSW1hZ2UmIHNvdXJjZUltYWdlKCkgeyByZXR1
cm4gbV9zb3VyY2VJbWFnZTsgfQogICAgIHZvaWQgc2V0SW1hZ2VTb3VyY2UoU291cmNlSW1hZ2Um
JiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92ZShzb3VyY2VJbWFnZSk7IH0K
IAorICAgIEZsb2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NvdXJj
ZUltYWdlUmVjdDsgfQorICAgIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJl
c2VydmVBc3BlY3RSYXRpbygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlc2VydmVBc3BlY3RSYXRpbzsg
fQorCiBwcml2YXRlOgogICAgIEZFSW1hZ2UoU291cmNlSW1hZ2UmJiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445045</attachid>
            <date>2021-11-23 13:04:11 -0800</date>
            <delta_ts>2021-11-23 13:40:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232832-20211123130410.patch</filename>
            <type>text/plain</type>
            <size>217229</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYwZGJlNjNmYjA0ZTM1
ZjBiZDk4OTc3M2UzNWM3ZDNmZGJkMTdlMC4uM2M3NWFmYjlhMjkwZjIyYTYwYzg2NDFkNThiM2Q2
NjdiNDNkY2E1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0NyBAQAorMjAyMS0xMS0yMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1vdmUgdGhlIHNvZnR3YXJlIEZpbHRlckVmZmVjdCBmdW5jdGlvbnMgdG8gc2VwYXJhdGUgYXBw
bGllciBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzI4MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHN0ZXAgaXMgcmVxdWlyZWQgdG8gbW92ZSB0aGUgRmlsdGVyRWZmZWN0IHNvZnR3
YXJlIGNvZGUgdG8gc2VwYXJhdGUKKyAgICAgICAgZmlsZXMuIFNpbmNlIHRoZSBGaWx0ZXJFZmZl
Y3QgY2FuIGJlIGFwcGxpZWQgd2l0aCB0aGUgYWNjZWxlcmF0ZWQgQ29yZUltYWdlCisgICAgICAg
IG9yIHRoZSB1bmFjY2VsZXJhdGVkIHNvZnR3YXJlIG1ldGhvZHMsIGl0IG1ha2Ugc2Vuc2UgdG8g
cmVtb3ZlIHRoZSBzb2Z0d2FyZQorICAgICAgICBjb2RlIGZyb20gdGhlIEZpbHRlckVmZmVjdCBj
bGFzc2VzLgorCisgICAgICAgIFRoZSBwbGFuIGlzIHRvIGhhdmUgdGhlIHNvZnR3YXJlIGNvZGUg
aW4gc2VwYXJhdGUgZmlsZXMuIEVhY2ggRmlsdGVyRWZmZWN0CisgICAgICAgIHdpbGwgYmUgYXNr
ZWQgdG8gY3JlYXRlIGFuIGFwcGxpZXIgd2hpY2ggY2FuIGJlIFNvZnR3YXJlQXBwbGllciBvcgor
ICAgICAgICBDb3JlSW1hZ2VBcHBsaWVyLiBUaGlzIGFwcGxpZXIgd2lsbCBiZSBnaXZlbiB0byBG
aWx0ZXJFZmZlY3Q6OmFwcGx5KCkKKyAgICAgICAgd2hpY2ggd2lsbCBwYXNzIHRoZSBpbnB1dCBp
bWFnZXMgdG8gdGhlIGFwcGx5KCkgbWV0aG9kIG9mIHRoZSBhcHBsaWVyIHRvCisgICAgICAgIGdl
dCB0aGUgcmVzdWx0IGltYWdlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExp
Z2h0U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3RhbnRMaWdodFNvdXJjZTo6aW5p
dFBhaW50aW5nRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXN0YW50TGlnaHRTb3Vy
Y2U6OmluaXRQYWludGluZ0RhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmRTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlU2F0dXJhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6
OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6Om1hdHJpeCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0
ZUFuZEh1ZVJvdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyOjpsdW1pbmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxh
dGZvcm1VbmFjY2VsZXJhdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNv
cmU6Om1hdHJpeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1ZVJv
dGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsdW1pbmFuY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVyYXRlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjplZmZlY3RUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKTog
RGVsZXRlZC4KKyAgICAgICAgTW92ZSBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoKSBhbmQg
Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cygpIGZyb20KKyAgICAgICAgdGhlIGhlYWRlciBm
aWxlIHRvIHRoZSBzb3VyY2UgZmlsZS4gTW92ZSBjaG9vc2luZyB0aGUgY2FsY3VsYXRpb24gbW9k
ZSBmb3IKKyAgICAgICAgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCBmcm9tIGVmZmVjdEFwcGx5
QWNjZWxlcmF0ZWQoKSB0byBhcHBseVBsYXRmb3JtKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUlkZW50aXR5VGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGll
cjo6Y29tcHV0ZVRhYnVsYXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlRGlzY3JldGVUYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlTGluZWFy
VGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6Y29tcHV0ZUdhbW1hVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUxvb2t1cFRhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxp
bmVhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVHYW1tYVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAg
ICBJbnN0ZWFkIG9mIGNhbGxpbmcgY29tcHV0ZUxvb2t1cFRhYmxlcygpIHRvIGluaXRpYWxpemUg
dGhlIGZvdXIgbG9va3VwCisgICAgICAgIHRhYmxlcywgY2FsbCBjb21wdXRlTG9va3VwVGFibGUo
KSBmb3VyIHRpbWVzOiBvbmUgZm9yIGVhY2ggY29sb3IgY2hhbm5lbC4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjbGFtcEJ5dGUpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVBcml0aG1ldGljUGl4
ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21w
dXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBv
c2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFyaXRobWV0aWMpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5QXJpdGhtZXRpYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlOb25Bcml0
aG1ldGljKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjph
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wQnl0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKTogRGVsZXRlZC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpjbGFt
cFJHQkFWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVB
cHBsaWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpnZXRQaXhlbFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldEludGVyaW9yUGl4ZWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldE91
dGVyUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2
ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNs
YW1wUkdCQVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNldERlc3RpbmF0aW9u
UGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmZh
c3RTZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpnZXRQaXhlbFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
Lmg6CisgICAgICAgIEFkZCB0aGUgbWVtYmVycyBvZiBGRUNvbnZvbHZlTWF0cml4IHRvIFBhaW50
aW5nRGF0YS4gUmVtb3ZlIHRoZSB0ZW1wbGF0ZQorICAgICAgICBmdW5jdGlvbnMgYW5kIHRoZSBN
U1ZDIHdhcm5pbmcuIEp1c3QgaWdub3JlIHRoZSBhbHBoYSBjaGFubmVsIGlmIAorICAgICAgICBw
cmVzZXJ2ZUFscGhhVmFsdWVzIGlzIHRydWUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlm
ZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6CisgICAgICAgIE5vIG5lZWQgdG8gcGFz
cyBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcgd2hlbiBjcmVhdGluZyBGRURpZmZ1c2VMaWdo
dGluZy4KKyAgICAgICAgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZyBpcyBh
bHJlYWR5IHBhc3NlZCB0byBGRUxpZ2h0aW5nLiAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OmJ5dGVPZmZzZXRPZlBpeGVsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjp4Q2hhbm5lbElu
ZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVB
cHBsaWVyOjp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxh
Y2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGll
cik6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6
YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpieXRlT2Zmc2V0T2ZQaXhlbCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5oOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsSW5kZXgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnlD
aGFubmVsSW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRv
d1NvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kU29mdHdhcmVBcHBs
aWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2xh
bXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2Fs
Y3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdh
dXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6a2VybmVsUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBbHBoYU9ubHkpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXIp
OgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJs
dXJBY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJHZW5lcmljKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyV29ya2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKGdhdXNzaWFuS2VybmVsRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Omtlcm5lbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJv
eEJsdXJBbHBoYU9ubHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpzdGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5C
bHVyLmg6CisgICAgICAgIEFkZCB0aGUgdHdvIG1lbWJlcnMgJ2lzQWxwaGFJbWFnZScgYW5kICdl
ZGdlTW9kZScgdG8gQXBwbHlQYXJhbWV0ZXJzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6QWxwaGFXaW5kb3c6OnRvcExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmJvdHRvbUxl
ZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6
QWxwaGFXaW5kb3c6OnRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6Y2VudGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93Ojpib3R0b20gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5k
b3c6OnNldFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdT
b2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNldFRvcFJpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93
OjpzZXRSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNoaWZ0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzaGlmdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6
OnRvcExlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3
YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSaWdo
dE5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBs
aWVyOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5v
cm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5v
cm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9y
bWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6
OnNldFBpeGVsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6c2V0UGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
R2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRv
cExlZnROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6Omxl
ZnRDb2x1bW5Ob3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFs
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5n
RGF0YTo6Ym90dG9tTGVmdE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJp
Z2h0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldFBpeGVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldFBp
eGVsSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxh
dGZvcm1BcHBseUdlbmVyaWNQYWludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpsaWdodGluZ0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnNwZWN1bGFyRXhwb25lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcExlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OnRvcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBo
YVdpbmRvdzo6Y2VudGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmc6OkFscGhhV2luZG93Ojpib3R0b20gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRv
cFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2lu
ZG93OjpzZXRSaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpB
bHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNoaWZ0Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzaGlmdCk6IERlbGV0ZWQuCisgICAgICAg
IE1vdmUgZmlsaW5nIHRoZSBzdHJ1Y3R1cmUgTGlnaHRpbmdEYXRhIGZyb20gRkVMaWdodGluZzo6
ZHJhd0xpZ2h0aW5nKCkKKyAgICAgICAgdG8gRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBw
bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6cGl4ZWxBcnJheUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWFrZVBpeGVsVmFs
dWVGcm9tQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllcjo6bWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWluT3JNYXgpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpjb2x1bW5FeHRyZW11
bSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Omtlcm5l
bEV4dHJlbXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
cjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5
U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtl
Q29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbHVtbkV4
dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omtlcm5lbEV4dHJlbXVtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVy
aWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxh
dGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oOgorICAgICAgICBSZW1vdmUgdGhlIHRlbXBsYXRl
IGZ1bmN0aW9ucyBhbmQganVzdCB0aGUgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBhcyBhbgorICAg
ICAgICBhcmd1bWVudCB0byB0aGVzZSBmdW5jdGlvbnMuICBSZXBsYWNlIHBsYXRmb3JtQXBwbHlE
ZWdlbmVyYXRlKCkgd2l0aCBhCisgICAgICAgIGNhbGwgdG8gaXNEZWdlbmVyYXRlKCkgYW5kIG1v
dmUgdGhlIGNhbGwgdG8gY29weVByZW11bHRpcGxpZWRSZXN1bHQoKSB0byAKKyAgICAgICAgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0U29mdHdhcmVBcHBs
aWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxh
ckxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVT
cGVjdWxhckxpZ2h0aW5nKToKKyAgICAgICAgTm8gbmVlZCB0byBwYXNzIEZFTGlnaHRpbmc6OlNw
ZWN1bGFyTGlnaHRpbmcgd2hlbiBjcmVhdGluZyBGRURpZmZ1c2VMaWdodGluZy4KKyAgICAgICAg
RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcgaXMgYWxyZWFkeSBwYXNzZWQg
dG8gRkVMaWdodGluZy4gCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6UGFpbnRpbmdEYXRh
OjpyYW5kb20pOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
OjpzbW9vdGhDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFw
cGxpZXI6OmxpbmVhckludGVycG9sYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxl
bmNlU29mdHdhcmVBcHBsaWVyOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZVN0aXRjaGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6Om5vaXNlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjp0b0ludEJhc2VkQ29sb3JD
b21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGll
cjo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1X
b3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0Rh
dGE6OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVy
YnVsZW5jZTo6ZmlsbFJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgTW92ZSB0aGUgdGhyZWFkaW5nIGNvZGUgZnJvbSBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSB0
byBhIG5ldyBmdW5jdGlvbgorICAgICAgICBjYWxsZWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBs
aWVyOjphcHBseVBsYXRmb3JtKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpub3Jt
YWxpemVkRmxvYXRzKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSBub3JtYWxpemVkRmxvYXRzKCkg
ZnJvbSBGaWx0ZXJFZmZlY3QgdG8gRkVDb2xvck1hdHJpeC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBwbGllci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjo6RmlsdGVyRWZmZWN0Q29uY3Jl
dGVBcHBsaWVyKToKKyAgICAgICAgSW50cm9kdWNlIHRoaXMgY2xhc3Mgd2hpY2ggd2lsbCBiZSB0
aGUgYmFzZSBjbGFzcyBvZiBhbGwgdGhlIHNvZnR3YXJlIGFuZAorICAgICAgICB0aGUgQ29yZUlt
YWdlIEZpbHRlckVmZmVjdCBhcHBsaWVycy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvTGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9pbnRMaWdodFNv
dXJjZTo6aW5pdFBhaW50aW5nRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQb2ludExp
Z2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaDoKKyAgICAgICAgTWFrZSBpbml0
UGFpbnRpbmdEYXRhKCkgYmUgYSBjb25zdGFudCBmdW5jdGlvbi4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaDoKKyAgICAgICAg
TWFrZSBpbml0UGFpbnRpbmdEYXRhKCkgYmUgYSBjb25zdGFudCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVJbWFnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVJ
bWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmg6CisKIDIwMjEtMTEtMjMgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fp
ZEBhcHBsZS5jb20+CiAKICAgICAgICAgW0dQVSBQcm9jZXNzXSBSZWZhY3RvciB0aGUgRmlsdGVy
RWZmZWN0IHJlc3VsdCBidWZmZXJzIGludG8gYSBuZXcgY2xhc3MgbmFtZWQgJ0ZpbHRlckltYWdl
JwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDdiNGQyMWRhOWIyZjRkODU1YTgxM2NhOWE5MTNlNWIyODc0MDE2ZjAuLjI4NmM5MzQ5
YjEyMjE5NzljODk5NjlkMWIxYjA5NjIxNDAwMDNjMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwODk2LDYgKzEwODk2LDcg
QEAKIAkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9k
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQTlGMjc0QzVDQzcwMEUyQTg4RSAv
KiBGaWx0ZXJFZmZlY3RBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdEFwcGxp
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTQyM0UxNzMyNzAwOEQ3
NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyog
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
bGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTk0
Miw2ICsyNTk0Myw3IEBACiAJCQkJODQ1RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5o
ICovLAogCQkJCTA4QzkyNTE3MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuY3BwICov
LAogCQkJCTA4QzkyNTE4MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCAqLywKKwkJ
CQk3MkExM0E5RjI3NEM1Q0M3MDBFMkE4OEUgLyogRmlsdGVyRWZmZWN0QXBwbGllci5oICovLAog
CQkJCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAg
Ki8sCiAJCQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVy
LmggKi8sCiAJCQkJNzIxNEI5QjcyNzQ0NThGQTAwM0JFNkRGIC8qIEZpbHRlckVmZmVjdFZlY3Rv
ci5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwCmluZGV4IGU1ZmIxZmY2NjVkM2Vi
MDdmNDhlZTFkMDJiYmZmY2M2YjA0NDFmODkuLjg5NDdhOTg2MGU0NmIxMWM1OGUyNzc1MzYyNTZm
ZGI5ZDUxZDE1NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM1LDcgKzM1
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6
aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSkKK3ZvaWQgRGlzdGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0
IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKSBjb25zdAogewogICAg
IGZsb2F0IGF6aW11dGggPSBkZWcycmFkKG1fYXppbXV0aCk7CiAgICAgZmxvYXQgZWxldmF0aW9u
ID0gZGVnMnJhZChtX2VsZXZhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAppbmRleCBj
MWUzMGVkZTc1OTgzNzI4YTYzMmJjY2ZmYjA5OTczYTNhNGU3MmZkLi4zMDE5MmIwZWYwY2QxYmY0
MDNkNDIzMzhjZTQwODc3MThkNzUxNzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKQEAg
LTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0QXppbXV0aChmbG9hdCkgb3ZlcnJp
ZGU7CiAgICAgYm9vbCBzZXRFbGV2YXRpb24oZmxvYXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBp
bml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJy
aWRlOworICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWlu
dGluZ0RhdGEmKSBjb25zdCBvdmVycmlkZTsKICAgICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21w
dXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBm
bG9hdCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCmluZGV4
IGM5MWFhM2Q2OGQ1ZGZmNTMzOTFmZTBkN2Q5OGI3OWE2YjZkNTI4NmQuLmQyY2FiYmE5Zjg2YWIz
MzIwZWMyM2UwNWQ3ZmE1N2FhM2E0ZDQyYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtMjYsMTAgKzI2LDEwIEBA
CiAjaW5jbHVkZSAiRkVCbGVuZC5oIgogCiAjaW5jbHVkZSAiRkVCbGVuZE5FT04uaCIKKyNpbmNs
dWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUzLDEzICs1Mywy
MyBAQCBib29sIEZFQmxlbmQ6OnNldEJsZW5kTW9kZShCbGVuZE1vZGUgbW9kZSkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFQmxlbmRTb2Z0d2FyZUFw
cGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUJsZW5k
U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUJs
ZW5kPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUJs
ZW5kPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5
KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBv
dmVycmlkZTsKK307CisKICNpZiAhSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotYm9vbCBGRUJs
ZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK2Jvb2wgRkVCbGVuZFNv
ZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVj
dG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0
KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CisgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlu
MiA9IGlucHV0RWZmZWN0c1sxXS5nZXQoKTsKIAotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFn
ZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1
ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtNjksMTIgKzc5LDE3IEBAIGJvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEdyYXBoaWNz
Q29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZmls
dGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXpl
KCkgfSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlIH0pOworICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgZmls
dGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5n
UmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdl
QnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIs
IG1fZWZmZWN0LmJsZW5kTW9kZSgpIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCiAK
K2Jvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQoreworICAgIHJldHVybiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0
ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogVGV4dFN0cmVhbSYgRkVCbGVuZDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2Vu
dGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQmxlbmQiOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAKaW5kZXggNWE5MWM0ZWNjNDRmYzc3YWJmZmQ0OWQ3ZDE2OTdkYzE0ZjkyYjY3
NC4uMTAyMzdiYTlkY2MyNDFmZGUxNGYzMTIzZGM2NDg2M2IyMjZiZGYzNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRkVDb2xvck1hdHJpeC5oIgogCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAj
aW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKQEAgLTYzLDMyICs2NCwxMDMgQEAgYm9vbCBGRUNvbG9y
TWF0cml4OjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiAmdmFsdWVzKQogICAgIHJldHVy
biB0cnVlOwogfQogCi1pbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVu
LCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMp
Cit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCog
Y29tcG9uZW50cywgZmxvYXQgdmFsdWUpCit7CisgICAgY29tcG9uZW50c1swXSA9ICgwLjIxMyAr
IDAuNzg3ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAwLjcxNSAqIHZh
bHVlKTsKKyAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7CisgICAg
Y29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOworICAgIGNvbXBvbmVudHNb
NF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzVdID0gKDAuMDcy
IC0gMC4wNzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAtIDAuMjEzICog
dmFsdWUpOworICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKKyAg
ICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7Cit9CisKK3ZvaWQgRkVD
b2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50
cywgZmxvYXQgdmFsdWUpCit7CisgICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9h
dCAvIDE4MCk7CisgICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7
CisgICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAw
LjIxMzsKKyAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1
ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsg
c2luSHVlICogMC45Mjg7CisgICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4y
MTMgKyBzaW5IdWUgKiAwLjE0MzsKKyAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUg
KiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQwOworICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNv
c0h1ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7CisgICAgY29tcG9uZW50c1s2XSA9IDAuMjEz
IC0gY29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKKyAgICBjb21wb25lbnRzWzddID0g
MC43MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNb
OF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7Cit9CisKK1ZlY3Rv
cjxmbG9hdD4gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8Zmxv
YXQ+JiB2YWx1ZXMpCit7CisgICAgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkVmFsdWVzKHZhbHVl
cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytp
KQorICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFsaXplZEZsb2F0KHZhbHVlc1tp
XSk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Cit9CisKKy8vIEZJWE1FOiBNb3ZlIHRo
ZSBjbGFzcyBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBh
bmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllciA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb2xvck1hdHJpeD4geworICAgIHVz
aW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb2xvck1hdHJpeD47CisK
K3B1YmxpYzoKKyAgICBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyKEZFQ29sb3JNYXRyaXgm
KTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVj
dG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGlubGluZSB2b2lk
IG1hdHJpeChmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxw
aGEpIGNvbnN0OworICAgIGlubGluZSB2b2lkIHNhdHVyYXRlQW5kSHVlUm90YXRlKGZsb2F0JiBy
ZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUpIGNvbnN0OworICAgIGlubGluZSB2b2lkIGx1
bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxw
aGEpIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgdm9pZCBhcHBseVBsYXRmb3Jt
QWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImKSBjb25zdDsKKyNlbmRpZgorICAgIHZvaWQgYXBwbHlQ
bGF0Zm9ybVVuYWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImKSBjb25zdDsKKworICAgIHZvaWQgYXBw
bHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYpIGNvbnN0OworCisgICAgZmxvYXQgbV9jb21wb25lbnRz
WzldOworfTsKKworRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6RkVDb2xvck1hdHJpeFNv
ZnR3YXJlQXBwbGllcihGRUNvbG9yTWF0cml4JiBlZmZlY3QpCisgICAgOiBCYXNlKGVmZmVjdCkK
K3sKKyAgICBpZiAobV9lZmZlY3QudHlwZSgpID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFU
RSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKG1f
Y29tcG9uZW50cywgbV9lZmZlY3QudmFsdWVzKClbMF0pOworICAgIGVsc2UgaWYgKG1fZWZmZWN0
LnR5cGUoKSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQorICAgICAgICBGRUNvbG9y
TWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKG1fY29tcG9uZW50cywgbV9lZmZl
Y3QudmFsdWVzKClbMF0pOworfQorCitpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVB
cHBsaWVyOjptYXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxv
YXQmIGFscGhhKSBjb25zdAogewogICAgIGZsb2F0IHIgPSByZWQ7CiAgICAgZmxvYXQgZyA9IGdy
ZWVuOwogICAgIGZsb2F0IGIgPSBibHVlOwogICAgIGZsb2F0IGEgPSBhbHBoYTsKIAotICAgIHJl
ZCAgICAgPSB2YWx1ZXNbIDBdICogciArIHZhbHVlc1sgMV0gKiBnICsgdmFsdWVzWyAyXSAqIGIg
KyB2YWx1ZXNbIDNdICogYSArIHZhbHVlc1sgNF0gKiAyNTU7Ci0gICAgZ3JlZW4gICA9IHZhbHVl
c1sgNV0gKiByICsgdmFsdWVzWyA2XSAqIGcgKyB2YWx1ZXMgWzddICogYiArIHZhbHVlc1sgOF0g
KiBhICsgdmFsdWVzWyA5XSAqIDI1NTsKLSAgICBibHVlICAgID0gdmFsdWVzWzEwXSAqIHIgKyB2
YWx1ZXNbMTFdICogZyArIHZhbHVlc1sxMl0gKiBiICsgdmFsdWVzWzEzXSAqIGEgKyB2YWx1ZXNb
MTRdICogMjU1OwotICAgIGFscGhhICAgPSB2YWx1ZXNbMTVdICogciArIHZhbHVlc1sxNl0gKiBn
ICsgdmFsdWVzWzE3XSAqIGIgKyB2YWx1ZXNbMThdICogYSArIHZhbHVlc1sxOV0gKiAyNTU7Cisg
ICAgY29uc3QgYXV0byYgdmFsdWVzID0gbV9lZmZlY3QudmFsdWVzKCk7CisKKyAgICByZWQgICA9
IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2YWx1ZXNbIDJdICogYiArIHZhbHVl
c1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKKyAgICBncmVlbiA9IHZhbHVlc1sgNV0gKiBy
ICsgdmFsdWVzWyA2XSAqIGcgKyB2YWx1ZXNbIDddICogYiArIHZhbHVlc1sgOF0gKiBhICsgdmFs
dWVzWyA5XSAqIDI1NTsKKyAgICBibHVlICA9IHZhbHVlc1sxMF0gKiByICsgdmFsdWVzWzExXSAq
IGcgKyB2YWx1ZXNbMTJdICogYiArIHZhbHVlc1sxM10gKiBhICsgdmFsdWVzWzE0XSAqIDI1NTsK
KyAgICBhbHBoYSA9IHZhbHVlc1sxNV0gKiByICsgdmFsdWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTdd
ICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVzWzE5XSAqIDI1NTsKIH0KIAotaW5saW5lIHZv
aWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYg
Ymx1ZSwgY29uc3QgZmxvYXQqIGNvbXBvbmVudHMpCitpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4
U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYg
Z3JlZW4sIGZsb2F0JiBibHVlKSBjb25zdAogewogICAgIGZsb2F0IHIgPSByZWQ7CiAgICAgZmxv
YXQgZyA9IGdyZWVuOwogICAgIGZsb2F0IGIgPSBibHVlOwogCi0gICAgcmVkICAgICA9IHIgKiBj
b21wb25lbnRzWzBdICsgZyAqIGNvbXBvbmVudHNbMV0gKyBiICogY29tcG9uZW50c1syXTsKLSAg
ICBncmVlbiAgID0gciAqIGNvbXBvbmVudHNbM10gKyBnICogY29tcG9uZW50c1s0XSArIGIgKiBj
b21wb25lbnRzWzVdOwotICAgIGJsdWUgICAgPSByICogY29tcG9uZW50c1s2XSArIGcgKiBjb21w
b25lbnRzWzddICsgYiAqIGNvbXBvbmVudHNbOF07CisgICAgcmVkICAgICA9IHIgKiBtX2NvbXBv
bmVudHNbMF0gKyBnICogbV9jb21wb25lbnRzWzFdICsgYiAqIG1fY29tcG9uZW50c1syXTsKKyAg
ICBncmVlbiAgID0gciAqIG1fY29tcG9uZW50c1szXSArIGcgKiBtX2NvbXBvbmVudHNbNF0gKyBi
ICogbV9jb21wb25lbnRzWzVdOworICAgIGJsdWUgICAgPSByICogbV9jb21wb25lbnRzWzZdICsg
ZyAqIG1fY29tcG9uZW50c1s3XSArIGIgKiBtX2NvbXBvbmVudHNbOF07CiB9CiAKIC8vIEZJWE1F
OiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWluYW5jZSguLi4pIGZ1bmN0aW9uIGluIENvbG9yTHVt
aW5hbmNlLmguCi1pbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVu
LCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKQoraW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeFNv
ZnR3YXJlQXBwbGllcjo6bHVtaW5hbmNlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQm
IGJsdWUsIGZsb2F0JiBhbHBoYSkgY29uc3QKIHsKICAgICBhbHBoYSA9IDAuMjEyNSAqIHJlZCAr
IDAuNzE1NCAqIGdyZWVuICsgMC4wNzIxICogYmx1ZTsKICAgICByZWQgPSAwOwpAQCAtOTcsMTgg
KzE2OSwxMyBAQCBpbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVu
LCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKQogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCi10
ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KLWJvb2wgZWZmZWN0QXBwbHlBY2Nl
bGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0
PiYgdmFsdWVzLCBmbG9hdCBjb21wb25lbnRzWzldLCBJbnRTaXplIGJ1ZmZlclNpemUpCit2b2lk
IEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChQ
aXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNvbnN0CiB7CisgICAgYXV0byYgcGl4ZWxBcnJheSA9
IHBpeGVsQnVmZmVyLmRhdGEoKTsKKyAgICBhdXRvIGJ1ZmZlclNpemUgPSBwaXhlbEJ1ZmZlci5z
aXplKCk7CisKICAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFy
ZWEoKSAqIDQpOwogICAgIAotICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQ
RV9NQVRSSVgpIHsKLSAgICAgICAgLy8gdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODggdGFr
ZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBG
RUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKLSAgICAgICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFj
ayB0byBub24tdkltYWdlIGNvZGUuCi0gICAgICAgIGlmICh2YWx1ZXNbNF0gIT0gMCB8fCB2YWx1
ZXNbOV0gIT0gMCB8fCB2YWx1ZXNbMTRdICE9IDAgfHwgdmFsdWVzWzE5XSAhPSAwKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIGNvbnN0IGludDMyX3QgZGl2aXNvciA9
IDI1NjsKICAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS5kYXRhKCk7CiAKQEAgLTEyNCw4
ICsxOTEsMTMgQEAgYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5
JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JgogICAgIGRlc3Qucm93Qnl0ZXMgPSBi
dWZmZXJTaXplLndpZHRoKCkgKiA0OwogICAgIGRlc3QuZGF0YSA9IGRhdGE7CiAKLSAgICBzd2l0
Y2ggKGZpbHRlclR5cGUpIHsKKyAgICBzd2l0Y2ggKG1fZWZmZWN0LnR5cGUoKSkgeworICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIGJyZWFrOworCiAgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7CisgICAgICAgIGNvbnN0IGF1dG8mIHZhbHVl
cyA9IG1fZWZmZWN0LnZhbHVlcygpOworCiAgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQg
KiA0XSA9IHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNb
IDBdICogZGl2aXNvcikpLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCkBAIC0xNTQsMTkgKzIyNiwxOSBAQCBib29sIGVmZmVj
dEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mCiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6CiAgICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7CiAgICAgICAgIGNvbnN0IGludDE2
X3QgbWF0cml4WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZihjb21wb25lbnRzWzBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbM10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s2XSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbMF0gKiBk
aXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21w
b25lbnRzWzNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKG1fY29tcG9uZW50c1s2XSAqIGRpdmlzb3IpKSwKICAgICAgICAgICAgIDAsCiAKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzFdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVu
dHNbNF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYoY29tcG9uZW50c1s3XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbMV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21wb25lbnRzWzRdICogZGl2aXNvcikpLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s3XSAq
IGRpdmlzb3IpKSwKICAgICAgICAgICAgIDAsCiAKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzJdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbNV0gKiBkaXZpc29yKSksCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s4XSAqIGRpdmlz
b3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVu
dHNbMl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYobV9jb21wb25lbnRzWzVdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s4XSAqIGRpdmlzb3IpKSwKICAgICAgICAgICAg
IDAsCiAKICAgICAgICAgICAgIDAsCkBAIC0yMDMsMzggKzI3NSwyNSBAQCBib29sIGVmZmVjdEFw
cGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IHRydWU7CiB9CiAjZW5kaWYKIAotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+
Ci12b2lkIGVmZmVjdFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXplKQordm9pZCBGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtVW5hY2NlbGVyYXRlZChQaXhlbEJ1ZmZl
ciYgcGl4ZWxCdWZmZXIpIGNvbnN0CiB7Ci0gICAgZmxvYXQgY29tcG9uZW50c1s5XTsKLQotICAg
IGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSkKLSAgICAgICAg
RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZh
bHVlc1swXSk7Ci0gICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVf
SFVFUk9UQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21w
b25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0KKyAgICBhdXRvJiBwaXhlbEFycmF5ID0g
cGl4ZWxCdWZmZXIuZGF0YSgpOwogICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhl
bEFycmF5Lmxlbmd0aCgpOwogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgaWYgKGVmZmVjdEFw
cGx5QWNjZWxlcmF0ZWQ8ZmlsdGVyVHlwZT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBjb21wb25lbnRz
LCBidWZmZXJTaXplKSkKLSAgICAgICAgcmV0dXJuOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
YnVmZmVyU2l6ZSk7Ci0jZW5kaWYKKyAgICBzd2l0Y2ggKG1fZWZmZWN0LnR5cGUoKSkgeworICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIGJyZWFrOwogCi0gICAg
c3dpdGNoIChmaWx0ZXJUeXBlKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklY
OgogICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9m
ZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CiAgICAgICAg
ICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKICAgICAg
ICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEp
OwogICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQgKyAyKTsKICAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVs
Qnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgbWF0cml4KHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhLCB2YWx1ZXMpOworICAgICAgICAgICAgbWF0cml4KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
KTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKICAg
ICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKICAg
ICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOwpAQCAt
MjQ5LDcgKzMwOCw3IEBAIHZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxB
cnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTCiAgICAgICAgICAgICBmbG9h
dCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKICAgICAgICAg
ICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CiAg
ICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQg
KyAzKTsKLSAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUs
IGNvbXBvbmVudHMpOworICAgICAgICAgICAgc2F0dXJhdGVBbmRIdWVSb3RhdGUocmVkLCBncmVl
biwgYmx1ZSk7CiAgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJl
ZCk7CiAgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVl
bik7CiAgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVl
KTsKQEAgLTI3Myw1MSArMzMyLDUyIEBAIHZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJh
eSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTCiAgICAgfQog
fQogCi1ib29sIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImKQordm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFBp
eGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAg
ICBjb25zdCBhdXRvJiB2YWx1ZXMgPSBtX2VmZmVjdC52YWx1ZXMoKTsKKworICAgIC8vIHZJbWFn
ZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYgYW55IHZhbHVl
IGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0cml4CisgICAg
Ly8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCisgICAgaWYgKG1f
ZWZmZWN0LnR5cGUoKSAhPSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYIHx8ICghdmFsdWVzWzRd
ICYmICF2YWx1ZXNbOV0gJiYgIXZhbHVlc1sxNF0gJiYgIXZhbHVlc1sxOV0pKSB7CisgICAgICAg
IGFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChwaXhlbEJ1ZmZlcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYKKyAgICBhcHBseVBsYXRmb3JtVW5hY2NlbGVyYXRlZChwaXhlbEJ1ZmZl
cik7Cit9CisKK2Jvb2wgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3Qg
RmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGF1dG8gaW4gPSBpbnB1dEVm
ZmVjdHNbMF0uZ2V0KCk7CiAKLSAgICBhdXRvIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1
bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQo
KTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBh
dXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKGluQnVmZmVy
KQotICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZm
ZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsK
KyAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVy
LCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKSk7CiAKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0Q29sb3JT
cGFjZSgpIH07CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fZWZmZWN0LnJl
c3VsdENvbG9yU3BhY2UoKSB9OwogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJl
c3VsdEltYWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKTsKICAgICBhdXRvIHBpeGVsQnVmZmVy
ID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKICAgICBp
ZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBwaXhl
bEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNp
b25zID0gcGl4ZWxCdWZmZXItPnNpemUoKTsKLQotICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0g
bm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7Ci0gICAgCi0gICAgc3dpdGNoIChtX3R5cGUpIHsK
LSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVD
T0xPUk1BVFJJWF9UWVBFX01BVFJJWD4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGlt
ZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NB
VFVSQVRFOiAKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+
KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGVmZmVj
dFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBw
aXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1B
VFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJh
eURpbWVuc2lvbnMpOwotICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KKyAgICBpZiAobV9lZmZlY3QudHlwZSgpID09IEZFQ09MT1JNQVRSSVhfVFlQ
RV9MVU1JTkFOQ0VUT0FMUEhBKQorICAgICAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UodHJ1
ZSk7CiAKKyAgICBhcHBseVBsYXRmb3JtKCpwaXhlbEJ1ZmZlcik7CiAgICAgcmVzdWx0SW1hZ2Ut
PnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAorYm9vbCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxp
ZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBl
JiB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCA0OTdl
YjE5NWU0MTc1ZWNkZmQwY2FiMjRjYmNkOWIwZTM5YTdmODA5Li5mNjlmMGIwMWM5NTA3ZTA1MjZl
MGQxNzdlYmJlZjk2OTAwOWNlMWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtNDQsOCArNDQsOSBA
QCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXM7IH0KICAgICBib29sIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7
CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZs
b2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGNh
bGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVl
KTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNv
bXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVIdWVSb3Rh
dGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7CisgICAgc3RhdGlj
IFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1
ZXMpOwogCiBwcml2YXRlOgogICAgIEZFQ29sb3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlLCBWZWN0
b3I8ZmxvYXQ+JiYpOwpAQCAtNTgsMzUgKzU5LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Zmxv
YXQ+IG1fdmFsdWVzOwogfTsKIAotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRl
U2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKLXsKLSAg
ICBjb21wb25lbnRzWzBdID0gKDAuMjEzICsgMC43ODcgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50
c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMl0gPSAoMC4w
NzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzNdID0gKDAuMjEzIC0gMC4yMTMg
KiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s0XSA9ICgwLjcxNSArIDAuMjg1ICogdmFsdWUpOwot
ICAgIGNvbXBvbmVudHNbNV0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBjb21wb25l
bnRzWzZdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s3XSA9ICgw
LjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbOF0gPSAoMC4wNzIgKyAwLjky
OCAqIHZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVl
Um90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCi17Ci0gICAg
ZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgZmxvYXQgc2lu
SHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgY29tcG9uZW50c1swXSA9IDAu
MjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKLSAgICBjb21wb25lbnRzWzFd
ID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVu
dHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7Ci0gICAgY29t
cG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsKLSAg
ICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQw
OwotICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVlICog
MC4yODM7Ci0gICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgLSBzaW5I
dWUgKiAwLjc4NzsKLSAgICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAr
IHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAu
OTI4ICsgc2luSHVlICogMC4wNzI7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb2xvck1hdHJpeCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25l
bnRUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IGRmODBlMDNlZGQ3MzAwZWVlN2IwNmIzYWU0
NzgzZDcyYjY3YmM4NGQuLjE0NWE5MjUxMzMyOGY3ZmE3MzhlMzM1NDE1NjJjN2Y0YWNkODE5ZDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKIAorI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CkBAIC00NiwxOCArNDcsNDEgQEAgRkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFu
c2Zlcihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW4KIHsKIH0KIAotdm9p
ZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKQorLy8gRklYTUU6IE1vdmUgdGhlIGNs
YXNzIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNl
IGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBs
aWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUNvbXBvbmVudFRyYW5z
ZmVyPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUNv
bXBvbmVudFRyYW5zZmVyPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAg
ICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5w
dXRFZmZlY3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB1c2luZyBMb29rdXBUYWJsZSA9
IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PjsKKworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVJZGVu
dGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZURp
c2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVH
YW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OworCisgICAgc3RhdGljIExvb2t1cFRhYmxlIGNvbXB1dGVMb29rdXBUYWJsZShjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisKKyAgICB2b2lkIGFwcGx5UGxhdGZvcm0oUGl4ZWxC
dWZmZXImKSBjb25zdDsKK307CisKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6Y29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJikKIHsKIH0KIAotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJT
b2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKIHsKICAg
ICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVyRnVuY3Rpb24udGFi
bGVWYWx1ZXM7CiAgICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUoKTsKICAgICBpZiAo
biA8IDEpCi0gICAgICAgIHJldHVybjsgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ZG91YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAgICAgICAgIAorICAgICAgICBkb3VibGUgYyA9
IGkgLyAyNTUuMDsKICAgICAgICAgdW5zaWduZWQgayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihj
ICogKG4gLSAxKSk7CiAgICAgICAgIGRvdWJsZSB2MSA9IHRhYmxlVmFsdWVzW2tdOwogICAgICAg
ICBkb3VibGUgdjIgPSB0YWJsZVZhbHVlc1tzdGQ6Om1pbigoayArIDEpLCAobiAtIDEpKV07CkBA
IC02Nyw3ICs5MSw3IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZVRhYnVsYXJU
YWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lCiAgICAgfQogfQogCi12b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2
YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24p
Cit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVEaXNjcmV0
ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIHRyYW5zZmVyRnVuY3Rpb24pCiB7CiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVW
YWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVzOwogICAgIHVuc2lnbmVkIG4gPSB0
YWJsZVZhbHVlcy5zaXplKCk7CkBAIC04Miw3ICsxMDYsNyBAQCB2b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENv
bXBvbgogICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlTGluZWFy
VGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgdHJhbnNmZXJGdW5jdGlvbikKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCiB7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICBkb3VibGUgdmFs
ID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUgKiB0cmFuc2ZlckZ1bmN0aW9uLmlu
dGVyY2VwdDsKQEAgLTkxLDcgKzExNSw3IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29t
cHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVuCiAgICAg
fQogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1
cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVy
RnVuY3Rpb24pCit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1
dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0cmFu
c2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEgZG91
YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQpAQCAtMTAx
LDYxICsxMjUsNjYgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFUYWJs
ZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnQKICAgICB9CiB9CiAKLWJvb2wg
RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
CitGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpMb29rdXBUYWJsZSBGRUNvbXBv
bmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlTG9va3VwVGFibGUoY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZnVuY3Rpb24pCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBp
biA9IGlucHV0RWZmZWN0KDApOworICAgIExvb2t1cFRhYmxlIHRhYmxlOwogCi0gICAgYXV0byBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGFibGUuc2l6ZSgpOyArK2kpCisgICAgICAgIHRhYmxlW2ldID0gaTsKKworICAgIHVzaW5nIFRy
YW5zZmVyVHlwZSA9IHZvaWQgKCopKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYpOworICAgIFRyYW5zZmVyVHlwZSBjYWxsRWZmZWN0W10gPSB7CisgICAgICAg
IGNvbXB1dGVJZGVudGl0eVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9VTktO
T1dOCisgICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNG
RVJfVFlQRV9JREVOVElUWQorICAgICAgICBjb21wdXRlVGFidWxhclRhYmxlLCAgICAvLyBGRUNP
TVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEUKKyAgICAgICAgY29tcHV0ZURpc2NyZXRlVGFibGUs
ICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0RJU0NSRVRFCisgICAgICAgIGNvbXB1dGVM
aW5lYXJUYWJsZSwgICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIKKyAgICAg
ICAgY29tcHV0ZUdhbW1hVGFibGUgICAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0dB
TU1BCisgICAgfTsKIAotICAgIExvb2t1cFRhYmxlIHJlZFRhYmxlOwotICAgIExvb2t1cFRhYmxl
IGdyZWVuVGFibGU7Ci0gICAgTG9va3VwVGFibGUgYmx1ZVRhYmxlOwotICAgIExvb2t1cFRhYmxl
IGFscGhhVGFibGU7Ci0gICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRUYWJsZSwgZ3JlZW5UYWJs
ZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4oZnVuY3Rpb24udHlwZSkgPCBXVEZf
QVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKKyAgICBjYWxsRWZmZWN0W2Z1bmN0aW9uLnR5cGVd
KHRhYmxlLCBmdW5jdGlvbik7CiAKLSAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBp
bi0+Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBkcmF3aW5n
UmVjdCk7Ci0gICAgCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIHVpbnQ4X3QqIGRhdGEgPSBkZXN0aW5hdGlvblBp
eGVsQXJyYXkuZGF0YSgpOwotICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0
aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICByZXR1cm4gdGFibGU7Cit9
CisKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9y
bShQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNvbnN0Cit7CisgICAgYXV0byYgcGl4ZWxBcnJh
eSA9IHBpeGVsQnVmZmVyLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0g
cGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS5kYXRh
KCk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBk
ZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAg
ZGF0YVtwaXhlbE9mZnNldF0gPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0XV07CisgICAgYXV0
byByZWRUYWJsZSAgID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0LnJlZEZ1bmN0aW9uKCkp
OworICAgIGF1dG8gZ3JlZW5UYWJsZSA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2VmZmVjdC5ncmVl
bkZ1bmN0aW9uKCkpOworICAgIGF1dG8gYmx1ZVRhYmxlICA9IGNvbXB1dGVMb29rdXBUYWJsZSht
X2VmZmVjdC5ibHVlRnVuY3Rpb24oKSk7CisgICAgYXV0byBhbHBoYVRhYmxlID0gY29tcHV0ZUxv
b2t1cFRhYmxlKG1fZWZmZWN0LmFscGhhRnVuY3Rpb24oKSk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9m
ZnNldCArPSA0KSB7CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXRdICAgICA9IHJlZFRhYmxlW2Rh
dGFbcGl4ZWxPZmZzZXRdXTsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDFdID0gZ3JlZW5U
YWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMV1dOwogICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsg
Ml0gPSBibHVlVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDJdXTsKICAgICAgICAgZGF0YVtwaXhl
bE9mZnNldCArIDNdID0gYWxwaGFUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgM11dOwogICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1
dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRhYmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5U
YWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9va3VwVGFibGUmIGFscGhhVGFibGUpCiti
b29sIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRl
ciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZWRUYWJsZS5zaXplKCk7ICsraSkKLSAgICAgICAgcmVkVGFi
bGVbaV0gPSBncmVlblRhYmxlW2ldID0gYmx1ZVRhYmxlW2ldID0gYWxwaGFUYWJsZVtpXSA9IGk7
CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKyAgICAKKyAg
ICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJlc3Vs
dChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOworICAgIGlmICghZGVz
dGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdXNpbmcg
VHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJik7Ci0gICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsKLSAgICAg
ICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1VO
S05PV04KLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFO
U0ZFUl9UWVBFX0lERU5USVRZCi0gICAgICAgIGNvbXB1dGVUYWJ1bGFyVGFibGUsICAgIC8vIEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRQotICAgICAgICBjb21wdXRlRGlzY3JldGVUYWJs
ZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUKLSAgICAgICAgY29tcHV0
ZUxpbmVhclRhYmxlLCAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUgotICAg
ICAgICBjb21wdXRlR2FtbWFUYWJsZSAgICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVf
R0FNTUEKLSAgICB9OworICAgIGF1dG8gZHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRS
ZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGlu
LT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGRyYXdpbmdS
ZWN0KTsKIAotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0
PHNpemVfdD4obV9yZWRGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVj
dCkpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNp
emVfdD4obV9ncmVlbkZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0
KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6
ZV90PihtX2JsdWVGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkp
OwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVf
dD4obV9hbHBoYUZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7
CisgICAgYXBwbHlQbGF0Zm9ybSgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlcik7CisgICAgcmV0dXJu
IHRydWU7Cit9CiAKLSAgICBjYWxsRWZmZWN0W21fcmVkRnVuY3Rpb24udHlwZV0ocmVkVGFibGUs
IG1fcmVkRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3RbbV9ncmVlbkZ1bmN0aW9uLnR5cGVdKGdy
ZWVuVGFibGUsIG1fZ3JlZW5GdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVjdFttX2JsdWVGdW5jdGlv
bi50eXBlXShibHVlVGFibGUsIG1fYmx1ZUZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fYWxw
aGFGdW5jdGlvbi50eXBlXShhbHBoYVRhYmxlLCBtX2FscGhhRnVuY3Rpb24pOworYm9vbCBGRUNv
bXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCit7CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIoKnRo
aXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQ29tcG9uZW50VHJhbnNmZXJUeXBlIHR5cGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCmluZGV4IDZhZGE5YzBhYmJlNWMyZjlkNjViZDkx
OWZmZWM0ZjE3M2QwMDM0MTQuLjUxOGVhMTM0N2E0YWRkYmE0Y2Q1MDBjYjQyYzgxMzcwNmRjY2Qx
OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCkBAIC02MSwxNiArNjEsNiBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIEZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
Z3JlZW5GdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKIAotICAgIHVzaW5nIExv
b2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+OwotCi0gICAgc3RhdGljIHZvaWQg
Y29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBU
YWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9p
ZCBjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlTGluZWFyVGFibGUoTG9va3Vw
VGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZv
aWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJik7Ci0KLSAgICB2b2lkIGNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUm
IHJlZFRhYmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJs
ZSwgTG9va3VwVGFibGUmIGFscGhhVGFibGUpOwotCiAgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBl
KSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggOWQ5MmUwMThhZGQwM2ZmYzBi
M2Y2OGFlMjA2NmZiMTYwZjI2NDQ0OS4uMTVhNzEyOTk4ODI5YWNkOWI0ZDI5NDVhZmRlYmJlNmQ2
ODdiN2RiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJG
RUNvbXBvc2l0ZS5oIgogCiAjaW5jbHVkZSAiRkVDb21wb3NpdGVBcml0aG1ldGljTkVPTi5oIgor
I2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
CkBAIC04NywxNSArODgsNjEgQEAgYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzQoZmxvYXQgazQpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGNsYW1wQnl0ZShpbnQg
YykKK3ZvaWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZp
bHRlciYgZmlsdGVyKQogewotICAgIHVuc2lnbmVkIGNoYXIgYnVmZltdID0geyBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPihjKSwgMjU1LCAwIH07CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOgorICAgIGNhc2UgRkVDT01QT1NJVEVfT1BF
UkFUT1JfQVRPUDoKKyAgICAgICAgLy8gRm9yIEluIGFuZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3Qg
anVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YKKyAgICAgICAgLy8gdGhlIHNlY29uZCBlZmZl
Y3QuIFNvIGp1c3QgdXNlIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IG9mIHRoZSBzZWNvbmQgZWZm
ZWN0IGhlcmUuCisgICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDEpLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICAgICAgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6
CisgICAgICAgIC8vIEFyaXRobWV0aWMgbWF5IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBw
cmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBjYW4ndAorICAgICAgICAvLyBvcHRpbWl6ZSB0aGUgcGFp
bnQgcmVnaW9uIGhlcmUuCisgICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICAvLyBUYWtlIHRoZSB1bmlvbiBvZiBib3RoIGlucHV0IGVmZmVjdHMuCisgICAgICAg
IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoZmlsdGVyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KK30KKworLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFQ29tcG9z
aXRlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgor
Y2xhc3MgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29u
Y3JldGVBcHBsaWVyPEZFQ29tcG9zaXRlPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVj
dENvbmNyZXRlQXBwbGllcjxGRUNvbXBvc2l0ZT47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNl
OjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZl
Y3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3RhdGlj
IHVpbnQ4X3QgY2xhbXBCeXRlKGludCk7CisKKyAgICB0ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+
CisgICAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2lnbmVk
IGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5
TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CisKKyAgICB0
ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+CisgICAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVB
cml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQg
Y2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQg
azIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlQ
bGF0Zm9ybUFyaXRobWV0aWModW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBk
ZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxv
YXQgazMsIGZsb2F0IGs0KTsKKworICAgIGJvb2wgYXBwbHlBcml0aG1ldGljKEZpbHRlckVmZmVj
dCogaW4sIEZpbHRlckVmZmVjdCogaW4yKTsKKyAgICBib29sIGFwcGx5Tm9uQXJpdGhtZXRpYyhG
aWx0ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3QqIGluMik7Cit9OworCit1aW50OF90IEZFQ29t
cG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjbGFtcEJ5dGUoaW50IGMpCit7CisgICAgdWludDhfdCBi
dWZmW10gPSB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGMpLCAyNTUsIDAgfTsKICAgICB1bnNpZ25l
ZCB1YyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjKTsKICAgICByZXR1cm4gYnVmZlshISh1YyAm
IH4weGZmKSArICEhKHVjICYgfih+MHUgPj4gMSkpXTsKIH0KIAogdGVtcGxhdGUgPGludCBiMSwg
aW50IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2ln
bmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFy
cmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK2lubGlu
ZSB2b2lkIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVs
cyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQg
cGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQp
CiB7CiAgICAgZmxvYXQgc2NhbGVkSzE7CiAgICAgZmxvYXQgc2NhbGVkSzQ7CkBAIC0xMjIsNyAr
MTY5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2ln
bmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhcioKIC8vIGNvbXB1dGVBcml0aG1ldGljUGl4
ZWxzVW5jbGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2YgY29tcHV0ZUFyaXRobWV0aWNQaXhl
bHMgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGluZwogLy8gaXMgbm90IG5lY2Vzc2Fy
eS4gVGhpcyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRpbWl6YXRpb25zIHN1Y2ggYXMg
YXV0by12ZWN0b3JpemF0aW9uLgogdGVtcGxhdGUgPGludCBiMSwgaW50IGI0Pgotc3RhdGljIGlu
bGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2lnbmVkIGNoYXIq
IHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3Ro
LCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK2lubGluZSB2b2lkIEZF
Q29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBl
ZCh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQg
cGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQp
CiB7CiAgICAgZmxvYXQgc2NhbGVkSzE7CiAgICAgZmxvYXQgc2NhbGVkSzQ7CkBAIC0xNDcsNyAr
MTk0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWcKIH0KIAogI2lmICFIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJpdGhtZXRpY1NvZnR3YXJlKHVuc2ln
bmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFy
cmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK2lubGlu
ZSB2b2lkIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtQXJpdGhtZXRp
Yyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQg
cGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQp
CiB7CiAgICAgZmxvYXQgdXBwZXJMaW1pdCA9IHN0ZDo6bWF4KDAuMGYsIGsxKSArIHN0ZDo6bWF4
KDAuMGYsIGsyKSArIHN0ZDo6bWF4KDAuMGYsIGszKSArIGs0OwogICAgIGZsb2F0IGxvd2VyTGlt
aXQgPSBzdGQ6Om1pbigwLjBmLCBrMSkgKyBzdGQ6Om1pbigwLjBmLCBrMikgKyBzdGQ6Om1pbigw
LjBmLCBrMykgKyBrNDsKQEAgLTE4MCw2NiArMjI3LDMyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBh
cml0aG1ldGljU29mdHdhcmUodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBk
ZXN0CiB9CiAjZW5kaWYKIAotaW5saW5lIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGht
ZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQg
azQpCitib29sIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBseUFyaXRobWV0aWMoRmls
dGVyRWZmZWN0KiBpbiwgRmlsdGVyRWZmZWN0KiBpbjIpCiB7Ci0gICAgaW50IGxlbmd0aCA9IHNv
dXJjZS5sZW5ndGgoKTsKLSAgICBBU1NFUlQobGVuZ3RoID09IHN0YXRpY19jYXN0PGludD4oZGVz
dGluYXRpb24ubGVuZ3RoKCkpKTsKLSAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUgZXZlbnR1YWxs
eSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5LgotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lD
UykKLSAgICBBU1NFUlQoIShsZW5ndGggJiAweDMpKTsKLSAgICBwbGF0Zm9ybUFyaXRobWV0aWNO
ZW9uKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBrMSwgazIsIGsz
LCBrNCk7Ci0jZWxzZQotICAgIGFyaXRobWV0aWNTb2Z0d2FyZShzb3VyY2UuZGF0YSgpLCBkZXN0
aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotI2VuZGlmCi19CisgICAg
YXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFkZXN0aW5h
dGlvblBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLXZvaWQgRkVDb21wb3Np
dGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQotewot
ICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoK
LSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIC8vIEZvciBJbiBh
bmQgQXRvcCB0aGUgZmlyc3QgZWZmZWN0IGp1c3QgaW5mbHVlbmNlcyB0aGUgcmVzdWx0IG9mCi0g
ICAgICAgIC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFp
bnQgcmVjdCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgotICAgICAgICBzZXRBYnNvbHV0ZVBh
aW50UmVjdChpbnB1dEVmZmVjdCgxKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGNs
aXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBGRUNPTVBP
U0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgotICAgICAgICAvLyBBcml0aG1ldGljIG1heSBpbmZs
dW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28gd2UgY2FuJ3QKLSAg
ICAgICAgLy8gb3B0aW1pemUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgotICAgICAgICBzZXRBYnNv
bHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGFrZSB0aGUgdW5pb24gb2YgYm90
aCBpbnB1dCBlZmZlY3RzLgotICAgICAgICBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KGZpbHRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgSW50UmVjdCBl
ZmZlY3RBRHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxC
dWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gc291cmNlUGl4ZWxCdWZm
ZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgZWZmZWN0QURyYXdpbmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNw
YWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAg
aW4yLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVj
dEJEcmF3aW5nUmVjdCk7CisKKyAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gc291cmNlUGl4
ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBpbnQgbGVuZ3RoID0gc291cmNlUGl4
ZWxBcnJheS5sZW5ndGgoKTsKKyAgICBBU1NFUlQobGVuZ3RoID09IHN0YXRpY19jYXN0PGludD4o
ZGVzdGluYXRpb25QaXhlbEFycmF5Lmxlbmd0aCgpKSk7CisgICAgYXBwbHlQbGF0Zm9ybUFyaXRo
bWV0aWMoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRh
KCksIGxlbmd0aCwgbV9lZmZlY3QuazEoKSwgbV9lZmZlY3QuazIoKSwgbV9lZmZlY3QuazMoKSwg
bV9lZmZlY3QuazQoKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRkVDb21wb3NpdGU6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorYm9vbCBGRUNvbXBvc2l0ZVNv
ZnR3YXJlQXBwbGllcjo6YXBwbHlOb25Bcml0aG1ldGljKEZpbHRlckVmZmVjdCogaW4sIEZpbHRl
ckVmZmVjdCogaW4yKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
LSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAgaWYgKG1fdHlw
ZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIGF1dG8gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQpOwotICAgICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBJbnRSZWN0
IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIg
PSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgZWZmZWN0QURyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAg
ICAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGluMi0+
Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3RCRHJh
d2luZ1JlY3QpOwotCi0gICAgICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQaXhl
bEJ1ZmZlci0+ZGF0YSgpOwotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRp
Y1NvZnR3YXJlKHNvdXJjZVBpeGVsQXJyYXksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgbV9rMSwg
bV9rMiwgbV9rMywgbV9rNCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGF1
dG8gcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gcmVzdWx0SW1h
Z2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2Up
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjQ4LDUwICsyNjEsNzUgQEAgYm9vbCBGRUNv
bXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgaWYgKCFp
bWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgp
OworICAgIGF1dG8mIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworCisg
ICAgc3dpdGNoIChtX2VmZmVjdC5vcGVyYXRpb24oKSkgeworICAgIGNhc2UgRkVDT01QT1NJVEVf
T1BFUkFUT1JfVU5LTk9XTjoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3dpdGNoICht
X3R5cGUpIHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6Ci0gICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKICAgICAgICAgYnJlYWs7CisKICAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOiB7CiAgICAgICAgIC8vIEFwcGxpZXMgb25s
eSB0byB0aGUgaW50ZXJzZWN0ZWQgcmVnaW9uLgogICAgICAgICBJbnRSZWN0IGRlc3RpbmF0aW9u
UmVjdCA9IGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgICAgICBkZXN0aW5hdGlvblJlY3Qu
aW50ZXJzZWN0KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGRlc3RpbmF0aW9u
UmVjdC5pbnRlcnNlY3QoYWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgICAgIGRlc3RpbmF0aW9u
UmVjdC5pbnRlcnNlY3QobV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgICAgIGlm
IChkZXN0aW5hdGlvblJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IEludFJlY3QgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBhYnNv
bHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CisgICAgICAgIEludFJlY3QgYWRqdXN0ZWREZXN0
aW5hdGlvblJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVj
dCgpLmxvY2F0aW9uKCk7CiAgICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IGRlc3RpbmF0aW9u
UmVjdCAtIGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CiAgICAgICAgIEludFJl
Y3Qgc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbjItPmFic29sdXRlUGFpbnRSZWN0
KCkubG9jYXRpb24oKTsKICAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlt
YWdlQnVmZmVyMiwgRmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25SZWN0KSwgRmxvYXRSZWN0
KHNvdXJjZTJSZWN0KSk7CiAgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZUJ1ZmZlciwgRmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25SZWN0KSwgRmxvYXRSZWN0
KHNvdXJjZVJlY3QpLCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbiB9KTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQorCiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlcjIt
PmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKKyAg
ICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVj
dC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Cisg
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZm
ZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwg
eyB7IH0sIGltYWdlQnVmZmVyMi0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6
RGVzdGluYXRpb25PdXQpOwogICAgICAgICBicmVhazsKKwogICAgIGNhc2UgRkVDT01QT1NJVEVf
T1BFUkFUT1JfQVRPUDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlt
YWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRS
ZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwg
eyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpT
b3VyY2VBdG9wKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRl
UGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlt
YWdlQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBv
c2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsKICAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIEZF
Q09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29s
dXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9w
ZXJhdG9yOjpYT1IpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29t
cG9zaXRlT3BlcmF0b3I6OlhPUik7CiAgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTVBP
U0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9M
SUdIVEVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkp
OwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwg
aW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OlBsdXNMaWdo
dGVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKKyAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVy
LT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVzTGlnaHRlcik7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEZFQ29tcG9z
aXRlU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZl
Y3RWZWN0b3ImIGlucHV0RWZmZWN0cykKK3sKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3RzWzBdLmdldCgpOworICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3RzWzFd
LmdldCgpOworCisgICAgaWYgKG1fZWZmZWN0Lm9wZXJhdGlvbigpID09IEZFQ09NUE9TSVRFX09Q
RVJBVE9SX0FSSVRITUVUSUMpCisgICAgICAgIHJldHVybiBhcHBseUFyaXRobWV0aWMoaW4sIGlu
Mik7CisgICAgcmV0dXJuIGFwcGx5Tm9uQXJpdGhtZXRpYyhpbiwgaW4yKTsKK30KKworYm9vbCBG
RUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQor
eworICAgIHJldHVybiBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmls
dGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlKQogewog
ICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKaW5kZXggNTRmODA0
YThmZWQyNTE0ZTIyMTA1ZWE1MjNiY2JkNDg1Nzc3N2I4ZS4uZWM3NWI1MDAwZTcyNDMyMWZlYTNk
YTY3NWM2ZTA5ZTk1MGNjYzJhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCkBAIC0yNCw4
ICsyNCw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJp
eC5oIgogCisjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVj
dEFwcGxpZXIuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9QYXJh
bGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCkBAIC0xMTQsNiArMTE1LDQyIEBAIGJvb2wgRkVDb252b2x2ZU1h
dHJpeDo6c2V0UHJlc2VydmVBbHBoYShib29sIHByZXNlcnZlQWxwaGEpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRUNvbnZvbHZlTWF0cml4U29mdHdh
cmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0
ZUFwcGxpZXI8RkVDb252b2x2ZU1hdHJpeD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZl
Y3RDb25jcmV0ZUFwcGxpZXI8RkVDb252b2x2ZU1hdHJpeD47CisKK3B1YmxpYzoKKyAgICB1c2lu
ZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0
ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
c3RydWN0IFBhaW50aW5nRGF0YSB7CisgICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
cmNQaXhlbEFycmF5OworICAgICAgICBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheTsK
KyAgICAgICAgaW50IHdpZHRoOworICAgICAgICBpbnQgaGVpZ2h0OworCisgICAgICAgIEludFNp
emUga2VybmVsU2l6ZTsKKyAgICAgICAgZmxvYXQgZGl2aXNvcjsKKyAgICAgICAgZmxvYXQgYmlh
czsKKyAgICAgICAgSW50UG9pbnQgdGFyZ2V0T2Zmc2V0OworICAgICAgICBFZGdlTW9kZVR5cGUg
ZWRnZU1vZGU7CisgICAgICAgIGJvb2wgcHJlc2VydmVBbHBoYTsKKyAgICAgICAgVmVjdG9yPGZs
b2F0PiBrZXJuZWxNYXRyaXg7CisgICAgfTsKKworICAgIHN0YXRpYyBpbmxpbmUgdWludDhfdCBj
bGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFubmVsLCB1aW50OF90IG1heCA9IDI1NSk7CisgICAgc3Rh
dGljIGlubGluZSB2b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBp
eGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBib29sIHByZXNl
cnZlQWxwaGFWYWx1ZXMpOworCisgICAgc3RhdGljIGlubGluZSBpbnQgZ2V0UGl4ZWxWYWx1ZShj
b25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHkpOworCisgICAgc3RhdGljIGlubGluZSB2
b2lkIHNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBj
bGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCk7CisgICAgc3RhdGljIGlubGluZSB2b2lk
IHNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGlu
dCB5Mik7CisKKyAgICB2b2lkIGFwcGx5UGxhdGZvcm0oUGFpbnRpbmdEYXRhJikgY29uc3Q7Cit9
OworCiAvKgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgIENv
bnZvbHZlTWF0cml4IGltcGxlbWVudGF0aW9uCkBAIC0xNzAsNyArMjA3LDcgQEAgYm9vbCBGRUNv
bnZvbHZlTWF0cml4OjpzZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkKICAgIGFu
ZCB3b3VsZCBtYWtlIGl0IHJlYWxseSBoYXJkIHRvIHVuZGVyc3RhbmQuCiAqLwogCi1zdGF0aWMg
QUxXQVlTX0lOTElORSB1bnNpZ25lZCBjaGFyIGNsYW1wUkdCQVZhbHVlKGZsb2F0IGNoYW5uZWws
IHVuc2lnbmVkIGNoYXIgbWF4ID0gMjU1KQoraW5saW5lIHVpbnQ4X3QgRkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlQXBwbGllcjo6Y2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdWludDhfdCBt
YXgpCiB7CiAgICAgaWYgKGNoYW5uZWwgPD0gMCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzks
MTAgKzIxNiw5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xhbXBSR0JB
VmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBtCiAgICAgcmV0dXJuIGNoYW5uZWw7
CiB9CiAKLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLUFMV0FZU19JTkxJTkUg
dm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNl
UGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQq
IHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcykKK2lubGluZSB2b2lkIEZFQ29udm9s
dmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxz
LCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBi
b29sIHByZXNlcnZlQWxwaGFWYWx1ZXMpCiB7Ci0gICAgdW5zaWduZWQgY2hhciBtYXhBbHBoYSA9
IHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbM10gLyBk
aXZpc29yICsgYmlhcyk7CisgICAgdWludDhfdCBtYXhBbHBoYSA9IHByZXNlcnZlQWxwaGFWYWx1
ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbM10gLyBkaXZpc29yICsgYmlhcyk7CiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpCiAgICAgICAgIGRlc3RQaXhlbHMuc2V0KHBp
eGVsKyssIGNsYW1wUkdCQVZhbHVlKHRvdGFsc1tpXSAvIGRpdmlzb3IgKyBiaWFzLCBtYXhBbHBo
YSkpOwogCkBAIC0xOTMsMjUgKzIyOSw0NyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0RGVzdGlu
YXRpb25QaXhlbHMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZVBpeGVscywgVQogICAg
ICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCsrLCBtYXhBbHBoYSk7CiB9CiAKLSNpZiBDT01QSUxF
UihNU1ZDKQotLy8gSW5jb3JyZWN0bHkgZGlhZ25vc2luZyBvdmVyd3JpdGUgb2Ygc3RhY2sgaW4g
fHRvdGFsc3wgZHVlIHRvIHxwcmVzZXJ2ZUFscGhhVmFsdWVzfC4KLSNwcmFnbWEgd2FybmluZyhw
dXNoKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3ODkpCi0jZW5kaWYKK2lubGluZSBpbnQg
RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6Z2V0UGl4ZWxWYWx1ZShjb25zdCBQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQoreworICAgIGlmICh4ID49IDAg
JiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5o
ZWlnaHQpCisgICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7
CisKKyAgICBzd2l0Y2ggKHBhaW50aW5nRGF0YS5lZGdlTW9kZSkgeworICAgIGRlZmF1bHQ6IC8v
IEVER0VNT0RFX05PTkUKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGNhc2UgRURHRU1PREVfRFVQ
TElDQVRFOgorICAgICAgICBpZiAoeCA8IDApCisgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAg
ZWxzZSBpZiAoeCA+PSBwYWludGluZ0RhdGEud2lkdGgpCisgICAgICAgICAgICB4ID0gcGFpbnRp
bmdEYXRhLndpZHRoIC0gMTsKKyAgICAgICAgaWYgKHkgPCAwKQorICAgICAgICAgICAgeSA9IDA7
CisgICAgICAgIGVsc2UgaWYgKHkgPj0gcGFpbnRpbmdEYXRhLmhlaWdodCkKKyAgICAgICAgICAg
IHkgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC0gMTsKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRp
bmdEYXRhLndpZHRoICsgeCkgPDwgMjsKKyAgICBjYXNlIEVER0VNT0RFX1dSQVA6CisgICAgICAg
IHdoaWxlICh4IDwgMCkKKyAgICAgICAgICAgIHggKz0gcGFpbnRpbmdEYXRhLndpZHRoOworICAg
ICAgICB4ICU9IHBhaW50aW5nRGF0YS53aWR0aDsKKyAgICAgICAgd2hpbGUgKHkgPCAwKQorICAg
ICAgICAgICAgeSArPSBwYWludGluZ0RhdGEuaGVpZ2h0OworICAgICAgICB5ICU9IHBhaW50aW5n
RGF0YS5oZWlnaHQ7CisgICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgp
IDw8IDI7CisgICAgfQorfQogCiAvLyBPbmx5IGZvciByZWdpb24gQwotdGVtcGxhdGU8Ym9vbCBw
cmVzZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6
OmZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNs
aXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQoraW5saW5lIHZv
aWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6c2V0SW50ZXJpb3JQaXhlbHMoUGFp
bnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBp
bnQgeVN0YXJ0LCBpbnQgeUVuZCkKIHsKICAgICAvLyBlZGdlIG1vZGUgZG9lcyBub3QgYWZmZWN0
IHRoZXNlIHBpeGVscwotICAgIGludCBwaXhlbCA9IChtX3RhcmdldE9mZnNldC55KCkgKiBwYWlu
dGluZ0RhdGEud2lkdGggKyBtX3RhcmdldE9mZnNldC54KCkpICogNDsKKyAgICBpbnQgcGl4ZWwg
PSAocGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCkgKiBwYWludGluZ0RhdGEud2lkdGggKyBw
YWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSkgKiA0OwogICAgIGludCBrZXJuZWxJbmNyZWFz
ZSA9IGNsaXBSaWdodCAqIDQ7Ci0gICAgaW50IHhJbmNyZWFzZSA9IChtX2tlcm5lbFNpemUud2lk
dGgoKSAtIDEpICogNDsKKyAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0YS5rZXJuZWxT
aXplLndpZHRoKCkgLSAxKSAqIDQ7CiAgICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkg
Y29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAw
IDogMSldOworICAgIGZsb2F0IHRvdGFsc1s0XTsKIAotICAgIC8vIG1fZGl2aXNvciBjYW5ub3Qg
YmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJU
KG1fZGl2aXNvcik7CisgICAgLy8gZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCisgICAgQVNTRVJUKHBhaW50aW5nRGF0YS5kaXZpc29y
KTsKIAogICAgIC8vIFNraXAgdGhlIGZpcnN0ICcoY2xpcEJvdHRvbSAtIHlFbmQpJyBsaW5lcwog
ICAgIHBpeGVsICs9IChjbGlwQm90dG9tIC0geUVuZCkgKiAoeEluY3JlYXNlICsgKGNsaXBSaWdo
dCArIDEpICogNCk7CkBAIC0yMjEsMjkgKzI3OSwyOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgRkVD
b252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRp
bgogICAgICAgICBmb3IgKGludCB4ID0gY2xpcFJpZ2h0ICsgMTsgeCA+IDA7IC0teCkgewogICAg
ICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeC5zaXpl
KCkgLSAxOwogICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsID0gc3RhcnRLZXJuZWxQaXhlbDsK
LSAgICAgICAgICAgIGludCB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgICAgICAg
ICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKIAogICAgICAg
ICAgICAgdG90YWxzWzBdID0gMDsKICAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7CiAgICAgICAg
ICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVz
KQotICAgICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbM10g
PSAwOwogCiAgICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewogICAgICAgICAg
ICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVl
XSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtl
cm5lbFBpeGVsKyspKTsKICAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRh
Lmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7CiAgICAgICAgICAgICAgICAg
dG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4
ZWwrKykpOwotICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKKyAgICAg
ICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKQogICAgICAgICAgICAg
ICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1
ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShr
ZXJuZWxQaXhlbCkpOwogICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWw7CiAgICAgICAgICAg
ICAgICAgLS1rZXJuZWxWYWx1ZTsKICAgICAgICAgICAgICAgICBpZiAoIS0td2lkdGgpIHsKICAg
ICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWwgKz0ga2VybmVsSW5jcmVhc2U7Ci0gICAgICAg
ICAgICAgICAgICAgIHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAgICAgICAg
ICAgICAgIHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4
ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWlu
dGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGlu
Z0RhdGEuYmlhcyk7CisgICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWludGluZ0Rh
dGEuc3JjUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3Rh
bHMsIHBhaW50aW5nRGF0YS5kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdEYXRh
LnByZXNlcnZlQWxwaGEpOwogICAgICAgICAgICAgc3RhcnRLZXJuZWxQaXhlbCArPSA0OwogICAg
ICAgICB9CiAgICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKQEAgLTI1MSw2NCArMzA4LDMzIEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQaXhl
bHMoUGFpbnRpbmdEYXRhJiBwYWludGluCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGludCBG
RUNvbnZvbHZlTWF0cml4OjpnZXRQaXhlbFZhbHVlKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBpbnQgeCwgaW50IHkpCi17Ci0gICAgaWYgKHggPj0gMCAmJiB4IDwgcGFpbnRpbmdEYXRhLndp
ZHRoICYmIHkgPj0gMCAmJiB5IDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKLSAgICAgICAgcmV0dXJu
ICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKLQotICAgIHN3aXRjaCAobV9lZGdl
TW9kZSkgewotICAgIGRlZmF1bHQ6IC8vIEVER0VNT0RFX05PTkUKLSAgICAgICAgcmV0dXJuIC0x
OwotICAgIGNhc2UgRURHRU1PREVfRFVQTElDQVRFOgotICAgICAgICBpZiAoeCA8IDApCi0gICAg
ICAgICAgICB4ID0gMDsKLSAgICAgICAgZWxzZSBpZiAoeCA+PSBwYWludGluZ0RhdGEud2lkdGgp
Ci0gICAgICAgICAgICB4ID0gcGFpbnRpbmdEYXRhLndpZHRoIC0gMTsKLSAgICAgICAgaWYgKHkg
PCAwKQotICAgICAgICAgICAgeSA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHkgPj0gcGFpbnRpbmdE
YXRhLmhlaWdodCkKLSAgICAgICAgICAgIHkgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC0gMTsKLSAg
ICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKLSAgICBjYXNl
IEVER0VNT0RFX1dSQVA6Ci0gICAgICAgIHdoaWxlICh4IDwgMCkKLSAgICAgICAgICAgIHggKz0g
cGFpbnRpbmdEYXRhLndpZHRoOwotICAgICAgICB4ICU9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAg
ICAgICAgd2hpbGUgKHkgPCAwKQotICAgICAgICAgICAgeSArPSBwYWludGluZ0RhdGEuaGVpZ2h0
OwotICAgICAgICB5ICU9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0gICAgICAgIHJldHVybiAoeSAq
IHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAgfQotfQotCiAvLyBGb3Igb3RoZXIg
cmVnaW9ucyB0aGFuIEMKLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLXZvaWQg
RkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCitpbmxpbmUgdm9pZCBGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQogewogICAgIGlu
dCBwaXhlbCA9ICh5MSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAqIDQ7CiAgICAgaW50IGhl
aWdodCA9IHkyIC0geTE7CiAgICAgaW50IHdpZHRoID0geDIgLSB4MTsKLSAgICBpbnQgYmVnaW5L
ZXJuZWxQaXhlbFggPSB4MSAtIG1fdGFyZ2V0T2Zmc2V0LngoKTsKKyAgICBpbnQgYmVnaW5LZXJu
ZWxQaXhlbFggPSB4MSAtIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgpOwogICAgIGludCBz
dGFydEtlcm5lbFBpeGVsWCA9IGJlZ2luS2VybmVsUGl4ZWxYOwotICAgIGludCBzdGFydEtlcm5l
bFBpeGVsWSA9IHkxIC0gbV90YXJnZXRPZmZzZXQueSgpOworICAgIGludCBzdGFydEtlcm5lbFBp
eGVsWSA9IHkxIC0gcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCk7CiAgICAgaW50IHhJbmNy
ZWFzZSA9IChwYWludGluZ0RhdGEud2lkdGggLSB3aWR0aCkgKiA0OwogICAgIC8vIENvbnRhaW5z
IHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVz
ZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKKyAgICBmbG9hdCB0b3RhbHNbNF07CiAKLSAgICAv
LyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3Vy
ZXMgdGhpcwotICAgIEFTU0VSVChtX2Rpdmlzb3IpOworICAgIC8vIHBhaW50aW5nRGF0YS5kaXZp
c29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMK
KyAgICBBU1NFUlQocGFpbnRpbmdEYXRhLmRpdmlzb3IpOwogCiAgICAgZm9yIChpbnQgeSA9IGhl
aWdodDsgeSA+IDA7IC0teSkgewogICAgICAgICBmb3IgKGludCB4ID0gd2lkdGg7IHggPiAwOyAt
LXgpIHsKICAgICAgICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IHBhaW50aW5nRGF0YS5rZXJuZWxN
YXRyaXguc2l6ZSgpIC0gMTsKICAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFggPSBzdGFydEtl
cm5lbFBpeGVsWDsKICAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFkgPSBzdGFydEtlcm5lbFBp
eGVsWTsKLSAgICAgICAgICAgIGludCB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAg
ICAgICAgICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKIAog
ICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKICAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7CiAg
ICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhh
VmFsdWVzKQotICAgICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7CisgICAgICAgICAgICB0b3Rh
bHNbM10gPSAwOwogCiAgICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewogICAg
ICAgICAgICAgICAgIGludCBwaXhlbEluZGV4ID0gZ2V0UGl4ZWxWYWx1ZShwYWludGluZ0RhdGEs
IGtlcm5lbFBpeGVsWCwga2VybmVsUGl4ZWxZKTsKQEAgLTMxNywxOCArMzQzLDE4IEBAIHZvaWQg
RkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgeDEsIGluCiAgICAgICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWlu
dGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0Pihw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAxKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5l
bFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5p
dGVtKHBpeGVsSW5kZXggKyAyKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmICghcHJlc2VydmVBbHBoYVZhbHVlcyAmJiBwaXhlbEluZGV4ID49IDApCisgICAgICAgICAg
ICAgICAgaWYgKCFwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSAmJiBwaXhlbEluZGV4ID49IDAp
CiAgICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0
cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4
ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAzKSk7CiAgICAgICAgICAgICAgICAgKytrZXJuZWxQ
aXhlbFg7CiAgICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKICAgICAgICAgICAgICAgICBp
ZiAoIS0td2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWxYID0gc3RhcnRL
ZXJuZWxQaXhlbFg7CiAgICAgICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxZOwotICAgICAg
ICAgICAgICAgICAgICB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgICAgICAgICAg
ICAgICAgICB3aWR0aCA9IHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzZXREZXN0aW5hdGlvblBp
eGVsczxwcmVzZXJ2ZUFscGhhVmFsdWVzPihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwgcGFp
bnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMsIG1fZGl2aXNvciwgcGFpbnRp
bmdEYXRhLmJpYXMpOworICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHMocGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90
YWxzLCBwYWludGluZ0RhdGEuZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0
YS5wcmVzZXJ2ZUFscGhhKTsKICAgICAgICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFg7CiAgICAg
ICAgIH0KICAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOwpAQCAtMzM3LDk1ICszNjMsODggQEAg
dm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsIGludCB4MSwgaW4KICAgICB9CiB9CiAKLSNpZiBDT01QSUxFUihNU1ZDKQot
I3ByYWdtYSB3YXJuaW5nKHBvcCkgLy8gRGlzYWJsZSBvZiA0Nzg5Ci0jZW5kaWYKLQotQUxXQVlT
X0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlT
dGFydCwgaW50IHlFbmQpCit2b2lkIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5UGxhdGZvcm0oUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpIGNvbnN0CiB7Ci0gICAgLy8g
TXVzdCBiZSBpbXBsZW1lbnRlZCBoZXJlLCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdBWVNf
SU5MSU5FCi0gICAgLy8gZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291cmNl
IGZpbGUgYXMgd2VsbAotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RTZXRJ
bnRlcmlvclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwg
eVN0YXJ0LCB5RW5kKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczxm
YWxzZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7
Ci19CisgICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscworICAgIGludCBjbGlwUmln
aHQgPSBwYWludGluZ0RhdGEud2lkdGggLSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgp
OworICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRpbmdEYXRhLmhlaWdodCAtIHBhaW50aW5nRGF0
YS5rZXJuZWxTaXplLmhlaWdodCgpOwogCi1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1h
dHJpeDo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwg
aW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICAvLyBBbHRob3VnaCB0aGlzIGZ1bmN0aW9u
IGNhbiBiZSBtb3ZlZCB0byB0aGUgaGVhZGVyLCBpdCBpcyBpbXBsZW1lbnRlZCBoZXJlCi0gICAg
Ly8gYmVjYXVzZSBzZXRJbnRlcmlvclBpeGVscyBpcyBhbHNvIGltcGxlbWVudGVkIGhlcmUKLSAg
ICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8dHJ1ZT4o
cGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci0gICAgZWxzZQotICAgICAgICBmYXN0U2V0
T3V0ZXJQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgeDEsIHkxLCB4MiwgeTIpOworICAgIGlm
IChjbGlwUmlnaHQgPCAwIHx8IGNsaXBCb3R0b20gPCAwKSB7CisgICAgICAgIC8vIFJhcmUgc2l0
dWF0aW9uLCBub3Qgb3B0aW1pemVkIGZvciBzcGVlZAorICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIDAsIHBhaW50aW5nRGF0YS53aWR0aCwgcGFpbnRpbmdEYXRhLmhlaWdo
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBt
aW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1p
dCBmb3IgcGFyYWxsZWwgam9icworCisgICAgaWYgKGludCBpdGVyYXRpb25zID0gKHBhaW50aW5n
RGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQpIC8gbWluaW1hbFJlY3REaW1lbnNpb24p
IHsKKyAgICAgICAgaW50IHN0cmlkZSA9IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOworICAgICAg
ICBpbnQgY2h1bmtDb3VudCA9IChjbGlwQm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJpZGU7CisK
KyAgICAgICAgQ29uY3VycmVudFdvcmtRdWV1ZTo6YXBwbHkoY2h1bmtDb3VudCwgWyZdKHNpemVf
dCBpbmRleCkgeworICAgICAgICAgICAgaW50IHlTdGFydCA9IChzdHJpZGUgKiBpbmRleCk7Cisg
ICAgICAgICAgICBpbnQgeUVuZCA9IHN0ZDo6bWluPGludD4oc3RyaWRlICogKGluZGV4ICsgMSks
IGNsaXBCb3R0b20pOworCisgICAgICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0Rh
dGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKKyAgICAgICAgfSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJp
Z2h0LCBjbGlwQm90dG9tLCAwLCBjbGlwQm90dG9tKTsKKworICAgIGNsaXBSaWdodCArPSBwYWlu
dGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSArIDE7CisgICAgY2xpcEJvdHRvbSArPSBwYWludGlu
Z0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSArIDE7CisKKyAgICBpZiAocGFpbnRpbmdEYXRhLnRhcmdl
dE9mZnNldC55KCkgPiAwKQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IDAsIHBhaW50aW5nRGF0YS53aWR0aCwgcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCkpOwor
ICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKKyAgICAgICAgc2V0T3V0
ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWludGluZ0RhdGEud2lkdGgs
IHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgIGlmIChwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0
LngoKSA+IDApCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRp
bmdEYXRhLnRhcmdldE9mZnNldC55KCksIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgpLCBj
bGlwQm90dG9tKTsKKyAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRpbmdEYXRhLndpZHRoKQorICAg
ICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgcGFpbnRpbmdEYXRh
LnRhcmdldE9mZnNldC55KCksIHBhaW50aW5nRGF0YS53aWR0aCwgY2xpcEJvdHRvbSk7CiB9CiAK
LWJvb2wgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYpCitib29sIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZp
bHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3RzWzBdLmdldCgpOwogCi0gICAgYXV0byBhbHBoYUZvcm1hdCA9IG1fcHJlc2Vy
dmVBbHBoYSA/IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCA6IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ7Ci0gICAgYXV0byBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoYWxwaGFGb3JtYXQpOworICAgIGF1dG8gYWxw
aGFGb3JtYXQgPSBtX2VmZmVjdC5wcmVzZXJ2ZUFscGhhKCkgPyBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQgOiBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVm
ZmVyUmVzdWx0KGFscGhhRm9ybWF0KTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3Qg
PSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1
bHQoYWxwaGFGb3JtYXQsIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OworICAgIGF1dG8gZWZmZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25P
ZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gc291
cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoYWxwaGFGb3JtYXQsIGVm
ZmVjdERyYXdpbmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgIGlm
ICghc291cmNlUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8m
IHNvdXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOwogICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsK
LQotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CiAg
ICAgCisgICAgYXV0byBwYWludFNpemUgPSBtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKTsKKwogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7CiAgICAgICAgIHNvdXJj
ZVBpeGVsQXJyYXksCiAgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwKICAgICAgICAgcGFp
bnRTaXplLndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6ZS5oZWlnaHQoKSwKLSAgICAgICAgbV9i
aWFzICogMjU1LAotICAgICAgICBub3JtYWxpemVkRmxvYXRzKG1fa2VybmVsTWF0cml4KQorICAg
ICAgICBtX2VmZmVjdC5rZXJuZWxTaXplKCksCisgICAgICAgIG1fZWZmZWN0LmRpdmlzb3IoKSwK
KyAgICAgICAgbV9lZmZlY3QuYmlhcygpICogMjU1LAorICAgICAgICBtX2VmZmVjdC50YXJnZXRP
ZmZzZXQoKSwKKyAgICAgICAgbV9lZmZlY3QuZWRnZU1vZGUoKSwKKyAgICAgICAgbV9lZmZlY3Qu
cHJlc2VydmVBbHBoYSgpLAorICAgICAgICBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRz
KG1fZWZmZWN0Lmtlcm5lbCgpKQogICAgIH07CiAKLSAgICAvLyBEcmF3aW5nIGZ1bGx5IGNvdmVy
ZWQgcGl4ZWxzCi0gICAgaW50IGNsaXBSaWdodCA9IHBhaW50U2l6ZS53aWR0aCgpIC0gbV9rZXJu
ZWxTaXplLndpZHRoKCk7Ci0gICAgaW50IGNsaXBCb3R0b20gPSBwYWludFNpemUuaGVpZ2h0KCkg
LSBtX2tlcm5lbFNpemUuaGVpZ2h0KCk7Ci0KLSAgICBpZiAoY2xpcFJpZ2h0IDwgMCB8fCBjbGlw
Qm90dG9tIDwgMCkgewotICAgICAgICAvLyBSYXJlIHNpdHVhdGlvbiwgbm90IG9wdGltaXplZCBm
b3Igc3BlZWQKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBwYWlu
dFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgaWYgKGludCBpdGVyYXRpb25zID0gKGFic29sdXRlUGFpbnRSZWN0KCku
d2lkdGgoKSAqIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVjdERp
bWVuc2lvbikgewotICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlvbnM7
Ci0gICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAvIHN0
cmlkZTsKLQotICAgICAgICBDb25jdXJyZW50V29ya1F1ZXVlOjphcHBseShjaHVua0NvdW50LCBb
Jl0oc2l6ZV90IGluZGV4KSB7Ci0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAqIGlu
ZGV4KTsKLSAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAoaW5k
ZXggKyAxKSwgY2xpcEJvdHRvbSk7Ci0KLSAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBh
aW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotICAgICAg
ICB9KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRh
LCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOwotCi0gICAgY2xpcFJpZ2h0
ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7Ci0gICAgY2xpcEJvdHRvbSArPSBtX3RhcmdldE9m
ZnNldC55KCkgKyAxOwotICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQotICAgICAgICBz
ZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBtX3Rh
cmdldE9mZnNldC55KCkpOwotICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhlaWdodCgp
KQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIHBh
aW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgIGlmIChtX3RhcmdldE9m
ZnNldC54KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIG1f
dGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKLSAgICBp
ZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHNldE91dGVyUGl4ZWxz
KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50U2l6ZS53
aWR0aCgpLCBjbGlwQm90dG9tKTsKLQorICAgIGFwcGx5UGxhdGZvcm0ocGFpbnRpbmdEYXRhKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZFQ29udm9s
dmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3Rz
KCkpOworfQorCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRWRnZU1vZGVUeXBlJiB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29u
dm9sdmVNYXRyaXguaAppbmRleCAwNWMxYTgzN2QyMzRjZjU4NGRlODkwZjU5NGIyMjA3M2YxMzM2
NWM1Li42YjdhZGU2ZjBiMjI4OWYzNDNlNTY4MTRmZDhjMmRlNTQ0NzNmZjk5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29u
dm9sdmVNYXRyaXguaApAQCAtNjQsMTYgKzY0LDYgQEAgcHVibGljOgogICAgIGJvb2wgc2V0UHJl
c2VydmVBbHBoYShib29sKTsKIAogcHJpdmF0ZToKLQotICAgIHN0cnVjdCBQYWludGluZ0RhdGEg
ewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsKLSAgICAg
ICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0aDsK
LSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgZmxvYXQgYmlhczsKLSAgICAgICAgVmVjdG9y
PGZsb2F0PiBrZXJuZWxNYXRyaXg7Ci0gICAgfTsKLQogICAgIEZFQ29udm9sdmVNYXRyaXgoY29u
c3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3Qg
SW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiBr
ZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4m
IGtlcm5lbE1hdHJpeCk7CiAKICAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNv
bnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQpAQCAtODIsMjEgKzcyLDYgQEAgcHJpdmF0ZToKIAog
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdGVtcGxhdGU8
Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmYXN0U2V0
SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0
b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLQotICAgIEFMV0FZU19JTkxJTkUgaW50IGdldFBp
eGVsVmFsdWUoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsKLQotICAgIHRlbXBsYXRlPGJv
b2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLSAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWlu
dGluZ0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gV3Jh
cHBlciBmdW5jdGlvbnMKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMo
UGFpbnRpbmdEYXRhJiwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQs
IGludCB5RW5kKTsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRp
bmdEYXRhJiwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFBhcmFs
bGVsaXphdGlvbiBwYXJ0cwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVu
c2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwg
am9icwotCiAgICAgSW50U2l6ZSBtX2tlcm5lbFNpemU7CiAgICAgZmxvYXQgbV9kaXZpc29yOwog
ICAgIGZsb2F0IG1fYmlhczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKaW5kZXggMWFhY2U5
ZDY5YTA5MGI0ZjEwZjEzZGU3NTU3NTFlZjI4NjIwOTFjZC4uZWM3MWI1NDdhMWRmODZhOTEzOWQx
M2FlNjMzODY3NDI5NWU5ODdkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKQEAgLTMz
LDcgKzMzLDcgQEAgUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1c2VMaWdodGluZzo6Y3Jl
YXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG8KIH0KIAogRkVEaWZmdXNlTGlnaHRp
bmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBz
dXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3Vy
Y2UpCi0gICAgOiBGRUxpZ2h0aW5nKERpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3Vy
ZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJu
ZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIEZpbHRlckVmZmVjdDo6VHlwZTo6
RkVEaWZmdXNlTGlnaHRpbmcpCisgICAgOiBGRUxpZ2h0aW5nKEZpbHRlckVmZmVjdDo6VHlwZTo6
RkVEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNv
bnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1v
dmUobGlnaHRTb3VyY2UpKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4
IGU3YzFhMjI5OWI0ZTUwN2M0ZjY4Yjg2ODhhOGQwODU3N2MwNTU2YjAuLmRmYzc2MGUyMGY0OTk0
NjA1Zjk0NDkxMmVmZGUzYWMwODE1MDRiYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
CkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiRkVEaXNwbGFjZW1lbnRNYXAuaCIKIAogI2lu
Y2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTg0LDMwICs4NSw0OCBAQCB2b2lkIEZFRGlz
cGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4s
IGNvbnN0IGludCBpbgogICAgICAgICBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShvcGVy
YXRpbmdDb2xvclNwYWNlKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZz
ZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQorLy8g
RklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFy
YXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVEaXNwbGFjZW1lbnRNYXBTb2Z0
d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRGlzcGxh
Y2VtZW50TWFwPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGll
cjxGRURpc3BsYWNlbWVudE1hcD47CisKK3B1YmxpYzoKKyAgICBGRURpc3BsYWNlbWVudE1hcFNv
ZnR3YXJlQXBwbGllcihGRURpc3BsYWNlbWVudE1hcCYpOworCisgICAgYm9vbCBhcHBseShjb25z
dCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQ
aXhlbCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCByb3dCeXRlcykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OworICAgICAgICByZXR1cm4g
eCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7CisgICAgfQorCisgICAgaW50IHhDaGFu
bmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2VmZmVjdC54Q2hhbm5lbFNlbGVjdG9yKCkgLSAx
OyB9CisgICAgaW50IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2VmZmVjdC55Q2hh
bm5lbFNlbGVjdG9yKCkgLSAxOyB9Cit9OworCitGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBw
bGllcjo6RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIoRkVEaXNwbGFjZW1lbnRNYXAm
IGVmZmVjdCkKKyAgICA6IEJhc2UoZWZmZWN0KQogewotICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVz
UGVyUGl4ZWwgPSA0OwotICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhlbCArIHkgKiByb3dCeXRl
czsKKyAgICBBU1NFUlQobV9lZmZlY3QueENoYW5uZWxTZWxlY3RvcigpICE9IENIQU5ORUxfVU5L
Tk9XTik7CisgICAgQVNTRVJUKG1fZWZmZWN0LnlDaGFubmVsU2VsZWN0b3IoKSAhPSBDSEFOTkVM
X1VOS05PV04pOwogfQogCi1ib29sIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitib29sIEZFRGlzcGxhY2VtZW50TWFwU29mdHdh
cmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0
VmVjdG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0KLSAgICBB
U1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7Ci0gICAgQVNTRVJU
KG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOworICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBp
bnB1dEVmZmVjdHNbMV0uZ2V0KCk7CiAKLSAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBwaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZl
clJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBpZiAo
IWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1
dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEo
KTsKIAotICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRvIGVmZmVj
dEFEcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZl
cihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgYXV0byBpbnB1dFBpeGVsQnVmZmVyID0g
aW4tPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5n
UmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFp
bnRSZWN0KCkpOworICAgIGF1dG8gZWZmZWN0QkRyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAg
ICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g4oCYaW4y
4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQgY29sb3IgdmFsdWVzLgog
ICAgIGF1dG8gZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXIgPSBpbjItPmdldFBpeGVsQnVmZmVyUmVz
dWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZWZmZWN0QkRyYXdp
bmdSZWN0KTsKICAgICAKQEAgLTExOCw5ICsxMzcsOSBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFw
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgYXV0byYg
ZGlzcGxhY2VtZW50SW1hZ2UgPSBkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwogICAg
IEFTU0VSVChpbnB1dEltYWdlLmxlbmd0aCgpID09IGRpc3BsYWNlbWVudEltYWdlLmxlbmd0aCgp
KTsKIAotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7
CisgICAgSW50U2l6ZSBwYWludFNpemUgPSBtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKTsKIAotICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxl
KHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsKKyAgICBGbG9hdFNpemUgc2NhbGUgPSBmaWx0ZXIuc2Nh
bGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LnNjYWxlKCksIG1fZWZmZWN0LnNjYWxlKCkgfSk7
CiAgICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBzY2FsZS53aWR0aCgpIC8gMjU1LjA7CiAgICAg
ZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWlnaHQoKSAvIDI1NS4wOwogICAgIGZsb2F0
IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0aCgpICogMC41OwpAQCAtMTUzLDYgKzE3
MiwxMSBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVEaXNwbGFj
ZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sK
KyAgICByZXR1cm4gRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5
KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSYgdHlwZSkKIHsK
ICAgICBzd2l0Y2ggKHR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCA5OTAxNDI2
MWNiODJlOWRhMjBiOWUwM2Y4ZGVkYzIyNTY4M2MxMmVhLi43YTYzNzhiMDRjYjRhZDg4MjExYTBh
NGFjYTg4YWZkODgzMjdjZWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC01MCwxNSAr
NTAsMTIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRURpc3BsYWNlbWVudE1hcChDaGFubmVs
U2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5u
ZWxTZWxlY3RvciwgZmxvYXQpOwogCi0gICAgaW50IHhDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9Ci0gICAgaW50IHlDaGFubmVsSW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9Ci0KLSAgICB2b2lkIGRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIGJv
b2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKCkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCos
IGNvbnN0IGludCkgb3ZlcnJpZGU7CiAKLSAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9z
aW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCBiNjJhYjY4NGNkOTFl
ZmM3N2YxOGExNjRlOTVhNDU5NGZjNzY4NThlLi5hYWIyNDhkMTQ4MDJmYjY3NTdhZTNhNTlhNDNl
NDYyOTNhZmMxODU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5j
bHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNp
bmNsdWRlICJQaXhlbEJ1ZmZlci5oIgpAQCAtNjksMTggKzcwLDI4IEBAIHZvaWQgRkVEcm9wU2hh
ZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAg
ICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0
KSk7CiB9CiAKLWJvb2wgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVEcm9wU2hhZG93U29m
dHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3Mg
RkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRl
QXBwbGllcjxGRURyb3BTaGFkb3c+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29u
Y3JldGVBcHBsaWVyPEZFRHJvcFNoYWRvdz47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpC
YXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RW
ZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCitib29sIEZFRHJvcFNoYWRvd1Nv
ZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVm
ZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgp
OwogCi0gICAgYXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0
byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFy
ZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRTaXplIGJsdXJS
YWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX3N0ZFgsIG1fc3RkWSB9
KTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBt
X2R4LCBtX2R5IH0pOworICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3Quc3RkRGV2aWF0aW9uWCgpLCBtX2VmZmVjdC5zdGRE
ZXZpYXRpb25ZKCkgfSk7CisgICAgRmxvYXRTaXplIG9mZnNldCA9IGZpbHRlci5zY2FsZWRCeUZp
bHRlclNjYWxlKHsgbV9lZmZlY3QuZHgoKSwgbV9lZmZlY3QuZHkoKSB9KTsKIAotICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBtX2VmZmVjdC5k
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICBG
bG9hdFJlY3QgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQoZHJhd2luZ1JlZ2lvbik7CiAgICAgZHJh
d2luZ1JlZ2lvbldpdGhPZmZzZXQubW92ZShvZmZzZXQpOwogCkBAIC04OSwxMyArMTAwLDEzIEBA
IGJvb2wgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBm
aWx0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCYgcmVz
dWx0Q29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgcmVzdWx0Q29udGV4dC5z
ZXRBbHBoYShtX3NoYWRvd09wYWNpdHkpOworICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEobV9l
ZmZlY3Quc2hhZG93T3BhY2l0eSgpKTsKICAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KTsKICAgICByZXN1bHRDb250
ZXh0LnNldEFscGhhKDEpOwogCi0gICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRp
dXMsIG9mZnNldCwgbV9zaGFkb3dDb2xvcik7CisgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93
KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9lZmZlY3Quc2hhZG93Q29sb3IoKSk7CiAKLSAgICBQaXhl
bEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdENvbG9yU3BhY2UoKSB9OworICAgIFBpeGVs
QnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9lZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpIH07CiAg
ICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT50cnVuY2F0ZWRM
b2dpY2FsU2l6ZSgpKTsKICAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBp
eGVsQnVmZmVyKGZvcm1hdCwgc2hhZG93QXJlYSk7CiAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKQEAg
LTEwNywxNCArMTE4LDE4IEBAIGJvb2wgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVy
KCpwaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7CiAKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwotICAgIHJlc3VsdENv
bnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKKyAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
KSwgbV9lZmZlY3Quc2hhZG93Q29sb3IoKSk7CiAgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3Np
dGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3Zlcik7CiAKICAgICBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdp
bmdSZWdpb24pOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVEcm9wU2hhZG93Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJu
IEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVm
ZmVjdHMoKSk7Cit9CisgICAgCiBJbnRPdXRzZXRzIEZFRHJvcFNoYWRvdzo6b3V0c2V0cygpIGNv
bnN0CiB7CiAgICAgSW50U2l6ZSBvdXRzZXRTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0
ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IDI4MDliNGIxNzVk
MzI1NWQyMTA3NDk5MTZlYjNlZDA1MDEzNTY1YTUuLjk4OThjNzM3NmY2NWYyZTExNzVjMWE3ODFj
NjRlZWY4MzI0NmFlYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIkZF
Rmxvb2QuaCIKIAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgorI2luY2x1ZGUgIkZp
bHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAg
LTU4LDE4ICs1OSwzMyBAQCBib29sIEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9v
ZE9wYWNpdHkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRkVGbG9vZDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVE
cm9wU2hhZG93U29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZp
bGVzLgorY2xhc3MgRkVGbG9vZFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RD
b25jcmV0ZUFwcGxpZXI8RkVGbG9vZD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RD
b25jcmV0ZUFwcGxpZXI8RkVGbG9vZD47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNl
OworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0
b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCitib29sIEZFRmxvb2RTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYpCiB7
Ci0gICAgYXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBy
ZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1
bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBjb2xvciA9IGZsb29k
Q29sb3IoKS5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9vZE9wYWNpdHkoKSk7Ci0gICAg
cmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBh
YnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNvbG9yKTsKKyAgICBhdXRvIGNvbG9yID0gbV9l
ZmZlY3QuZmxvb2RDb2xvcigpLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KG1fZWZmZWN0LmZs
b29kT3BhY2l0eSgpKTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwg
Y29sb3IpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVGbG9vZDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRUZsb29k
U29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30K
KwogVGV4dFN0cmVhbSYgRkVGbG9vZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRz
IDw8IGluZGVudCA8PCAiW2ZlRmxvb2QiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAppbmRleCA5YzEzZTVkNGViYThjOGM5YmM5ODRk
YzYzOTQ3MGJjNDhjOTQzNWUzLi4xMzM4MjMxY2VkYjFkOWE5YTdjZmQ5MThlNGYzOWRhNjcwNjFj
YzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuaApAQCAtMzksNyArMzksOCBAQCBwdWJsaWM6CiAjaWYgIVVTRShDRykKICAgICAv
LyBmZUZsb29kIGRvZXMgbm90IHBlcmZvcm0gY29sb3IgaW50ZXJwb2xhdGlvbiBvZiBhbnkga2lu
ZCwgc28gdGhlIHJlc3VsdCBpcyBhbHdheXMgaW4gdGhlIGN1cnJlbnQKICAgICAvLyBjb2xvciBz
cGFjZSByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRl
cnMuCi0gICAgdm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKSBvdmVycmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0
UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7IH0KKyAgICB2
b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJikgb3Zl
cnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5j
cHAKaW5kZXggNGM1ZmFiMDFhMzM5NTdlOGZlOTIxNTZkNTA3OTE2N2Q0YmU5YzBmOS4uZGIzNTkw
OGY0ZjRmODlhNDU4ZDc5YmMzMDFmMTI4YWM1NTkyOTEwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5j
cHAKQEAgLTI4LDMwICsyOCwxNTAgQEAKIAogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyTkVPTi5o
IgogI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgor
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCiAjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVy
YXRlLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4K
KyNlbHNlCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNzaWFuQmx1
cjo6Y3JlYXRlKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUdhdXNzaWFuQmx1cih4LCB5LCBlZGdlTW9kZSkpOwor
fQorCitGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwgZmxvYXQgeSwgRWRn
ZU1vZGVUeXBlIGVkZ2VNb2RlKQorICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVjdDo6VHlw
ZTo6RkVHYXVzc2lhbkJsdXIpCisgICAgLCBtX3N0ZFgoeCkKKyAgICAsIG1fc3RkWSh5KQorICAg
ICwgbV9lZGdlTW9kZShlZGdlTW9kZSkKK3sKK30KKwordm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0
U3RkRGV2aWF0aW9uWChmbG9hdCB4KQoreworICAgIG1fc3RkWCA9IHg7Cit9CisKK3ZvaWQgRkVH
YXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblkoZmxvYXQgeSkKK3sKKyAgICBtX3N0ZFkgPSB5
OworfQorCit2b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRFZGdlTW9kZShFZGdlTW9kZVR5cGUgZWRn
ZU1vZGUpCit7CisgICAgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOworfQogCiBzdGF0aWMgaW5saW5l
IGZsb2F0IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkKIHsKICAgICByZXR1cm4gMyAvIDQuZiAqIHNx
cnRmKDIgKiBwaUZsb2F0KTsKIH0KIAotc3RhdGljIGNvbnN0IGludCBnTWF4S2VybmVsU2l6ZSA9
IDUwMDsKK3N0YXRpYyBpbnQgY2xhbXBlZFRvS2VybmVsU2l6ZShmbG9hdCB2YWx1ZSkKK3sKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heEtlcm5lbFNpemUgPSA1MDA7CisKKyAgICAv
LyBMaW1pdCB0aGUga2VybmVsIHNpemUgdG8gNTAwLiBBIGJpZ2dlciByYWRpdXMgd29uJ3QgbWFr
ZSBhIGJpZyBkaWZmZXJlbmNlIGZvciB0aGUgcmVzdWx0IGltYWdlIGJ1dAorICAgIC8vIGluZmxh
dGVzIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHRvbyBtdWNoLiBUaGlzIGlzIGNvbXBhdGlibGUg
d2l0aCBGaXJlZm94JyBiZWhhdmlvci4KKyAgICB1bnNpZ25lZCBzaXplID0gc3RkOjptYXg8dW5z
aWduZWQ+KDIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmbG9vcmYodmFsdWUgKiBnYXVzc2lhbktl
cm5lbEZhY3RvcigpICsgMC41ZikpKTsKKyAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHN0ZDo6bWlu
KHNpemUsIG1heEtlcm5lbFNpemUpKTsKK30KKyAgICAKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6
OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQorewor
ICAgIEFTU0VSVChzdGREZXZpYXRpb24ud2lkdGgoKSA+PSAwICYmIHN0ZERldmlhdGlvbi5oZWln
aHQoKSA+PSAwKTsKKyAgICBJbnRTaXplIGtlcm5lbFNpemU7CiAKLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAgICBpZiAoc3RkRGV2aWF0aW9uLndpZHRoKCkpCisgICAgICAgIGtlcm5lbFNpemUuc2V0
V2lkdGgoY2xhbXBlZFRvS2VybmVsU2l6ZShzdGREZXZpYXRpb24ud2lkdGgoKSkpOworCisgICAg
aWYgKHN0ZERldmlhdGlvbi5oZWlnaHQoKSkKKyAgICAgICAga2VybmVsU2l6ZS5zZXRIZWlnaHQo
Y2xhbXBlZFRvS2VybmVsU2l6ZShzdGREZXZpYXRpb24uaGVpZ2h0KCkpKTsKKworICAgIHJldHVy
biBrZXJuZWxTaXplOworfQorCitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJu
ZWxTaXplKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQorewor
ICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoZmlsdGVyLnNjYWxlZEJ5Rmls
dGVyU2NhbGUoc3RkRGV2aWF0aW9uKSk7Cit9CisKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNh
bGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKK3sKKyAgICBhdXRvIGtl
cm5lbFNpemUgPSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uKTsKKwor
ICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGgg
dGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgorICAgIHJldHVybiB7
IDMgKiBrZXJuZWxTaXplLndpZHRoKCkgLyAyLCAzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAvIDIg
fTsKK30KKwordm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3Vs
YXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisKKyAgICBGbG9hdFJl
Y3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3Qo
KTsKKyAgICAvLyBFZGdlIG1vZGVzIG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRo
ZSBhZmZlY3RlZCBwYWludCByZWN0LgorICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05P
TkUpIHsKKyAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNv
bHV0ZVBhaW50UmVjdCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgdGFr
ZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVz
ZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCisgICAgYWJzb2x1dGVQYWludFJlY3QuaW5m
bGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOworICAgIGFic29sdXRlUGFpbnRS
ZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7CisKKyAgICBpZiAo
Y2xpcHNUb0JvdW5kcygpKQorICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4
RWZmZWN0UmVjdCgpKTsKKyAgICBlbHNlCisgICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRl
KG1heEVmZmVjdFJlY3QoKSk7CisKKyAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Cit9CisKKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFz
cyBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhl
YWRlciBmaWxlcy4KK2NsYXNzIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyIDogcHVibGlj
IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUdhdXNzaWFuQmx1cj4geworICAgIHVzaW5n
IEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVHYXVzc2lhbkJsdXI+OworCitw
dWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmls
dGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIHN0cnVjdCBBcHBseVBhcmFtZXRlcnMgeworICAgICAgICBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IGlvUGl4ZWxBcnJheTsKKyAgICAgICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiB0bXBQaXhlbEFycmF5OworICAgICAgICBpbnQgd2lkdGg7CisgICAgICAgIGlu
dCBoZWlnaHQ7CisgICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVYOworICAgICAgICB1bnNpZ25l
ZCBrZXJuZWxTaXplWTsKKyAgICAgICAgYm9vbCBpc0FscGhhSW1hZ2U7CisgICAgICAgIEVkZ2VN
b2RlVHlwZSBlZGdlTW9kZTsKKyAgICB9OworCisgICAgc3RhdGljIGlubGluZSB2b2lkIGtlcm5l
bFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRh
TGVmdCwgaW50JiBkZWx0YVJpZ2h0KTsKIAotaW5saW5lIHZvaWQga2VybmVsUG9zaXRpb24oaW50
IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGludCYgZGVsdGFMZWZ0LCBpbnQmIGRl
bHRhUmlnaHQpCisgICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJBbHBoYU9ubHkoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQ
aXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdodCwgaW50JiBz
dHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RIZWln
aHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGJv
eEJsdXIoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4Umln
aHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZl
Y3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsKKworICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBib3hCbHVyQWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVy
LCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50
IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KTsKKyAgICBzdGF0aWMg
aW5saW5lIHZvaWQgYm94Qmx1clVuYWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVm
ZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgs
IHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJv
b2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOworCisgICAgc3RhdGljIGlubGluZSB2b2lk
IGJveEJsdXJHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVk
QXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJu
ZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVU
eXBlKTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1cldvcmtlcihBcHBseVBhcmFtZXRl
cnMqKTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseVBsYXRmb3JtKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2ln
bmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXpl
LCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsKK307CisKK2lubGluZSB2b2lkIEZF
R2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjprZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJh
dGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCkK
IHsKICAgICAvLyBDaGVjayBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2Zl
R2F1c3NpYW5CbHVyRWxlbWVudCBmb3IgZGV0YWlscy4KICAgICBzd2l0Y2ggKGJsdXJJdGVyYXRp
b24pIHsKQEAgLTc5LDM3ICsxOTksOCBAQCBpbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQg
Ymx1ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsCiAgICAgfQog
fQogCi1SZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoZmxvYXQgeCwg
ZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZFR2F1c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2RlKSk7Ci19Ci0KLUZFR2F1c3NpYW5CbHVy
OjpGRUdhdXNzaWFuQmx1cihmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUp
Ci0gICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUdhdXNzaWFuQmx1cikK
LSAgICAsIG1fc3RkWCh4KQotICAgICwgbV9zdGRZKHkpCi0gICAgLCBtX2VkZ2VNb2RlKGVkZ2VN
b2RlKQotewotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25YKGZsb2F0
IHgpCi17Ci0gICAgbV9zdGRYID0geDsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0U3Rk
RGV2aWF0aW9uWShmbG9hdCB5KQotewotICAgIG1fc3RkWSA9IHk7Ci19Ci0KLXZvaWQgRkVHYXVz
c2lhbkJsdXI6OnNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLXsKLSAgICBtX2Vk
Z2VNb2RlID0gZWRnZU1vZGU7Ci19Ci0KIC8vIFRoaXMgZnVuY3Rpb24gb25seSBvcGVyYXRlcyBv
biBBbHBoYSBjaGFubmVsLgotaW5saW5lIHZvaWQgYm94Qmx1ckFscGhhT25seShjb25zdCBVaW50
OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVs
QXJyYXksCi0gICAgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0LCBpbnQmIGR4UmlnaHQsIGludCYg
c3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0V2lkdGgsIGludCYgZWZmZWN0SGVp
Z2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1
clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFscGhhT25seShjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIHVuc2ln
bmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJp
ZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdodCwgY29uc3QgaW50JiBt
YXhLZXJuZWxTaXplKQogewogICAgIGNvbnN0IHVpbnQ4X3QqIHNyY0RhdGEgPSBzcmNQaXhlbEFy
cmF5LmRhdGEoKTsKICAgICB1aW50OF90KiBkc3REYXRhID0gZHN0UGl4ZWxBcnJheS5kYXRhKCk7
CkBAIC0xNDksOCArMjQwLDcgQEAgaW5saW5lIHZvaWQgYm94Qmx1ckFscGhhT25seShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGUKICAgICB9CiB9CiAK
LWlubGluZSB2b2lkIGJveEJsdXIoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJy
YXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LAotICAgIHVuc2lnbmVkIGR4LCBp
bnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwgaW50IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUsIGludCBl
ZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCwgYm9vbCBhbHBoYUltYWdlLCBFZGdlTW9kZVR5
cGUgZWRnZU1vZGUpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6
Ym94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFt
cGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhS
aWdodCwgaW50IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVm
ZmVjdEhlaWdodCwgYm9vbCBhbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7CiAg
ICAgY29uc3QgaW50IG1heEtlcm5lbFNpemUgPSBzdGQ6Om1pbihkeFJpZ2h0LCBlZmZlY3RXaWR0
aCk7CiAgICAgaWYgKGFscGhhSW1hZ2UpCkBAIC0yODAsNyArMzcwLDcgQEAgaW5saW5lIHZvaWQg
Ym94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFt
cGVkQXJyYXkmIGQKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFKQotaW5saW5lIHZvaWQgYWNjZWxl
cmF0ZUJveEJsdXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJh
eSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVj
dFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0
d2FyZUFwcGxpZXI6OmJveEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgaW9CdWZm
ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplLCBp
bnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQpCiB7CiAgICAgaWYg
KCFpb0J1ZmZlci5kYXRhKCkgfHwgIXRlbXBCdWZmZXIuZGF0YSgpKSB7CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzI2LDcgKzQxNiw3IEBAIGlubGluZSB2b2lkIGFjY2VsZXJh
dGVCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkm
IHRlCiB9CiAjZW5kaWYKIAotaW5saW5lIHZvaWQgc3RhbmRhcmRCb3hCbHVyKFVpbnQ4Q2xhbXBl
ZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVk
IGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0cmlkZSwgSW50U2l6ZSYg
cGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoraW5s
aW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJVbmFjY2VsZXJh
dGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBC
dWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0
cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlKQogewogICAgIGludCBkeExlZnQgPSAwOwogICAgIGludCBkeFJpZ2h0ID0gMDsK
QEAgLTM3MSwzNSArNDYxLDM5IEBAIGlubGluZSB2b2lkIHN0YW5kYXJkQm94Qmx1cihVaW50OENs
YW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wCiAgICAgfQogfQog
Ci1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMoVWludDhD
bGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwg
dW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWlu
dFNpemUpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1
ckdlbmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYg
dG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZ
LCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRn
ZU1vZGUpCiB7CiAgICAgaW50IHN0cmlkZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKIAogI2lm
IFVTRShBQ0NFTEVSQVRFKQotICAgIGlmIChrZXJuZWxTaXplWCA9PSBrZXJuZWxTaXplWSAmJiAo
bV9lZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FIHx8IG1fZWRnZU1vZGUgPT0gRURHRU1PREVfRFVQ
TElDQVRFKSkgewotICAgICAgICBhY2NlbGVyYXRlQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxB
cnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5o
ZWlnaHQoKSk7CisgICAgaWYgKGtlcm5lbFNpemVYID09IGtlcm5lbFNpemVZICYmIChlZGdlTW9k
ZSA9PSBFREdFTU9ERV9OT05FIHx8IGVkZ2VNb2RlID09IEVER0VNT0RFX0RVUExJQ0FURSkpIHsK
KyAgICAgICAgYm94Qmx1ckFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJu
ZWxTaXplWCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCi0gICAgc3RhbmRhcmRCb3hCbHVyKGlv
QnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHN0cmlkZSwg
cGFpbnRTaXplLCBpc0FscGhhSW1hZ2UoKSwgbV9lZGdlTW9kZSk7CisgICAgYm94Qmx1clVuYWNj
ZWxlcmF0ZWQoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXpl
WSwgc3RyaWRlLCBwYWludFNpemUsIGlzQWxwaGFJbWFnZSwgZWRnZU1vZGUpOwogfQogCi12b2lk
IEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0
ZXJzKiBwYXJhbWV0ZXJzKQorI2lmICFVU0UoQUNDRUxFUkFURSkKK2lubGluZSB2b2lkIEZFR2F1
c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyV29ya2VyKEFwcGx5UGFyYW1ldGVycyog
cGFyYW1ldGVycykKIHsKICAgICBJbnRTaXplIHBhaW50U2l6ZShwYXJhbWV0ZXJzLT53aWR0aCwg
cGFyYW1ldGVycy0+aGVpZ2h0KTsKLSAgICBwYXJhbWV0ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBw
bHlHZW5lcmljKCpwYXJhbWV0ZXJzLT5pb1BpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT50bXBQaXhl
bEFycmF5LCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVks
IHBhaW50U2l6ZSk7CisgICAgYm94Qmx1ckdlbmVyaWMoKnBhcmFtZXRlcnMtPmlvUGl4ZWxBcnJh
eSwgKnBhcmFtZXRlcnMtPnRtcFBpeGVsQXJyYXksIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVYLCBw
YXJhbWV0ZXJzLT5rZXJuZWxTaXplWSwgcGFpbnRTaXplLCBwYXJhbWV0ZXJzLT5pc0FscGhhSW1h
Z2UsIHBhcmFtZXRlcnMtPmVkZ2VNb2RlKTsKIH0KKyNlbmRpZgogCi1pbmxpbmUgdm9pZCBGRUdh
dXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVp
bnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5z
aWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSkKK2lubGluZSB2b2lkIEZFR2F1
c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFVpbnQ4Q2xhbXBlZEFycmF5
JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtl
cm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29s
IGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQogewogI2lmICFVU0UoQUNDRUxF
UkFURSkKICAgICBpbnQgc2NhbmxpbmUgPSA0ICogcGFpbnRTaXplLndpZHRoKCk7CiAgICAgaW50
IGV4dHJhSGVpZ2h0ID0gMyAqIGtlcm5lbFNpemVZICogMC41ZjsKLSAgICBpbnQgb3B0aW1hbFRo
cmVhZE51bWJlciA9IChwYWludFNpemUud2lkdGgoKSAqIHBhaW50U2l6ZS5oZWlnaHQoKSkgLyAo
c19taW5pbWFsUmVjdERpbWVuc2lvbiArIGV4dHJhSGVpZ2h0ICogcGFpbnRTaXplLndpZHRoKCkp
OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAg
KiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCisgICAgaW50
IG9wdGltYWxUaHJlYWROdW1iZXIgPSAocGFpbnRTaXplLndpZHRoKCkgKiBwYWludFNpemUuaGVp
Z2h0KCkpIC8gKG1pbmltYWxSZWN0RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWludFNpemUu
d2lkdGgoKSk7CiAKICAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAg
UGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJnBsYXRm
b3JtQXBwbHlXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOworICAgICAgICBQYXJhbGxlbEpv
YnM8QXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJmJveEJsdXJXb3JrZXIsIG9wdGltYWxU
aHJlYWROdW1iZXIpOwogCiAgICAgICAgIGludCBqb2JzID0gcGFyYWxsZWxKb2JzLm51bWJlck9m
Sm9icygpOwogICAgICAgICBpZiAoam9icyA+IDEpIHsKQEAgLTQxMCw4ICs1MDQsNyBAQCBpbmxp
bmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseShVaW50OENsYW1wZWRBcnJheSYg
aW9CdWZmZXIsIFVpbnQ4Q2xhbQogCiAgICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOwogICAg
ICAgICAgICAgZm9yIChpbnQgam9iID0gMDsgam9iIDwgam9iczsgam9iKyspIHsKLSAgICAgICAg
ICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBh
cmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOworICAg
ICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFt
ZXRlcihqb2IpOwogCiAgICAgICAgICAgICAgICAgaW50IHN0YXJ0WSA9ICFqb2IgPyAwIDogY3Vy
cmVudFkgLSBleHRyYUhlaWdodDsKICAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBqb2IgPCBq
b2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxvY2tIZWlnaHQ7CkBAIC00MzEsNiAr
NTI0LDggQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkoVWludDhD
bGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW0KICAgICAgICAgICAgICAgICBwYXJhbXMu
aGVpZ2h0ID0gZW5kWSAtIHN0YXJ0WTsKICAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6
ZVggPSBrZXJuZWxTaXplWDsKICAgICAgICAgICAgICAgICBwYXJhbXMua2VybmVsU2l6ZVkgPSBr
ZXJuZWxTaXplWTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuaXNBbHBoYUltYWdlID0gaXNBbHBo
YUltYWdlOworICAgICAgICAgICAgICAgIHBhcmFtcy5lZGdlTW9kZSA9IGVkZ2VNb2RlOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwpAQCAtNDM4
LDcgKzUzMyw3IEBAIGlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KFVp
bnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtCiAgICAgICAgICAgICAvLyBDb3B5
IHRvZ2V0aGVyIHRoZSBwYXJ0cyBvZiB0aGUgaW1hZ2UuCiAgICAgICAgICAgICBjdXJyZW50WSA9
IDA7CiAgICAgICAgICAgICBmb3IgKGludCBqb2IgPSAxOyBqb2IgPCBqb2JzOyBqb2IrKykgewot
ICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxl
bEpvYnMucGFyYW1ldGVyKGpvYik7CisgICAgICAgICAgICAgICAgQXBwbHlQYXJhbWV0ZXJzJiBw
YXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7CiAgICAgICAgICAgICAgICAgaW50
IHNvdXJjZU9mZnNldDsKICAgICAgICAgICAgICAgICBpbnQgZGVzdGluYXRpb25PZmZzZXQ7CiAg
ICAgICAgICAgICAgICAgaW50IHNpemU7CkBAIC00NTgsOTQgKzU1Myw0MSBAQCBpbmxpbmUgdm9p
ZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZm
ZXIsIFVpbnQ4Q2xhbQogI2VuZGlmCiAKICAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUgZXZlbnR1
YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZvcm1zLgotICAgIHBs
YXRmb3JtQXBwbHlHZW5lcmljKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwg
a2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgY2xhbXBlZFRvS2VybmVs
U2l6ZShmbG9hdCB2YWx1ZSkKLXsKLSAgICAvLyBMaW1pdCB0aGUga2VybmVsIHNpemUgdG8gNTAw
LiBBIGJpZ2dlciByYWRpdXMgd29uJ3QgbWFrZSBhIGJpZyBkaWZmZXJlbmNlIGZvciB0aGUgcmVz
dWx0IGltYWdlIGJ1dAotICAgIC8vIGluZmxhdGVzIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHRv
byBtdWNoLiBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBGaXJlZm94JyBiZWhhdmlvci4KLSAgICB1
bnNpZ25lZCBzaXplID0gc3RkOjptYXg8dW5zaWduZWQ+KDIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihmbG9vcmYodmFsdWUgKiBnYXVzc2lhbktlcm5lbEZhY3RvcigpICsgMC41ZikpKTsKLSAgICBy
ZXR1cm4gY2xhbXBUbzxpbnQ+KHN0ZDo6bWluKHNpemUsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihn
TWF4S2VybmVsU2l6ZSkpKTsKLX0KLSAgICAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1
bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQotewotICAgIEFT
U0VSVChzdGREZXZpYXRpb24ud2lkdGgoKSA+PSAwICYmIHN0ZERldmlhdGlvbi5oZWlnaHQoKSA+
PSAwKTsKLSAgICBJbnRTaXplIGtlcm5lbFNpemU7Ci0KLSAgICBpZiAoc3RkRGV2aWF0aW9uLndp
ZHRoKCkpCi0gICAgICAgIGtlcm5lbFNpemUuc2V0V2lkdGgoY2xhbXBlZFRvS2VybmVsU2l6ZShz
dGREZXZpYXRpb24ud2lkdGgoKSkpOwotCi0gICAgaWYgKHN0ZERldmlhdGlvbi5oZWlnaHQoKSkK
LSAgICAgICAga2VybmVsU2l6ZS5zZXRIZWlnaHQoY2xhbXBlZFRvS2VybmVsU2l6ZShzdGREZXZp
YXRpb24uaGVpZ2h0KCkpKTsKLQotICAgIHJldHVybiBrZXJuZWxTaXplOworICAgIGJveEJsdXJH
ZW5lcmljKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVks
IHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7CiB9CiAKLUludFNpemUgRkVHYXVz
c2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIEZsb2F0
U2l6ZSBzdGREZXZpYXRpb24pCitib29sIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjph
cHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1
dEVmZmVjdHMpCiB7Ci0gICAgcmV0dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0
ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZShzdGREZXZpYXRpb24pKTsKLX0KKyAgICBGaWx0ZXJFZmZl
Y3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOwogCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVy
OjpjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCi17Ci0gICAgYXV0
byBrZXJuZWxTaXplID0gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKHN0ZERldmlhdGlvbik7
Ci0KLSAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3
aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KLSAgICByZXR1
cm4geyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkg
LyAyIH07Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OmRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQotewotICAgIEludFNpemUga2VybmVsU2l6ZSA9IGNh
bGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwgbV9zdGRZIH0pOwotCi0gICAgRmxv
YXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRS
ZWN0KCk7Ci0gICAgLy8gRWRnZSBtb2RlcyBvdGhlciB0aGFuICdub25lJyBkbyBub3QgaW5mbGF0
ZSB0aGUgYWZmZWN0ZWQgcGFpbnQgcmVjdC4KLSAgICBpZiAobV9lZGdlTW9kZSAhPSBFREdFTU9E
RV9OT05FKSB7Ci0gICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3Qo
YWJzb2x1dGVQYWludFJlY3QpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdl
IHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJl
Y2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgotICAgIGFic29sdXRlUGFpbnRSZWN0
LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAwLjVmKTsKLSAgICBhYnNvbHV0ZVBh
aW50UmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAqIDAuNWYpOwotCi0gICAg
aWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgYWJzb2x1dGVQYWludFJlY3QuaW50ZXJzZWN0
KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC51
bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotCi0gICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9z
aW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwotfQotCi1ib29sIEZFR2F1c3NpYW5CbHVy
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCi17Ci0gICAgRmls
dGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0gICAgYXV0byBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3Qu
cGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7
CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKKyAgICBtX2VmZmVj
dC5zZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAotICAgIEludFJlY3QgZWZm
ZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFi
c29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gZWZmZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVj
dC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOwogICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIsIGVmZmVjdERyYXdpbmdSZWN0KTsKLSAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQorICAg
IGlmICghbV9lZmZlY3Quc3RkRGV2aWF0aW9uWCgpICYmICFtX2VmZmVjdC5zdGREZXZpYXRpb25Z
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2Fs
Y3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgYXV0byBr
ZXJuZWxTaXplID0gbV9lZmZlY3QuY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9lZmZl
Y3Quc3RkRGV2aWF0aW9uWCgpLCBtX2VmZmVjdC5zdGREZXZpYXRpb25ZKCkgfSk7CiAKLSAgICBJ
bnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOworICAgIEludFNp
emUgcGFpbnRTaXplID0gbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CiAgICAg
YXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZChwYWludFNpemUuYXJlYSgpICogNCk7CiAgICAgaWYgKCF0bXBJbWFnZURhdGEpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICBwbGF0Zm9ybUFwcGx5KGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxT
aXplLmhlaWdodCgpLCBwYWludFNpemUpOworICAgIGFwcGx5UGxhdGZvcm0oZGVzdGluYXRpb25Q
aXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUu
aGVpZ2h0KCksIHBhaW50U2l6ZSwgbV9lZmZlY3QuaXNBbHBoYUltYWdlKCksIG1fZWZmZWN0LmVk
Z2VNb2RlKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEZFR2F1c3NpYW5CbHVyOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJu
IEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0
RWZmZWN0cygpKTsKK30KKwogSW50T3V0c2V0cyBGRUdhdXNzaWFuQmx1cjo6b3V0c2V0cygpIGNv
bnN0CiB7CiAgICAgSW50U2l6ZSBvdXRzZXRTaXplID0gY2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1f
c3RkWCwgbV9zdGRZIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCmluZGV4IGQ3NGJkYWE3MmVkMzA0ZjVi
ODAxNzdhZDZjY2E3NzVhNWI0OTM3MTcuLjY1YWE2ZTE4ODk3ZmE4Y2M5NzY5ZDFlNTU3ZDdkMjZm
NWU1Y2EyMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKQEAgLTQ2LDI5ICs0NiwxMyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIEZFR2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2Rl
VHlwZSk7CiAKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAx
MDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0KLSAg
ICBzdHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMgewotICAgICAgICBGRUdhdXNzaWFuQmx1
ciogZmlsdGVyOwotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGlvUGl4ZWxBcnJh
eTsKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB0bXBQaXhlbEFycmF5OwotICAg
ICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAgICAgIHVuc2lnbmVkIGtl
cm5lbFNpemVYOwotICAgICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWTsKLSAgICB9OwotCiAgICAg
dm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsK
IAotICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRl
OwotCiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHN0YXRpYyB2b2lkIHBsYXRm
b3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqKTsKLSAgICB2b2lkIHBsYXRm
b3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYg
dGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJ
bnRTaXplJiBwYWludFNpemUpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoVWludDhD
bGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5z
aWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNp
emUpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgZmxv
YXQgbV9zdGRYOwogICAgIGZsb2F0IG1fc3RkWTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGE2OTY1NGFm
MjBiYzM5ZTA1ODE0OTkyODNjMmZlNDg3MmY4ZDMzZTYuLjA0MmE4MzYxNjM5NWRlYWIxNDc0MjM5
ODE0MmQ1ZGY5MjkxZDBhODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMzAsMTUgKzMwLDE0IEBACiAK
ICNpbmNsdWRlICJDb2xvckNvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5o
IgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZl
ci5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1GRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNv
bnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1
c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVu
dCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8
TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UsIFR5cGUgdHlwZSkKK0ZFTGlnaHRpbmc6OkZFTGln
aHRpbmcoVHlwZSB0eXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFj
ZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZs
b2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQogICAgIDogRmls
dGVyRWZmZWN0KHR5cGUpCi0gICAgLCBtX2xpZ2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCi0gICAg
LCBtX2xpZ2h0U291cmNlKFdURk1vdmUobGlnaHRTb3VyY2UpKQogICAgICwgbV9saWdodGluZ0Nv
bG9yKGxpZ2h0aW5nQ29sb3IpCiAgICAgLCBtX3N1cmZhY2VTY2FsZShzdXJmYWNlU2NhbGUpCiAg
ICAgLCBtX2RpZmZ1c2VDb25zdGFudChkaWZmdXNlQ29uc3RhbnQpCkBAIC00Niw2ICs0NSw3IEBA
IEZFTGlnaHRpbmc6OkZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlIGxpZ2h0aW5nVHlwZSwgY29uc3Qg
Q29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsCiAgICAgLCBtX3NwZWN1bGFyRXhwb25lbnQoc3BlY3Vs
YXJFeHBvbmVudCkKICAgICAsIG1fa2VybmVsVW5pdExlbmd0aFgoa2VybmVsVW5pdExlbmd0aFgp
CiAgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhZKGtlcm5lbFVuaXRMZW5ndGhZKQorICAgICwgbV9s
aWdodFNvdXJjZShXVEZNb3ZlKGxpZ2h0U291cmNlKSkKIHsKIH0KIApAQCAtODUsMTcgKzg1LDEw
NSBAQCBib29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVu
aXRMZW5ndGhZKQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgY29uc3RleHByIGludCBj
UGl4ZWxTaXplID0gNDsKLXN0YXRpYyBjb25zdGV4cHIgaW50IGNBbHBoYUNoYW5uZWxPZmZzZXQg
PSAzOwotc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGNPcGFxdWVBbHBoYSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KDB4RkYpOworLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFTGlnaHRpbmdTb2Z0
d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBw
bGllcjxGRUxpZ2h0aW5nPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRl
QXBwbGllcjxGRUxpZ2h0aW5nPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisK
KyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYg
aW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHBy
IGludCBjUGl4ZWxTaXplID0gNDsKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBjQWxwaGFDaGFu
bmVsT2Zmc2V0ID0gMzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgY09wYXF1ZUFscGhh
ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhGRik7CisKKyAgICAvLyBUaGVzZSBmYWN0b3JzIGFu
ZCB0aGUgbm9ybWFsIGNvZWZmaWNpZW50cyBjb21lIGZyb20gdGhlIHRhYmxlIHVuZGVyIGh0dHBz
Oi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dC4KKyAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2MiA9IC0xIC8gMi5mOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYzID0gLTEgLyAzLmY7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjQgPSAtMSAvIDQuZjsKKyAgICBzdGF0
aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IyZGl2MyA9IC0yIC8gMy5mOworCisgICAgc3RydWN0
IEFscGhhV2luZG93IHsKKyAgICAgICAgdWludDhfdCBhbHBoYVszXVszXSB7IH07CisgICAgCisg
ICAgICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGxpbmVkIHVwIHRvIG1ha2UgY29tcGFy
aW5nIGluZGljZXMgZWFzaWVyLgorICAgICAgICB1aW50OF90IHRvcExlZnQoKSBjb25zdCAgICAg
ICAgICAgICB7IHJldHVybiBhbHBoYVswXVswXTsgfQorICAgICAgICB1aW50OF90IGxlZnQoKSBj
b25zdCAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVswXTsgfQorICAgICAgICB1aW50
OF90IGJvdHRvbUxlZnQoKSBjb25zdCAgICAgICAgICB7IHJldHVybiBhbHBoYVsyXVswXTsgfQor
CisgICAgICAgIHVpbnQ4X3QgdG9wKCkgY29uc3QgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFs
cGhhWzBdWzFdOyB9CisgICAgICAgIHVpbnQ4X3QgY2VudGVyKCkgY29uc3QgICAgICAgICAgICAg
IHsgcmV0dXJuIGFscGhhWzFdWzFdOyB9CisgICAgICAgIHVpbnQ4X3QgYm90dG9tKCkgY29uc3Qg
ICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzFdOyB9CisKKyAgICAgICAgdm9pZCBzZXRU
b3AodWludDhfdCB2YWx1ZSkgICAgICAgICAgeyBhbHBoYVswXVsxXSA9IHZhbHVlOyB9CisgICAg
ICAgIHZvaWQgc2V0Q2VudGVyKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxwaGFbMV1bMV0gPSB2
YWx1ZTsgfQorICAgICAgICB2b2lkIHNldEJvdHRvbSh1aW50OF90IHZhbHVlKSAgICAgICB7IGFs
cGhhWzJdWzFdID0gdmFsdWU7IH0KKworICAgICAgICB2b2lkIHNldFRvcFJpZ2h0KHVpbnQ4X3Qg
dmFsdWUpICAgICB7IGFscGhhWzBdWzJdID0gdmFsdWU7IH0KKyAgICAgICAgdm9pZCBzZXRSaWdo
dCh1aW50OF90IHZhbHVlKSAgICAgICAgeyBhbHBoYVsxXVsyXSA9IHZhbHVlOyB9CisgICAgICAg
IHZvaWQgc2V0Qm90dG9tUmlnaHQodWludDhfdCB2YWx1ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1
ZTsgfQorCisgICAgICAgIHN0YXRpYyB2b2lkIHNoaWZ0Um93KHVpbnQ4X3QgYWxwaGFbM10pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGFscGhhWzBdID0gYWxwaGFbMV07CisgICAgICAgICAgICBh
bHBoYVsxXSA9IGFscGhhWzJdOworICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgc2hpZnQo
KQorICAgICAgICB7CisgICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVswXSk7CisgICAgICAgICAg
ICBzaGlmdFJvdyhhbHBoYVsxXSk7CisgICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVsyXSk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgc3RydWN0IExpZ2h0aW5nRGF0YSB7CisgICAgICAgIC8v
IFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIG9ubHkgcmVhZC1vbmx5IChTTVAgc2FmZSkgZGF0YQor
ICAgICAgICBGRUxpZ2h0aW5nKiBlZmZlY3Q7CisgICAgICAgIEZpbHRlckVmZmVjdDo6VHlwZSBm
aWx0ZXJUeXBlOworICAgICAgICBDb2xvciBsaWdodGluZ0NvbG9yOworICAgICAgICBmbG9hdCBz
dXJmYWNlU2NhbGU7CisgICAgICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudDsKKyAgICAgICAgZmxv
YXQgc3BlY3VsYXJDb25zdGFudDsKKyAgICAgICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudDsKKyAg
ICAgICAgY29uc3QgTGlnaHRTb3VyY2UqIGxpZ2h0U291cmNlOworICAgICAgICBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UqIG9wZXJhdGluZ0NvbG9yU3BhY2U7CisKKyAgICAgICAgVWludDhD
bGFtcGVkQXJyYXkqIHBpeGVsczsKKyAgICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplOworICAgICAgICBpbnQgd2lkdGg7CisgICAgICAgIGludCBoZWlnaHQ7CisKKyAgICAgICAg
aW5saW5lIEludFNpemUgdG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAgICAg
aW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAgICBp
bmxpbmUgSW50U2l6ZSB0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAgICAg
aW5saW5lIEludFNpemUgbGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAg
ICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cm
KSBjb25zdDsKKyAgICAgICAgaW5saW5lIEludFNpemUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9m
ZnNldCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwoaW50
IG9mZnNldCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdDsKKyAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUmlnaHROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgfTsKKworICAgIHN0cnVjdCBBcHBseVBhcmFtZXRl
cnMgeworICAgICAgICBMaWdodGluZ0RhdGEgZGF0YTsKKyAgICAgICAgTGlnaHRTb3VyY2U6OlBh
aW50aW5nRGF0YSBwYWludGluZ0RhdGE7CisgICAgICAgIGludCB5U3RhcnQ7CisgICAgICAgIGlu
dCB5RW5kOworICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBzZXRQaXhlbEludGVybmFsKGludCBv
ZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0Rh
dGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUg
bm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFscGhhKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRQaXhlbChp
bnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRp
bmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRT
aXplIG5vcm1hbDJEVmVjdG9yKTsKIAotLy8gVGhlc2UgZmFjdG9ycyBhbmQgdGhlIG5vcm1hbCBj
b2VmZmljaWVudHMgY29tZSBmcm9tIHRoZSB0YWJsZSB1bmRlciBodHRwczovL3d3dy53My5vcmcv
VFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuCi1zdGF0aWMgY29u
c3RleHByIGZsb2F0IGNGYWN0b3IxZGl2MiA9IC0xIC8gMi5mOwotc3RhdGljIGNvbnN0ZXhwciBm
bG9hdCBjRmFjdG9yMWRpdjMgPSAtMSAvIDMuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0Zh
Y3RvcjFkaXY0ID0gLTEgLyA0LmY7Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IyZGl2
MyA9IC0yIC8gMy5mOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1HZW5lcmljUGFpbnQo
Y29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGlu
dCBzdGFydFksIGludCBlbmRZKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJp
Y1dvcmtlcihBcHBseVBhcmFtZXRlcnMqKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3Jt
R2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdE
YXRhJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybShjb25zdCBMaWdodGluZ0RhdGEm
KTsKK307CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wTGVm
dE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoraW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3
YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0
CiB7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKICAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOwpAQCAtMTA4LDcgKzE5Niw3IEBAIGlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAKLWlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpM
aWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogewogICAgIGludCBs
ZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwpAQCAtMTIzLDcg
KzIxMSw3IEBAIGlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93
Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAor
aW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0
b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogewogICAgIGludCBsZWZ0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0
ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwpAQCAtMTM2LDcgKzIyNCw3IEBAIGlu
bGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwoaW50
IG9mZnNldCkgY29uc3QKICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpM
aWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJ
bnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVt
bk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogewogICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAgICAg
aW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAgLTE1Miw3ICsyNDAsNyBAQCBpbmxpbmUg
SW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwoaW50IG9m
ZnNldCkgY29uc3QKICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdo
dGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93JiBhbHBoYVdp
bmRvdykgY29uc3QKK2lubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6Okxp
Z2h0aW5nRGF0YTo6aW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmIGFscGhh
V2luZG93KSBjb25zdAogewogICAgIGludCByaWdodEFscGhhT2Zmc2V0ID0gb2Zmc2V0ICsgY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQ7CiAgICAgCkBAIC0xODIsNyArMjcwLDcgQEAg
aW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbChp
bnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYKICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0
CitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6
OnJpZ2h0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwogICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0xOTgsNyArMjg2LDcg
QEAgaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5v
cm1hbChpbnQgb2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGln
aHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAor
aW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpi
b3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGNlbnRlciA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKICAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwpAQCAtMjExLDcgKzI5OSw3IEBA
IGlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRp
bmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Citpbmxp
bmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRv
bVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogewogICAgIGludCBsZWZ0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0o
b2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwpAQCAtMjI2LDcgKzMxNCw3IEBAIGlubGlu
ZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoraW5saW5lIElu
dFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdo
dE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogewogICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwpAQCAtMjM5LDIxICszMjcsMTYgQEAgaW5saW5l
IEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWwoaW50
IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFp
bnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxv
YXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3RvcikKLXsKLSAgICBzZXRQaXhlbEludGVy
bmFsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCB5LCBmYWN0b3JYLCBmYWN0b3JZLCBu
b3JtYWwyRFZlY3RvciwgZGF0YS5waXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOwotfQotCi12b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNl
dCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFj
dG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3RvciwgZmxvYXQgYWxwaGEpCit2b2lkIEZFTGlnaHRp
bmdTb2Z0d2FyZUFwcGxpZXI6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGln
aHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6
ZSBub3JtYWwyRFZlY3RvciwgZmxvYXQgYWxwaGEpCiB7CiAgICAgZmxvYXQgeiA9IGFscGhhICog
ZGF0YS5zdXJmYWNlU2NhbGU7Ci0gICAgTGlnaHRTb3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRh
IGxpZ2h0aW5nRGF0YSA9IG1fbGlnaHRTb3VyY2UtPmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShw
YWludGluZ0RhdGEsIHgsIHksIHopOworICAgIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5n
RGF0YSBsaWdodGluZ0RhdGEgPSBkYXRhLmxpZ2h0U291cmNlLT5jb21wdXRlUGl4ZWxMaWdodGlu
Z0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsKIAogICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7
CiAgICAgaWYgKG5vcm1hbDJEVmVjdG9yLmlzWmVybygpKSB7CiAgICAgICAgIC8vIE5vcm1hbCB2
ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlzIGlzIGEgcXVpdGUgZnJlcXVlbnQgY2FzZS4KLSAgICAg
ICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKLSAg
ICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0
YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGg7CisgICAg
ICAgIGlmIChkYXRhLmVmZmVjdC0+ZmlsdGVyVHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6
RkVEaWZmdXNlTGlnaHRpbmcpCisgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5kaWZm
dXNlQ29uc3RhbnQgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueigpIC8gbGlnaHRpbmdEYXRh
LmxpZ2h0VmVjdG9yTGVuZ3RoOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEZsb2F0UG9p
bnQzRCBoYWxmd2F5VmVjdG9yID0gewogICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdo
dFZlY3Rvci54KCksCkBAIC0yNjEsMTAgKzM0NCwxMCBAQCB2b2lkIEZFTGlnaHRpbmc6OnNldFBp
eGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBM
aQogICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGlu
Z0RhdGEubGlnaHRWZWN0b3JMZW5ndGgKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICBmbG9h
dCBoYWxmd2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAg
ICAgIGlmIChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMSkKLSAgICAgICAgICAgICAgICBsaWdodFN0
cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5
VmVjdG9yTGVuZ3RoOworICAgICAgICAgICAgaWYgKGRhdGEuc3BlY3VsYXJFeHBvbmVudCA9PSAx
KQorICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQg
KiBoYWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGg7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAq
IHBvd2YoaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoLCBtX3NwZWN1bGFy
RXhwb25lbnQpOworICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFy
Q29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0aCwg
ZGF0YS5zcGVjdWxhckV4cG9uZW50KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAg
IEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3IgPSB7CkBAIC0yNzQsOCArMzU3LDggQEAgdm9pZCBG
RUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0
YSYgZGF0YSwgY29uc3QgTGkKICAgICAgICAgfTsKICAgICAgICAgZmxvYXQgbm9ybWFsVmVjdG9y
TGVuZ3RoID0gbm9ybWFsVmVjdG9yLmxlbmd0aCgpOwogCi0gICAgICAgIGlmIChtX2xpZ2h0aW5n
VHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCi0gICAgICAgICAgICBsaWdodFN0
cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogbGlnaHRpbmdEYXRh
LmxpZ2h0VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBsaWdodGluZ0RhdGEubGlnaHRW
ZWN0b3JMZW5ndGgpOworICAgICAgICBpZiAoZGF0YS5lZmZlY3QtPmZpbHRlclR5cGUoKSA9PSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQorICAgICAgICAgICAgbGlnaHRT
dHJlbmd0aCA9IGRhdGEuZGlmZnVzZUNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGxpZ2h0aW5n
RGF0YS5saWdodFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogbGlnaHRpbmdEYXRhLmxp
Z2h0VmVjdG9yTGVuZ3RoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBGbG9hdFBvaW50
M0QgaGFsZndheVZlY3RvciA9IHsKICAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRW
ZWN0b3IueCgpLApAQCAtMjgzLDEwICszNjYsMTAgQEAgdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhl
bEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGkK
ICAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueigpICsgbGlnaHRpbmdE
YXRhLmxpZ2h0VmVjdG9yTGVuZ3RoCiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgZmxvYXQg
aGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0b3IubGVuZ3RoKCk7Ci0gICAgICAgICAg
ICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEpCi0gICAgICAgICAgICAgICAgbGlnaHRTdHJl
bmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9y
KSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAg
ICAgIGlmIChkYXRhLnNwZWN1bGFyRXhwb25lbnQgPT0gMSkKKyAgICAgICAgICAgICAgICBsaWdo
dFN0cmVuZ3RoID0gZGF0YS5zcGVjdWxhckNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGhhbGZ3
YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1
bGFyQ29uc3RhbnQgKiBwb3dmKChub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yKSAvIChub3Jt
YWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3RoKSwgbV9zcGVjdWxhckV4cG9uZW50
KTsKKyAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5zcGVjdWxhckNvbnN0YW50
ICogcG93Zigobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVu
Z3RoICogaGFsZndheVZlY3Rvckxlbmd0aCksIGRhdGEuc3BlY3VsYXJFeHBvbmVudCk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTMwNCw4ICszODcsMTMgQEAgdm9pZCBGRUxpZ2h0aW5nOjpzZXRQ
aXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3Qg
TGkKICAgICBkYXRhLnBpeGVscy0+c2V0UmFuZ2UocGl4ZWxWYWx1ZSwgMywgb2Zmc2V0KTsKIH0K
IAordm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBj
b25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZ
LCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yKQoreworICAgIHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0
LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZhY3RvclksIG5vcm1hbDJEVmVj
dG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cit9
CisKIC8vIFRoaXMgYXBwZWFycyB0byByZWFkIGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzYW1lIHBp
eGVsIGJ1ZmZlciwgYnV0IGl0IG9ubHkgcmVhZHMgdGhlIGFscGhhIGNoYW5uZWwsIGFuZCB3cml0
ZXMgdGhlIG5vbi1hbHBoYSBjaGFubmVscy4KLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNl
OjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCit2b2lk
IEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljUGFpbnQoY29u
c3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsIGludCBzdGFydFksIGludCBlbmRZKQogewogICAgIC8vIE1ha2Ugc3VyZSBz
dGFydFkgaXMgPiAwIHNpbmNlIHdlIHJlYWQgZnJvbSB0aGUgcHJldmlvdXMgcm93IGluIHRoZSBs
b29wLgogICAgIEFTU0VSVChzdGFydFkpOwpAQCAtMzMwLDI2ICs0MTgsMzAgQEAgdm9pZCBGRUxp
Z2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0
YSwgY29uc3QgTGlnaHQKICAgICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9tUmlnaHQoZGF0YS5w
aXhlbHMtPml0ZW0obmV4dFJvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKIAogICAgICAgICBpbnQgb2Zmc2V0ID0gcm93U3RhcnRPZmZzZXQgKyBjUGl4ZWxTaXpl
OwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsg
Kyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkgeworICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8
IGRhdGEud2lkdGggLSAxOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKSB7CiAgICAgICAgICAg
ICBhbHBoYVdpbmRvdy5zaGlmdCgpOwogICAgICAgICAgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZz
ZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgY0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQs
IGRhdGEuaW50ZXJpb3JOb3JtYWwob2Zmc2V0LCBhbHBoYVdpbmRvdyksIGFscGhhV2luZG93LmNl
bnRlcigpKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9y
bUFwcGx5R2VuZXJpY1dvcmtlcihQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqIHBhcmFt
ZXRlcnMpCit2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5l
cmljV29ya2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKIHsKLSAgICBwYXJhbWV0ZXJz
LT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQocGFyYW1ldGVycy0+ZGF0YSwgcGFy
YW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT55U3RhcnQsIHBhcmFtZXRlcnMtPnlF
bmQpOworICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljUGFpbnQocGFyYW1ldGVycy0+ZGF0YSwgcGFy
YW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT55U3RhcnQsIHBhcmFtZXRlcnMtPnlF
bmQpOwogfQogCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IExp
Z2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhKQorI2lmICEoQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBD
T01QSUxFUihHQ0NfQ09NUEFUSUJMRSkpCit2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6
OmFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGln
aHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogewotICAgIHVuc2lnbmVkIHJv
d3NUb1Byb2Nlc3MgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lIC0gMTsKKyAgICB1bnNpZ25l
ZCByb3dzVG9Qcm9jZXNzID0gZGF0YS5oZWlnaHQgLSAyOwogICAgIHVuc2lnbmVkIG1heE51bVRo
cmVhZHMgPSByb3dzVG9Qcm9jZXNzIC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVt
YmVyID0gc3RkOjptaW48dW5zaWduZWQ+KCgoZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lIC0gMSkg
KiByb3dzVG9Qcm9jZXNzKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24sIG1heE51bVRocmVhZHMp
OworICAgIAorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1pbmltYWxSZWN0RGltZW5zaW9uID0g
MTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAg
IHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKChkYXRh
LndpZHRoIC0gMikgKiByb3dzVG9Qcm9jZXNzKSAvIG1pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhO
dW1UaHJlYWRzKTsKKwogICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewogICAgICAg
ICAvLyBJbml0aWFsaXplIHBhcmFsbGVsIGpvYnMKLSAgICAgICAgUGFyYWxsZWxKb2JzPFBsYXRm
b3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5R2Vu
ZXJpY1dvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAgIFBhcmFsbGVsSm9iczxB
cHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYXBwbHlQbGF0Zm9ybUdlbmVyaWNXb3JrZXIs
IG9wdGltYWxUaHJlYWROdW1iZXIpOwogCiAgICAgICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBh
cnJheQogICAgICAgICBpbnQgam9iID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwpAQCAt
MzYxLDggKzQ1Myw3IEBAIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29u
c3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjCiAKICAgICAgICAgICAgIGlu
dCB5U3RhcnQgPSAxOwogICAgICAgICAgICAgZm9yICgtLWpvYjsgam9iID49IDA7IC0tam9iKSB7
Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzJiBwYXJhbXMg
PSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmZp
bHRlciA9IHRoaXM7CisgICAgICAgICAgICAgICAgQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBw
YXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7CiAgICAgICAgICAgICAgICAgcGFyYW1zLmRhdGEg
PSBkYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSBwYWludGluZ0Rh
dGE7CiAgICAgICAgICAgICAgICAgcGFyYW1zLnlTdGFydCA9IHlTdGFydDsKQEAgLTM3NSwzOSAr
NDY2LDE4IEBAIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGln
aHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjCiAgICAgICAgIC8vIEZhbGxiYWNrIHRv
IHNpbmdsZSB0aHJlYWRlZCBtb2RlLgogICAgIH0KIAotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmlj
UGFpbnQoZGF0YSwgcGFpbnRpbmdEYXRhLCAxLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lKTsK
KyAgICBhcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KGRhdGEsIHBhaW50aW5nRGF0YSwgMSwgZGF0
YS5oZWlnaHQgLSAxKTsKIH0KLQotaW5saW5lIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eShjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSkKLXsKLSAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUgZXZlbnR1YWxs
eSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZvcm1zLgotI2lmIENQVShB
Uk1fTkVPTikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NPTVBBVElC
TEUpCi0gICAgcGxhdGZvcm1BcHBseU5lb24oZGF0YSwgcGFpbnRpbmdEYXRhKTsKLSNlbHNlCi0g
ICAgcGxhdGZvcm1BcHBseUdlbmVyaWMoZGF0YSwgcGFpbnRpbmdEYXRhKTsKICNlbmRpZgotfQog
Ci1ib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxz
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6
OmFwcGx5UGxhdGZvcm0oY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhKQogewogICAgIExpZ2h0U291
cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgIExpZ2h0aW5nRGF0YSBkYXRhOwot
Ci0gICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBpZiB3aWR0aCBvciBoZWlnaHQgKG9yIGJvdGgp
IGlzIDEgcGl4ZWwuCi0gICAgLy8gVGhlIFczIHNwZWMgZG9lcyBub3QgZGVmaW5lIHRoaXMgY2Fz
ZS4gTm93IHRoZSBmaWx0ZXIganVzdCByZXR1cm5zLgotICAgIGlmICh3aWR0aCA8PSAyIHx8IGhl
aWdodCA8PSAyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBkYXRhLnBpeGVscyA9ICZw
aXhlbHM7Ci0gICAgZGF0YS5zdXJmYWNlU2NhbGUgPSBtX3N1cmZhY2VTY2FsZSAvIDI1NS4wZjsK
LSAgICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplID0gd2lkdGggKiBjUGl4ZWxTaXpl
OwotICAgIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA9IHdpZHRoIC0gMTsKLSAgICBkYXRhLmhl
aWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0gMTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gbV9saWdodGluZ0NvbG9yLnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKG9wZXJhdGlu
Z0NvbG9yU3BhY2UoKSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBkYXRhLmxpZ2h0aW5nQ29s
b3IudG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoKmRhdGEub3BlcmF0aW5nQ29sb3JTcGFj
ZSk7CiAgICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBG
bG9hdFBvaW50M0QociwgZywgYik7CiAKLSAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdE
YXRhKCp0aGlzLCBwYWludGluZ0RhdGEpOworICAgIGRhdGEubGlnaHRTb3VyY2UtPmluaXRQYWlu
dGluZ0RhdGEoKmRhdGEuZWZmZWN0LCBwYWludGluZ0RhdGEpOwogCiAgICAgLy8gVG9wIGxlZnQu
CiAgICAgaW50IG9mZnNldCA9IDA7CkBAIC00MTUsNDcgKzQ4NSw0NyBAQCBib29sIEZFTGlnaHRp
bmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCiAKICAgICAvLyBUb3AgcmlnaHQuCiAgICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBk
YXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgMCwgY0ZhY3RvcjJk
aXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9wUmlnaHROb3JtYWwob2Zmc2V0KSk7CisgICAgc2V0
UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGggLSAxLCAwLCBjRmFj
dG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS50b3BSaWdodE5vcm1hbChvZmZzZXQpKTsKIAog
ICAgIC8vIEJvdHRvbSBsZWZ0LgotICAgIG9mZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlP
bmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNl
dCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFj
dG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21MZWZ0Tm9ybWFsKG9mZnNldCkpOwor
ICAgIG9mZnNldCA9IChkYXRhLmhlaWdodCAtIDEpICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZTsKKyAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgZGF0
YS5oZWlnaHQgLSAxLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21MZWZ0
Tm9ybWFsKG9mZnNldCkpOwogCiAgICAgLy8gQm90dG9tIHJpZ2h0LgotICAgIG9mZnNldCA9IGhl
aWdodCAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAg
IHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2Vk
QnlPbmUsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJk
aXYzLCBkYXRhLmJvdHRvbVJpZ2h0Tm9ybWFsKG9mZnNldCkpOworICAgIG9mZnNldCA9IGRhdGEu
aGVpZ2h0ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Cisg
ICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGggLSAxLCBk
YXRhLmhlaWdodCAtIDEsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbVJp
Z2h0Tm9ybWFsKG9mZnNldCkpOwogCi0gICAgaWYgKHdpZHRoID49IDMpIHsKKyAgICBpZiAoZGF0
YS53aWR0aCA+PSAzKSB7CiAgICAgICAgIC8vIFRvcCByb3cuCiAgICAgICAgIG9mZnNldCA9IGNQ
aXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNl
ZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQorICAgICAgICBmb3IgKGludCB4ID0g
MTsgeCA8IGRhdGEud2lkdGggLSAxOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQogICAgICAg
ICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIDAsIGNGYWN0b3Ix
ZGl2MywgY0ZhY3RvcjFkaXYyLCBkYXRhLnRvcFJvd05vcm1hbChvZmZzZXQpKTsKIAogICAgICAg
ICAvLyBCb3R0b20gcm93LgotICAgICAgICBvZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5
T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9m
ZnNldCArPSBjUGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBw
YWludGluZ0RhdGEsIHgsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IxZGl2Mywg
Y0ZhY3RvcjFkaXYyLCBkYXRhLmJvdHRvbVJvd05vcm1hbChvZmZzZXQpKTsKKyAgICAgICAgb2Zm
c2V0ID0gKGRhdGEuaGVpZ2h0IC0gMSkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
ICsgY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoIC0g
MTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKKyAgICAgICAgICAgIHNldFBpeGVsKG9mZnNl
dCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCBkYXRhLmhlaWdodCAtIDEsIGNGYWN0b3IxZGl2Mywg
Y0ZhY3RvcjFkaXYyLCBkYXRhLmJvdHRvbVJvd05vcm1hbChvZmZzZXQpKTsKICAgICB9CiAKLSAg
ICBpZiAoaGVpZ2h0ID49IDMpIHsKKyAgICBpZiAoZGF0YS5oZWlnaHQgPj0gMykgewogICAgICAg
ICAvLyBMZWZ0IGNvbHVtbi4KICAgICAgICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3Jl
YXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
KQorICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0IC0gMTsgKyt5LCBvZmZz
ZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkKICAgICAgICAgICAgIHNldFBp
eGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0
b3IxZGl2MywgZGF0YS5sZWZ0Q29sdW1uTm9ybWFsKG9mZnNldCkpOwogCiAgICAgICAgIC8vIFJp
Z2h0IGNvbHVtbi4KICAgICAgICAgb2Zmc2V0ID0gMiAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEu
aGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5n
RGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3Ix
ZGl2MywgZGF0YS5yaWdodENvbHVtbk5vcm1hbChvZmZzZXQpKTsKKyAgICAgICAgZm9yIChpbnQg
eSA9IDE7IHkgPCBkYXRhLmhlaWdodCAtIDE7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUpCisgICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBh
aW50aW5nRGF0YSwgZGF0YS53aWR0aCAtIDEsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYz
LCBkYXRhLnJpZ2h0Q29sdW1uTm9ybWFsKG9mZnNldCkpOwogICAgIH0KIAotICAgIGlmICh3aWR0
aCA+PSAzICYmIGhlaWdodCA+PSAzKSB7CisgICAgaWYgKGRhdGEud2lkdGggPj0gMyAmJiBkYXRh
LmhlaWdodCA+PSAzKSB7CiAgICAgICAgIC8vIEludGVyaW9yIHBpeGVscy4KLSAgICAgICAgcGxh
dGZvcm1BcHBseShkYXRhLCBwYWludGluZ0RhdGEpOworICAgICAgICBhcHBseVBsYXRmb3JtR2Vu
ZXJpYyhkYXRhLCBwYWludGluZ0RhdGEpOwogICAgIH0KIAotICAgIGludCBsYXN0UGl4ZWwgPSBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICogaGVpZ2h0OwotICAgIGlmIChtX2xpZ2h0
aW5nVHlwZSA9PSBEaWZmdXNlTGlnaHRpbmcpIHsKKyAgICBpbnQgbGFzdFBpeGVsID0gZGF0YS53
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGRhdGEuaGVpZ2h0OworICAgIGlmIChkYXRhLmVm
ZmVjdC0+ZmlsdGVyVHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZmdXNlTGlnaHRp
bmcpIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGNBbHBoYUNoYW5uZWxPZmZzZXQ7IGkgPCBsYXN0
UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkKICAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSwg
Y09wYXF1ZUFscGhhKTsKICAgICB9IGVsc2UgewpAQCAtNDY3LDIxICs1MzcsMjEgQEAgYm9vbCBG
RUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQogICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpICsgMywgYTEg
Pj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6IGEzKSA6IChhMiA+PSBhMyA/IGEyIDogYTMpKTsKICAg
ICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZFTGlnaHRpbmc6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorYm9vbCBGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0
b3ImIGlucHV0RWZmZWN0cykKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Qo
MCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKIAotICAg
IGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2V0SXNBbHBoYUltYWdlKGZhbHNlKTsKKyAgICBh
dXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRh
KCk7CisKKyAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwogCi0gICAgSW50UmVj
dCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgYXV0byBlZmZlY3REcmF3aW5nUmVjdCA9IG1f
ZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7CiAgICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciwgZWZmZWN0RHJhd2luZ1JlY3QpOwogCiAgICAgLy8gRklYTUU6IHN1cHBvcnQga2Vy
bmVsVW5pdExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0
aGUgVzMKQEAgLTQ4OSwxMSArNTU5LDM2IEBAIGJvb2wgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgLy8gb3V0cHV0IGZvciB2YXJpb3VzIGtlcm5l
bFVuaXRMZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJsZS4KICAgICAv
LyBBbnl3YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1lbnRh
dGlvbgogCi0gICAgSW50U2l6ZSBhYnNvbHV0ZVBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpOwotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9u
UGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBJbnRTaXplIHNpemUgPSBJbnRTaXplKG1fZWZmZWN0
LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKKworICAgIC8vIEZJWE1FOiBkbyBzb21ldGhp
bmcgaWYgd2lkdGggb3IgaGVpZ2h0IChvciBib3RoKSBpcyAxIHBpeGVsLgorICAgIC8vIFRoZSBX
MyBzcGVjIGRvZXMgbm90IGRlZmluZSB0aGlzIGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0
dXJucy4KKyAgICBpZiAoc2l6ZS53aWR0aCgpIDw9IDIgfHwgc2l6ZS5oZWlnaHQoKSA8PSAyKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGRyYXdMaWdodGluZyhkZXN0aW5hdGlvblBpeGVs
QXJyYXksIGFic29sdXRlUGFpbnRTaXplLndpZHRoKCksIGFic29sdXRlUGFpbnRTaXplLmhlaWdo
dCgpKTsKKyAgICBMaWdodGluZ0RhdGEgZGF0YTsKKyAgICBkYXRhLmVmZmVjdCA9ICZtX2VmZmVj
dDsKKyAgICBkYXRhLmZpbHRlclR5cGUgPSBtX2VmZmVjdC5maWx0ZXJUeXBlKCk7CisgICAgZGF0
YS5saWdodGluZ0NvbG9yID0gbV9lZmZlY3QubGlnaHRpbmdDb2xvcigpOworICAgIGRhdGEuc3Vy
ZmFjZVNjYWxlID0gbV9lZmZlY3Quc3VyZmFjZVNjYWxlKCkgLyAyNTUuMGY7CisgICAgZGF0YS5k
aWZmdXNlQ29uc3RhbnQgPSBtX2VmZmVjdC5kaWZmdXNlQ29uc3RhbnQoKTsKKyAgICBkYXRhLnNw
ZWN1bGFyQ29uc3RhbnQgPSBtX2VmZmVjdC5zcGVjdWxhckNvbnN0YW50KCk7CisgICAgZGF0YS5z
cGVjdWxhckV4cG9uZW50ID0gbV9lZmZlY3Quc3BlY3VsYXJFeHBvbmVudCgpOworICAgIGRhdGEu
bGlnaHRTb3VyY2UgPSAmbV9lZmZlY3QubGlnaHRTb3VyY2UoKTsKKyAgICBkYXRhLm9wZXJhdGlu
Z0NvbG9yU3BhY2UgPSAmbV9lZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpOworCisgICAgZGF0
YS5waXhlbHMgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OworICAgIGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemUgPSBzaXplLndpZHRoKCkgKiBjUGl4ZWxTaXplOworICAgIGRhdGEud2lk
dGggPSBzaXplLndpZHRoKCk7CisgICAgZGF0YS5oZWlnaHQgPSBzaXplLmhlaWdodCgpOworCisg
ICAgYXBwbHlQbGF0Zm9ybShkYXRhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRUxp
Z2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7Cisg
ICAgcmV0dXJuIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwg
aW5wdXRFZmZlY3RzKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCmlu
ZGV4IGFkMmZjMjhmYTllN2Y0YmYyOTEzZDY3Yjk4MDU3ZjhlZWJiMDhkYjIuLmE4NGZlODVhMzgx
ZmE4NDA3NWU1MTY1NGNjMmMwYzViYjhjMWFiMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCkBAIC0yOSw5ICsyOSw2
IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNs
dWRlICJMaWdodFNvdXJjZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQuaD4K
LQotLy8gQ29tbW9uIGJhc2UgY2xhc3MgZm9yIEZFRGlmZnVzZUxpZ2h0aW5nIGFuZCBGRVNwZWN1
bGFyTGlnaHRpbmcKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOSwxMSArMzYsMTUgQEAg
c3RydWN0IEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9uOwogCiBjbGFzcyBGRUxpZ2h0aW5n
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6CisgICAgY29uc3QgQ29sb3ImIGxpZ2h0
aW5nQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0aW5nQ29sb3I7IH0KKyAgICBib29sIHNl
dExpZ2h0aW5nQ29sb3IoY29uc3QgQ29sb3ImKTsKKwogICAgIGZsb2F0IHN1cmZhY2VTY2FsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZVNjYWxlOyB9CiAgICAgYm9vbCBzZXRTdXJmYWNlU2Nh
bGUoZmxvYXQpOwogCi0gICAgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IoKSBjb25zdCB7IHJl
dHVybiBtX2xpZ2h0aW5nQ29sb3I7IH0KLSAgICBib29sIHNldExpZ2h0aW5nQ29sb3IoY29uc3Qg
Q29sb3ImKTsKKyAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX2Rp
ZmZ1c2VDb25zdGFudDsgfQorICAgIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdCB7IHJl
dHVybiBtX3NwZWN1bGFyQ29uc3RhbnQ7IH0KKyAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9CiAKICAgICBmbG9hdCBrZXJuZWxV
bml0TGVuZ3RoWCgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFg7IH0KICAgICBi
b29sIHNldEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0KTsKQEAgLTU0LDEwMSArNTUsMTcgQEAgcHVi
bGljOgogICAgIGNvbnN0IExpZ2h0U291cmNlJiBsaWdodFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbGlnaHRTb3VyY2UuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCBp
bnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRhdGEg
bGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIGVudW0gTGlnaHRpbmdUeXBlIHsKLSAgICAg
ICAgRGlmZnVzZUxpZ2h0aW5nLAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nCi0gICAgfTsKLSAg
ICAKLSAgICBzdHJ1Y3QgQWxwaGFXaW5kb3cgewotICAgICAgICB1aW50OF90IGFscGhhWzNdWzNd
IHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGxpbmVk
IHVwIHRvIG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFzaWVyLgotICAgICAgICB1aW50OF90IHRv
cExlZnQoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVswXTsgfQotICAgICAg
ICB1aW50OF90IGxlZnQoKSBjb25zdCAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVsw
XTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbUxlZnQoKSBjb25zdCAgICAgICAgICB7IHJldHVy
biBhbHBoYVsyXVswXTsgfQotCi0gICAgICAgIHVpbnQ4X3QgdG9wKCkgY29uc3QgICAgICAgICAg
ICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzFdOyB9Ci0gICAgICAgIHVpbnQ4X3QgY2VudGVyKCkg
Y29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzFdOyB9Ci0gICAgICAgIHVpbnQ4
X3QgYm90dG9tKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzFdOyB9Ci0K
LSAgICAgICAgdm9pZCBzZXRUb3AodWludDhfdCB2YWx1ZSkgICAgICAgICAgeyBhbHBoYVswXVsx
XSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Q2VudGVyKHVpbnQ4X3QgdmFsdWUpICAgICAg
IHsgYWxwaGFbMV1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldEJvdHRvbSh1aW50OF90
IHZhbHVlKSAgICAgICB7IGFscGhhWzJdWzFdID0gdmFsdWU7IH0KLQotICAgICAgICB2b2lkIHNl
dFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICB7IGFscGhhWzBdWzJdID0gdmFsdWU7IH0KLSAg
ICAgICAgdm9pZCBzZXRSaWdodCh1aW50OF90IHZhbHVlKSAgICAgICAgeyBhbHBoYVsxXVsyXSA9
IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Qm90dG9tUmlnaHQodWludDhfdCB2YWx1ZSkgIHsg
YWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQotCi0gICAgICAgIHN0YXRpYyB2b2lkIHNoaWZ0Um93KHVp
bnQ4X3QgYWxwaGFbM10pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFscGhhWzBdID0gYWxwaGFb
MV07Ci0gICAgICAgICAgICBhbHBoYVsxXSA9IGFscGhhWzJdOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICB2b2lkIHNoaWZ0KCkKLSAgICAgICAgewotICAgICAgICAgICAgc2hpZnRSb3co
YWxwaGFbMF0pOwotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMV0pOwotICAgICAgICAgICAg
c2hpZnRSb3coYWxwaGFbMl0pOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCBMaWdo
dGluZ0RhdGEgewotICAgICAgICAvLyBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBvbmx5IHJlYWQt
b25seSAoU01QIHNhZmUpIGRhdGEKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsczsK
LSAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxlOwotICAgICAgICBpbnQgd2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemU7Ci0gICAgICAgIGludCB3aWR0aERlY3JlYXNlZEJ5T25lOwotICAgICAgICBp
bnQgaGVpZ2h0RGVjcmVhc2VkQnlPbmU7Ci0KLSAgICAgICAgaW5saW5lIEludFNpemUgdG9wTGVm
dE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgdG9wUm93
Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSB0b3BSaWdo
dE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgbGVmdENv
bHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgaW50
ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmKSBjb25zdDsKLSAgICAgICAgaW5s
aW5lIEludFNpemUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAg
IGlubGluZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAg
ICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAg
ICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7
Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMgewot
ICAgICAgICBGRUxpZ2h0aW5nKiBmaWx0ZXI7Ci0gICAgICAgIExpZ2h0aW5nRGF0YSBkYXRhOwot
ICAgICAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICAgICAg
aW50IHlTdGFydDsKLSAgICAgICAgaW50IHlFbmQ7Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lk
IHBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyKFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVy
cyopOwotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uV29ya2VyKEZFTGlnaHRpbmdQ
YWludGluZ0RhdGFGb3JOZW9uKik7Ci0KLSAgICBGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSwgY29u
c3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVz
ZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50
LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxM
aWdodFNvdXJjZT4mJiwgVHlwZSk7Ci0KLSAgICBib29sIGRyYXdMaWdodGluZyhVaW50OENsYW1w
ZWRBcnJheSYsIGludCwgaW50KTsKLQotICAgIHZvaWQgc2V0UGl4ZWwoaW50IG9mZnNldCwgY29u
c3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4
LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0
b3IpOwotICAgIHZvaWQgc2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGlu
Z0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBm
bG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZlY3RvciwgZmxvYXQg
YWxwaGEpOworICAgIEZFTGlnaHRpbmcoVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3Is
IGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxh
ckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3Ro
WCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAKICAgICB2
b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsg
c2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsg
fQogCiAgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJp
ZGU7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3Qg
TGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2Vu
ZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGlu
Z0RhdGEmLCBpbnQgc3RhcnRYLCBpbnQgc3RhcnRZKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlH
ZW5lcmljKGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0Rh
dGEmKTsKLQogI2lmIENQVShBUk1fTkVPTikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09N
UElMRVIoR0NDX0NPTVBBVElCTEUpCiAgICAgc3RhdGljIGludCBnZXRQb3dlckNvZWZmaWNpZW50
cyhmbG9hdCBleHBvbmVudCk7CiAgICAgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseU5lb24oY29u
c3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwogI2Vu
ZGlmCiAKLSAgICBMaWdodGluZ1R5cGUgbV9saWdodGluZ1R5cGU7Ci0gICAgUmVmPExpZ2h0U291
cmNlPiBtX2xpZ2h0U291cmNlOwotCiAgICAgQ29sb3IgbV9saWdodGluZ0NvbG9yOwogICAgIGZs
b2F0IG1fc3VyZmFjZVNjYWxlOwogICAgIGZsb2F0IG1fZGlmZnVzZUNvbnN0YW50OwpAQCAtMTU2
LDcgKzczLDcgQEAgcHJvdGVjdGVkOgogICAgIGZsb2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKICAg
ICBmbG9hdCBtX2tlcm5lbFVuaXRMZW5ndGhYOwogICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0
aFk7CisgICAgUmVmPExpZ2h0U291cmNlPiBtX2xpZ2h0U291cmNlOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1lcmdlLmNwcAppbmRleCBjZWExOTdjZjhhMTc2N2M5ZGQ0ZmQ0ZWUwMzNm
NjZmZmQxZjgzOWNjLi43NmE3NDY0ZjAwZTZkMzcwOGVlOTRkY2FjZDk2ZjYxZjdhY2E2YmU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVy
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJGRU1lcmdlLmgiCiAKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0zOCwyNSArMzksNDEgQEAgRkVNZXJnZTo6RkVN
ZXJnZSgpCiB7CiB9CiAKLWJvb2wgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYpCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVNZXJnZVNvZnR3YXJlQXBwbGll
ciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFTWVyZ2VTb2Z0
d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFTWVyZ2U+
IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFTWVyZ2U+
OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29u
c3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJy
aWRlOworfTsKKworYm9vbCBGRU1lcmdlU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0
ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKIHsKLSAgICB1bnNp
Z25lZCBzaXplID0gbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKLSAgICBBU1NFUlQoc2l6ZSA+IDAp
OworICAgIEFTU0VSVChpbnB1dEVmZmVjdHMuc2l6ZSgpID4gMCk7CiAKLSAgICBhdXRvIHJlc3Vs
dEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9l
ZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KGkpOwotICAg
ICAgICBpZiAoYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpKQotICAgICAg
ICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgYXV0byYgZmls
dGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisKKyAgICBmb3IgKGF1dG8mIGlu
IDogaW5wdXRFZmZlY3RzKSB7CisgICAgICAgIGF1dG8gaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKKyAgICAgICAgaWYgKCFpbkJ1ZmZlcikKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIG1fZWZm
ZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsK
ICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRU1lcmdlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZFTWVyZ2VT
b2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQor
CiBUZXh0U3RyZWFtJiBGRU1lcmdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0m
IHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMg
PDwgaW5kZW50IDw8ICJbZmVNZXJnZSI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5kZXggYjIyM2NiOWU1
NjYzNjk1OWMzZjkxYjg2MWU2ZGExN2MwMzZkYTNjNy4uZDk0NTE4MTU2OGYwYTZlN2YwYjU3YjUz
OWM1Mzk0OTIxZDc4MTY3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApAQCAtMjgsNiArMjgsNyBAQAog
I2luY2x1ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIKICNp
bmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtODMsMjMgKzg0LDQ4IEBAIHZvaWQgRkVNb3JwaG9sb2d5
OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQogCi1z
dGF0aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgp
Ci17Ci0gICAgcmV0dXJuICh5ICogd2lkdGggKyB4KSAqIDQ7Ci19CisvLyBGSVhNRTogTW92ZSB0
aGUgY2xhc3MgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBh
bmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyIDogcHVi
bGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRU1vcnBob2xvZ3k+IHsKKyAgICB1c2lu
ZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFTW9ycGhvbG9neT47CiAKLWlu
bGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21Q
aXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBpeGVsKQotewotICAgIHJldHVybiBhc0NvbG9y
Q29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKSk7Ci19CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6
QmFzZTsKIAotaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9y
Q29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGNvbXBvbmVudHMp
Ci17Ci0gICAgcmV0dXJuIFBhY2tlZENvbG9yOjpSR0JBIHsgbWFrZUZyb21Db21wb25lbnRzPFNS
R0JBPHVpbnQ4X3Q+Pihjb21wb25lbnRzKSB9OwotfQorICAgIGJvb2wgYXBwbHkoY29uc3QgRmls
dGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIHVzaW5nIENvbHVtbkV4dHJlbWEgPSBWZWN0b3I8Q29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+LCAxNj47CisKKyAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKKyAgICAg
ICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlOworICAgICAgICBpbnQgcmFkaXVzWDsKKyAg
ICAgICAgaW50IHJhZGl1c1k7CisgICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5KiBzcmNQ
aXhlbEFycmF5OworICAgICAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheTsKKyAg
ICAgICAgaW50IHdpZHRoOworICAgICAgICBpbnQgaGVpZ2h0OworICAgIH07CiAKLXRlbXBsYXRl
PE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZT4KLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0
PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBiKQorICAgIHN0cnVjdCBB
cHBseVBhcmFtZXRlcnMgeworICAgICAgICBjb25zdCBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0
YTsKKyAgICAgICAgaW50IHN0YXJ0WTsKKyAgICAgICAgaW50IGVuZFk7CisgICAgfTsKKworICAg
IHN0YXRpYyBpbmxpbmUgaW50IHBpeGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGludCB3aWR0
aCkgeyByZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsgfQorICAgIHN0YXRpYyBpbmxpbmUgUGFj
a2VkQ29sb3I6OlJHQkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGNvbnN0IENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29tcG9uZW50cykgeyByZXR1cm4gUGFja2VkQ29s
b3I6OlJHQkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KGNvbXBvbmVudHMp
IH07IH0KKworICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1h
a2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkg
eyByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkpOyB9CisgICAgc3RhdGlj
IGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWluT3JNYXgoY29uc3QgQ29sb3JD
b21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4mIGIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOworICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JD
b21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0
aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CisgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2Vy
bmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKKworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxh
dGZvcm1HZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYsIGludCBzdGFydFksIGludCBlbmRZKTsK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtV29ya2VyKEFwcGx5UGFyYW1ldGVycyopOwor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm0oY29uc3QgUGFpbnRpbmdEYXRhJik7Cit9Owor
CitpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFTW9ycGhvbG9neVNvZnR3YXJl
QXBwbGllcjo6bWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBhLCBj
b25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIsIE1vcnBob2xvZ3lPcGVyYXRvclR5
cGUgdHlwZSkKIHsKICAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUp
CiAgICAgICAgIHJldHVybiBwZXJDb21wb25lbnRNaW4oYSwgYik7CkBAIC0xMDcsNDcgKzEzMywy
NyBAQCBBTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChj
b25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdAogICAgIHJldHVybiBwZXJDb21wb25lbnRNYXgo
YSwgYik7CiB9CiAKLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZT4KLUFMV0FZ
U19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50
IHlFbmQsIGludCB3aWR0aCkKK2lubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVN
b3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQg
d2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKIHsKICAgICBhdXRvIGV4dHJlbXVt
ID0gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsg
KnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEoKSAr
IHBpeGVsQXJyYXlJbmRleCh4LCB5U3RhcnQsIHdpZHRoKSkgfSk7CiAKICAgICBmb3IgKGludCB5
ID0geVN0YXJ0ICsgMTsgeSA8IHlFbmQ7ICsreSkgewogICAgICAgICBhdXRvIHBpeGVsID0gbWFr
ZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVs
QXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpIH0pOwotICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4
PHR5cGU+KGV4dHJlbXVtLCBwaXhlbCk7CisgICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXgoZXh0
cmVtdW0sIHBpeGVsLCB0eXBlKTsKICAgICB9CiAgICAgcmV0dXJuIGV4dHJlbXVtOwogfQogCi1B
TFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQs
IGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAg
ICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVy
biBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU+KHNyY1BpeGVsQXJy
YXksIHgsIHlTdGFydCwgeUVuZCwgd2lkdGgpOwotCi0gICAgcmV0dXJuIGNvbHVtbkV4dHJlbXVt
PEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwg
eUVuZCwgd2lkdGgpOwotfQotCi11c2luZyBDb2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiwgMTY+OwotCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJu
ZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwpCitpbmxpbmUgQ29sb3JDb21w
b25lbnRzPHVpbnQ4X3QsIDQ+IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6a2VybmVsRXh0
cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
IHR5cGUpCiB7CiAgICAgYXV0byBleHRyZW11bSA9IGtlcm5lbFswXTsKICAgICBmb3IgKHNpemVf
dCBpID0gMTsgaSA8IGtlcm5lbC5zaXplKCk7ICsraSkKLSAgICAgICAgZXh0cmVtdW0gPSBtaW5P
ck1heDx0eXBlPihleHRyZW11bSwga2VybmVsW2ldKTsKKyAgICAgICAgZXh0cmVtdW0gPSBtaW5P
ck1heChleHRyZW11bSwga2VybmVsW2ldLCB0eXBlKTsKIAogICAgIHJldHVybiBleHRyZW11bTsK
IH0KIAotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0
cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBl
IHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQot
ICAgICAgICByZXR1cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RF
PihrZXJuZWwpOwotCi0gICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVS
QVRPUl9ESUxBVEU+KGtlcm5lbCk7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5R2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwg
aW50IGVuZFkpCit2b2lkIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9y
bUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBzdGFydFksIGlu
dCBlbmRZKQogewogICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKIApAQCAtMTczLDI4ICsxNzks
MjggQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3QKIAogICAgICAgICAvLyBXZSBzdGFydCBhdCB0
aGUgbGVmdCBlZGdlLCBzbyBjb21wdXRlIGV4dHJlbWUgZm9yIHRoZSByYWRpdXNYIGNvbHVtbnMu
CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcmFkaXVzWDsgKyt4KQotICAgICAgICAgICAg
ZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCwgeVJhZGl1c1N0
YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgbV90eXBlKSk7CisgICAgICAgICAgICBleHRyZW1hLmFw
cGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRp
dXNFbmQsIHdpZHRoLCBwYWludGluZ0RhdGEudHlwZSkpOwogCiAgICAgICAgIC8vIEtlcm5lbCBp
cyBmaWxsZWQsIGdldCBleHRyZW1hIG9mIG5leHQgY29sdW1uCiAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7ICsreCkgewogICAgICAgICAgICAgaWYgKHggPCB3aWR0aCAtIHJhZGl1
c1gpCi0gICAgICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4
ZWxBcnJheSwgeCArIHJhZGl1c1gsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgsIG1f
dHlwZSkpOworICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNy
Y1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRo
LCBwYWludGluZ0RhdGEudHlwZSkpOwogCiAgICAgICAgICAgICBpZiAoeCA+IHJhZGl1c1gpCiAg
ICAgICAgICAgICAgICAgZXh0cmVtYS5yZW1vdmUoMCk7CiAKICAgICAgICAgICAgIHVuc2lnbmVk
KiBkZXN0UGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4ZWxBcnJheS5k
YXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKTsKLSAgICAgICAgICAgICpkZXN0
UGl4ZWwgPSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoa2VybmVsRXh0cmVtdW0o
ZXh0cmVtYSwgbV90eXBlKSkudmFsdWU7CisgICAgICAgICAgICAqZGVzdFBpeGVsID0gbWFrZVBp
eGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEsIHBhaW50
aW5nRGF0YS50eXBlKSkudmFsdWU7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgRkVNb3Jw
aG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBwYXJh
bSkKK3ZvaWQgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2Vy
KEFwcGx5UGFyYW1ldGVycyogcGFyYW1zKQogewotICAgIHBhcmFtLT5maWx0ZXItPnBsYXRmb3Jt
QXBwbHlHZW5lcmljKCpwYXJhbS0+cGFpbnRpbmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBwYXJhbS0+
ZW5kWSk7CisgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoKnBhcmFtcy0+cGFpbnRpbmdEYXRhLCBw
YXJhbXMtPnN0YXJ0WSwgcGFyYW1zLT5lbmRZKTsKIH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHkoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCit2b2lkIEZFTW9y
cGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShjb25zdCBQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSkKIHsKICAgICAvLyBFbXBpcmljYWxseSwgcnVudGltZSBpcyBhcHByb3hp
bWF0ZWx5IGxpbmVhciBvdmVyIHJlYXNvbmFibGUga2VybmVsIHNpemVzIHdpdGggYSBzbG9wZSBv
ZiBhYm91dCAwLjY1LgogICAgIGZsb2F0IGtlcm5lbEZhY3RvciA9IHNxcnQocGFpbnRpbmdEYXRh
LnJhZGl1c1ggKiBwYWludGluZ0RhdGEucmFkaXVzWSkgKiAwLjY1OwpAQCAtMjA0LDcgKzIxMCw3
IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhKQogICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBwYWludGluZ0RhdGEu
aGVpZ2h0IC8gODsKICAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48
dW5zaWduZWQ+KChwYWludGluZ0RhdGEud2lkdGggKiBwYWludGluZ0RhdGEuaGVpZ2h0ICoga2Vy
bmVsRmFjdG9yKSAvIG1pbmltYWxBcmVhLCBtYXhOdW1UaHJlYWRzKTsKICAgICBpZiAob3B0aW1h
bFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgUGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlQ
YXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1B
cHBseVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAgIFBhcmFsbGVsSm9iczxB
cHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYXBwbHlQbGF0Zm9ybVdvcmtlciwgb3B0aW1h
bFRocmVhZE51bWJlcik7CiAgICAgICAgIGF1dG8gbnVtT2ZUaHJlYWRzID0gcGFyYWxsZWxKb2Jz
Lm51bWJlck9mSm9icygpOwogICAgICAgICBpZiAobnVtT2ZUaHJlYWRzID4gMSkgewogICAgICAg
ICAgICAgLy8gU3BsaXQgdGhlIGpvYiBpbnRvICJqb2JTaXplIi1zaXplZCBqb2JzIGJ1dCB0aGVy
ZSBhIGZldyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIgc2luY2UKQEAgLTIx
Myw4ICsyMTksNyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseShjb25zdCBQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKICAgICAgICAgICAgIGludCBqb2JzV2l0aEV4dHJhID0g
cGFpbnRpbmdEYXRhLmhlaWdodCAlIG51bU9mVGhyZWFkczsKICAgICAgICAgICAgIGludCBjdXJy
ZW50WSA9IDA7CiAgICAgICAgICAgICBmb3IgKGludCBqb2IgPSBudW1PZlRocmVhZHMgLSAxOyBq
b2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVy
cyYgcGFyYW0gPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAg
cGFyYW0uZmlsdGVyID0gdGhpczsKKyAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBh
cmFtID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwogICAgICAgICAgICAgICAgIHBhcmFt
LnN0YXJ0WSA9IGN1cnJlbnRZOwogICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpv
YnNXaXRoRXh0cmEgPyBqb2JTaXplICsgMSA6IGpvYlNpemU7CiAgICAgICAgICAgICAgICAgcGFy
YW0uZW5kWSA9IGN1cnJlbnRZOwpAQCAtMjI2LDMzICsyMzEsMzIgQEAgdm9pZCBGRU1vcnBob2xv
Z3k6OnBsYXRmb3JtQXBwbHkoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiAgICAg
ICAgIC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWQgbW9kZWwKICAgICB9CiAKLSAgICBwbGF0
Zm9ybUFwcGx5R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOwot
fQotCi1ib29sIEZFTW9ycGhvbG9neTo6aXNEZWdlbmVyYXRlKGludCByYWRpdXNYLCBpbnQgcmFk
aXVzWSkgY29uc3QKLXsKLSAgICByZXR1cm4gcmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwg
KCFyYWRpdXNYICYmICFyYWRpdXNZKTsKKyAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhwYWludGlu
Z0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOwogfQogCi1ib29sIEZFTW9ycGhvbG9neTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorYm9vbCBGRU1vcnBo
b2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBG
aWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1sw
XS5nZXQoKTsKIAotICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVy
UmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGF1dG8g
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGlmICghZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2V0SXNBbHBoYUltYWdl
KGluLT5pc0FscGhhSW1hZ2UoKSk7CisgICAgbV9lZmZlY3Quc2V0SXNBbHBoYUltYWdlKGluLT5p
c0FscGhhSW1hZ2UoKSk7CisKKyAgICBhdXRvIGlzRGVnZW5lcmF0ZSA9IFtdKGludCByYWRpdXNY
LCBpbnQgcmFkaXVzWSkgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiByYWRpdXNYIDwgMCB8fCBy
YWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpOworICAgIH07CiAKLSAgICBJbnRS
ZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVy
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0
ID0gbV9lZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKKyAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0
U2l6ZShtX2VmZmVjdC5yYWRpdXNYKCksIG1fZWZmZWN0LnJhZGl1c1koKSkpOwogCi0gICAgSW50
U2l6ZSByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShGbG9hdFNpemUobV9yYWRpdXNYLCBtX3JhZGl1
c1kpKTsKICAgICBpZiAoaXNEZWdlbmVyYXRlKHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0
KCkpKSB7CiAgICAgICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIsIGVmZmVjdERyYXdpbmdSZWN0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCi0gICAgcmFkaXVzID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2Nh
bGUoeyBtX3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7CisgICAgcmFkaXVzID0gZmxvb3JlZEludFNp
emUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2VmZmVjdC5yYWRpdXNYKCksIG1fZWZm
ZWN0LnJhZGl1c1koKSB9KSk7CiAgICAgaW50IHJhZGl1c1ggPSBzdGQ6Om1pbihlZmZlY3REcmF3
aW5nUmVjdC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkpOwogICAgIGludCByYWRpdXNZID0g
c3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkp
OwogCkBAIC0yNjEsNyArMjY1LDcgQEAgYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCi0gICAgYXV0byBzb3VyY2VQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3Vs
dChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlZmZlY3REcmF3aW5nUmVj
dCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBhdXRvIHNvdXJjZVBpeGVsQnVmZmVyID0g
aW4tPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIGVmZmVjdERyYXdpbmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkp
OwogICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtMjY5LDYgKzI3Myw3IEBAIGJvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5
ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCiAgICAgUGFpbnRpbmdEYXRhIHBh
aW50aW5nRGF0YTsKKyAgICBwYWludGluZ0RhdGEudHlwZSA9IG1fZWZmZWN0Lm1vcnBob2xvZ3lP
cGVyYXRvcigpOwogICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gJnNvdXJjZVBpeGVs
QXJyYXk7CiAgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhl
bEFycmF5OwogICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0
LndpZHRoKCkpOwpAQCAtMjc2LDEwICsyODEsMTUgQEAgYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBwYWludGluZ0RhdGEu
cmFkaXVzWCA9IGNlaWxmKHJhZGl1c1gpOwogICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0gY2Vp
bGYocmFkaXVzWSk7CiAKLSAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7CisgICAgYXBw
bHlQbGF0Zm9ybShwYWludGluZ0RhdGEpOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEZF
TW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQor
eworICAgIHJldHVybiBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZp
bHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSYgdHlwZSkKIHsK
ICAgICBzd2l0Y2ggKHR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCmluZGV4IGRiODcwYWU3ZGY1MDRlMTlj
NGQwNTEzZjhkNDIxYjAxZmNjYzFkMTkuLjU4OTUwMmE2ZjViYzZkMjBiOGUxOWVhOWZmNTdjYTc4
OTI1ZDgyNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNb3JwaG9sb2d5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaApAQCAtNTMsMjkgKzUzLDYgQEAgcHJpdmF0ZToKIAog
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYm9vbCBpc0Rl
Z2VuZXJhdGUoaW50IHJhZGl1c1gsIGludCByYWRpdXNZKSBjb25zdDsKLQotICAgIHN0cnVjdCBQ
YWludGluZ0RhdGEgewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxB
cnJheTsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXk7Ci0gICAgICAg
IGludCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgaW50IHJhZGl1c1g7Ci0g
ICAgICAgIGludCByYWRpdXNZOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGxhdGZvcm1BcHBseVBh
cmFtZXRlcnMgewotICAgICAgICBGRU1vcnBob2xvZ3kqIGZpbHRlcjsKLSAgICAgICAgaW50IHN0
YXJ0WTsKLSAgICAgICAgaW50IGVuZFk7Ci0gICAgICAgIGNvbnN0IFBhaW50aW5nRGF0YSogcGFp
bnRpbmdEYXRhOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2Vy
KFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKik7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHkoY29u
c3QgUGFpbnRpbmdEYXRhJik7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQ
YWludGluZ0RhdGEmLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7Ci0KICAgICBNb3JwaG9sb2d5T3Bl
cmF0b3JUeXBlIG1fdHlwZTsKICAgICBmbG9hdCBtX3JhZGl1c1g7CiAgICAgZmxvYXQgbV9yYWRp
dXNZOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU9mZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFT2Zmc2V0LmNwcAppbmRleCA0MzE0YTFhNTYxMjRlZDFjODM2MDljOThjMGI5ZmMxYTVkMjJj
NGRlLi4xZGE5Mjc3MGU2YzJkMjY1YTFmZTg1NzE3OGI1ZThlN2Y1NjM2YTU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNw
cApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCiAKICNpbmNsdWRlICJG
aWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CkBAIC02NCwyNCArNjUsMzkgQEAgdm9pZCBGRU9mZnNldDo6ZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKIH0KIAotYm9vbCBG
RU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorLy8g
RklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRl
IHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIg
OiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFT2Zmc2V0PiB7CisgICAgdXNp
bmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRU9mZnNldD47CisKK3B1Ymxp
YzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXIm
LCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9Owor
Citib29sIEZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRl
ciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdHNbMF0uZ2V0KCk7CiAKLSAgICBhdXRvIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJS
ZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1
bHQoKTsKICAgICBhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAg
aWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworICAgIG1fZWZmZWN0LnNl
dElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCi0gICAgRmxvYXRSZWN0IGRyYXdp
bmdSZWdpb24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKTsKLSAgICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUo
eyBtX2R4LCBtX2R5IH0pKTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IG1fZWZmZWN0
LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAg
IGRyYXdpbmdSZWdpb24ubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0
LmR4KCksIG1fZWZmZWN0LmR5KCkgfSkpOwogICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJh
d0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbik7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAorYm9vbCBGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRU9mZnNldFNvZnR3YXJlQXBwbGllcigqdGhpcyku
YXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIFRleHRTdHJlYW0mIEZFT2Zmc2V0
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5
cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVPZmZz
ZXQiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCmluZGV4IDYwN2E3MWM0Y2YzNWY1NmQ0
YTIyZmNmNTAyNmYxNDJiNTE3ZTcwZDcuLmFjNjJiMTIwNzA3ZGM2ZDlmNDUwYmI1Y2I5MTM3OTAw
OTA0ZWE5NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKQEAgLTMzLDcgKzMzLDcg
QEAgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoY29u
c3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGYKIH0KIAogRkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNw
ZWN1bGFyTGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VT
Y2FsZSwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRT
b3VyY2U+JiYgbGlnaHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5nKFNwZWN1bGFyTGlnaHRpbmcs
IGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3Vs
YXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3Zl
KGxpZ2h0U291cmNlKSwgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcpCisg
ICAgOiBGRUxpZ2h0aW5nKEZpbHRlckVmZmVjdDo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nLCBs
aWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFy
RXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShs
aWdodFNvdXJjZSkpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCBhOWUyMTMzN2IwZDI3NGU1NDgwZGY2NzYw
Zjg5N2M3MjAxOWU1NDhhLi40MzkwNDhmNWJkMWUxOTc1N2Q5MTdmYWIyNWZkYTczNmIxN2Q1Nzc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVRpbGUuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
ICNpbmNsdWRlICJQYXR0ZXJuLmgiCkBAIC00MiwyMiArNDMsMzIgQEAgRkVUaWxlOjpGRVRpbGUo
KQogewogfQogCi1ib29sIEZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFVGlsZVNvZnR3YXJlQXBwbGll
ciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFVGlsZVNvZnR3
YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVUaWxlPiB7
CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRVRpbGU+Owor
CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3Qg
RmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRl
OworfTsKKworYm9vbCBGRVRpbGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKIHsKLSAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKIAotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1
ZmZlclJlc3VsdCgpOworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZl
clJlc3VsdCgpOwogICAgIGF1dG8gaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
ICAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CisgICAgbV9lZmZl
Y3Quc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICAvLyBTb3VyY2Ug
aW5wdXQgbmVlZHMgbW9yZSBhdHRlbnRpb24uIEl0IGhhcyB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVy
UmVnaW9uIGJ1dCBnaXZlcyB0aGUKICAgICAvLyBzaXplIG9mIHRoZSBjdXR0ZWQgc291cmNlSW1h
Z2UgYmFjay4gVGhpcyBpcyBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBvcHRpbWl6YXRp
b24uCiAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKICAgICBG
bG9hdFBvaW50IGluTWF4RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOwotICAg
IEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24o
KTsKKyAgICBGbG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbV9lZmZlY3QubWF4RWZmZWN0
UmVjdCgpLmxvY2F0aW9uKCk7CiAgICAgaWYgKGluLT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZm
ZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljIHx8IGluLT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZm
ZWN0OjpUeXBlOjpTb3VyY2VBbHBoYSkgewogICAgICAgICB0aWxlUmVjdCA9IGZpbHRlci5maWx0
ZXJSZWdpb24oKTsKICAgICAgICAgdGlsZVJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkp
OwpAQCAtODIsMTEgKzkzLDE2IEBAIGJvb2wgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRl
eHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwogICAgIGZpbHRlckNvbnRleHQuc2V0RmlsbFBh
dHRlcm4oV1RGTW92ZShwYXR0ZXJuKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpOworICAgIGZp
bHRlckNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9lZmZlY3QuYWJz
b2x1dGVQYWludFJlY3QoKS5zaXplKCkpKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCitib29s
IEZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorewor
ICAgIHJldHVybiBGRVRpbGVTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5w
dXRFZmZlY3RzKCkpOworfQorCiBUZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikg
Y29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVRpbGUiOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
CmluZGV4IDI2NTc3NjYzY2M2MzI3N2JlMmRhYTM2NDA5Njg0YjFkNzIyMjY5YTEuLjc1ZDNiZjQ0
YTIzNzM1MGYyNzU1Y2Y2YTEyOWYyZDcxM2IzMDQ5NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAg
LTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAogI2luY2x1ZGUgIkZp
bHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
cmFsbGVsSm9icy5oPgpAQCAtMzQsMjAgKzM1LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0vKgotICAgIFByb2R1Y2VzIHJlc3VsdHMgaW4gdGhlIHJhbmdlIFsxLCAyKiozMSAtIDJdLiBB
bGdvcml0aG0gaXM6Ci0gICAgciA9IChhICogcikgbW9kIG0gd2hlcmUgYSA9IHJhbmRBbXBsaXR1
ZGUgPSAxNjgwNyBhbmQKLSAgICBtID0gcmFuZE1heGltdW0gPSAyKiozMSAtIDEgPSAyMTQ3NDgz
NjQ3LCByID0gc2VlZC4KLSAgICBTZWUgW1BhcmsgJiBNaWxsZXJdLCBDQUNNIHZvbC4gMzEgbm8u
IDEwIHAuIDExOTUsIE9jdC4gMTk4OAotICAgIFRvIHRlc3Q6IHRoZSBhbGdvcml0aG0gc2hvdWxk
IHByb2R1Y2UgdGhlIHJlc3VsdCAxMDQzNjE4MDY1Ci0gICAgYXMgdGhlIDEwLDAwMHRoIGdlbmVy
YXRlZCBudW1iZXIgaWYgdGhlIG9yaWdpbmFsIHNlZWQgaXMgMS4KLSovCi1zdGF0aWMgY29uc3Qg
aW50IHNfcGVybGluTm9pc2UgPSA0MDk2Owotc3RhdGljIGNvbnN0IGxvbmcgc19yYW5kTWF4aW11
bSA9IDIxNDc0ODM2NDc7IC8vIDIqKjMxIC0gMQotc3RhdGljIGNvbnN0IGludCBzX3JhbmRBbXBs
aXR1ZGUgPSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJvb3Qgb2YgbQotc3RhdGljIGNvbnN0
IGludCBzX3JhbmRRID0gMTI3NzczOyAvLyBtIC8gYQotc3RhdGljIGNvbnN0IGludCBzX3JhbmRS
ID0gMjgzNjsgLy8gbSAlIGEKLQogUmVmPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVh
dGUoVHVyYnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VG
cmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykK
IHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UodHlwZSwgYmFzZUZyZXF1
ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOwpA
QCAtMTE1LDcyICsxMDIsMTM0IEBAIGJvb2wgRkVUdXJidWxlbmNlOjpzZXRTdGl0Y2hUaWxlcyhi
b29sIHN0aXRjaCkKIC8vIFRoZSB0dXJidWxlbmNlIGNhbGN1bGF0aW9uIGNvZGUgaXMgYW4gYWRh
cHRlZCB2ZXJzaW9uIG9mIHdoYXQgYXBwZWFycyBpbiB0aGUgU1ZHIDEuMSBzcGVjaWZpY2F0aW9u
OgogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5j
ZQogCi0vLyBDb21wdXRlIHBzZXVkbyByYW5kb20gbnVtYmVyLgotaW5saW5lIGxvbmcgRkVUdXJi
dWxlbmNlOjpQYWludGluZ0RhdGE6OnJhbmRvbSgpCi17Ci0gICAgbG9uZyByZXN1bHQgPSBzX3Jh
bmRBbXBsaXR1ZGUgKiAoc2VlZCAlIHNfcmFuZFEpIC0gc19yYW5kUiAqIChzZWVkIC8gc19yYW5k
USk7Ci0gICAgaWYgKHJlc3VsdCA8PSAwKQotICAgICAgICByZXN1bHQgKz0gc19yYW5kTWF4aW11
bTsKLSAgICBzZWVkID0gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7Ci19CisvLyBGSVhNRTog
TW92ZSB0aGUgY2xhc3MgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNv
dXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
IDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRVR1cmJ1bGVuY2U+IHsKKyAg
ICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFVHVyYnVsZW5jZT47
CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25z
dCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgLy8gUHJvZHVjZXMgcmVzdWx0cyBpbiB0aGUgcmFuZ2UgWzEs
IDIqKjMxIC0gMl0uIEFsZ29yaXRobSBpczoKKyAgICAvLyByID0gKGEgKiByKSBtb2QgbSB3aGVy
ZSBhID0gcmFuZEFtcGxpdHVkZSA9IDE2ODA3IGFuZAorICAgIC8vIG0gPSByYW5kTWF4aW11bSA9
IDIqKjMxIC0gMSA9IDIxNDc0ODM2NDcsIHIgPSBzZWVkLgorICAgIC8vIFNlZSBbUGFyayAmIE1p
bGxlcl0sIENBQ00gdm9sLiAzMSBuby4gMTAgcC4gMTE5NSwgT2N0LiAxOTg4CisgICAgLy8gVG8g
dGVzdDogdGhlIGFsZ29yaXRobSBzaG91bGQgcHJvZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgwNjUK
KyAgICAvLyBhcyB0aGUgMTAsMDAwdGggZ2VuZXJhdGVkIG51bWJlciBpZiB0aGUgb3JpZ2luYWwg
c2VlZCBpcyAxLgorICAgIHN0YXRpYyBjb25zdCBpbnQgcGVybGluTm9pc2UgPSA0MDk2OworICAg
IHN0YXRpYyBjb25zdCBsb25nIHJhbmRNYXhpbXVtID0gMjE0NzQ4MzY0NzsgLy8gMioqMzEgLSAx
CisgICAgc3RhdGljIGNvbnN0IGludCByYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7IHBy
aW1pdGl2ZSByb290IG9mIG0KKyAgICBzdGF0aWMgY29uc3QgaW50IHJhbmRRID0gMTI3NzczOyAv
LyBtIC8gYQorICAgIHN0YXRpYyBjb25zdCBpbnQgcmFuZFIgPSAyODM2OyAvLyBtICUgYQorCisg
ICAgc3RhdGljIGNvbnN0IGludCBibG9ja1NpemUgPSAyNTY7CisgICAgc3RhdGljIGNvbnN0IGlu
dCBibG9ja01hc2sgPSBibG9ja1NpemUgLSAxOworCisgICAgc3RydWN0IFBhaW50aW5nRGF0YSB7
CisgICAgICAgIC8vIENvbXB1dGUgcHNldWRvIHJhbmRvbSBudW1iZXIuCisgICAgICAgIGxvbmcg
cmFuZG9tKCkKKyAgICAgICAgeworICAgICAgICAgICAgbG9uZyByZXN1bHQgPSByYW5kQW1wbGl0
dWRlICogKHNlZWQgJSByYW5kUSkgLSByYW5kUiAqIChzZWVkIC8gcmFuZFEpOworICAgICAgICAg
ICAgaWYgKHJlc3VsdCA8PSAwKQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSByYW5kTWF4aW11
bTsKKyAgICAgICAgICAgIHNlZWQgPSByZXN1bHQ7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9CiAKLWlubGluZSBmbG9hdCBzbW9vdGhDdXJ2ZShmbG9hdCB0KQotewotICAg
IHJldHVybiB0ICogdCAqICgzIC0gMiAqIHQpOwotfQorICAgICAgICBUdXJidWxlbmNlVHlwZSB0
eXBlOworICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WDsKKyAgICAgICAgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVk7CisgICAgICAgIGludCBudW1PY3RhdmVzOworICAgICAgICBsb25nIHNlZWQ7Cisg
ICAgICAgIGJvb2wgc3RpdGNoVGlsZXM7CisgICAgICAgIEludFNpemUgcGFpbnRpbmdTaXplOwog
Ci1pbmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xhdGlvbihmbG9hdCB0LCBmbG9hdCBhLCBmbG9h
dCBiKQotewotICAgIHJldHVybiBhICsgdCAqIChiIC0gYSk7Ci19CisgICAgICAgIGludCBsYXR0
aWNlU2VsZWN0b3JbMiAqIGJsb2NrU2l6ZSArIDJdOworICAgICAgICBmbG9hdCBncmFkaWVudFs0
XVsyICogYmxvY2tTaXplICsgMl1bMl07CisgICAgfTsKKworICAgIHN0cnVjdCBTdGl0Y2hEYXRh
IHsKKyAgICAgICAgaW50IHdpZHRoIHsgMCB9OyAvLyBIb3cgbXVjaCB0byBzdWJ0cmFjdCB0byB3
cmFwIGZvciBzdGl0Y2hpbmcuCisgICAgICAgIGludCB3cmFwWCB7IDAgfTsgLy8gTWluaW11bSB2
YWx1ZSB0byB3cmFwLgorICAgICAgICBpbnQgaGVpZ2h0IHsgMCB9OworICAgICAgICBpbnQgd3Jh
cFkgeyAwIH07CisgICAgfTsKKworICAgIHN0cnVjdCBBcHBseVBhcmFtZXRlcnMgeworICAgICAg
ICBJbnRSZWN0IGZpbHRlclJlZ2lvbjsKKyAgICAgICAgRmxvYXRTaXplIGZpbHRlclNjYWxlOwor
ICAgICAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheTsKKyAgICAgICAgUGFpbnRpbmdE
YXRhKiBwYWludGluZ0RhdGE7CisgICAgICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKKyAgICAg
ICAgaW50IHN0YXJ0WTsKKyAgICAgICAgaW50IGVuZFk7CisgICAgfTsKIAotdm9pZCBGRVR1cmJ1
bGVuY2U6OmluaXRQYWludChQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKKyAgICBzdGF0aWMg
aW5saW5lIGZsb2F0IHNtb290aEN1cnZlKGZsb2F0IHQpIHsgcmV0dXJuIHQgKiB0ICogKDMgLSAy
ICogdCk7IH0KKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGxpbmVhckludGVycG9sYXRpb24oZmxv
YXQgdCwgZmxvYXQgYSwgZmxvYXQgYikgeyByZXR1cm4gYSArIHQgKiAoYiAtIGEpOyB9CisKKyAg
ICBzdGF0aWMgUGFpbnRpbmdEYXRhIGluaXRQYWludGluZ0RhdGEoVHVyYnVsZW5jZVR5cGUsIGZs
b2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMs
IGxvbmcgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcywgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXpl
KTsKKyAgICBzdGF0aWMgU3RpdGNoRGF0YSBjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNp
emUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZLCBib29sIHN0
aXRjaFRpbGVzKTsKKworICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNl
MkQoY29uc3QgUGFpbnRpbmdEYXRhJiwgY29uc3QgU3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9p
bnQmIG5vaXNlVmVjdG9yKTsKKyAgICBzdGF0aWMgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+
IHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0
PiYgZmxvYXRDb21wb25lbnRzKTsKKyAgICBzdGF0aWMgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3Qs
IDQ+IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYs
IFN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKworICAgIHN0YXRpYyB2b2lkIGFwcGx5
UGxhdGZvcm1HZW5lcmljKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRT
aXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFBh
aW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKTsKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVBsYXRmb3JtV29ya2VyKEFwcGx5UGFyYW1ldGVycyopOworICAgIHN0YXRp
YyB2b2lkIGFwcGx5UGxhdGZvcm0oY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBG
bG9hdFNpemUmIGZpbHRlclNjYWxlLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgUGFp
bnRpbmdEYXRhJiwgU3RpdGNoRGF0YSYpOworfTsKKworRkVUdXJidWxlbmNlU29mdHdhcmVBcHBs
aWVyOjpQYWludGluZ0RhdGEgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjppbml0UGFpbnRp
bmdEYXRhKFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBi
YXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGxvbmcgc2VlZCwgYm9vbCBzdGl0Y2hUaWxl
cywgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplKQogewotICAgIGZsb2F0IG5vcm1hbGl6YXRp
b25GYWN0b3I7CisgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSB7IHR5cGUsIGJhc2VGcmVx
dWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMsIHBh
aW50aW5nU2l6ZSwgeyB9LCB7IH0gfTsKIAotICAgIC8vIFRoZSBzZWVkIHZhbHVlIGNsYW1wIHRv
IHRoZSByYW5nZSBbMSwgc19yYW5kTWF4aW11bSAtIDFdLgorICAgIC8vIFRoZSBzZWVkIHZhbHVl
IGNsYW1wIHRvIHRoZSByYW5nZSBbMSwgcmFuZE1heGltdW0gLSAxXS4KICAgICBpZiAocGFpbnRp
bmdEYXRhLnNlZWQgPD0gMCkKLSAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQgPSAtKHBhaW50aW5n
RGF0YS5zZWVkICUgKHNfcmFuZE1heGltdW0gLSAxKSkgKyAxOwotICAgIGlmIChwYWludGluZ0Rh
dGEuc2VlZCA+IHNfcmFuZE1heGltdW0gLSAxKQotICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9
IHNfcmFuZE1heGltdW0gLSAxOworICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9IC0ocGFpbnRp
bmdEYXRhLnNlZWQgJSAocmFuZE1heGltdW0gLSAxKSkgKyAxOworICAgIGlmIChwYWludGluZ0Rh
dGEuc2VlZCA+IHJhbmRNYXhpbXVtIC0gMSkKKyAgICAgICAgcGFpbnRpbmdEYXRhLnNlZWQgPSBy
YW5kTWF4aW11bSAtIDE7CiAKICAgICBmbG9hdCogZ3JhZGllbnQ7CiAgICAgZm9yIChpbnQgY2hh
bm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzX2Jsb2NrU2l6ZTsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
YmxvY2tTaXplOyArK2kpIHsKICAgICAgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0
b3JbaV0gPSBpOwogICAgICAgICAgICAgZ3JhZGllbnQgPSBwYWludGluZ0RhdGEuZ3JhZGllbnRb
Y2hhbm5lbF1baV07CiAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgZ3JhZGllbnRb
MF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19i
bG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxvY2tTaXplOwotICAgICAgICAgICAgICAg
IGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkg
JSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKKyAgICAg
ICAgICAgICAgICBncmFkaWVudFswXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdEYXRh
LnJhbmRvbSgpICUgKDIgKiBibG9ja1NpemUpKSAtIGJsb2NrU2l6ZSkgLyBibG9ja1NpemU7Cisg
ICAgICAgICAgICAgICAgZ3JhZGllbnRbMV0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5n
RGF0YS5yYW5kb20oKSAlICgyICogYmxvY2tTaXplKSkgLSBibG9ja1NpemUpIC8gYmxvY2tTaXpl
OwogICAgICAgICAgICAgfSB3aGlsZSAoIWdyYWRpZW50WzBdICYmICFncmFkaWVudFsxXSk7Ci0g
ICAgICAgICAgICBub3JtYWxpemF0aW9uRmFjdG9yID0gc3RkOjpoeXBvdChncmFkaWVudFswXSwg
Z3JhZGllbnRbMV0pOworICAgICAgICAgICAgZmxvYXQgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0
ZDo6aHlwb3QoZ3JhZGllbnRbMF0sIGdyYWRpZW50WzFdKTsKICAgICAgICAgICAgIGdyYWRpZW50
WzBdIC89IG5vcm1hbGl6YXRpb25GYWN0b3I7CiAgICAgICAgICAgICBncmFkaWVudFsxXSAvPSBu
b3JtYWxpemF0aW9uRmFjdG9yOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yIChpbnQgaSA9
IHNfYmxvY2tTaXplIC0gMTsgaSA+IDA7IC0taSkgeworICAgIGZvciAoaW50IGkgPSBibG9ja1Np
emUgLSAxOyBpID4gMDsgLS1pKSB7CiAgICAgICAgIGludCBrID0gcGFpbnRpbmdEYXRhLmxhdHRp
Y2VTZWxlY3RvcltpXTsKLSAgICAgICAgaW50IGogPSBwYWludGluZ0RhdGEucmFuZG9tKCkgJSBz
X2Jsb2NrU2l6ZTsKKyAgICAgICAgaW50IGogPSBwYWludGluZ0RhdGEucmFuZG9tKCkgJSBibG9j
a1NpemU7CiAgICAgICAgIEFTU0VSVChqID49IDApOwotICAgICAgICBBU1NFUlQoaiA8IDIgKiBz
X2Jsb2NrU2l6ZSArIDIpOworICAgICAgICBBU1NFUlQoaiA8IDIgKiBibG9ja1NpemUgKyAyKTsK
ICAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IHBhaW50aW5nRGF0YS5s
YXR0aWNlU2VsZWN0b3Jbal07CiAgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jb
al0gPSBrOwogICAgIH0KIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemUgKyAy
OyArK2kpIHsKLSAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltzX2Jsb2NrU2l6
ZSArIGldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXTsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGJsb2NrU2l6ZSArIDI7ICsraSkgeworICAgICAgICBwYWludGluZ0RhdGEubGF0
dGljZVNlbGVjdG9yW2Jsb2NrU2l6ZSArIGldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rv
cltpXTsKICAgICAgICAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5u
ZWwpIHsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtzX2Jsb2Nr
U2l6ZSArIGldWzBdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzBdOwotICAg
ICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1b
MV0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMV07CisgICAgICAgICAgICBw
YWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bYmxvY2tTaXplICsgaV1bMF0gPSBwYWludGlu
Z0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMF07CisgICAgICAgICAgICBwYWludGluZ0RhdGEu
Z3JhZGllbnRbY2hhbm5lbF1bYmxvY2tTaXplICsgaV1bMV0gPSBwYWludGluZ0RhdGEuZ3JhZGll
bnRbY2hhbm5lbF1baV1bMV07CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1cm4gcGFpbnRp
bmdEYXRhOwogfQogCi1GRVR1cmJ1bGVuY2U6OlN0aXRjaERhdGEgRkVUdXJidWxlbmNlOjpjb21w
dXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxv
YXQmIGJhc2VGcmVxdWVuY3lZKSBjb25zdAorRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpT
dGl0Y2hEYXRhIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZVN0aXRjaGluZyhJ
bnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVl
bmN5WSwgYm9vbCBzdGl0Y2hUaWxlcykKIHsKLSAgICBpZiAoIW1fc3RpdGNoVGlsZXMpCisgICAg
aWYgKCFzdGl0Y2hUaWxlcykKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGZsb2F0IHRpbGVX
aWR0aCA9IHRpbGVTaXplLndpZHRoKCk7CkBAIC0yMDksMTUgKzI1OCwxNSBAQCBGRVR1cmJ1bGVu
Y2U6OlN0aXRjaERhdGEgRkVUdXJidWxlbmNlOjpjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGls
ZVNpemUsIGZsb2F0JgogCiAgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOwogICAgIHN0aXRjaERh
dGEud2lkdGggPSByb3VuZGYodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpOwotICAgIHN0aXRj
aERhdGEud3JhcFggPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS53aWR0aDsKKyAgICBzdGl0
Y2hEYXRhLndyYXBYID0gcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLndpZHRoOwogICAgIHN0aXRj
aERhdGEuaGVpZ2h0ID0gcm91bmRmKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSk7Ci0gICAg
c3RpdGNoRGF0YS53cmFwWSA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLmhlaWdodDsKKyAg
ICBzdGl0Y2hEYXRhLndyYXBZID0gcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLmhlaWdodDsKIAog
ICAgIHJldHVybiBzdGl0Y2hEYXRhOwogfQogCiAvLyBUaGlzIGlzIHRha2VuIDE6MSBmcm9tIFNW
RyBzcGVjOiBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxl
bmNlRWxlbWVudC4KLUNvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxlbmNlOjpub2lz
ZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0Y2hEYXRhJiBz
dGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikgY29uc3QKK0NvbG9yQ29t
cG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpub2lzZTJEKGNv
bnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBjb25zdCBTdGl0Y2hEYXRhJiBzdGl0Y2hE
YXRhLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3RvcikKIHsKICAgICBzdHJ1Y3QgTm9pc2VQ
b3NpdGlvbiB7CiAgICAgICAgIGludCBpbmRleDsgLy8gYngwLCBieTAgaW4gdGhlIHNwZWMgdGV4
dC4KQEAgLTIzMCw3ICsyNzksNyBAQCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVs
ZW5jZTo6bm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YQogICAgICAgICAg
ICAgLy8gIGJ4MCA9IChpbnQpdDsKICAgICAgICAgICAgIC8vICBieDEgPSBieDArMTsKICAgICAg
ICAgICAgIC8vICByeDAgPSB0IC0gKGludCl0OwotICAgICAgICAgICAgZmxvYXQgcG9zaXRpb24g
PSBjb21wb25lbnQgKyBzX3Blcmxpbk5vaXNlOworICAgICAgICAgICAgZmxvYXQgcG9zaXRpb24g
PSBjb21wb25lbnQgKyBwZXJsaW5Ob2lzZTsKICAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nh
c3Q8aW50Pihwb3NpdGlvbik7CiAgICAgICAgICAgICBuZXh0SW5kZXggPSBpbmRleCArIDE7CiAg
ICAgICAgICAgICBmcmFjdGlvbiA9IHBvc2l0aW9uIC0gaW5kZXg7CkBAIC0yNTQsNyArMzAzLDcg
QEAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY29uc3Qg
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEKICAgICBOb2lzZVBvc2l0aW9uIG5vaXNlWShub2lz
ZVZlY3Rvci55KCkpOwogCiAgICAgLy8gSWYgc3RpdGNoaW5nLCBhZGp1c3QgbGF0dGljZSBwb2lu
dHMgYWNjb3JkaW5nbHkuCi0gICAgaWYgKG1fc3RpdGNoVGlsZXMpIHsKKyAgICBpZiAocGFpbnRp
bmdEYXRhLnN0aXRjaFRpbGVzKSB7CiAgICAgICAgIG5vaXNlWC5zdGl0Y2goc3RpdGNoRGF0YS53
aWR0aCwgc3RpdGNoRGF0YS53cmFwWCk7CiAgICAgICAgIG5vaXNlWS5zdGl0Y2goc3RpdGNoRGF0
YS5oZWlnaHQsIHN0aXRjaERhdGEud3JhcFkpOwogICAgIH0KQEAgLTI2MywxMCArMzEyLDEwIEBA
IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxlbmNlOjpub2lzZTJEKGNvbnN0IFBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhCiAgICAgLy8gYngxICY9IEJNOwogICAgIC8vIGJ5MCAm
PSBCTTsKICAgICAvLyBieTEgJj0gQk07Ci0gICAgbm9pc2VYLmluZGV4ICY9IHNfYmxvY2tNYXNr
OwotICAgIG5vaXNlWC5uZXh0SW5kZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VZLmluZGV4
ICY9IHNfYmxvY2tNYXNrOwotICAgIG5vaXNlWS5uZXh0SW5kZXggJj0gc19ibG9ja01hc2s7Cisg
ICAgbm9pc2VYLmluZGV4ICY9IGJsb2NrTWFzazsKKyAgICBub2lzZVgubmV4dEluZGV4ICY9IGJs
b2NrTWFzazsKKyAgICBub2lzZVkuaW5kZXggJj0gYmxvY2tNYXNrOworICAgIG5vaXNlWS5uZXh0
SW5kZXggJj0gYmxvY2tNYXNrOwogCiAgICAgLy8gaSA9IHVMYXR0aWNlU2VsZWN0b3JbYngwXTsK
ICAgICAvLyBqID0gdUxhdHRpY2VTZWxlY3RvcltieDFdOwpAQCAtMzIzLDcgKzM3Miw3IEBAIENv
bG9yQ29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxlbmNlOjpub2lzZTJEKGNvbnN0IFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhCiAKIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmls
dGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQgZGVzY3JpYmVzIHRoaXMgY29udmVyc2lvbiB0
byBjb2xvciBjb21wb25lbnRzLgogLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBjb2xvckNvbnZl
cnQ8U1JHQkE8dWludDg+PihTUkdCQTxmbG9hdD4pIHRvIGdldCB0aGUgc2FtZSBiZWhhdmlvci4K
LXN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IHRvSW50QmFzZWRDb2xv
ckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiYgZmxvYXRDb21wb25l
bnRzKQorQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllcjo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8Zmxv
YXQsIDQ+JiBmbG9hdENvbXBvbmVudHMpCiB7CiAgICAgcmV0dXJuIHsKICAgICAgICAgc3RkOjpj
bGFtcDx1aW50OF90PihzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0Q29tcG9uZW50c1swXSAqIDI1NSks
IDAsIDI1NSksCkBAIC0zMzMsMTMgKzM4MiwxMyBAQCBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9u
ZW50czx1aW50OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQwog
ICAgIH07CiB9CiAKLUNvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2U6OmNh
bGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBj
b25zdAorQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllcjo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpCiB7CiAgICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiB0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQ7CiAgICAgRmxvYXRQb2ludCBub2lzZVZlY3Rvcihwb2ludC54KCkgKiBwYWludGlu
Z0RhdGEuYmFzZUZyZXF1ZW5jeVgsIHBvaW50LnkoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJlcXVl
bmN5WSk7CiAgICAgZmxvYXQgcmF0aW8gPSAxOwotICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7IG9j
dGF2ZSA8IG1fbnVtT2N0YXZlczsgKytvY3RhdmUpIHsKLSAgICAgICAgaWYgKG1fdHlwZSA9PSBU
dXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQorICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7IG9j
dGF2ZSA8IHBhaW50aW5nRGF0YS5udW1PY3RhdmVzOyArK29jdGF2ZSkgeworICAgICAgICBpZiAo
cGFpbnRpbmdEYXRhLnR5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKICAgICAg
ICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwg
c3RpdGNoRGF0YSwgbm9pc2VWZWN0b3IpIC8gcmF0aW87CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCArPSBub2lzZTJEKHBhaW50aW5nRGF0YSwgc3Rp
dGNoRGF0YSwgbm9pc2VWZWN0b3IpLmFicygpIC8gcmF0aW87CkBAIC0zNDgsMzIgKzM5NywzMSBA
QCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJi
dWxlbmNlVmFsdWVGb3JQb2ludChjb25zdAogICAgICAgICBub2lzZVZlY3Rvci5zZXRZKG5vaXNl
VmVjdG9yLnkoKSAqIDIpOwogICAgICAgICByYXRpbyAqPSAyOwogCi0gICAgICAgIGlmIChtX3N0
aXRjaFRpbGVzKSB7Ci0gICAgICAgICAgICAvLyBVcGRhdGUgc3RpdGNoIHZhbHVlcy4gU3VidHJh
Y3Rpbmcgc19wZXJsaW5Ob2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAorICAgICAg
ICBpZiAocGFpbnRpbmdEYXRhLnN0aXRjaFRpbGVzKSB7CisgICAgICAgICAgICAvLyBVcGRhdGUg
c3RpdGNoIHZhbHVlcy4gU3VidHJhY3RpbmcgcGVybGluTm9pc2UgYmVmb3JlIHRoZSBtdWx0aXBs
aWNhdGlvbiBhbmQKICAgICAgICAgICAgIC8vIGFkZGluZyBpdCBhZnRlcndhcmQgc2ltcGxpZmll
cyB0byBzdWJ0cmFjdGluZyBpdCBvbmNlLgogICAgICAgICAgICAgc3RpdGNoRGF0YS53aWR0aCAq
PSAyOwotICAgICAgICAgICAgc3RpdGNoRGF0YS53cmFwWCA9IDIgKiBzdGl0Y2hEYXRhLndyYXBY
IC0gc19wZXJsaW5Ob2lzZTsKKyAgICAgICAgICAgIHN0aXRjaERhdGEud3JhcFggPSAyICogc3Rp
dGNoRGF0YS53cmFwWCAtIHBlcmxpbk5vaXNlOwogICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWln
aHQgKj0gMjsKLSAgICAgICAgICAgIHN0aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53
cmFwWSAtIHNfcGVybGluTm9pc2U7CisgICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBZID0gMiAq
IHN0aXRjaERhdGEud3JhcFkgLSBwZXJsaW5Ob2lzZTsKICAgICAgICAgfQogICAgIH0KIAogICAg
IC8vIFRoZSB2YWx1ZSBvZiB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgY29tZXMgZnJvbSAoKHR1
cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSkgKyAyNTUpIC8gMiBieSBmcmFjdGFsTm9pc2UK
ICAgICAvLyBhbmQgKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCAqIDI1NSkgYnkgdHVyYnVsZW5j
ZS4KLSAgICBpZiAobV90eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCisgICAg
aWYgKHBhaW50aW5nRGF0YS50eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCiAg
ICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3Vs
dCAqIDAuNWYgKyAwLjVmOwogCiAgICAgcmV0dXJuIHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMo
dHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0KTsKIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxS
ZWdpb24oY29uc3QgRmlsdGVyJiBmaWx0ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5
LCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRh
LCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3QKK3ZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVB
cHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24s
IGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFy
cmF5LCBjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hE
YXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKIHsKICAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7
CiAKLSAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbiA9IGFic29sdXRlUGFpbnRSZWN0KCk7CiAgICAg
RmxvYXRQb2ludCBwb2ludCgwLCBmaWx0ZXJSZWdpb24ueSgpICsgc3RhcnRZKTsKICAgICBpbnQg
aW5kZXhPZlBpeGVsQ2hhbm5lbCA9IHN0YXJ0WSAqIChmaWx0ZXJSZWdpb24ud2lkdGgoKSA8PCAy
KTsKLSAgICBGbG9hdFNpemUgaW52ZXJzZVNjYWxlID0geyAxIC8gZmlsdGVyLmZpbHRlclNjYWxl
KCkud2lkdGgoKSwgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH07CisgICAgRmxv
YXRTaXplIGludmVyc2VTY2FsZSA9IHsgMSAvIGZpbHRlclNjYWxlLndpZHRoKCksIDEgLyBmaWx0
ZXJTY2FsZS5oZWlnaHQoKSB9OwogCiAgICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IGVuZFk7
ICsreSkgewogICAgICAgICBwb2ludC5zZXRZKHBvaW50LnkoKSArIDEpOwpAQCAtMzg4LDQ1ICs0
MzYsMjIgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24oY29uc3QgRmlsdGVyJiBmaWx0
ZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmEKICAgICB9CiB9CiAKLXZvaWQgRkVUdXJi
dWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
KQordm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1Xb3JrZXIo
QXBwbHlQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQogewotICAgIHBhcmFtZXRlcnMtPmVmZmVjdC0+
ZmlsbFJlZ2lvbigqcGFyYW1ldGVycy0+ZmlsdGVyLCAqcGFyYW1ldGVycy0+cGl4ZWxBcnJheSwg
KnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+c3RpdGNoRGF0YSwgcGFyYW1l
dGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsKKyAgICBhcHBseVBsYXRmb3JtR2VuZXJp
YyhwYXJhbWV0ZXJzLT5maWx0ZXJSZWdpb24sIHBhcmFtZXRlcnMtPmZpbHRlclNjYWxlLCAqcGFy
YW1ldGVycy0+cGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVy
cy0+c3RpdGNoRGF0YSwgcGFyYW1ldGVycy0+c3RhcnRZLCBwYXJhbWV0ZXJzLT5lbmRZKTsKIH0K
IAotYm9vbCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
IGZpbHRlcikKK3ZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
KGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2Fs
ZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhLCBTdGl0Y2hEYXRhJiBzdGl0Y2hEYXRhKQogewotICAgIGF1dG8gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBJbnRTaXplIHJlc3VsdFNpemUoYWJzb2x1
dGVQYWludFJlY3QoKS5zaXplKCkpOwotCi0gICAgaWYgKHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJvRmlsbCgpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBJbnRTaXplIHRpbGVTaXplID0gcm91bmRlZEludFNpemUo
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKTsKLQotICAgIGZsb2F0IGJhc2VGcmVx
dWVuY3lYID0gbV9iYXNlRnJlcXVlbmN5WDsKLSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1f
YmFzZUZyZXF1ZW5jeVk7Ci0gICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRj
aGluZyh0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZKTsKKyAgICBpbnQg
aGVpZ2h0ID0gZmlsdGVyUmVnaW9uLmhlaWdodCgpOworICAgIHVuc2lnbmVkIGFyZWEgPSBmaWx0
ZXJSZWdpb24uYXJlYSgpOwogCi0gICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YShtX3NlZWQs
IHRpbGVTaXplLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVkpOwotICAgIGluaXRQYWlu
dChwYWludGluZ0RhdGEpOworICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW1hbFJlY3REaW1lbnNp
b24gPSAoMTAwICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpv
YnMuCisgICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IGZpbHRlclJlZ2lvbi5oZWlnaHQoKSAv
IDg7CisgICAgdW5zaWduZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVk
PihhcmVhIC8gbWluaW1hbFJlY3REaW1lbnNpb24sIG1heE51bVRocmVhZHMpOwogCi0gICAgYXV0
byBhcmVhID0gcmVzdWx0U2l6ZS5hcmVhKCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgaGVpZ2h0ID0gcmVzdWx0U2l6ZS5o
ZWlnaHQoKTsKLQotICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBoZWlnaHQgLyA4OwotICAg
IHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oYXJlYSAv
IHNfbWluaW1hbFJlY3REaW1lbnNpb24sIG1heE51bVRocmVhZHMpOwogICAgIGlmIChvcHRpbWFs
VGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBQYXJhbGxlbEpvYnM8RmlsbFJlZ2lvblBhcmFt
ZXRlcnM+IHBhcmFsbGVsSm9icygmV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29y
a2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKKyAgICAgICAgUGFyYWxsZWxKb2JzPEFwcGx5UGFy
YW1ldGVycz4gcGFyYWxsZWxKb2JzKCZhcHBseVBsYXRmb3JtV29ya2VyLCBvcHRpbWFsVGhyZWFk
TnVtYmVyKTsKIAogICAgICAgICAvLyBGaWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKICAgICAgICAg
YXV0byBudW1Kb2JzID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwpAQCAtNDM3LDEwICs0
NjIsMTAgQEAgYm9vbCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImIGZpbHRlcikKICAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0WSA9IDA7CiAKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1Kb2JzOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBGaWxsUmVnaW9uUGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFt
ZXRlcihpKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gJmZpbHRlcjsKLSAgICAg
ICAgICAgICAgICBwYXJhbXMuZWZmZWN0ID0gdGhpczsKLSAgICAgICAgICAgICAgICBwYXJhbXMu
cGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CisgICAgICAgICAgICAgICAgQXBw
bHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOworICAgICAg
ICAgICAgICAgIHBhcmFtcy5maWx0ZXJSZWdpb24gPSBmaWx0ZXJSZWdpb247CisgICAgICAgICAg
ICAgICAgcGFyYW1zLmZpbHRlclNjYWxlID0gZmlsdGVyU2NhbGU7CisgICAgICAgICAgICAgICAg
cGFyYW1zLnBpeGVsQXJyYXkgPSAmcGl4ZWxBcnJheTsKICAgICAgICAgICAgICAgICBwYXJhbXMu
cGFpbnRpbmdEYXRhID0gJnBhaW50aW5nRGF0YTsKICAgICAgICAgICAgICAgICBwYXJhbXMuc3Rp
dGNoRGF0YSA9IHN0aXRjaERhdGE7CiAgICAgICAgICAgICAgICAgcGFyYW1zLnN0YXJ0WSA9IHN0
YXJ0WTsKQEAgLTQ1MSwxNSArNDc2LDQ4IEBAIGJvb2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIEZhbGxiYWNr
IHRvIHNpbmdsZSB0aHJlYWRlZCBtb2RlIGlmIHRoZXJlIGlzIG5vIHJvb20gZm9yIGEgbmV3IHRo
cmVhZCBvciB0aGUgcGFpbnQgYXJlYSBpcyB0b28gc21hbGwuCi0gICAgZmlsbFJlZ2lvbihmaWx0
ZXIsIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBo
ZWlnaHQpOworICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKGZpbHRlclJlZ2lvbiwgZmlsdGVyU2Nh
bGUsIHBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKK30K
KworYm9vbCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImKQoreworICAgIGF1dG8gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJbnRTaXplIHJlc3VsdFNpemUobV9l
ZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOworICAgIGlmIChyZXN1bHRTaXplLmFy
ZWEoKS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsK
KworICAgIGlmIChyZXN1bHRTaXplLmlzRW1wdHkoKSkgeworICAgICAgICBkZXN0aW5hdGlvblBp
eGVsQXJyYXkuemVyb0ZpbGwoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
YXV0byB0aWxlU2l6ZSA9IHJvdW5kZWRJbnRTaXplKG1fZWZmZWN0LmZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbigpLnNpemUoKSk7CisKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCA9IG1fZWZmZWN0
LmJhc2VGcmVxdWVuY3lYKCk7CisgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVkgPSBtX2VmZmVjdC5i
YXNlRnJlcXVlbmN5WSgpOworICAgIGF1dG8gc3RpdGNoRGF0YSA9IGNvbXB1dGVTdGl0Y2hpbmco
dGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbV9lZmZlY3Quc3RpdGNo
VGlsZXMoKSk7CisKKyAgICBhdXRvIHBhaW50aW5nRGF0YSA9IGluaXRQYWludGluZ0RhdGEobV9l
ZmZlY3QudHlwZSgpLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG1fZWZmZWN0Lm51
bU9jdGF2ZXMoKSwgbV9lZmZlY3Quc2VlZCgpLCBtX2VmZmVjdC5zdGl0Y2hUaWxlcygpLCB0aWxl
U2l6ZSk7CisKKyAgICBhcHBseVBsYXRmb3JtKG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCks
IGZpbHRlci5maWx0ZXJTY2FsZSgpLCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0
YSwgc3RpdGNoRGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVUdXJidWxlbmNl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0
dXJuIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1
dEVmZmVjdHMoKSk7Cit9CisKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBUdXJidWxlbmNlVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1
bGVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmgKaW5kZXggZTY5OGIzMTNmMTg4NjI1MDAzNGIwNjU5MGQxZTJiM2VkNmRjMzk4OC4u
N2M0N2M3ODc0OWI4NTZmYzlmOTFhZjg0YzYxMzRjZjQ3ZGYwNmUyNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5o
CkBAIC01OCw2NCArNTgsMTMgQEAgcHVibGljOgogICAgIGJvb2wgc2V0U3RpdGNoVGlsZXMoYm9v
bCk7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrU2l6ZSA9IDI1NjsK
LSAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tNYXNrID0gc19ibG9ja1NpemUgLSAxOwotCi0g
ICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7
IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzLgotCi0gICAgc3RydWN0
IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIFBhaW50aW5nRGF0YShsb25nIHBhaW50aW5nU2VlZCwg
Y29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVkpCi0gICAgICAgICAgICA6IHNlZWQocGFpbnRpbmdTZWVkKQotICAgICAg
ICAgICAgLCBmaWx0ZXJTaXplKHBhaW50aW5nU2l6ZSkKLSAgICAgICAgICAgICwgYmFzZUZyZXF1
ZW5jeVgoYmFzZUZyZXF1ZW5jeVgpCi0gICAgICAgICAgICAsIGJhc2VGcmVxdWVuY3lZKGJhc2VG
cmVxdWVuY3lZKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBsb25nIHNlZWQ7Ci0g
ICAgICAgIGludCBsYXR0aWNlU2VsZWN0b3JbMiAqIHNfYmxvY2tTaXplICsgMl07Ci0gICAgICAg
IGZsb2F0IGdyYWRpZW50WzRdWzIgKiBzX2Jsb2NrU2l6ZSArIDJdWzJdOwotICAgICAgICBJbnRT
aXplIGZpbHRlclNpemU7Ci0gICAgICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYOwotICAgICAgICBm
bG9hdCBiYXNlRnJlcXVlbmN5WTsKLQotICAgICAgICBpbmxpbmUgbG9uZyByYW5kb20oKTsKLSAg
ICB9OwotCi0gICAgc3RydWN0IFN0aXRjaERhdGEgewotICAgICAgICBTdGl0Y2hEYXRhKCkgPSBk
ZWZhdWx0OwotCi0gICAgICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93IG11Y2ggdG8gc3VidHJh
Y3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgotICAgICAgICBpbnQgd3JhcFggeyAwIH07IC8vIE1p
bmltdW0gdmFsdWUgdG8gd3JhcC4KLSAgICAgICAgaW50IGhlaWdodCB7IDAgfTsKLSAgICAgICAg
aW50IHdyYXBZIHsgMCB9OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgRmlsbFJlZ2lvblBhcmFtZXRl
cnMgewotICAgICAgICBjb25zdCBGaWx0ZXIqIGZpbHRlcjsKLSAgICAgICAgRkVUdXJidWxlbmNl
KiBlZmZlY3Q7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OwotICAgICAg
ICBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICAgICAgU3RpdGNoRGF0YSBzdGl0Y2hE
YXRhOwotICAgICAgICBpbnQgc3RhcnRZOwotICAgICAgICBpbnQgZW5kWTsKLSAgICB9OwotCi0g
ICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVycyopOwot
CiAgICAgRkVUdXJidWxlbmNlKFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwg
ZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0
aXRjaFRpbGVzKTsKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3Qg
RmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0
KG1heEVmZmVjdFJlY3QoKSkpOyB9Ci0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJikgb3ZlcnJpZGU7Ci0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJl
c2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICB2b2lkIGluaXRQYWludChQYWludGluZ0RhdGEmKTsKLSAgICBTdGl0Y2hE
YXRhIGNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVu
Y3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVkpIGNvbnN0OwotICAgIENvbG9yQ29tcG9uZW50czxm
bG9hdCwgND4gbm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmLCBjb25zdCBTdGl0Y2hEYXRhJiwg
Y29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0
PiBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmLCBT
dGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBmaWxsUmVnaW9u
KGNvbnN0IEZpbHRlciYsIFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgUGFpbnRpbmdEYXRhJiwg
U3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0OworICAgIGJvb2wgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgc3RhdGljIHZv
aWQgZmlsbFJlZ2lvbldvcmtlcih2b2lkKik7CisgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5h
bFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICBUdXJidWxlbmNlVHlwZSBtX3R5cGU7CiAgICAgZmxvYXQgbV9i
YXNlRnJlcXVlbmN5WDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBwbGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RBcHBsaWVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDdl
MTQyNTFjNTYyZTk2N2ZmYjlhYjcxZWMzYWZhNzBkY2I5YzJiMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBw
bGllci5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRmlsdGVyRWZmZWN0QXBwbGllciB7CitwdWJsaWM6CisgICAgRmlsdGVyRWZmZWN0QXBwbGll
cigpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3RBcHBsaWVyKCkgPSBkZWZh
dWx0OworICAgIAorICAgIHZpcnR1YWwgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBG
aWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0cykgPSAwOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
RmlsdGVyRWZmZWN0VHlwZT4KK2NsYXNzIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllciA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3RBcHBsaWVyIHsKK3B1YmxpYzoKKyAgICBGaWx0ZXJFZmZlY3RDb25j
cmV0ZUFwcGxpZXIoRmlsdGVyRWZmZWN0VHlwZSYgZWZmZWN0KQorICAgICAgICA6IG1fZWZmZWN0
KGVmZmVjdCkKKyAgICB7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIEZpbHRlckVmZmVj
dFR5cGUmIG1fZWZmZWN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5o
CmluZGV4IDk0ZDE5NTAxMzlkNmQyNDNhODY2MWU1ZWE1NWQyMzVhNzM4OWY1ZDUuLjhkYjhlNTY1
OTdiYWJlYzg2ODYxNjgzZmY4ZTA1ODI4OGM3MTI2ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKQEAgLTY1LDcg
KzY1LDcgQEAgcHVibGljOgogICAgIExpZ2h0VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CiAgICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGluaXRQ
YWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50
aW5nRGF0YSYpIGNvbnN0ID0gMDsKICAgICAvLyB6IGlzIGEgZmxvYXQgbnVtYmVyLCBzaW5jZSBp
dCBpcyB0aGUgYWxwaGEgdmFsdWUgc2NhbGVkIGJ5IGEgdXNlcgogICAgIC8vIHNwZWNpZmllZCAi
c3VyZmFjZVNjYWxlIiBjb25zdGFudCwgd2hpY2ggdHlwZSBpcyA8bnVtYmVyPiBpbiB0aGUgU1ZH
IHN0YW5kYXJkLgogICAgIC8vIHggYW5kIHkgYXJlIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUg
RmlsdGVyRWZmZWN0J3MgYnVmZmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKaW5kZXggMWFi
NWUxOWUxMWE0ZjM2ZWEyYTQyNmE3NTAzODc5MTI4ZjU0YjQ0Yi4uYzJkODc0OTNiMjhkZTM4NjEz
ZTNlMjAyODRmZmUyZmY0MjVmZWUyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCkBAIC0z
Niw3ICszNiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBQb2ludExpZ2h0U291
cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQ
YWludGluZ0RhdGEmKQordm9pZCBQb2ludExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNv
bnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmKSBjb25zdAogewog
ICAgIG1fYnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJT
cGFjZVRvQnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkpOwogICAgIC8vIFRvIHNjYWxl
IFosIG1hcCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHgg
ZGlyZWN0aW9uIGJ5IHouCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCmluZGV4IDY3YTNhMGJkMzlhOGE5
Y2MxOTU0MzQ5ODU5NmQ3MTE1ZjRiYjk1YTUuLjQyYzNkYzYxNzg4NTIyZWM3ODdjYWVlMmFjMzRh
OGUzMmY5ZGJkNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5oCkBAIC0zOSw3ICszOSw3IEBAIHB1
YmxpYzoKICAgICBib29sIHNldFkoZmxvYXQpIG92ZXJyaWRlOwogICAgIGJvb2wgc2V0WihmbG9h
dCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZm
ZWN0JiwgUGFpbnRpbmdEYXRhJikgb3ZlcnJpZGU7CisgICAgdm9pZCBpbml0UGFpbnRpbmdEYXRh
KGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIGNvbnN0IG92ZXJyaWRlOwogICAg
IENvbXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShjb25zdCBQYWlu
dGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0IGZpbmFsOwogCiAgICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOwpAQCAtNTIsNyArNTIsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIEZs
b2F0UG9pbnQzRCBtX3VzZXJTcGFjZVBvc2l0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX2J1ZmZl
clBvc2l0aW9uOworICAgIG11dGFibGUgRmxvYXRQb2ludDNEIG1fYnVmZmVyUG9zaXRpb247CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCmluZGV4IDhmYTQ0MmI4
ZDlkNTNhOTllZjVjYTE1ODgyNjYzNTBkYTZiYTU4NDAuLjgyMDJmYjk0OGE5NmQ3MDNlNTg1YjQ5
YzkyZTI1MzQ0YjAzYmFhNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAK
ICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTQ1LDE3ICs0NiwyOSBAQCB2b2lkIFNvdXJj
ZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikK
ICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7CiB9CiAKLWJvb2wgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImKQorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIFNvdXJjZUFscGhhU29mdHdhcmVB
cHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgU291cmNl
QWxwaGFTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVy
PFNvdXJjZUFscGhhPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBw
bGllcjxTb3VyY2VBbHBoYT47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisg
ICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlu
cHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCitib29sIFNvdXJjZUFscGhhU29mdHdhcmVBcHBs
aWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cykKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJl
c3VsdCgpOworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CisK
KyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAg
ICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSW1h
Z2VCdWZmZXIqIGltYWdlQnVmZmVyID0gaW5wdXRFZmZlY3QoMCktPmltYWdlQnVmZmVyUmVzdWx0
KCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAg
IGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEZsb2F0UmVj
dCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7Cisg
ICAgRmxvYXRSZWN0IGltYWdlUmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFp
bnRSZWN0KCkuc2l6ZSgpKTsKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpOwogCiAgICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChpbWFn
ZVJlY3QsIENvbG9yOjpibGFjayk7CkBAIC02NCw2ICs3NywxMSBAQCBib29sIFNvdXJjZUFscGhh
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAorYm9vbCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQoreworICAgIHJldHVybiBTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllcigqdGhp
cykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIFRleHRTdHJlYW0mIFNvdXJj
ZUFscGhhOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbU291cmNlQWxwaGFdXG4i
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5jcHAKaW5kZXggZWNkZTQzMWY5YjliMDY0NDEzZWEwNWI2MGRkY2I5
MmU1ODk4YzcwNC4uN2IyNjNkZGUwOTdjNTkwZDdmNWQ0YzQ5ZjQ2NGQ1NzY1ZTY3NDU4MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiU291cmNlR3Jh
cGhpYy5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBw
bGllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KIApAQCAtNDIsMTAgKzQzLDIwIEBAIHZvaWQgU291cmNlR3JhcGhpYzo6
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgc2V0
QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKIH0KIAotYm9v
bCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGll
ciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIFNvdXJjZUdyYXBo
aWNTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPFNv
dXJjZUdyYXBoaWM+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBs
aWVyPFNvdXJjZUdyYXBoaWM+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKwor
ICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpIG92ZXJyaWRlOworfTsKKworYm9vbCBTb3VyY2VHcmFwaGljU29mdHdhcmVB
cHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVj
dG9yJikKIHsKLSAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3Vs
dCgpOwotICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJbWFnZSgp
OworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwor
ICAgIGF1dG8gc291cmNlSW1hZ2UgPSBmaWx0ZXIuc291cmNlSW1hZ2UoKTsKICAgICBpZiAoIXJl
c3VsdEltYWdlIHx8ICFzb3VyY2VJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01
Myw2ICs2NCwxMSBAQCBib29sIFNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImIGZpbHRlcikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBTb3VyY2VH
cmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7Cisg
ICAgcmV0dXJuIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRl
ciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBUZXh0U3RyZWFtJiBTb3VyY2VHcmFwaGljOjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUpIGNv
bnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbU291cmNlR3JhcGhpY11cbiI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNv
dXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RM
aWdodFNvdXJjZS5jcHAKaW5kZXggNzE2MDdhYjAwZmY5ZDZhNmQwMTY5MWQ5YmJiODU1M2QxZjM0
OGQwMC4uZTdjN2MwNGVkZWVkODcyZTc5YTIyM2JkYWQ4NmE5MWVkMzNmMDIyYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3Vy
Y2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3Bv
dExpZ2h0U291cmNlLmNwcApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAv
LyBhY2NvcmRpbmcgdG8gdGhlIFNWRyAxLjEgU0UgbGlnaHQgcmVncmVzc2lvbiB0ZXN0cwogc3Rh
dGljIGNvbnN0IGZsb2F0IGFudGlBbGlhc1RyZXNob2xkID0gMC4wMTZmOwogCi12b2lkIFNwb3RM
aWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVm
ZmVjdCwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCit2b2lkIFNwb3RMaWdodFNvdXJjZTo6
aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRp
bmdEYXRhJiBwYWludGluZ0RhdGEpIGNvbnN0CiB7CiAgICAgbV9idWZmZXJQb3NpdGlvbi5zZXRY
WShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIobV91c2VyU3BhY2VQ
b3NpdGlvbi54eSgpKSk7CiAgICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9pbnQgb2Zmc2V0IGZy
b20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkgei4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291
cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdo
dFNvdXJjZS5oCmluZGV4IDM1MTUxNjM1MDc3ZWVmMGU3M2MyNmFlNDQyYTVlYTUzNGZkMWYzYmYu
LjJlZGQ5MzA5OWQ5NzI4MmIwNmQ3YzE5ZTc3MjdkNzVkNjQyZTljNTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRT
b3VyY2UuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRTcGVjdWxhckV4
cG9uZW50KGZsb2F0KSBvdmVycmlkZTsKICAgICBib29sIHNldExpbWl0aW5nQ29uZUFuZ2xlKGZs
b2F0KSBvdmVycmlkZTsKIAotICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJF
ZmZlY3QmLCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsKKyAgICB2b2lkIGluaXRQYWludGluZ0Rh
dGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgQ29tcHV0ZWRMaWdodGluZ0RhdGEgY29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBh
aW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QgZmluYWw7CiAKICAgICBX
VEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikg
Y29uc3Qgb3ZlcnJpZGU7CkBAIC02OCw3ICs2OCw3IEBAIHByaXZhdGU6CiAgICAgRmxvYXRQb2lu
dDNEIG1fdXNlclNwYWNlUG9zaXRpb247CiAgICAgRmxvYXRQb2ludDNEIG1fdXNlclNwYWNlUG9p
bnRzQXQ7CiAKLSAgICBGbG9hdFBvaW50M0QgbV9idWZmZXJQb3NpdGlvbjsKKyAgICBtdXRhYmxl
IEZsb2F0UG9pbnQzRCBtX2J1ZmZlclBvc2l0aW9uOwogCiAgICAgZmxvYXQgbV9zcGVjdWxhckV4
cG9uZW50OwogICAgIGZsb2F0IG1fbGltaXRpbmdDb25lQW5nbGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCmluZGV4IDNmZWNmMWYz
NDRlMWM3ZjZhNmEyYTYwOTExOTUyMTg0YjYxNmQ2MzIuLmM3NTljOWE4YzU2ZGJlYjM3NWRlMzdm
NjU3NTVjOTg2MDFmNjg0MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiU1ZH
RkVJbWFnZS5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
QXBwbGllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtNzQsMjkgKzc1LDM5IEBAIHZvaWQgRkVJbWFnZTo6ZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChpbWFnZVJlY3QpKTsKIH0KIAotYm9vbCBG
RUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCisvLyBG
SVhNRTogTW92ZSB0aGUgY2xhc3MgRkVJbWFnZVNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBz
b3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFSW1hZ2VTb2Z0d2FyZUFwcGxpZXIgOiBw
dWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFSW1hZ2U+IHsKKyAgICB1c2luZyBC
YXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFSW1hZ2U+OworCitwdWJsaWM6Cisg
ICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworfTsKKworYm9v
bCBGRUltYWdlU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29u
c3QgRmlsdGVyRWZmZWN0VmVjdG9yJikKIHsKLSAgICBhdXRvIHJlc3VsdEltYWdlID0gaW1hZ2VC
dWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpOworICAgIGF1dG8gcHJpbWl0aXZlU3VicmVnaW9uID0gbV9lZmZlY3QuZmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKCk7CiAgICAgYXV0byYgY29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0
KCk7CiAKLSAgICBXVEY6OnN3aXRjaE9uKG1fc291cmNlSW1hZ2UsCisgICAgV1RGOjpzd2l0Y2hP
bihtX2VmZmVjdC5zb3VyY2VJbWFnZSgpLAogICAgICAgICBbJl0gKGNvbnN0IFJlZjxJbWFnZT4m
IGltYWdlKSB7CiAgICAgICAgICAgICBhdXRvIGltYWdlUmVjdCA9IHByaW1pdGl2ZVN1YnJlZ2lv
bjsKLSAgICAgICAgICAgIGF1dG8gc3JjUmVjdCA9IG1fc291cmNlSW1hZ2VSZWN0OwotICAgICAg
ICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLnRyYW5zZm9ybVJlY3QoaW1hZ2VSZWN0LCBzcmNS
ZWN0KTsKKyAgICAgICAgICAgIGF1dG8gc3JjUmVjdCA9IG1fZWZmZWN0LnNvdXJjZUltYWdlUmVj
dCgpOworICAgICAgICAgICAgbV9lZmZlY3QucHJlc2VydmVBc3BlY3RSYXRpbygpLnRyYW5zZm9y
bVJlY3QoaW1hZ2VSZWN0LCBzcmNSZWN0KTsKICAgICAgICAgICAgIGltYWdlUmVjdC5zY2FsZShm
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICBpbWFnZVJlY3QgPSBkcmF3aW5nUmVn
aW9uT2ZJbnB1dEltYWdlKEludFJlY3QoaW1hZ2VSZWN0KSk7CisgICAgICAgICAgICBpbWFnZVJl
Y3QgPSBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKEludFJlY3QoaW1hZ2VSZWN0
KSk7CiAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgaW1hZ2VSZWN0LCBzcmNS
ZWN0KTsKICAgICAgICAgfSwKICAgICAgICAgWyZdIChjb25zdCBSZWY8SW1hZ2VCdWZmZXI+JiBp
bWFnZUJ1ZmZlcikgewogICAgICAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBwcmltaXRpdmVTdWJy
ZWdpb247Ci0gICAgICAgICAgICBpbWFnZVJlY3QubW92ZUJ5KG1fc291cmNlSW1hZ2VSZWN0Lmxv
Y2F0aW9uKCkpOworICAgICAgICAgICAgaW1hZ2VSZWN0Lm1vdmVCeShtX2VmZmVjdC5zb3VyY2VJ
bWFnZVJlY3QoKS5sb2NhdGlvbigpKTsKICAgICAgICAgICAgIGltYWdlUmVjdC5zY2FsZShmaWx0
ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICBpbWFnZVJlY3QgPSBkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKEludFJlY3QoaW1hZ2VSZWN0KSk7CisgICAgICAgICAgICBpbWFnZVJlY3Qg
PSBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKEludFJlY3QoaW1hZ2VSZWN0KSk7
CiAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgaW1hZ2VS
ZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICB9CiAgICAgKTsKQEAgLTEwNCw2ICsxMTUsMTEgQEAg
Ym9vbCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRUltYWdlU29mdHdhcmVB
cHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogVGV4dFN0
cmVhbSYgRkVJbWFnZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVw
cmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVu
dCA8PCAiW2ZlSW1hZ2UiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVJbWFnZS5oCmluZGV4IGRhN2U0N2JkMThmNTQ0YTJlNTIzNzcxZDIzOTI3ZDcyMmE5
OWFiNWMuLjM3NTU3YTk2ZGNhYmUwZjgwMDI1YjA4MGFlNzE3MjczMmMyYTJhNWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKQEAgLTQx
LDYgKzQxLDkgQEAgcHVibGljOgogICAgIFNvdXJjZUltYWdlJiBzb3VyY2VJbWFnZSgpIHsgcmV0
dXJuIG1fc291cmNlSW1hZ2U7IH0KICAgICB2b2lkIHNldEltYWdlU291cmNlKFNvdXJjZUltYWdl
JiYgc291cmNlSW1hZ2UpIHsgbV9zb3VyY2VJbWFnZSA9IFdURk1vdmUoc291cmNlSW1hZ2UpOyB9
CiAKKyAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2VJbWFnZVJlY3Q7IH0KKyAgICBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHBy
ZXNlcnZlQXNwZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBtX3ByZXNlcnZlQXNwZWN0UmF0aW87
IH0KKwogcHJpdmF0ZToKICAgICBGRUltYWdlKFNvdXJjZUltYWdlJiYsIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsK
IAo=
</data>
<flag name="commit-queue"
          id="470181"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445047</attachid>
            <date>2021-11-23 13:15:55 -0800</date>
            <delta_ts>2021-11-23 14:07:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232832-20211123131554.patch</filename>
            <type>text/plain</type>
            <size>216304</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTYwZGJlNjNmYjA0ZTM1
ZjBiZDk4OTc3M2UzNWM3ZDNmZGJkMTdlMC4uM2M3NWFmYjlhMjkwZjIyYTYwYzg2NDFkNThiM2Q2
NjdiNDNkY2E1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0NyBAQAorMjAyMS0xMS0yMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1vdmUgdGhlIHNvZnR3YXJlIEZpbHRlckVmZmVjdCBmdW5jdGlvbnMgdG8gc2VwYXJhdGUgYXBw
bGllciBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzI4MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHN0ZXAgaXMgcmVxdWlyZWQgdG8gbW92ZSB0aGUgRmlsdGVyRWZmZWN0IHNvZnR3
YXJlIGNvZGUgdG8gc2VwYXJhdGUKKyAgICAgICAgZmlsZXMuIFNpbmNlIHRoZSBGaWx0ZXJFZmZl
Y3QgY2FuIGJlIGFwcGxpZWQgd2l0aCB0aGUgYWNjZWxlcmF0ZWQgQ29yZUltYWdlCisgICAgICAg
IG9yIHRoZSB1bmFjY2VsZXJhdGVkIHNvZnR3YXJlIG1ldGhvZHMsIGl0IG1ha2Ugc2Vuc2UgdG8g
cmVtb3ZlIHRoZSBzb2Z0d2FyZQorICAgICAgICBjb2RlIGZyb20gdGhlIEZpbHRlckVmZmVjdCBj
bGFzc2VzLgorCisgICAgICAgIFRoZSBwbGFuIGlzIHRvIGhhdmUgdGhlIHNvZnR3YXJlIGNvZGUg
aW4gc2VwYXJhdGUgZmlsZXMuIEVhY2ggRmlsdGVyRWZmZWN0CisgICAgICAgIHdpbGwgYmUgYXNr
ZWQgdG8gY3JlYXRlIGFuIGFwcGxpZXIgd2hpY2ggY2FuIGJlIFNvZnR3YXJlQXBwbGllciBvcgor
ICAgICAgICBDb3JlSW1hZ2VBcHBsaWVyLiBUaGlzIGFwcGxpZXIgd2lsbCBiZSBnaXZlbiB0byBG
aWx0ZXJFZmZlY3Q6OmFwcGx5KCkKKyAgICAgICAgd2hpY2ggd2lsbCBwYXNzIHRoZSBpbnB1dCBp
bWFnZXMgdG8gdGhlIGFwcGx5KCkgbWV0aG9kIG9mIHRoZSBhcHBsaWVyIHRvCisgICAgICAgIGdl
dCB0aGUgcmVzdWx0IGltYWdlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExp
Z2h0U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3RhbnRMaWdodFNvdXJjZTo6aW5p
dFBhaW50aW5nRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXN0YW50TGlnaHRTb3Vy
Y2U6OmluaXRQYWludGluZ0RhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmRTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlU2F0dXJhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6
OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6Om1hdHJpeCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0
ZUFuZEh1ZVJvdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyOjpsdW1pbmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxh
dGZvcm1VbmFjY2VsZXJhdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNv
cmU6Om1hdHJpeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1ZVJv
dGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsdW1pbmFuY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVyYXRlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjplZmZlY3RUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKTog
RGVsZXRlZC4KKyAgICAgICAgTW92ZSBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoKSBhbmQg
Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cygpIGZyb20KKyAgICAgICAgdGhlIGhlYWRlciBm
aWxlIHRvIHRoZSBzb3VyY2UgZmlsZS4gTW92ZSBjaG9vc2luZyB0aGUgY2FsY3VsYXRpb24gbW9k
ZSBmb3IKKyAgICAgICAgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCBmcm9tIGVmZmVjdEFwcGx5
QWNjZWxlcmF0ZWQoKSB0byBhcHBseVBsYXRmb3JtKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUlkZW50aXR5VGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGll
cjo6Y29tcHV0ZVRhYnVsYXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlRGlzY3JldGVUYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlTGluZWFy
VGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6Y29tcHV0ZUdhbW1hVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUxvb2t1cFRhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxp
bmVhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVHYW1tYVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAg
ICBJbnN0ZWFkIG9mIGNhbGxpbmcgY29tcHV0ZUxvb2t1cFRhYmxlcygpIHRvIGluaXRpYWxpemUg
dGhlIGZvdXIgbG9va3VwCisgICAgICAgIHRhYmxlcywgY2FsbCBjb21wdXRlTG9va3VwVGFibGUo
KSBmb3VyIHRpbWVzOiBvbmUgZm9yIGVhY2ggY29sb3IgY2hhbm5lbC4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjbGFtcEJ5dGUpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVBcml0aG1ldGljUGl4
ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21w
dXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBv
c2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFyaXRobWV0aWMpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5QXJpdGhtZXRpYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlOb25Bcml0
aG1ldGljKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjph
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wQnl0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKTogRGVsZXRlZC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpjbGFt
cFJHQkFWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVB
cHBsaWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpnZXRQaXhlbFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldEludGVyaW9yUGl4ZWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldE91
dGVyUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2
ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNs
YW1wUkdCQVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNldERlc3RpbmF0aW9u
UGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmZh
c3RTZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpnZXRQaXhlbFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
Lmg6CisgICAgICAgIEFkZCB0aGUgbWVtYmVycyBvZiBGRUNvbnZvbHZlTWF0cml4IHRvIFBhaW50
aW5nRGF0YS4gUmVtb3ZlIHRoZSB0ZW1wbGF0ZQorICAgICAgICBmdW5jdGlvbnMgYW5kIHRoZSBN
U1ZDIHdhcm5pbmcuIEp1c3QgaWdub3JlIHRoZSBhbHBoYSBjaGFubmVsIGlmIAorICAgICAgICBw
cmVzZXJ2ZUFscGhhVmFsdWVzIGlzIHRydWUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlm
ZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6CisgICAgICAgIE5vIG5lZWQgdG8gcGFz
cyBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcgd2hlbiBjcmVhdGluZyBGRURpZmZ1c2VMaWdo
dGluZy4KKyAgICAgICAgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZyBpcyBh
bHJlYWR5IHBhc3NlZCB0byBGRUxpZ2h0aW5nLiAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OmJ5dGVPZmZzZXRPZlBpeGVsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjp4Q2hhbm5lbElu
ZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVB
cHBsaWVyOjp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxh
Y2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGll
cik6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6
YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpieXRlT2Zmc2V0T2ZQaXhlbCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5oOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsSW5kZXgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnlD
aGFubmVsSW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRv
d1NvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kU29mdHdhcmVBcHBs
aWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2xh
bXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2Fs
Y3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdh
dXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6a2VybmVsUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBbHBoYU9ubHkpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXIp
OgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJs
dXJBY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJHZW5lcmljKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyV29ya2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKGdhdXNzaWFuS2VybmVsRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Omtlcm5lbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJv
eEJsdXJBbHBoYU9ubHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpzdGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5C
bHVyLmg6CisgICAgICAgIEFkZCB0aGUgdHdvIG1lbWJlcnMgJ2lzQWxwaGFJbWFnZScgYW5kICdl
ZGdlTW9kZScgdG8gQXBwbHlQYXJhbWV0ZXJzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6QWxwaGFXaW5kb3c6OnRvcExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmJvdHRvbUxl
ZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6
QWxwaGFXaW5kb3c6OnRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6Y2VudGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93Ojpib3R0b20gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5k
b3c6OnNldFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdT
b2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNldFRvcFJpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93
OjpzZXRSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNoaWZ0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzaGlmdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6
OnRvcExlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3
YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSaWdo
dE5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBs
aWVyOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5v
cm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5v
cm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9y
bWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6
OnNldFBpeGVsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6c2V0UGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
R2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRv
cExlZnROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6Omxl
ZnRDb2x1bW5Ob3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFs
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5n
RGF0YTo6Ym90dG9tTGVmdE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJp
Z2h0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldFBpeGVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldFBp
eGVsSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxh
dGZvcm1BcHBseUdlbmVyaWNQYWludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpsaWdodGluZ0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnNwZWN1bGFyRXhwb25lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcExlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OnRvcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBo
YVdpbmRvdzo6Y2VudGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmc6OkFscGhhV2luZG93Ojpib3R0b20gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRv
cFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2lu
ZG93OjpzZXRSaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpB
bHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNoaWZ0Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzaGlmdCk6IERlbGV0ZWQuCisgICAgICAg
IE1vdmUgZmlsaW5nIHRoZSBzdHJ1Y3R1cmUgTGlnaHRpbmdEYXRhIGZyb20gRkVMaWdodGluZzo6
ZHJhd0xpZ2h0aW5nKCkKKyAgICAgICAgdG8gRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBw
bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6cGl4ZWxBcnJheUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWFrZVBpeGVsVmFs
dWVGcm9tQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllcjo6bWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWluT3JNYXgpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpjb2x1bW5FeHRyZW11
bSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Omtlcm5l
bEV4dHJlbXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
cjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5
U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtl
Q29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbHVtbkV4
dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omtlcm5lbEV4dHJlbXVtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVy
aWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxh
dGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oOgorICAgICAgICBSZW1vdmUgdGhlIHRlbXBsYXRl
IGZ1bmN0aW9ucyBhbmQganVzdCB0aGUgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBhcyBhbgorICAg
ICAgICBhcmd1bWVudCB0byB0aGVzZSBmdW5jdGlvbnMuICBSZXBsYWNlIHBsYXRmb3JtQXBwbHlE
ZWdlbmVyYXRlKCkgd2l0aCBhCisgICAgICAgIGNhbGwgdG8gaXNEZWdlbmVyYXRlKCkgYW5kIG1v
dmUgdGhlIGNhbGwgdG8gY29weVByZW11bHRpcGxpZWRSZXN1bHQoKSB0byAKKyAgICAgICAgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0U29mdHdhcmVBcHBs
aWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxh
ckxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVT
cGVjdWxhckxpZ2h0aW5nKToKKyAgICAgICAgTm8gbmVlZCB0byBwYXNzIEZFTGlnaHRpbmc6OlNw
ZWN1bGFyTGlnaHRpbmcgd2hlbiBjcmVhdGluZyBGRURpZmZ1c2VMaWdodGluZy4KKyAgICAgICAg
RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcgaXMgYWxyZWFkeSBwYXNzZWQg
dG8gRkVMaWdodGluZy4gCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6UGFpbnRpbmdEYXRh
OjpyYW5kb20pOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
OjpzbW9vdGhDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFw
cGxpZXI6OmxpbmVhckludGVycG9sYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxl
bmNlU29mdHdhcmVBcHBsaWVyOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZVN0aXRjaGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6Om5vaXNlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjp0b0ludEJhc2VkQ29sb3JD
b21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGll
cjo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1X
b3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0Rh
dGE6OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVy
YnVsZW5jZTo6ZmlsbFJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgTW92ZSB0aGUgdGhyZWFkaW5nIGNvZGUgZnJvbSBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSB0
byBhIG5ldyBmdW5jdGlvbgorICAgICAgICBjYWxsZWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBs
aWVyOjphcHBseVBsYXRmb3JtKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpub3Jt
YWxpemVkRmxvYXRzKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSBub3JtYWxpemVkRmxvYXRzKCkg
ZnJvbSBGaWx0ZXJFZmZlY3QgdG8gRkVDb2xvck1hdHJpeC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBwbGllci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjo6RmlsdGVyRWZmZWN0Q29uY3Jl
dGVBcHBsaWVyKToKKyAgICAgICAgSW50cm9kdWNlIHRoaXMgY2xhc3Mgd2hpY2ggd2lsbCBiZSB0
aGUgYmFzZSBjbGFzcyBvZiBhbGwgdGhlIHNvZnR3YXJlIGFuZAorICAgICAgICB0aGUgQ29yZUlt
YWdlIEZpbHRlckVmZmVjdCBhcHBsaWVycy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvTGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9pbnRMaWdodFNv
dXJjZTo6aW5pdFBhaW50aW5nRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQb2ludExp
Z2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaDoKKyAgICAgICAgTWFrZSBpbml0
UGFpbnRpbmdEYXRhKCkgYmUgYSBjb25zdGFudCBmdW5jdGlvbi4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaDoKKyAgICAgICAg
TWFrZSBpbml0UGFpbnRpbmdEYXRhKCkgYmUgYSBjb25zdGFudCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVJbWFnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVJ
bWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmg6CisKIDIwMjEtMTEtMjMgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fp
ZEBhcHBsZS5jb20+CiAKICAgICAgICAgW0dQVSBQcm9jZXNzXSBSZWZhY3RvciB0aGUgRmlsdGVy
RWZmZWN0IHJlc3VsdCBidWZmZXJzIGludG8gYSBuZXcgY2xhc3MgbmFtZWQgJ0ZpbHRlckltYWdl
JwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDdiNGQyMWRhOWIyZjRkODU1YTgxM2NhOWE5MTNlNWIyODc0MDE2ZjAuLjI4NmM5MzQ5
YjEyMjE5NzljODk5NjlkMWIxYjA5NjIxNDAwMDNjMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwODk2LDYgKzEwODk2LDcg
QEAKIAkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9k
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQTlGMjc0QzVDQzcwMEUyQTg4RSAv
KiBGaWx0ZXJFZmZlY3RBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckVmZmVjdEFwcGxp
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTQyM0UxNzMyNzAwOEQ3
NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyog
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
bGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTk0
Miw2ICsyNTk0Myw3IEBACiAJCQkJODQ1RTcyRjcwRkQyNjFFRTAwQTg3RDc5IC8qIEZpbHRlci5o
ICovLAogCQkJCTA4QzkyNTE3MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuY3BwICov
LAogCQkJCTA4QzkyNTE4MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0ZXJFZmZlY3QuaCAqLywKKwkJ
CQk3MkExM0E5RjI3NEM1Q0M3MDBFMkE4OEUgLyogRmlsdGVyRWZmZWN0QXBwbGllci5oICovLAog
CQkJCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAg
Ki8sCiAJCQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVy
LmggKi8sCiAJCQkJNzIxNEI5QjcyNzQ0NThGQTAwM0JFNkRGIC8qIEZpbHRlckVmZmVjdFZlY3Rv
ci5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwCmluZGV4IGU1ZmIxZmY2NjVkM2Vi
MDdmNDhlZTFkMDJiYmZmY2M2YjA0NDFmODkuLjg5NDdhOTg2MGU0NmIxMWM1OGUyNzc1MzYyNTZm
ZGI5ZDUxZDE1NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM1LDcgKzM1
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6
aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSkKK3ZvaWQgRGlzdGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKGNvbnN0
IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKSBjb25zdAogewogICAg
IGZsb2F0IGF6aW11dGggPSBkZWcycmFkKG1fYXppbXV0aCk7CiAgICAgZmxvYXQgZWxldmF0aW9u
ID0gZGVnMnJhZChtX2VsZXZhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuaAppbmRleCBj
MWUzMGVkZTc1OTgzNzI4YTYzMmJjY2ZmYjA5OTczYTNhNGU3MmZkLi4zMDE5MmIwZWYwY2QxYmY0
MDNkNDIzMzhjZTQwODc3MThkNzUxNzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmgKQEAg
LTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0QXppbXV0aChmbG9hdCkgb3ZlcnJp
ZGU7CiAgICAgYm9vbCBzZXRFbGV2YXRpb24oZmxvYXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBp
bml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJy
aWRlOworICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWlu
dGluZ0RhdGEmKSBjb25zdCBvdmVycmlkZTsKICAgICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21w
dXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBm
bG9hdCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCmluZGV4
IGM5MWFhM2Q2OGQ1ZGZmNTMzOTFmZTBkN2Q5OGI3OWE2YjZkNTI4NmQuLmQyY2FiYmE5Zjg2YWIz
MzIwZWMyM2UwNWQ3ZmE1N2FhM2E0ZDQyYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtMjYsMTAgKzI2LDEwIEBA
CiAjaW5jbHVkZSAiRkVCbGVuZC5oIgogCiAjaW5jbHVkZSAiRkVCbGVuZE5FT04uaCIKKyNpbmNs
dWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUzLDEzICs1Mywy
MyBAQCBib29sIEZFQmxlbmQ6OnNldEJsZW5kTW9kZShCbGVuZE1vZGUgbW9kZSkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFQmxlbmRTb2Z0d2FyZUFw
cGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUJsZW5k
U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUJs
ZW5kPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUJs
ZW5kPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5
KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBv
dmVycmlkZTsKK307CisKICNpZiAhSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotYm9vbCBGRUJs
ZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK2Jvb2wgRkVCbGVuZFNv
ZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVj
dG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0
KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CisgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlu
MiA9IGlucHV0RWZmZWN0c1sxXS5nZXQoKTsKIAotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFn
ZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1
ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtNjksMTIgKzc5LDE3IEBAIGJvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEdyYXBoaWNz
Q29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgZmls
dGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXpl
KCkgfSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3ZlciwgbV9tb2RlIH0pOworICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgZmls
dGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5n
UmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdl
QnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIs
IG1fZWZmZWN0LmJsZW5kTW9kZSgpIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCiAK
K2Jvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQoreworICAgIHJldHVybiBGRUJsZW5kU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0
ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogVGV4dFN0cmVhbSYgRkVCbGVuZDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2Vu
dGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlQmxlbmQiOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5jcHAKaW5kZXggNWE5MWM0ZWNjNDRmYzc3YWJmZmQ0OWQ3ZDE2OTdkYzE0ZjkyYjY3
NC4uMTAyMzdiYTlkY2MyNDFmZGUxNGYzMTIzZGM2NDg2M2IyMjZiZGYzNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRkVDb2xvck1hdHJpeC5oIgogCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAj
aW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKQEAgLTYzLDMyICs2NCwxMDMgQEAgYm9vbCBGRUNvbG9y
TWF0cml4OjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiAmdmFsdWVzKQogICAgIHJldHVy
biB0cnVlOwogfQogCi1pbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVu
LCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMp
Cit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCog
Y29tcG9uZW50cywgZmxvYXQgdmFsdWUpCit7CisgICAgY29tcG9uZW50c1swXSA9ICgwLjIxMyAr
IDAuNzg3ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAwLjcxNSAqIHZh
bHVlKTsKKyAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7CisgICAg
Y29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOworICAgIGNvbXBvbmVudHNb
NF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzVdID0gKDAuMDcy
IC0gMC4wNzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAtIDAuMjEzICog
dmFsdWUpOworICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKKyAg
ICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7Cit9CisKK3ZvaWQgRkVD
b2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50
cywgZmxvYXQgdmFsdWUpCit7CisgICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9h
dCAvIDE4MCk7CisgICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7
CisgICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAw
LjIxMzsKKyAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1
ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsg
c2luSHVlICogMC45Mjg7CisgICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4y
MTMgKyBzaW5IdWUgKiAwLjE0MzsKKyAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUg
KiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQwOworICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNv
c0h1ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7CisgICAgY29tcG9uZW50c1s2XSA9IDAuMjEz
IC0gY29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKKyAgICBjb21wb25lbnRzWzddID0g
MC43MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNb
OF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7Cit9CisKK1ZlY3Rv
cjxmbG9hdD4gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8Zmxv
YXQ+JiB2YWx1ZXMpCit7CisgICAgVmVjdG9yPGZsb2F0PiBub3JtYWxpemVkVmFsdWVzKHZhbHVl
cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytp
KQorICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFsaXplZEZsb2F0KHZhbHVlc1tp
XSk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Cit9CisKKy8vIEZJWE1FOiBNb3ZlIHRo
ZSBjbGFzcyBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBh
bmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllciA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb2xvck1hdHJpeD4geworICAgIHVz
aW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb2xvck1hdHJpeD47CisK
K3B1YmxpYzoKKyAgICBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyKEZFQ29sb3JNYXRyaXgm
KTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVj
dG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGlubGluZSB2b2lk
IG1hdHJpeChmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxw
aGEpIGNvbnN0OworICAgIGlubGluZSB2b2lkIHNhdHVyYXRlQW5kSHVlUm90YXRlKGZsb2F0JiBy
ZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUpIGNvbnN0OworICAgIGlubGluZSB2b2lkIGx1
bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxw
aGEpIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgdm9pZCBhcHBseVBsYXRmb3Jt
QWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImKSBjb25zdDsKKyNlbmRpZgorICAgIHZvaWQgYXBwbHlQ
bGF0Zm9ybVVuYWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImKSBjb25zdDsKKworICAgIHZvaWQgYXBw
bHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYpIGNvbnN0OworCisgICAgZmxvYXQgbV9jb21wb25lbnRz
WzldOworfTsKKworRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6RkVDb2xvck1hdHJpeFNv
ZnR3YXJlQXBwbGllcihGRUNvbG9yTWF0cml4JiBlZmZlY3QpCisgICAgOiBCYXNlKGVmZmVjdCkK
K3sKKyAgICBpZiAobV9lZmZlY3QudHlwZSgpID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFU
RSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKG1f
Y29tcG9uZW50cywgbV9lZmZlY3QudmFsdWVzKClbMF0pOworICAgIGVsc2UgaWYgKG1fZWZmZWN0
LnR5cGUoKSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQorICAgICAgICBGRUNvbG9y
TWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKG1fY29tcG9uZW50cywgbV9lZmZl
Y3QudmFsdWVzKClbMF0pOworfQorCitpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVB
cHBsaWVyOjptYXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxv
YXQmIGFscGhhKSBjb25zdAogewogICAgIGZsb2F0IHIgPSByZWQ7CiAgICAgZmxvYXQgZyA9IGdy
ZWVuOwogICAgIGZsb2F0IGIgPSBibHVlOwogICAgIGZsb2F0IGEgPSBhbHBoYTsKIAotICAgIHJl
ZCAgICAgPSB2YWx1ZXNbIDBdICogciArIHZhbHVlc1sgMV0gKiBnICsgdmFsdWVzWyAyXSAqIGIg
KyB2YWx1ZXNbIDNdICogYSArIHZhbHVlc1sgNF0gKiAyNTU7Ci0gICAgZ3JlZW4gICA9IHZhbHVl
c1sgNV0gKiByICsgdmFsdWVzWyA2XSAqIGcgKyB2YWx1ZXMgWzddICogYiArIHZhbHVlc1sgOF0g
KiBhICsgdmFsdWVzWyA5XSAqIDI1NTsKLSAgICBibHVlICAgID0gdmFsdWVzWzEwXSAqIHIgKyB2
YWx1ZXNbMTFdICogZyArIHZhbHVlc1sxMl0gKiBiICsgdmFsdWVzWzEzXSAqIGEgKyB2YWx1ZXNb
MTRdICogMjU1OwotICAgIGFscGhhICAgPSB2YWx1ZXNbMTVdICogciArIHZhbHVlc1sxNl0gKiBn
ICsgdmFsdWVzWzE3XSAqIGIgKyB2YWx1ZXNbMThdICogYSArIHZhbHVlc1sxOV0gKiAyNTU7Cisg
ICAgY29uc3QgYXV0byYgdmFsdWVzID0gbV9lZmZlY3QudmFsdWVzKCk7CisKKyAgICByZWQgICA9
IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2YWx1ZXNbIDJdICogYiArIHZhbHVl
c1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKKyAgICBncmVlbiA9IHZhbHVlc1sgNV0gKiBy
ICsgdmFsdWVzWyA2XSAqIGcgKyB2YWx1ZXNbIDddICogYiArIHZhbHVlc1sgOF0gKiBhICsgdmFs
dWVzWyA5XSAqIDI1NTsKKyAgICBibHVlICA9IHZhbHVlc1sxMF0gKiByICsgdmFsdWVzWzExXSAq
IGcgKyB2YWx1ZXNbMTJdICogYiArIHZhbHVlc1sxM10gKiBhICsgdmFsdWVzWzE0XSAqIDI1NTsK
KyAgICBhbHBoYSA9IHZhbHVlc1sxNV0gKiByICsgdmFsdWVzWzE2XSAqIGcgKyB2YWx1ZXNbMTdd
ICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVzWzE5XSAqIDI1NTsKIH0KIAotaW5saW5lIHZv
aWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYg
Ymx1ZSwgY29uc3QgZmxvYXQqIGNvbXBvbmVudHMpCitpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4
U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYg
Z3JlZW4sIGZsb2F0JiBibHVlKSBjb25zdAogewogICAgIGZsb2F0IHIgPSByZWQ7CiAgICAgZmxv
YXQgZyA9IGdyZWVuOwogICAgIGZsb2F0IGIgPSBibHVlOwogCi0gICAgcmVkICAgICA9IHIgKiBj
b21wb25lbnRzWzBdICsgZyAqIGNvbXBvbmVudHNbMV0gKyBiICogY29tcG9uZW50c1syXTsKLSAg
ICBncmVlbiAgID0gciAqIGNvbXBvbmVudHNbM10gKyBnICogY29tcG9uZW50c1s0XSArIGIgKiBj
b21wb25lbnRzWzVdOwotICAgIGJsdWUgICAgPSByICogY29tcG9uZW50c1s2XSArIGcgKiBjb21w
b25lbnRzWzddICsgYiAqIGNvbXBvbmVudHNbOF07CisgICAgcmVkICAgICA9IHIgKiBtX2NvbXBv
bmVudHNbMF0gKyBnICogbV9jb21wb25lbnRzWzFdICsgYiAqIG1fY29tcG9uZW50c1syXTsKKyAg
ICBncmVlbiAgID0gciAqIG1fY29tcG9uZW50c1szXSArIGcgKiBtX2NvbXBvbmVudHNbNF0gKyBi
ICogbV9jb21wb25lbnRzWzVdOworICAgIGJsdWUgICAgPSByICogbV9jb21wb25lbnRzWzZdICsg
ZyAqIG1fY29tcG9uZW50c1s3XSArIGIgKiBtX2NvbXBvbmVudHNbOF07CiB9CiAKIC8vIEZJWE1F
OiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWluYW5jZSguLi4pIGZ1bmN0aW9uIGluIENvbG9yTHVt
aW5hbmNlLmguCi1pbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVu
LCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKQoraW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeFNv
ZnR3YXJlQXBwbGllcjo6bHVtaW5hbmNlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQm
IGJsdWUsIGZsb2F0JiBhbHBoYSkgY29uc3QKIHsKICAgICBhbHBoYSA9IDAuMjEyNSAqIHJlZCAr
IDAuNzE1NCAqIGdyZWVuICsgMC4wNzIxICogYmx1ZTsKICAgICByZWQgPSAwOwpAQCAtOTcsMTgg
KzE2OSwxMyBAQCBpbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVu
LCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKQogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCi10
ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KLWJvb2wgZWZmZWN0QXBwbHlBY2Nl
bGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0
PiYgdmFsdWVzLCBmbG9hdCBjb21wb25lbnRzWzldLCBJbnRTaXplIGJ1ZmZlclNpemUpCit2b2lk
IEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChQ
aXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNvbnN0CiB7CisgICAgYXV0byYgcGl4ZWxBcnJheSA9
IHBpeGVsQnVmZmVyLmRhdGEoKTsKKyAgICBhdXRvIGJ1ZmZlclNpemUgPSBwaXhlbEJ1ZmZlci5z
aXplKCk7CisKICAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgoKSA9PSBidWZmZXJTaXplLmFy
ZWEoKSAqIDQpOwogICAgIAotICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQ
RV9NQVRSSVgpIHsKLSAgICAgICAgLy8gdkltYWdlTWF0cml4TXVsdGlwbHlfQVJHQjg4ODggdGFr
ZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBG
RUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKLSAgICAgICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFj
ayB0byBub24tdkltYWdlIGNvZGUuCi0gICAgICAgIGlmICh2YWx1ZXNbNF0gIT0gMCB8fCB2YWx1
ZXNbOV0gIT0gMCB8fCB2YWx1ZXNbMTRdICE9IDAgfHwgdmFsdWVzWzE5XSAhPSAwKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIGNvbnN0IGludDMyX3QgZGl2aXNvciA9
IDI1NjsKICAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS5kYXRhKCk7CiAKQEAgLTEyNCw4
ICsxOTEsMTMgQEAgYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5
JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JgogICAgIGRlc3Qucm93Qnl0ZXMgPSBi
dWZmZXJTaXplLndpZHRoKCkgKiA0OwogICAgIGRlc3QuZGF0YSA9IGRhdGE7CiAKLSAgICBzd2l0
Y2ggKGZpbHRlclR5cGUpIHsKKyAgICBzd2l0Y2ggKG1fZWZmZWN0LnR5cGUoKSkgeworICAgIGNh
c2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIGJyZWFrOworCiAgICAgY2Fz
ZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7CisgICAgICAgIGNvbnN0IGF1dG8mIHZhbHVl
cyA9IG1fZWZmZWN0LnZhbHVlcygpOworCiAgICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQg
KiA0XSA9IHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNb
IDBdICogZGl2aXNvcikpLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCkBAIC0xNTQsMTkgKzIyNiwxOSBAQCBib29sIGVmZmVj
dEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mCiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU6CiAgICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7CiAgICAgICAgIGNvbnN0IGludDE2
X3QgbWF0cml4WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZihjb21wb25lbnRzWzBdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbM10gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s2XSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbMF0gKiBk
aXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21w
b25lbnRzWzNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4o
cm91bmRmKG1fY29tcG9uZW50c1s2XSAqIGRpdmlzb3IpKSwKICAgICAgICAgICAgIDAsCiAKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzFdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVu
dHNbNF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYoY29tcG9uZW50c1s3XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbMV0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21wb25lbnRzWzRdICogZGl2aXNvcikpLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s3XSAq
IGRpdmlzb3IpKSwKICAgICAgICAgICAgIDAsCiAKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzJdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbNV0gKiBkaXZpc29yKSksCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s4XSAqIGRpdmlz
b3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVu
dHNbMl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYobV9jb21wb25lbnRzWzVdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s4XSAqIGRpdmlzb3IpKSwKICAgICAgICAgICAg
IDAsCiAKICAgICAgICAgICAgIDAsCkBAIC0yMDMsMzggKzI3NSwyNSBAQCBib29sIGVmZmVjdEFw
cGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3Rv
cjxmbG9hdD4mCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IHRydWU7CiB9CiAjZW5kaWYKIAotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+
Ci12b2lkIGVmZmVjdFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXplKQordm9pZCBGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtVW5hY2NlbGVyYXRlZChQaXhlbEJ1ZmZl
ciYgcGl4ZWxCdWZmZXIpIGNvbnN0CiB7Ci0gICAgZmxvYXQgY29tcG9uZW50c1s5XTsKLQotICAg
IGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSkKLSAgICAgICAg
RkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZh
bHVlc1swXSk7Ci0gICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZUEVf
SFVFUk9UQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21w
b25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0KKyAgICBhdXRvJiBwaXhlbEFycmF5ID0g
cGl4ZWxCdWZmZXIuZGF0YSgpOwogICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhl
bEFycmF5Lmxlbmd0aCgpOwogCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgaWYgKGVmZmVjdEFw
cGx5QWNjZWxlcmF0ZWQ8ZmlsdGVyVHlwZT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBjb21wb25lbnRz
LCBidWZmZXJTaXplKSkKLSAgICAgICAgcmV0dXJuOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
YnVmZmVyU2l6ZSk7Ci0jZW5kaWYKKyAgICBzd2l0Y2ggKG1fZWZmZWN0LnR5cGUoKSkgeworICAg
IGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAgIGJyZWFrOwogCi0gICAg
c3dpdGNoIChmaWx0ZXJUeXBlKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklY
OgogICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNldCA9IDA7IHBpeGVsQnl0ZU9m
ZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNldCArPSA0KSB7CiAgICAgICAg
ICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0KTsKICAgICAg
ICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDEp
OwogICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQgKyAyKTsKICAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4ZWxBcnJheS5pdGVtKHBpeGVs
Qnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgbWF0cml4KHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhLCB2YWx1ZXMpOworICAgICAgICAgICAgbWF0cml4KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
KTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCwgcmVkKTsKICAg
ICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDEsIGdyZWVuKTsKICAg
ICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNldCArIDIsIGJsdWUpOwpAQCAt
MjQ5LDcgKzMwOCw3IEBAIHZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxB
cnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTCiAgICAgICAgICAgICBmbG9h
dCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKICAgICAgICAg
ICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CiAg
ICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQg
KyAzKTsKLSAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUs
IGNvbXBvbmVudHMpOworICAgICAgICAgICAgc2F0dXJhdGVBbmRIdWVSb3RhdGUocmVkLCBncmVl
biwgYmx1ZSk7CiAgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQsIHJl
ZCk7CiAgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAxLCBncmVl
bik7CiAgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVPZmZzZXQgKyAyLCBibHVl
KTsKQEAgLTI3Myw1MSArMzMyLDUyIEBAIHZvaWQgZWZmZWN0VHlwZShVaW50OENsYW1wZWRBcnJh
eSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRTCiAgICAgfQog
fQogCi1ib29sIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImKQordm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFBp
eGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKK3sKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAg
ICBjb25zdCBhdXRvJiB2YWx1ZXMgPSBtX2VmZmVjdC52YWx1ZXMoKTsKKworICAgIC8vIHZJbWFn
ZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYgYW55IHZhbHVl
IGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0cml4CisgICAg
Ly8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCisgICAgaWYgKG1f
ZWZmZWN0LnR5cGUoKSAhPSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYIHx8ICghdmFsdWVzWzRd
ICYmICF2YWx1ZXNbOV0gJiYgIXZhbHVlc1sxNF0gJiYgIXZhbHVlc1sxOV0pKSB7CisgICAgICAg
IGFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChwaXhlbEJ1ZmZlcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYKKyAgICBhcHBseVBsYXRmb3JtVW5hY2NlbGVyYXRlZChwaXhlbEJ1ZmZl
cik7Cit9CisKK2Jvb2wgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3Qg
RmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIGF1dG8gaW4gPSBpbnB1dEVm
ZmVjdHNbMF0uZ2V0KCk7CiAKLSAgICBhdXRvIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1
bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQo
KTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBh
dXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKGluQnVmZmVy
KQotICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZm
ZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsK
KyAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVy
LCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKSk7CiAKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgcmVzdWx0Q29sb3JT
cGFjZSgpIH07CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fZWZmZWN0LnJl
c3VsdENvbG9yU3BhY2UoKSB9OwogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJl
c3VsdEltYWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKTsKICAgICBhdXRvIHBpeGVsQnVmZmVy
ID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgaW1hZ2VSZWN0KTsKICAgICBp
ZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBwaXhl
bEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICBhdXRvIHBpeGVsQXJyYXlEaW1lbnNp
b25zID0gcGl4ZWxCdWZmZXItPnNpemUoKTsKLQotICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0g
bm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7Ci0gICAgCi0gICAgc3dpdGNoIChtX3R5cGUpIHsK
LSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVD
T0xPUk1BVFJJWF9UWVBFX01BVFJJWD4ocGl4ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGlt
ZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1NB
VFVSQVRFOiAKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEU+
KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU6Ci0gICAgICAgIGVmZmVj
dFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4ocGl4ZWxBcnJheSwgdmFsdWVzLCBw
aXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVDT0xPUk1B
VFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1B
VFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJh
eURpbWVuc2lvbnMpOwotICAgICAgICBzZXRJc0FscGhhSW1hZ2UodHJ1ZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KKyAgICBpZiAobV9lZmZlY3QudHlwZSgpID09IEZFQ09MT1JNQVRSSVhfVFlQ
RV9MVU1JTkFOQ0VUT0FMUEhBKQorICAgICAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UodHJ1
ZSk7CiAKKyAgICBhcHBseVBsYXRmb3JtKCpwaXhlbEJ1ZmZlcik7CiAgICAgcmVzdWx0SW1hZ2Ut
PnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0KTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAorYm9vbCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxp
ZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBl
JiB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCA0OTdl
YjE5NWU0MTc1ZWNkZmQwY2FiMjRjYmNkOWIwZTM5YTdmODA5Li5mNjlmMGIwMWM5NTA3ZTA1MjZl
MGQxNzdlYmJlZjk2OTAwOWNlMWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtNDQsOCArNDQsOSBA
QCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXM7IH0KICAgICBib29sIHNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7
CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZs
b2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGNh
bGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVl
KTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNv
bXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVIdWVSb3Rh
dGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7CisgICAgc3RhdGlj
IFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1
ZXMpOwogCiBwcml2YXRlOgogICAgIEZFQ29sb3JNYXRyaXgoQ29sb3JNYXRyaXhUeXBlLCBWZWN0
b3I8ZmxvYXQ+JiYpOwpAQCAtNTgsMzUgKzU5LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Zmxv
YXQ+IG1fdmFsdWVzOwogfTsKIAotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRl
U2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSkKLXsKLSAg
ICBjb21wb25lbnRzWzBdID0gKDAuMjEzICsgMC43ODcgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50
c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbMl0gPSAoMC4w
NzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzNdID0gKDAuMjEzIC0gMC4yMTMg
KiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s0XSA9ICgwLjcxNSArIDAuMjg1ICogdmFsdWUpOwot
ICAgIGNvbXBvbmVudHNbNV0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBjb21wb25l
bnRzWzZdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s3XSA9ICgw
LjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbOF0gPSAoMC4wNzIgKyAwLjky
OCAqIHZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVl
Um90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCi17Ci0gICAg
ZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgZmxvYXQgc2lu
SHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgY29tcG9uZW50c1swXSA9IDAu
MjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKLSAgICBjb21wb25lbnRzWzFd
ID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVu
dHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7Ci0gICAgY29t
cG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsKLSAg
ICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQw
OwotICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVlICog
MC4yODM7Ci0gICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgLSBzaW5I
dWUgKiAwLjc4NzsKLSAgICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAr
IHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAu
OTI4ICsgc2luSHVlICogMC4wNzI7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb2xvck1hdHJpeCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25l
bnRUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IGRmODBlMDNlZGQ3MzAwZWVlN2IwNmIzYWU0
NzgzZDcyYjY3YmM4NGQuLjE0NWE5MjUxMzMyOGY3ZmE3MzhlMzM1NDE1NjJjN2Y0YWNkODE5ZDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKIAorI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CkBAIC00NiwxOCArNDcsNDEgQEAgRkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFu
c2Zlcihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW4KIHsKIH0KIAotdm9p
ZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKQorLy8gRklYTUU6IE1vdmUgdGhlIGNs
YXNzIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNl
IGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBs
aWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUNvbXBvbmVudFRyYW5z
ZmVyPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUNv
bXBvbmVudFRyYW5zZmVyPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAg
ICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5w
dXRFZmZlY3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB1c2luZyBMb29rdXBUYWJsZSA9
IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PjsKKworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVJZGVu
dGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZURp
c2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVH
YW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYp
OworCisgICAgc3RhdGljIExvb2t1cFRhYmxlIGNvbXB1dGVMb29rdXBUYWJsZShjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisKKyAgICB2b2lkIGFwcGx5UGxhdGZvcm0oUGl4ZWxC
dWZmZXImKSBjb25zdDsKK307CisKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6Y29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJikKIHsKIH0KIAotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJT
b2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKIHsKICAg
ICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5zZmVyRnVuY3Rpb24udGFi
bGVWYWx1ZXM7CiAgICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNpemUoKTsKICAgICBpZiAo
biA8IDEpCi0gICAgICAgIHJldHVybjsgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJuOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ZG91YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAgICAgICAgIAorICAgICAgICBkb3VibGUgYyA9
IGkgLyAyNTUuMDsKICAgICAgICAgdW5zaWduZWQgayA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihj
ICogKG4gLSAxKSk7CiAgICAgICAgIGRvdWJsZSB2MSA9IHRhYmxlVmFsdWVzW2tdOwogICAgICAg
ICBkb3VibGUgdjIgPSB0YWJsZVZhbHVlc1tzdGQ6Om1pbigoayArIDEpLCAobiAtIDEpKV07CkBA
IC02Nyw3ICs5MSw3IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZVRhYnVsYXJU
YWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lCiAgICAgfQogfQogCi12b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2
YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24p
Cit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVEaXNjcmV0
ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIHRyYW5zZmVyRnVuY3Rpb24pCiB7CiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVW
YWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVzOwogICAgIHVuc2lnbmVkIG4gPSB0
YWJsZVZhbHVlcy5zaXplKCk7CkBAIC04Miw3ICsxMDYsNyBAQCB2b2lkIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENv
bXBvbgogICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlTGluZWFy
VGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYgdHJhbnNmZXJGdW5jdGlvbikKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCiB7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICBkb3VibGUgdmFs
ID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUgKiB0cmFuc2ZlckZ1bmN0aW9uLmlu
dGVyY2VwdDsKQEAgLTkxLDcgKzExNSw3IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29t
cHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVuCiAgICAg
fQogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1
cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVy
RnVuY3Rpb24pCit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1
dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0cmFu
c2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEgZG91
YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQpAQCAtMTAx
LDYxICsxMjUsNjYgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlR2FtbWFUYWJs
ZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnQKICAgICB9CiB9CiAKLWJvb2wg
RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
CitGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpMb29rdXBUYWJsZSBGRUNvbXBv
bmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlTG9va3VwVGFibGUoY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZnVuY3Rpb24pCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBp
biA9IGlucHV0RWZmZWN0KDApOworICAgIExvb2t1cFRhYmxlIHRhYmxlOwogCi0gICAgYXV0byBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGFibGUuc2l6ZSgpOyArK2kpCisgICAgICAgIHRhYmxlW2ldID0gaTsKKworICAgIHVzaW5nIFRy
YW5zZmVyVHlwZSA9IHZvaWQgKCopKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYpOworICAgIFRyYW5zZmVyVHlwZSBjYWxsRWZmZWN0W10gPSB7CisgICAgICAg
IGNvbXB1dGVJZGVudGl0eVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9VTktO
T1dOCisgICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNG
RVJfVFlQRV9JREVOVElUWQorICAgICAgICBjb21wdXRlVGFidWxhclRhYmxlLCAgICAvLyBGRUNP
TVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEUKKyAgICAgICAgY29tcHV0ZURpc2NyZXRlVGFibGUs
ICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0RJU0NSRVRFCisgICAgICAgIGNvbXB1dGVM
aW5lYXJUYWJsZSwgICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIKKyAgICAg
ICAgY29tcHV0ZUdhbW1hVGFibGUgICAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0dB
TU1BCisgICAgfTsKIAotICAgIExvb2t1cFRhYmxlIHJlZFRhYmxlOwotICAgIExvb2t1cFRhYmxl
IGdyZWVuVGFibGU7Ci0gICAgTG9va3VwVGFibGUgYmx1ZVRhYmxlOwotICAgIExvb2t1cFRhYmxl
IGFscGhhVGFibGU7Ci0gICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRUYWJsZSwgZ3JlZW5UYWJs
ZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4oZnVuY3Rpb24udHlwZSkgPCBXVEZf
QVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKKyAgICBjYWxsRWZmZWN0W2Z1bmN0aW9uLnR5cGVd
KHRhYmxlLCBmdW5jdGlvbik7CiAKLSAgICBJbnRSZWN0IGRyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBp
bi0+Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBkcmF3aW5n
UmVjdCk7Ci0gICAgCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIHVpbnQ4X3QqIGRhdGEgPSBkZXN0aW5hdGlvblBp
eGVsQXJyYXkuZGF0YSgpOwotICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uUGl4ZWxBcnJheUxlbmd0
aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICByZXR1cm4gdGFibGU7Cit9
CisKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9y
bShQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNvbnN0Cit7CisgICAgYXV0byYgcGl4ZWxBcnJh
eSA9IHBpeGVsQnVmZmVyLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0g
cGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS5kYXRh
KCk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBk
ZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAg
ZGF0YVtwaXhlbE9mZnNldF0gPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0XV07CisgICAgYXV0
byByZWRUYWJsZSAgID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0LnJlZEZ1bmN0aW9uKCkp
OworICAgIGF1dG8gZ3JlZW5UYWJsZSA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2VmZmVjdC5ncmVl
bkZ1bmN0aW9uKCkpOworICAgIGF1dG8gYmx1ZVRhYmxlICA9IGNvbXB1dGVMb29rdXBUYWJsZSht
X2VmZmVjdC5ibHVlRnVuY3Rpb24oKSk7CisgICAgYXV0byBhbHBoYVRhYmxlID0gY29tcHV0ZUxv
b2t1cFRhYmxlKG1fZWZmZWN0LmFscGhhRnVuY3Rpb24oKSk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9m
ZnNldCArPSA0KSB7CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXRdICAgICA9IHJlZFRhYmxlW2Rh
dGFbcGl4ZWxPZmZzZXRdXTsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDFdID0gZ3JlZW5U
YWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMV1dOwogICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsg
Ml0gPSBibHVlVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDJdXTsKICAgICAgICAgZGF0YVtwaXhl
bE9mZnNldCArIDNdID0gYWxwaGFUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgM11dOwogICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1
dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRhYmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5U
YWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9va3VwVGFibGUmIGFscGhhVGFibGUpCiti
b29sIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRl
ciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZWRUYWJsZS5zaXplKCk7ICsraSkKLSAgICAgICAgcmVkVGFi
bGVbaV0gPSBncmVlblRhYmxlW2ldID0gYmx1ZVRhYmxlW2ldID0gYWxwaGFUYWJsZVtpXSA9IGk7
CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKyAgICAKKyAg
ICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJlc3Vs
dChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOworICAgIGlmICghZGVz
dGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdXNpbmcg
VHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJik7Ci0gICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZlY3RbXSA9IHsKLSAgICAg
ICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1VO
S05PV04KLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFO
U0ZFUl9UWVBFX0lERU5USVRZCi0gICAgICAgIGNvbXB1dGVUYWJ1bGFyVGFibGUsICAgIC8vIEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRQotICAgICAgICBjb21wdXRlRGlzY3JldGVUYWJs
ZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUKLSAgICAgICAgY29tcHV0
ZUxpbmVhclRhYmxlLCAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUgotICAg
ICAgICBjb21wdXRlR2FtbWFUYWJsZSAgICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVf
R0FNTUEKLSAgICB9OworICAgIGF1dG8gZHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRS
ZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGlu
LT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGRyYXdpbmdS
ZWN0KTsKIAotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0
PHNpemVfdD4obV9yZWRGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVj
dCkpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNp
emVfdD4obV9ncmVlbkZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0
KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8c2l6
ZV90PihtX2JsdWVGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkp
OwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVf
dD4obV9hbHBoYUZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7
CisgICAgYXBwbHlQbGF0Zm9ybSgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlcik7CisgICAgcmV0dXJu
IHRydWU7Cit9CiAKLSAgICBjYWxsRWZmZWN0W21fcmVkRnVuY3Rpb24udHlwZV0ocmVkVGFibGUs
IG1fcmVkRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3RbbV9ncmVlbkZ1bmN0aW9uLnR5cGVdKGdy
ZWVuVGFibGUsIG1fZ3JlZW5GdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVjdFttX2JsdWVGdW5jdGlv
bi50eXBlXShibHVlVGFibGUsIG1fYmx1ZUZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fYWxw
aGFGdW5jdGlvbi50eXBlXShhbHBoYVRhYmxlLCBtX2FscGhhRnVuY3Rpb24pOworYm9vbCBGRUNv
bXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpCit7CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIoKnRo
aXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQ29tcG9uZW50VHJhbnNmZXJUeXBlIHR5cGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9uZW50VHJhbnNmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCmluZGV4IDZhZGE5YzBhYmJlNWMyZjlkNjViZDkx
OWZmZWM0ZjE3M2QwMDM0MTQuLjUxOGVhMTM0N2E0YWRkYmE0Y2Q1MDBjYjQyYzgxMzcwNmRjY2Qx
OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb25lbnRUcmFuc2Zlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCkBAIC02MSwxNiArNjEsNiBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIEZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
Z3JlZW5GdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVuYywgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKIAotICAgIHVzaW5nIExv
b2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+OwotCi0gICAgc3RhdGljIHZvaWQg
Y29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBU
YWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9p
ZCBjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlTGluZWFyVGFibGUoTG9va3Vw
VGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZv
aWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJik7Ci0KLSAgICB2b2lkIGNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUm
IHJlZFRhYmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJs
ZSwgTG9va3VwVGFibGUmIGFscGhhVGFibGUpOwotCiAgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBl
KSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggOWQ5MmUwMThhZGQwM2ZmYzBi
M2Y2OGFlMjA2NmZiMTYwZjI2NDQ0OS4uMTVhNzEyOTk4ODI5YWNkOWI0ZDI5NDVhZmRlYmJlNmQ2
ODdiN2RiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJG
RUNvbXBvc2l0ZS5oIgogCiAjaW5jbHVkZSAiRkVDb21wb3NpdGVBcml0aG1ldGljTkVPTi5oIgor
I2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
CkBAIC04NywxNSArODgsNjEgQEAgYm9vbCBGRUNvbXBvc2l0ZTo6c2V0SzQoZmxvYXQgazQpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGNsYW1wQnl0ZShpbnQg
YykKK3ZvaWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZp
bHRlciYgZmlsdGVyKQogewotICAgIHVuc2lnbmVkIGNoYXIgYnVmZltdID0geyBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPihjKSwgMjU1LCAwIH07CisgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOgorICAgIGNhc2UgRkVDT01QT1NJVEVfT1BF
UkFUT1JfQVRPUDoKKyAgICAgICAgLy8gRm9yIEluIGFuZCBBdG9wIHRoZSBmaXJzdCBlZmZlY3Qg
anVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YKKyAgICAgICAgLy8gdGhlIHNlY29uZCBlZmZl
Y3QuIFNvIGp1c3QgdXNlIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IG9mIHRoZSBzZWNvbmQgZWZm
ZWN0IGhlcmUuCisgICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDEpLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICAgICAgY2xpcEFic29sdXRlUGFpbnRSZWN0KCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM6
CisgICAgICAgIC8vIEFyaXRobWV0aWMgbWF5IGluZmx1bmNlIHRoZSBjb21wZWxlIGZpbHRlciBw
cmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBjYW4ndAorICAgICAgICAvLyBvcHRpbWl6ZSB0aGUgcGFp
bnQgcmVnaW9uIGhlcmUuCisgICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICAvLyBUYWtlIHRoZSB1bmlvbiBvZiBib3RoIGlucHV0IGVmZmVjdHMuCisgICAgICAg
IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoZmlsdGVyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KK30KKworLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFQ29tcG9z
aXRlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgor
Y2xhc3MgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29u
Y3JldGVBcHBsaWVyPEZFQ29tcG9zaXRlPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVj
dENvbmNyZXRlQXBwbGllcjxGRUNvbXBvc2l0ZT47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNl
OjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZl
Y3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3RhdGlj
IHVpbnQ4X3QgY2xhbXBCeXRlKGludCk7CisKKyAgICB0ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+
CisgICAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2lnbmVk
IGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5
TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CisKKyAgICB0
ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+CisgICAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVB
cml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQg
Y2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQg
azIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlQ
bGF0Zm9ybUFyaXRobWV0aWModW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBk
ZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwgZmxv
YXQgazMsIGZsb2F0IGs0KTsKKworICAgIGJvb2wgYXBwbHlBcml0aG1ldGljKEZpbHRlckVmZmVj
dCogaW4sIEZpbHRlckVmZmVjdCogaW4yKTsKKyAgICBib29sIGFwcGx5Tm9uQXJpdGhtZXRpYyhG
aWx0ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3QqIGluMik7Cit9OworCit1aW50OF90IEZFQ29t
cG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjbGFtcEJ5dGUoaW50IGMpCit7CisgICAgdWludDhfdCBi
dWZmW10gPSB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGMpLCAyNTUsIDAgfTsKICAgICB1bnNpZ25l
ZCB1YyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjKTsKICAgICByZXR1cm4gYnVmZlshISh1YyAm
IH4weGZmKSArICEhKHVjICYgfih+MHUgPj4gMSkpXTsKIH0KIAogdGVtcGxhdGUgPGludCBiMSwg
aW50IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2ln
bmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFy
cmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK2lubGlu
ZSB2b2lkIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVs
cyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQg
cGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQp
CiB7CiAgICAgZmxvYXQgc2NhbGVkSzE7CiAgICAgZmxvYXQgc2NhbGVkSzQ7CkBAIC0xMjIsNyAr
MTY5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzKHVuc2ln
bmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhcioKIC8vIGNvbXB1dGVBcml0aG1ldGljUGl4
ZWxzVW5jbGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2YgY29tcHV0ZUFyaXRobWV0aWNQaXhl
bHMgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGluZwogLy8gaXMgbm90IG5lY2Vzc2Fy
eS4gVGhpcyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRpbWl6YXRpb25zIHN1Y2ggYXMg
YXV0by12ZWN0b3JpemF0aW9uLgogdGVtcGxhdGUgPGludCBiMSwgaW50IGI0Pgotc3RhdGljIGlu
bGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2lnbmVkIGNoYXIq
IHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3Ro
LCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK2lubGluZSB2b2lkIEZF
Q29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBl
ZCh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQg
cGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQp
CiB7CiAgICAgZmxvYXQgc2NhbGVkSzE7CiAgICAgZmxvYXQgc2NhbGVkSzQ7CkBAIC0xNDcsNyAr
MTk0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFt
cGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWcKIH0KIAogI2lmICFIQVZFKEFSTV9ORU9O
X0lOVFJJTlNJQ1MpCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJpdGhtZXRpY1NvZnR3YXJlKHVuc2ln
bmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFy
cmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkKK2lubGlu
ZSB2b2lkIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtQXJpdGhtZXRp
Yyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQg
cGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQp
CiB7CiAgICAgZmxvYXQgdXBwZXJMaW1pdCA9IHN0ZDo6bWF4KDAuMGYsIGsxKSArIHN0ZDo6bWF4
KDAuMGYsIGsyKSArIHN0ZDo6bWF4KDAuMGYsIGszKSArIGs0OwogICAgIGZsb2F0IGxvd2VyTGlt
aXQgPSBzdGQ6Om1pbigwLjBmLCBrMSkgKyBzdGQ6Om1pbigwLjBmLCBrMikgKyBzdGQ6Om1pbigw
LjBmLCBrMykgKyBrNDsKQEAgLTE4MCw2NiArMjI3LDMyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBh
cml0aG1ldGljU29mdHdhcmUodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFyKiBk
ZXN0CiB9CiAjZW5kaWYKIAotaW5saW5lIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGht
ZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQg
azQpCitib29sIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBseUFyaXRobWV0aWMoRmls
dGVyRWZmZWN0KiBpbiwgRmlsdGVyRWZmZWN0KiBpbjIpCiB7Ci0gICAgaW50IGxlbmd0aCA9IHNv
dXJjZS5sZW5ndGgoKTsKLSAgICBBU1NFUlQobGVuZ3RoID09IHN0YXRpY19jYXN0PGludD4oZGVz
dGluYXRpb24ubGVuZ3RoKCkpKTsKLSAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUgZXZlbnR1YWxs
eSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5LgotI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lD
UykKLSAgICBBU1NFUlQoIShsZW5ndGggJiAweDMpKTsKLSAgICBwbGF0Zm9ybUFyaXRobWV0aWNO
ZW9uKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVuZ3RoLCBrMSwgazIsIGsz
LCBrNCk7Ci0jZWxzZQotICAgIGFyaXRobWV0aWNTb2Z0d2FyZShzb3VyY2UuZGF0YSgpLCBkZXN0
aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotI2VuZGlmCi19CisgICAg
YXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaWYgKCFkZXN0aW5h
dGlvblBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLXZvaWQgRkVDb21wb3Np
dGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQotewot
ICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoK
LSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIC8vIEZvciBJbiBh
bmQgQXRvcCB0aGUgZmlyc3QgZWZmZWN0IGp1c3QgaW5mbHVlbmNlcyB0aGUgcmVzdWx0IG9mCi0g
ICAgICAgIC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFp
bnQgcmVjdCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgotICAgICAgICBzZXRBYnNvbHV0ZVBh
aW50UmVjdChpbnB1dEVmZmVjdCgxKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGNs
aXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBGRUNPTVBP
U0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgotICAgICAgICAvLyBBcml0aG1ldGljIG1heSBpbmZs
dW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28gd2UgY2FuJ3QKLSAg
ICAgICAgLy8gb3B0aW1pemUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgotICAgICAgICBzZXRBYnNv
bHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGFrZSB0aGUgdW5pb24gb2YgYm90
aCBpbnB1dCBlZmZlY3RzLgotICAgICAgICBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KGZpbHRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgSW50UmVjdCBl
ZmZlY3RBRHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxC
dWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gc291cmNlUGl4ZWxCdWZm
ZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgZWZmZWN0QURyYXdpbmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNw
YWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAg
aW4yLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVj
dEJEcmF3aW5nUmVjdCk7CisKKyAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gc291cmNlUGl4
ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBpbnQgbGVuZ3RoID0gc291cmNlUGl4
ZWxBcnJheS5sZW5ndGgoKTsKKyAgICBBU1NFUlQobGVuZ3RoID09IHN0YXRpY19jYXN0PGludD4o
ZGVzdGluYXRpb25QaXhlbEFycmF5Lmxlbmd0aCgpKSk7CisgICAgYXBwbHlQbGF0Zm9ybUFyaXRo
bWV0aWMoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5kYXRh
KCksIGxlbmd0aCwgbV9lZmZlY3QuazEoKSwgbV9lZmZlY3QuazIoKSwgbV9lZmZlY3QuazMoKSwg
bV9lZmZlY3QuazQoKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRkVDb21wb3NpdGU6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorYm9vbCBGRUNvbXBvc2l0ZVNv
ZnR3YXJlQXBwbGllcjo6YXBwbHlOb25Bcml0aG1ldGljKEZpbHRlckVmZmVjdCogaW4sIEZpbHRl
ckVmZmVjdCogaW4yKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
LSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAgaWYgKG1fdHlw
ZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIGF1dG8gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQpOwotICAgICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBJbnRSZWN0
IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIg
PSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgZWZmZWN0QURyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotICAg
ICAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGluMi0+
Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3RCRHJh
d2luZ1JlY3QpOwotCi0gICAgICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQaXhl
bEJ1ZmZlci0+ZGF0YSgpOwotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgICAgIHBsYXRmb3JtQXJpdGhtZXRp
Y1NvZnR3YXJlKHNvdXJjZVBpeGVsQXJyYXksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgbV9rMSwg
bV9rMiwgbV9rMywgbV9rNCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGF1
dG8gcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gcmVzdWx0SW1h
Z2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2Up
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjQ4LDUwICsyNjEsNzUgQEAgYm9vbCBGRUNv
bXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgaWYgKCFp
bWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgp
OworICAgIGF1dG8mIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOworCisg
ICAgc3dpdGNoIChtX2VmZmVjdC5vcGVyYXRpb24oKSkgeworICAgIGNhc2UgRkVDT01QT1NJVEVf
T1BFUkFUT1JfVU5LTk9XTjoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3dpdGNoICht
X3R5cGUpIHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVI6Ci0gICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25P
ZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNv
bnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKICAgICAgICAgYnJlYWs7CisKICAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOiB7CiAgICAgICAgIC8vIEFwcGxpZXMgb25s
eSB0byB0aGUgaW50ZXJzZWN0ZWQgcmVnaW9uLgogICAgICAgICBJbnRSZWN0IGRlc3RpbmF0aW9u
UmVjdCA9IGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgICAgICBkZXN0aW5hdGlvblJlY3Qu
aW50ZXJzZWN0KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGRlc3RpbmF0aW9u
UmVjdC5pbnRlcnNlY3QoYWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgICAgIGRlc3RpbmF0aW9u
UmVjdC5pbnRlcnNlY3QobV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgICAgIGlm
IChkZXN0aW5hdGlvblJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IEludFJlY3QgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBhYnNv
bHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CisgICAgICAgIEludFJlY3QgYWRqdXN0ZWREZXN0
aW5hdGlvblJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVj
dCgpLmxvY2F0aW9uKCk7CiAgICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IGRlc3RpbmF0aW9u
UmVjdCAtIGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CiAgICAgICAgIEludFJl
Y3Qgc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbjItPmFic29sdXRlUGFpbnRSZWN0
KCkubG9jYXRpb24oKTsKICAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlt
YWdlQnVmZmVyMiwgRmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25SZWN0KSwgRmxvYXRSZWN0
KHNvdXJjZTJSZWN0KSk7CiAgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZUJ1ZmZlciwgRmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25SZWN0KSwgRmxvYXRSZWN0
KHNvdXJjZVJlY3QpLCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbiB9KTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQorCiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9PVVQ6Ci0gICAg
ICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlcjIt
PmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKKyAg
ICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVj
dC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Cisg
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZm
ZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwg
eyB7IH0sIGltYWdlQnVmZmVyMi0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6
RGVzdGluYXRpb25PdXQpOwogICAgICAgICBicmVhazsKKwogICAgIGNhc2UgRkVDT01QT1NJVEVf
T1BFUkFUT1JfQVRPUDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlt
YWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRS
ZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwg
eyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpT
b3VyY2VBdG9wKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRl
UGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmlt
YWdlQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBv
c2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsKICAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIEZF
Q09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29s
dXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9w
ZXJhdG9yOjpYT1IpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29t
cG9zaXRlT3BlcmF0b3I6OlhPUik7CiAgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRUNPTVBP
U0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9M
SUdIVEVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkp
OwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwg
aW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OlBsdXNMaWdo
dGVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKKyAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVy
LT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVzTGlnaHRlcik7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEZFQ29tcG9z
aXRlU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZl
Y3RWZWN0b3ImIGlucHV0RWZmZWN0cykKK3sKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3RzWzBdLmdldCgpOworICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3RzWzFd
LmdldCgpOworCisgICAgaWYgKG1fZWZmZWN0Lm9wZXJhdGlvbigpID09IEZFQ09NUE9TSVRFX09Q
RVJBVE9SX0FSSVRITUVUSUMpCisgICAgICAgIHJldHVybiBhcHBseUFyaXRobWV0aWMoaW4sIGlu
Mik7CisgICAgcmV0dXJuIGFwcGx5Tm9uQXJpdGhtZXRpYyhpbiwgaW4yKTsKK30KKworYm9vbCBG
RUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQor
eworICAgIHJldHVybiBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmls
dGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25UeXBlJiB0eXBlKQogewog
ICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKaW5kZXggNTRmODA0
YThmZWQyNTE0ZTIyMTA1ZWE1MjNiY2JkNDg1Nzc3N2I4ZS4uZWM3NWI1MDAwZTcyNDMyMWZlYTNk
YTY3NWM2ZTA5ZTk1MGNjYzJhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCkBAIC0yNCw4
ICsyNCw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb252b2x2ZU1hdHJp
eC5oIgogCisjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVj
dEFwcGxpZXIuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9QYXJh
bGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCkBAIC0xMTQsNiArMTE1LDQyIEBAIGJvb2wgRkVDb252b2x2ZU1h
dHJpeDo6c2V0UHJlc2VydmVBbHBoYShib29sIHByZXNlcnZlQWxwaGEpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRUNvbnZvbHZlTWF0cml4U29mdHdh
cmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVD
b252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0
ZUFwcGxpZXI8RkVDb252b2x2ZU1hdHJpeD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZl
Y3RDb25jcmV0ZUFwcGxpZXI8RkVDb252b2x2ZU1hdHJpeD47CisKK3B1YmxpYzoKKyAgICB1c2lu
ZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0
ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
c3RydWN0IFBhaW50aW5nRGF0YSB7CisgICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
cmNQaXhlbEFycmF5OworICAgICAgICBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheTsK
KyAgICAgICAgaW50IHdpZHRoOworICAgICAgICBpbnQgaGVpZ2h0OworCisgICAgICAgIEludFNp
emUga2VybmVsU2l6ZTsKKyAgICAgICAgZmxvYXQgZGl2aXNvcjsKKyAgICAgICAgZmxvYXQgYmlh
czsKKyAgICAgICAgSW50UG9pbnQgdGFyZ2V0T2Zmc2V0OworICAgICAgICBFZGdlTW9kZVR5cGUg
ZWRnZU1vZGU7CisgICAgICAgIGJvb2wgcHJlc2VydmVBbHBoYTsKKyAgICAgICAgVmVjdG9yPGZs
b2F0PiBrZXJuZWxNYXRyaXg7CisgICAgfTsKKworICAgIHN0YXRpYyBpbmxpbmUgdWludDhfdCBj
bGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFubmVsLCB1aW50OF90IG1heCA9IDI1NSk7CisgICAgc3Rh
dGljIGlubGluZSB2b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBp
eGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBib29sIHByZXNl
cnZlQWxwaGFWYWx1ZXMpOworCisgICAgc3RhdGljIGlubGluZSBpbnQgZ2V0UGl4ZWxWYWx1ZShj
b25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHkpOworCisgICAgc3RhdGljIGlubGluZSB2
b2lkIHNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBj
bGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCk7CisgICAgc3RhdGljIGlubGluZSB2b2lk
IHNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGlu
dCB5Mik7CisKKyAgICB2b2lkIGFwcGx5UGxhdGZvcm0oUGFpbnRpbmdEYXRhJikgY29uc3Q7Cit9
OworCiAvKgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgIENv
bnZvbHZlTWF0cml4IGltcGxlbWVudGF0aW9uCkBAIC0xNzAsNyArMjA3LDcgQEAgYm9vbCBGRUNv
bnZvbHZlTWF0cml4OjpzZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkKICAgIGFu
ZCB3b3VsZCBtYWtlIGl0IHJlYWxseSBoYXJkIHRvIHVuZGVyc3RhbmQuCiAqLwogCi1zdGF0aWMg
QUxXQVlTX0lOTElORSB1bnNpZ25lZCBjaGFyIGNsYW1wUkdCQVZhbHVlKGZsb2F0IGNoYW5uZWws
IHVuc2lnbmVkIGNoYXIgbWF4ID0gMjU1KQoraW5saW5lIHVpbnQ4X3QgRkVDb252b2x2ZU1hdHJp
eFNvZnR3YXJlQXBwbGllcjo6Y2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdWludDhfdCBt
YXgpCiB7CiAgICAgaWYgKGNoYW5uZWwgPD0gMCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzks
MTAgKzIxNiw5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xhbXBSR0JB
VmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBtCiAgICAgcmV0dXJuIGNoYW5uZWw7
CiB9CiAKLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLUFMV0FZU19JTkxJTkUg
dm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNl
UGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQq
IHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcykKK2lubGluZSB2b2lkIEZFQ29udm9s
dmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxz
LCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBi
b29sIHByZXNlcnZlQWxwaGFWYWx1ZXMpCiB7Ci0gICAgdW5zaWduZWQgY2hhciBtYXhBbHBoYSA9
IHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbM10gLyBk
aXZpc29yICsgYmlhcyk7CisgICAgdWludDhfdCBtYXhBbHBoYSA9IHByZXNlcnZlQWxwaGFWYWx1
ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbM10gLyBkaXZpc29yICsgYmlhcyk7CiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpCiAgICAgICAgIGRlc3RQaXhlbHMuc2V0KHBp
eGVsKyssIGNsYW1wUkdCQVZhbHVlKHRvdGFsc1tpXSAvIGRpdmlzb3IgKyBiaWFzLCBtYXhBbHBo
YSkpOwogCkBAIC0xOTMsMjUgKzIyOSw0NyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0RGVzdGlu
YXRpb25QaXhlbHMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZVBpeGVscywgVQogICAg
ICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCsrLCBtYXhBbHBoYSk7CiB9CiAKLSNpZiBDT01QSUxF
UihNU1ZDKQotLy8gSW5jb3JyZWN0bHkgZGlhZ25vc2luZyBvdmVyd3JpdGUgb2Ygc3RhY2sgaW4g
fHRvdGFsc3wgZHVlIHRvIHxwcmVzZXJ2ZUFscGhhVmFsdWVzfC4KLSNwcmFnbWEgd2FybmluZyhw
dXNoKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3ODkpCi0jZW5kaWYKK2lubGluZSBpbnQg
RkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6Z2V0UGl4ZWxWYWx1ZShjb25zdCBQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQoreworICAgIGlmICh4ID49IDAg
JiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBhaW50aW5nRGF0YS5o
ZWlnaHQpCisgICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7
CisKKyAgICBzd2l0Y2ggKHBhaW50aW5nRGF0YS5lZGdlTW9kZSkgeworICAgIGRlZmF1bHQ6IC8v
IEVER0VNT0RFX05PTkUKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGNhc2UgRURHRU1PREVfRFVQ
TElDQVRFOgorICAgICAgICBpZiAoeCA8IDApCisgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAg
ZWxzZSBpZiAoeCA+PSBwYWludGluZ0RhdGEud2lkdGgpCisgICAgICAgICAgICB4ID0gcGFpbnRp
bmdEYXRhLndpZHRoIC0gMTsKKyAgICAgICAgaWYgKHkgPCAwKQorICAgICAgICAgICAgeSA9IDA7
CisgICAgICAgIGVsc2UgaWYgKHkgPj0gcGFpbnRpbmdEYXRhLmhlaWdodCkKKyAgICAgICAgICAg
IHkgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC0gMTsKKyAgICAgICAgcmV0dXJuICh5ICogcGFpbnRp
bmdEYXRhLndpZHRoICsgeCkgPDwgMjsKKyAgICBjYXNlIEVER0VNT0RFX1dSQVA6CisgICAgICAg
IHdoaWxlICh4IDwgMCkKKyAgICAgICAgICAgIHggKz0gcGFpbnRpbmdEYXRhLndpZHRoOworICAg
ICAgICB4ICU9IHBhaW50aW5nRGF0YS53aWR0aDsKKyAgICAgICAgd2hpbGUgKHkgPCAwKQorICAg
ICAgICAgICAgeSArPSBwYWludGluZ0RhdGEuaGVpZ2h0OworICAgICAgICB5ICU9IHBhaW50aW5n
RGF0YS5oZWlnaHQ7CisgICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgp
IDw8IDI7CisgICAgfQorfQogCiAvLyBPbmx5IGZvciByZWdpb24gQwotdGVtcGxhdGU8Ym9vbCBw
cmVzZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6
OmZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IGNs
aXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQoraW5saW5lIHZv
aWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6c2V0SW50ZXJpb3JQaXhlbHMoUGFp
bnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBp
bnQgeVN0YXJ0LCBpbnQgeUVuZCkKIHsKICAgICAvLyBlZGdlIG1vZGUgZG9lcyBub3QgYWZmZWN0
IHRoZXNlIHBpeGVscwotICAgIGludCBwaXhlbCA9IChtX3RhcmdldE9mZnNldC55KCkgKiBwYWlu
dGluZ0RhdGEud2lkdGggKyBtX3RhcmdldE9mZnNldC54KCkpICogNDsKKyAgICBpbnQgcGl4ZWwg
PSAocGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCkgKiBwYWludGluZ0RhdGEud2lkdGggKyBw
YWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSkgKiA0OwogICAgIGludCBrZXJuZWxJbmNyZWFz
ZSA9IGNsaXBSaWdodCAqIDQ7Ci0gICAgaW50IHhJbmNyZWFzZSA9IChtX2tlcm5lbFNpemUud2lk
dGgoKSAtIDEpICogNDsKKyAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0YS5rZXJuZWxT
aXplLndpZHRoKCkgLSAxKSAqIDQ7CiAgICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkg
Y29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAw
IDogMSldOworICAgIGZsb2F0IHRvdGFsc1s0XTsKIAotICAgIC8vIG1fZGl2aXNvciBjYW5ub3Qg
YmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJU
KG1fZGl2aXNvcik7CisgICAgLy8gZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1h
dHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCisgICAgQVNTRVJUKHBhaW50aW5nRGF0YS5kaXZpc29y
KTsKIAogICAgIC8vIFNraXAgdGhlIGZpcnN0ICcoY2xpcEJvdHRvbSAtIHlFbmQpJyBsaW5lcwog
ICAgIHBpeGVsICs9IChjbGlwQm90dG9tIC0geUVuZCkgKiAoeEluY3JlYXNlICsgKGNsaXBSaWdo
dCArIDEpICogNCk7CkBAIC0yMjEsMjkgKzI3OSwyOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgRkVD
b252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRp
bgogICAgICAgICBmb3IgKGludCB4ID0gY2xpcFJpZ2h0ICsgMTsgeCA+IDA7IC0teCkgewogICAg
ICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeC5zaXpl
KCkgLSAxOwogICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsID0gc3RhcnRLZXJuZWxQaXhlbDsK
LSAgICAgICAgICAgIGludCB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgICAgICAg
ICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKIAogICAgICAg
ICAgICAgdG90YWxzWzBdID0gMDsKICAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7CiAgICAgICAg
ICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVz
KQotICAgICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7CisgICAgICAgICAgICB0b3RhbHNbM10g
PSAwOwogCiAgICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewogICAgICAgICAg
ICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVl
XSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtl
cm5lbFBpeGVsKyspKTsKICAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRh
Lmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7CiAgICAgICAgICAgICAgICAg
dG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4
ZWwrKykpOwotICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKKyAgICAg
ICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKQogICAgICAgICAgICAg
ICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1
ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShr
ZXJuZWxQaXhlbCkpOwogICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWw7CiAgICAgICAgICAg
ICAgICAgLS1rZXJuZWxWYWx1ZTsKICAgICAgICAgICAgICAgICBpZiAoIS0td2lkdGgpIHsKICAg
ICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWwgKz0ga2VybmVsSW5jcmVhc2U7Ci0gICAgICAg
ICAgICAgICAgICAgIHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAgICAgICAg
ICAgICAgIHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4
ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWlu
dGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGlu
Z0RhdGEuYmlhcyk7CisgICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWludGluZ0Rh
dGEuc3JjUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3Rh
bHMsIHBhaW50aW5nRGF0YS5kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdEYXRh
LnByZXNlcnZlQWxwaGEpOwogICAgICAgICAgICAgc3RhcnRLZXJuZWxQaXhlbCArPSA0OwogICAg
ICAgICB9CiAgICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKQEAgLTI1MSw2NCArMzA4LDMzIEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQaXhl
bHMoUGFpbnRpbmdEYXRhJiBwYWludGluCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5FIGludCBG
RUNvbnZvbHZlTWF0cml4OjpnZXRQaXhlbFZhbHVlKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBpbnQgeCwgaW50IHkpCi17Ci0gICAgaWYgKHggPj0gMCAmJiB4IDwgcGFpbnRpbmdEYXRhLndp
ZHRoICYmIHkgPj0gMCAmJiB5IDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKLSAgICAgICAgcmV0dXJu
ICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKLQotICAgIHN3aXRjaCAobV9lZGdl
TW9kZSkgewotICAgIGRlZmF1bHQ6IC8vIEVER0VNT0RFX05PTkUKLSAgICAgICAgcmV0dXJuIC0x
OwotICAgIGNhc2UgRURHRU1PREVfRFVQTElDQVRFOgotICAgICAgICBpZiAoeCA8IDApCi0gICAg
ICAgICAgICB4ID0gMDsKLSAgICAgICAgZWxzZSBpZiAoeCA+PSBwYWludGluZ0RhdGEud2lkdGgp
Ci0gICAgICAgICAgICB4ID0gcGFpbnRpbmdEYXRhLndpZHRoIC0gMTsKLSAgICAgICAgaWYgKHkg
PCAwKQotICAgICAgICAgICAgeSA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHkgPj0gcGFpbnRpbmdE
YXRhLmhlaWdodCkKLSAgICAgICAgICAgIHkgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC0gMTsKLSAg
ICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKLSAgICBjYXNl
IEVER0VNT0RFX1dSQVA6Ci0gICAgICAgIHdoaWxlICh4IDwgMCkKLSAgICAgICAgICAgIHggKz0g
cGFpbnRpbmdEYXRhLndpZHRoOwotICAgICAgICB4ICU9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAg
ICAgICAgd2hpbGUgKHkgPCAwKQotICAgICAgICAgICAgeSArPSBwYWludGluZ0RhdGEuaGVpZ2h0
OwotICAgICAgICB5ICU9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0gICAgICAgIHJldHVybiAoeSAq
IHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAgfQotfQotCiAvLyBGb3Igb3RoZXIg
cmVnaW9ucyB0aGFuIEMKLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLXZvaWQg
RkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCitpbmxpbmUgdm9pZCBGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQogewogICAgIGlu
dCBwaXhlbCA9ICh5MSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAqIDQ7CiAgICAgaW50IGhl
aWdodCA9IHkyIC0geTE7CiAgICAgaW50IHdpZHRoID0geDIgLSB4MTsKLSAgICBpbnQgYmVnaW5L
ZXJuZWxQaXhlbFggPSB4MSAtIG1fdGFyZ2V0T2Zmc2V0LngoKTsKKyAgICBpbnQgYmVnaW5LZXJu
ZWxQaXhlbFggPSB4MSAtIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgpOwogICAgIGludCBz
dGFydEtlcm5lbFBpeGVsWCA9IGJlZ2luS2VybmVsUGl4ZWxYOwotICAgIGludCBzdGFydEtlcm5l
bFBpeGVsWSA9IHkxIC0gbV90YXJnZXRPZmZzZXQueSgpOworICAgIGludCBzdGFydEtlcm5lbFBp
eGVsWSA9IHkxIC0gcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCk7CiAgICAgaW50IHhJbmNy
ZWFzZSA9IChwYWludGluZ0RhdGEud2lkdGggLSB3aWR0aCkgKiA0OwogICAgIC8vIENvbnRhaW5z
IHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyArIChwcmVz
ZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKKyAgICBmbG9hdCB0b3RhbHNbNF07CiAKLSAgICAv
LyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3Vy
ZXMgdGhpcwotICAgIEFTU0VSVChtX2Rpdmlzb3IpOworICAgIC8vIHBhaW50aW5nRGF0YS5kaXZp
c29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMK
KyAgICBBU1NFUlQocGFpbnRpbmdEYXRhLmRpdmlzb3IpOwogCiAgICAgZm9yIChpbnQgeSA9IGhl
aWdodDsgeSA+IDA7IC0teSkgewogICAgICAgICBmb3IgKGludCB4ID0gd2lkdGg7IHggPiAwOyAt
LXgpIHsKICAgICAgICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IHBhaW50aW5nRGF0YS5rZXJuZWxN
YXRyaXguc2l6ZSgpIC0gMTsKICAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFggPSBzdGFydEtl
cm5lbFBpeGVsWDsKICAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFkgPSBzdGFydEtlcm5lbFBp
eGVsWTsKLSAgICAgICAgICAgIGludCB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAg
ICAgICAgICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKIAog
ICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKICAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7CiAg
ICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhh
VmFsdWVzKQotICAgICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7CisgICAgICAgICAgICB0b3Rh
bHNbM10gPSAwOwogCiAgICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewogICAg
ICAgICAgICAgICAgIGludCBwaXhlbEluZGV4ID0gZ2V0UGl4ZWxWYWx1ZShwYWludGluZ0RhdGEs
IGtlcm5lbFBpeGVsWCwga2VybmVsUGl4ZWxZKTsKQEAgLTMxNywxOCArMzQzLDE4IEBAIHZvaWQg
RkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgeDEsIGluCiAgICAgICAgICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWlu
dGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0Pihw
YWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAxKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5l
bFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5p
dGVtKHBpeGVsSW5kZXggKyAyKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmICghcHJlc2VydmVBbHBoYVZhbHVlcyAmJiBwaXhlbEluZGV4ID49IDApCisgICAgICAgICAg
ICAgICAgaWYgKCFwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSAmJiBwaXhlbEluZGV4ID49IDAp
CiAgICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0
cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4
ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAzKSk7CiAgICAgICAgICAgICAgICAgKytrZXJuZWxQ
aXhlbFg7CiAgICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKICAgICAgICAgICAgICAgICBp
ZiAoIS0td2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWxYID0gc3RhcnRL
ZXJuZWxQaXhlbFg7CiAgICAgICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxZOwotICAgICAg
ICAgICAgICAgICAgICB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgICAgICAgICAg
ICAgICAgICB3aWR0aCA9IHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzZXREZXN0aW5hdGlvblBp
eGVsczxwcmVzZXJ2ZUFscGhhVmFsdWVzPihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwgcGFp
bnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMsIG1fZGl2aXNvciwgcGFpbnRp
bmdEYXRhLmJpYXMpOworICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHMocGFpbnRpbmdE
YXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90
YWxzLCBwYWludGluZ0RhdGEuZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0
YS5wcmVzZXJ2ZUFscGhhKTsKICAgICAgICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFg7CiAgICAg
ICAgIH0KICAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOwpAQCAtMzM3LDk1ICszNjMsODggQEAg
dm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsIGludCB4MSwgaW4KICAgICB9CiB9CiAKLSNpZiBDT01QSUxFUihNU1ZDKQot
I3ByYWdtYSB3YXJuaW5nKHBvcCkgLy8gRGlzYWJsZSBvZiA0Nzg5Ci0jZW5kaWYKLQotQUxXQVlT
X0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlT
dGFydCwgaW50IHlFbmQpCit2b2lkIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5UGxhdGZvcm0oUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpIGNvbnN0CiB7Ci0gICAgLy8g
TXVzdCBiZSBpbXBsZW1lbnRlZCBoZXJlLCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBBTFdBWVNf
SU5MSU5FCi0gICAgLy8gZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysgc291cmNl
IGZpbGUgYXMgd2VsbAotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZhc3RTZXRJ
bnRlcmlvclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwg
eVN0YXJ0LCB5RW5kKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBpeGVsczxm
YWxzZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7
Ci19CisgICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscworICAgIGludCBjbGlwUmln
aHQgPSBwYWludGluZ0RhdGEud2lkdGggLSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgp
OworICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRpbmdEYXRhLmhlaWdodCAtIHBhaW50aW5nRGF0
YS5rZXJuZWxTaXplLmhlaWdodCgpOwogCi1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1h
dHJpeDo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwg
aW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICAvLyBBbHRob3VnaCB0aGlzIGZ1bmN0aW9u
IGNhbiBiZSBtb3ZlZCB0byB0aGUgaGVhZGVyLCBpdCBpcyBpbXBsZW1lbnRlZCBoZXJlCi0gICAg
Ly8gYmVjYXVzZSBzZXRJbnRlcmlvclBpeGVscyBpcyBhbHNvIGltcGxlbWVudGVkIGhlcmUKLSAg
ICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8dHJ1ZT4o
cGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci0gICAgZWxzZQotICAgICAgICBmYXN0U2V0
T3V0ZXJQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgeDEsIHkxLCB4MiwgeTIpOworICAgIGlm
IChjbGlwUmlnaHQgPCAwIHx8IGNsaXBCb3R0b20gPCAwKSB7CisgICAgICAgIC8vIFJhcmUgc2l0
dWF0aW9uLCBub3Qgb3B0aW1pemVkIGZvciBzcGVlZAorICAgICAgICBzZXRPdXRlclBpeGVscyhw
YWludGluZ0RhdGEsIDAsIDAsIHBhaW50aW5nRGF0YS53aWR0aCwgcGFpbnRpbmdEYXRhLmhlaWdo
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBt
aW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1p
dCBmb3IgcGFyYWxsZWwgam9icworCisgICAgaWYgKGludCBpdGVyYXRpb25zID0gKHBhaW50aW5n
RGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQpIC8gbWluaW1hbFJlY3REaW1lbnNpb24p
IHsKKyAgICAgICAgaW50IHN0cmlkZSA9IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOworICAgICAg
ICBpbnQgY2h1bmtDb3VudCA9IChjbGlwQm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJpZGU7CisK
KyAgICAgICAgQ29uY3VycmVudFdvcmtRdWV1ZTo6YXBwbHkoY2h1bmtDb3VudCwgWyZdKHNpemVf
dCBpbmRleCkgeworICAgICAgICAgICAgaW50IHlTdGFydCA9IChzdHJpZGUgKiBpbmRleCk7Cisg
ICAgICAgICAgICBpbnQgeUVuZCA9IHN0ZDo6bWluPGludD4oc3RyaWRlICogKGluZGV4ICsgMSks
IGNsaXBCb3R0b20pOworCisgICAgICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0Rh
dGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKKyAgICAgICAgfSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJp
Z2h0LCBjbGlwQm90dG9tLCAwLCBjbGlwQm90dG9tKTsKKworICAgIGNsaXBSaWdodCArPSBwYWlu
dGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSArIDE7CisgICAgY2xpcEJvdHRvbSArPSBwYWludGlu
Z0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSArIDE7CisKKyAgICBpZiAocGFpbnRpbmdEYXRhLnRhcmdl
dE9mZnNldC55KCkgPiAwKQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAs
IDAsIHBhaW50aW5nRGF0YS53aWR0aCwgcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCkpOwor
ICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKKyAgICAgICAgc2V0T3V0
ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWludGluZ0RhdGEud2lkdGgs
IHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgIGlmIChwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0
LngoKSA+IDApCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRp
bmdEYXRhLnRhcmdldE9mZnNldC55KCksIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgpLCBj
bGlwQm90dG9tKTsKKyAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRpbmdEYXRhLndpZHRoKQorICAg
ICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgcGFpbnRpbmdEYXRh
LnRhcmdldE9mZnNldC55KCksIHBhaW50aW5nRGF0YS53aWR0aCwgY2xpcEJvdHRvbSk7CiB9CiAK
LWJvb2wgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYpCitib29sIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZp
bHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3RzWzBdLmdldCgpOwogCi0gICAgYXV0byBhbHBoYUZvcm1hdCA9IG1fcHJlc2Vy
dmVBbHBoYSA/IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCA6IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ7Ci0gICAgYXV0byBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoYWxwaGFGb3JtYXQpOworICAgIGF1dG8gYWxw
aGFGb3JtYXQgPSBtX2VmZmVjdC5wcmVzZXJ2ZUFscGhhKCkgPyBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQgOiBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVm
ZmVyUmVzdWx0KGFscGhhRm9ybWF0KTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3Qg
PSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1
bHQoYWxwaGFGb3JtYXQsIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNwYWNlKCkp
OworICAgIGF1dG8gZWZmZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25P
ZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gc291
cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoYWxwaGFGb3JtYXQsIGVm
ZmVjdERyYXdpbmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAgIGlm
ICghc291cmNlUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8m
IHNvdXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOwogICAgIGF1dG8m
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsK
LQotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CiAg
ICAgCisgICAgYXV0byBwYWludFNpemUgPSBtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKTsKKwogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7CiAgICAgICAgIHNvdXJj
ZVBpeGVsQXJyYXksCiAgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwKICAgICAgICAgcGFp
bnRTaXplLndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6ZS5oZWlnaHQoKSwKLSAgICAgICAgbV9i
aWFzICogMjU1LAotICAgICAgICBub3JtYWxpemVkRmxvYXRzKG1fa2VybmVsTWF0cml4KQorICAg
ICAgICBtX2VmZmVjdC5rZXJuZWxTaXplKCksCisgICAgICAgIG1fZWZmZWN0LmRpdmlzb3IoKSwK
KyAgICAgICAgbV9lZmZlY3QuYmlhcygpICogMjU1LAorICAgICAgICBtX2VmZmVjdC50YXJnZXRP
ZmZzZXQoKSwKKyAgICAgICAgbV9lZmZlY3QuZWRnZU1vZGUoKSwKKyAgICAgICAgbV9lZmZlY3Qu
cHJlc2VydmVBbHBoYSgpLAorICAgICAgICBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVkRmxvYXRz
KG1fZWZmZWN0Lmtlcm5lbCgpKQogICAgIH07CiAKLSAgICAvLyBEcmF3aW5nIGZ1bGx5IGNvdmVy
ZWQgcGl4ZWxzCi0gICAgaW50IGNsaXBSaWdodCA9IHBhaW50U2l6ZS53aWR0aCgpIC0gbV9rZXJu
ZWxTaXplLndpZHRoKCk7Ci0gICAgaW50IGNsaXBCb3R0b20gPSBwYWludFNpemUuaGVpZ2h0KCkg
LSBtX2tlcm5lbFNpemUuaGVpZ2h0KCk7Ci0KLSAgICBpZiAoY2xpcFJpZ2h0IDwgMCB8fCBjbGlw
Qm90dG9tIDwgMCkgewotICAgICAgICAvLyBSYXJlIHNpdHVhdGlvbiwgbm90IG9wdGltaXplZCBm
b3Igc3BlZWQKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBwYWlu
dFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgaWYgKGludCBpdGVyYXRpb25zID0gKGFic29sdXRlUGFpbnRSZWN0KCku
d2lkdGgoKSAqIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFsUmVjdERp
bWVuc2lvbikgewotICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlvbnM7
Ci0gICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAvIHN0
cmlkZTsKLQotICAgICAgICBDb25jdXJyZW50V29ya1F1ZXVlOjphcHBseShjaHVua0NvdW50LCBb
Jl0oc2l6ZV90IGluZGV4KSB7Ci0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAqIGlu
ZGV4KTsKLSAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAoaW5k
ZXggKyAxKSwgY2xpcEJvdHRvbSk7Ci0KLSAgICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBh
aW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotICAgICAg
ICB9KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRh
LCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOwotCi0gICAgY2xpcFJpZ2h0
ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7Ci0gICAgY2xpcEJvdHRvbSArPSBtX3RhcmdldE9m
ZnNldC55KCkgKyAxOwotICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQotICAgICAgICBz
ZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBtX3Rh
cmdldE9mZnNldC55KCkpOwotICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhlaWdodCgp
KQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0b20sIHBh
aW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgIGlmIChtX3RhcmdldE9m
ZnNldC54KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIG1f
dGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsKLSAgICBp
ZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHNldE91dGVyUGl4ZWxz
KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50U2l6ZS53
aWR0aCgpLCBjbGlwQm90dG9tKTsKLQorICAgIGFwcGx5UGxhdGZvcm0ocGFpbnRpbmdEYXRhKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZFQ29udm9s
dmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3Rz
KCkpOworfQorCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRWRnZU1vZGVUeXBlJiB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29u
dm9sdmVNYXRyaXguaAppbmRleCAwNWMxYTgzN2QyMzRjZjU4NGRlODkwZjU5NGIyMjA3M2YxMzM2
NWM1Li42YjdhZGU2ZjBiMjI4OWYzNDNlNTY4MTRmZDhjMmRlNTQ0NzNmZjk5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29u
dm9sdmVNYXRyaXguaApAQCAtNjQsMTYgKzY0LDYgQEAgcHVibGljOgogICAgIGJvb2wgc2V0UHJl
c2VydmVBbHBoYShib29sKTsKIAogcHJpdmF0ZToKLQotICAgIHN0cnVjdCBQYWludGluZ0RhdGEg
ewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsKLSAgICAg
ICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0aDsK
LSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgZmxvYXQgYmlhczsKLSAgICAgICAgVmVjdG9y
PGZsb2F0PiBrZXJuZWxNYXRyaXg7Ci0gICAgfTsKLQogICAgIEZFQ29udm9sdmVNYXRyaXgoY29u
c3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgY29uc3Qg
SW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBvaW50JiBr
ZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4m
IGtlcm5lbE1hdHJpeCk7CiAKICAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNv
bnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQpAQCAtODIsMjEgKzcyLDYgQEAgcHJpdmF0ZToKIAog
ICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdGVtcGxhdGU8
Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmYXN0U2V0
SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0
b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLQotICAgIEFMV0FZU19JTkxJTkUgaW50IGdldFBp
eGVsVmFsdWUoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsKLQotICAgIHRlbXBsYXRlPGJv
b2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLSAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVscyhQYWlu
dGluZ0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gV3Jh
cHBlciBmdW5jdGlvbnMKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQaXhlbHMo
UGFpbnRpbmdEYXRhJiwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQs
IGludCB5RW5kKTsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFpbnRp
bmdEYXRhJiwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFBhcmFs
bGVsaXphdGlvbiBwYXJ0cwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVu
c2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwg
am9icwotCiAgICAgSW50U2l6ZSBtX2tlcm5lbFNpemU7CiAgICAgZmxvYXQgbV9kaXZpc29yOwog
ICAgIGZsb2F0IG1fYmlhczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKaW5kZXggMWFhY2U5
ZDY5YTA5MGI0ZjEwZjEzZGU3NTU3NTFlZjI4NjIwOTFjZC4uZWM3MWI1NDdhMWRmODZhOTEzOWQx
M2FlNjMzODY3NDI5NWU5ODdkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKQEAgLTMz
LDcgKzMzLDcgQEAgUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1c2VMaWdodGluZzo6Y3Jl
YXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG8KIH0KIAogRkVEaWZmdXNlTGlnaHRp
bmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBz
dXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5pdExlbmd0
aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3Vy
Y2UpCi0gICAgOiBGRUxpZ2h0aW5nKERpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3Vy
ZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJu
ZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIEZpbHRlckVmZmVjdDo6VHlwZTo6
RkVEaWZmdXNlTGlnaHRpbmcpCisgICAgOiBGRUxpZ2h0aW5nKEZpbHRlckVmZmVjdDo6VHlwZTo6
RkVEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNv
bnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1v
dmUobGlnaHRTb3VyY2UpKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4
IGU3YzFhMjI5OWI0ZTUwN2M0ZjY4Yjg2ODhhOGQwODU3N2MwNTU2YjAuLmRmYzc2MGUyMGY0OTk0
NjA1Zjk0NDkxMmVmZGUzYWMwODE1MDRiYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
CkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiRkVEaXNwbGFjZW1lbnRNYXAuaCIKIAogI2lu
Y2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTg0LDMwICs4NSw0OCBAQCB2b2lkIEZFRGlz
cGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCogaW4s
IGNvbnN0IGludCBpbgogICAgICAgICBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShvcGVy
YXRpbmdDb2xvclNwYWNlKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZz
ZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQorLy8g
RklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFy
YXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVEaXNwbGFjZW1lbnRNYXBTb2Z0
d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRGlzcGxh
Y2VtZW50TWFwPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGll
cjxGRURpc3BsYWNlbWVudE1hcD47CisKK3B1YmxpYzoKKyAgICBGRURpc3BsYWNlbWVudE1hcFNv
ZnR3YXJlQXBwbGllcihGRURpc3BsYWNlbWVudE1hcCYpOworCisgICAgYm9vbCBhcHBseShjb25z
dCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQ
aXhlbCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCByb3dCeXRlcykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OworICAgICAgICByZXR1cm4g
eCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7CisgICAgfQorCisgICAgaW50IHhDaGFu
bmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2VmZmVjdC54Q2hhbm5lbFNlbGVjdG9yKCkgLSAx
OyB9CisgICAgaW50IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2VmZmVjdC55Q2hh
bm5lbFNlbGVjdG9yKCkgLSAxOyB9Cit9OworCitGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBw
bGllcjo6RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIoRkVEaXNwbGFjZW1lbnRNYXAm
IGVmZmVjdCkKKyAgICA6IEJhc2UoZWZmZWN0KQogewotICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVz
UGVyUGl4ZWwgPSA0OwotICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhlbCArIHkgKiByb3dCeXRl
czsKKyAgICBBU1NFUlQobV9lZmZlY3QueENoYW5uZWxTZWxlY3RvcigpICE9IENIQU5ORUxfVU5L
Tk9XTik7CisgICAgQVNTRVJUKG1fZWZmZWN0LnlDaGFubmVsU2VsZWN0b3IoKSAhPSBDSEFOTkVM
X1VOS05PV04pOwogfQogCi1ib29sIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitib29sIEZFRGlzcGxhY2VtZW50TWFwU29mdHdh
cmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0
VmVjdG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0KLSAgICBB
U1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7Ci0gICAgQVNTRVJU
KG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOworICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBp
bnB1dEVmZmVjdHNbMV0uZ2V0KCk7CiAKLSAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIg
PSBwaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
KTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZl
clJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBpZiAo
IWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1
dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEo
KTsKIAotICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJ
bnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRvIGVmZmVj
dEFEcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZl
cihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgYXV0byBpbnB1dFBpeGVsQnVmZmVyID0g
aW4tPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5n
UmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFp
bnRSZWN0KCkpOworICAgIGF1dG8gZWZmZWN0QkRyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAg
ICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g4oCYaW4y
4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQgY29sb3IgdmFsdWVzLgog
ICAgIGF1dG8gZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXIgPSBpbjItPmdldFBpeGVsQnVmZmVyUmVz
dWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZWZmZWN0QkRyYXdp
bmdSZWN0KTsKICAgICAKQEAgLTExOCw5ICsxMzcsOSBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFw
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgYXV0byYg
ZGlzcGxhY2VtZW50SW1hZ2UgPSBkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlci0+ZGF0YSgpOwogICAg
IEFTU0VSVChpbnB1dEltYWdlLmxlbmd0aCgpID09IGRpc3BsYWNlbWVudEltYWdlLmxlbmd0aCgp
KTsKIAotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7
CisgICAgSW50U2l6ZSBwYWludFNpemUgPSBtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKTsKIAotICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxl
KHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsKKyAgICBGbG9hdFNpemUgc2NhbGUgPSBmaWx0ZXIuc2Nh
bGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LnNjYWxlKCksIG1fZWZmZWN0LnNjYWxlKCkgfSk7
CiAgICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBzY2FsZS53aWR0aCgpIC8gMjU1LjA7CiAgICAg
ZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWlnaHQoKSAvIDI1NS4wOwogICAgIGZsb2F0
IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0aCgpICogMC41OwpAQCAtMTUzLDYgKzE3
MiwxMSBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVEaXNwbGFj
ZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sK
KyAgICByZXR1cm4gRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5
KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSYgdHlwZSkKIHsK
ICAgICBzd2l0Y2ggKHR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCA5OTAxNDI2
MWNiODJlOWRhMjBiOWUwM2Y4ZGVkYzIyNTY4M2MxMmVhLi43YTYzNzhiMDRjYjRhZDg4MjExYTBh
NGFjYTg4YWZkODgzMjdjZWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC01MCwxNSAr
NTAsMTIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRURpc3BsYWNlbWVudE1hcChDaGFubmVs
U2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUgeUNoYW5u
ZWxTZWxlY3RvciwgZmxvYXQpOwogCi0gICAgaW50IHhDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9Ci0gICAgaW50IHlDaGFubmVsSW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9Ci0KLSAgICB2b2lkIGRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1
dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQorICAgIGJv
b2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKCkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVjdCos
IGNvbnN0IGludCkgb3ZlcnJpZGU7CiAKLSAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9z
aW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlw
ZSkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCBiNjJhYjY4NGNkOTFl
ZmM3N2YxOGExNjRlOTVhNDU5NGZjNzY4NThlLi5hYWIyNDhkMTQ4MDJmYjY3NTdhZTNhNTlhNDNl
NDYyOTNhZmMxODU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5j
bHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNp
bmNsdWRlICJQaXhlbEJ1ZmZlci5oIgpAQCAtNjksMTggKzcwLDI4IEBAIHZvaWQgRkVEcm9wU2hh
ZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAg
ICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0
KSk7CiB9CiAKLWJvb2wgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVEcm9wU2hhZG93U29m
dHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3Mg
RkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRl
QXBwbGllcjxGRURyb3BTaGFkb3c+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29u
Y3JldGVBcHBsaWVyPEZFRHJvcFNoYWRvdz47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpC
YXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RW
ZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCitib29sIEZFRHJvcFNoYWRvd1Nv
ZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVm
ZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdCgwKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgp
OwogCi0gICAgYXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0
byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFy
ZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRTaXplIGJsdXJS
YWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX3N0ZFgsIG1fc3RkWSB9
KTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBt
X2R4LCBtX2R5IH0pOworICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3Quc3RkRGV2aWF0aW9uWCgpLCBtX2VmZmVjdC5zdGRE
ZXZpYXRpb25ZKCkgfSk7CisgICAgRmxvYXRTaXplIG9mZnNldCA9IGZpbHRlci5zY2FsZWRCeUZp
bHRlclNjYWxlKHsgbV9lZmZlY3QuZHgoKSwgbV9lZmZlY3QuZHkoKSB9KTsKIAotICAgIEZsb2F0
UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBtX2VmZmVjdC5k
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICBG
bG9hdFJlY3QgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQoZHJhd2luZ1JlZ2lvbik7CiAgICAgZHJh
d2luZ1JlZ2lvbldpdGhPZmZzZXQubW92ZShvZmZzZXQpOwogCkBAIC04OSwxMyArMTAwLDEzIEBA
IGJvb2wgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBm
aWx0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCYgcmVz
dWx0Q29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgcmVzdWx0Q29udGV4dC5z
ZXRBbHBoYShtX3NoYWRvd09wYWNpdHkpOworICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEobV9l
ZmZlY3Quc2hhZG93T3BhY2l0eSgpKTsKICAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KTsKICAgICByZXN1bHRDb250
ZXh0LnNldEFscGhhKDEpOwogCi0gICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRp
dXMsIG9mZnNldCwgbV9zaGFkb3dDb2xvcik7CisgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93
KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9lZmZlY3Quc2hhZG93Q29sb3IoKSk7CiAKLSAgICBQaXhl
bEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdENvbG9yU3BhY2UoKSB9OworICAgIFBpeGVs
QnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9lZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpIH07CiAg
ICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT50cnVuY2F0ZWRM
b2dpY2FsU2l6ZSgpKTsKICAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBp
eGVsQnVmZmVyKGZvcm1hdCwgc2hhZG93QXJlYSk7CiAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKQEAg
LTEwNywxNCArMTE4LDE4IEBAIGJvb2wgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVy
KCpwaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7CiAKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwotICAgIHJlc3VsdENv
bnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKKyAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
KSwgbV9lZmZlY3Quc2hhZG93Q29sb3IoKSk7CiAgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3Np
dGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3Zlcik7CiAKICAgICBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdp
bmdSZWdpb24pOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVEcm9wU2hhZG93Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJu
IEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVm
ZmVjdHMoKSk7Cit9CisgICAgCiBJbnRPdXRzZXRzIEZFRHJvcFNoYWRvdzo6b3V0c2V0cygpIGNv
bnN0CiB7CiAgICAgSW50U2l6ZSBvdXRzZXRTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0
ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IDI4MDliNGIxNzVk
MzI1NWQyMTA3NDk5MTZlYjNlZDA1MDEzNTY1YTUuLjk4OThjNzM3NmY2NWYyZTExNzVjMWE3ODFj
NjRlZWY4MzI0NmFlYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIkZF
Rmxvb2QuaCIKIAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgorI2luY2x1ZGUgIkZp
bHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAg
LTU4LDE4ICs1OSwzMyBAQCBib29sIEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBmbG9v
ZE9wYWNpdHkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRkVGbG9vZDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVE
cm9wU2hhZG93U29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZp
bGVzLgorY2xhc3MgRkVGbG9vZFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RD
b25jcmV0ZUFwcGxpZXI8RkVGbG9vZD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RD
b25jcmV0ZUFwcGxpZXI8RkVGbG9vZD47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNl
OworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0
b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCitib29sIEZFRmxvb2RTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYpCiB7
Ci0gICAgYXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBy
ZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1
bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBjb2xvciA9IGZsb29k
Q29sb3IoKS5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9vZE9wYWNpdHkoKSk7Ci0gICAg
cmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBh
YnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNvbG9yKTsKKyAgICBhdXRvIGNvbG9yID0gbV9l
ZmZlY3QuZmxvb2RDb2xvcigpLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KG1fZWZmZWN0LmZs
b29kT3BhY2l0eSgpKTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0KEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwg
Y29sb3IpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVGbG9vZDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRUZsb29k
U29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30K
KwogVGV4dFN0cmVhbSYgRkVGbG9vZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRz
IDw8IGluZGVudCA8PCAiW2ZlRmxvb2QiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCA0YzVm
YWIwMWEzMzk1N2U4ZmU5MjE1NmQ1MDc5MTY3ZDRiZTljMGY5Li5kYjM1OTA4ZjRmNGY4OWE0NThk
NzliYzMwMWYxMjhhYzU1OTI5MTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtMjgsMzAg
KzI4LDE1MCBAQAogCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXJORU9OLmgiCiAjaW5jbHVkZSAi
RmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBV
U0UoQUNDRUxFUkFURSkKICNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRp
ZgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2Vsc2UKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoZmxv
YXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoreworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZFR2F1c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2RlKSk7Cit9CisKK0ZFR2F1c3Np
YW5CbHVyOjpGRUdhdXNzaWFuQmx1cihmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUgZWRn
ZU1vZGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUdhdXNzaWFu
Qmx1cikKKyAgICAsIG1fc3RkWCh4KQorICAgICwgbV9zdGRZKHkpCisgICAgLCBtX2VkZ2VNb2Rl
KGVkZ2VNb2RlKQoreworfQorCit2b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25Y
KGZsb2F0IHgpCit7CisgICAgbV9zdGRYID0geDsKK30KKwordm9pZCBGRUdhdXNzaWFuQmx1cjo6
c2V0U3RkRGV2aWF0aW9uWShmbG9hdCB5KQoreworICAgIG1fc3RkWSA9IHk7Cit9CisKK3ZvaWQg
RkVHYXVzc2lhbkJsdXI6OnNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKK3sKKyAg
ICBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7Cit9CiAKIHN0YXRpYyBpbmxpbmUgZmxvYXQgZ2F1c3Np
YW5LZXJuZWxGYWN0b3IoKQogewogICAgIHJldHVybiAzIC8gNC5mICogc3FydGYoMiAqIHBpRmxv
YXQpOwogfQogCi1zdGF0aWMgY29uc3QgaW50IGdNYXhLZXJuZWxTaXplID0gNTAwOworc3RhdGlj
IGludCBjbGFtcGVkVG9LZXJuZWxTaXplKGZsb2F0IHZhbHVlKQoreworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4S2VybmVsU2l6ZSA9IDUwMDsKKworICAgIC8vIExpbWl0IHRoZSBr
ZXJuZWwgc2l6ZSB0byA1MDAuIEEgYmlnZ2VyIHJhZGl1cyB3b24ndCBtYWtlIGEgYmlnIGRpZmZl
cmVuY2UgZm9yIHRoZSByZXN1bHQgaW1hZ2UgYnV0CisgICAgLy8gaW5mbGF0ZXMgdGhlIGFic29s
dXRlIHBhaW50IHJlY3QgdG9vIG11Y2guIFRoaXMgaXMgY29tcGF0aWJsZSB3aXRoIEZpcmVmb3gn
IGJlaGF2aW9yLgorICAgIHVuc2lnbmVkIHNpemUgPSBzdGQ6Om1heDx1bnNpZ25lZD4oMiwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGZsb29yZih2YWx1ZSAqIGdhdXNzaWFuS2VybmVsRmFjdG9yKCkg
KyAwLjVmKSkpOworICAgIHJldHVybiBjbGFtcFRvPGludD4oc3RkOjptaW4oc2l6ZSwgbWF4S2Vy
bmVsU2l6ZSkpOworfQorICAgIAorSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5z
Y2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCit7CisgICAgQVNTRVJUKHN0
ZERldmlhdGlvbi53aWR0aCgpID49IDAgJiYgc3RkRGV2aWF0aW9uLmhlaWdodCgpID49IDApOwor
ICAgIEludFNpemUga2VybmVsU2l6ZTsKIAotbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGlmIChz
dGREZXZpYXRpb24ud2lkdGgoKSkKKyAgICAgICAga2VybmVsU2l6ZS5zZXRXaWR0aChjbGFtcGVk
VG9LZXJuZWxTaXplKHN0ZERldmlhdGlvbi53aWR0aCgpKSk7CisKKyAgICBpZiAoc3RkRGV2aWF0
aW9uLmhlaWdodCgpKQorICAgICAgICBrZXJuZWxTaXplLnNldEhlaWdodChjbGFtcGVkVG9LZXJu
ZWxTaXplKHN0ZERldmlhdGlvbi5oZWlnaHQoKSkpOworCisgICAgcmV0dXJuIGtlcm5lbFNpemU7
Cit9CisKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIsIEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCit7CisgICAgcmV0dXJuIGNh
bGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZShzdGRE
ZXZpYXRpb24pKTsKK30KKworSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0
U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQoreworICAgIGF1dG8ga2VybmVsU2l6ZSA9IGNh
bGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGREZXZpYXRpb24pOworCisgICAgLy8gV2UgdGFr
ZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVz
ZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCisgICAgcmV0dXJuIHsgMyAqIGtlcm5lbFNp
emUud2lkdGgoKSAvIDIsIDMgKiBrZXJuZWxTaXplLmhlaWdodCgpIC8gMiB9OworfQorCit2b2lk
IEZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXIm
IGZpbHRlcikKK3sKKyAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXpl
KGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKworICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBh
aW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOworICAgIC8vIEVk
Z2UgbW9kZXMgb3RoZXIgdGhhbiAnbm9uZScgZG8gbm90IGluZmxhdGUgdGhlIGFmZmVjdGVkIHBh
aW50IHJlY3QuCisgICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkgeworICAgICAg
ICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtl
cm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3gg
Ymx1ciB0aHJlZSB0aW1lcy4KKyAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgzICoga2Vy
bmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVko
MyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKKworICAgIGlmIChjbGlwc1RvQm91bmRz
KCkpCisgICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkp
OworICAgIGVsc2UKKyAgICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVj
dCgpKTsKKworICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1
dGVQYWludFJlY3QpKTsKK30KKworLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFR2F1c3NpYW5C
bHVyU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgor
Y2xhc3MgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
Q29uY3JldGVBcHBsaWVyPEZFR2F1c3NpYW5CbHVyPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRl
ckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUdhdXNzaWFuQmx1cj47CisKK3B1YmxpYzoKKyAgICB1
c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBG
aWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7CisgICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gaW9QaXhlbEFycmF5OworICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHRt
cFBpeGVsQXJyYXk7CisgICAgICAgIGludCB3aWR0aDsKKyAgICAgICAgaW50IGhlaWdodDsKKyAg
ICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVg7CisgICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVZ
OworICAgICAgICBib29sIGlzQWxwaGFJbWFnZTsKKyAgICAgICAgRWRnZU1vZGVUeXBlIGVkZ2VN
b2RlOworICAgIH07CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQga2VybmVsUG9zaXRpb24oaW50
IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGludCYgZGVsdGFMZWZ0LCBpbnQmIGRl
bHRhUmlnaHQpOwogCi1pbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlv
biwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCkKKyAg
ICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckFscGhhT25seShjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIHVu
c2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwgaW50JiBz
dHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdodCwgY29uc3QgaW50
JiBtYXhLZXJuZWxTaXplKTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1cihjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBp
eGVsQXJyYXksIHVuc2lnbmVkIGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwgaW50IHN0cmlk
ZSwgaW50IHN0cmlkZUxpbmUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCwgYm9v
bCBhbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOworCisgICAgc3RhdGljIGlubGluZSB2b2lkIGJv
eEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplLCBpbnQgc3RyaWRlLCBpbnQg
ZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBi
b3hCbHVyVW5hY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xh
bXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2Vy
bmVsU2l6ZVksIGludCBzdHJpZGUsIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1h
Z2UsIEVkZ2VNb2RlVHlwZSk7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckdlbmVy
aWMoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4
ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRT
aXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOworICAgIHN0
YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyV29ya2VyKEFwcGx5UGFyYW1ldGVycyopOworCisgICAg
c3RhdGljIGlubGluZSB2b2lkIGFwcGx5UGxhdGZvcm0oVWludDhDbGFtcGVkQXJyYXkmIGlvQnVm
ZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6
ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBo
YUltYWdlLCBFZGdlTW9kZVR5cGUpOworfTsKKworaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJT
b2Z0d2FyZUFwcGxpZXI6Omtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25l
ZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0YVJpZ2h0KQogewogICAgIC8vIENo
ZWNrIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVHYXVzc2lhbkJsdXJF
bGVtZW50IGZvciBkZXRhaWxzLgogICAgIHN3aXRjaCAoYmx1ckl0ZXJhdGlvbikgewpAQCAtNzks
MzcgKzE5OSw4IEBAIGlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9u
LCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwKICAgICB9CiB9CiAKLVJlZjxGRUdh
dXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5LCBFZGdl
TW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lh
bkJsdXIoeCwgeSwgZWRnZU1vZGUpKTsKLX0KLQotRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5C
bHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLSAgICA6IEZpbHRl
ckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFR2F1c3NpYW5CbHVyKQotICAgICwgbV9zdGRY
KHgpCi0gICAgLCBtX3N0ZFkoeSkKLSAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUpCi17Ci19Ci0K
LXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgoZmxvYXQgeCkKLXsKLSAgICBt
X3N0ZFggPSB4OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25ZKGZs
b2F0IHkpCi17Ci0gICAgbV9zdGRZID0geTsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0
RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIG1fZWRnZU1vZGUgPSBlZGdl
TW9kZTsKLX0KLQogLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJhdGVzIG9uIEFscGhhIGNoYW5u
ZWwuCi1pbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwKLSAgICB1
bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYg
c3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGlu
dCYgbWF4S2VybmVsU2l6ZSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBs
aWVyOjpib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFy
cmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgsIGludCYg
ZHhMZWZ0LCBpbnQmIGR4UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYg
ZWZmZWN0V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUp
CiB7CiAgICAgY29uc3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQXJyYXkuZGF0YSgpOwog
ICAgIHVpbnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhlbEFycmF5LmRhdGEoKTsKQEAgLTE0OSw4ICsy
NDAsNyBAQCBpbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZQogICAgIH0KIH0KIAotaW5saW5lIHZvaWQg
Ym94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFt
cGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksCi0gICAgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGlu
dCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBp
bnQgZWZmZWN0SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkK
K2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0
UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBpbnQgc3Ry
aWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0LCBi
b29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKICAgICBjb25zdCBpbnQg
bWF4S2VybmVsU2l6ZSA9IHN0ZDo6bWluKGR4UmlnaHQsIGVmZmVjdFdpZHRoKTsKICAgICBpZiAo
YWxwaGFJbWFnZSkKQEAgLTI4MCw3ICszNzAsNyBAQCBpbmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZAog
fQogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCi1pbmxpbmUgdm9pZCBhY2NlbGVyYXRlQm94Qmx1cihV
aW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVy
LCB1bnNpZ25lZCBrZXJuZWxTaXplLCBpbnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lkdGgsIGludCBl
ZmZlY3RIZWlnaHQpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6
Ym94Qmx1ckFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFt
cGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUsIGlu
dCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCkKIHsKICAgICBpZiAoIWlvQnVmZmVyLmRh
dGEoKSB8fCAhdGVtcEJ1ZmZlci5kYXRhKCkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC0zMjYsNyArNDE2LDcgQEAgaW5saW5lIHZvaWQgYWNjZWxlcmF0ZUJveEJsdXIoVWlu
dDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGUKIH0KICNlbmRp
ZgogCi1pbmxpbmUgdm9pZCBzdGFuZGFyZEJveEJsdXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVm
ZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgs
IHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNpemUsIGJv
b2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCitpbmxpbmUgdm9pZCBGRUdh
dXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQoVWludDhDbGFt
cGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWdu
ZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXpl
JiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7
CiAgICAgaW50IGR4TGVmdCA9IDA7CiAgICAgaW50IGR4UmlnaHQgPSAwOwpAQCAtMzcxLDM1ICs0
NjEsMzkgQEAgaW5saW5lIHZvaWQgc3RhbmRhcmRCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBp
b0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXAKICAgICB9CiB9CiAKLWlubGluZSB2b2lk
IEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRBcnJheSYg
aW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJu
ZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSkKK2lubGlu
ZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyR2VuZXJpYyhVaW50
OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5
LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBh
aW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKICAg
ICBpbnQgc3RyaWRlID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOwogCiAjaWYgVVNFKEFDQ0VMRVJB
VEUpCi0gICAgaWYgKGtlcm5lbFNpemVYID09IGtlcm5lbFNpemVZICYmIChtX2VkZ2VNb2RlID09
IEVER0VNT0RFX05PTkUgfHwgbV9lZGdlTW9kZSA9PSBFREdFTU9ERV9EVVBMSUNBVEUpKSB7Ci0g
ICAgICAgIGFjY2VsZXJhdGVCb3hCbHVyKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxT
aXplWCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKKyAg
ICBpZiAoa2VybmVsU2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKGVkZ2VNb2RlID09IEVER0VNT0RF
X05PTkUgfHwgZWRnZU1vZGUgPT0gRURHRU1PREVfRFVQTElDQVRFKSkgeworICAgICAgICBib3hC
bHVyQWNjZWxlcmF0ZWQoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBzdHJp
ZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmCiAKLSAgICBzdGFuZGFyZEJveEJsdXIoaW9CdWZmZXIsIHRtcFBp
eGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWludFNpemUsIGlz
QWxwaGFJbWFnZSgpLCBtX2VkZ2VNb2RlKTsKKyAgICBib3hCbHVyVW5hY2NlbGVyYXRlZChpb0J1
ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBzdHJpZGUsIHBh
aW50U2l6ZSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7CiB9CiAKLXZvaWQgRkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRl
cnMpCisjaWYgIVVTRShBQ0NFTEVSQVRFKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0
d2FyZUFwcGxpZXI6OmJveEJsdXJXb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQog
ewogICAgIEludFNpemUgcGFpbnRTaXplKHBhcmFtZXRlcnMtPndpZHRoLCBwYXJhbWV0ZXJzLT5o
ZWlnaHQpOwotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVyaWMoKnBh
cmFtZXRlcnMtPmlvUGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnRtcFBpeGVsQXJyYXksIHBhcmFt
ZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWSwgcGFpbnRTaXplKTsK
KyAgICBib3hCbHVyR2VuZXJpYygqcGFyYW1ldGVycy0+aW9QaXhlbEFycmF5LCAqcGFyYW1ldGVy
cy0+dG1wUGl4ZWxBcnJheSwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVgsIHBhcmFtZXRlcnMtPmtl
cm5lbFNpemVZLCBwYWludFNpemUsIHBhcmFtZXRlcnMtPmlzQWxwaGFJbWFnZSwgcGFyYW1ldGVy
cy0+ZWRnZU1vZGUpOwogfQorI2VuZGlmCiAKLWlubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyOjpw
bGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJy
YXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxT
aXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBV
aW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVu
c2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdl
LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7CiAjaWYgIVVTRShBQ0NFTEVSQVRFKQogICAgIGlu
dCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKICAgICBpbnQgZXh0cmFIZWlnaHQg
PSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOwotICAgIGludCBvcHRpbWFsVGhyZWFkTnVtYmVyID0g
KHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpKSAvIChzX21pbmltYWxSZWN0
RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWludFNpemUud2lkdGgoKSk7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGludCBtaW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1w
aXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKyAgICBpbnQgb3B0aW1hbFRocmVh
ZE51bWJlciA9IChwYWludFNpemUud2lkdGgoKSAqIHBhaW50U2l6ZS5oZWlnaHQoKSkgLyAobWlu
aW1hbFJlY3REaW1lbnNpb24gKyBleHRyYUhlaWdodCAqIHBhaW50U2l6ZS53aWR0aCgpKTsKIAog
ICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBQYXJhbGxlbEpvYnM8
UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBseVdvcmtl
ciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAgIFBhcmFsbGVsSm9iczxBcHBseVBhcmFt
ZXRlcnM+IHBhcmFsbGVsSm9icygmYm94Qmx1cldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7
CiAKICAgICAgICAgaW50IGpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CiAgICAg
ICAgIGlmIChqb2JzID4gMSkgewpAQCAtNDEwLDggKzUwNCw3IEBAIGlubGluZSB2b2lkIEZFR2F1
c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWlu
dDhDbGFtCiAKICAgICAgICAgICAgIGludCBjdXJyZW50WSA9IDA7CiAgICAgICAgICAgICBmb3Ig
KGludCBqb2IgPSAwOyBqb2IgPCBqb2JzOyBqb2IrKykgewotICAgICAgICAgICAgICAgIFBsYXRm
b3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7
Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7CisgICAgICAgICAgICAgICAg
QXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7CiAK
ICAgICAgICAgICAgICAgICBpbnQgc3RhcnRZID0gIWpvYiA/IDAgOiBjdXJyZW50WSAtIGV4dHJh
SGVpZ2h0OwogICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRoRXh0cmEg
PyBibG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdodDsKQEAgLTQzMSw2ICs1MjQsOCBAQCBpbmxp
bmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseShVaW50OENsYW1wZWRBcnJheSYg
aW9CdWZmZXIsIFVpbnQ4Q2xhbQogICAgICAgICAgICAgICAgIHBhcmFtcy5oZWlnaHQgPSBlbmRZ
IC0gc3RhcnRZOwogICAgICAgICAgICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWCA9IGtlcm5lbFNp
emVYOwogICAgICAgICAgICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWSA9IGtlcm5lbFNpemVZOwor
ICAgICAgICAgICAgICAgIHBhcmFtcy5pc0FscGhhSW1hZ2UgPSBpc0FscGhhSW1hZ2U7CisgICAg
ICAgICAgICAgICAgcGFyYW1zLmVkZ2VNb2RlID0gZWRnZU1vZGU7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7CkBAIC00MzgsNyArNTMzLDcgQEAg
aW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJy
YXkmIGlvQnVmZmVyLCBVaW50OENsYW0KICAgICAgICAgICAgIC8vIENvcHkgdG9nZXRoZXIgdGhl
IHBhcnRzIG9mIHRoZSBpbWFnZS4KICAgICAgICAgICAgIGN1cnJlbnRZID0gMDsKICAgICAgICAg
ICAgIGZvciAoaW50IGpvYiA9IDE7IGpvYiA8IGpvYnM7IGpvYisrKSB7Ci0gICAgICAgICAgICAg
ICAgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0
ZXIoam9iKTsKKyAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFs
bGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKICAgICAgICAgICAgICAgICBpbnQgc291cmNlT2Zmc2V0
OwogICAgICAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbk9mZnNldDsKICAgICAgICAgICAgICAg
ICBpbnQgc2l6ZTsKQEAgLTQ1OCw5NCArNTUzLDQxIEBAIGlubGluZSB2b2lkIEZFR2F1c3NpYW5C
bHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFt
CiAjZW5kaWYKIAogICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBo
YXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCi0gICAgcGxhdGZvcm1BcHBseUdl
bmVyaWMoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwg
cGFpbnRTaXplKTsKLX0KLQotc3RhdGljIGludCBjbGFtcGVkVG9LZXJuZWxTaXplKGZsb2F0IHZh
bHVlKQotewotICAgIC8vIExpbWl0IHRoZSBrZXJuZWwgc2l6ZSB0byA1MDAuIEEgYmlnZ2VyIHJh
ZGl1cyB3b24ndCBtYWtlIGEgYmlnIGRpZmZlcmVuY2UgZm9yIHRoZSByZXN1bHQgaW1hZ2UgYnV0
Ci0gICAgLy8gaW5mbGF0ZXMgdGhlIGFic29sdXRlIHBhaW50IHJlY3QgdG9vIG11Y2guIFRoaXMg
aXMgY29tcGF0aWJsZSB3aXRoIEZpcmVmb3gnIGJlaGF2aW9yLgotICAgIHVuc2lnbmVkIHNpemUg
PSBzdGQ6Om1heDx1bnNpZ25lZD4oMiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZsb29yZih2YWx1
ZSAqIGdhdXNzaWFuS2VybmVsRmFjdG9yKCkgKyAwLjVmKSkpOwotICAgIHJldHVybiBjbGFtcFRv
PGludD4oc3RkOjptaW4oc2l6ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdNYXhLZXJuZWxTaXpl
KSkpOwotfQotICAgIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5zY2FsZWRL
ZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCi17Ci0gICAgQVNTRVJUKHN0ZERldmlh
dGlvbi53aWR0aCgpID49IDAgJiYgc3RkRGV2aWF0aW9uLmhlaWdodCgpID49IDApOwotICAgIElu
dFNpemUga2VybmVsU2l6ZTsKLQotICAgIGlmIChzdGREZXZpYXRpb24ud2lkdGgoKSkKLSAgICAg
ICAga2VybmVsU2l6ZS5zZXRXaWR0aChjbGFtcGVkVG9LZXJuZWxTaXplKHN0ZERldmlhdGlvbi53
aWR0aCgpKSk7Ci0KLSAgICBpZiAoc3RkRGV2aWF0aW9uLmhlaWdodCgpKQotICAgICAgICBrZXJu
ZWxTaXplLnNldEhlaWdodChjbGFtcGVkVG9LZXJuZWxTaXplKHN0ZERldmlhdGlvbi5oZWlnaHQo
KSkpOwotCi0gICAgcmV0dXJuIGtlcm5lbFNpemU7CisgICAgYm94Qmx1ckdlbmVyaWMoaW9CdWZm
ZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgcGFpbnRTaXplLCBp
c0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKIH0KIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2Fs
Y3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRTaXplIHN0ZERldmlh
dGlvbikKK2Jvb2wgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZp
bHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKIHsK
LSAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGZpbHRlci5zY2FsZWRCeUZp
bHRlclNjYWxlKHN0ZERldmlhdGlvbikpOwotfQorICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1
dEVmZmVjdHNbMF0uZ2V0KCk7CiAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91
dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKLXsKLSAgICBhdXRvIGtlcm5lbFNpemUg
PSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uKTsKLQotICAgIC8vIFdl
IHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJl
Y2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgotICAgIHJldHVybiB7IDMgKiBrZXJu
ZWxTaXplLndpZHRoKCkgLyAyLCAzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAvIDIgfTsKLX0KLQot
dm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmls
dGVyJiBmaWx0ZXIpCi17Ci0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVs
U2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0KLSAgICBGbG9hdFJlY3QgYWJzb2x1
dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAv
LyBFZGdlIG1vZGVzIG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRoZSBhZmZlY3Rl
ZCBwYWludCByZWN0LgotICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUpIHsKLSAg
ICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50
UmVjdCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFs
ZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4g
Ym94IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAq
IGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxh
dGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xpcHNUb0Jv
dW5kcygpKQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVj
dCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVj
dFJlY3QoKSk7Ci0KLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFi
c29sdXRlUGFpbnRSZWN0KSk7Ci19Ci0KLWJvb2wgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKLXsKLSAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBw
aXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsK
KyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJl
c3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBpZiAoIWRl
c3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNldElz
QWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworICAgIG1fZWZmZWN0LnNldElzQWxwaGFJ
bWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVj
dCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSk7CisgICAgYXV0byBlZmZlY3REcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJl
Z2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgaW4t
PmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZmZWN0RHJh
d2luZ1JlY3QpOwotICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCisgICAgaWYgKCFtX2VmZmVj
dC5zdGREZXZpYXRpb25YKCkgJiYgIW1fZWZmZWN0LnN0ZERldmlhdGlvblkoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxT
aXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBhdXRvIGtlcm5lbFNpemUgPSBt
X2VmZmVjdC5jYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX2VmZmVjdC5zdGREZXZpYXRp
b25YKCksIG1fZWZmZWN0LnN0ZERldmlhdGlvblkoKSB9KTsKIAotICAgIEludFNpemUgcGFpbnRT
aXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CisgICAgSW50U2l6ZSBwYWludFNpemUg
PSBtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKICAgICBhdXRvIHRtcEltYWdl
RGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHBhaW50U2l6
ZS5hcmVhKCkgKiA0KTsKICAgICBpZiAoIXRtcEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhl
bEJ1ZmZlci0+ZGF0YSgpOwotICAgIHBsYXRmb3JtQXBwbHkoZGVzdGluYXRpb25QaXhlbEFycmF5
LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCks
IHBhaW50U2l6ZSk7CisgICAgYXBwbHlQbGF0Zm9ybShkZXN0aW5hdGlvblBpeGVsQXJyYXksICp0
bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFp
bnRTaXplLCBtX2VmZmVjdC5pc0FscGhhSW1hZ2UoKSwgbV9lZmZlY3QuZWRnZU1vZGUoKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVHYXVzc2lhbkJs
dXJTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOwor
fQorCiBJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKIHsKICAgICBJ
bnRTaXplIG91dHNldFNpemUgPSBjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9zdGRYLCBtX3N0ZFkg
fSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKaW5kZXggZDc0YmRhYTcyZWQzMDRmNWI4MDE3N2FkNmNjYTc3
NWE1YjQ5MzcxNy4uNjVhYTZlMTg4OTdmYThjYzk3NjlkMWU1NTdkN2QyNmY1ZTVjYTIyMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuaApAQCAtNDYsMjkgKzQ2LDEzIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgRkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlKTsKIAotICAg
IHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8g
RW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIHN0cnVjdCBQbGF0
Zm9ybUFwcGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIEZFR2F1c3NpYW5CbHVyKiBmaWx0ZXI7Ci0g
ICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW9QaXhlbEFycmF5OwotICAgICAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHRtcFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3aWR0
aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVg7Ci0g
ICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVZOwotICAgIH07Ci0KICAgICB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7Ci0KICAgICBJbnRP
dXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0cmVhbSYg
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5
cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseVdvcmtl
cihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseShVaW50
OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1
bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50
U2l6ZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRBcnJheSYg
aW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxT
aXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSk7CisgICAgV1RG
OjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJl
cHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBmbG9hdCBtX3N0ZFg7CiAg
ICAgZmxvYXQgbV9zdGRZOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKaW5kZXggYTY5NjU0YWYyMGJjMzllMDU4MTQ5
OTI4M2MyZmU0ODcyZjhkMzNlNi4uMDQyYTgzNjE2Mzk1ZGVhYjE0NzQyMzk4MTQyZDVkZjkyOTFk
MGE4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCkBAIC0zMCwxNSArMzAsMTQgQEAKIAogI2luY2x1ZGUgIkNv
bG9yQ29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZFTGlnaHRpbmdORU9OLmgiCisjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVk
ZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFTGlnaHRp
bmc6OkZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlIGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBm
bG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4m
JiBsaWdodFNvdXJjZSwgVHlwZSB0eXBlKQorRkVMaWdodGluZzo6RkVMaWdodGluZyhUeXBlIHR5
cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0
IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJF
eHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
LCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCiAgICAgOiBGaWx0ZXJFZmZlY3QodHlw
ZSkKLSAgICAsIG1fbGlnaHRpbmdUeXBlKGxpZ2h0aW5nVHlwZSkKLSAgICAsIG1fbGlnaHRTb3Vy
Y2UoV1RGTW92ZShsaWdodFNvdXJjZSkpCiAgICAgLCBtX2xpZ2h0aW5nQ29sb3IobGlnaHRpbmdD
b2xvcikKICAgICAsIG1fc3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSkKICAgICAsIG1fZGlmZnVz
ZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFudCkKQEAgLTQ2LDYgKzQ1LDcgQEAgRkVMaWdodGluZzo6
RkVMaWdodGluZyhMaWdodGluZ1R5cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRp
bmdDb2xvciwgZmwKICAgICAsIG1fc3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50KQog
ICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWChrZXJuZWxVbml0TGVuZ3RoWCkKICAgICAsIG1fa2Vy
bmVsVW5pdExlbmd0aFkoa2VybmVsVW5pdExlbmd0aFkpCisgICAgLCBtX2xpZ2h0U291cmNlKFdU
Rk1vdmUobGlnaHRTb3VyY2UpKQogewogfQogCkBAIC04NSwxNyArODUsMTA1IEBAIGJvb2wgRkVM
aWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBjb25zdGV4cHIgaW50IGNQaXhlbFNpemUgPSA0
Owotc3RhdGljIGNvbnN0ZXhwciBpbnQgY0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7Ci1zdGF0aWMg
Y29uc3RleHByIHVpbnQ4X3QgY09wYXF1ZUFscGhhID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oMHhG
Rik7CisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllciB0
byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFTGlnaHRpbmdTb2Z0
d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFTGlnaHRp
bmc+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFTGln
aHRpbmc+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBw
bHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMp
IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGNQaXhlbFNp
emUgPSA0OworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGNBbHBoYUNoYW5uZWxPZmZzZXQgPSAz
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBjT3BhcXVlQWxwaGEgPSBzdGF0aWNfY2Fz
dDx1aW50OF90PigweEZGKTsKKworICAgIC8vIFRoZXNlIGZhY3RvcnMgYW5kIHRoZSBub3JtYWwg
Y29lZmZpY2llbnRzIGNvbWUgZnJvbSB0aGUgdGFibGUgdW5kZXIgaHR0cHM6Ly93d3cudzMub3Jn
L1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LgorICAgIHN0YXRp
YyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYyID0gLTEgLyAyLmY7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjMgPSAtMSAvIDMuZjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGZsb2F0IGNGYWN0b3IxZGl2NCA9IC0xIC8gNC5mOworICAgIHN0YXRpYyBjb25zdGV4cHIg
ZmxvYXQgY0ZhY3RvcjJkaXYzID0gLTIgLyAzLmY7CisKKyAgICBzdHJ1Y3QgQWxwaGFXaW5kb3cg
eworICAgICAgICB1aW50OF90IGFscGhhWzNdWzNdIHsgfTsKKyAgICAKKyAgICAgICAgLy8gVGhl
IGltcGxlbWVudGF0aW9ucyBhcmUgbGluZWQgdXAgdG8gbWFrZSBjb21wYXJpbmcgaW5kaWNlcyBl
YXNpZXIuCisgICAgICAgIHVpbnQ4X3QgdG9wTGVmdCgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0
dXJuIGFscGhhWzBdWzBdOyB9CisgICAgICAgIHVpbnQ4X3QgbGVmdCgpIGNvbnN0ICAgICAgICAg
ICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzBdOyB9CisgICAgICAgIHVpbnQ4X3QgYm90dG9tTGVm
dCgpIGNvbnN0ICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzBdOyB9CisKKyAgICAgICAgdWlu
dDhfdCB0b3AoKSBjb25zdCAgICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMF1bMV07IH0K
KyAgICAgICAgdWludDhfdCBjZW50ZXIoKSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4gYWxw
aGFbMV1bMV07IH0KKyAgICAgICAgdWludDhfdCBib3R0b20oKSBjb25zdCAgICAgICAgICAgICAg
eyByZXR1cm4gYWxwaGFbMl1bMV07IH0KKworICAgICAgICB2b2lkIHNldFRvcCh1aW50OF90IHZh
bHVlKSAgICAgICAgICB7IGFscGhhWzBdWzFdID0gdmFsdWU7IH0KKyAgICAgICAgdm9pZCBzZXRD
ZW50ZXIodWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsxXVsxXSA9IHZhbHVlOyB9CisgICAg
ICAgIHZvaWQgc2V0Qm90dG9tKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxwaGFbMl1bMV0gPSB2
YWx1ZTsgfQorCisgICAgICAgIHZvaWQgc2V0VG9wUmlnaHQodWludDhfdCB2YWx1ZSkgICAgIHsg
YWxwaGFbMF1bMl0gPSB2YWx1ZTsgfQorICAgICAgICB2b2lkIHNldFJpZ2h0KHVpbnQ4X3QgdmFs
dWUpICAgICAgICB7IGFscGhhWzFdWzJdID0gdmFsdWU7IH0KKyAgICAgICAgdm9pZCBzZXRCb3R0
b21SaWdodCh1aW50OF90IHZhbHVlKSAgeyBhbHBoYVsyXVsyXSA9IHZhbHVlOyB9CisKKyAgICAg
ICAgc3RhdGljIHZvaWQgc2hpZnRSb3codWludDhfdCBhbHBoYVszXSkKKyAgICAgICAgeworICAg
ICAgICAgICAgYWxwaGFbMF0gPSBhbHBoYVsxXTsKKyAgICAgICAgICAgIGFscGhhWzFdID0gYWxw
aGFbMl07CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBzaGlmdCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzBdKTsKKyAgICAgICAgICAgIHNoaWZ0Um93KGFs
cGhhWzFdKTsKKyAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzJdKTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKKyAgICAgICAgLy8gVGhpcyBzdHJ1Y3R1
cmUgY29udGFpbnMgb25seSByZWFkLW9ubHkgKFNNUCBzYWZlKSBkYXRhCisgICAgICAgIEZFTGln
aHRpbmcqIGVmZmVjdDsKKyAgICAgICAgRmlsdGVyRWZmZWN0OjpUeXBlIGZpbHRlclR5cGU7Cisg
ICAgICAgIENvbG9yIGxpZ2h0aW5nQ29sb3I7CisgICAgICAgIGZsb2F0IHN1cmZhY2VTY2FsZTsK
KyAgICAgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50OworICAgICAgICBmbG9hdCBzcGVjdWxhckNv
bnN0YW50OworICAgICAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50OworICAgICAgICBjb25zdCBM
aWdodFNvdXJjZSogbGlnaHRTb3VyY2U7CisgICAgICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSogb3BlcmF0aW5nQ29sb3JTcGFjZTsKKworICAgICAgICBVaW50OENsYW1wZWRBcnJheSog
cGl4ZWxzOworICAgICAgICBpbnQgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgICAg
IGludCB3aWR0aDsKKyAgICAgICAgaW50IGhlaWdodDsKKworICAgICAgICBpbmxpbmUgSW50U2l6
ZSB0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAgICBpbmxpbmUgSW50U2l6
ZSB0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXpl
IHRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAgICBpbmxpbmUgSW50U2l6
ZSBsZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAgICBpbmxpbmUgSW50
U2l6ZSBpbnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYpIGNvbnN0OworICAg
ICAgICBpbmxpbmUgSW50U2l6ZSByaWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsK
KyAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dDsKKyAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQpIGNv
bnN0OworICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0
KSBjb25zdDsKKyAgICB9OworCisgICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7CisgICAgICAg
IExpZ2h0aW5nRGF0YSBkYXRhOworICAgICAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBh
aW50aW5nRGF0YTsKKyAgICAgICAgaW50IHlTdGFydDsKKyAgICAgICAgaW50IHlFbmQ7CisgICAg
fTsKKworICAgIHN0YXRpYyB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3Qg
TGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBp
bnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3Rv
ciwgZmxvYXQgYWxwaGEpOworICAgIHN0YXRpYyB2b2lkIHNldFBpeGVsKGludCBvZmZzZXQsIGNv
bnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQg
eCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRW
ZWN0b3IpOwogCi0vLyBUaGVzZSBmYWN0b3JzIGFuZCB0aGUgbm9ybWFsIGNvZWZmaWNpZW50cyBj
b21lIGZyb20gdGhlIHRhYmxlIHVuZGVyIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmlsdGVy
cy5odG1sI2ZlRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC4KLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQg
Y0ZhY3RvcjFkaXYyID0gLTEgLyAyLmY7Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3Ix
ZGl2MyA9IC0xIC8gMy5mOwotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjQgPSAt
MSAvIDQuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjJkaXYzID0gLTIgLyAzLmY7
CisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChjb25zdCBMaWdodGlu
Z0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50
IGVuZFkpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1HZW5lcmljV29ya2VyKEFwcGx5
UGFyYW1ldGVycyopOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0
IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKKyAgICBz
dGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtKGNvbnN0IExpZ2h0aW5nRGF0YSYpOworfTsKIAotaW5s
aW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpM
aWdodGluZ0RhdGE6OnRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQg
Y2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwogICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0xMDgs
NyArMTk2LDcgQEAgaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BM
ZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUg
RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QK
K2lubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6
dG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwogICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0xMjMsNyArMjExLDcgQEAgaW5s
aW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50IG9m
ZnNldCkgY29uc3QKICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdo
dGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50U2l6
ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFs
KGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwog
ICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0xMzYsNyArMjI0LDcgQEAgaW5saW5lIEludFNpemUg
RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dAogICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoraW5saW5lIEludFNpemUgRkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKICAgICBpbnQgcmlnaHQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwpAQCAtMTUyLDcgKzI0MCw3IEBAIGlubGluZSBJbnRTaXplIEZFTGln
aHRpbmc6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAog
ICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50
ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmIGFscGhhV2luZG93KSBjb25zdAor
aW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpp
bnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYgYWxwaGFXaW5kb3cpIGNvbnN0
CiB7CiAgICAgaW50IHJpZ2h0QWxwaGFPZmZzZXQgPSBvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldDsKICAgICAKQEAgLTE4Miw3ICsyNzAsNyBAQCBpbmxpbmUgSW50U2l6
ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFs
cGhhV2luZG93JgogICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJbnRT
aXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5O
b3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAgLTE5OCw3ICsyODYsNyBAQCBpbmxpbmUgSW50
U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsKGludCBvZmZz
ZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRp
bmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50U2l6
ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3Jt
YWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGludCBy
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0yMTEsNyArMjk5LDcgQEAgaW5saW5lIEludFNp
emUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQp
IGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJbnRTaXplIEZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsKGlu
dCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAg
IGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0yMjYsNyArMzE0LDcgQEAgaW5saW5lIEludFNpemUgRkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QK
ICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJv
dHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGlu
dCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CkBAIC0yMzksMjEgKzMyNywxNiBAQCBpbmxpbmUgSW50U2l6ZSBGRUxp
Z2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0
CiAgICAgfTsKIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25z
dCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJ
bnRTaXplIG5vcm1hbDJEVmVjdG9yKQotewotICAgIHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0LCBk
YXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZhY3RvclksIG5vcm1hbDJEVmVjdG9y
LCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci19Ci0K
LXZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdo
dGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXpl
IG5vcm1hbDJEVmVjdG9yLCBmbG9hdCBhbHBoYSkKK3ZvaWQgRkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllcjo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRh
dGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgs
IGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVj
dG9yLCBmbG9hdCBhbHBoYSkKIHsKICAgICBmbG9hdCB6ID0gYWxwaGEgKiBkYXRhLnN1cmZhY2VT
Y2FsZTsKLSAgICBMaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgbGlnaHRpbmdEYXRh
ID0gbV9saWdodFNvdXJjZS0+Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKHBhaW50aW5nRGF0YSwg
eCwgeSwgeik7CisgICAgTGlnaHRTb3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIGxpZ2h0aW5n
RGF0YSA9IGRhdGEubGlnaHRTb3VyY2UtPmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShwYWludGlu
Z0RhdGEsIHgsIHksIHopOwogCiAgICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKICAgICBpZiAobm9y
bWFsMkRWZWN0b3IuaXNaZXJvKCkpIHsKICAgICAgICAgLy8gTm9ybWFsIHZlY3RvciBpcyAoMCwg
MCwgMSkuIFRoaXMgaXMgYSBxdWl0ZSBmcmVxdWVudCBjYXNlLgotICAgICAgICBpZiAobV9saWdo
dGluZ1R5cGUgPT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAgICAgbGln
aHRTdHJlbmd0aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9y
LnooKSAvIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aDsKKyAgICAgICAgaWYgKGRhdGEu
ZWZmZWN0LT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdo
dGluZykKKyAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VDb25zdGFudCAq
IGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JM
ZW5ndGg7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlW
ZWN0b3IgPSB7CiAgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwK
QEAgLTI2MSwxMCArMzQ0LDEwIEBAIHZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5hbChp
bnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpCiAgICAgICAgICAg
ICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZl
Y3Rvckxlbmd0aAogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0
b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYgKG1fc3Bl
Y3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3Nw
ZWN1bGFyQ29uc3RhbnQgKiBoYWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGg7
CisgICAgICAgICAgICBpZiAoZGF0YS5zcGVjdWxhckV4cG9uZW50ID09IDEpCisgICAgICAgICAg
ICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIGhhbGZ3YXlWZWN0
b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0aDsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93ZihoYWxmd2F5
VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGgsIG1fc3BlY3VsYXJFeHBvbmVudCk7Cisg
ICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIHBv
d2YoaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoLCBkYXRhLnNwZWN1bGFy
RXhwb25lbnQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgRmxvYXRQb2ludDNE
IG5vcm1hbFZlY3RvciA9IHsKQEAgLTI3NCw4ICszNTcsOCBAQCB2b2lkIEZFTGlnaHRpbmc6OnNl
dFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25z
dCBMaQogICAgICAgICB9OwogICAgICAgICBmbG9hdCBub3JtYWxWZWN0b3JMZW5ndGggPSBub3Jt
YWxWZWN0b3IubGVuZ3RoKCk7CiAKLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGln
aHRpbmc6OkRpZmZ1c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2Rp
ZmZ1c2VDb25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3Ip
IC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7
CisgICAgICAgIGlmIChkYXRhLmVmZmVjdC0+ZmlsdGVyVHlwZSgpID09IEZpbHRlckVmZmVjdDo6
VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcpCisgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0
YS5kaWZmdXNlQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVj
dG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5n
dGgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVj
dG9yID0gewogICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci54KCksCkBA
IC0yODMsMTAgKzM2NiwxMCBAQCB2b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwoaW50
IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaQogICAgICAgICAgICAg
ICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRWZWN0
b3JMZW5ndGgKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVjdG9y
TGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChtX3NwZWN1
bGFyRXhwb25lbnQgPT0gMSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVj
dWxhckNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZl
Y3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgaWYgKGRhdGEu
c3BlY3VsYXJFeHBvbmVudCA9PSAxKQorICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBk
YXRhLnNwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAo
bm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAq
IHBvd2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0
aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBtX3NwZWN1bGFyRXhwb25lbnQpOworICAgICAgICAg
ICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKChub3Jt
YWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5
VmVjdG9yTGVuZ3RoKSwgZGF0YS5zcGVjdWxhckV4cG9uZW50KTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtMzA0LDggKzM4NywxMyBAQCB2b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwo
aW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaQogICAgIGRhdGEu
cGl4ZWxzLT5zZXRSYW5nZShwaXhlbFZhbHVlLCAzLCBvZmZzZXQpOwogfQogCit2b2lkIEZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXI6OnNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5n
RGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9y
bWFsMkRWZWN0b3IpCit7CisgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50
aW5nRGF0YSwgeCwgeSwgZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFsMkRWZWN0b3IsIGRhdGEucGl4
ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKK30KKwogLy8gVGhpcyBh
cHBlYXJzIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhlIHNhbWUgcGl4ZWwgYnVmZmVyLCBi
dXQgaXQgb25seSByZWFkcyB0aGUgYWxwaGEgY2hhbm5lbCwgYW5kIHdyaXRlcyB0aGUgbm9uLWFs
cGhhIGNoYW5uZWxzLgotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50
KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKK3ZvaWQgRkVMaWdodGluZ1Nv
ZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0Rh
dGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
aW50IHN0YXJ0WSwgaW50IGVuZFkpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHN0YXJ0WSBpcyA+IDAg
c2luY2Ugd2UgcmVhZCBmcm9tIHRoZSBwcmV2aW91cyByb3cgaW4gdGhlIGxvb3AuCiAgICAgQVNT
RVJUKHN0YXJ0WSk7CkBAIC0zMzAsMjYgKzQxOCwzMCBAQCB2b2lkIEZFTGlnaHRpbmc6OnBsYXRm
b3JtQXBwbHlHZW5lcmljUGFpbnQoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdo
dAogICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b21SaWdodChkYXRhLnBpeGVscy0+aXRlbShu
ZXh0Um93U3RhcnQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogCiAgICAg
ICAgIGludCBvZmZzZXQgPSByb3dTdGFydE9mZnNldCArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZv
ciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCAr
PSBjUGl4ZWxTaXplKSB7CisgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aCAt
IDE7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKICAgICAgICAgICAgIGFscGhhV2luZG93
LnNoaWZ0KCk7CiAgICAgICAgICAgICBzZXRQaXhlbEludGVybmFsKG9mZnNldCwgZGF0YSwgcGFp
bnRpbmdEYXRhLCB4LCB5LCBjRmFjdG9yMWRpdjQsIGNGYWN0b3IxZGl2NCwgZGF0YS5pbnRlcmlv
ck5vcm1hbChvZmZzZXQsIGFscGhhV2luZG93KSwgYWxwaGFXaW5kb3cuY2VudGVyKCkpOwogICAg
ICAgICB9CiAgICAgfQogfQogCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmlj
V29ya2VyKFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyogcGFyYW1ldGVycykKK3ZvaWQg
RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNXb3JrZXIoQXBw
bHlQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQogewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxh
dGZvcm1BcHBseUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5wYWlu
dGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+eUVuZCk7CisgICAgYXBw
bHlQbGF0Zm9ybUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5wYWlu
dGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+eUVuZCk7CiB9CiAKLXZv
aWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiBk
YXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCisjaWYg
IShDUFUoQVJNX05FT04pICYmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVSKEdDQ19D
T01QQVRJQkxFKSkKK3ZvaWQgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9y
bUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFp
bnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiB7Ci0gICAgdW5zaWduZWQgcm93c1RvUHJvY2VzcyA9
IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgLSAxOworICAgIHVuc2lnbmVkIHJvd3NUb1Byb2Nl
c3MgPSBkYXRhLmhlaWdodCAtIDI7CiAgICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHJvd3NU
b1Byb2Nlc3MgLyA4OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1p
bjx1bnNpZ25lZD4oKChkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgLSAxKSAqIHJvd3NUb1Byb2Nl
c3MpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7CisgICAgCisgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgbWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7IC8v
IEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCisgICAgdW5zaWduZWQgb3B0
aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPigoKGRhdGEud2lkdGggLSAyKSAq
IHJvd3NUb1Byb2Nlc3MpIC8gbWluaW1hbFJlY3REaW1lbnNpb24sIG1heE51bVRocmVhZHMpOwor
CiAgICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7CiAgICAgICAgIC8vIEluaXRpYWxp
emUgcGFyYWxsZWwgam9icwotICAgICAgICBQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseUdlbmVy
aWNQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJnBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2VyLCBv
cHRpbWFsVGhyZWFkTnVtYmVyKTsKKyAgICAgICAgUGFyYWxsZWxKb2JzPEFwcGx5UGFyYW1ldGVy
cz4gcGFyYWxsZWxKb2JzKCZhcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtlciwgb3B0aW1hbFRocmVh
ZE51bWJlcik7CiAKICAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5CiAgICAgICAg
IGludCBqb2IgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CkBAIC0zNjEsOCArNDUzLDcg
QEAgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGluZ0Rh
dGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmMKIAogICAgICAgICAgICAgaW50IHlTdGFydCA9IDE7
CiAgICAgICAgICAgICBmb3IgKC0tam9iOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAgICAg
ICAgICBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9i
cy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhpczsK
KyAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5w
YXJhbWV0ZXIoam9iKTsKICAgICAgICAgICAgICAgICBwYXJhbXMuZGF0YSA9IGRhdGE7CiAgICAg
ICAgICAgICAgICAgcGFyYW1zLnBhaW50aW5nRGF0YSA9IHBhaW50aW5nRGF0YTsKICAgICAgICAg
ICAgICAgICBwYXJhbXMueVN0YXJ0ID0geVN0YXJ0OwpAQCAtMzc1LDM5ICs0NjYsMTggQEAgdm9p
ZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmIGRh
dGEsIGNvbnN0IExpZ2h0U291cmMKICAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVh
ZGVkIG1vZGUuCiAgICAgfQogCi0gICAgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChkYXRhLCBw
YWludGluZ0RhdGEsIDEsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUpOworICAgIGFwcGx5UGxh
dGZvcm1HZW5lcmljUGFpbnQoZGF0YSwgcGFpbnRpbmdEYXRhLCAxLCBkYXRhLmhlaWdodCAtIDEp
OwogfQotCi1pbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KGNvbnN0IExpZ2h0
aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhKQotewotICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBoYXBw
ZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCi0jaWYgQ1BVKEFSTV9ORU9OKSAmJiBD
UFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBwbGF0
Zm9ybUFwcGx5TmVvbihkYXRhLCBwYWludGluZ0RhdGEpOwotI2Vsc2UKLSAgICBwbGF0Zm9ybUFw
cGx5R2VuZXJpYyhkYXRhLCBwYWludGluZ0RhdGEpOwogI2VuZGlmCi19CiAKLWJvb2wgRkVMaWdo
dGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwg
aW50IGhlaWdodCkKK3ZvaWQgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9y
bShjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEpCiB7CiAgICAgTGlnaHRTb3VyY2U6OlBhaW50aW5n
RGF0YSBwYWludGluZ0RhdGE7Ci0gICAgTGlnaHRpbmdEYXRhIGRhdGE7Ci0KLSAgICAvLyBGSVhN
RTogZG8gc29tZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhlbC4K
LSAgICAvLyBUaGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhlIGZp
bHRlciBqdXN0IHJldHVybnMuCi0gICAgaWYgKHdpZHRoIDw9IDIgfHwgaGVpZ2h0IDw9IDIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRhdGEucGl4ZWxzID0gJnBpeGVsczsKLSAgICBk
YXRhLnN1cmZhY2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxlIC8gMjU1LjBmOwotICAgIGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPSB3aWR0aCAqIGNQaXhlbFNpemU7Ci0gICAgZGF0YS53
aWR0aERlY3JlYXNlZEJ5T25lID0gd2lkdGggLSAxOwotICAgIGRhdGEuaGVpZ2h0RGVjcmVhc2Vk
QnlPbmUgPSBoZWlnaHQgLSAxOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2xpZ2h0aW5n
Q29sb3IudG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgp
KTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGRhdGEubGlnaHRpbmdDb2xvci50b0NvbG9yQ29t
cG9uZW50c0luQ29sb3JTcGFjZSgqZGF0YS5vcGVyYXRpbmdDb2xvclNwYWNlKTsKICAgICBwYWlu
dGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChy
LCBnLCBiKTsKIAotICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKnRoaXMsIHBh
aW50aW5nRGF0YSk7CisgICAgZGF0YS5saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqZGF0
YS5lZmZlY3QsIHBhaW50aW5nRGF0YSk7CiAKICAgICAvLyBUb3AgbGVmdC4KICAgICBpbnQgb2Zm
c2V0ID0gMDsKQEAgLTQxNSw0NyArNDg1LDQ3IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0
aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIAog
ICAgIC8vIFRvcCByaWdodC4KICAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5n
RGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3Iy
ZGl2MywgZGF0YS50b3BSaWdodE5vcm1hbChvZmZzZXQpKTsKKyAgICBzZXRQaXhlbChvZmZzZXQs
IGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aCAtIDEsIDAsIGNGYWN0b3IyZGl2MywgY0Zh
Y3RvcjJkaXYzLCBkYXRhLnRvcFJpZ2h0Tm9ybWFsKG9mZnNldCkpOwogCiAgICAgLy8gQm90dG9t
IGxlZnQuCi0gICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWlu
dGluZ0RhdGEsIDAsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0Zh
Y3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3JtYWwob2Zmc2V0KSk7CisgICAgb2Zmc2V0ID0g
KGRhdGEuaGVpZ2h0IC0gMSkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAg
IHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhlaWdodCAtIDEs
IGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3JtYWwob2Zmc2V0
KSk7CiAKICAgICAvLyBCb3R0b20gcmlnaHQuCi0gICAgb2Zmc2V0ID0gaGVpZ2h0ICogZGF0YS53
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zm
c2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgZGF0YS5o
ZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90
dG9tUmlnaHROb3JtYWwob2Zmc2V0KSk7CisgICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHQgKiBkYXRh
LndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAgICBzZXRQaXhlbChv
ZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aCAtIDEsIGRhdGEuaGVpZ2h0IC0g
MSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tUmlnaHROb3JtYWwob2Zm
c2V0KSk7CiAKLSAgICBpZiAod2lkdGggPj0gMykgeworICAgIGlmIChkYXRhLndpZHRoID49IDMp
IHsKICAgICAgICAgLy8gVG9wIHJvdy4KICAgICAgICAgb2Zmc2V0ID0gY1BpeGVsU2l6ZTsKLSAg
ICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwg
b2Zmc2V0ICs9IGNQaXhlbFNpemUpCisgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53
aWR0aCAtIDE7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCiAgICAgICAgICAgICBzZXRQaXhl
bChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgMCwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9y
MWRpdjIsIGRhdGEudG9wUm93Tm9ybWFsKG9mZnNldCkpOwogCiAgICAgICAgIC8vIEJvdHRvbSBy
b3cuCi0gICAgICAgIG9mZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQg
eCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhl
bFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwg
eCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIs
IGRhdGEuYm90dG9tUm93Tm9ybWFsKG9mZnNldCkpOworICAgICAgICBvZmZzZXQgPSAoZGF0YS5o
ZWlnaHQgLSAxKSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXpl
OworICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGggLSAxOyArK3gsIG9mZnNl
dCArPSBjUGl4ZWxTaXplKQorICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWlu
dGluZ0RhdGEsIHgsIGRhdGEuaGVpZ2h0IC0gMSwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIs
IGRhdGEuYm90dG9tUm93Tm9ybWFsKG9mZnNldCkpOwogICAgIH0KIAotICAgIGlmIChoZWlnaHQg
Pj0gMykgeworICAgIGlmIChkYXRhLmhlaWdodCA+PSAzKSB7CiAgICAgICAgIC8vIExlZnQgY29s
dW1uLgogICAgICAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwot
ICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsr
eSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCisgICAgICAgIGZv
ciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHQgLSAxOyArK3ksIG9mZnNldCArPSBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQogICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBk
YXRhLCBwYWludGluZ0RhdGEsIDAsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRh
LmxlZnRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7CiAKICAgICAgICAgLy8gUmlnaHQgY29sdW1uLgog
ICAgICAgICBvZmZzZXQgPSAyICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQ
aXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFz
ZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkK
LSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndp
ZHRoRGVjcmVhc2VkQnlPbmUsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRhLnJp
Z2h0Q29sdW1uTm9ybWFsKG9mZnNldCkpOworICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRh
dGEuaGVpZ2h0IC0gMTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZSkKKyAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBk
YXRhLndpZHRoIC0gMSwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEucmlnaHRD
b2x1bW5Ob3JtYWwob2Zmc2V0KSk7CiAgICAgfQogCi0gICAgaWYgKHdpZHRoID49IDMgJiYgaGVp
Z2h0ID49IDMpIHsKKyAgICBpZiAoZGF0YS53aWR0aCA+PSAzICYmIGRhdGEuaGVpZ2h0ID49IDMp
IHsKICAgICAgICAgLy8gSW50ZXJpb3IgcGl4ZWxzLgotICAgICAgICBwbGF0Zm9ybUFwcGx5KGRh
dGEsIHBhaW50aW5nRGF0YSk7CisgICAgICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKGRhdGEsIHBh
aW50aW5nRGF0YSk7CiAgICAgfQogCi0gICAgaW50IGxhc3RQaXhlbCA9IGRhdGEud2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgKiBoZWlnaHQ7Ci0gICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IERp
ZmZ1c2VMaWdodGluZykgeworICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplICogZGF0YS5oZWlnaHQ7CisgICAgaWYgKGRhdGEuZWZmZWN0LT5maWx0ZXJU
eXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykgewogICAgICAg
ICBmb3IgKGludCBpID0gY0FscGhhQ2hhbm5lbE9mZnNldDsgaSA8IGxhc3RQaXhlbDsgaSArPSBj
UGl4ZWxTaXplKQogICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpLCBjT3BhcXVlQWxwaGEp
OwogICAgIH0gZWxzZSB7CkBAIC00NjcsMjEgKzUzNywyMSBAQCBib29sIEZFTGlnaHRpbmc6OmRy
YXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWln
aHQpCiAgICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGkgKyAzLCBhMSA+PSBhMiA/IChhMSA+
PSBhMyA/IGExIDogYTMpIDogKGEyID49IGEzID8gYTIgOiBhMykpOwogICAgICAgICB9CiAgICAg
fQotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCitib29sIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6
OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZl
Y3RzKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOwogCi0gICAgYXV0byBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9l
ZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOworICAgIGF1dG8mIGRlc3RpbmF0
aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAgIG1f
ZWZmZWN0LnNldElzQWxwaGFJbWFnZShmYWxzZSk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdERyYXdp
bmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKKyAgICBhdXRvIGVmZmVjdERyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAg
ICBpbi0+Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZl
Y3REcmF3aW5nUmVjdCk7CiAKICAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVuZ3Ro
cyBvdGhlciB0aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwpAQCAtNDg5
LDExICs1NTksMzYgQEAgYm9vbCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJikKICAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMga2VybmVsVW5pdExlbmd0aHMs
IGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgogICAgIC8vIEFueXdheSwgZmVD
b252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0aW9uCiAKLSAgICBJ
bnRTaXplIGFic29sdXRlUGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0g
ICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+
ZGF0YSgpOworICAgIEludFNpemUgc2l6ZSA9IEludFNpemUobV9lZmZlY3QuYWJzb2x1dGVQYWlu
dFJlY3QoKS5zaXplKCkpOworCisgICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBpZiB3aWR0aCBv
ciBoZWlnaHQgKG9yIGJvdGgpIGlzIDEgcGl4ZWwuCisgICAgLy8gVGhlIFczIHNwZWMgZG9lcyBu
b3QgZGVmaW5lIHRoaXMgY2FzZS4gTm93IHRoZSBmaWx0ZXIganVzdCByZXR1cm5zLgorICAgIGlm
IChzaXplLndpZHRoKCkgPD0gMiB8fCBzaXplLmhlaWdodCgpIDw9IDIpCisgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgZHJhd0xpZ2h0aW5nKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgYWJzb2x1
dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOworICAgIExp
Z2h0aW5nRGF0YSBkYXRhOworICAgIGRhdGEuZWZmZWN0ID0gJm1fZWZmZWN0OworICAgIGRhdGEu
ZmlsdGVyVHlwZSA9IG1fZWZmZWN0LmZpbHRlclR5cGUoKTsKKyAgICBkYXRhLmxpZ2h0aW5nQ29s
b3IgPSBtX2VmZmVjdC5saWdodGluZ0NvbG9yKCk7CisgICAgZGF0YS5zdXJmYWNlU2NhbGUgPSBt
X2VmZmVjdC5zdXJmYWNlU2NhbGUoKSAvIDI1NS4wZjsKKyAgICBkYXRhLmRpZmZ1c2VDb25zdGFu
dCA9IG1fZWZmZWN0LmRpZmZ1c2VDb25zdGFudCgpOworICAgIGRhdGEuc3BlY3VsYXJDb25zdGFu
dCA9IG1fZWZmZWN0LnNwZWN1bGFyQ29uc3RhbnQoKTsKKyAgICBkYXRhLnNwZWN1bGFyRXhwb25l
bnQgPSBtX2VmZmVjdC5zcGVjdWxhckV4cG9uZW50KCk7CisgICAgZGF0YS5saWdodFNvdXJjZSA9
ICZtX2VmZmVjdC5saWdodFNvdXJjZSgpOworICAgIGRhdGEub3BlcmF0aW5nQ29sb3JTcGFjZSA9
ICZtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCk7CisKKyAgICBkYXRhLnBpeGVscyA9ICZk
ZXN0aW5hdGlvblBpeGVsQXJyYXk7CisgICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZSA9IHNpemUud2lkdGgoKSAqIGNQaXhlbFNpemU7CisgICAgZGF0YS53aWR0aCA9IHNpemUud2lk
dGgoKTsKKyAgICBkYXRhLmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisKKyAgICBhcHBseVBsYXRm
b3JtKGRhdGEpOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEZFTGlnaHRpbmc6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVM
aWdodGluZ1NvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMo
KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKaW5kZXggYWQyZmMyOGZh
OWU3ZjRiZjI5MTNkNjdiOTgwNTdmOGVlYmIwOGRiMi4uYTg0ZmU4NWEzODFmYTg0MDc1ZTUxNjU0
Y2MyYzBjNWJiOGMxYWIyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKQEAgLTI5LDkgKzI5LDYgQEAKICNpbmNsdWRl
ICJDb2xvci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkxpZ2h0U291
cmNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgotCi0vLyBDb21tb24g
YmFzZSBjbGFzcyBmb3IgRkVEaWZmdXNlTGlnaHRpbmcgYW5kIEZFU3BlY3VsYXJMaWdodGluZwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDExICszNiwxNSBAQCBzdHJ1Y3QgRkVMaWdo
dGluZ1BhaW50aW5nRGF0YUZvck5lb247CiAKIGNsYXNzIEZFTGlnaHRpbmcgOiBwdWJsaWMgRmls
dGVyRWZmZWN0IHsKIHB1YmxpYzoKKyAgICBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsgfQorICAgIGJvb2wgc2V0TGlnaHRpbmdDb2xv
cihjb25zdCBDb2xvciYpOworCiAgICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdXJmYWNlU2NhbGU7IH0KICAgICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7CiAK
LSAgICBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRp
bmdDb2xvcjsgfQotICAgIGJvb2wgc2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOworICAg
IGZsb2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0YW50
OyB9CisgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3Vs
YXJDb25zdGFudDsgfQorICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7IHJldHVy
biBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KIAogICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYKCkg
Y29uc3QgeyByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWDsgfQogICAgIGJvb2wgc2V0S2VybmVs
VW5pdExlbmd0aFgoZmxvYXQpOwpAQCAtNTQsMTAxICs1NSwxNyBAQCBwdWJsaWM6CiAgICAgY29u
c3QgTGlnaHRTb3VyY2UmIGxpZ2h0U291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9saWdodFNvdXJj
ZS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxS
ZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFy
YWxsZWwgam9icwotCi0gICAgZW51bSBMaWdodGluZ1R5cGUgewotICAgICAgICBEaWZmdXNlTGln
aHRpbmcsCi0gICAgICAgIFNwZWN1bGFyTGlnaHRpbmcKLSAgICB9OwotICAgIAotICAgIHN0cnVj
dCBBbHBoYVdpbmRvdyB7Ci0gICAgICAgIHVpbnQ4X3QgYWxwaGFbM11bM10geyB9OwotICAgICAg
ICAKLSAgICAgICAgLy8gVGhlIGltcGxlbWVudGF0aW9ucyBhcmUgbGluZWQgdXAgdG8gbWFrZSBj
b21wYXJpbmcgaW5kaWNlcyBlYXNpZXIuCi0gICAgICAgIHVpbnQ4X3QgdG9wTGVmdCgpIGNvbnN0
ICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzBdOyB9Ci0gICAgICAgIHVpbnQ4X3QgbGVm
dCgpIGNvbnN0ICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzBdOyB9Ci0gICAgICAg
IHVpbnQ4X3QgYm90dG9tTGVmdCgpIGNvbnN0ICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzBd
OyB9Ci0KLSAgICAgICAgdWludDhfdCB0b3AoKSBjb25zdCAgICAgICAgICAgICAgICAgeyByZXR1
cm4gYWxwaGFbMF1bMV07IH0KLSAgICAgICAgdWludDhfdCBjZW50ZXIoKSBjb25zdCAgICAgICAg
ICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMV07IH0KLSAgICAgICAgdWludDhfdCBib3R0b20oKSBj
b25zdCAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMV07IH0KLQotICAgICAgICB2b2lk
IHNldFRvcCh1aW50OF90IHZhbHVlKSAgICAgICAgICB7IGFscGhhWzBdWzFdID0gdmFsdWU7IH0K
LSAgICAgICAgdm9pZCBzZXRDZW50ZXIodWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsxXVsx
XSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Qm90dG9tKHVpbnQ4X3QgdmFsdWUpICAgICAg
IHsgYWxwaGFbMl1bMV0gPSB2YWx1ZTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wUmlnaHQodWlu
dDhfdCB2YWx1ZSkgICAgIHsgYWxwaGFbMF1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNl
dFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICAgICB7IGFscGhhWzFdWzJdID0gdmFsdWU7IH0KLSAg
ICAgICAgdm9pZCBzZXRCb3R0b21SaWdodCh1aW50OF90IHZhbHVlKSAgeyBhbHBoYVsyXVsyXSA9
IHZhbHVlOyB9Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgc2hpZnRSb3codWludDhfdCBhbHBoYVsz
XSkKLSAgICAgICAgewotICAgICAgICAgICAgYWxwaGFbMF0gPSBhbHBoYVsxXTsKLSAgICAgICAg
ICAgIGFscGhhWzFdID0gYWxwaGFbMl07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZv
aWQgc2hpZnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVswXSk7Ci0g
ICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVsxXSk7Ci0gICAgICAgICAgICBzaGlmdFJvdyhhbHBo
YVsyXSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3RydWN0IExpZ2h0aW5nRGF0YSB7Ci0g
ICAgICAgIC8vIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIG9ubHkgcmVhZC1vbmx5IChTTVAgc2Fm
ZSkgZGF0YQotICAgICAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxzOwotICAgICAgICBmbG9h
dCBzdXJmYWNlU2NhbGU7Ci0gICAgICAgIGludCB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsK
LSAgICAgICAgaW50IHdpZHRoRGVjcmVhc2VkQnlPbmU7Ci0gICAgICAgIGludCBoZWlnaHREZWNy
ZWFzZWRCeU9uZTsKLQotICAgICAgICBpbmxpbmUgSW50U2l6ZSB0b3BMZWZ0Tm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSB0b3BSb3dOb3JtYWwoaW50IG9m
ZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcFJpZ2h0Tm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBsZWZ0Q29sdW1uTm9ybWFsKGlu
dCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBpbnRlcmlvck5vcm1hbChp
bnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBy
aWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNp
emUgYm90dG9tTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIElu
dFNpemUgYm90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUg
SW50U2l6ZSBib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICB9OwotCi0g
ICAgc3RydWN0IFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyB7Ci0gICAgICAgIEZFTGln
aHRpbmcqIGZpbHRlcjsKLSAgICAgICAgTGlnaHRpbmdEYXRhIGRhdGE7Ci0gICAgICAgIExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgICAgICBpbnQgeVN0YXJ0Owot
ICAgICAgICBpbnQgeUVuZDsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBs
eUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKik7Ci0gICAgc3Rh
dGljIHZvaWQgcGxhdGZvcm1BcHBseU5lb25Xb3JrZXIoRkVMaWdodGluZ1BhaW50aW5nRGF0YUZv
ck5lb24qKTsKLQotICAgIEZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZs
b2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYm
LCBUeXBlKTsKLQotICAgIGJvb2wgZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiwgaW50
LCBpbnQpOwotCi0gICAgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0Rh
dGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9h
dCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZlY3Rvcik7Ci0gICAgdm9p
ZCBzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0
IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3Rvclgs
IGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yLCBmbG9hdCBhbHBoYSk7CisgICAg
RkVMaWdodGluZyhUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFj
ZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZs
b2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIAogICAgIHZvaWQgZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBh
aW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CiAKICAgICBib29s
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIHZv
aWQgcGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJik7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQoY29u
c3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCBz
dGFydFgsIGludCBzdGFydFkpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3Qg
TGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwotCiAjaWYg
Q1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0NfQ09N
UEFUSUJMRSkKICAgICBzdGF0aWMgaW50IGdldFBvd2VyQ29lZmZpY2llbnRzKGZsb2F0IGV4cG9u
ZW50KTsKICAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5TmVvbihjb25zdCBMaWdodGluZ0Rh
dGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7CiAjZW5kaWYKIAotICAgIExp
Z2h0aW5nVHlwZSBtX2xpZ2h0aW5nVHlwZTsKLSAgICBSZWY8TGlnaHRTb3VyY2U+IG1fbGlnaHRT
b3VyY2U7Ci0KICAgICBDb2xvciBtX2xpZ2h0aW5nQ29sb3I7CiAgICAgZmxvYXQgbV9zdXJmYWNl
U2NhbGU7CiAgICAgZmxvYXQgbV9kaWZmdXNlQ29uc3RhbnQ7CkBAIC0xNTYsNyArNzMsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50OwogICAgIGZsb2F0IG1fa2Vy
bmVsVW5pdExlbmd0aFg7CiAgICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICBSZWY8
TGlnaHRTb3VyY2U+IG1fbGlnaHRTb3VyY2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuY3BwCmluZGV4IGNlYTE5N2NmOGExNzY3YzlkZDRmZDRlZTAzM2Y2NmZmZDFmODM5Y2Mu
Ljc2YTc0NjRmMDBlNmQzNzA4ZWU5NGRjYWNkOTZmNjFmN2FjYTZiZTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcApAQCAt
MjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFTWVyZ2UuaCIK
IAorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1Rl
eHRTdHJlYW0uaD4KQEAgLTM4LDI1ICszOSw0MSBAQCBGRU1lcmdlOjpGRU1lcmdlKCkKIHsKIH0K
IAotYm9vbCBGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKKy8v
IEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRU1lcmdlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRl
IHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVNZXJnZVNvZnR3YXJlQXBwbGllciA6
IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVNZXJnZT4geworICAgIHVzaW5n
IEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVNZXJnZT47CisKK3B1YmxpYzoK
KyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBj
b25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCiti
b29sIEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZp
bHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIHVuc2lnbmVkIHNpemUgPSBu
dW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7CisgICAgQVNTRVJU
KGlucHV0RWZmZWN0cy5zaXplKCkgPiAwKTsKIAotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFn
ZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1
ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5j
b250ZXh0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAg
ICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGlmIChhdXRv
IGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCkpCi0gICAgICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICBhdXRvJiBmaWx0ZXJDb250ZXh0ID0g
cmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKworICAgIGZvciAoYXV0byYgaW4gOiBpbnB1dEVmZmVj
dHMpIHsKKyAgICAgICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwor
ICAgICAgICBpZiAoIWluQnVmZmVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogICAgIH0KIAogICAg
IHJldHVybiB0cnVlOwogfQogCitib29sIEZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVNZXJnZVNvZnR3YXJlQXBwbGll
cigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIFRleHRTdHJlYW0m
IEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2Vu
dGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwg
IltmZU1lcmdlIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCBiMjIzY2I5ZTU2NjM2OTU5YzNmOTFi
ODYxZTZkYTE3YzAzNmRhM2M3Li5kOTQ1MTgxNTY4ZjBhNmU3ZjBiNTdiNTM5YzUzOTQ5MjFkNzgx
NjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ29s
b3JDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgogI2luY2x1ZGUgIkZpbHRl
ci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJQaXhlbEJ1
ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CkBAIC04MywyMyArODQsNDggQEAgdm9pZCBGRU1vcnBob2xvZ3k6OmRldGVybWluZUFi
c29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFp
bnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
aW50IHBpeGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGludCB3aWR0aCkKLXsKLSAgICByZXR1
cm4gKHkgKiB3aWR0aCArIHgpICogNDsKLX0KKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRU1v
cnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmls
ZXMuCitjbGFzcyBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZm
ZWN0Q29uY3JldGVBcHBsaWVyPEZFTW9ycGhvbG9neT4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0
ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVNb3JwaG9sb2d5PjsKIAotaW5saW5lIENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFj
a2VkQ29sb3I6OlJHQkEgcGl4ZWwpCi17Ci0gICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGFz
U1JHQkEocGl4ZWwpKTsKLX0KK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOwogCi1pbmxp
bmUgUGFja2VkQ29sb3I6OlJHQkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGNv
bnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29tcG9uZW50cykKLXsKLSAgICByZXR1
cm4gUGFja2VkQ29sb3I6OlJHQkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+
KGNvbXBvbmVudHMpIH07Ci19CisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBG
aWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgdXNpbmcgQ29sdW1uRXh0cmVtYSA9IFZlY3RvcjxDb2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4sIDE2PjsKKworICAgIHN0cnVjdCBQYWludGluZ0RhdGEgeworICAgICAgICBNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlIHR5cGU7CisgICAgICAgIGludCByYWRpdXNYOworICAgICAgICBpbnQgcmFk
aXVzWTsKKyAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXk7Cisg
ICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5OworICAgICAgICBpbnQgd2lk
dGg7CisgICAgICAgIGludCBoZWlnaHQ7CisgICAgfTsKIAotdGVtcGxhdGU8TW9ycGhvbG9neU9w
ZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4gbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIpCisgICAgc3RydWN0IEFwcGx5UGFyYW1ldGVy
cyB7CisgICAgICAgIGNvbnN0IFBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworICAgICAgICBp
bnQgc3RhcnRZOworICAgICAgICBpbnQgZW5kWTsKKyAgICB9OworCisgICAgc3RhdGljIGlubGlu
ZSBpbnQgcGl4ZWxBcnJheUluZGV4KGludCB4LCBpbnQgeSwgaW50IHdpZHRoKSB7IHJldHVybiAo
eSAqIHdpZHRoICsgeCkgKiA0OyB9CisgICAgc3RhdGljIGlubGluZSBQYWNrZWRDb2xvcjo6UkdC
QSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRz
PHVpbnQ4X3QsIDQ+JiBjb21wb25lbnRzKSB7IHJldHVybiBQYWNrZWRDb2xvcjo6UkdCQSB7IG1h
a2VGcm9tQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29tcG9uZW50cykgfTsgfQorCisgICAg
c3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9yQ29tcG9u
ZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBpeGVsKSB7IHJldHVybiBhc0Nv
bG9yQ29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKSk7IH0KKyAgICBzdGF0aWMgaW5saW5lIENvbG9y
Q29tcG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYiwgTW9ycGhv
bG9neU9wZXJhdG9yVHlwZSk7CisgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVs
QXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5
T3BlcmF0b3JUeXBlKTsKKyAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xv
Z3lPcGVyYXRvclR5cGUpOworCisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWMo
Y29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOworICAgIHN0YXRpYyB2
b2lkIGFwcGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7CisgICAgc3RhdGljIHZv
aWQgYXBwbHlQbGF0Zm9ybShjb25zdCBQYWludGluZ0RhdGEmKTsKK307CisKK2lubGluZSBDb2xv
ckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjptaW5P
ck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0IENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiYgYiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQogewog
ICAgIGlmICh0eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKICAgICAgICAgcmV0
dXJuIHBlckNvbXBvbmVudE1pbihhLCBiKTsKQEAgLTEwNyw0NyArMTMzLDI3IEBAIEFMV0FZU19J
TkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNvbnN0IENvbG9yQ29t
cG9uZW50czx1aW50OF90CiAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1heChhLCBiKTsKIH0KIAot
dGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xv
ckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdp
ZHRoKQoraW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRU1vcnBob2xvZ3lTb2Z0
d2FyZUFwcGxpZXI6OmNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQ
aXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9ycGhv
bG9neU9wZXJhdG9yVHlwZSB0eXBlKQogewogICAgIGF1dG8gZXh0cmVtdW0gPSBtYWtlQ29sb3JD
b21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUlu
ZGV4KHgsIHlTdGFydCwgd2lkdGgpKSB9KTsKIAogICAgIGZvciAoaW50IHkgPSB5U3RhcnQgKyAx
OyB5IDwgeUVuZDsgKyt5KSB7CiAgICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtlQ29sb3JDb21wb25l
bnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgs
IHksIHdpZHRoKSkgfSk7Ci0gICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8dHlwZT4oZXh0cmVt
dW0sIHBpeGVsKTsKKyAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heChleHRyZW11bSwgcGl4ZWws
IHR5cGUpOwogICAgIH0KICAgICByZXR1cm4gZXh0cmVtdW07CiB9CiAKLUFMV0FZU19JTkxJTkUg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGlu
dCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQotewotICAgIGlmICh0eXBlID09
IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKLSAgICAgICAgcmV0dXJuIGNvbHVtbkV4dHJl
bXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERT4oc3JjUGl4ZWxBcnJheSwgeCwgeVN0YXJ0
LCB5RW5kLCB3aWR0aCk7Ci0KLSAgICByZXR1cm4gY29sdW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZ
X09QRVJBVE9SX0RJTEFURT4oc3JjUGl4ZWxBcnJheSwgeCwgeVN0YXJ0LCB5RW5kLCB3aWR0aCk7
Ci19Ci0KLXVzaW5nIENvbHVtbkV4dHJlbWEgPSBWZWN0b3I8Q29sb3JDb21wb25lbnRzPHVpbnQ4
X3QsIDQ+LCAxNj47Ci0KLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZT4KLUFM
V0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNv
bnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCkKK2lubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4gRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjprZXJuZWxFeHRyZW11bShjb25zdCBD
b2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKIHsKICAg
ICBhdXRvIGV4dHJlbXVtID0ga2VybmVsWzBdOwogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwg
a2VybmVsLnNpemUoKTsgKytpKQotICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4PHR5cGU+KGV4
dHJlbXVtLCBrZXJuZWxbaV0pOworICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4KGV4dHJlbXVt
LCBrZXJuZWxbaV0sIHR5cGUpOwogCiAgICAgcmV0dXJuIGV4dHJlbXVtOwogfQogCi1BTFdBWVNf
SU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBD
b2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAg
ICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVy
biBrZXJuZWxFeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU+KGtlcm5lbCk7Ci0K
LSAgICByZXR1cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFURT4o
a2VybmVsKTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNv
bnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKK3Zv
aWQgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyhjb25z
dCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCiB7CiAg
ICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwogCkBAIC0xNzMsMjggKzE3OSwyOCBAQCB2b2lkIEZF
TW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEsIGludCBzdAogCiAgICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBsZWZ0IGVkZ2Us
IHNvIGNvbXB1dGUgZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCByYWRpdXNYOyArK3gpCi0gICAgICAgICAgICBleHRyZW1hLmFwcGVu
ZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNF
bmQsIHdpZHRoLCBtX3R5cGUpKTsKKyAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4
dHJlbXVtKHNyY1BpeGVsQXJyYXksIHgsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgs
IHBhaW50aW5nRGF0YS50eXBlKSk7CiAKICAgICAgICAgLy8gS2VybmVsIGlzIGZpbGxlZCwgZ2V0
IGV4dHJlbWEgb2YgbmV4dCBjb2x1bW4KICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgKyt4KSB7CiAgICAgICAgICAgICBpZiAoeCA8IHdpZHRoIC0gcmFkaXVzWCkKLSAgICAgICAg
ICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4ICsg
cmFkaXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgbV90eXBlKSk7CisgICAg
ICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwg
eCArIHJhZGl1c1gsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgsIHBhaW50aW5nRGF0
YS50eXBlKSk7CiAKICAgICAgICAgICAgIGlmICh4ID4gcmFkaXVzWCkKICAgICAgICAgICAgICAg
ICBleHRyZW1hLnJlbW92ZSgwKTsKIAogICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RQaXhlbCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkc3RQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVs
QXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpOwotICAgICAgICAgICAgKmRlc3RQaXhlbCA9IG1ha2VQ
aXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhrZXJuZWxFeHRyZW11bShleHRyZW1hLCBtX3R5
cGUpKS52YWx1ZTsKKyAgICAgICAgICAgICpkZXN0UGl4ZWwgPSBtYWtlUGl4ZWxWYWx1ZUZyb21D
b2xvckNvbXBvbmVudHMoa2VybmVsRXh0cmVtdW0oZXh0cmVtYSwgcGFpbnRpbmdEYXRhLnR5cGUp
KS52YWx1ZTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRm
b3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBhcmFtKQordm9pZCBGRU1v
cnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0
ZXJzKiBwYXJhbXMpCiB7Ci0gICAgcGFyYW0tPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVyaWMo
KnBhcmFtLT5wYWludGluZ0RhdGEsIHBhcmFtLT5zdGFydFksIHBhcmFtLT5lbmRZKTsKKyAgICBh
cHBseVBsYXRmb3JtR2VuZXJpYygqcGFyYW1zLT5wYWludGluZ0RhdGEsIHBhcmFtcy0+c3RhcnRZ
LCBwYXJhbXMtPmVuZFkpOwogfQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseShj
b25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgRkVNb3JwaG9sb2d5U29mdHdh
cmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
KQogewogICAgIC8vIEVtcGlyaWNhbGx5LCBydW50aW1lIGlzIGFwcHJveGltYXRlbHkgbGluZWFy
IG92ZXIgcmVhc29uYWJsZSBrZXJuZWwgc2l6ZXMgd2l0aCBhIHNsb3BlIG9mIGFib3V0IDAuNjUu
CiAgICAgZmxvYXQga2VybmVsRmFjdG9yID0gc3FydChwYWludGluZ0RhdGEucmFkaXVzWCAqIHBh
aW50aW5nRGF0YS5yYWRpdXNZKSAqIDAuNjU7CkBAIC0yMDQsNyArMjEwLDcgQEAgdm9pZCBGRU1v
cnBob2xvZ3k6OnBsYXRmb3JtQXBwbHkoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEp
CiAgICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyA4Owog
ICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKHBh
aW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQgKiBrZXJuZWxGYWN0b3IpIC8g
bWluaW1hbEFyZWEsIG1heE51bVRocmVhZHMpOwogICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVy
ID4gMSkgewotICAgICAgICBQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBh
cmFsbGVsSm9icygmV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyLCBv
cHRpbWFsVGhyZWFkTnVtYmVyKTsKKyAgICAgICAgUGFyYWxsZWxKb2JzPEFwcGx5UGFyYW1ldGVy
cz4gcGFyYWxsZWxKb2JzKCZhcHBseVBsYXRmb3JtV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVy
KTsKICAgICAgICAgYXV0byBudW1PZlRocmVhZHMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2Jz
KCk7CiAgICAgICAgIGlmIChudW1PZlRocmVhZHMgPiAxKSB7CiAgICAgICAgICAgICAvLyBTcGxp
dCB0aGUgam9iIGludG8gImpvYlNpemUiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpvYnMg
dGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQpAQCAtMjEzLDggKzIxOSw3IEBA
IHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFp
bnRpbmdEYXRhKQogICAgICAgICAgICAgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWludGluZ0RhdGEu
aGVpZ2h0ICUgbnVtT2ZUaHJlYWRzOwogICAgICAgICAgICAgaW50IGN1cnJlbnRZID0gMDsKICAg
ICAgICAgICAgIGZvciAoaW50IGpvYiA9IG51bU9mVGhyZWFkcyAtIDE7IGpvYiA+PSAwOyAtLWpv
YikgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbSA9IHBh
cmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBwYXJhbS5maWx0ZXIg
PSB0aGlzOworICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW0gPSBwYXJhbGxl
bEpvYnMucGFyYW1ldGVyKGpvYik7CiAgICAgICAgICAgICAgICAgcGFyYW0uc3RhcnRZID0gY3Vy
cmVudFk7CiAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/
IGpvYlNpemUgKyAxIDogam9iU2l6ZTsKICAgICAgICAgICAgICAgICBwYXJhbS5lbmRZID0gY3Vy
cmVudFk7CkBAIC0yMjYsMzMgKzIzMSwzMiBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1B
cHBseShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKICAgICAgICAgLy8gRmFsbGJh
Y2sgdG8gc2luZ2xlIHRocmVhZCBtb2RlbAogICAgIH0KIAotICAgIHBsYXRmb3JtQXBwbHlHZW5l
cmljKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRpbmdEYXRhLmhlaWdodCk7Ci19Ci0KLWJvb2wgRkVN
b3JwaG9sb2d5Ojppc0RlZ2VuZXJhdGUoaW50IHJhZGl1c1gsIGludCByYWRpdXNZKSBjb25zdAot
ewotICAgIHJldHVybiByYWRpdXNYIDwgMCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1ggJiYg
IXJhZGl1c1kpOworICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKHBhaW50aW5nRGF0YSwgMCwgcGFp
bnRpbmdEYXRhLmhlaWdodCk7CiB9CiAKLWJvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitib29sIEZFTW9ycGhvbG9neVNvZnR3YXJl
QXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZl
Y3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOwogCi0g
ICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJ
bWFnZSgpKTsKKyAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgp
KTsKKworICAgIGF1dG8gaXNEZWdlbmVyYXRlID0gW10oaW50IHJhZGl1c1gsIGludCByYWRpdXNZ
KSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuIHJhZGl1c1ggPCAwIHx8IHJhZGl1c1kgPCAwIHx8
ICghcmFkaXVzWCAmJiAhcmFkaXVzWSk7CisgICAgfTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJh
d2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpOworICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5y
ZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkp
OworICAgIEludFNpemUgcmFkaXVzID0gZmxvb3JlZEludFNpemUoRmxvYXRTaXplKG1fZWZmZWN0
LnJhZGl1c1goKSwgbV9lZmZlY3QucmFkaXVzWSgpKSk7CiAKLSAgICBJbnRTaXplIHJhZGl1cyA9
IGZsb29yZWRJbnRTaXplKEZsb2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwogICAgIGlm
IChpc0RlZ2VuZXJhdGUocmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpIHsKICAgICAg
ICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZm
ZWN0RHJhd2luZ1JlY3QpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICByYWRp
dXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fcmFkaXVz
WCwgbV9yYWRpdXNZIH0pKTsKKyAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2Nh
bGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LnJhZGl1c1goKSwgbV9lZmZlY3QucmFkaXVzWSgp
IH0pKTsKICAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LndpZHRo
KCkgLSAxLCByYWRpdXMud2lkdGgoKSk7CiAgICAgaW50IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZl
Y3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQoKSk7CiAKQEAgLTI2MSw3
ICsyNjUsNyBAQCBib29sIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBhdXRv
IHNvdXJjZVBpeGVsQnVmZmVyID0gaW4tPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdD
b2xvclNwYWNlKCkpOworICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxC
dWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0
RHJhd2luZ1JlY3QsIG1fZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgaWYgKCFz
b3VyY2VQaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNjksNiArMjcz
LDcgQEAgYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImIGZpbHRlcikKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwor
ICAgIHBhaW50aW5nRGF0YS50eXBlID0gbV9lZmZlY3QubW9ycGhvbG9neU9wZXJhdG9yKCk7CiAg
ICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSAmc291cmNlUGl4ZWxBcnJheTsKICAgICBw
YWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CiAgICAg
cGFpbnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSk7CkBA
IC0yNzYsMTAgKzI4MSwxNSBAQCBib29sIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0gY2Vp
bGYocmFkaXVzWCk7CiAgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1kgPSBjZWlsZihyYWRpdXNZKTsK
IAotICAgIHBsYXRmb3JtQXBwbHkocGFpbnRpbmdEYXRhKTsKKyAgICBhcHBseVBsYXRmb3JtKHBh
aW50aW5nRGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVNb3JwaG9sb2d5Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJu
IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVm
ZmVjdHMoKSk7Cit9CisKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlJiB0eXBlKQogewogICAgIHN3aXRjaCAo
dHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1vcnBob2xvZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNb3JwaG9sb2d5LmgKaW5kZXggZGI4NzBhZTdkZjUwNGUxOWM0ZDA1MTNmOGQ0MjFi
MDFmY2NjMWQxOS4uNTg5NTAyYTZmNWJjNmQyMGI4ZTE5ZWE5ZmY1N2NhNzg5MjVkODI2NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5oCkBAIC01MywyOSArNTMsNiBAQCBwcml2YXRlOgogCiAgICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2Vu
dGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBib29sIGlzRGVnZW5lcmF0ZShpbnQg
cmFkaXVzWCwgaW50IHJhZGl1c1kpIGNvbnN0OwotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7
Ci0gICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5KiBzcmNQaXhlbEFycmF5OwotICAgICAg
ICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwot
ICAgICAgICBpbnQgaGVpZ2h0OwotICAgICAgICBpbnQgcmFkaXVzWDsKLSAgICAgICAgaW50IHJh
ZGl1c1k7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7Ci0g
ICAgICAgIEZFTW9ycGhvbG9neSogZmlsdGVyOwotICAgICAgICBpbnQgc3RhcnRZOwotICAgICAg
ICBpbnQgZW5kWTsKLSAgICAgICAgY29uc3QgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7Ci0g
ICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBs
eVBhcmFtZXRlcnMqKTsKLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseShjb25zdCBQYWludGluZ0Rh
dGEmKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYs
IGludCBzdGFydFksIGludCBlbmRZKTsKLQogICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgbV90
eXBlOwogICAgIGZsb2F0IG1fcmFkaXVzWDsKICAgICBmbG9hdCBtX3JhZGl1c1k7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3Bw
CmluZGV4IDQzMTRhMWE1NjEyNGVkMWM4MzYwOWM5OGMwYjlmYzFhNWQyMmM0ZGUuLjFkYTkyNzcw
ZTZjMmQyNjVhMWZlODU3MTc4YjVlOGU3ZjU2MzZhNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC0yNSw2ICsy
NSw3IEBACiAjaW5jbHVkZSAiRkVPZmZzZXQuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgorI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KQEAgLTY0LDI0ICs2NSwzOSBAQCB2b2lkIEZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVj
dChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQogCi1ib29sIEZFT2Zmc2V0OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCisvLyBGSVhNRTogTW92ZSB0
aGUgY2xhc3MgRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBo
ZWFkZXIgZmlsZXMuCitjbGFzcyBGRU9mZnNldFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0
ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVPZmZzZXQ+IHsKKyAgICB1c2luZyBCYXNlID0gRmls
dGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFT2Zmc2V0PjsKKworcHVibGljOgorICAgIHVzaW5n
IEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRl
ckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKK307CisKK2Jvb2wgRkVPZmZz
ZXRTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0
ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoMCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5n
ZXQoKTsKIAotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOworICAg
IGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGF1
dG8gaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdElt
YWdlIHx8ICFpbkJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2V0SXNBbHBo
YUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CisgICAgbV9lZmZlY3Quc2V0SXNBbHBoYUltYWdl
KGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgIGRy
YXdpbmdSZWdpb24ubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkg
fSkpOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gbV9lZmZlY3QuZHJhd2luZ1JlZ2lv
bk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgZHJhd2luZ1JlZ2lv
bi5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3QuZHgoKSwgbV9lZmZl
Y3QuZHkoKSB9KSk7CiAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIo
KmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCitib29s
IEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7
CisgICAgcmV0dXJuIEZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIs
IGlucHV0RWZmZWN0cygpKTsKK30KKwogVGV4dFN0cmVhbSYgRkVPZmZzZXQ6OmV4dGVybmFsUmVw
cmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRh
dGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZU9mZnNldCI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
U3BlY3VsYXJMaWdodGluZy5jcHAKaW5kZXggNjA3YTcxYzRjZjM1ZjU2ZDRhMjJmY2Y1MDI2ZjE0
MmI1MTdlNzBkNy4uYWM2MmIxMjA3MDdkYzZkOWY0NTBiYjVjYjkxMzc5MDA5MDRlYTk2MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1
bGFyTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcApAQCAtMzMsNyArMzMsNyBAQCBSZWY8RkVTcGVj
dWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvciwgZgogfQogCiBGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGlu
Zyhjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBz
cGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdo
dFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xv
ciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBr
ZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2Up
LCBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZykKKyAgICA6IEZFTGlnaHRp
bmcoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3Is
IHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2Vy
bmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkK
IHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwCmluZGV4IGE5ZTIxMzM3YjBkMjc0ZTU0ODBkZjY3NjBmODk3YzcyMDE5ZTU0
OGEuLjQzOTA0OGY1YmQxZTE5NzU3ZDkxN2ZhYjI1ZmRhNzM2YjE3ZDU3NzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKQEAg
LTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUg
IkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBh
dHRlcm4uaCIKQEAgLTQyLDIyICs0MywzMiBAQCBGRVRpbGU6OkZFVGlsZSgpCiB7CiB9CiAKLWJv
b2wgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCisv
LyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVUaWxlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRl
IHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVUaWxlU29mdHdhcmVBcHBsaWVyIDog
cHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRVRpbGU+IHsKKyAgICB1c2luZyBC
YXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFVGlsZT47CisKK3B1YmxpYzoKKyAg
ICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25z
dCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCitib29s
IEZFVGlsZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Rz
WzBdLmdldCgpOwogCi0gICAgYXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7
CisgICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7CiAg
ICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVz
dWx0SW1hZ2UgfHwgIWluQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzZXRJ
c0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKKyAgICBtX2VmZmVjdC5zZXRJc0FscGhh
SW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAogICAgIC8vIFNvdXJjZSBpbnB1dCBuZWVkcyBt
b3JlIGF0dGVudGlvbi4gSXQgaGFzIHRoZSBzaXplIG9mIHRoZSBmaWx0ZXJSZWdpb24gYnV0IGdp
dmVzIHRoZQogICAgIC8vIHNpemUgb2YgdGhlIGN1dHRlZCBzb3VyY2VJbWFnZSBiYWNrLiBUaGlz
IGlzIHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb24gYW5kIG9wdGltaXphdGlvbi4KICAgICBGbG9h
dFJlY3QgdGlsZVJlY3QgPSBpbi0+bWF4RWZmZWN0UmVjdCgpOwogICAgIEZsb2F0UG9pbnQgaW5N
YXhFZmZlY3RMb2NhdGlvbiA9IHRpbGVSZWN0LmxvY2F0aW9uKCk7Ci0gICAgRmxvYXRQb2ludCBt
YXhFZmZlY3RMb2NhdGlvbiA9IG1heEVmZmVjdFJlY3QoKS5sb2NhdGlvbigpOworICAgIEZsb2F0
UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtX2VmZmVjdC5tYXhFZmZlY3RSZWN0KCkubG9jYXRp
b24oKTsKICAgICBpZiAoaW4tPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNv
dXJjZUdyYXBoaWMgfHwgaW4tPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNv
dXJjZUFscGhhKSB7CiAgICAgICAgIHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwog
ICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CkBAIC04MiwxMSAr
OTMsMTYgQEAgYm9vbCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
IGZpbHRlcikKIAogICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdElt
YWdlLT5jb250ZXh0KCk7CiAgICAgZmlsdGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZNb3Zl
KHBhdHRlcm4pKTsKLSAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CisgICAgZmlsdGVyQ29udGV4dC5m
aWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVj
dCgpLnNpemUoKSkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVUaWxlOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZF
VGlsZVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7
Cit9CisKIFRleHRTdHJlYW0mIEZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAg
IHRzIDw8IGluZGVudCA8PCAiW2ZlVGlsZSI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggMjY1Nzc2
NjNjYzYzMjc3YmUyZGFhMzY0MDk2ODRiMWQ3MjIyNjlhMS4uNzVkM2JmNDRhMjM3MzUwZjI3NTVj
ZjZhMTI5ZjJkNzEzYjMwNDk0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5j
bHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+
CkBAIC0zNCwyMCArMzUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8qCi0gICAgUHJv
ZHVjZXMgcmVzdWx0cyBpbiB0aGUgcmFuZ2UgWzEsIDIqKjMxIC0gMl0uIEFsZ29yaXRobSBpczoK
LSAgICByID0gKGEgKiByKSBtb2QgbSB3aGVyZSBhID0gcmFuZEFtcGxpdHVkZSA9IDE2ODA3IGFu
ZAotICAgIG0gPSByYW5kTWF4aW11bSA9IDIqKjMxIC0gMSA9IDIxNDc0ODM2NDcsIHIgPSBzZWVk
LgotICAgIFNlZSBbUGFyayAmIE1pbGxlcl0sIENBQ00gdm9sLiAzMSBuby4gMTAgcC4gMTE5NSwg
T2N0LiAxOTg4Ci0gICAgVG8gdGVzdDogdGhlIGFsZ29yaXRobSBzaG91bGQgcHJvZHVjZSB0aGUg
cmVzdWx0IDEwNDM2MTgwNjUKLSAgICBhcyB0aGUgMTAsMDAwdGggZ2VuZXJhdGVkIG51bWJlciBp
ZiB0aGUgb3JpZ2luYWwgc2VlZCBpcyAxLgotKi8KLXN0YXRpYyBjb25zdCBpbnQgc19wZXJsaW5O
b2lzZSA9IDQwOTY7Ci1zdGF0aWMgY29uc3QgbG9uZyBzX3JhbmRNYXhpbXVtID0gMjE0NzQ4MzY0
NzsgLy8gMioqMzEgLSAxCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZEFtcGxpdHVkZSA9IDE2ODA3
OyAvLyA3Kio1OyBwcmltaXRpdmUgcm9vdCBvZiBtCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZFEg
PSAxMjc3NzM7IC8vIG0gLyBhCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZFIgPSAyODM2OyAvLyBt
ICUgYQotCiBSZWY8RkVUdXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6OmNyZWF0ZShUdXJidWxlbmNl
VHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGlu
dCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQogewogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFVHVyYnVsZW5jZSh0eXBlLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZy
ZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7CkBAIC0xMTUsNzIgKzEw
MiwxMzQgQEAgYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNoKQog
Ly8gVGhlIHR1cmJ1bGVuY2UgY2FsY3VsYXRpb24gY29kZSBpcyBhbiBhZGFwdGVkIHZlcnNpb24g
b2Ygd2hhdCBhcHBlYXJzIGluIHRoZSBTVkcgMS4xIHNwZWNpZmljYXRpb246CiAvLyBodHRwOi8v
d3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlCiAKLS8vIENvbXB1
dGUgcHNldWRvIHJhbmRvbSBudW1iZXIuCi1pbmxpbmUgbG9uZyBGRVR1cmJ1bGVuY2U6OlBhaW50
aW5nRGF0YTo6cmFuZG9tKCkKLXsKLSAgICBsb25nIHJlc3VsdCA9IHNfcmFuZEFtcGxpdHVkZSAq
IChzZWVkICUgc19yYW5kUSkgLSBzX3JhbmRSICogKHNlZWQgLyBzX3JhbmRRKTsKLSAgICBpZiAo
cmVzdWx0IDw9IDApCi0gICAgICAgIHJlc3VsdCArPSBzX3JhbmRNYXhpbXVtOwotICAgIHNlZWQg
PSByZXN1bHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFz
cyBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFk
ZXIgZmlsZXMuCitjbGFzcyBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmls
dGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFVHVyYnVsZW5jZT4geworICAgIHVzaW5nIEJhc2Ug
PSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVUdXJidWxlbmNlPjsKKworcHVibGljOgor
ICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNv
bnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICAvLyBQcm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAyXS4g
QWxnb3JpdGhtIGlzOgorICAgIC8vIHIgPSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5kQW1w
bGl0dWRlID0gMTY4MDcgYW5kCisgICAgLy8gbSA9IHJhbmRNYXhpbXVtID0gMioqMzEgLSAxID0g
MjE0NzQ4MzY0NywgciA9IHNlZWQuCisgICAgLy8gU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FDTSB2
b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKKyAgICAvLyBUbyB0ZXN0OiB0aGUgYWxn
b3JpdGhtIHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2NQorICAgIC8vIGFzIHRo
ZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEuCisg
ICAgc3RhdGljIGNvbnN0IGludCBwZXJsaW5Ob2lzZSA9IDQwOTY7CisgICAgc3RhdGljIGNvbnN0
IGxvbmcgcmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKiozMSAtIDEKKyAgICBzdGF0aWMg
Y29uc3QgaW50IHJhbmRBbXBsaXR1ZGUgPSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJvb3Qg
b2YgbQorICAgIHN0YXRpYyBjb25zdCBpbnQgcmFuZFEgPSAxMjc3NzM7IC8vIG0gLyBhCisgICAg
c3RhdGljIGNvbnN0IGludCByYW5kUiA9IDI4MzY7IC8vIG0gJSBhCisKKyAgICBzdGF0aWMgY29u
c3QgaW50IGJsb2NrU2l6ZSA9IDI1NjsKKyAgICBzdGF0aWMgY29uc3QgaW50IGJsb2NrTWFzayA9
IGJsb2NrU2l6ZSAtIDE7CisKKyAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKKyAgICAgICAgLy8g
Q29tcHV0ZSBwc2V1ZG8gcmFuZG9tIG51bWJlci4KKyAgICAgICAgbG9uZyByYW5kb20oKQorICAg
ICAgICB7CisgICAgICAgICAgICBsb25nIHJlc3VsdCA9IHJhbmRBbXBsaXR1ZGUgKiAoc2VlZCAl
IHJhbmRRKSAtIHJhbmRSICogKHNlZWQgLyByYW5kUSk7CisgICAgICAgICAgICBpZiAocmVzdWx0
IDw9IDApCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHJhbmRNYXhpbXVtOworICAgICAgICAg
ICAgc2VlZCA9IHJlc3VsdDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
IAotaW5saW5lIGZsb2F0IHNtb290aEN1cnZlKGZsb2F0IHQpCi17Ci0gICAgcmV0dXJuIHQgKiB0
ICogKDMgLSAyICogdCk7Ci19CisgICAgICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGU7CisgICAgICAg
IGZsb2F0IGJhc2VGcmVxdWVuY3lYOworICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WTsKKyAg
ICAgICAgaW50IG51bU9jdGF2ZXM7CisgICAgICAgIGxvbmcgc2VlZDsKKyAgICAgICAgYm9vbCBz
dGl0Y2hUaWxlczsKKyAgICAgICAgSW50U2l6ZSBwYWludGluZ1NpemU7CiAKLWlubGluZSBmbG9h
dCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0IGIpCi17Ci0gICAg
cmV0dXJuIGEgKyB0ICogKGIgLSBhKTsKLX0KKyAgICAgICAgaW50IGxhdHRpY2VTZWxlY3Rvclsy
ICogYmxvY2tTaXplICsgMl07CisgICAgICAgIGZsb2F0IGdyYWRpZW50WzRdWzIgKiBibG9ja1Np
emUgKyAyXVsyXTsKKyAgICB9OworCisgICAgc3RydWN0IFN0aXRjaERhdGEgeworICAgICAgICBp
bnQgd2lkdGggeyAwIH07IC8vIEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRj
aGluZy4KKyAgICAgICAgaW50IHdyYXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAu
CisgICAgICAgIGludCBoZWlnaHQgeyAwIH07CisgICAgICAgIGludCB3cmFwWSB7IDAgfTsKKyAg
ICB9OworCisgICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7CisgICAgICAgIEludFJlY3QgZmls
dGVyUmVnaW9uOworICAgICAgICBGbG9hdFNpemUgZmlsdGVyU2NhbGU7CisgICAgICAgIFVpbnQ4
Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OworICAgICAgICBQYWludGluZ0RhdGEqIHBhaW50aW5n
RGF0YTsKKyAgICAgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOworICAgICAgICBpbnQgc3RhcnRZ
OworICAgICAgICBpbnQgZW5kWTsKKyAgICB9OwogCi12b2lkIEZFVHVyYnVsZW5jZTo6aW5pdFBh
aW50KFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQg
c21vb3RoQ3VydmUoZmxvYXQgdCkgeyByZXR1cm4gdCAqIHQgKiAoMyAtIDIgKiB0KTsgfQorICAg
IHN0YXRpYyBpbmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xhdGlvbihmbG9hdCB0LCBmbG9hdCBh
LCBmbG9hdCBiKSB7IHJldHVybiBhICsgdCAqIChiIC0gYSk7IH0KKworICAgIHN0YXRpYyBQYWlu
dGluZ0RhdGEgaW5pdFBhaW50aW5nRGF0YShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZyZXF1
ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgbG9uZyBzZWVkLCBi
b29sIHN0aXRjaFRpbGVzLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUpOworICAgIHN0YXRp
YyBTdGl0Y2hEYXRhIGNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJh
c2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVksIGJvb2wgc3RpdGNoVGlsZXMpOwor
CisgICAgc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gbm9pc2UyRChjb25zdCBQYWlu
dGluZ0RhdGEmLCBjb25zdCBTdGl0Y2hEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0
b3IpOworICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gdG9JbnRCYXNlZENv
bG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENvbXBv
bmVudHMpOworICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY2FsY3VsYXRl
VHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwg
Y29uc3QgRmxvYXRQb2ludCYpOworCisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVy
aWMoY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNj
YWxlLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRhJiwg
U3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5
UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlQ
bGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmls
dGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBQYWludGluZ0RhdGEmLCBT
dGl0Y2hEYXRhJik7Cit9OworCitGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OlBhaW50aW5n
RGF0YSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmluaXRQYWludGluZ0RhdGEoVHVyYnVs
ZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZ
LCBpbnQgbnVtT2N0YXZlcywgbG9uZyBzZWVkLCBib29sIHN0aXRjaFRpbGVzLCBjb25zdCBJbnRT
aXplJiBwYWludGluZ1NpemUpCiB7Ci0gICAgZmxvYXQgbm9ybWFsaXphdGlvbkZhY3RvcjsKKyAg
ICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhIHsgdHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VG
cmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcywgcGFpbnRpbmdTaXplLCB7
IH0sIHsgfSB9OwogCi0gICAgLy8gVGhlIHNlZWQgdmFsdWUgY2xhbXAgdG8gdGhlIHJhbmdlIFsx
LCBzX3JhbmRNYXhpbXVtIC0gMV0uCisgICAgLy8gVGhlIHNlZWQgdmFsdWUgY2xhbXAgdG8gdGhl
IHJhbmdlIFsxLCByYW5kTWF4aW11bSAtIDFdLgogICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA8
PSAwKQotICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9IC0ocGFpbnRpbmdEYXRhLnNlZWQgJSAo
c19yYW5kTWF4aW11bSAtIDEpKSArIDE7Ci0gICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkID4gc19y
YW5kTWF4aW11bSAtIDEpCi0gICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gc19yYW5kTWF4aW11
bSAtIDE7CisgICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gLShwYWludGluZ0RhdGEuc2VlZCAl
IChyYW5kTWF4aW11bSAtIDEpKSArIDE7CisgICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkID4gcmFu
ZE1heGltdW0gLSAxKQorICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9IHJhbmRNYXhpbXVtIC0g
MTsKIAogICAgIGZsb2F0KiBncmFkaWVudDsKICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hh
bm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNfYmxv
Y2tTaXplOyArK2kpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBibG9ja1NpemU7ICsr
aSkgewogICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IGk7CiAg
ICAgICAgICAgICBncmFkaWVudCA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXTsK
ICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBncmFkaWVudFswXSA9IHN0YXRpY19j
YXN0PGZsb2F0PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0g
c19ibG9ja1NpemUpIC8gc19ibG9ja1NpemU7Ci0gICAgICAgICAgICAgICAgZ3JhZGllbnRbMV0g
PSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19ibG9j
a1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxvY2tTaXplOworICAgICAgICAgICAgICAgIGdy
YWRpZW50WzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAo
MiAqIGJsb2NrU2l6ZSkpIC0gYmxvY2tTaXplKSAvIGJsb2NrU2l6ZTsKKyAgICAgICAgICAgICAg
ICBncmFkaWVudFsxXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdEYXRhLnJhbmRvbSgp
ICUgKDIgKiBibG9ja1NpemUpKSAtIGJsb2NrU2l6ZSkgLyBibG9ja1NpemU7CiAgICAgICAgICAg
ICB9IHdoaWxlICghZ3JhZGllbnRbMF0gJiYgIWdyYWRpZW50WzFdKTsKLSAgICAgICAgICAgIG5v
cm1hbGl6YXRpb25GYWN0b3IgPSBzdGQ6Omh5cG90KGdyYWRpZW50WzBdLCBncmFkaWVudFsxXSk7
CisgICAgICAgICAgICBmbG9hdCBub3JtYWxpemF0aW9uRmFjdG9yID0gc3RkOjpoeXBvdChncmFk
aWVudFswXSwgZ3JhZGllbnRbMV0pOwogICAgICAgICAgICAgZ3JhZGllbnRbMF0gLz0gbm9ybWFs
aXphdGlvbkZhY3RvcjsKICAgICAgICAgICAgIGdyYWRpZW50WzFdIC89IG5vcm1hbGl6YXRpb25G
YWN0b3I7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKGludCBpID0gc19ibG9ja1NpemUg
LSAxOyBpID4gMDsgLS1pKSB7CisgICAgZm9yIChpbnQgaSA9IGJsb2NrU2l6ZSAtIDE7IGkgPiAw
OyAtLWkpIHsKICAgICAgICAgaW50IGsgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ld
OwotICAgICAgICBpbnQgaiA9IHBhaW50aW5nRGF0YS5yYW5kb20oKSAlIHNfYmxvY2tTaXplOwor
ICAgICAgICBpbnQgaiA9IHBhaW50aW5nRGF0YS5yYW5kb20oKSAlIGJsb2NrU2l6ZTsKICAgICAg
ICAgQVNTRVJUKGogPj0gMCk7Ci0gICAgICAgIEFTU0VSVChqIDwgMiAqIHNfYmxvY2tTaXplICsg
Mik7CisgICAgICAgIEFTU0VSVChqIDwgMiAqIGJsb2NrU2l6ZSArIDIpOwogICAgICAgICBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rv
cltqXTsKICAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXSA9IGs7CiAgICAg
fQogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZSArIDI7ICsraSkgewotICAg
ICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW3NfYmxvY2tTaXplICsgaV0gPSBwYWlu
dGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmxv
Y2tTaXplICsgMjsgKytpKSB7CisgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jb
YmxvY2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOwogICAgICAg
ICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAg
ICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1bMF0g
PSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMF07Ci0gICAgICAgICAgICBwYWlu
dGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5n
RGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKKyAgICAgICAgICAgIHBhaW50aW5nRGF0YS5n
cmFkaWVudFtjaGFubmVsXVtibG9ja1NpemUgKyBpXVswXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVu
dFtjaGFubmVsXVtpXVswXTsKKyAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFu
bmVsXVtibG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtp
XVsxXTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiBwYWludGluZ0RhdGE7CiB9CiAK
LUZFVHVyYnVsZW5jZTo6U3RpdGNoRGF0YSBGRVR1cmJ1bGVuY2U6OmNvbXB1dGVTdGl0Y2hpbmco
SW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1
ZW5jeVkpIGNvbnN0CitGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OlN0aXRjaERhdGEgRkVU
dXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNp
emUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZLCBib29sIHN0
aXRjaFRpbGVzKQogewotICAgIGlmICghbV9zdGl0Y2hUaWxlcykKKyAgICBpZiAoIXN0aXRjaFRp
bGVzKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgZmxvYXQgdGlsZVdpZHRoID0gdGlsZVNp
emUud2lkdGgoKTsKQEAgLTIwOSwxNSArMjU4LDE1IEBAIEZFVHVyYnVsZW5jZTo6U3RpdGNoRGF0
YSBGRVR1cmJ1bGVuY2U6OmNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQm
CiAKICAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7CiAgICAgc3RpdGNoRGF0YS53aWR0aCA9IHJv
dW5kZih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCk7Ci0gICAgc3RpdGNoRGF0YS53cmFwWCA9
IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLndpZHRoOworICAgIHN0aXRjaERhdGEud3JhcFgg
PSBwZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7CiAgICAgc3RpdGNoRGF0YS5oZWlnaHQg
PSByb3VuZGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKTsKLSAgICBzdGl0Y2hEYXRhLndy
YXBZID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEuaGVpZ2h0OworICAgIHN0aXRjaERhdGEu
d3JhcFkgPSBwZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEuaGVpZ2h0OwogCiAgICAgcmV0dXJuIHN0
aXRjaERhdGE7CiB9CiAKIC8vIFRoaXMgaXMgdGFrZW4gMToxIGZyb20gU1ZHIHNwZWM6IGh0dHA6
Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50Lgot
Q29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY29uc3QgUGFp
bnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRjaERhdGEsIGNv
bnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKSBjb25zdAorQ29sb3JDb21wb25lbnRzPGZsb2F0
LCA0PiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6Om5vaXNlMkQoY29uc3QgUGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRjaERhdGEsIGNvbnN0IEZs
b2F0UG9pbnQmIG5vaXNlVmVjdG9yKQogewogICAgIHN0cnVjdCBOb2lzZVBvc2l0aW9uIHsKICAg
ICAgICAgaW50IGluZGV4OyAvLyBieDAsIGJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgpAQCAtMjMwLDcg
KzI3OSw3IEBAIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxlbmNlOjpub2lzZTJE
KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhCiAgICAgICAgICAgICAvLyAgYngwID0g
KGludCl0OwogICAgICAgICAgICAgLy8gIGJ4MSA9IGJ4MCsxOwogICAgICAgICAgICAgLy8gIHJ4
MCA9IHQgLSAoaW50KXQ7Ci0gICAgICAgICAgICBmbG9hdCBwb3NpdGlvbiA9IGNvbXBvbmVudCAr
IHNfcGVybGluTm9pc2U7CisgICAgICAgICAgICBmbG9hdCBwb3NpdGlvbiA9IGNvbXBvbmVudCAr
IHBlcmxpbk5vaXNlOwogICAgICAgICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0
aW9uKTsKICAgICAgICAgICAgIG5leHRJbmRleCA9IGluZGV4ICsgMTsKICAgICAgICAgICAgIGZy
YWN0aW9uID0gcG9zaXRpb24gLSBpbmRleDsKQEAgLTI1NCw3ICszMDMsNyBAQCBDb2xvckNvbXBv
bmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YQogICAgIE5vaXNlUG9zaXRpb24gbm9pc2VZKG5vaXNlVmVjdG9yLnkoKSk7
CiAKICAgICAvLyBJZiBzdGl0Y2hpbmcsIGFkanVzdCBsYXR0aWNlIHBvaW50cyBhY2NvcmRpbmds
eS4KLSAgICBpZiAobV9zdGl0Y2hUaWxlcykgeworICAgIGlmIChwYWludGluZ0RhdGEuc3RpdGNo
VGlsZXMpIHsKICAgICAgICAgbm9pc2VYLnN0aXRjaChzdGl0Y2hEYXRhLndpZHRoLCBzdGl0Y2hE
YXRhLndyYXBYKTsKICAgICAgICAgbm9pc2VZLnN0aXRjaChzdGl0Y2hEYXRhLmhlaWdodCwgc3Rp
dGNoRGF0YS53cmFwWSk7CiAgICAgfQpAQCAtMjYzLDEwICszMTIsMTAgQEAgQ29sb3JDb21wb25l
bnRzPGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEKICAgICAvLyBieDEgJj0gQk07CiAgICAgLy8gYnkwICY9IEJNOwogICAgIC8v
IGJ5MSAmPSBCTTsKLSAgICBub2lzZVguaW5kZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9pc2VY
Lm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBub2lzZVkuaW5kZXggJj0gc19ibG9ja01h
c2s7Ci0gICAgbm9pc2VZLm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKKyAgICBub2lzZVguaW5k
ZXggJj0gYmxvY2tNYXNrOworICAgIG5vaXNlWC5uZXh0SW5kZXggJj0gYmxvY2tNYXNrOworICAg
IG5vaXNlWS5pbmRleCAmPSBibG9ja01hc2s7CisgICAgbm9pc2VZLm5leHRJbmRleCAmPSBibG9j
a01hc2s7CiAKICAgICAvLyBpID0gdUxhdHRpY2VTZWxlY3RvcltieDBdOwogICAgIC8vIGogPSB1
TGF0dGljZVNlbGVjdG9yW2J4MV07CkBAIC0zMjMsNyArMzcyLDcgQEAgQ29sb3JDb21wb25lbnRz
PGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEKIAogLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVU
dXJidWxlbmNlRWxlbWVudCBkZXNjcmliZXMgdGhpcyBjb252ZXJzaW9uIHRvIGNvbG9yIGNvbXBv
bmVudHMuCiAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGNvbG9yQ29udmVydDxTUkdCQTx1aW50
OD4+KFNSR0JBPGZsb2F0PikgdG8gZ2V0IHRoZSBzYW1lIGJlaGF2aW9yLgotc3RhdGljIGlubGlu
ZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyhj
b25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENvbXBvbmVudHMpCitDb2xvckNv
bXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjp0b0ludEJh
c2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4mIGZsb2F0
Q29tcG9uZW50cykKIHsKICAgICByZXR1cm4gewogICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4X3Q+
KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1KSwgMCwgMjU1KSwKQEAg
LTMzMywxMyArMzgyLDEzIEBAIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3Qs
IDQ+IHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDCiAgICAgfTsKIH0KIAot
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVyYnVs
ZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRj
aERhdGEgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CitDb2xvckNv
bXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpjYWxjdWxh
dGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKICAg
ICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdDsKICAg
ICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50LngoKSAqIHBhaW50aW5nRGF0YS5iYXNlRnJl
cXVlbmN5WCwgcG9pbnQueSgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lZKTsKICAgICBm
bG9hdCByYXRpbyA9IDE7Ci0gICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgbV9udW1P
Y3RhdmVzOyArK29jdGF2ZSkgewotICAgICAgICBpZiAobV90eXBlID09IFR1cmJ1bGVuY2VUeXBl
OjpGcmFjdGFsTm9pc2UpCisgICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgcGFpbnRp
bmdEYXRhLm51bU9jdGF2ZXM7ICsrb2N0YXZlKSB7CisgICAgICAgIGlmIChwYWludGluZ0RhdGEu
dHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQogICAgICAgICAgICAgdHVyYnVs
ZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBu
b2lzZVZlY3RvcikgLyByYXRpbzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdHVyYnVsZW5j
ZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBub2lz
ZVZlY3RvcikuYWJzKCkgLyByYXRpbzsKQEAgLTM0OCwzMiArMzk3LDMxIEBAIENvbG9yQ29tcG9u
ZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZv
clBvaW50KGNvbnN0CiAgICAgICAgIG5vaXNlVmVjdG9yLnNldFkobm9pc2VWZWN0b3IueSgpICog
Mik7CiAgICAgICAgIHJhdGlvICo9IDI7CiAKLSAgICAgICAgaWYgKG1fc3RpdGNoVGlsZXMpIHsK
LSAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFsdWVzLiBTdWJ0cmFjdGluZyBzX3Blcmxp
bk5vaXNlIGJlZm9yZSB0aGUgbXVsdGlwbGljYXRpb24gYW5kCisgICAgICAgIGlmIChwYWludGlu
Z0RhdGEuc3RpdGNoVGlsZXMpIHsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFsdWVz
LiBTdWJ0cmFjdGluZyBwZXJsaW5Ob2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAog
ICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRyYWN0
aW5nIGl0IG9uY2UuCiAgICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7Ci0gICAgICAg
ICAgICBzdGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Blcmxpbk5v
aXNlOworICAgICAgICAgICAgc3RpdGNoRGF0YS53cmFwWCA9IDIgKiBzdGl0Y2hEYXRhLndyYXBY
IC0gcGVybGluTm9pc2U7CiAgICAgICAgICAgICBzdGl0Y2hEYXRhLmhlaWdodCAqPSAyOwotICAg
ICAgICAgICAgc3RpdGNoRGF0YS53cmFwWSA9IDIgKiBzdGl0Y2hEYXRhLndyYXBZIC0gc19wZXJs
aW5Ob2lzZTsKKyAgICAgICAgICAgIHN0aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53
cmFwWSAtIHBlcmxpbk5vaXNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gVGhlIHZhbHVl
IG9mIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCBjb21lcyBmcm9tICgodHVyYnVsZW5jZUZ1bmN0
aW9uUmVzdWx0ICogMjU1KSArIDI1NSkgLyAyIGJ5IGZyYWN0YWxOb2lzZQogICAgIC8vIGFuZCAo
dHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSBieSB0dXJidWxlbmNlLgotICAgIGlmICht
X3R5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKKyAgICBpZiAocGFpbnRpbmdE
YXRhLnR5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKICAgICAgICAgdHVyYnVs
ZW5jZUZ1bmN0aW9uUmVzdWx0ID0gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMC41ZiArIDAu
NWY7CiAKICAgICByZXR1cm4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyh0dXJidWxlbmNlRnVu
Y3Rpb25SZXN1bHQpOwogfQogCi12b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbihjb25zdCBG
aWx0ZXImIGZpbHRlciwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFydFks
IGludCBlbmRZKSBjb25zdAordm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
UGxhdGZvcm1HZW5lcmljKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRT
aXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFy
dFksIGludCBlbmRZKQogewogICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKIAotICAgIEludFJl
Y3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1dGVQYWludFJlY3QoKTsKICAgICBGbG9hdFBvaW50IHBv
aW50KDAsIGZpbHRlclJlZ2lvbi55KCkgKyBzdGFydFkpOwogICAgIGludCBpbmRleE9mUGl4ZWxD
aGFubmVsID0gc3RhcnRZICogKGZpbHRlclJlZ2lvbi53aWR0aCgpIDw8IDIpOwotICAgIEZsb2F0
U2l6ZSBpbnZlcnNlU2NhbGUgPSB7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAx
IC8gZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkgfTsKKyAgICBGbG9hdFNpemUgaW52ZXJz
ZVNjYWxlID0geyAxIC8gZmlsdGVyU2NhbGUud2lkdGgoKSwgMSAvIGZpbHRlclNjYWxlLmhlaWdo
dCgpIH07CiAKICAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7CiAgICAg
ICAgIHBvaW50LnNldFkocG9pbnQueSgpICsgMSk7CkBAIC0zODgsNDUgKzQzNiwyMiBAQCB2b2lk
IEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbihjb25zdCBGaWx0ZXImIGZpbHRlciwgVWludDhDbGFt
cGVkQXJyYXkmIHBpeGVsQXJyYQogICAgIH0KIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxS
ZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCit2b2lkIEZFVHVy
YnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybVdvcmtlcihBcHBseVBhcmFtZXRl
cnMqIHBhcmFtZXRlcnMpCiB7Ci0gICAgcGFyYW1ldGVycy0+ZWZmZWN0LT5maWxsUmVnaW9uKCpw
YXJhbWV0ZXJzLT5maWx0ZXIsICpwYXJhbWV0ZXJzLT5waXhlbEFycmF5LCAqcGFyYW1ldGVycy0+
cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFydFks
IHBhcmFtZXRlcnMtPmVuZFkpOworICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKHBhcmFtZXRlcnMt
PmZpbHRlclJlZ2lvbiwgcGFyYW1ldGVycy0+ZmlsdGVyU2NhbGUsICpwYXJhbWV0ZXJzLT5waXhl
bEFycmF5LCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRh
LCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMtPmVuZFkpOwogfQogCi1ib29sIEZFVHVy
YnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQordm9p
ZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oY29uc3QgSW50UmVj
dCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBVaW50OENsYW1w
ZWRBcnJheSYgcGl4ZWxBcnJheSwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRjaERh
dGEmIHN0aXRjaERhdGEpCiB7Ci0gICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4
ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsK
LSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXItPmRhdGEoKTsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShhYnNvbHV0ZVBhaW50UmVjdCgp
LnNpemUoKSk7Ci0KLSAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVz
dGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIEludFNpemUgdGlsZVNpemUgPSByb3VuZGVkSW50U2l6ZShmaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKS5zaXplKCkpOwotCi0gICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVggPSBtX2Jh
c2VGcmVxdWVuY3lYOwotICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lZID0gbV9iYXNlRnJlcXVlbmN5
WTsKLSAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGEgPSBjb21wdXRlU3RpdGNoaW5nKHRpbGVTaXpl
LCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVkpOworICAgIGludCBoZWlnaHQgPSBmaWx0
ZXJSZWdpb24uaGVpZ2h0KCk7CisgICAgdW5zaWduZWQgYXJlYSA9IGZpbHRlclJlZ2lvbi5hcmVh
KCk7CiAKLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgdGlsZVNpemUsIGJh
c2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7Ci0gICAgaW5pdFBhaW50KHBhaW50aW5nRGF0
YSk7CisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAx
MDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icy4KKyAgICB1bnNp
Z25lZCBtYXhOdW1UaHJlYWRzID0gZmlsdGVyUmVnaW9uLmhlaWdodCgpIC8gODsKKyAgICB1bnNp
Z25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBtaW5p
bWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7CiAKLSAgICBhdXRvIGFyZWEgPSByZXN1
bHRTaXplLmFyZWEoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGludCBoZWlnaHQgPSByZXN1bHRTaXplLmhlaWdodCgpOwotCi0g
ICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IGhlaWdodCAvIDg7Ci0gICAgdW5zaWduZWQgb3B0
aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPihhcmVhIC8gc19taW5pbWFsUmVj
dERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7CiAgICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIg
PiAxKSB7Ci0gICAgICAgIFBhcmFsbGVsSm9iczxGaWxsUmVnaW9uUGFyYW1ldGVycz4gcGFyYWxs
ZWxKb2JzKCZXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIsIG9wdGltYWxU
aHJlYWROdW1iZXIpOworICAgICAgICBQYXJhbGxlbEpvYnM8QXBwbHlQYXJhbWV0ZXJzPiBwYXJh
bGxlbEpvYnMoJmFwcGx5UGxhdGZvcm1Xb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwogCiAg
ICAgICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJheQogICAgICAgICBhdXRvIG51bUpvYnMg
PSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CkBAIC00MzcsMTAgKzQ2MiwxMCBAQCBib29s
IEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQogICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRZID0gMDsKIAogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bUpvYnM7ICsraSkgewotICAgICAgICAgICAgICAgIEZpbGxS
ZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwotICAg
ICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSAmZmlsdGVyOwotICAgICAgICAgICAgICAgIHBh
cmFtcy5lZmZlY3QgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0g
JmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKKyAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMm
IHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoaSk7CisgICAgICAgICAgICAgICAgcGFy
YW1zLmZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsKKyAgICAgICAgICAgICAgICBwYXJhbXMu
ZmlsdGVyU2NhbGUgPSBmaWx0ZXJTY2FsZTsKKyAgICAgICAgICAgICAgICBwYXJhbXMucGl4ZWxB
cnJheSA9ICZwaXhlbEFycmF5OwogICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEg
PSAmcGFpbnRpbmdEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5zdGl0Y2hEYXRhID0gc3Rp
dGNoRGF0YTsKICAgICAgICAgICAgICAgICBwYXJhbXMuc3RhcnRZID0gc3RhcnRZOwpAQCAtNDUx
LDE1ICs0NzYsNDggQEAgYm9vbCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShj
b25zdCBGaWx0ZXImIGZpbHRlcikKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcGFyYWxs
ZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRo
cmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRoZSBw
YWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKGZpbHRlciwgZGVzdGluYXRp
b25QaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7CisgICAg
YXBwbHlQbGF0Zm9ybUdlbmVyaWMoZmlsdGVyUmVnaW9uLCBmaWx0ZXJTY2FsZSwgcGl4ZWxBcnJh
eSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworfQorCitib29sIEZFVHVy
YnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IEZpbHRlckVmZmVjdFZlY3RvciYpCit7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVy
ID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2VmZmVjdC5hYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKSk7CisgICAgaWYgKHJlc3VsdFNpemUuYXJlYSgpLmhhc092ZXJm
bG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgaWYgKHJl
c3VsdFNpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56ZXJv
RmlsbCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBhdXRvIHRpbGVTaXpl
ID0gcm91bmRlZEludFNpemUobV9lZmZlY3QuZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6
ZSgpKTsKKworICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9lZmZlY3QuYmFzZUZyZXF1ZW5j
eVgoKTsKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fZWZmZWN0LmJhc2VGcmVxdWVuY3lZ
KCk7CisgICAgYXV0byBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwgYmFz
ZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBtX2VmZmVjdC5zdGl0Y2hUaWxlcygpKTsKKwor
ICAgIGF1dG8gcGFpbnRpbmdEYXRhID0gaW5pdFBhaW50aW5nRGF0YShtX2VmZmVjdC50eXBlKCks
IGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbV9lZmZlY3QubnVtT2N0YXZlcygpLCBt
X2VmZmVjdC5zZWVkKCksIG1fZWZmZWN0LnN0aXRjaFRpbGVzKCksIHRpbGVTaXplKTsKKworICAg
IGFwcGx5UGxhdGZvcm0obV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKSwgZmlsdGVyLmZpbHRl
clNjYWxlKCksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRh
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVUdXJidWxl
bmNlU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsK
K30KKwogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1cmJ1
bGVuY2VUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAppbmRl
eCBlNjk4YjMxM2YxODg2MjUwMDM0YjA2NTkwZDFlMmIzZWQ2ZGMzOTg4Li43YzQ3Yzc4NzQ5Yjg1
NmZjOWY5MWFmODRjNjEzNGNmNDdkZjA2ZTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKQEAgLTU4LDY0ICs1
OCwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRTdGl0Y2hUaWxlcyhib29sKTsKIAogcHJpdmF0
ZToKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tTaXplID0gMjU2OwotICAgIHN0YXRpYyBj
b25zdCBpbnQgc19ibG9ja01hc2sgPSBzX2Jsb2NrU2l6ZSAtIDE7Ci0KLSAgICBzdGF0aWMgY29u
c3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAoMTAwICogMTAwKTsgLy8gRW1waXJpY2Fs
IGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMuCi0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRh
IHsKLSAgICAgICAgUGFpbnRpbmdEYXRhKGxvbmcgcGFpbnRpbmdTZWVkLCBjb25zdCBJbnRTaXpl
JiBwYWludGluZ1NpemUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5
WSkKLSAgICAgICAgICAgIDogc2VlZChwYWludGluZ1NlZWQpCi0gICAgICAgICAgICAsIGZpbHRl
clNpemUocGFpbnRpbmdTaXplKQotICAgICAgICAgICAgLCBiYXNlRnJlcXVlbmN5WChiYXNlRnJl
cXVlbmN5WCkKLSAgICAgICAgICAgICwgYmFzZUZyZXF1ZW5jeVkoYmFzZUZyZXF1ZW5jeVkpCi0g
ICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIGxvbmcgc2VlZDsKLSAgICAgICAgaW50IGxh
dHRpY2VTZWxlY3RvclsyICogc19ibG9ja1NpemUgKyAyXTsKLSAgICAgICAgZmxvYXQgZ3JhZGll
bnRbNF1bMiAqIHNfYmxvY2tTaXplICsgMl1bMl07Ci0gICAgICAgIEludFNpemUgZmlsdGVyU2l6
ZTsKLSAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVg7Ci0gICAgICAgIGZsb2F0IGJhc2VGcmVx
dWVuY3lZOwotCi0gICAgICAgIGlubGluZSBsb25nIHJhbmRvbSgpOwotICAgIH07Ci0KLSAgICBz
dHJ1Y3QgU3RpdGNoRGF0YSB7Ci0gICAgICAgIFN0aXRjaERhdGEoKSA9IGRlZmF1bHQ7Ci0KLSAg
ICAgICAgaW50IHdpZHRoIHsgMCB9OyAvLyBIb3cgbXVjaCB0byBzdWJ0cmFjdCB0byB3cmFwIGZv
ciBzdGl0Y2hpbmcuCi0gICAgICAgIGludCB3cmFwWCB7IDAgfTsgLy8gTWluaW11bSB2YWx1ZSB0
byB3cmFwLgotICAgICAgICBpbnQgaGVpZ2h0IHsgMCB9OwotICAgICAgICBpbnQgd3JhcFkgeyAw
IH07Ci0gICAgfTsKLQotICAgIHN0cnVjdCBGaWxsUmVnaW9uUGFyYW1ldGVycyB7Ci0gICAgICAg
IGNvbnN0IEZpbHRlciogZmlsdGVyOwotICAgICAgICBGRVR1cmJ1bGVuY2UqIGVmZmVjdDsKLSAg
ICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7Ci0gICAgICAgIFBhaW50aW5nRGF0
YSogcGFpbnRpbmdEYXRhOwotICAgICAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7Ci0gICAgICAg
IGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9p
ZCBmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKik7Ci0KICAgICBGRVR1cmJ1
bGVuY2UoVHVyYnVsZW5jZVR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJl
cXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMpOwog
CiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVy
cmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVj
dCgpKSk7IH0KLSAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBv
dmVycmlkZTsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RG
OjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IHZvaWQgaW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOwotICAgIFN0aXRjaERhdGEgY29tcHV0ZVN0
aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBi
YXNlRnJlcXVlbmN5WSkgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBub2lz
ZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBjb25zdCBGbG9hdFBv
aW50JikgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNhbGN1bGF0ZVR1
cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGNv
bnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGZpbGxSZWdpb24oY29uc3QgRmlsdGVy
JiwgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBp
bnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3Q7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9u
V29ya2VyKHZvaWQqKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIFR1cmJ1bGVuY2VUeXBlIG1fdHlwZTsKICAgICBmbG9hdCBtX2Jhc2VGcmVxdWVuY3lY
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3RBcHBsaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdEFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2UxNDI1MWM1NjJlOTY3
ZmZiOWFiNzFlYzNhZmE3MGRjYjljMmIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RBcHBsaWVyLmgKQEAgLTAs
MCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJFZmZl
Y3RBcHBsaWVyIHsKK3B1YmxpYzoKKyAgICBGaWx0ZXJFZmZlY3RBcHBsaWVyKCkgPSBkZWZhdWx0
OworICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdEFwcGxpZXIoKSA9IGRlZmF1bHQ7CisgICAgCisg
ICAgdmlydHVhbCBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZl
Y3RvciYgaW5wdXRzKSA9IDA7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXJFZmZlY3RU
eXBlPgorY2xhc3MgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyIDogcHVibGljIEZpbHRlckVm
ZmVjdEFwcGxpZXIgeworcHVibGljOgorICAgIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcihG
aWx0ZXJFZmZlY3RUeXBlJiBlZmZlY3QpCisgICAgICAgIDogbV9lZmZlY3QoZWZmZWN0KQorICAg
IHsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRmlsdGVyRWZmZWN0VHlwZSYgbV9lZmZl
Y3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKaW5kZXggOTRkMTk1
MDEzOWQ2ZDI0M2E4NjYxZTVlYTU1ZDIzNWE3Mzg5ZjVkNS4uOGRiOGU1NjU5N2JhYmVjODY4NjE2
ODNmZjhlMDU4Mjg4YzcxMjZmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaApAQCAtNjUsNyArNjUsNyBAQCBwdWJs
aWM6CiAgICAgTGlnaHRUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICB2
aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRT
dHJlYW0mKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShj
b25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgY29u
c3QgPSAwOwogICAgIC8vIHogaXMgYSBmbG9hdCBudW1iZXIsIHNpbmNlIGl0IGlzIHRoZSBhbHBo
YSB2YWx1ZSBzY2FsZWQgYnkgYSB1c2VyCiAgICAgLy8gc3BlY2lmaWVkICJzdXJmYWNlU2NhbGUi
IGNvbnN0YW50LCB3aGljaCB0eXBlIGlzIDxudW1iZXI+IGluIHRoZSBTVkcgc3RhbmRhcmQuCiAg
ICAgLy8geCBhbmQgeSBhcmUgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBGaWx0ZXJFZmZlY3Qn
cyBidWZmZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAppbmRleCAxYWI1ZTE5ZTExYTRmMzZl
YTJhNDI2YTc1MDM4NzkxMjhmNTRiNDRiLi5jMmQ4NzQ5M2IyOGRlMzg2MTNlM2UyMDI4NGZmZTJm
ZjQyNWZlZTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM2LDcgKzM2LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWlu
dGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYp
Cit2b2lkIFBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZm
ZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYpIGNvbnN0CiB7CiAgICAgbV9idWZmZXJQ
b3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZmZXIo
bV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CiAgICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEgcG9p
bnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24gYnkg
ei4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
UG9pbnRMaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Qb2ludExpZ2h0U291cmNlLmgKaW5kZXggNjdhM2EwYmQzOWE4YTljYzE5NTQzNDk4NTk2
ZDcxMTVmNGJiOTVhNS4uNDJjM2RjNjE3ODg1MjJlYzc4N2NhZWUyYWMzNGE4ZTMyZjlkYmQ0ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2lu
dExpZ2h0U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Qb2ludExpZ2h0U291cmNlLmgKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIGJv
b2wgc2V0WShmbG9hdCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRaKGZsb2F0KSBvdmVycmlkZTsK
IAotICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGlu
Z0RhdGEmKSBvdmVycmlkZTsKKyAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVy
RWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgQ29tcHV0ZWRMaWdo
dGluZ0RhdGEgY29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYsIGlu
dCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRleHRTdHJlYW0m
IGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CkBAIC01Miw3ICs1Miw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgRmxvYXRQb2ludDNEIG1f
dXNlclNwYWNlUG9zaXRpb247Ci0gICAgRmxvYXRQb2ludDNEIG1fYnVmZmVyUG9zaXRpb247Cisg
ICAgbXV0YWJsZSBGbG9hdFBvaW50M0QgbV9idWZmZXJQb3NpdGlvbjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXggOGZhNDQyYjhkOWQ1M2E5OWVmNWNh
MTU4ODI2NjM1MGRhNmJhNTg0MC4uODIwMmZiOTQ4YTk2ZDcwM2U1ODViNDljOTJlMjUzNDRiMDNi
YWE1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgIkNv
bG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGll
ci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1Rl
eHRTdHJlYW0uaD4KIApAQCAtNDUsMTcgKzQ2LDI5IEBAIHZvaWQgU291cmNlQWxwaGE6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFic29s
dXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIH0KIAot
Ym9vbCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCisv
LyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIgdG8gc2Vw
YXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBTb3VyY2VBbHBoYVNvZnR3YXJl
QXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8U291cmNlQWxwaGE+
IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPFNvdXJjZUFs
cGhhPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5
KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBv
dmVycmlkZTsKK307CisKK2Jvb2wgU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNv
bnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewot
ICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKworICAgIGF1dG8gcmVz
dWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0
SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBJbWFnZUJ1ZmZlciogaW1h
Z2VCdWZmZXIgPSBpbnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRv
IGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFpbWFnZUJ1
ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRSZWN0IGltYWdlUmVjdChG
bG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKKyAgICBGbG9hdFJlY3Qg
aW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXpl
KCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5j
b250ZXh0KCk7CiAKICAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KGltYWdlUmVjdCwgQ29sb3I6
OmJsYWNrKTsKQEAgLTY0LDYgKzc3LDExIEBAIGJvb2wgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFNv
dXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7
CisgICAgcmV0dXJuIFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0
ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogVGV4dFN0cmVhbSYgU291cmNlQWxwaGE6OmV4dGVy
bmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29u
c3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltTb3VyY2VBbHBoYV1cbiI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFw
aGljLmNwcAppbmRleCBlY2RlNDMxZjliOWIwNjQ0MTNlYTA1YjYwZGRjYjkyZTU4OThjNzA0Li43
YjI2M2RkZTA5N2M1OTBkN2Y1ZDRjNDlmNDY0ZDU3NjVlNjc0NTgwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAKICNp
bmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgogCkBAIC00MiwxMCArNDMsMjAgQEAgdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBzZXRBYnNvbHV0ZVBhaW50
UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQogCi1ib29sIFNvdXJjZUdyYXBo
aWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKKy8vIEZJWE1F
OiBNb3ZlIHRoZSBjbGFzcyBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRl
IHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgU291cmNlR3JhcGhpY1NvZnR3YXJlQXBw
bGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8U291cmNlR3JhcGhpYz4g
eworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8U291cmNlR3Jh
cGhpYz47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBs
eShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykg
b3ZlcnJpZGU7Cit9OworCitib29sIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImKQogewotICAg
IEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgSW1h
Z2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7CisgICAgYXV0byBy
ZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBzb3Vy
Y2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJbWFnZSgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwg
IXNvdXJjZUltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTUzLDYgKzY0LDExIEBA
IGJvb2wgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFNvdXJjZUdyYXBoaWM6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gU291
cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVj
dHMoKSk7Cit9CisKIFRleHRTdHJlYW0mIFNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVzZW50
YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKIHsKICAgICB0
cyA8PCBpbmRlbnQgPDwgIltTb3VyY2VHcmFwaGljXVxuIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNw
cAppbmRleCA3MTYwN2FiMDBmZjlkNmE2ZDAxNjkxZDliYmI4NTUzZDFmMzQ4ZDAwLi5lN2M3YzA0
ZWRlZWQ4NzJlNzlhMjIzYmRhZDg2YTkxZWQzM2YwMjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2Uu
Y3BwCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGFjY29yZGluZyB0
byB0aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNzaW9uIHRlc3RzCiBzdGF0aWMgY29uc3QgZmxv
YXQgYW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7CiAKLXZvaWQgU3BvdExpZ2h0U291cmNlOjpp
bml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdE
YXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSkgY29uc3QKIHsKICAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRlckVmZmVj
dC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkp
KTsKICAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFj
ZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgKaW5k
ZXggMzUxNTE2MzUwNzdlZWYwZTczYzI2YWU0NDJhNWVhNTM0ZmQxZjNiZi4uMmVkZDkzMDk5ZDk3
MjgyYjA2ZDdjMTllNzcyN2Q3NWQ2NDJlOWM1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCkBAIC01
MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFNwZWN1bGFyRXhwb25lbnQoZmxvYXQp
IG92ZXJyaWRlOwogICAgIGJvb2wgc2V0TGltaXRpbmdDb25lQW5nbGUoZmxvYXQpIG92ZXJyaWRl
OwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50
aW5nRGF0YSYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0
ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBjb25zdCBvdmVycmlkZTsKICAgICBDb21wdXRlZExp
Z2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwg
aW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlk
ZTsKQEAgLTY4LDcgKzY4LDcgQEAgcHJpdmF0ZToKICAgICBGbG9hdFBvaW50M0QgbV91c2VyU3Bh
Y2VQb3NpdGlvbjsKICAgICBGbG9hdFBvaW50M0QgbV91c2VyU3BhY2VQb2ludHNBdDsKIAotICAg
IEZsb2F0UG9pbnQzRCBtX2J1ZmZlclBvc2l0aW9uOworICAgIG11dGFibGUgRmxvYXRQb2ludDNE
IG1fYnVmZmVyUG9zaXRpb247CiAKICAgICBmbG9hdCBtX3NwZWN1bGFyRXhwb25lbnQ7CiAgICAg
ZmxvYXQgbV9saW1pdGluZ0NvbmVBbmdsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKaW5kZXggM2ZlY2YxZjM0NGUxYzdmNmE2YTJh
NjA5MTE5NTIxODRiNjE2ZDYzMi4uYzc1OWM5YThjNTZkYmViMzc1ZGUzN2Y2NTc1NWM5ODYwMWY2
ODQwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVJbWFnZS5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJTVkdGRUltYWdlLmgiCiAK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCkBAIC03NCwyOSArNzUsMzkgQEAgdm9pZCBGRUltYWdlOjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVj
dChlbmNsb3NpbmdJbnRSZWN0KGltYWdlUmVjdCkpOwogfQogCi1ib29sIEZFSW1hZ2U6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKKy8vIEZJWE1FOiBNb3ZlIHRo
ZSBjbGFzcyBGRUltYWdlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVh
ZGVyIGZpbGVzLgorY2xhc3MgRkVJbWFnZVNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVJbWFnZT4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJF
ZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVJbWFnZT47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNl
OjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZl
Y3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCitib29sIEZFSW1hZ2VTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZl
Y3RWZWN0b3ImKQogewotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgp
OworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwog
ICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8g
cHJpbWl0aXZlU3VicmVnaW9uID0gZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CisgICAgYXV0
byBwcmltaXRpdmVTdWJyZWdpb24gPSBtX2VmZmVjdC5maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24o
KTsKICAgICBhdXRvJiBjb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKIAotICAgIFdU
Rjo6c3dpdGNoT24obV9zb3VyY2VJbWFnZSwKKyAgICBXVEY6OnN3aXRjaE9uKG1fZWZmZWN0LnNv
dXJjZUltYWdlKCksCiAgICAgICAgIFsmXSAoY29uc3QgUmVmPEltYWdlPiYgaW1hZ2UpIHsKICAg
ICAgICAgICAgIGF1dG8gaW1hZ2VSZWN0ID0gcHJpbWl0aXZlU3VicmVnaW9uOwotICAgICAgICAg
ICAgYXV0byBzcmNSZWN0ID0gbV9zb3VyY2VJbWFnZVJlY3Q7Ci0gICAgICAgICAgICBtX3ByZXNl
cnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChpbWFnZVJlY3QsIHNyY1JlY3QpOworICAgICAg
ICAgICAgYXV0byBzcmNSZWN0ID0gbV9lZmZlY3Quc291cmNlSW1hZ2VSZWN0KCk7CisgICAgICAg
ICAgICBtX2VmZmVjdC5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCkudHJhbnNmb3JtUmVjdChpbWFnZVJl
Y3QsIHNyY1JlY3QpOwogICAgICAgICAgICAgaW1hZ2VSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJT
Y2FsZSgpKTsKLSAgICAgICAgICAgIGltYWdlUmVjdCA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoSW50UmVjdChpbWFnZVJlY3QpKTsKKyAgICAgICAgICAgIGltYWdlUmVjdCA9IG1fZWZmZWN0
LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoSW50UmVjdChpbWFnZVJlY3QpKTsKICAgICAgICAg
ICAgIGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCBpbWFnZVJlY3QsIHNyY1JlY3QpOwogICAgICAg
ICB9LAogICAgICAgICBbJl0gKGNvbnN0IFJlZjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyKSB7
CiAgICAgICAgICAgICBhdXRvIGltYWdlUmVjdCA9IHByaW1pdGl2ZVN1YnJlZ2lvbjsKLSAgICAg
ICAgICAgIGltYWdlUmVjdC5tb3ZlQnkobV9zb3VyY2VJbWFnZVJlY3QubG9jYXRpb24oKSk7Cisg
ICAgICAgICAgICBpbWFnZVJlY3QubW92ZUJ5KG1fZWZmZWN0LnNvdXJjZUltYWdlUmVjdCgpLmxv
Y2F0aW9uKCkpOwogICAgICAgICAgICAgaW1hZ2VSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJTY2Fs
ZSgpKTsKLSAgICAgICAgICAgIGltYWdlUmVjdCA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
SW50UmVjdChpbWFnZVJlY3QpKTsKKyAgICAgICAgICAgIGltYWdlUmVjdCA9IG1fZWZmZWN0LmRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoSW50UmVjdChpbWFnZVJlY3QpKTsKICAgICAgICAgICAg
IGNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBpbWFnZVJlY3QubG9jYXRpb24o
KSk7CiAgICAgICAgIH0KICAgICApOwpAQCAtMTA0LDYgKzExNSwxMSBAQCBib29sIEZFSW1hZ2U6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorYm9vbCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZFSW1hZ2VTb2Z0d2FyZUFwcGxpZXIoKnRoaXMp
LmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBUZXh0U3RyZWFtJiBGRUltYWdl
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5
cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVJbWFn
ZSI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdl
LmgKaW5kZXggZGE3ZTQ3YmQxOGY1NDRhMmU1MjM3NzFkMjM5MjdkNzIyYTk5YWI1Yy4uMzc1NTdh
OTZkY2FiZTBmODAwMjViMDgwYWU3MTcyNzMyYzJhMmE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaApAQCAtNDEsNiArNDEsOSBAQCBw
dWJsaWM6CiAgICAgU291cmNlSW1hZ2UmIHNvdXJjZUltYWdlKCkgeyByZXR1cm4gbV9zb3VyY2VJ
bWFnZTsgfQogICAgIHZvaWQgc2V0SW1hZ2VTb3VyY2UoU291cmNlSW1hZ2UmJiBzb3VyY2VJbWFn
ZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92ZShzb3VyY2VJbWFnZSk7IH0KIAorICAgIEZsb2F0
UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUltYWdlUmVjdDsg
fQorICAgIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RS
YXRpbygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlc2VydmVBc3BlY3RSYXRpbzsgfQorCiBwcml2YXRl
OgogICAgIEZFSW1hZ2UoU291cmNlSW1hZ2UmJiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFn
ZVJlY3QsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445048</attachid>
            <date>2021-11-23 14:02:16 -0800</date>
            <delta_ts>2021-11-23 15:38:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232832-20211123140215.patch</filename>
            <type>text/plain</type>
            <size>216222</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTA4NDZjNzZjOTc5MGVk
ZWIyZGRlYmZlZGU0OGI4NTM0ZTk1YWYyYi4uMGQyZWQ5NWNmOWIyNmU3NGVkYTViZmJmN2Y5MWIy
MDExMDAyMTE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0NyBAQAorMjAyMS0xMS0yMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1vdmUgdGhlIHNvZnR3YXJlIEZpbHRlckVmZmVjdCBmdW5jdGlvbnMgdG8gc2VwYXJhdGUgYXBw
bGllciBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzI4MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHN0ZXAgaXMgcmVxdWlyZWQgdG8gbW92ZSB0aGUgRmlsdGVyRWZmZWN0IHNvZnR3
YXJlIGNvZGUgdG8gc2VwYXJhdGUKKyAgICAgICAgZmlsZXMuIFNpbmNlIHRoZSBGaWx0ZXJFZmZl
Y3QgY2FuIGJlIGFwcGxpZWQgd2l0aCB0aGUgYWNjZWxlcmF0ZWQgQ29yZUltYWdlCisgICAgICAg
IG9yIHRoZSB1bmFjY2VsZXJhdGVkIHNvZnR3YXJlIG1ldGhvZHMsIGl0IG1ha2Ugc2Vuc2UgdG8g
cmVtb3ZlIHRoZSBzb2Z0d2FyZQorICAgICAgICBjb2RlIGZyb20gdGhlIEZpbHRlckVmZmVjdCBj
bGFzc2VzLgorCisgICAgICAgIFRoZSBwbGFuIGlzIHRvIGhhdmUgdGhlIHNvZnR3YXJlIGNvZGUg
aW4gc2VwYXJhdGUgZmlsZXMuIEVhY2ggRmlsdGVyRWZmZWN0CisgICAgICAgIHdpbGwgYmUgYXNr
ZWQgdG8gY3JlYXRlIGFuIGFwcGxpZXIgd2hpY2ggY2FuIGJlIFNvZnR3YXJlQXBwbGllciBvcgor
ICAgICAgICBDb3JlSW1hZ2VBcHBsaWVyLiBUaGlzIGFwcGxpZXIgd2lsbCBiZSBnaXZlbiB0byBG
aWx0ZXJFZmZlY3Q6OmFwcGx5KCkKKyAgICAgICAgd2hpY2ggd2lsbCBwYXNzIHRoZSBpbnB1dCBp
bWFnZXMgdG8gdGhlIGFwcGx5KCkgbWV0aG9kIG9mIHRoZSBhcHBsaWVyIHRvCisgICAgICAgIGdl
dCB0aGUgcmVzdWx0IGltYWdlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExp
Z2h0U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3RhbnRMaWdodFNvdXJjZTo6aW5p
dFBhaW50aW5nRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXN0YW50TGlnaHRTb3Vy
Y2U6OmluaXRQYWludGluZ0RhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmRTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlU2F0dXJhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6
OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6Om1hdHJpeCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0
ZUFuZEh1ZVJvdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyOjpsdW1pbmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxh
dGZvcm1VbmFjY2VsZXJhdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNv
cmU6Om1hdHJpeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1ZVJv
dGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsdW1pbmFuY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVyYXRlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjplZmZlY3RUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKTog
RGVsZXRlZC4KKyAgICAgICAgTW92ZSBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoKSBhbmQg
Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cygpIGZyb20KKyAgICAgICAgdGhlIGhlYWRlciBm
aWxlIHRvIHRoZSBzb3VyY2UgZmlsZS4gTW92ZSBjaG9vc2luZyB0aGUgY2FsY3VsYXRpb24gbW9k
ZSBmb3IKKyAgICAgICAgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCBmcm9tIGVmZmVjdEFwcGx5
QWNjZWxlcmF0ZWQoKSB0byBhcHBseVBsYXRmb3JtKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUlkZW50aXR5VGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGll
cjo6Y29tcHV0ZVRhYnVsYXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlRGlzY3JldGVUYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlTGluZWFy
VGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6Y29tcHV0ZUdhbW1hVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUxvb2t1cFRhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxp
bmVhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVHYW1tYVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAg
ICBJbnN0ZWFkIG9mIGNhbGxpbmcgY29tcHV0ZUxvb2t1cFRhYmxlcygpIHRvIGluaXRpYWxpemUg
dGhlIGZvdXIgbG9va3VwCisgICAgICAgIHRhYmxlcywgY2FsbCBjb21wdXRlTG9va3VwVGFibGUo
KSBmb3VyIHRpbWVzOiBvbmUgZm9yIGVhY2ggY29sb3IgY2hhbm5lbC4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjbGFtcEJ5dGUpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVBcml0aG1ldGljUGl4
ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21w
dXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBv
c2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFyaXRobWV0aWMpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5QXJpdGhtZXRpYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlOb25Bcml0
aG1ldGljKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjph
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wQnl0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKTogRGVsZXRlZC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpjbGFt
cFJHQkFWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVB
cHBsaWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpnZXRQaXhlbFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldEludGVyaW9yUGl4ZWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldE91
dGVyUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2
ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNs
YW1wUkdCQVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNldERlc3RpbmF0aW9u
UGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmZh
c3RTZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpnZXRQaXhlbFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
Lmg6CisgICAgICAgIEFkZCB0aGUgbWVtYmVycyBvZiBGRUNvbnZvbHZlTWF0cml4IHRvIFBhaW50
aW5nRGF0YS4gUmVtb3ZlIHRoZSB0ZW1wbGF0ZQorICAgICAgICBmdW5jdGlvbnMgYW5kIHRoZSBN
U1ZDIHdhcm5pbmcuIEp1c3QgaWdub3JlIHRoZSBhbHBoYSBjaGFubmVsIGlmIAorICAgICAgICBw
cmVzZXJ2ZUFscGhhVmFsdWVzIGlzIHRydWUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlm
ZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6CisgICAgICAgIE5vIG5lZWQgdG8gcGFz
cyBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcgd2hlbiBjcmVhdGluZyBGRURpZmZ1c2VMaWdo
dGluZy4KKyAgICAgICAgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZyBpcyBh
bHJlYWR5IHBhc3NlZCB0byBGRUxpZ2h0aW5nLiAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OmJ5dGVPZmZzZXRPZlBpeGVsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjp4Q2hhbm5lbElu
ZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVB
cHBsaWVyOjp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxh
Y2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGll
cik6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6
YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpieXRlT2Zmc2V0T2ZQaXhlbCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5oOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsSW5kZXgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnlD
aGFubmVsSW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRv
d1NvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kU29mdHdhcmVBcHBs
aWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2xh
bXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2Fs
Y3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdh
dXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6a2VybmVsUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBbHBoYU9ubHkpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXIp
OgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJs
dXJBY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJHZW5lcmljKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyV29ya2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKGdhdXNzaWFuS2VybmVsRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Omtlcm5lbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJv
eEJsdXJBbHBoYU9ubHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpzdGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5C
bHVyLmg6CisgICAgICAgIEFkZCB0aGUgdHdvIG1lbWJlcnMgJ2lzQWxwaGFJbWFnZScgYW5kICdl
ZGdlTW9kZScgdG8gQXBwbHlQYXJhbWV0ZXJzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6QWxwaGFXaW5kb3c6OnRvcExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmJvdHRvbUxl
ZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6
QWxwaGFXaW5kb3c6OnRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6Y2VudGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93Ojpib3R0b20gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5k
b3c6OnNldFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdT
b2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNldFRvcFJpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93
OjpzZXRSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNoaWZ0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzaGlmdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6
OnRvcExlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3
YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSaWdo
dE5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBs
aWVyOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5v
cm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5v
cm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9y
bWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6
OnNldFBpeGVsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6c2V0UGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
R2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRv
cExlZnROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6Omxl
ZnRDb2x1bW5Ob3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFs
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5n
RGF0YTo6Ym90dG9tTGVmdE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJp
Z2h0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldFBpeGVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldFBp
eGVsSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxh
dGZvcm1BcHBseUdlbmVyaWNQYWludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpsaWdodGluZ0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnNwZWN1bGFyRXhwb25lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcExlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OnRvcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBo
YVdpbmRvdzo6Y2VudGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmc6OkFscGhhV2luZG93Ojpib3R0b20gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRv
cFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2lu
ZG93OjpzZXRSaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpB
bHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNoaWZ0Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzaGlmdCk6IERlbGV0ZWQuCisgICAgICAg
IE1vdmUgZmlsaW5nIHRoZSBzdHJ1Y3R1cmUgTGlnaHRpbmdEYXRhIGZyb20gRkVMaWdodGluZzo6
ZHJhd0xpZ2h0aW5nKCkKKyAgICAgICAgdG8gRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBw
bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6cGl4ZWxBcnJheUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWFrZVBpeGVsVmFs
dWVGcm9tQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllcjo6bWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWluT3JNYXgpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpjb2x1bW5FeHRyZW11
bSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Omtlcm5l
bEV4dHJlbXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
cjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5
U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtl
Q29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbHVtbkV4
dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omtlcm5lbEV4dHJlbXVtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVy
aWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxh
dGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oOgorICAgICAgICBSZW1vdmUgdGhlIHRlbXBsYXRl
IGZ1bmN0aW9ucyBhbmQganVzdCB0aGUgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBhcyBhbgorICAg
ICAgICBhcmd1bWVudCB0byB0aGVzZSBmdW5jdGlvbnMuICBSZXBsYWNlIHBsYXRmb3JtQXBwbHlE
ZWdlbmVyYXRlKCkgd2l0aCBhCisgICAgICAgIGNhbGwgdG8gaXNEZWdlbmVyYXRlKCkgYW5kIG1v
dmUgdGhlIGNhbGwgdG8gY29weVByZW11bHRpcGxpZWRSZXN1bHQoKSB0byAKKyAgICAgICAgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0U29mdHdhcmVBcHBs
aWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxh
ckxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVT
cGVjdWxhckxpZ2h0aW5nKToKKyAgICAgICAgTm8gbmVlZCB0byBwYXNzIEZFTGlnaHRpbmc6OlNw
ZWN1bGFyTGlnaHRpbmcgd2hlbiBjcmVhdGluZyBGRURpZmZ1c2VMaWdodGluZy4KKyAgICAgICAg
RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcgaXMgYWxyZWFkeSBwYXNzZWQg
dG8gRkVMaWdodGluZy4gCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6UGFpbnRpbmdEYXRh
OjpyYW5kb20pOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
OjpzbW9vdGhDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFw
cGxpZXI6OmxpbmVhckludGVycG9sYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxl
bmNlU29mdHdhcmVBcHBsaWVyOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZVN0aXRjaGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6Om5vaXNlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjp0b0ludEJhc2VkQ29sb3JD
b21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGll
cjo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1X
b3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0Rh
dGE6OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVy
YnVsZW5jZTo6ZmlsbFJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgTW92ZSB0aGUgdGhyZWFkaW5nIGNvZGUgZnJvbSBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSB0
byBhIG5ldyBmdW5jdGlvbgorICAgICAgICBjYWxsZWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBs
aWVyOjphcHBseVBsYXRmb3JtKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpub3Jt
YWxpemVkRmxvYXRzKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSBub3JtYWxpemVkRmxvYXRzKCkg
ZnJvbSBGaWx0ZXJFZmZlY3QgdG8gRkVDb2xvck1hdHJpeC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBwbGllci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjo6RmlsdGVyRWZmZWN0Q29uY3Jl
dGVBcHBsaWVyKToKKyAgICAgICAgSW50cm9kdWNlIHRoaXMgY2xhc3Mgd2hpY2ggd2lsbCBiZSB0
aGUgYmFzZSBjbGFzcyBvZiBhbGwgdGhlIHNvZnR3YXJlIGFuZAorICAgICAgICB0aGUgQ29yZUlt
YWdlIEZpbHRlckVmZmVjdCBhcHBsaWVycy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvTGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9pbnRMaWdodFNv
dXJjZTo6aW5pdFBhaW50aW5nRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQb2ludExp
Z2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaDoKKyAgICAgICAgTWFrZSBpbml0
UGFpbnRpbmdEYXRhKCkgYmUgYSBjb25zdGFudCBmdW5jdGlvbi4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaDoKKyAgICAgICAg
TWFrZSBpbml0UGFpbnRpbmdEYXRhKCkgYmUgYSBjb25zdGFudCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVJbWFnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVJ
bWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmg6CisKIDIwMjEtMTEtMjMgIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1z
dGVhZEBzb255LmNvbT4KIAogICAgICAgICBOb24tdW5pZmllZCBidWlsZCBmaXhlcywgbWlkIE5v
dmVtYmVyIDIwMjEgZWRpdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDdiNGQyMWRhOWIyZjRkODU1YTgxM2NhOWE5MTNlNWIy
ODc0MDE2ZjAuLjI4NmM5MzQ5YjEyMjE5NzljODk5NjlkMWIxYjA5NjIxNDAwMDNjMGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTEwODk2LDYgKzEwODk2LDcgQEAKIAkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhh
UHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4
ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQTlG
Mjc0QzVDQzcwMEUyQTg4RSAvKiBGaWx0ZXJFZmZlY3RBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZpbHRlckVmZmVjdEFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJC
QUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1h
Z2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
QnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNjIz
RTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNTk0Miw2ICsyNTk0Myw3IEBACiAJCQkJODQ1RTcyRjcwRkQyNjFFRTAw
QTg3RDc5IC8qIEZpbHRlci5oICovLAogCQkJCTA4QzkyNTE3MEZDQzdDNEEwMDQ4MERFQyAvKiBG
aWx0ZXJFZmZlY3QuY3BwICovLAogCQkJCTA4QzkyNTE4MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0
ZXJFZmZlY3QuaCAqLywKKwkJCQk3MkExM0E5RjI3NEM1Q0M3MDBFMkE4OEUgLyogRmlsdGVyRWZm
ZWN0QXBwbGllci5oICovLAogCQkJCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJF
ZmZlY3RSZW5kZXJlci5jcHAgKi8sCiAJCQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZp
bHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCiAJCQkJNzIxNEI5QjcyNzQ0NThGQTAwM0JFNkRGIC8q
IEZpbHRlckVmZmVjdFZlY3Rvci5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwCmlu
ZGV4IGU1ZmIxZmY2NjVkM2ViMDdmNDhlZTFkMDJiYmZmY2M2YjA0NDFmODkuLjg5NDdhOTg2MGU0
NmIxMWM1OGUyNzc1MzYyNTZmZGI5ZDUxZDE1NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJj
ZS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIERp
c3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgRGlzdGFudExpZ2h0U291cmNlOjppbml0
UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhKSBjb25zdAogewogICAgIGZsb2F0IGF6aW11dGggPSBkZWcycmFkKG1fYXppbXV0aCk7CiAg
ICAgZmxvYXQgZWxldmF0aW9uID0gZGVnMnJhZChtX2VsZXZhdGlvbik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJj
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGln
aHRTb3VyY2UuaAppbmRleCBjMWUzMGVkZTc1OTgzNzI4YTYzMmJjY2ZmYjA5OTczYTNhNGU3MmZk
Li4zMDE5MmIwZWYwY2QxYmY0MDNkNDIzMzhjZTQwODc3MThkNzUxNzA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJj
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFu
dExpZ2h0U291cmNlLmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0QXpp
bXV0aChmbG9hdCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRFbGV2YXRpb24oZmxvYXQpIG92ZXJy
aWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBh
aW50aW5nRGF0YSYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBG
aWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBjb25zdCBvdmVycmlkZTsKICAgICBDb21wdXRl
ZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRh
JiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVCbGVuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQmxlbmQuY3BwCmluZGV4IGM5MWFhM2Q2OGQ1ZGZmNTMzOTFmZTBkN2Q5OGI3OWE2YjZkNTI4
NmQuLmQyY2FiYmE5Zjg2YWIzMzIwZWMyM2UwNWQ3ZmE1N2FhM2E0ZDQyYjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApA
QCAtMjYsMTAgKzI2LDEwIEBACiAjaW5jbHVkZSAiRkVCbGVuZC5oIgogCiAjaW5jbHVkZSAiRkVC
bGVuZE5FT04uaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXku
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTUzLDEzICs1MywyMyBAQCBib29sIEZFQmxlbmQ6OnNldEJsZW5kTW9kZShCbGVuZE1v
ZGUgbW9kZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNz
IEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmls
ZXMuCitjbGFzcyBGRUJsZW5kU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENv
bmNyZXRlQXBwbGllcjxGRUJsZW5kPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENv
bmNyZXRlQXBwbGllcjxGRUJsZW5kPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7
CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3Rv
ciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKK307CisKICNpZiAhSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQotYm9vbCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
JikKK2Jvb2wgRkVCbGVuZFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZl
Y3QoMSk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKyAg
ICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0c1sxXS5nZXQoKTsKIAotICAgIGF1dG8g
cmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gcmVzdWx0SW1hZ2Ug
PSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNjksMTIgKzc5LDE3IEBAIGJvb2wgRkVCbGVuZDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5j
b250ZXh0KCk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVy
MiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsK
LSAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VC
dWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3Zlciwg
bV9tb2RlIH0pOworICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
cjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSk7CisgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVy
LCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3Bl
cmF0b3I6OlNvdXJjZU92ZXIsIG1fZWZmZWN0LmJsZW5kTW9kZSgpIH0pOwogICAgIHJldHVybiB0
cnVlOwogfQogI2VuZGlmCiAKK2Jvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRUJsZW5kU29mdHdhcmVBcHBsaWVy
KCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogVGV4dFN0cmVhbSYg
RkVCbGVuZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAi
W2ZlQmxlbmQiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggNWE5MWM0ZWNjNDRmYzc3YWJmZmQ0
OWQ3ZDE2OTdkYzE0ZjkyYjY3NC4uMTAyMzdiYTlkY2MyNDFmZGUxNGYzMTIzZGM2NDg2M2IyMjZi
ZGYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgogCisjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKQEAgLTYzLDMyICs2NCwx
MDMgQEAgYm9vbCBGRUNvbG9yTWF0cml4OjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiAm
dmFsdWVzKQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBWZWN0
b3I8ZmxvYXQ+JiB2YWx1ZXMpCit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRl
Q29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCit7CisgICAgY29tcG9u
ZW50c1swXSA9ICgwLjIxMyArIDAuNzg3ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbMV0gPSAo
MC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4w
NzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUp
OworICAgIGNvbXBvbmVudHNbNF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKKyAgICBjb21w
b25lbnRzWzVdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s2XSA9
ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAw
LjcxNSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1
ZSk7Cit9CisKK3ZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50
cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCit7CisgICAgZmxvYXQgY29zSHVlID0g
Y29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7CisgICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVl
ICogcGlGbG9hdCAvIDE4MCk7CisgICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICog
MC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKKyAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NI
dWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAt
IGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7CisgICAgY29tcG9uZW50c1szXSA9IDAu
MjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsKKyAgICBjb21wb25lbnRzWzRd
ID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQwOworICAgIGNvbXBvbmVu
dHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7CisgICAgY29t
cG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKKyAg
ICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1
OworICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICog
MC4wNzI7Cit9CisKK1ZlY3RvcjxmbG9hdD4gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0
cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgVmVjdG9yPGZsb2F0PiBub3Jt
YWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dmFsdWVzLnNpemUoKTsgKytpKQorICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFs
aXplZEZsb2F0KHZhbHVlc1tpXSk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Cit9CisK
Ky8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyIHRv
IHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVDb2xvck1hdHJpeFNv
ZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb2xv
ck1hdHJpeD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8
RkVDb2xvck1hdHJpeD47CisKK3B1YmxpYzoKKyAgICBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBs
aWVyKEZFQ29sb3JNYXRyaXgmKTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIGlubGluZSB2b2lkIG1hdHJpeChmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0
JiBibHVlLCBmbG9hdCYgYWxwaGEpIGNvbnN0OworICAgIGlubGluZSB2b2lkIHNhdHVyYXRlQW5k
SHVlUm90YXRlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUpIGNvbnN0Owor
ICAgIGlubGluZSB2b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0
JiBibHVlLCBmbG9hdCYgYWxwaGEpIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAg
dm9pZCBhcHBseVBsYXRmb3JtQWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImKSBjb25zdDsKKyNlbmRp
ZgorICAgIHZvaWQgYXBwbHlQbGF0Zm9ybVVuYWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImKSBjb25z
dDsKKworICAgIHZvaWQgYXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYpIGNvbnN0OworCisgICAg
ZmxvYXQgbV9jb21wb25lbnRzWzldOworfTsKKworRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGll
cjo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcihGRUNvbG9yTWF0cml4JiBlZmZlY3QpCisg
ICAgOiBCYXNlKGVmZmVjdCkKK3sKKyAgICBpZiAobV9lZmZlY3QudHlwZSgpID09IEZFQ09MT1JN
QVRSSVhfVFlQRV9TQVRVUkFURSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0
dXJhdGVDb21wb25lbnRzKG1fY29tcG9uZW50cywgbV9lZmZlY3QudmFsdWVzKClbMF0pOworICAg
IGVsc2UgaWYgKG1fZWZmZWN0LnR5cGUoKSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRF
KQorICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKG1f
Y29tcG9uZW50cywgbV9lZmZlY3QudmFsdWVzKClbMF0pOworfQorCitpbmxpbmUgdm9pZCBGRUNv
bG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjptYXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVu
LCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKSBjb25zdAogewogICAgIGZsb2F0IHIgPSByZWQ7
CiAgICAgZmxvYXQgZyA9IGdyZWVuOwogICAgIGZsb2F0IGIgPSBibHVlOwogICAgIGZsb2F0IGEg
PSBhbHBoYTsKIAotICAgIHJlZCAgICAgPSB2YWx1ZXNbIDBdICogciArIHZhbHVlc1sgMV0gKiBn
ICsgdmFsdWVzWyAyXSAqIGIgKyB2YWx1ZXNbIDNdICogYSArIHZhbHVlc1sgNF0gKiAyNTU7Ci0g
ICAgZ3JlZW4gICA9IHZhbHVlc1sgNV0gKiByICsgdmFsdWVzWyA2XSAqIGcgKyB2YWx1ZXMgWzdd
ICogYiArIHZhbHVlc1sgOF0gKiBhICsgdmFsdWVzWyA5XSAqIDI1NTsKLSAgICBibHVlICAgID0g
dmFsdWVzWzEwXSAqIHIgKyB2YWx1ZXNbMTFdICogZyArIHZhbHVlc1sxMl0gKiBiICsgdmFsdWVz
WzEzXSAqIGEgKyB2YWx1ZXNbMTRdICogMjU1OwotICAgIGFscGhhICAgPSB2YWx1ZXNbMTVdICog
ciArIHZhbHVlc1sxNl0gKiBnICsgdmFsdWVzWzE3XSAqIGIgKyB2YWx1ZXNbMThdICogYSArIHZh
bHVlc1sxOV0gKiAyNTU7CisgICAgY29uc3QgYXV0byYgdmFsdWVzID0gbV9lZmZlY3QudmFsdWVz
KCk7CisKKyAgICByZWQgICA9IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2YWx1
ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKKyAgICBncmVl
biA9IHZhbHVlc1sgNV0gKiByICsgdmFsdWVzWyA2XSAqIGcgKyB2YWx1ZXNbIDddICogYiArIHZh
bHVlc1sgOF0gKiBhICsgdmFsdWVzWyA5XSAqIDI1NTsKKyAgICBibHVlICA9IHZhbHVlc1sxMF0g
KiByICsgdmFsdWVzWzExXSAqIGcgKyB2YWx1ZXNbMTJdICogYiArIHZhbHVlc1sxM10gKiBhICsg
dmFsdWVzWzE0XSAqIDI1NTsKKyAgICBhbHBoYSA9IHZhbHVlc1sxNV0gKiByICsgdmFsdWVzWzE2
XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVzWzE5XSAqIDI1
NTsKIH0KIAotaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxv
YXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxvYXQqIGNvbXBvbmVudHMpCitpbmxpbmUg
dm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShm
bG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlKSBjb25zdAogewogICAgIGZsb2F0
IHIgPSByZWQ7CiAgICAgZmxvYXQgZyA9IGdyZWVuOwogICAgIGZsb2F0IGIgPSBibHVlOwogCi0g
ICAgcmVkICAgICA9IHIgKiBjb21wb25lbnRzWzBdICsgZyAqIGNvbXBvbmVudHNbMV0gKyBiICog
Y29tcG9uZW50c1syXTsKLSAgICBncmVlbiAgID0gciAqIGNvbXBvbmVudHNbM10gKyBnICogY29t
cG9uZW50c1s0XSArIGIgKiBjb21wb25lbnRzWzVdOwotICAgIGJsdWUgICAgPSByICogY29tcG9u
ZW50c1s2XSArIGcgKiBjb21wb25lbnRzWzddICsgYiAqIGNvbXBvbmVudHNbOF07CisgICAgcmVk
ICAgICA9IHIgKiBtX2NvbXBvbmVudHNbMF0gKyBnICogbV9jb21wb25lbnRzWzFdICsgYiAqIG1f
Y29tcG9uZW50c1syXTsKKyAgICBncmVlbiAgID0gciAqIG1fY29tcG9uZW50c1szXSArIGcgKiBt
X2NvbXBvbmVudHNbNF0gKyBiICogbV9jb21wb25lbnRzWzVdOworICAgIGJsdWUgICAgPSByICog
bV9jb21wb25lbnRzWzZdICsgZyAqIG1fY29tcG9uZW50c1s3XSArIGIgKiBtX2NvbXBvbmVudHNb
OF07CiB9CiAKIC8vIEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWluYW5jZSguLi4pIGZ1
bmN0aW9uIGluIENvbG9yTHVtaW5hbmNlLmguCi1pbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKQoraW5saW5lIHZv
aWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6bHVtaW5hbmNlKGZsb2F0JiByZWQsIGZs
b2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkgY29uc3QKIHsKICAgICBhbHBo
YSA9IDAuMjEyNSAqIHJlZCArIDAuNzE1NCAqIGdyZWVuICsgMC4wNzIxICogYmx1ZTsKICAgICBy
ZWQgPSAwOwpAQCAtOTcsMTggKzE2OSwxMyBAQCBpbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKQogfQogCiAjaWYg
VVNFKEFDQ0VMRVJBVEUpCi10ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KLWJv
b2wgZWZmZWN0QXBwbHlBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwg
Y29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBjb21wb25lbnRzWzldLCBJbnRTaXpl
IGJ1ZmZlclNpemUpCit2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxh
dGZvcm1BY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNvbnN0CiB7CisgICAg
YXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRhdGEoKTsKKyAgICBhdXRvIGJ1ZmZlclNp
emUgPSBwaXhlbEJ1ZmZlci5zaXplKCk7CisKICAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgo
KSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOwogICAgIAotICAgIGlmIChmaWx0ZXJUeXBlID09
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpIHsKLSAgICAgICAgLy8gdkltYWdlTWF0cml4TXVs
dGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxh
c3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKLSAgICAgICAgLy8gaXMg
bm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCi0gICAgICAgIGlmICh2YWx1
ZXNbNF0gIT0gMCB8fCB2YWx1ZXNbOV0gIT0gMCB8fCB2YWx1ZXNbMTRdICE9IDAgfHwgdmFsdWVz
WzE5XSAhPSAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIGNvbnN0
IGludDMyX3QgZGl2aXNvciA9IDI1NjsKICAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS5k
YXRhKCk7CiAKQEAgLTEyNCw4ICsxOTEsMTMgQEAgYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVk
KFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JgogICAg
IGRlc3Qucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OwogICAgIGRlc3QuZGF0YSA9
IGRhdGE7CiAKLSAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKKyAgICBzd2l0Y2ggKG1fZWZmZWN0
LnR5cGUoKSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAg
IGJyZWFrOworCiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7CisgICAgICAg
IGNvbnN0IGF1dG8mIHZhbHVlcyA9IG1fZWZmZWN0LnZhbHVlcygpOworCiAgICAgICAgIGNvbnN0
IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikpLAogICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCkBAIC0xNTQsMTkgKzIy
NiwxOSBAQCBib29sIGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBp
eGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mCiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZ
UEVfU0FUVVJBVEU6CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7CiAg
ICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzBdICogZGl2aXNvcikpLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbM10gKiBkaXZpc29y
KSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s2
XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZiht
X2NvbXBvbmVudHNbMF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYobV9jb21wb25lbnRzWzNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s2XSAqIGRpdmlzb3IpKSwKICAg
ICAgICAgICAgIDAsCiAKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihj
b21wb25lbnRzWzFdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKGNvbXBvbmVudHNbNF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s3XSAqIGRpdmlzb3IpKSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbMV0gKiBkaXZpc29y
KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21wb25lbnRz
WzRdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KG1fY29tcG9uZW50c1s3XSAqIGRpdmlzb3IpKSwKICAgICAgICAgICAgIDAsCiAKLSAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzJdICogZGl2aXNvcikp
LAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbNV0g
KiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29t
cG9uZW50c1s4XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZihtX2NvbXBvbmVudHNbMl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21wb25lbnRzWzVdICogZGl2aXNvcikpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s4XSAqIGRpdmlz
b3IpKSwKICAgICAgICAgICAgIDAsCiAKICAgICAgICAgICAgIDAsCkBAIC0yMDMsMzggKzI3NSwy
NSBAQCBib29sIGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVs
QXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKIAotdGVtcGxhdGU8Q29sb3JNYXRy
aXhUeXBlIGZpbHRlclR5cGU+Ci12b2lkIGVmZmVjdFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBp
eGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXpl
KQordm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtVW5hY2Nl
bGVyYXRlZChQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNvbnN0CiB7Ci0gICAgZmxvYXQgY29t
cG9uZW50c1s5XTsKLQotICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9T
QVRVUkFURSkKLSAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25l
bnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0gICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBG
RUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxj
dWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0KKyAgICBh
dXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgpOwogICAgIHVuc2lnbmVkIHBpeGVs
QXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOwogCi0jaWYgVVNFKEFDQ0VMRVJBVEUp
Ci0gICAgaWYgKGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQ8ZmlsdGVyVHlwZT4ocGl4ZWxBcnJheSwg
dmFsdWVzLCBjb21wb25lbnRzLCBidWZmZXJTaXplKSkKLSAgICAgICAgcmV0dXJuOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oYnVmZmVyU2l6ZSk7Ci0jZW5kaWYKKyAgICBzd2l0Y2ggKG1fZWZm
ZWN0LnR5cGUoKSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAg
ICAgIGJyZWFrOwogCi0gICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7CiAgICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfTUFUUklYOgogICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNl
dCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNl
dCArPSA0KSB7CiAgICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0KTsKICAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCArIDEpOwogICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKICAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgbWF0cml4KHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCB2YWx1ZXMpOworICAgICAgICAgICAgbWF0cml4KHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0
ZU9mZnNldCwgcmVkKTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNl
dCArIDEsIGdyZWVuKTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNl
dCArIDIsIGJsdWUpOwpAQCAtMjQ5LDcgKzMwOCw3IEBAIHZvaWQgZWZmZWN0VHlwZShVaW50OENs
YW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRT
CiAgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQgKyAxKTsKICAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0ICsgMik7CiAgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRl
KHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBvbmVudHMpOworICAgICAgICAgICAgc2F0dXJhdGVBbmRI
dWVSb3RhdGUocmVkLCBncmVlbiwgYmx1ZSk7CiAgICAgICAgICAgICBwaXhlbEFycmF5LnNldChw
aXhlbEJ5dGVPZmZzZXQsIHJlZCk7CiAgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5
dGVPZmZzZXQgKyAxLCBncmVlbik7CiAgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5
dGVPZmZzZXQgKyAyLCBibHVlKTsKQEAgLTI3Myw1MSArMzMyLDUyIEBAIHZvaWQgZWZmZWN0VHlw
ZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFs
dWVzLCBJbnRTCiAgICAgfQogfQogCi1ib29sIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImKQordm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKK3sKKyNpZiBV
U0UoQUNDRUxFUkFURSkKKyAgICBjb25zdCBhdXRvJiB2YWx1ZXMgPSBtX2VmZmVjdC52YWx1ZXMo
KTsKKworICAgIC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1h
dHJpeCwgaWYgYW55IHZhbHVlIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xvck1hdHJp
eCA1eDQgbWF0cml4CisgICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdl
IGNvZGUuCisgICAgaWYgKG1fZWZmZWN0LnR5cGUoKSAhPSBGRUNPTE9STUFUUklYX1RZUEVfTUFU
UklYIHx8ICghdmFsdWVzWzRdICYmICF2YWx1ZXNbOV0gJiYgIXZhbHVlc1sxNF0gJiYgIXZhbHVl
c1sxOV0pKSB7CisgICAgICAgIGFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChwaXhlbEJ1ZmZlcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBhcHBseVBsYXRmb3JtVW5hY2Nl
bGVyYXRlZChwaXhlbEJ1ZmZlcik7Cit9CisKK2Jvb2wgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBw
bGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1
dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAg
IGF1dG8gaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CiAKLSAgICBhdXRvIHJlc3VsdEltYWdl
ID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3Qu
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7
CiAgICAgaWYgKGluQnVmZmVyKQotICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJ
bWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1h
Z2VCdWZmZXIoKmluQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQg
eyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpS
R0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0
IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
UkdCQTgsIG1fZWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSB9OwogICAgIEludFJlY3QgaW1hZ2VS
ZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKTsKICAg
ICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwg
aW1hZ2VSZWN0KTsKICAgICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICBhdXRv
IHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXItPnNpemUoKTsKLQotICAgIFZlY3Rv
cjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7Ci0gICAgCi0gICAg
c3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAg
ICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4ocGl4ZWxBcnJheSwgdmFs
dWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFU
UklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lv
bnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEU6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4ocGl4
ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgIGVm
ZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXks
IHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBzZXRJc0FscGhhSW1hZ2Uo
dHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBpZiAobV9lZmZlY3QudHlwZSgpID09
IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBKQorICAgICAgICBtX2VmZmVjdC5z
ZXRJc0FscGhhSW1hZ2UodHJ1ZSk7CiAKKyAgICBhcHBseVBsYXRmb3JtKCpwaXhlbEJ1ZmZlcik7
CiAgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZFQ29sb3JN
YXRyaXhTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkp
OworfQorCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguaAppbmRleCA0OTdlYjE5NWU0MTc1ZWNkZmQwY2FiMjRjYmNkOWIwZTM5YTdmODA5Li5m
NjlmMGIwMWM5NTA3ZTA1MjZlMGQxNzdlYmJlZjk2OTAwOWNlMWQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
aApAQCAtNDQsOCArNDQsOSBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFs
dWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KICAgICBib29sIHNldFZhbHVlcyhjb25z
dCBWZWN0b3I8ZmxvYXQ+Jik7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlU2F0
dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7Ci0gICAgc3Rh
dGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBv
bmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNv
bXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9p
ZCBjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2
YWx1ZSk7CisgICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBW
ZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpOwogCiBwcml2YXRlOgogICAgIEZFQ29sb3JNYXRyaXgoQ29s
b3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwpAQCAtNTgsMzUgKzU5LDYgQEAgcHJpdmF0
ZToKICAgICBWZWN0b3I8ZmxvYXQ+IG1fdmFsdWVzOwogfTsKIAotaW5saW5lIHZvaWQgRkVDb2xv
ck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBm
bG9hdCB2YWx1ZSkKLXsKLSAgICBjb21wb25lbnRzWzBdID0gKDAuMjEzICsgMC43ODcgKiB2YWx1
ZSk7Ci0gICAgY29tcG9uZW50c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNv
bXBvbmVudHNbMl0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzNd
ID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s0XSA9ICgwLjcxNSAr
IDAuMjg1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbNV0gPSAoMC4wNzIgLSAwLjA3MiAqIHZh
bHVlKTsKLSAgICBjb21wb25lbnRzWzZdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0gICAg
Y29tcG9uZW50c1s3XSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNb
OF0gPSAoMC4wNzIgKyAwLjkyOCAqIHZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQgRkVDb2xvck1h
dHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxv
YXQgdmFsdWUpCi17Ci0gICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAvIDE4
MCk7Ci0gICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAg
Y29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIxMzsK
LSAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAu
NzE1OwotICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2luSHVl
ICogMC45Mjg7Ci0gICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgKyBz
aW5IdWUgKiAwLjE0MzsKLSAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4
NSArIHNpbkh1ZSAqIDAuMTQwOwotICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAq
IDAuMDcyIC0gc2luSHVlICogMC4yODM7Ci0gICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0gY29z
SHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKLSAgICBjb21wb25lbnRzWzddID0gMC43MTUg
LSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVudHNbOF0gPSAw
LjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7Ci19Ci0KLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVD
b2xvck1hdHJpeCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IGNkNDg0NTJk
ZDMxNzUzYmZjYmZlMzNjMzQzODY3Y2UzYzliYTExNmYuLmRhZTE4OWVhOWQ3N2NmNzQ2YWEzNDE2
Y2I4MTZmZWZmMjE0Y2UzYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApAQCAt
MjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29tcG9uZW50
VHJhbnNmZXIuaCIKIAorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUg
IlBpeGVsQnVmZmVyLmgiCkBAIC00NywxOCArNDgsNDEgQEAgRkVDb21wb25lbnRUcmFuc2Zlcjo6
RkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRG
dW4KIHsKIH0KIAotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlUYWJs
ZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKQorLy8gRklY
TUU6IE1vdmUgdGhlIGNsYXNzIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIgdG8g
c2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUNvbXBvbmVudFRyYW5z
ZmVyU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxG
RUNvbXBvbmVudFRyYW5zZmVyPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNy
ZXRlQXBwbGllcjxGRUNvbXBvbmVudFRyYW5zZmVyPjsKKworcHVibGljOgorICAgIHVzaW5nIEJh
c2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVm
ZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB1c2lu
ZyBMb29rdXBUYWJsZSA9IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PjsKKworICAgIHN0YXRpYyB2
b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUoTG9v
a3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgc3RhdGlj
IHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJik7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxlKExv
b2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIHN0YXRp
YyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYpOworCisgICAgc3RhdGljIExvb2t1cFRhYmxlIGNvbXB1dGVMb29rdXBU
YWJsZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisKKyAgICB2b2lkIGFwcGx5
UGxhdGZvcm0oUGl4ZWxCdWZmZXImKSBjb25zdDsKK307CisKK3ZvaWQgRkVDb21wb25lbnRUcmFu
c2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJikKIHsKIH0KIAotdm9pZCBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit2b2lkIEZFQ29t
cG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3Vw
VGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJG
dW5jdGlvbikKIHsKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5z
ZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7CiAgICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNp
emUoKTsKICAgICBpZiAobiA8IDEpCi0gICAgICAgIHJldHVybjsgICAgICAgICAgICAKKyAgICAg
ICAgcmV0dXJuOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgZG91YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAgICAgICAgIAorICAg
ICAgICBkb3VibGUgYyA9IGkgLyAyNTUuMDsKICAgICAgICAgdW5zaWduZWQgayA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihjICogKG4gLSAxKSk7CiAgICAgICAgIGRvdWJsZSB2MSA9IHRhYmxlVmFs
dWVzW2tdOwogICAgICAgICBkb3VibGUgdjIgPSB0YWJsZVZhbHVlc1tzdGQ6Om1pbigoayArIDEp
LCAobiAtIDEpKV07CkBAIC02OCw3ICs5Miw3IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6
Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lCiAg
ICAgfQogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxl
KExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRy
YW5zZmVyRnVuY3Rpb24pCit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6
OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCiB7CiAgICAgY29uc3QgVmVjdG9y
PGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVzOwogICAg
IHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7CkBAIC04Myw3ICsxMDcsNyBAQCB2b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2
YWx1ZXMsIGNvbnN0IENvbXBvbgogICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVy
Ojpjb21wdXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3ZvaWQgRkVDb21wb25lbnRUcmFu
c2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1
ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewogICAg
ICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUgKiB0cmFu
c2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKQEAgLTkyLDcgKzExNiw3IEBAIHZvaWQgRkVDb21wb25l
bnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0
IENvbXBvbmVuCiAgICAgfQogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVH
YW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2Fy
ZUFwcGxpZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCiB7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICBkb3VibGUg
ZXhwb25lbnQgPSB0cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlr
ZSBwYXNzaW5nIGEgZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRv
IGRvdWJsZQpAQCAtMTAyLDYxICsxMjYsNjYgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpj
b21wdXRlR2FtbWFUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnQKICAg
ICB9CiB9CiAKLWJvb2wgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpCitGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpMb29r
dXBUYWJsZSBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlTG9va3Vw
VGFibGUoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZnVuY3Rpb24pCiB7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIExvb2t1cFRhYmxlIHRhYmxl
OwogCi0gICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsKLSAgICBpZiAoIWRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdGFibGUuc2l6ZSgpOyArK2kpCisgICAgICAgIHRhYmxlW2ldID0gaTsK
KworICAgIHVzaW5nIFRyYW5zZmVyVHlwZSA9IHZvaWQgKCopKExvb2t1cFRhYmxlJiwgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIFRyYW5zZmVyVHlwZSBjYWxsRWZmZWN0
W10gPSB7CisgICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJB
TlNGRVJfVFlQRV9VTktOT1dOCisgICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLCAgIC8vIEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9JREVOVElUWQorICAgICAgICBjb21wdXRlVGFidWxhclRh
YmxlLCAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEUKKyAgICAgICAgY29tcHV0
ZURpc2NyZXRlVGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0RJU0NSRVRFCisg
ICAgICAgIGNvbXB1dGVMaW5lYXJUYWJsZSwgICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQ
RV9MSU5FQVIKKyAgICAgICAgY29tcHV0ZUdhbW1hVGFibGUgICAgICAgLy8gRkVDT01QT05FTlRU
UkFOU0ZFUl9UWVBFX0dBTU1BCisgICAgfTsKIAotICAgIExvb2t1cFRhYmxlIHJlZFRhYmxlOwot
ICAgIExvb2t1cFRhYmxlIGdyZWVuVGFibGU7Ci0gICAgTG9va3VwVGFibGUgYmx1ZVRhYmxlOwot
ICAgIExvb2t1cFRhYmxlIGFscGhhVGFibGU7Ci0gICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRU
YWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKKyAgICBSRUxFQVNFX0FT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4oZnVuY3Rp
b24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKKyAgICBjYWxsRWZmZWN0
W2Z1bmN0aW9uLnR5cGVdKHRhYmxlLCBmdW5jdGlvbik7CiAKLSAgICBJbnRSZWN0IGRyYXdpbmdS
ZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKLSAgICBpbi0+Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLCBkcmF3aW5nUmVjdCk7Ci0gICAgCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFy
cmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIHVpbnQ4X3QqIGRhdGEg
PSBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpOwotICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9u
UGl4ZWxBcnJheUxlbmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICBy
ZXR1cm4gdGFibGU7Cit9CisKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGll
cjo6YXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNvbnN0Cit7CisgICAg
YXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhl
bEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICB1aW50OF90KiBkYXRhID0g
cGl4ZWxBcnJheS5kYXRhKCk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsg
cGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9
IDQpIHsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zm
c2V0XV07CisgICAgYXV0byByZWRUYWJsZSAgID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0
LnJlZEZ1bmN0aW9uKCkpOworICAgIGF1dG8gZ3JlZW5UYWJsZSA9IGNvbXB1dGVMb29rdXBUYWJs
ZShtX2VmZmVjdC5ncmVlbkZ1bmN0aW9uKCkpOworICAgIGF1dG8gYmx1ZVRhYmxlICA9IGNvbXB1
dGVMb29rdXBUYWJsZShtX2VmZmVjdC5ibHVlRnVuY3Rpb24oKSk7CisgICAgYXV0byBhbHBoYVRh
YmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0LmFscGhhRnVuY3Rpb24oKSk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5
TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXRdICAg
ICA9IHJlZFRhYmxlW2RhdGFbcGl4ZWxPZmZzZXRdXTsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNl
dCArIDFdID0gZ3JlZW5UYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMV1dOwogICAgICAgICBkYXRh
W3BpeGVsT2Zmc2V0ICsgMl0gPSBibHVlVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDJdXTsKICAg
ICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDNdID0gYWxwaGFUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0
ICsgM11dOwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFQ29tcG9uZW50
VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRhYmxlLCBMb29r
dXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9va3VwVGFibGUm
IGFscGhhVGFibGUpCitib29sIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3Rz
KQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWRUYWJsZS5zaXplKCk7ICsraSkK
LSAgICAgICAgcmVkVGFibGVbaV0gPSBncmVlblRhYmxlW2ldID0gYmx1ZVRhYmxlW2ldID0gYWxw
aGFUYWJsZVtpXSA9IGk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5n
ZXQoKTsKKyAgICAKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5w
aXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQp
OworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgdXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZl
Y3RbXSA9IHsKLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRU
UkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZCi0gICAgICAgIGNvbXB1dGVUYWJ1bGFy
VGFibGUsICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRQotICAgICAgICBjb21w
dXRlRGlzY3JldGVUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUK
LSAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxlLCAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX0xJTkVBUgotICAgICAgICBjb21wdXRlR2FtbWFUYWJsZSAgICAgICAvLyBGRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfR0FNTUEKLSAgICB9OworICAgIGF1dG8gZHJhd2luZ1JlY3QgPSBtX2Vm
ZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOworICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIsIGRyYXdpbmdSZWN0KTsKIAotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9yZWRGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9M
RU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KHN0YXRpY19jYXN0PHNpemVfdD4obV9ncmVlbkZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xF
TkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
c3RhdGljX2Nhc3Q8c2l6ZV90PihtX2JsdWVGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5H
VEgoY2FsbEVmZmVjdCkpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0
YXRpY19jYXN0PHNpemVfdD4obV9hbHBoYUZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdU
SChjYWxsRWZmZWN0KSk7CisgICAgYXBwbHlQbGF0Zm9ybSgqZGVzdGluYXRpb25QaXhlbEJ1ZmZl
cik7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBjYWxsRWZmZWN0W21fcmVkRnVuY3Rpb24u
dHlwZV0ocmVkVGFibGUsIG1fcmVkRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3RbbV9ncmVlbkZ1
bmN0aW9uLnR5cGVdKGdyZWVuVGFibGUsIG1fZ3JlZW5GdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVj
dFttX2JsdWVGdW5jdGlvbi50eXBlXShibHVlVGFibGUsIG1fYmx1ZUZ1bmN0aW9uKTsKLSAgICBj
YWxsRWZmZWN0W21fYWxwaGFGdW5jdGlvbi50eXBlXShhbHBoYVRhYmxlLCBtX2FscGhhRnVuY3Rp
b24pOworYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0
d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOwogfQogCiBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQ29tcG9uZW50VHJh
bnNmZXJUeXBlIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCmluZGV4IDZhZGE5YzBh
YmJlNWMyZjlkNjViZDkxOWZmZWM0ZjE3M2QwMDM0MTQuLjUxOGVhMTM0N2E0YWRkYmE0Y2Q1MDBj
YjQyYzgxMzcwNmRjY2QxOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCkBAIC02MSwx
NiArNjEsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZFQ29tcG9uZW50VHJhbnNmZXIoY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsK
IAotICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+OwotCi0g
ICAgc3RhdGljIHZvaWQgY29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZVRhYnVs
YXJUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsK
LSAgICBzdGF0aWMgdm9pZCBjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlTGlu
ZWFyVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7
Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0KLSAgICB2b2lkIGNvbXB1dGVMb29rdXBUYWJs
ZXMoTG9va3VwVGFibGUmIHJlZFRhYmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3Vw
VGFibGUmIGJsdWVUYWJsZSwgTG9va3VwVGFibGUmIGFscGhhVGFibGUpOwotCiAgICAgYm9vbCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggOWQ5
MmUwMThhZGQwM2ZmYzBiM2Y2OGFlMjA2NmZiMTYwZjI2NDQ0OS4uMTVhNzEyOTk4ODI5YWNkOWI0
ZDI5NDVhZmRlYmJlNmQ2ODdiN2RiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTI1LDYgKzI1LDcg
QEAKICNpbmNsdWRlICJGRUNvbXBvc2l0ZS5oIgogCiAjaW5jbHVkZSAiRkVDb21wb3NpdGVBcml0
aG1ldGljTkVPTi5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUg
IlBpeGVsQnVmZmVyLmgiCkBAIC04NywxNSArODgsNjEgQEAgYm9vbCBGRUNvbXBvc2l0ZTo6c2V0
SzQoZmxvYXQgazQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFy
IGNsYW1wQnl0ZShpbnQgYykKK3ZvaWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIHVuc2lnbmVkIGNoYXIgYnVmZltd
ID0geyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKSwgMjU1LCAwIH07CisgICAgc3dpdGNo
IChtX3R5cGUpIHsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOgorICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKKyAgICAgICAgLy8gRm9yIEluIGFuZCBBdG9wIHRo
ZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YKKyAgICAgICAgLy8g
dGhlIHNlY29uZCBlZmZlY3QuIFNvIGp1c3QgdXNlIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IG9m
IHRoZSBzZWNvbmQgZWZmZWN0IGhlcmUuCisgICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlu
cHV0RWZmZWN0KDEpLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICAgICAgY2xpcEFic29sdXRl
UGFpbnRSZWN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX0FSSVRITUVUSUM6CisgICAgICAgIC8vIEFyaXRobWV0aWMgbWF5IGluZmx1bmNlIHRoZSBj
b21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBjYW4ndAorICAgICAgICAvLyBv
cHRpbWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhlcmUuCisgICAgICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7CisgICAgICAgIHJldHVybjsK
KyAgICBkZWZhdWx0OgorICAgICAgICAvLyBUYWtlIHRoZSB1bmlvbiBvZiBib3RoIGlucHV0IGVm
ZmVjdHMuCisgICAgICAgIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
ZmlsdGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworLy8gRklYTUU6IE1vdmUgdGhl
IGNsYXNzIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQg
aGVhZGVyIGZpbGVzLgorY2xhc3MgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9zaXRlPiB7CisgICAgdXNpbmcgQmFz
ZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUNvbXBvc2l0ZT47CisKK3B1YmxpYzoK
KyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBj
b25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgc3RhdGljIHVpbnQ4X3QgY2xhbXBCeXRlKGludCk7CisKKyAgICB0ZW1wbGF0ZSA8
aW50IGIxLCBpbnQgYjQ+CisgICAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGlj
UGl4ZWxzKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24s
IGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9h
dCBrNCk7CisKKyAgICB0ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+CisgICAgc3RhdGljIGlubGlu
ZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNv
dXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBm
bG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CisKKyAgICBzdGF0aWMgaW5s
aW5lIHZvaWQgYXBwbHlQbGF0Zm9ybUFyaXRobWV0aWModW5zaWduZWQgY2hhciogc291cmNlLCB1
bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsx
LCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKworICAgIGJvb2wgYXBwbHlBcml0aG1l
dGljKEZpbHRlckVmZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yKTsKKyAgICBib29sIGFwcGx5
Tm9uQXJpdGhtZXRpYyhGaWx0ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3QqIGluMik7Cit9Owor
Cit1aW50OF90IEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjbGFtcEJ5dGUoaW50IGMpCit7
CisgICAgdWludDhfdCBidWZmW10gPSB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGMpLCAyNTUsIDAg
fTsKICAgICB1bnNpZ25lZCB1YyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjKTsKICAgICByZXR1
cm4gYnVmZlshISh1YyAmIH4weGZmKSArICEhKHVjICYgfih+MHUgPj4gMSkpXTsKIH0KIAogdGVt
cGxhdGUgPGludCBiMSwgaW50IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1l
dGljUGl4ZWxzKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRp
b24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBm
bG9hdCBrNCkKK2lubGluZSB2b2lkIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRl
QXJpdGhtZXRpY1BpeGVscyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRl
c3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9h
dCBrMywgZmxvYXQgazQpCiB7CiAgICAgZmxvYXQgc2NhbGVkSzE7CiAgICAgZmxvYXQgc2NhbGVk
SzQ7CkBAIC0xMjIsNyArMTY5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1l
dGljUGl4ZWxzKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhcioKIC8vIGNvbXB1
dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2YgY29tcHV0
ZUFyaXRobWV0aWNQaXhlbHMgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGluZwogLy8g
aXMgbm90IG5lY2Vzc2FyeS4gVGhpcyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRpbWl6
YXRpb25zIHN1Y2ggYXMgYXV0by12ZWN0b3JpemF0aW9uLgogdGVtcGxhdGUgPGludCBiMSwgaW50
IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVk
KHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBw
aXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkK
K2lubGluZSB2b2lkIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlQXJpdGhtZXRp
Y1BpeGVsc1VuY2xhbXBlZCh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRl
c3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9h
dCBrMywgZmxvYXQgazQpCiB7CiAgICAgZmxvYXQgc2NhbGVkSzE7CiAgICAgZmxvYXQgc2NhbGVk
SzQ7CkBAIC0xNDcsNyArMTk0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1l
dGljUGl4ZWxzVW5jbGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWcKIH0KIAogI2lm
ICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJpdGhtZXRp
Y1NvZnR3YXJlKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRp
b24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBm
bG9hdCBrNCkKK2lubGluZSB2b2lkIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBseVBs
YXRmb3JtQXJpdGhtZXRpYyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRl
c3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9h
dCBrMywgZmxvYXQgazQpCiB7CiAgICAgZmxvYXQgdXBwZXJMaW1pdCA9IHN0ZDo6bWF4KDAuMGYs
IGsxKSArIHN0ZDo6bWF4KDAuMGYsIGsyKSArIHN0ZDo6bWF4KDAuMGYsIGszKSArIGs0OwogICAg
IGZsb2F0IGxvd2VyTGltaXQgPSBzdGQ6Om1pbigwLjBmLCBrMSkgKyBzdGQ6Om1pbigwLjBmLCBr
MikgKyBzdGQ6Om1pbigwLjBmLCBrMykgKyBrNDsKQEAgLTE4MCw2NiArMjI3LDMyIEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBhcml0aG1ldGljU29mdHdhcmUodW5zaWduZWQgY2hhciogc291cmNlLCB1
bnNpZ25lZCBjaGFyKiBkZXN0CiB9CiAjZW5kaWYKIAotaW5saW5lIHZvaWQgRkVDb21wb3NpdGU6
OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0IGsyLCBm
bG9hdCBrMywgZmxvYXQgazQpCitib29sIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBs
eUFyaXRobWV0aWMoRmlsdGVyRWZmZWN0KiBpbiwgRmlsdGVyRWZmZWN0KiBpbjIpCiB7Ci0gICAg
aW50IGxlbmd0aCA9IHNvdXJjZS5sZW5ndGgoKTsKLSAgICBBU1NFUlQobGVuZ3RoID09IHN0YXRp
Y19jYXN0PGludD4oZGVzdGluYXRpb24ubGVuZ3RoKCkpKTsKLSAgICAvLyBUaGUgc2VsZWN0aW9u
IGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5LgotI2lmIEhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKLSAgICBBU1NFUlQoIShsZW5ndGggJiAweDMpKTsKLSAgICBwbGF0
Zm9ybUFyaXRobWV0aWNOZW9uKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVu
Z3RoLCBrMSwgazIsIGszLCBrNCk7Ci0jZWxzZQotICAgIGFyaXRobWV0aWNTb2Z0d2FyZShzb3Vy
Y2UuZGF0YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOwot
I2VuZGlmCi19CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4
ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7Cisg
ICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LXZvaWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9JTjoKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAg
ICAgIC8vIEZvciBJbiBhbmQgQXRvcCB0aGUgZmlyc3QgZWZmZWN0IGp1c3QgaW5mbHVlbmNlcyB0
aGUgcmVzdWx0IG9mCi0gICAgICAgIC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0
aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgotICAgICAg
ICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgxKS0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7Ci0gICAgICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgotICAgICAgICAvLyBBcml0
aG1ldGljIG1heSBpbmZsdW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4g
U28gd2UgY2FuJ3QKLSAgICAgICAgLy8gb3B0aW1pemUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgot
ICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJl
Y3QoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGFrZSB0
aGUgdW5pb24gb2YgYm90aCBpbnB1dCBlZmZlY3RzLgotICAgICAgICBGaWx0ZXJFZmZlY3Q6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KGZpbHRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdp
b25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8g
c291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0QURyYXdpbmdSZWN0LCBtX2VmZmVjdC5v
cGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gbV9l
ZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7CisgICAgaW4yLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIsIGVmZmVjdEJEcmF3aW5nUmVjdCk7CisKKyAgICBhdXRvJiBzb3VyY2VQaXhlbEFy
cmF5ID0gc291cmNlUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBpbnQgbGVu
Z3RoID0gc291cmNlUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICBBU1NFUlQobGVuZ3RoID09IHN0
YXRpY19jYXN0PGludD4oZGVzdGluYXRpb25QaXhlbEFycmF5Lmxlbmd0aCgpKSk7CisgICAgYXBw
bHlQbGF0Zm9ybUFyaXRobWV0aWMoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIGRlc3RpbmF0aW9u
UGl4ZWxBcnJheS5kYXRhKCksIGxlbmd0aCwgbV9lZmZlY3QuazEoKSwgbV9lZmZlY3QuazIoKSwg
bV9lZmZlY3QuazMoKSwgbV9lZmZlY3QuazQoKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorYm9v
bCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlOb25Bcml0aG1ldGljKEZpbHRlckVm
ZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwot
Ci0gICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0g
ICAgICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwotICAgICAgICBpZiAoIWRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAot
ICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc291
cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0QURyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwotICAgICAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVx
dWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgICAgIGluMi0+Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLCBlZmZlY3RCRHJhd2luZ1JlY3QpOwotCi0gICAgICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJy
YXkgPSBzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgICAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgICAgIHBs
YXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKHNvdXJjZVBpeGVsQXJyYXksIGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOworICAg
IGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlm
ICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjQ4LDUwICsyNjEs
NzUgQEAgYm9vbCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYpCiAgICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8mIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+
Y29udGV4dCgpOworCisgICAgc3dpdGNoIChtX2VmZmVjdC5vcGVyYXRpb24oKSkgeworICAgIGNh
c2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfVU5LTk9XTjoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09W
RVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIs
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0g
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2lu
Z1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3
aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKICAgICAg
ICAgYnJlYWs7CisKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOiB7CiAgICAgICAg
IC8vIEFwcGxpZXMgb25seSB0byB0aGUgaW50ZXJzZWN0ZWQgcmVnaW9uLgogICAgICAgICBJbnRS
ZWN0IGRlc3RpbmF0aW9uUmVjdCA9IGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgICAgICBk
ZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoYWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAg
ICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QobV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3Qo
KSk7CiAgICAgICAgIGlmIChkZXN0aW5hdGlvblJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIEludFJlY3QgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QgPSBkZXN0aW5h
dGlvblJlY3QgLSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CisgICAgICAgIEludFJl
Y3QgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBtX2VmZmVjdC5h
YnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CiAgICAgICAgIEludFJlY3Qgc291cmNlUmVj
dCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7
CiAgICAgICAgIEludFJlY3Qgc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKICAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgRmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25S
ZWN0KSwgRmxvYXRSZWN0KHNvdXJjZTJSZWN0KSk7CiAgICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgRmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25S
ZWN0KSwgRmxvYXRSZWN0KHNvdXJjZVJlY3QpLCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJ
biB9KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1
ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkp
OwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9
LCBpbWFnZUJ1ZmZlcjItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3Rp
bmF0aW9uT3V0KTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyMi0+bG9naWNhbFNpemUoKSB9LCBDb21w
b3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdXQpOwogICAgICAgICBicmVhazsKKwogICAgIGNh
c2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjIt
PmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBv
c2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2Fs
U2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsKICAgICAgICAgYnJlYWs7
CisKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgp
IH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1IpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2lj
YWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OlhPUik7CiAgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgY2FzZSBGRUNPTVBP
U0lURV9PUEVSQVRPUl9MSUdIVEVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3Bl
cmF0b3I6OlBsdXNMaWdodGVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3Qu
ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAg
ICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVj
dC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7
IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVz
TGlnaHRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQog
Citib29sIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBj
b25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKK3sKKyAgICBGaWx0ZXJFZmZl
Y3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOworICAgIEZpbHRlckVmZmVjdCogaW4yID0g
aW5wdXRFZmZlY3RzWzFdLmdldCgpOworCisgICAgaWYgKG1fZWZmZWN0Lm9wZXJhdGlvbigpID09
IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgICAgIHJldHVybiBhcHBseUFy
aXRobWV0aWMoaW4sIGluMik7CisgICAgcmV0dXJuIGFwcGx5Tm9uQXJpdGhtZXRpYyhpbiwgaW4y
KTsKK30KKworYm9vbCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcigq
dGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25U
eXBlJiB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5j
cHAKaW5kZXggYWRkMmJmYTA3ZDEyZDIyNTBkYWU2ZTMwNzkwOGUzYWEyZDE2ZTRkNC4uYmNjZmUw
YzhlMmFjYzVjYjI3Nzg3NjBhNWNhNTAyYTE4YzJhMTAyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RkVDb252b2x2ZU1hdHJpeC5oIgogCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgog
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNs
dWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CkBAIC0xMTUsNiArMTE2LDQyIEBAIGJvb2wgRkVDb252
b2x2ZU1hdHJpeDo6c2V0UHJlc2VydmVBbHBoYShib29sIHByZXNlcnZlQWxwaGEpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRUNvbnZvbHZlTWF0cml4
U29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xh
c3MgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RD
b25jcmV0ZUFwcGxpZXI8RkVDb252b2x2ZU1hdHJpeD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0
ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb252b2x2ZU1hdHJpeD47CisKK3B1YmxpYzoKKyAg
ICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25z
dCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6
CisgICAgc3RydWN0IFBhaW50aW5nRGF0YSB7CisgICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzcmNQaXhlbEFycmF5OworICAgICAgICBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxB
cnJheTsKKyAgICAgICAgaW50IHdpZHRoOworICAgICAgICBpbnQgaGVpZ2h0OworCisgICAgICAg
IEludFNpemUga2VybmVsU2l6ZTsKKyAgICAgICAgZmxvYXQgZGl2aXNvcjsKKyAgICAgICAgZmxv
YXQgYmlhczsKKyAgICAgICAgSW50UG9pbnQgdGFyZ2V0T2Zmc2V0OworICAgICAgICBFZGdlTW9k
ZVR5cGUgZWRnZU1vZGU7CisgICAgICAgIGJvb2wgcHJlc2VydmVBbHBoYTsKKyAgICAgICAgVmVj
dG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7CisgICAgfTsKKworICAgIHN0YXRpYyBpbmxpbmUgdWlu
dDhfdCBjbGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFubmVsLCB1aW50OF90IG1heCA9IDI1NSk7Cisg
ICAgc3RhdGljIGlubGluZSB2b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0UGl4ZWxzLCBp
bnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBib29s
IHByZXNlcnZlQWxwaGFWYWx1ZXMpOworCisgICAgc3RhdGljIGlubGluZSBpbnQgZ2V0UGl4ZWxW
YWx1ZShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHkpOworCisgICAgc3RhdGljIGlu
bGluZSB2b2lkIHNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlwUmlnaHQs
IGludCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCk7CisgICAgc3RhdGljIGlubGlu
ZSB2b2lkIHNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCB4MSwgaW50IHkxLCBpbnQg
eDIsIGludCB5Mik7CisKKyAgICB2b2lkIGFwcGx5UGxhdGZvcm0oUGFpbnRpbmdEYXRhJikgY29u
c3Q7Cit9OworCiAvKgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAg
ICAgIENvbnZvbHZlTWF0cml4IGltcGxlbWVudGF0aW9uCkBAIC0xNzEsNyArMjA4LDcgQEAgYm9v
bCBGRUNvbnZvbHZlTWF0cml4OjpzZXRQcmVzZXJ2ZUFscGhhKGJvb2wgcHJlc2VydmVBbHBoYSkK
ICAgIGFuZCB3b3VsZCBtYWtlIGl0IHJlYWxseSBoYXJkIHRvIHVuZGVyc3RhbmQuCiAqLwogCi1z
dGF0aWMgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBjaGFyIGNsYW1wUkdCQVZhbHVlKGZsb2F0IGNo
YW5uZWwsIHVuc2lnbmVkIGNoYXIgbWF4ID0gMjU1KQoraW5saW5lIHVpbnQ4X3QgRkVDb252b2x2
ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6Y2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdWlu
dDhfdCBtYXgpCiB7CiAgICAgaWYgKGNoYW5uZWwgPD0gMCkKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0xODAsMTAgKzIxNyw5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGNoYXIgY2xh
bXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBtCiAgICAgcmV0dXJuIGNo
YW5uZWw7CiB9CiAKLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLUFMV0FZU19J
TkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlUGl4ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwg
ZmxvYXQqIHRvdGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcykKK2lubGluZSB2b2lkIEZF
Q29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBi
aWFzLCBib29sIHByZXNlcnZlQWxwaGFWYWx1ZXMpCiB7Ci0gICAgdW5zaWduZWQgY2hhciBtYXhB
bHBoYSA9IHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNb
M10gLyBkaXZpc29yICsgYmlhcyk7CisgICAgdWludDhfdCBtYXhBbHBoYSA9IHByZXNlcnZlQWxw
aGFWYWx1ZXMgPyAyNTUgOiBjbGFtcFJHQkFWYWx1ZSh0b3RhbHNbM10gLyBkaXZpc29yICsgYmlh
cyk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpCiAgICAgICAgIGRlc3RQaXhlbHMu
c2V0KHBpeGVsKyssIGNsYW1wUkdCQVZhbHVlKHRvdGFsc1tpXSAvIGRpdmlzb3IgKyBiaWFzLCBt
YXhBbHBoYSkpOwogCkBAIC0xOTQsMjUgKzIzMCw0NyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0
RGVzdGluYXRpb25QaXhlbHMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZVBpeGVscywg
VQogICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCsrLCBtYXhBbHBoYSk7CiB9CiAKLSNpZiBD
T01QSUxFUihNU1ZDKQotLy8gSW5jb3JyZWN0bHkgZGlhZ25vc2luZyBvdmVyd3JpdGUgb2Ygc3Rh
Y2sgaW4gfHRvdGFsc3wgZHVlIHRvIHxwcmVzZXJ2ZUFscGhhVmFsdWVzfC4KLSNwcmFnbWEgd2Fy
bmluZyhwdXNoKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3ODkpCi0jZW5kaWYKK2lubGlu
ZSBpbnQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6Z2V0UGl4ZWxWYWx1ZShjb25z
dCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQoreworICAgIGlmICh4
ID49IDAgJiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBhaW50aW5n
RGF0YS5oZWlnaHQpCisgICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgp
IDw8IDI7CisKKyAgICBzd2l0Y2ggKHBhaW50aW5nRGF0YS5lZGdlTW9kZSkgeworICAgIGRlZmF1
bHQ6IC8vIEVER0VNT0RFX05PTkUKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGNhc2UgRURHRU1P
REVfRFVQTElDQVRFOgorICAgICAgICBpZiAoeCA8IDApCisgICAgICAgICAgICB4ID0gMDsKKyAg
ICAgICAgZWxzZSBpZiAoeCA+PSBwYWludGluZ0RhdGEud2lkdGgpCisgICAgICAgICAgICB4ID0g
cGFpbnRpbmdEYXRhLndpZHRoIC0gMTsKKyAgICAgICAgaWYgKHkgPCAwKQorICAgICAgICAgICAg
eSA9IDA7CisgICAgICAgIGVsc2UgaWYgKHkgPj0gcGFpbnRpbmdEYXRhLmhlaWdodCkKKyAgICAg
ICAgICAgIHkgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC0gMTsKKyAgICAgICAgcmV0dXJuICh5ICog
cGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKKyAgICBjYXNlIEVER0VNT0RFX1dSQVA6Cisg
ICAgICAgIHdoaWxlICh4IDwgMCkKKyAgICAgICAgICAgIHggKz0gcGFpbnRpbmdEYXRhLndpZHRo
OworICAgICAgICB4ICU9IHBhaW50aW5nRGF0YS53aWR0aDsKKyAgICAgICAgd2hpbGUgKHkgPCAw
KQorICAgICAgICAgICAgeSArPSBwYWludGluZ0RhdGEuaGVpZ2h0OworICAgICAgICB5ICU9IHBh
aW50aW5nRGF0YS5oZWlnaHQ7CisgICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0
aCArIHgpIDw8IDI7CisgICAgfQorfQogCiAvLyBPbmx5IGZvciByZWdpb24gQwotdGVtcGxhdGU8
Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVN
YXRyaXg6OmZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
aW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQoraW5s
aW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6c2V0SW50ZXJpb3JQaXhl
bHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90
dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCkKIHsKICAgICAvLyBlZGdlIG1vZGUgZG9lcyBub3Qg
YWZmZWN0IHRoZXNlIHBpeGVscwotICAgIGludCBwaXhlbCA9IChtX3RhcmdldE9mZnNldC55KCkg
KiBwYWludGluZ0RhdGEud2lkdGggKyBtX3RhcmdldE9mZnNldC54KCkpICogNDsKKyAgICBpbnQg
cGl4ZWwgPSAocGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCkgKiBwYWludGluZ0RhdGEud2lk
dGggKyBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSkgKiA0OwogICAgIGludCBrZXJuZWxJ
bmNyZWFzZSA9IGNsaXBSaWdodCAqIDQ7Ci0gICAgaW50IHhJbmNyZWFzZSA9IChtX2tlcm5lbFNp
emUud2lkdGgoKSAtIDEpICogNDsKKyAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0YS5r
ZXJuZWxTaXplLndpZHRoKCkgLSAxKSAqIDQ7CiAgICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiBy
Z2IoYSkgY29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNlcnZlQWxwaGFWYWx1
ZXMgPyAwIDogMSldOworICAgIGZsb2F0IHRvdGFsc1s0XTsKIAotICAgIC8vIG1fZGl2aXNvciBj
YW5ub3QgYmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAg
QVNTRVJUKG1fZGl2aXNvcik7CisgICAgLy8gZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCisgICAgQVNTRVJUKHBhaW50aW5nRGF0YS5k
aXZpc29yKTsKIAogICAgIC8vIFNraXAgdGhlIGZpcnN0ICcoY2xpcEJvdHRvbSAtIHlFbmQpJyBs
aW5lcwogICAgIHBpeGVsICs9IChjbGlwQm90dG9tIC0geUVuZCkgKiAoeEluY3JlYXNlICsgKGNs
aXBSaWdodCArIDEpICogNCk7CkBAIC0yMjIsMjkgKzI4MCwyOCBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYg
cGFpbnRpbgogICAgICAgICBmb3IgKGludCB4ID0gY2xpcFJpZ2h0ICsgMTsgeCA+IDA7IC0teCkg
ewogICAgICAgICAgICAgaW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJp
eC5zaXplKCkgLSAxOwogICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsID0gc3RhcnRLZXJuZWxQ
aXhlbDsKLSAgICAgICAgICAgIGludCB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAg
ICAgICAgICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKIAog
ICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKICAgICAgICAgICAgIHRvdGFsc1sxXSA9IDA7CiAg
ICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhh
VmFsdWVzKQotICAgICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7CisgICAgICAgICAgICB0b3Rh
bHNbM10gPSAwOwogCiAgICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkgewogICAg
ICAgICAgICAgICAgIHRvdGFsc1swXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5l
bFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5p
dGVtKGtlcm5lbFBpeGVsKyspKTsKICAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRp
bmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFp
bnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7CiAgICAgICAgICAg
ICAgICAgdG90YWxzWzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVd
ICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2Vy
bmVsUGl4ZWwrKykpOwotICAgICAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykK
KyAgICAgICAgICAgICAgICBpZiAoIXBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKQogICAgICAg
ICAgICAgICAgICAgICB0b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJu
ZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXku
aXRlbShrZXJuZWxQaXhlbCkpOwogICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWw7CiAgICAg
ICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKICAgICAgICAgICAgICAgICBpZiAoIS0td2lkdGgp
IHsKICAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWwgKz0ga2VybmVsSW5jcmVhc2U7Ci0g
ICAgICAgICAgICAgICAgICAgIHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAg
ICAgICAgICAgICAgIHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNldERlc3RpbmF0
aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFWYWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5
LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBw
YWludGluZ0RhdGEuYmlhcyk7CisgICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWlu
dGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVs
LCB0b3RhbHMsIHBhaW50aW5nRGF0YS5kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRp
bmdEYXRhLnByZXNlcnZlQWxwaGEpOwogICAgICAgICAgICAgc3RhcnRLZXJuZWxQaXhlbCArPSA0
OwogICAgICAgICB9CiAgICAgICAgIHBpeGVsICs9IHhJbmNyZWFzZTsKQEAgLTI1Miw2NCArMzA5
LDMzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJp
b3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluCiAgICAgfQogfQogCi1BTFdBWVNfSU5MSU5F
IGludCBGRUNvbnZvbHZlTWF0cml4OjpnZXRQaXhlbFZhbHVlKFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhLCBpbnQgeCwgaW50IHkpCi17Ci0gICAgaWYgKHggPj0gMCAmJiB4IDwgcGFpbnRpbmdE
YXRhLndpZHRoICYmIHkgPj0gMCAmJiB5IDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKLSAgICAgICAg
cmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKLQotICAgIHN3aXRjaCAo
bV9lZGdlTW9kZSkgewotICAgIGRlZmF1bHQ6IC8vIEVER0VNT0RFX05PTkUKLSAgICAgICAgcmV0
dXJuIC0xOwotICAgIGNhc2UgRURHRU1PREVfRFVQTElDQVRFOgotICAgICAgICBpZiAoeCA8IDAp
Ci0gICAgICAgICAgICB4ID0gMDsKLSAgICAgICAgZWxzZSBpZiAoeCA+PSBwYWludGluZ0RhdGEu
d2lkdGgpCi0gICAgICAgICAgICB4ID0gcGFpbnRpbmdEYXRhLndpZHRoIC0gMTsKLSAgICAgICAg
aWYgKHkgPCAwKQotICAgICAgICAgICAgeSA9IDA7Ci0gICAgICAgIGVsc2UgaWYgKHkgPj0gcGFp
bnRpbmdEYXRhLmhlaWdodCkKLSAgICAgICAgICAgIHkgPSBwYWludGluZ0RhdGEuaGVpZ2h0IC0g
MTsKLSAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKLSAg
ICBjYXNlIEVER0VNT0RFX1dSQVA6Ci0gICAgICAgIHdoaWxlICh4IDwgMCkKLSAgICAgICAgICAg
IHggKz0gcGFpbnRpbmdEYXRhLndpZHRoOwotICAgICAgICB4ICU9IHBhaW50aW5nRGF0YS53aWR0
aDsKLSAgICAgICAgd2hpbGUgKHkgPCAwKQotICAgICAgICAgICAgeSArPSBwYWludGluZ0RhdGEu
aGVpZ2h0OwotICAgICAgICB5ICU9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0gICAgICAgIHJldHVy
biAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAgfQotfQotCiAvLyBGb3Ig
b3RoZXIgcmVnaW9ucyB0aGFuIEMKLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4K
LXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCitpbmxpbmUgdm9p
ZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzZXRPdXRlclBpeGVscyhQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKQogewog
ICAgIGludCBwaXhlbCA9ICh5MSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgxKSAqIDQ7CiAgICAg
aW50IGhlaWdodCA9IHkyIC0geTE7CiAgICAgaW50IHdpZHRoID0geDIgLSB4MTsKLSAgICBpbnQg
YmVnaW5LZXJuZWxQaXhlbFggPSB4MSAtIG1fdGFyZ2V0T2Zmc2V0LngoKTsKKyAgICBpbnQgYmVn
aW5LZXJuZWxQaXhlbFggPSB4MSAtIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgpOwogICAg
IGludCBzdGFydEtlcm5lbFBpeGVsWCA9IGJlZ2luS2VybmVsUGl4ZWxYOwotICAgIGludCBzdGFy
dEtlcm5lbFBpeGVsWSA9IHkxIC0gbV90YXJnZXRPZmZzZXQueSgpOworICAgIGludCBzdGFydEtl
cm5lbFBpeGVsWSA9IHkxIC0gcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCk7CiAgICAgaW50
IHhJbmNyZWFzZSA9IChwYWludGluZ0RhdGEud2lkdGggLSB3aWR0aCkgKiA0OwogICAgIC8vIENv
bnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0b3RhbHNbMyAr
IChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKKyAgICBmbG9hdCB0b3RhbHNbNF07CiAK
LSAgICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50
IGVuc3VyZXMgdGhpcwotICAgIEFTU0VSVChtX2Rpdmlzb3IpOworICAgIC8vIHBhaW50aW5nRGF0
YS5kaXZpc29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVz
IHRoaXMKKyAgICBBU1NFUlQocGFpbnRpbmdEYXRhLmRpdmlzb3IpOwogCiAgICAgZm9yIChpbnQg
eSA9IGhlaWdodDsgeSA+IDA7IC0teSkgewogICAgICAgICBmb3IgKGludCB4ID0gd2lkdGg7IHgg
PiAwOyAtLXgpIHsKICAgICAgICAgICAgIGludCBrZXJuZWxWYWx1ZSA9IHBhaW50aW5nRGF0YS5r
ZXJuZWxNYXRyaXguc2l6ZSgpIC0gMTsKICAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFggPSBz
dGFydEtlcm5lbFBpeGVsWDsKICAgICAgICAgICAgIGludCBrZXJuZWxQaXhlbFkgPSBzdGFydEtl
cm5lbFBpeGVsWTsKLSAgICAgICAgICAgIGludCB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgp
OworICAgICAgICAgICAgaW50IHdpZHRoID0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgo
KTsKIAogICAgICAgICAgICAgdG90YWxzWzBdID0gMDsKICAgICAgICAgICAgIHRvdGFsc1sxXSA9
IDA7CiAgICAgICAgICAgICB0b3RhbHNbMl0gPSAwOwotICAgICAgICAgICAgaWYgKCFwcmVzZXJ2
ZUFscGhhVmFsdWVzKQotICAgICAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7CisgICAgICAgICAg
ICB0b3RhbHNbM10gPSAwOwogCiAgICAgICAgICAgICB3aGlsZSAoa2VybmVsVmFsdWUgPj0gMCkg
ewogICAgICAgICAgICAgICAgIGludCBwaXhlbEluZGV4ID0gZ2V0UGl4ZWxWYWx1ZShwYWludGlu
Z0RhdGEsIGtlcm5lbFBpeGVsWCwga2VybmVsUGl4ZWxZKTsKQEAgLTMxOCwxOCArMzQ0LDE4IEBA
IHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhLCBpbnQgeDEsIGluCiAgICAgICAgICAgICAgICAgICAgIHRvdGFsc1sxXSAr
PSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZs
b2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAxKSk7CiAg
ICAgICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4
W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxB
cnJheS5pdGVtKHBpeGVsSW5kZXggKyAyKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcyAmJiBwaXhlbEluZGV4ID49IDApCisgICAg
ICAgICAgICAgICAgaWYgKCFwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSAmJiBwaXhlbEluZGV4
ID49IDApCiAgICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSArPSBwYWludGluZ0RhdGEua2Vy
bmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEu
c3JjUGl4ZWxBcnJheS5pdGVtKHBpeGVsSW5kZXggKyAzKSk7CiAgICAgICAgICAgICAgICAgKytr
ZXJuZWxQaXhlbFg7CiAgICAgICAgICAgICAgICAgLS1rZXJuZWxWYWx1ZTsKICAgICAgICAgICAg
ICAgICBpZiAoIS0td2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICAga2VybmVsUGl4ZWxYID0g
c3RhcnRLZXJuZWxQaXhlbFg7CiAgICAgICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxZOwot
ICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IG1fa2VybmVsU2l6ZS53aWR0aCgpOworICAgICAg
ICAgICAgICAgICAgICB3aWR0aCA9IHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzZXREZXN0aW5h
dGlvblBpeGVsczxwcmVzZXJ2ZUFscGhhVmFsdWVzPihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJh
eSwgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMsIG1fZGl2aXNvciwg
cGFpbnRpbmdEYXRhLmJpYXMpOworICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHMocGFp
bnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhl
bCwgdG90YWxzLCBwYWludGluZ0RhdGEuZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50
aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKTsKICAgICAgICAgICAgICsrc3RhcnRLZXJuZWxQaXhlbFg7
CiAgICAgICAgIH0KICAgICAgICAgcGl4ZWwgKz0geEluY3JlYXNlOwpAQCAtMzM4LDk1ICszNjQs
ODggQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwgaW4KICAgICB9CiB9CiAKLSNpZiBDT01QSUxFUihN
U1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkgLy8gRGlzYWJsZSBvZiA0Nzg5Ci0jZW5kaWYKLQot
QUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4ZWxzKFBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwg
aW50IHlTdGFydCwgaW50IHlFbmQpCit2b2lkIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5UGxhdGZvcm0oUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpIGNvbnN0CiB7Ci0g
ICAgLy8gTXVzdCBiZSBpbXBsZW1lbnRlZCBoZXJlLCBzaW5jZSBpdCByZWZlcnMgYW5vdGhlciBB
TFdBWVNfSU5MSU5FCi0gICAgLy8gZnVuY3Rpb24sIHdoaWNoIGRlZmluZWQgaW4gdGhpcyBDKysg
c291cmNlIGZpbGUgYXMgd2VsbAotICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCi0gICAgICAgIGZh
c3RTZXRJbnRlcmlvclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJv
dHRvbSwgeVN0YXJ0LCB5RW5kKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRJbnRlcmlvclBp
eGVsczxmYWxzZT4ocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwg
eUVuZCk7Ci19CisgICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscworICAgIGludCBj
bGlwUmlnaHQgPSBwYWludGluZ0RhdGEud2lkdGggLSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53
aWR0aCgpOworICAgIGludCBjbGlwQm90dG9tID0gcGFpbnRpbmdEYXRhLmhlaWdodCAtIHBhaW50
aW5nRGF0YS5rZXJuZWxTaXplLmhlaWdodCgpOwogCi1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252
b2x2ZU1hdHJpeDo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikKLXsKLSAgICAvLyBBbHRob3VnaCB0aGlzIGZ1
bmN0aW9uIGNhbiBiZSBtb3ZlZCB0byB0aGUgaGVhZGVyLCBpdCBpcyBpbXBsZW1lbnRlZCBoZXJl
Ci0gICAgLy8gYmVjYXVzZSBzZXRJbnRlcmlvclBpeGVscyBpcyBhbHNvIGltcGxlbWVudGVkIGhl
cmUKLSAgICBpZiAobV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0U2V0T3V0ZXJQaXhlbHM8
dHJ1ZT4ocGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7Ci0gICAgZWxzZQotICAgICAgICBm
YXN0U2V0T3V0ZXJQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgeDEsIHkxLCB4MiwgeTIpOwor
ICAgIGlmIChjbGlwUmlnaHQgPCAwIHx8IGNsaXBCb3R0b20gPCAwKSB7CisgICAgICAgIC8vIFJh
cmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1pemVkIGZvciBzcGVlZAorICAgICAgICBzZXRPdXRlclBp
eGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50aW5nRGF0YS53aWR0aCwgcGFpbnRpbmdEYXRh
LmhlaWdodCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IGludCBtaW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0
YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworCisgICAgaWYgKGludCBpdGVyYXRpb25zID0gKHBh
aW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQpIC8gbWluaW1hbFJlY3REaW1l
bnNpb24pIHsKKyAgICAgICAgaW50IHN0cmlkZSA9IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOwor
ICAgICAgICBpbnQgY2h1bmtDb3VudCA9IChjbGlwQm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJp
ZGU7CisKKyAgICAgICAgQ29uY3VycmVudFdvcmtRdWV1ZTo6YXBwbHkoY2h1bmtDb3VudCwgWyZd
KHNpemVfdCBpbmRleCkgeworICAgICAgICAgICAgaW50IHlTdGFydCA9IChzdHJpZGUgKiBpbmRl
eCk7CisgICAgICAgICAgICBpbnQgeUVuZCA9IHN0ZDo6bWluPGludD4oc3RyaWRlICogKGluZGV4
ICsgMSksIGNsaXBCb3R0b20pOworCisgICAgICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWlu
dGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKKyAgICAgICAg
fSk7CisgICAgfSBlbHNlCisgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwg
Y2xpcFJpZ2h0LCBjbGlwQm90dG9tLCAwLCBjbGlwQm90dG9tKTsKKworICAgIGNsaXBSaWdodCAr
PSBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSArIDE7CisgICAgY2xpcEJvdHRvbSArPSBw
YWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSArIDE7CisKKyAgICBpZiAocGFpbnRpbmdEYXRh
LnRhcmdldE9mZnNldC55KCkgPiAwKQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0Rh
dGEsIDAsIDAsIHBhaW50aW5nRGF0YS53aWR0aCwgcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55
KCkpOworICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKKyAgICAgICAg
c2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWludGluZ0RhdGEu
d2lkdGgsIHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgIGlmIChwYWludGluZ0RhdGEudGFyZ2V0
T2Zmc2V0LngoKSA+IDApCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwg
cGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCksIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQu
eCgpLCBjbGlwQm90dG9tKTsKKyAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRpbmdEYXRhLndpZHRo
KQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgcGFpbnRp
bmdEYXRhLnRhcmdldE9mZnNldC55KCksIHBhaW50aW5nRGF0YS53aWR0aCwgY2xpcEJvdHRvbSk7
CiB9CiAKLWJvb2wgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYpCitib29sIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNv
bnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewot
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOwogCi0gICAgYXV0byBhbHBoYUZvcm1hdCA9IG1f
cHJlc2VydmVBbHBoYSA/IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCA6
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ7Ci0gICAgYXV0byBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoYWxwaGFGb3JtYXQpOworICAgIGF1
dG8gYWxwaGFGb3JtYXQgPSBtX2VmZmVjdC5wcmVzZXJ2ZUFscGhhKCkgPyBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgOiBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBp
eGVsQnVmZmVyUmVzdWx0KGFscGhhRm9ybWF0KTsKICAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpOwotICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZm
ZXJSZXN1bHQoYWxwaGFGb3JtYXQsIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xvclNw
YWNlKCkpOworICAgIGF1dG8gZWZmZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRS
ZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1
dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoYWxwaGFGb3Jt
YXQsIGVmZmVjdERyYXdpbmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwog
ICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGF1dG8mIHNvdXJjZVBpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOwogICAg
IGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRh
dGEoKTsKLQotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXpl
KCk7CiAgICAgCisgICAgYXV0byBwYWludFNpemUgPSBtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVj
dCgpLnNpemUoKTsKKwogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7CiAgICAgICAg
IHNvdXJjZVBpeGVsQXJyYXksCiAgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwKICAgICAg
ICAgcGFpbnRTaXplLndpZHRoKCksCiAgICAgICAgIHBhaW50U2l6ZS5oZWlnaHQoKSwKLSAgICAg
ICAgbV9iaWFzICogMjU1LAotICAgICAgICBub3JtYWxpemVkRmxvYXRzKG1fa2VybmVsTWF0cml4
KQorICAgICAgICBtX2VmZmVjdC5rZXJuZWxTaXplKCksCisgICAgICAgIG1fZWZmZWN0LmRpdmlz
b3IoKSwKKyAgICAgICAgbV9lZmZlY3QuYmlhcygpICogMjU1LAorICAgICAgICBtX2VmZmVjdC50
YXJnZXRPZmZzZXQoKSwKKyAgICAgICAgbV9lZmZlY3QuZWRnZU1vZGUoKSwKKyAgICAgICAgbV9l
ZmZlY3QucHJlc2VydmVBbHBoYSgpLAorICAgICAgICBGRUNvbG9yTWF0cml4Ojpub3JtYWxpemVk
RmxvYXRzKG1fZWZmZWN0Lmtlcm5lbCgpKQogICAgIH07CiAKLSAgICAvLyBEcmF3aW5nIGZ1bGx5
IGNvdmVyZWQgcGl4ZWxzCi0gICAgaW50IGNsaXBSaWdodCA9IHBhaW50U2l6ZS53aWR0aCgpIC0g
bV9rZXJuZWxTaXplLndpZHRoKCk7Ci0gICAgaW50IGNsaXBCb3R0b20gPSBwYWludFNpemUuaGVp
Z2h0KCkgLSBtX2tlcm5lbFNpemUuaGVpZ2h0KCk7Ci0KLSAgICBpZiAoY2xpcFJpZ2h0IDwgMCB8
fCBjbGlwQm90dG9tIDwgMCkgewotICAgICAgICAvLyBSYXJlIHNpdHVhdGlvbiwgbm90IG9wdGlt
aXplZCBmb3Igc3BlZWQKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAw
LCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGludCBpdGVyYXRpb25zID0gKGFic29sdXRlUGFpbnRS
ZWN0KCkud2lkdGgoKSAqIGFic29sdXRlUGFpbnRSZWN0KCkuaGVpZ2h0KCkpIC8gc19taW5pbWFs
UmVjdERpbWVuc2lvbikgewotICAgICAgICBpbnQgc3RyaWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJh
dGlvbnM7Ci0gICAgICAgIGludCBjaHVua0NvdW50ID0gKGNsaXBCb3R0b20gKyBzdHJpZGUgLSAx
KSAvIHN0cmlkZTsKLQotICAgICAgICBDb25jdXJyZW50V29ya1F1ZXVlOjphcHBseShjaHVua0Nv
dW50LCBbJl0oc2l6ZV90IGluZGV4KSB7Ci0gICAgICAgICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlk
ZSAqIGluZGV4KTsKLSAgICAgICAgICAgIGludCB5RW5kID0gc3RkOjptaW48aW50PihzdHJpZGUg
KiAoaW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7Ci0KLSAgICAgICAgICAgIHNldEludGVyaW9yUGl4
ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwot
ICAgICAgICB9KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRp
bmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAsIGNsaXBCb3R0b20pOwotCi0gICAgY2xp
cFJpZ2h0ICs9IG1fdGFyZ2V0T2Zmc2V0LngoKSArIDE7Ci0gICAgY2xpcEJvdHRvbSArPSBtX3Rh
cmdldE9mZnNldC55KCkgKyAxOwotICAgIGlmIChtX3RhcmdldE9mZnNldC55KCkgPiAwKQotICAg
ICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgp
LCBtX3RhcmdldE9mZnNldC55KCkpOwotICAgIGlmIChjbGlwQm90dG9tIDwgcGFpbnRTaXplLmhl
aWdodCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIGNsaXBCb3R0
b20sIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwotICAgIGlmIChtX3Rh
cmdldE9mZnNldC54KCkgPiAwKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEs
IDAsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgbV90YXJnZXRPZmZzZXQueCgpLCBjbGlwQm90dG9tKTsK
LSAgICBpZiAoY2xpcFJpZ2h0IDwgcGFpbnRTaXplLndpZHRoKCkpCi0gICAgICAgIHNldE91dGVy
UGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBtX3RhcmdldE9mZnNldC55KCksIHBhaW50
U2l6ZS53aWR0aCgpLCBjbGlwQm90dG9tKTsKLQorICAgIGFwcGx5UGxhdGZvcm0ocGFpbnRpbmdE
YXRhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZF
Q29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRF
ZmZlY3RzKCkpOworfQorCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRWRnZU1vZGVUeXBlJiB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bnZvbHZlTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguaAppbmRleCAwNWMxYTgzN2QyMzRjZjU4NGRlODkwZjU5NGIyMjA3
M2YxMzM2NWM1Li42YjdhZGU2ZjBiMjI4OWYzNDNlNTY4MTRmZDhjMmRlNTQ0NzNmZjk5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9s
dmVNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29udm9sdmVNYXRyaXguaApAQCAtNjQsMTYgKzY0LDYgQEAgcHVibGljOgogICAgIGJvb2wg
c2V0UHJlc2VydmVBbHBoYShib29sKTsKIAogcHJpdmF0ZToKLQotICAgIHN0cnVjdCBQYWludGlu
Z0RhdGEgewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsK
LSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3
aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgZmxvYXQgYmlhczsKLSAgICAgICAg
VmVjdG9yPGZsb2F0PiBrZXJuZWxNYXRyaXg7Ci0gICAgfTsKLQogICAgIEZFQ29udm9sdmVNYXRy
aXgoY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywg
Y29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlLCBjb25zdCBGbG9hdFBv
aW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIGtlcm5lbE1hdHJpeCk7CiAKICAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9z
aW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQpAQCAtODIsMjEgKzcyLDYgQEAgcHJpdmF0
ZToKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdGVt
cGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBm
YXN0U2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IGNsaXBSaWdodCwgaW50IGNs
aXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKTsKLQotICAgIEFMV0FZU19JTkxJTkUgaW50
IGdldFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5KTsKLQotICAgIHRlbXBs
YXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLSAgICB2b2lkIGZhc3RTZXRPdXRlclBpeGVs
cyhQYWludGluZ0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAg
Ly8gV3JhcHBlciBmdW5jdGlvbnMKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0SW50ZXJpb3JQ
aXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5
U3RhcnQsIGludCB5RW5kKTsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0T3V0ZXJQaXhlbHMo
UGFpbnRpbmdEYXRhJiwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8v
IFBhcmFsbGVsaXphdGlvbiBwYXJ0cwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVj
dERpbWVuc2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFy
YWxsZWwgam9icwotCiAgICAgSW50U2l6ZSBtX2tlcm5lbFNpemU7CiAgICAgZmxvYXQgbV9kaXZp
c29yOwogICAgIGZsb2F0IG1fYmlhczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKaW5kZXgg
YmQ1YjYxNTdmOGQ4YzU3MGZhNTM4ZjI0Zjg2Yzk0YWE5YTBlNzc1My4uNzYwZjgzNWIxYjUxMjNk
ZDQyYzI2ZjE3ZjdjZGMxZDMzM2IyNGNkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAK
QEAgLTM0LDcgKzM0LDcgQEAgUmVmPEZFRGlmZnVzZUxpZ2h0aW5nPiBGRURpZmZ1c2VMaWdodGlu
Zzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG8KIH0KIAogRkVEaWZmdXNl
TGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBm
bG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGln
aHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5nKERpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdDb2xv
ciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhY
LCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIEZpbHRlckVmZmVjdDo6
VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcpCisgICAgOiBGRUxpZ2h0aW5nKEZpbHRlckVmZmVjdDo6
VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlm
ZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFks
IFdURk1vdmUobGlnaHRTb3VyY2UpKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3Bw
CmluZGV4IGU3YzFhMjI5OWI0ZTUwN2M0ZjY4Yjg2ODhhOGQwODU3N2MwNTU2YjAuLmRmYzc2MGUy
MGY0OTk0NjA1Zjk0NDkxMmVmZGUzYWMwODE1MDRiYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRN
YXAuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiRkVEaXNwbGFjZW1lbnRNYXAuaCIK
IAogI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTg0LDMwICs4NSw0OCBAQCB2b2lk
IEZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVj
dCogaW4sIGNvbnN0IGludCBpbgogICAgICAgICBpbi0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJ5
dGVPZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVz
KQorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyIHRv
IHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVEaXNwbGFjZW1lbnRN
YXBTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZF
RGlzcGxhY2VtZW50TWFwPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRl
QXBwbGllcjxGRURpc3BsYWNlbWVudE1hcD47CisKK3B1YmxpYzoKKyAgICBGRURpc3BsYWNlbWVu
dE1hcFNvZnR3YXJlQXBwbGllcihGRURpc3BsYWNlbWVudE1hcCYpOworCisgICAgYm9vbCBhcHBs
eShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBieXRlT2Zm
c2V0T2ZQaXhlbCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCByb3dCeXRlcykKKyAg
ICB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OworICAgICAgICBy
ZXR1cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7CisgICAgfQorCisgICAgaW50
IHhDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2VmZmVjdC54Q2hhbm5lbFNlbGVjdG9y
KCkgLSAxOyB9CisgICAgaW50IHlDaGFubmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2VmZmVj
dC55Q2hhbm5lbFNlbGVjdG9yKCkgLSAxOyB9Cit9OworCitGRURpc3BsYWNlbWVudE1hcFNvZnR3
YXJlQXBwbGllcjo6RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIoRkVEaXNwbGFjZW1l
bnRNYXAmIGVmZmVjdCkKKyAgICA6IEJhc2UoZWZmZWN0KQogewotICAgIGNvbnN0IHVuc2lnbmVk
IGJ5dGVzUGVyUGl4ZWwgPSA0OwotICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhlbCArIHkgKiBy
b3dCeXRlczsKKyAgICBBU1NFUlQobV9lZmZlY3QueENoYW5uZWxTZWxlY3RvcigpICE9IENIQU5O
RUxfVU5LTk9XTik7CisgICAgQVNTRVJUKG1fZWZmZWN0LnlDaGFubmVsU2VsZWN0b3IoKSAhPSBD
SEFOTkVMX1VOS05PV04pOwogfQogCi1ib29sIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitib29sIEZFRGlzcGxhY2VtZW50TWFw
U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0K
LSAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7Ci0gICAg
QVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOworICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CisgICAgRmlsdGVyRWZmZWN0KiBp
bjIgPSBpbnB1dEVmZmVjdHNbMV0uZ2V0KCk7CiAKLSAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIgPSBwaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhl
bEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAg
ICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIt
PmRhdGEoKTsKIAotICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVn
aW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRv
IGVmZmVjdEFEcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgYXV0byBpbnB1dFBpeGVsQnVm
ZmVyID0gaW4tPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIGVmZmVjdEFEcmF3aW5nUmVjdCk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdEJE
cmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29s
dXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gZWZmZWN0QkRyYXdpbmdSZWN0ID0gbV9lZmZlY3Qu
cmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7CiAgICAgLy8gVGhlIGNhbGN1bGF0aW9ucyB1c2luZyB0aGUgcGl4ZWwgdmFsdWVzIGZyb20g
4oCYaW4y4oCZIGFyZSBwZXJmb3JtZWQgdXNpbmcgbm9uLXByZW11bHRpcGxpZWQgY29sb3IgdmFs
dWVzLgogICAgIGF1dG8gZGlzcGxhY2VtZW50UGl4ZWxCdWZmZXIgPSBpbjItPmdldFBpeGVsQnVm
ZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZWZmZWN0
QkRyYXdpbmdSZWN0KTsKICAgICAKQEAgLTExOCw5ICsxMzcsOSBAQCBib29sIEZFRGlzcGxhY2Vt
ZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAg
YXV0byYgZGlzcGxhY2VtZW50SW1hZ2UgPSBkaXNwbGFjZW1lbnRQaXhlbEJ1ZmZlci0+ZGF0YSgp
OwogICAgIEFTU0VSVChpbnB1dEltYWdlLmxlbmd0aCgpID09IGRpc3BsYWNlbWVudEltYWdlLmxl
bmd0aCgpKTsKIAotICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5z
aXplKCk7CisgICAgSW50U2l6ZSBwYWludFNpemUgPSBtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVj
dCgpLnNpemUoKTsKIAotICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2FsZWRCeUZpbHRl
clNjYWxlKHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsKKyAgICBGbG9hdFNpemUgc2NhbGUgPSBmaWx0
ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LnNjYWxlKCksIG1fZWZmZWN0LnNjYWxl
KCkgfSk7CiAgICAgZmxvYXQgc2NhbGVGb3JDb2xvclggPSBzY2FsZS53aWR0aCgpIC8gMjU1LjA7
CiAgICAgZmxvYXQgc2NhbGVGb3JDb2xvclkgPSBzY2FsZS5oZWlnaHQoKSAvIDI1NS4wOwogICAg
IGZsb2F0IHNjYWxlZE9mZnNldFggPSAwLjUgLSBzY2FsZS53aWR0aCgpICogMC41OwpAQCAtMTUz
LDYgKzE3MiwxMSBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVE
aXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRl
cikKK3sKKyAgICByZXR1cm4gRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIoKnRoaXMp
LmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2hhbm5lbFNlbGVjdG9yVHlwZSYgdHlw
ZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAppbmRleCA5
OTAxNDI2MWNiODJlOWRhMjBiOWUwM2Y4ZGVkYzIyNTY4M2MxMmVhLi43YTYzNzhiMDRjYjRhZDg4
MjExYTBhNGFjYTg4YWZkODgzMjdjZWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCkBAIC01
MCwxNSArNTAsMTIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRURpc3BsYWNlbWVudE1hcChD
aGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5cGUg
eUNoYW5uZWxTZWxlY3RvciwgZmxvYXQpOwogCi0gICAgaW50IHhDaGFubmVsSW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX3hDaGFubmVsU2VsZWN0b3IgLSAxOyB9Ci0gICAgaW50IHlDaGFubmVsSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX3lDaGFubmVsU2VsZWN0b3IgLSAxOyB9Ci0KLSAgICB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0
QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQor
ICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwog
CiAgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVm
ZmVjdCosIGNvbnN0IGludCkgb3ZlcnJpZGU7CiAKLSAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKKyAgICB2b2lkIGRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3Qo
ZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQogCiAgICAgV1RGOjpUZXh0U3Ry
ZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0
aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCBiNjJhYjY4
NGNkOTFlZmM3N2YxOGExNjRlOTVhNDU5NGZjNzY4NThlLi5hYWIyNDhkMTQ4MDJmYjY3NTdhZTNh
NTlhNDNlNDYyOTNhZmMxODU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0yMyw2ICsyMyw3IEBA
CiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJs
dXIuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVy
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgpAQCAtNjksMTggKzcwLDI4IEBAIHZvaWQgRkVE
cm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRl
cikKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFp
bnRSZWN0KSk7CiB9CiAKLWJvb2wgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIpCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVEcm9wU2hh
ZG93U29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgor
Y2xhc3MgRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENv
bmNyZXRlQXBwbGllcjxGRURyb3BTaGFkb3c+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZm
ZWN0Q29uY3JldGVBcHBsaWVyPEZFRHJvcFNoYWRvdz47CisKK3B1YmxpYzoKKyAgICB1c2luZyBC
YXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCitib29sIEZFRHJvcFNo
YWRvd1NvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZp
bHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIEZpbHRlckVmZmVjdCogaW4g
PSBpbnB1dEVmZmVjdCgwKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBd
LmdldCgpOwogCi0gICAgYXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7Cisg
ICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAg
aWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRTaXpl
IGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX3N0ZFgsIG1f
c3RkWSB9KTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2Nh
bGUoeyBtX2R4LCBtX2R5IH0pOworICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRl
ci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3Quc3RkRGV2aWF0aW9uWCgpLCBtX2VmZmVj
dC5zdGREZXZpYXRpb25ZKCkgfSk7CisgICAgRmxvYXRTaXplIG9mZnNldCA9IGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3QuZHgoKSwgbV9lZmZlY3QuZHkoKSB9KTsKIAotICAg
IEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+
YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24gPSBtX2Vm
ZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
ICAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQoZHJhd2luZ1JlZ2lvbik7CiAg
ICAgZHJhd2luZ1JlZ2lvbldpdGhPZmZzZXQubW92ZShvZmZzZXQpOwogCkBAIC04OSwxMyArMTAw
LDEzIEBAIGJvb2wgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmls
dGVyJiBmaWx0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEdyYXBoaWNzQ29udGV4
dCYgcmVzdWx0Q29udGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7Ci0gICAgcmVzdWx0Q29u
dGV4dC5zZXRBbHBoYShtX3NoYWRvd09wYWNpdHkpOworICAgIHJlc3VsdENvbnRleHQuc2V0QWxw
aGEobV9lZmZlY3Quc2hhZG93T3BhY2l0eSgpKTsKICAgICByZXN1bHRDb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcigqc291cmNlSW1hZ2UsIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KTsKICAgICByZXN1
bHRDb250ZXh0LnNldEFscGhhKDEpOwogCi0gICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJs
dXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dDb2xvcik7CisgICAgU2hhZG93Qmx1ciBjb250ZXh0
U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9lZmZlY3Quc2hhZG93Q29sb3IoKSk7CiAKLSAg
ICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIHJlc3VsdENvbG9yU3BhY2UoKSB9OworICAg
IFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpSR0JBOCwgbV9lZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgp
IH07CiAgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT50cnVu
Y2F0ZWRMb2dpY2FsU2l6ZSgpKTsKICAgICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2Ut
PmdldFBpeGVsQnVmZmVyKGZvcm1hdCwgc2hhZG93QXJlYSk7CiAgICAgaWYgKCFwaXhlbEJ1ZmZl
cikKQEAgLTEwNywxNCArMTE4LDE4IEBAIGJvb2wgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVs
QnVmZmVyKCpwaXhlbEJ1ZmZlciwgc2hhZG93QXJlYSk7CiAKICAgICByZXN1bHRDb250ZXh0LnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwotICAgIHJl
c3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWlu
dFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKKyAgICByZXN1bHRDb250ZXh0LmZpbGxS
ZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCku
c2l6ZSgpKSwgbV9lZmZlY3Quc2hhZG93Q29sb3IoKSk7CiAgICAgcmVzdWx0Q29udGV4dC5zZXRD
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3Zlcik7CiAK
ICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqc291cmNlSW1hZ2Us
IGRyYXdpbmdSZWdpb24pOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVEcm9wU2hh
ZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAg
cmV0dXJuIEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBp
bnB1dEVmZmVjdHMoKSk7Cit9CisgICAgCiBJbnRPdXRzZXRzIEZFRHJvcFNoYWRvdzo6b3V0c2V0
cygpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBvdXRzZXRTaXplID0gRkVHYXVzc2lhbkJsdXI6OmNh
bGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IDI4MDli
NGIxNzVkMzI1NWQyMTA3NDk5MTZlYjNlZDA1MDEzNTY1YTUuLjk4OThjNzM3NmY2NWYyZTExNzVj
MWE3ODFjNjRlZWY4MzI0NmFlYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1
ZGUgIkZFRmxvb2QuaCIKIAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgorI2luY2x1
ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KQEAgLTU4LDE4ICs1OSwzMyBAQCBib29sIEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9h
dCBmbG9vZE9wYWNpdHkpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRkVGbG9vZDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCisvLyBGSVhNRTogTW92ZSB0aGUgY2xh
c3MgRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVh
ZGVyIGZpbGVzLgorY2xhc3MgRkVGbG9vZFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJF
ZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVGbG9vZD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJF
ZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVGbG9vZD47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNl
OjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZl
Y3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCitib29sIEZFRmxvb2RTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3Rv
ciYpCiB7Ci0gICAgYXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAg
YXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYg
KCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBjb2xvciA9
IGZsb29kQ29sb3IoKS5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9vZE9wYWNpdHkoKSk7
Ci0gICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNvbG9yKTsKKyAgICBhdXRvIGNvbG9y
ID0gbV9lZmZlY3QuZmxvb2RDb2xvcigpLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KG1fZWZm
ZWN0LmZsb29kT3BhY2l0eSgpKTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmZpbGxSZWN0
KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6
ZSgpKSwgY29sb3IpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVGbG9vZDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBG
RUZsb29kU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygp
KTsKK30KKwogVGV4dFN0cmVhbSYgRkVGbG9vZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewog
ICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlRmxvb2QiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRl
eCA0YzVmYWIwMWEzMzk1N2U4ZmU5MjE1NmQ1MDc5MTY3ZDRiZTljMGY5Li5kYjM1OTA4ZjRmNGY4
OWE0NThkNzliYzMwMWYxMjhhYzU1OTI5MTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAt
MjgsMzAgKzI4LDE1MCBAQAogCiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXJORU9OLmgiCiAjaW5j
bHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCisjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAK
ICNpZiBVU0UoQUNDRUxFUkFURSkKICNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4K
LSNlbmRpZgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2Vsc2UK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitSZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5CbHVyOjpjcmVh
dGUoZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoreworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEZFR2F1c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2RlKSk7Cit9CisKK0ZF
R2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihmbG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5
cGUgZWRnZU1vZGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUdh
dXNzaWFuQmx1cikKKyAgICAsIG1fc3RkWCh4KQorICAgICwgbV9zdGRZKHkpCisgICAgLCBtX2Vk
Z2VNb2RlKGVkZ2VNb2RlKQoreworfQorCit2b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZp
YXRpb25YKGZsb2F0IHgpCit7CisgICAgbV9zdGRYID0geDsKK30KKwordm9pZCBGRUdhdXNzaWFu
Qmx1cjo6c2V0U3RkRGV2aWF0aW9uWShmbG9hdCB5KQoreworICAgIG1fc3RkWSA9IHk7Cit9CisK
K3ZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkK
K3sKKyAgICBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7Cit9CiAKIHN0YXRpYyBpbmxpbmUgZmxvYXQg
Z2F1c3NpYW5LZXJuZWxGYWN0b3IoKQogewogICAgIHJldHVybiAzIC8gNC5mICogc3FydGYoMiAq
IHBpRmxvYXQpOwogfQogCi1zdGF0aWMgY29uc3QgaW50IGdNYXhLZXJuZWxTaXplID0gNTAwOwor
c3RhdGljIGludCBjbGFtcGVkVG9LZXJuZWxTaXplKGZsb2F0IHZhbHVlKQoreworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbWF4S2VybmVsU2l6ZSA9IDUwMDsKKworICAgIC8vIExpbWl0
IHRoZSBrZXJuZWwgc2l6ZSB0byA1MDAuIEEgYmlnZ2VyIHJhZGl1cyB3b24ndCBtYWtlIGEgYmln
IGRpZmZlcmVuY2UgZm9yIHRoZSByZXN1bHQgaW1hZ2UgYnV0CisgICAgLy8gaW5mbGF0ZXMgdGhl
IGFic29sdXRlIHBhaW50IHJlY3QgdG9vIG11Y2guIFRoaXMgaXMgY29tcGF0aWJsZSB3aXRoIEZp
cmVmb3gnIGJlaGF2aW9yLgorICAgIHVuc2lnbmVkIHNpemUgPSBzdGQ6Om1heDx1bnNpZ25lZD4o
Miwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZsb29yZih2YWx1ZSAqIGdhdXNzaWFuS2VybmVsRmFj
dG9yKCkgKyAwLjVmKSkpOworICAgIHJldHVybiBjbGFtcFRvPGludD4oc3RkOjptaW4oc2l6ZSwg
bWF4S2VybmVsU2l6ZSkpOworfQorICAgIAorSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3Vs
YXRlVW5zY2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCit7CisgICAgQVNT
RVJUKHN0ZERldmlhdGlvbi53aWR0aCgpID49IDAgJiYgc3RkRGV2aWF0aW9uLmhlaWdodCgpID49
IDApOworICAgIEludFNpemUga2VybmVsU2l6ZTsKIAotbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IGlmIChzdGREZXZpYXRpb24ud2lkdGgoKSkKKyAgICAgICAga2VybmVsU2l6ZS5zZXRXaWR0aChj
bGFtcGVkVG9LZXJuZWxTaXplKHN0ZERldmlhdGlvbi53aWR0aCgpKSk7CisKKyAgICBpZiAoc3Rk
RGV2aWF0aW9uLmhlaWdodCgpKQorICAgICAgICBrZXJuZWxTaXplLnNldEhlaWdodChjbGFtcGVk
VG9LZXJuZWxTaXplKHN0ZERldmlhdGlvbi5oZWlnaHQoKSkpOworCisgICAgcmV0dXJuIGtlcm5l
bFNpemU7Cit9CisKK0ludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUo
Y29uc3QgRmlsdGVyJiBmaWx0ZXIsIEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCit7CisgICAgcmV0
dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2Fs
ZShzdGREZXZpYXRpb24pKTsKK30KKworSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
T3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQoreworICAgIGF1dG8ga2VybmVsU2l6
ZSA9IGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShzdGREZXZpYXRpb24pOworCisgICAgLy8g
V2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwg
YmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCisgICAgcmV0dXJuIHsgMyAqIGtl
cm5lbFNpemUud2lkdGgoKSAvIDIsIDMgKiBrZXJuZWxTaXplLmhlaWdodCgpIC8gMiB9OworfQor
Cit2b2lkIEZFR2F1c3NpYW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBG
aWx0ZXImIGZpbHRlcikKK3sKKyAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJu
ZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKworICAgIEZsb2F0UmVjdCBhYnNv
bHV0ZVBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOworICAg
IC8vIEVkZ2UgbW9kZXMgb3RoZXIgdGhhbiAnbm9uZScgZG8gbm90IGluZmxhdGUgdGhlIGFmZmVj
dGVkIHBhaW50IHJlY3QuCisgICAgaWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkgewor
ICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFp
bnRSZWN0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSB0YWtlIHRoZSBo
YWxmIGtlcm5lbCBzaXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1
biBib3ggYmx1ciB0aHJlZSB0aW1lcy4KKyAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgz
ICoga2VybmVsU2l6ZS53aWR0aCgpICogMC41Zik7CisgICAgYWJzb2x1dGVQYWludFJlY3QuaW5m
bGF0ZVkoMyAqIGtlcm5lbFNpemUuaGVpZ2h0KCkgKiAwLjVmKTsKKworICAgIGlmIChjbGlwc1Rv
Qm91bmRzKCkpCisgICAgICAgIGFic29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RS
ZWN0KCkpOworICAgIGVsc2UKKyAgICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUobWF4RWZm
ZWN0UmVjdCgpKTsKKworICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3Qo
YWJzb2x1dGVQYWludFJlY3QpKTsKK30KKworLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFR2F1
c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZp
bGVzLgorY2xhc3MgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVy
RWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFR2F1c3NpYW5CbHVyPiB7CisgICAgdXNpbmcgQmFzZSA9
IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUdhdXNzaWFuQmx1cj47CisKK3B1YmxpYzoK
KyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBj
b25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7CisgICAgICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gaW9QaXhlbEFycmF5OworICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IHRtcFBpeGVsQXJyYXk7CisgICAgICAgIGludCB3aWR0aDsKKyAgICAgICAgaW50IGhlaWdo
dDsKKyAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVg7CisgICAgICAgIHVuc2lnbmVkIGtlcm5l
bFNpemVZOworICAgICAgICBib29sIGlzQWxwaGFJbWFnZTsKKyAgICAgICAgRWRnZU1vZGVUeXBl
IGVkZ2VNb2RlOworICAgIH07CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQga2VybmVsUG9zaXRp
b24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGludCYgZGVsdGFMZWZ0LCBp
bnQmIGRlbHRhUmlnaHQpOwogCi1pbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0
ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdo
dCkKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckFscGhhT25seShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJy
YXksIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwg
aW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdodCwgY29u
c3QgaW50JiBtYXhLZXJuZWxTaXplKTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1cihj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkm
IGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwgaW50
IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdo
dCwgYm9vbCBhbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOworCisgICAgc3RhdGljIGlubGluZSB2
b2lkIGJveEJsdXJBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4
Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplLCBpbnQgc3RyaWRl
LCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQpOworICAgIHN0YXRpYyBpbmxpbmUg
dm9pZCBib3hCbHVyVW5hY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVp
bnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWdu
ZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUsIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0Fs
cGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1
ckdlbmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYg
dG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZ
LCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOwor
ICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyV29ya2VyKEFwcGx5UGFyYW1ldGVycyopOwor
CisgICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5UGxhdGZvcm0oVWludDhDbGFtcGVkQXJyYXkm
IGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2Vy
bmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wg
aXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOworfTsKKworaW5saW5lIHZvaWQgRkVHYXVzc2lh
bkJsdXJTb2Z0d2FyZUFwcGxpZXI6Omtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1
bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0YVJpZ2h0KQogewogICAg
IC8vIENoZWNrIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVHYXVzc2lh
bkJsdXJFbGVtZW50IGZvciBkZXRhaWxzLgogICAgIHN3aXRjaCAoYmx1ckl0ZXJhdGlvbikgewpA
QCAtNzksMzcgKzE5OSw4IEBAIGlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVySXRl
cmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwKICAgICB9CiB9CiAKLVJl
ZjxGRUdhdXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5
LCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVH
YXVzc2lhbkJsdXIoeCwgeSwgZWRnZU1vZGUpKTsKLX0KLQotRkVHYXVzc2lhbkJsdXI6OkZFR2F1
c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLSAgICA6
IEZpbHRlckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFR2F1c3NpYW5CbHVyKQotICAgICwg
bV9zdGRYKHgpCi0gICAgLCBtX3N0ZFkoeSkKLSAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUpCi17
Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgoZmxvYXQgeCkKLXsK
LSAgICBtX3N0ZFggPSB4OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRp
b25ZKGZsb2F0IHkpCi17Ci0gICAgbV9zdGRZID0geTsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1
cjo6c2V0RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewotICAgIG1fZWRnZU1vZGUg
PSBlZGdlTW9kZTsKLX0KLQogLy8gVGhpcyBmdW5jdGlvbiBvbmx5IG9wZXJhdGVzIG9uIEFscGhh
IGNoYW5uZWwuCi1pbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwK
LSAgICB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUs
IGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNv
bnN0IGludCYgbWF4S2VybmVsU2l6ZSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdh
cmVBcHBsaWVyOjpib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQ
aXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgs
IGludCYgZHhMZWZ0LCBpbnQmIGR4UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUs
IGludCYgZWZmZWN0V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5l
bFNpemUpCiB7CiAgICAgY29uc3QgdWludDhfdCogc3JjRGF0YSA9IHNyY1BpeGVsQXJyYXkuZGF0
YSgpOwogICAgIHVpbnQ4X3QqIGRzdERhdGEgPSBkc3RQaXhlbEFycmF5LmRhdGEoKTsKQEAgLTE0
OSw4ICsyNDAsNyBAQCBpbmxpbmUgdm9pZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZQogICAgIH0KIH0KIAotaW5saW5l
IHZvaWQgYm94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWlu
dDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksCi0gICAgdW5zaWduZWQgZHgsIGludCBkeExl
ZnQsIGludCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdp
ZHRoLCBpbnQgZWZmZWN0SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdl
TW9kZSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVy
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJh
eSYgZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBp
bnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVp
Z2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKICAgICBjb25z
dCBpbnQgbWF4S2VybmVsU2l6ZSA9IHN0ZDo6bWluKGR4UmlnaHQsIGVmZmVjdFdpZHRoKTsKICAg
ICBpZiAoYWxwaGFJbWFnZSkKQEAgLTI4MCw3ICszNzAsNyBAQCBpbmxpbmUgdm9pZCBib3hCbHVy
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJh
eSYgZAogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCi1pbmxpbmUgdm9pZCBhY2NlbGVyYXRlQm94
Qmx1cihVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1w
QnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplLCBpbnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lkdGgs
IGludCBlZmZlY3RIZWlnaHQpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBw
bGllcjo6Ym94Qmx1ckFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWlu
dDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJp
ZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCkKIHsKICAgICBpZiAoIWlvQnVm
ZmVyLmRhdGEoKSB8fCAhdGVtcEJ1ZmZlci5kYXRhKCkpIHsKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC0zMjYsNyArNDE2LDcgQEAgaW5saW5lIHZvaWQgYWNjZWxlcmF0ZUJveEJs
dXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGUKIH0K
ICNlbmRpZgogCi1pbmxpbmUgdm9pZCBzdGFuZGFyZEJveEJsdXIoVWludDhDbGFtcGVkQXJyYXkm
IGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVs
U2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJbnRTaXplJiBwYWludFNp
emUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCitpbmxpbmUgdm9p
ZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQoVWlu
dDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwg
dW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJ
bnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1v
ZGUpCiB7CiAgICAgaW50IGR4TGVmdCA9IDA7CiAgICAgaW50IGR4UmlnaHQgPSAwOwpAQCAtMzcx
LDM1ICs0NjEsMzkgQEAgaW5saW5lIHZvaWQgc3RhbmRhcmRCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFy
cmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXAKICAgICB9CiB9CiAKLWlubGlu
ZSB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25l
ZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSkK
K2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyR2VuZXJp
YyhVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhl
bEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNp
emUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkK
IHsKICAgICBpbnQgc3RyaWRlID0gNCAqIHBhaW50U2l6ZS53aWR0aCgpOwogCiAjaWYgVVNFKEFD
Q0VMRVJBVEUpCi0gICAgaWYgKGtlcm5lbFNpemVYID09IGtlcm5lbFNpemVZICYmIChtX2VkZ2VN
b2RlID09IEVER0VNT0RFX05PTkUgfHwgbV9lZGdlTW9kZSA9PSBFREdFTU9ERV9EVVBMSUNBVEUp
KSB7Ci0gICAgICAgIGFjY2VsZXJhdGVCb3hCbHVyKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBr
ZXJuZWxTaXplWCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRTaXplLmhlaWdodCgp
KTsKKyAgICBpZiAoa2VybmVsU2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKGVkZ2VNb2RlID09IEVE
R0VNT0RFX05PTkUgfHwgZWRnZU1vZGUgPT0gRURHRU1PREVfRFVQTElDQVRFKSkgeworICAgICAg
ICBib3hCbHVyQWNjZWxlcmF0ZWQoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVY
LCBzdHJpZGUsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAKLSAgICBzdGFuZGFyZEJveEJsdXIoaW9CdWZmZXIs
IHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWludFNp
emUsIGlzQWxwaGFJbWFnZSgpLCBtX2VkZ2VNb2RlKTsKKyAgICBib3hCbHVyVW5hY2NlbGVyYXRl
ZChpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBzdHJp
ZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7CiB9CiAKLXZvaWQgRkVHYXVz
c2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBh
cmFtZXRlcnMpCisjaWYgIVVTRShBQ0NFTEVSQVRFKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJs
dXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJXb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbWV0
ZXJzKQogewogICAgIEludFNpemUgcGFpbnRTaXplKHBhcmFtZXRlcnMtPndpZHRoLCBwYXJhbWV0
ZXJzLT5oZWlnaHQpOwotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVy
aWMoKnBhcmFtZXRlcnMtPmlvUGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnRtcFBpeGVsQXJyYXks
IHBhcmFtZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWSwgcGFpbnRT
aXplKTsKKyAgICBib3hCbHVyR2VuZXJpYygqcGFyYW1ldGVycy0+aW9QaXhlbEFycmF5LCAqcGFy
YW1ldGVycy0+dG1wUGl4ZWxBcnJheSwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVgsIHBhcmFtZXRl
cnMtPmtlcm5lbFNpemVZLCBwYWludFNpemUsIHBhcmFtZXRlcnMtPmlzQWxwaGFJbWFnZSwgcGFy
YW1ldGVycy0+ZWRnZU1vZGUpOwogfQorI2VuZGlmCiAKLWlubGluZSB2b2lkIEZFR2F1c3NpYW5C
bHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFt
cGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBr
ZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJs
dXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oVWludDhDbGFtcGVkQXJyYXkmIGlvQnVm
ZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6
ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBo
YUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7CiAjaWYgIVVTRShBQ0NFTEVSQVRFKQog
ICAgIGludCBzY2FubGluZSA9IDQgKiBwYWludFNpemUud2lkdGgoKTsKICAgICBpbnQgZXh0cmFI
ZWlnaHQgPSAzICoga2VybmVsU2l6ZVkgKiAwLjVmOwotICAgIGludCBvcHRpbWFsVGhyZWFkTnVt
YmVyID0gKHBhaW50U2l6ZS53aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpKSAvIChzX21pbmlt
YWxSZWN0RGltZW5zaW9uICsgZXh0cmFIZWlnaHQgKiBwYWludFNpemUud2lkdGgoKSk7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIGludCBtaW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsg
Ly8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKyAgICBpbnQgb3B0aW1h
bFRocmVhZE51bWJlciA9IChwYWludFNpemUud2lkdGgoKSAqIHBhaW50U2l6ZS5oZWlnaHQoKSkg
LyAobWluaW1hbFJlY3REaW1lbnNpb24gKyBleHRyYUhlaWdodCAqIHBhaW50U2l6ZS53aWR0aCgp
KTsKIAogICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewotICAgICAgICBQYXJhbGxl
bEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmcGxhdGZvcm1BcHBs
eVdvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAgIFBhcmFsbGVsSm9iczxBcHBs
eVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYm94Qmx1cldvcmtlciwgb3B0aW1hbFRocmVhZE51
bWJlcik7CiAKICAgICAgICAgaW50IGpvYnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7
CiAgICAgICAgIGlmIChqb2JzID4gMSkgewpAQCAtNDEwLDggKzUwNCw3IEBAIGlubGluZSB2b2lk
IEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZl
ciwgVWludDhDbGFtCiAKICAgICAgICAgICAgIGludCBjdXJyZW50WSA9IDA7CiAgICAgICAgICAg
ICBmb3IgKGludCBqb2IgPSAwOyBqb2IgPCBqb2JzOyBqb2IrKykgewotICAgICAgICAgICAgICAg
IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVy
KGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9IHRoaXM7CisgICAgICAgICAg
ICAgICAgQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpv
Yik7CiAKICAgICAgICAgICAgICAgICBpbnQgc3RhcnRZID0gIWpvYiA/IDAgOiBjdXJyZW50WSAt
IGV4dHJhSGVpZ2h0OwogICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRo
RXh0cmEgPyBibG9ja0hlaWdodCArIDEgOiBibG9ja0hlaWdodDsKQEAgLTQzMSw2ICs1MjQsOCBA
QCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseShVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbQogICAgICAgICAgICAgICAgIHBhcmFtcy5oZWlnaHQg
PSBlbmRZIC0gc3RhcnRZOwogICAgICAgICAgICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWCA9IGtl
cm5lbFNpemVYOwogICAgICAgICAgICAgICAgIHBhcmFtcy5rZXJuZWxTaXplWSA9IGtlcm5lbFNp
emVZOworICAgICAgICAgICAgICAgIHBhcmFtcy5pc0FscGhhSW1hZ2UgPSBpc0FscGhhSW1hZ2U7
CisgICAgICAgICAgICAgICAgcGFyYW1zLmVkZ2VNb2RlID0gZWRnZU1vZGU7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIHBhcmFsbGVsSm9icy5leGVjdXRlKCk7CkBAIC00MzgsNyArNTMz
LDcgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkoVWludDhDbGFt
cGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW0KICAgICAgICAgICAgIC8vIENvcHkgdG9nZXRo
ZXIgdGhlIHBhcnRzIG9mIHRoZSBpbWFnZS4KICAgICAgICAgICAgIGN1cnJlbnRZID0gMDsKICAg
ICAgICAgICAgIGZvciAoaW50IGpvYiA9IDE7IGpvYiA8IGpvYnM7IGpvYisrKSB7Ci0gICAgICAg
ICAgICAgICAgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5w
YXJhbWV0ZXIoam9iKTsKKyAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9
IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKICAgICAgICAgICAgICAgICBpbnQgc291cmNl
T2Zmc2V0OwogICAgICAgICAgICAgICAgIGludCBkZXN0aW5hdGlvbk9mZnNldDsKICAgICAgICAg
ICAgICAgICBpbnQgc2l6ZTsKQEAgLTQ1OCw5NCArNTUzLDQxIEBAIGlubGluZSB2b2lkIEZFR2F1
c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWlu
dDhDbGFtCiAjZW5kaWYKIAogICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNo
b3VsZCBoYXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCi0gICAgcGxhdGZvcm1B
cHBseUdlbmVyaWMoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxT
aXplWSwgcGFpbnRTaXplKTsKLX0KLQotc3RhdGljIGludCBjbGFtcGVkVG9LZXJuZWxTaXplKGZs
b2F0IHZhbHVlKQotewotICAgIC8vIExpbWl0IHRoZSBrZXJuZWwgc2l6ZSB0byA1MDAuIEEgYmln
Z2VyIHJhZGl1cyB3b24ndCBtYWtlIGEgYmlnIGRpZmZlcmVuY2UgZm9yIHRoZSByZXN1bHQgaW1h
Z2UgYnV0Ci0gICAgLy8gaW5mbGF0ZXMgdGhlIGFic29sdXRlIHBhaW50IHJlY3QgdG9vIG11Y2gu
IFRoaXMgaXMgY29tcGF0aWJsZSB3aXRoIEZpcmVmb3gnIGJlaGF2aW9yLgotICAgIHVuc2lnbmVk
IHNpemUgPSBzdGQ6Om1heDx1bnNpZ25lZD4oMiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZsb29y
Zih2YWx1ZSAqIGdhdXNzaWFuS2VybmVsRmFjdG9yKCkgKyAwLjVmKSkpOwotICAgIHJldHVybiBj
bGFtcFRvPGludD4oc3RkOjptaW4oc2l6ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdNYXhLZXJu
ZWxTaXplKSkpOwotfQotICAgIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlVW5z
Y2FsZWRLZXJuZWxTaXplKEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCi17Ci0gICAgQVNTRVJUKHN0
ZERldmlhdGlvbi53aWR0aCgpID49IDAgJiYgc3RkRGV2aWF0aW9uLmhlaWdodCgpID49IDApOwot
ICAgIEludFNpemUga2VybmVsU2l6ZTsKLQotICAgIGlmIChzdGREZXZpYXRpb24ud2lkdGgoKSkK
LSAgICAgICAga2VybmVsU2l6ZS5zZXRXaWR0aChjbGFtcGVkVG9LZXJuZWxTaXplKHN0ZERldmlh
dGlvbi53aWR0aCgpKSk7Ci0KLSAgICBpZiAoc3RkRGV2aWF0aW9uLmhlaWdodCgpKQotICAgICAg
ICBrZXJuZWxTaXplLnNldEhlaWdodChjbGFtcGVkVG9LZXJuZWxTaXplKHN0ZERldmlhdGlvbi5o
ZWlnaHQoKSkpOwotCi0gICAgcmV0dXJuIGtlcm5lbFNpemU7CisgICAgYm94Qmx1ckdlbmVyaWMo
aW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBrZXJuZWxTaXplWSwgcGFpbnRT
aXplLCBpc0FscGhhSW1hZ2UsIGVkZ2VNb2RlKTsKIH0KIAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1
cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRTaXplIHN0
ZERldmlhdGlvbikKK2Jvb2wgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNv
bnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0
cykKIHsKLSAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclNjYWxlKHN0ZERldmlhdGlvbikpOwotfQorICAgIEZpbHRlckVmZmVjdCogaW4g
PSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CiAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1
bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKLXsKLSAgICBhdXRvIGtlcm5l
bFNpemUgPSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoc3RkRGV2aWF0aW9uKTsKLQotICAg
IC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRpcGx5IGl0IHdpdGggdGhy
ZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgotICAgIHJldHVybiB7IDMg
KiBrZXJuZWxTaXplLndpZHRoKCkgLyAyLCAzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAvIDIgfTsK
LX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCi17Ci0gICAgSW50U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRl
S2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0KLSAgICBGbG9hdFJlY3Qg
YWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQYWludFJlY3QoKTsK
LSAgICAvLyBFZGdlIG1vZGVzIG90aGVyIHRoYW4gJ25vbmUnIGRvIG5vdCBpbmZsYXRlIHRoZSBh
ZmZlY3RlZCBwYWludCByZWN0LgotICAgIGlmIChtX2VkZ2VNb2RlICE9IEVER0VNT0RFX05PTkUp
IHsKLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0
ZVBhaW50UmVjdCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgdGFrZSB0
aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3
ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCi0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0
ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYpOwotICAgIGFic29sdXRlUGFpbnRSZWN0
LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgpICogMC41Zik7Ci0KLSAgICBpZiAoY2xp
cHNUb0JvdW5kcygpKQotICAgICAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZm
ZWN0UmVjdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGFic29sdXRlUGFpbnRSZWN0LnVuaXRlKG1h
eEVmZmVjdFJlY3QoKSk7Ci0KLSAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci19Ci0KLWJvb2wgRkVHYXVzc2lhbkJsdXI6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKLXsKLSAgICBGaWx0ZXJFZmZl
Y3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0KLSAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIgPSBwaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1
ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBp
ZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworICAgIG1fZWZmZWN0LnNldElz
QWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7CisgICAgYXV0byBlZmZlY3REcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAg
ICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwgZWZm
ZWN0RHJhd2luZ1JlY3QpOwotICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkpCisgICAgaWYgKCFt
X2VmZmVjdC5zdGREZXZpYXRpb25YKCkgJiYgIW1fZWZmZWN0LnN0ZERldmlhdGlvblkoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVL
ZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0ZFgsIG1fc3RkWSB9KTsKKyAgICBhdXRvIGtlcm5lbFNp
emUgPSBtX2VmZmVjdC5jYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX2VmZmVjdC5zdGRE
ZXZpYXRpb25YKCksIG1fZWZmZWN0LnN0ZERldmlhdGlvblkoKSB9KTsKIAotICAgIEludFNpemUg
cGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CisgICAgSW50U2l6ZSBwYWlu
dFNpemUgPSBtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKICAgICBhdXRvIHRt
cEltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKHBh
aW50U2l6ZS5hcmVhKCkgKiA0KTsKICAgICBpZiAoIXRtcEltYWdlRGF0YSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIHBsYXRmb3JtQXBwbHkoZGVzdGluYXRpb25QaXhl
bEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVp
Z2h0KCksIHBhaW50U2l6ZSk7CisgICAgYXBwbHlQbGF0Zm9ybShkZXN0aW5hdGlvblBpeGVsQXJy
YXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQo
KSwgcGFpbnRTaXplLCBtX2VmZmVjdC5pc0FscGhhSW1hZ2UoKSwgbV9lZmZlY3QuZWRnZU1vZGUo
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3Rz
KCkpOworfQorCiBJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKIHsK
ICAgICBJbnRTaXplIG91dHNldFNpemUgPSBjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9zdGRYLCBt
X3N0ZFkgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKaW5kZXggZDc0YmRhYTcyZWQzMDRmNWI4MDE3N2Fk
NmNjYTc3NWE1YjQ5MzcxNy4uNjVhYTZlMTg4OTdmYThjYzk3NjlkMWU1NTdkN2QyNmY1ZTVjYTIy
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuaApAQCAtNDYsMjkgKzQ2LDEzIEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgRkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlKTsK
IAotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEw
MDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIHN0cnVj
dCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7Ci0gICAgICAgIEZFR2F1c3NpYW5CbHVyKiBmaWx0
ZXI7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gaW9QaXhlbEFycmF5OwotICAg
ICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHRtcFBpeGVsQXJyYXk7Ci0gICAgICAgIGlu
dCB3aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgdW5zaWduZWQga2VybmVsU2l6
ZVg7Ci0gICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVZOwotICAgIH07Ci0KICAgICB2b2lkIGRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAg
Ym9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7Ci0KICAg
ICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1BcHBs
eVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwotICAgIHZvaWQgcGxhdGZvcm1BcHBs
eShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVm
ZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUm
IHBhaW50U2l6ZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhVaW50OENsYW1wZWRB
cnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBr
ZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSk7Cisg
ICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVh
bSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBmbG9hdCBtX3N0
ZFg7CiAgICAgZmxvYXQgbV9zdGRZOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKaW5kZXggM2E3OGUwOGU0NDFkMTBh
MmU5MzYxNzJiMjJkNzA2MjdhZTA3NzRjMC4uMWFkYzBmMzczYTQ2MGRmYmQyYWNiZmI5MDIwODUz
ZGFjY2I0NTYzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCkBAIC0zMCwxNiArMzAsMTUgQEAKIAogI2luY2x1
ZGUgIkNvbG9yQ29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZFTGlnaHRpbmdORU9OLmgiCisjaW5j
bHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAj
aW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVMaWdodGluZzo6RkVMaWdodGluZyhMaWdodGluZ1R5
cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFj
ZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZs
b2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJu
ZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlLCBUeXBlIHR5cGUp
CitGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKFR5cGUgdHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5n
Q29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBz
cGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdo
dFNvdXJjZSkKICAgICA6IEZpbHRlckVmZmVjdCh0eXBlKQotICAgICwgbV9saWdodGluZ1R5cGUo
bGlnaHRpbmdUeXBlKQotICAgICwgbV9saWdodFNvdXJjZShXVEZNb3ZlKGxpZ2h0U291cmNlKSkK
ICAgICAsIG1fbGlnaHRpbmdDb2xvcihsaWdodGluZ0NvbG9yKQogICAgICwgbV9zdXJmYWNlU2Nh
bGUoc3VyZmFjZVNjYWxlKQogICAgICwgbV9kaWZmdXNlQ29uc3RhbnQoZGlmZnVzZUNvbnN0YW50
KQpAQCAtNDcsNiArNDYsNyBAQCBGRUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSBs
aWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbAogICAgICwgbV9zcGVj
dWxhckV4cG9uZW50KHNwZWN1bGFyRXhwb25lbnQpCiAgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhY
KGtlcm5lbFVuaXRMZW5ndGhYKQogICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWShrZXJuZWxVbml0
TGVuZ3RoWSkKKyAgICAsIG1fbGlnaHRTb3VyY2UoV1RGTW92ZShsaWdodFNvdXJjZSkpCiB7CiB9
CiAKQEAgLTg2LDE3ICs4NiwxMDUgQEAgYm9vbCBGRUxpZ2h0aW5nOjpzZXRLZXJuZWxVbml0TGVu
Z3RoWShmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rh
dGljIGNvbnN0ZXhwciBpbnQgY1BpeGVsU2l6ZSA9IDQ7Ci1zdGF0aWMgY29uc3RleHByIGludCBj
QWxwaGFDaGFubmVsT2Zmc2V0ID0gMzsKLXN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBjT3BhcXVl
QWxwaGEgPSBzdGF0aWNfY2FzdDx1aW50OF90PigweEZGKTsKKy8vIEZJWE1FOiBNb3ZlIHRoZSBj
bGFzcyBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVh
ZGVyIGZpbGVzLgorY2xhc3MgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0
ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVMaWdodGluZz4geworICAgIHVzaW5nIEJhc2UgPSBG
aWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVMaWdodGluZz47CisKK3B1YmxpYzoKKyAgICB1
c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBG
aWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgY1BpeGVsU2l6ZSA9IDQ7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBpbnQgY0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50OF90IGNPcGFxdWVBbHBoYSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDB4RkYpOworCisgICAg
Ly8gVGhlc2UgZmFjdG9ycyBhbmQgdGhlIG5vcm1hbCBjb2VmZmljaWVudHMgY29tZSBmcm9tIHRo
ZSB0YWJsZSB1bmRlciBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnQuCisgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9y
MWRpdjIgPSAtMSAvIDIuZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2
MyA9IC0xIC8gMy5mOworICAgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXY0ID0g
LTEgLyA0LmY7CisgICAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMmRpdjMgPSAtMiAv
IDMuZjsKKworICAgIHN0cnVjdCBBbHBoYVdpbmRvdyB7CisgICAgICAgIHVpbnQ4X3QgYWxwaGFb
M11bM10geyB9OworICAgIAorICAgICAgICAvLyBUaGUgaW1wbGVtZW50YXRpb25zIGFyZSBsaW5l
ZCB1cCB0byBtYWtlIGNvbXBhcmluZyBpbmRpY2VzIGVhc2llci4KKyAgICAgICAgdWludDhfdCB0
b3BMZWZ0KCkgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMF1bMF07IH0KKyAgICAg
ICAgdWludDhfdCBsZWZ0KCkgY29uc3QgICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMV1b
MF07IH0KKyAgICAgICAgdWludDhfdCBib3R0b21MZWZ0KCkgY29uc3QgICAgICAgICAgeyByZXR1
cm4gYWxwaGFbMl1bMF07IH0KKworICAgICAgICB1aW50OF90IHRvcCgpIGNvbnN0ICAgICAgICAg
ICAgICAgICB7IHJldHVybiBhbHBoYVswXVsxXTsgfQorICAgICAgICB1aW50OF90IGNlbnRlcigp
IGNvbnN0ICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVsxXTsgfQorICAgICAgICB1aW50
OF90IGJvdHRvbSgpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsyXVsxXTsgfQor
CisgICAgICAgIHZvaWQgc2V0VG9wKHVpbnQ4X3QgdmFsdWUpICAgICAgICAgIHsgYWxwaGFbMF1b
MV0gPSB2YWx1ZTsgfQorICAgICAgICB2b2lkIHNldENlbnRlcih1aW50OF90IHZhbHVlKSAgICAg
ICB7IGFscGhhWzFdWzFdID0gdmFsdWU7IH0KKyAgICAgICAgdm9pZCBzZXRCb3R0b20odWludDhf
dCB2YWx1ZSkgICAgICAgeyBhbHBoYVsyXVsxXSA9IHZhbHVlOyB9CisKKyAgICAgICAgdm9pZCBz
ZXRUb3BSaWdodCh1aW50OF90IHZhbHVlKSAgICAgeyBhbHBoYVswXVsyXSA9IHZhbHVlOyB9Cisg
ICAgICAgIHZvaWQgc2V0UmlnaHQodWludDhfdCB2YWx1ZSkgICAgICAgIHsgYWxwaGFbMV1bMl0g
PSB2YWx1ZTsgfQorICAgICAgICB2b2lkIHNldEJvdHRvbVJpZ2h0KHVpbnQ4X3QgdmFsdWUpICB7
IGFscGhhWzJdWzJdID0gdmFsdWU7IH0KKworICAgICAgICBzdGF0aWMgdm9pZCBzaGlmdFJvdyh1
aW50OF90IGFscGhhWzNdKQorICAgICAgICB7CisgICAgICAgICAgICBhbHBoYVswXSA9IGFscGhh
WzFdOworICAgICAgICAgICAgYWxwaGFbMV0gPSBhbHBoYVsyXTsKKyAgICAgICAgfQorICAgIAor
ICAgICAgICB2b2lkIHNoaWZ0KCkKKyAgICAgICAgeworICAgICAgICAgICAgc2hpZnRSb3coYWxw
aGFbMF0pOworICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMV0pOworICAgICAgICAgICAgc2hp
ZnRSb3coYWxwaGFbMl0pOworICAgICAgICB9CisgICAgfTsKKworICAgIHN0cnVjdCBMaWdodGlu
Z0RhdGEgeworICAgICAgICAvLyBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBvbmx5IHJlYWQtb25s
eSAoU01QIHNhZmUpIGRhdGEKKyAgICAgICAgRkVMaWdodGluZyogZWZmZWN0OworICAgICAgICBG
aWx0ZXJFZmZlY3Q6OlR5cGUgZmlsdGVyVHlwZTsKKyAgICAgICAgQ29sb3IgbGlnaHRpbmdDb2xv
cjsKKyAgICAgICAgZmxvYXQgc3VyZmFjZVNjYWxlOworICAgICAgICBmbG9hdCBkaWZmdXNlQ29u
c3RhbnQ7CisgICAgICAgIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQ7CisgICAgICAgIGZsb2F0IHNw
ZWN1bGFyRXhwb25lbnQ7CisgICAgICAgIGNvbnN0IExpZ2h0U291cmNlKiBsaWdodFNvdXJjZTsK
KyAgICAgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlKiBvcGVyYXRpbmdDb2xvclNwYWNl
OworCisgICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbHM7CisgICAgICAgIGludCB3aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAgaW50IHdpZHRoOworICAgICAgICBpbnQg
aGVpZ2h0OworCisgICAgICAgIGlubGluZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50IG9mZnNl
dCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIHRvcFJvd05vcm1hbChpbnQgb2Zmc2V0
KSBjb25zdDsKKyAgICAgICAgaW5saW5lIEludFNpemUgdG9wUmlnaHROb3JtYWwoaW50IG9mZnNl
dCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIGxlZnRDb2x1bW5Ob3JtYWwoaW50IG9m
ZnNldCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIGludGVyaW9yTm9ybWFsKGludCBv
ZmZzZXQsIEFscGhhV2luZG93JikgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIHJpZ2h0
Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAgICBpbmxpbmUgSW50U2l6ZSBi
b3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAgICBpbmxpbmUgSW50U2l6
ZSBib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRT
aXplIGJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgIH07CisKKyAgICBz
dHJ1Y3QgQXBwbHlQYXJhbWV0ZXJzIHsKKyAgICAgICAgTGlnaHRpbmdEYXRhIGRhdGE7CisgICAg
ICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOworICAgICAgICBpbnQg
eVN0YXJ0OworICAgICAgICBpbnQgeUVuZDsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgc2V0
UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdo
dFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9h
dCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yLCBmbG9hdCBhbHBoYSk7CisgICAgc3Rh
dGljIHZvaWQgc2V0UGl4ZWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3Qg
TGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwg
ZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3Rvcik7CiAKLS8vIFRoZXNlIGZhY3Rv
cnMgYW5kIHRoZSBub3JtYWwgY29lZmZpY2llbnRzIGNvbWUgZnJvbSB0aGUgdGFibGUgdW5kZXIg
aHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50Lgotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjIgPSAtMSAvIDIuZjsK
LXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYzID0gLTEgLyAzLmY7Ci1zdGF0aWMg
Y29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2NCA9IC0xIC8gNC5mOwotc3RhdGljIGNvbnN0ZXhw
ciBmbG9hdCBjRmFjdG9yMmRpdjMgPSAtMiAvIDMuZjsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBs
YXRmb3JtR2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNl
OjpQYWludGluZ0RhdGEmLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7CisgICAgc3RhdGljIHZvaWQg
YXBwbHlQbGF0Zm9ybUdlbmVyaWNXb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7CisgICAgc3RhdGlj
IHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGln
aHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm0o
Y29uc3QgTGlnaHRpbmdEYXRhJik7Cit9OwogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpM
aWdodGluZ0RhdGE6OnRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJbnRT
aXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6dG9wTGVmdE5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdAogewogICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAgICAgaW50IHJp
Z2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAgLTEwOSw3ICsxOTcsNyBAQCBpbmxpbmUgSW50U2l6
ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29u
c3QKICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6
OnRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoraW5saW5lIEludFNpemUgRkVMaWdodGlu
Z1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkg
Y29uc3QKIHsKICAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAgICAgaW50IGNlbnRl
ciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKQEAgLTEyNCw3ICsyMTIsNyBAQCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpM
aWdodGluZ0RhdGE6OnRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAK
LWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwo
aW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXI6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAg
ICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAg
LTEzNyw3ICsyMjUsNyBAQCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6
OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIElu
dFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZz
ZXQpIGNvbnN0CitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdo
dGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQg
Y2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwogICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5p
dGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0xNTMs
NyArMjQxLDcgQEAgaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0
Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNp
emUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0LCBB
bHBoYVdpbmRvdyYgYWxwaGFXaW5kb3cpIGNvbnN0CitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5n
U29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQs
IEFscGhhV2luZG93JiBhbHBoYVdpbmRvdykgY29uc3QKIHsKICAgICBpbnQgcmlnaHRBbHBoYU9m
ZnNldCA9IG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0OwogICAgIApA
QCAtMTgzLDcgKzI3MSw3IEBAIGlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0
YTo6aW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmCiAgICAgfTsKIH0KIAot
aW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdAoraW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllcjo6TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAog
ewogICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0g
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKICAgICBpbnQgY2VudGVyID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwpAQCAtMTk5LDcgKzI4Nyw3IEBAIGlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5n
RGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKICAgICB9OwogfQogCi1p
bmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnROb3JtYWwo
aW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogewog
ICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
QEAgLTIxMiw3ICszMDAsNyBAQCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0Rh
dGE6OmJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKICAgICB9OwogfQogCi1pbmxp
bmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdAoraW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6
TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBp
bnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAgLTIy
Nyw3ICszMTUsNyBAQCBpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJv
dHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAKLWlubGluZSBJbnRT
aXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNl
dCkgY29uc3QKK2lubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0
aW5nRGF0YTo6Ym90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQg
bGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAgLTI0MCwy
MSArMzI4LDE2IEBAIGlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90
dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKICAgICB9OwogfQogCi12b2lkIEZFTGln
aHRpbmc6OnNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29u
c3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHks
IGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IpCi17
Ci0gICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwg
ZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFsMkRWZWN0b3IsIGRhdGEucGl4ZWxzLT5pdGVtKG9mZnNl
dCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKLX0KLQotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhl
bEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGln
aHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0
IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFs
cGhhKQordm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpzZXRQaXhlbEludGVybmFsKGlu
dCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZs
b2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsMkRWZWN0b3IsIGZsb2F0IGFscGhhKQogewogICAg
IGZsb2F0IHogPSBhbHBoYSAqIGRhdGEuc3VyZmFjZVNjYWxlOwotICAgIExpZ2h0U291cmNlOjpD
b21wdXRlZExpZ2h0aW5nRGF0YSBsaWdodGluZ0RhdGEgPSBtX2xpZ2h0U291cmNlLT5jb21wdXRl
UGl4ZWxMaWdodGluZ0RhdGEocGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsKKyAgICBMaWdodFNvdXJj
ZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgbGlnaHRpbmdEYXRhID0gZGF0YS5saWdodFNvdXJjZS0+
Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKHBhaW50aW5nRGF0YSwgeCwgeSwgeik7CiAKICAgICBm
bG9hdCBsaWdodFN0cmVuZ3RoOwogICAgIGlmIChub3JtYWwyRFZlY3Rvci5pc1plcm8oKSkgewog
ICAgICAgICAvLyBOb3JtYWwgdmVjdG9yIGlzICgwLCAwLCAxKS4gVGhpcyBpcyBhIHF1aXRlIGZy
ZXF1ZW50IGNhc2UuCi0gICAgICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpE
aWZmdXNlTGlnaHRpbmcpCi0gICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29u
c3RhbnQgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueigpIC8gbGlnaHRpbmdEYXRhLmxpZ2h0
VmVjdG9yTGVuZ3RoOworICAgICAgICBpZiAoZGF0YS5lZmZlY3QtPmZpbHRlclR5cGUoKSA9PSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQorICAgICAgICAgICAgbGlnaHRT
dHJlbmd0aCA9IGRhdGEuZGlmZnVzZUNvbnN0YW50ICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9y
LnooKSAvIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aDsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHsKICAgICAgICAgICAgICAg
ICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueCgpLApAQCAtMjYyLDEwICszNDUsMTAgQEAgdm9p
ZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5n
RGF0YSYgZGF0YSwgY29uc3QgTGkKICAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRW
ZWN0b3IueigpICsgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoCiAgICAgICAgICAgICB9
OwogICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0b3Iu
bGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEpCi0gICAg
ICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIGhhbGZ3YXlW
ZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0aDsKKyAgICAgICAgICAgIGlmIChkYXRhLnNw
ZWN1bGFyRXhwb25lbnQgPT0gMSkKKyAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0
YS5zcGVjdWxhckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVu
Z3RoOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBt
X3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rv
ckxlbmd0aCwgbV9zcGVjdWxhckV4cG9uZW50KTsKKyAgICAgICAgICAgICAgICBsaWdodFN0cmVu
Z3RoID0gZGF0YS5zcGVjdWxhckNvbnN0YW50ICogcG93ZihoYWxmd2F5VmVjdG9yLnooKSAvIGhh
bGZ3YXlWZWN0b3JMZW5ndGgsIGRhdGEuc3BlY3VsYXJFeHBvbmVudCk7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgewogICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFsVmVjdG9yID0gewpAQCAtMjc1
LDggKzM1OCw4IEBAIHZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0
LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpCiAgICAgICAgIH07CiAgICAgICAg
IGZsb2F0IG5vcm1hbFZlY3Rvckxlbmd0aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKIAotICAg
ICAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQot
ICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogKG5vcm1hbFZl
Y3RvciAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICog
bGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgaWYgKGRhdGEuZWZmZWN0
LT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykK
KyAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VDb25zdGFudCAqIChub3Jt
YWxWZWN0b3IgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0
aCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSB7CiAgICAgICAgICAgICAgICAg
bGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngoKSwKQEAgLTI4NCwxMCArMzY3LDEwIEBAIHZvaWQg
RkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0Rh
dGEmIGRhdGEsIGNvbnN0IExpCiAgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVj
dG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aAogICAgICAgICAgICAgfTsK
ICAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxl
bmd0aCgpOwotICAgICAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAg
ICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVj
dG9yICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rv
ckxlbmd0aCk7CisgICAgICAgICAgICBpZiAoZGF0YS5zcGVjdWxhckV4cG9uZW50ID09IDEpCisg
ICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIChu
b3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxm
d2F5VmVjdG9yTGVuZ3RoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaWdo
dFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93Zigobm9ybWFsVmVjdG9yICogaGFs
ZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCks
IG1fc3BlY3VsYXJFeHBvbmVudCk7CisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRh
dGEuc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3Ip
IC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBkYXRhLnNwZWN1
bGFyRXhwb25lbnQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMDUsOCArMzg4LDEzIEBAIHZv
aWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGlu
Z0RhdGEmIGRhdGEsIGNvbnN0IExpCiAgICAgZGF0YS5waXhlbHMtPnNldFJhbmdlKHBpeGVsVmFs
dWUsIDMsIG9mZnNldCk7CiB9CiAKK3ZvaWQgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6c2V0
UGl4ZWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNv
dXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFj
dG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3RvcikKK3sKKyAgICBzZXRQ
aXhlbEludGVybmFsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCB5LCBmYWN0b3JYLCBm
YWN0b3JZLCBub3JtYWwyRFZlY3RvciwgZGF0YS5waXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOworfQorCiAvLyBUaGlzIGFwcGVhcnMgdG8gcmVhZCBmcm9tIGFuZCB3
cml0ZSB0byB0aGUgc2FtZSBwaXhlbCBidWZmZXIsIGJ1dCBpdCBvbmx5IHJlYWRzIHRoZSBhbHBo
YSBjaGFubmVsLCBhbmQgd3JpdGVzIHRoZSBub24tYWxwaGEgY2hhbm5lbHMuCi12b2lkIEZFTGln
aHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRh
LCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBzdGFy
dFksIGludCBlbmRZKQordm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRm
b3JtR2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3Vy
Y2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKIHsK
ICAgICAvLyBNYWtlIHN1cmUgc3RhcnRZIGlzID4gMCBzaW5jZSB3ZSByZWFkIGZyb20gdGhlIHBy
ZXZpb3VzIHJvdyBpbiB0aGUgbG9vcC4KICAgICBBU1NFUlQoc3RhcnRZKTsKQEAgLTMzMSwyNiAr
NDE5LDMwIEBAIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25z
dCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0CiAgICAgICAgIGFscGhhV2luZG93LnNl
dEJvdHRvbVJpZ2h0KGRhdGEucGl4ZWxzLT5pdGVtKG5leHRSb3dTdGFydCArIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAKICAgICAgICAgaW50IG9mZnNldCA9IHJvd1N0YXJ0
T2Zmc2V0ICsgY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndp
ZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKKyAgICAgICAg
Zm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoIC0gMTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVs
U2l6ZSkgewogICAgICAgICAgICAgYWxwaGFXaW5kb3cuc2hpZnQoKTsKICAgICAgICAgICAgIHNl
dFBpeGVsSW50ZXJuYWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGNGYWN0b3Ix
ZGl2NCwgY0ZhY3RvcjFkaXY0LCBkYXRhLmludGVyaW9yTm9ybWFsKG9mZnNldCwgYWxwaGFXaW5k
b3cpLCBhbHBoYVdpbmRvdy5jZW50ZXIoKSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQg
RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVy
aWNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQordm9pZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMp
CiB7Ci0gICAgcGFyYW1ldGVycy0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KHBh
cmFtZXRlcnMtPmRhdGEsIHBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+eVN0
YXJ0LCBwYXJhbWV0ZXJzLT55RW5kKTsKKyAgICBhcHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KHBh
cmFtZXRlcnMtPmRhdGEsIHBhcmFtZXRlcnMtPnBhaW50aW5nRGF0YSwgcGFyYW1ldGVycy0+eVN0
YXJ0LCBwYXJhbWV0ZXJzLT55RW5kKTsKIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFw
cGx5R2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKKyNpZiAhKENQVShBUk1fTkVPTikgJiYgQ1BVKEFS
TV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NPTVBBVElCTEUpKQordm9pZCBGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBMaWdodGluZ0Rh
dGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkK
IHsKLSAgICB1bnNpZ25lZCByb3dzVG9Qcm9jZXNzID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9u
ZSAtIDE7CisgICAgdW5zaWduZWQgcm93c1RvUHJvY2VzcyA9IGRhdGEuaGVpZ2h0IC0gMjsKICAg
ICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gcm93c1RvUHJvY2VzcyAvIDg7Ci0gICAgdW5zaWdu
ZWQgb3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPigoKGRhdGEud2lkdGhE
ZWNyZWFzZWRCeU9uZSAtIDEpICogcm93c1RvUHJvY2VzcykgLyBzX21pbmltYWxSZWN0RGltZW5z
aW9uLCBtYXhOdW1UaHJlYWRzKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBtaW5p
bWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9y
IHBhcmFsbGVsIGpvYnMKKyAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjpt
aW48dW5zaWduZWQ+KCgoZGF0YS53aWR0aCAtIDIpICogcm93c1RvUHJvY2VzcykgLyBtaW5pbWFs
UmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7CisKICAgICBpZiAob3B0aW1hbFRocmVhZE51
bWJlciA+IDEpIHsKICAgICAgICAgLy8gSW5pdGlhbGl6ZSBwYXJhbGxlbCBqb2JzCi0gICAgICAg
IFBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnM+IHBhcmFsbGVsSm9i
cygmcGxhdGZvcm1BcHBseUdlbmVyaWNXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOworICAg
ICAgICBQYXJhbGxlbEpvYnM8QXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJmFwcGx5UGxh
dGZvcm1HZW5lcmljV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKIAogICAgICAgICAvLyBG
aWxsIHRoZSBwYXJhbWV0ZXIgYXJyYXkKICAgICAgICAgaW50IGpvYiA9IHBhcmFsbGVsSm9icy5u
dW1iZXJPZkpvYnMoKTsKQEAgLTM2Miw4ICs0NTQsNyBAQCB2b2lkIEZFTGlnaHRpbmc6OnBsYXRm
b3JtQXBwbHlHZW5lcmljKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3Vy
YwogCiAgICAgICAgICAgICBpbnQgeVN0YXJ0ID0gMTsKICAgICAgICAgICAgIGZvciAoLS1qb2I7
IGpvYiA+PSAwOyAtLWpvYikgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlHZW5lcmlj
UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAg
ICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSB0aGlzOworICAgICAgICAgICAgICAgIEFwcGx5UGFy
YW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwogICAgICAgICAg
ICAgICAgIHBhcmFtcy5kYXRhID0gZGF0YTsKICAgICAgICAgICAgICAgICBwYXJhbXMucGFpbnRp
bmdEYXRhID0gcGFpbnRpbmdEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy55U3RhcnQgPSB5
U3RhcnQ7CkBAIC0zNzYsMzkgKzQ2NywxOCBAQCB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBw
bHlHZW5lcmljKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyYwogICAg
ICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZS4KICAgICB9CiAKLSAgICBw
bGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGRhdGEsIHBhaW50aW5nRGF0YSwgMSwgZGF0YS5oZWln
aHREZWNyZWFzZWRCeU9uZSk7CisgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChkYXRhLCBw
YWludGluZ0RhdGEsIDEsIGRhdGEuaGVpZ2h0IC0gMSk7CiB9Ci0KLWlubGluZSB2b2lkIEZFTGln
aHRpbmc6OnBsYXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdo
dFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCi17Ci0gICAgLy8gVGhlIHNlbGVj
dGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxseSBvbiBzb21lIHBs
YXRmb3Jtcy4KLSNpZiBDUFUoQVJNX05FT04pICYmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIENP
TVBJTEVSKEdDQ19DT01QQVRJQkxFKQotICAgIHBsYXRmb3JtQXBwbHlOZW9uKGRhdGEsIHBhaW50
aW5nRGF0YSk7Ci0jZWxzZQotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKGRhdGEsIHBhaW50aW5n
RGF0YSk7CiAjZW5kaWYKLX0KIAotYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhD
bGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQordm9pZCBGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0
YSkKIHsKICAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICBM
aWdodGluZ0RhdGEgZGF0YTsKLQotICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYgd2lkdGgg
b3IgaGVpZ2h0IChvciBib3RoKSBpcyAxIHBpeGVsLgotICAgIC8vIFRoZSBXMyBzcGVjIGRvZXMg
bm90IGRlZmluZSB0aGlzIGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4KLSAgICBp
ZiAod2lkdGggPD0gMiB8fCBoZWlnaHQgPD0gMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgZGF0YS5waXhlbHMgPSAmcGl4ZWxzOwotICAgIGRhdGEuc3VyZmFjZVNjYWxlID0gbV9zdXJm
YWNlU2NhbGUgLyAyNTUuMGY7Ci0gICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA9
IHdpZHRoICogY1BpeGVsU2l6ZTsKLSAgICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0
aCAtIDE7Ci0gICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7CiAKLSAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b0NvbG9yQ29tcG9uZW50c0lu
Q29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gZGF0YS5saWdodGluZ0NvbG9yLnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKCpkYXRh
Lm9wZXJhdGluZ0NvbG9yU3BhY2UpOwogICAgIHBhaW50aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdE
YXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIsIGcsIGIpOwogCi0gICAgbV9saWdodFNv
dXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKKyAgICBkYXRhLmxp
Z2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCpkYXRhLmVmZmVjdCwgcGFpbnRpbmdEYXRhKTsK
IAogICAgIC8vIFRvcCBsZWZ0LgogICAgIGludCBvZmZzZXQgPSAwOwpAQCAtNDE2LDQ3ICs0ODYs
NDcgQEAgYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBp
eGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogCiAgICAgLy8gVG9wIHJpZ2h0LgogICAgIG9m
ZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAg
IHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2Vk
QnlPbmUsIDAsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLnRvcFJpZ2h0Tm9ybWFs
KG9mZnNldCkpOworICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRh
LndpZHRoIC0gMSwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEudG9wUmlnaHRO
b3JtYWwob2Zmc2V0KSk7CiAKICAgICAvLyBCb3R0b20gbGVmdC4KLSAgICBvZmZzZXQgPSBkYXRh
LmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsK
LSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgZGF0YS5oZWlnaHRE
ZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tTGVm
dE5vcm1hbChvZmZzZXQpKTsKKyAgICBvZmZzZXQgPSAoZGF0YS5oZWlnaHQgLSAxKSAqIGRhdGEu
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBw
YWludGluZ0RhdGEsIDAsIGRhdGEuaGVpZ2h0IC0gMSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRp
djMsIGRhdGEuYm90dG9tTGVmdE5vcm1hbChvZmZzZXQpKTsKIAogICAgIC8vIEJvdHRvbSByaWdo
dC4KLSAgICBvZmZzZXQgPSBoZWlnaHQgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
IC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwg
ZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFj
dG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21SaWdodE5vcm1hbChvZmZzZXQpKTsK
KyAgICBvZmZzZXQgPSBkYXRhLmhlaWdodCAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emUgLSBjUGl4ZWxTaXplOworICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRh
LCBkYXRhLndpZHRoIC0gMSwgZGF0YS5oZWlnaHQgLSAxLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3Iy
ZGl2MywgZGF0YS5ib3R0b21SaWdodE5vcm1hbChvZmZzZXQpKTsKIAotICAgIGlmICh3aWR0aCA+
PSAzKSB7CisgICAgaWYgKGRhdGEud2lkdGggPj0gMykgewogICAgICAgICAvLyBUb3Agcm93Lgog
ICAgICAgICBvZmZzZXQgPSBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8
IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKKyAg
ICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoIC0gMTsgKyt4LCBvZmZzZXQgKz0g
Y1BpeGVsU2l6ZSkKICAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdE
YXRhLCB4LCAwLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS50b3BSb3dOb3JtYWwo
b2Zmc2V0KSk7CiAKICAgICAgICAgLy8gQm90dG9tIHJvdy4KLSAgICAgICAgb2Zmc2V0ID0gZGF0
YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUg
KyBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNy
ZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKLSAgICAgICAgICAgIHNldFBp
eGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5
T25lLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS5ib3R0b21Sb3dOb3JtYWwob2Zm
c2V0KSk7CisgICAgICAgIG9mZnNldCA9IChkYXRhLmhlaWdodCAtIDEpICogZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7CisgICAgICAgIGZvciAoaW50IHggPSAx
OyB4IDwgZGF0YS53aWR0aCAtIDE7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCisgICAgICAg
ICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgZGF0YS5oZWlnaHQg
LSAxLCBjRmFjdG9yMWRpdjMsIGNGYWN0b3IxZGl2MiwgZGF0YS5ib3R0b21Sb3dOb3JtYWwob2Zm
c2V0KSk7CiAgICAgfQogCi0gICAgaWYgKGhlaWdodCA+PSAzKSB7CisgICAgaWYgKGRhdGEuaGVp
Z2h0ID49IDMpIHsKICAgICAgICAgLy8gTGVmdCBjb2x1bW4uCiAgICAgICAgIG9mZnNldCA9IGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5
IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSkKKyAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhl
aWdodCAtIDE7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUp
CiAgICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgeSwg
Y0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEubGVmdENvbHVtbk5vcm1hbChvZmZzZXQp
KTsKIAogICAgICAgICAvLyBSaWdodCBjb2x1bW4uCiAgICAgICAgIG9mZnNldCA9IDIgKiBkYXRh
LndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChp
bnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zm
c2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgeSwgY0Zh
Y3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEucmlnaHRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7
CisgICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHQgLSAxOyArK3ksIG9mZnNl
dCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQorICAgICAgICAgICAgc2V0UGl4
ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGggLSAxLCB5LCBjRmFjdG9y
MWRpdjIsIGNGYWN0b3IxZGl2MywgZGF0YS5yaWdodENvbHVtbk5vcm1hbChvZmZzZXQpKTsKICAg
ICB9CiAKLSAgICBpZiAod2lkdGggPj0gMyAmJiBoZWlnaHQgPj0gMykgeworICAgIGlmIChkYXRh
LndpZHRoID49IDMgJiYgZGF0YS5oZWlnaHQgPj0gMykgewogICAgICAgICAvLyBJbnRlcmlvciBw
aXhlbHMuCi0gICAgICAgIHBsYXRmb3JtQXBwbHkoZGF0YSwgcGFpbnRpbmdEYXRhKTsKKyAgICAg
ICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoZGF0YSwgcGFpbnRpbmdEYXRhKTsKICAgICB9CiAKLSAg
ICBpbnQgbGFzdFBpeGVsID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGhlaWdo
dDsKLSAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRGlmZnVzZUxpZ2h0aW5nKSB7CisgICAgaW50
IGxhc3RQaXhlbCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKiBkYXRhLmhlaWdo
dDsKKyAgICBpZiAoZGF0YS5lZmZlY3QtPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBjQWxwaGFDaGFu
bmVsT2Zmc2V0OyBpIDwgbGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpCiAgICAgICAgICAgICBk
YXRhLnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7CiAgICAgfSBlbHNlIHsKQEAgLTQ2OCwy
MSArNTM4LDIxIEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFy
cmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICAgICAgICAgIGRhdGEucGl4
ZWxzLT5zZXQoaSArIDMsIGExID49IGEyID8gKGExID49IGEzID8gYTEgOiBhMykgOiAoYTIgPj0g
YTMgPyBhMiA6IGEzKSk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikK
K2Jvb2wgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dHNbMF0uZ2V0KCk7CiAKLSAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1
ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBh
dXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJlc3VsdChB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAgICBpZiAoIWRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNldElzQWxwaGFJ
bWFnZShmYWxzZSk7CisgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgbV9lZmZlY3Quc2V0SXNBbHBoYUltYWdlKGZh
bHNlKTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25P
ZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gZWZm
ZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZm
ZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1
bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdERyYXdpbmdSZWN0KTsKIAogICAgIC8v
IEZJWE1FOiBzdXBwb3J0IGtlcm5lbFVuaXRMZW5ndGhzIG90aGVyIHRoYW4gKDEsMSkuIFRoZSBp
c3N1ZSBoZXJlIGlzIHRoYXQgdGhlIFczCkBAIC00OTAsMTEgKzU2MCwzNiBAQCBib29sIEZFTGln
aHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAgIC8vIG91dHB1
dCBmb3IgdmFyaW91cyBrZXJuZWxVbml0TGVuZ3RocywgYW5kIEkgYW0gbm90IHN1cmUgdGhleSBh
cmUgcmVsaWFibGUuCiAgICAgLy8gQW55d2F5LCBmZUNvbnZvbHZlTWF0cml4IHNob3VsZCBhbHNv
IHVzZSB0aGUgaW1wbGVtZW50YXRpb24KIAotICAgIEludFNpemUgYWJzb2x1dGVQYWludFNpemUg
PSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVs
QXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgSW50U2l6ZSBzaXpl
ID0gSW50U2l6ZShtX2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CisKKyAgICAv
LyBGSVhNRTogZG8gc29tZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBw
aXhlbC4KKyAgICAvLyBUaGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cg
dGhlIGZpbHRlciBqdXN0IHJldHVybnMuCisgICAgaWYgKHNpemUud2lkdGgoKSA8PSAyIHx8IHNp
emUuaGVpZ2h0KCkgPD0gMikKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBkcmF3TGlnaHRp
bmcoZGVzdGluYXRpb25QaXhlbEFycmF5LCBhYnNvbHV0ZVBhaW50U2l6ZS53aWR0aCgpLCBhYnNv
bHV0ZVBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgTGlnaHRpbmdEYXRhIGRhdGE7CisgICAgZGF0
YS5lZmZlY3QgPSAmbV9lZmZlY3Q7CisgICAgZGF0YS5maWx0ZXJUeXBlID0gbV9lZmZlY3QuZmls
dGVyVHlwZSgpOworICAgIGRhdGEubGlnaHRpbmdDb2xvciA9IG1fZWZmZWN0LmxpZ2h0aW5nQ29s
b3IoKTsKKyAgICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fZWZmZWN0LnN1cmZhY2VTY2FsZSgpIC8g
MjU1LjBmOworICAgIGRhdGEuZGlmZnVzZUNvbnN0YW50ID0gbV9lZmZlY3QuZGlmZnVzZUNvbnN0
YW50KCk7CisgICAgZGF0YS5zcGVjdWxhckNvbnN0YW50ID0gbV9lZmZlY3Quc3BlY3VsYXJDb25z
dGFudCgpOworICAgIGRhdGEuc3BlY3VsYXJFeHBvbmVudCA9IG1fZWZmZWN0LnNwZWN1bGFyRXhw
b25lbnQoKTsKKyAgICBkYXRhLmxpZ2h0U291cmNlID0gJm1fZWZmZWN0LmxpZ2h0U291cmNlKCk7
CisgICAgZGF0YS5vcGVyYXRpbmdDb2xvclNwYWNlID0gJm1fZWZmZWN0Lm9wZXJhdGluZ0NvbG9y
U3BhY2UoKTsKKworICAgIGRhdGEucGl4ZWxzID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKKyAg
ICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplID0gc2l6ZS53aWR0aCgpICogY1BpeGVs
U2l6ZTsKKyAgICBkYXRhLndpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGRhdGEuaGVpZ2h0ID0g
c2l6ZS5oZWlnaHQoKTsKKworICAgIGFwcGx5UGxhdGZvcm0oZGF0YSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK2Jvb2wgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyKCp0
aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuaAppbmRleCBhZDJmYzI4ZmE5ZTdmNGJmMjkxM2Q2N2I5ODA1N2Y4ZWVi
YjA4ZGIyLi5hODRmZTg1YTM4MWZhODQwNzVlNTE2NTRjYzJjMGM1YmI4YzFhYjJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuaApAQCAtMjksOSArMjksNiBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9Gb3J3YXJkLmg+Ci0KLS8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBGRURpZmZ1c2VM
aWdodGluZyBhbmQgRkVTcGVjdWxhckxpZ2h0aW5nCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMzksMTEgKzM2LDE1IEBAIHN0cnVjdCBGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbjsK
IAogY2xhc3MgRkVMaWdodGluZyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgorICAg
IGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9saWdodGluZ0Nv
bG9yOyB9CisgICAgYm9vbCBzZXRMaWdodGluZ0NvbG9yKGNvbnN0IENvbG9yJik7CisKICAgICBm
bG9hdCBzdXJmYWNlU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2VTY2FsZTsgfQogICAg
IGJvb2wgc2V0U3VyZmFjZVNjYWxlKGZsb2F0KTsKIAotICAgIGNvbnN0IENvbG9yJiBsaWdodGlu
Z0NvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9saWdodGluZ0NvbG9yOyB9Ci0gICAgYm9vbCBzZXRM
aWdodGluZ0NvbG9yKGNvbnN0IENvbG9yJik7CisgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50KCkg
Y29uc3QgeyByZXR1cm4gbV9kaWZmdXNlQ29uc3RhbnQ7IH0KKyAgICBmbG9hdCBzcGVjdWxhckNv
bnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxhckNvbnN0YW50OyB9CisgICAgZmxvYXQg
c3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJFeHBvbmVudDsgfQog
CiAgICAgZmxvYXQga2VybmVsVW5pdExlbmd0aFgoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFVu
aXRMZW5ndGhYOyB9CiAgICAgYm9vbCBzZXRLZXJuZWxVbml0TGVuZ3RoWChmbG9hdCk7CkBAIC01
NCwxMDEgKzU1LDE3IEBAIHB1YmxpYzoKICAgICBjb25zdCBMaWdodFNvdXJjZSYgbGlnaHRTb3Vy
Y2UoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0U291cmNlLmdldCgpOyB9CiAKIHByb3RlY3RlZDoK
LSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7
IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0KLSAgICBlbnVtIExp
Z2h0aW5nVHlwZSB7Ci0gICAgICAgIERpZmZ1c2VMaWdodGluZywKLSAgICAgICAgU3BlY3VsYXJM
aWdodGluZwotICAgIH07Ci0gICAgCi0gICAgc3RydWN0IEFscGhhV2luZG93IHsKLSAgICAgICAg
dWludDhfdCBhbHBoYVszXVszXSB7IH07Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgaW1wbGVt
ZW50YXRpb25zIGFyZSBsaW5lZCB1cCB0byBtYWtlIGNvbXBhcmluZyBpbmRpY2VzIGVhc2llci4K
LSAgICAgICAgdWludDhfdCB0b3BMZWZ0KCkgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4gYWxw
aGFbMF1bMF07IH0KLSAgICAgICAgdWludDhfdCBsZWZ0KCkgY29uc3QgICAgICAgICAgICAgICAg
eyByZXR1cm4gYWxwaGFbMV1bMF07IH0KLSAgICAgICAgdWludDhfdCBib3R0b21MZWZ0KCkgY29u
c3QgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMF07IH0KLQotICAgICAgICB1aW50OF90IHRv
cCgpIGNvbnN0ICAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVsxXTsgfQotICAgICAg
ICB1aW50OF90IGNlbnRlcigpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVsx
XTsgfQotICAgICAgICB1aW50OF90IGJvdHRvbSgpIGNvbnN0ICAgICAgICAgICAgICB7IHJldHVy
biBhbHBoYVsyXVsxXTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wKHVpbnQ4X3QgdmFsdWUpICAg
ICAgICAgIHsgYWxwaGFbMF1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldENlbnRlcih1
aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzFdWzFdID0gdmFsdWU7IH0KLSAgICAgICAgdm9p
ZCBzZXRCb3R0b20odWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsyXVsxXSA9IHZhbHVlOyB9
Ci0KLSAgICAgICAgdm9pZCBzZXRUb3BSaWdodCh1aW50OF90IHZhbHVlKSAgICAgeyBhbHBoYVsw
XVsyXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0UmlnaHQodWludDhfdCB2YWx1ZSkgICAg
ICAgIHsgYWxwaGFbMV1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldEJvdHRvbVJpZ2h0
KHVpbnQ4X3QgdmFsdWUpICB7IGFscGhhWzJdWzJdID0gdmFsdWU7IH0KLQotICAgICAgICBzdGF0
aWMgdm9pZCBzaGlmdFJvdyh1aW50OF90IGFscGhhWzNdKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBhbHBoYVswXSA9IGFscGhhWzFdOwotICAgICAgICAgICAgYWxwaGFbMV0gPSBhbHBoYVsyXTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBzaGlmdCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzBdKTsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhh
WzFdKTsKLSAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzJdKTsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICBzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKLSAgICAgICAgLy8gVGhpcyBzdHJ1Y3R1cmUg
Y29udGFpbnMgb25seSByZWFkLW9ubHkgKFNNUCBzYWZlKSBkYXRhCi0gICAgICAgIFVpbnQ4Q2xh
bXBlZEFycmF5KiBwaXhlbHM7Ci0gICAgICAgIGZsb2F0IHN1cmZhY2VTY2FsZTsKLSAgICAgICAg
aW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBpbnQgd2lkdGhEZWNyZWFz
ZWRCeU9uZTsKLSAgICAgICAgaW50IGhlaWdodERlY3JlYXNlZEJ5T25lOwotCi0gICAgICAgIGlu
bGluZSBJbnRTaXplIHRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlu
bGluZSBJbnRTaXplIHRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5s
aW5lIEludFNpemUgdG9wUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlu
bGluZSBJbnRTaXplIGxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAg
IGlubGluZSBJbnRTaXplIGludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93Jikg
Y29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHJpZ2h0Q29sdW1uTm9ybWFsKGludCBvZmZz
ZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21MZWZ0Tm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21Sb3dOb3JtYWwoaW50
IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJpZ2h0Tm9ybWFs
KGludCBvZmZzZXQpIGNvbnN0OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGxhdGZvcm1BcHBseUdl
bmVyaWNQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVMaWdodGluZyogZmlsdGVyOwotICAgICAgICBM
aWdodGluZ0RhdGEgZGF0YTsKLSAgICAgICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWlu
dGluZ0RhdGE7Ci0gICAgICAgIGludCB5U3RhcnQ7Ci0gICAgICAgIGludCB5RW5kOwotICAgIH07
Ci0KLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcihQbGF0Zm9ybUFw
cGx5R2VuZXJpY1BhcmFtZXRlcnMqKTsKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5TmVv
bldvcmtlcihGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbiopOwotCi0gICAgRkVMaWdodGlu
ZyhMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNl
U2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxv
YXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5l
bFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYsIFR5cGUpOwotCi0gICAgYm9vbCBkcmF3
TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmLCBpbnQsIGludCk7Ci0KLSAgICB2b2lkIHNldFBp
eGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQ
YWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3Rvclks
IEludFNpemUgbm9ybWFsVmVjdG9yKTsKLSAgICB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50IG9m
ZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0
YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBu
b3JtYWxWZWN0b3IsIGZsb2F0IGFscGhhKTsKKyAgICBGRUxpZ2h0aW5nKFR5cGUsIGNvbnN0IENv
bG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25z
dGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRT
b3VyY2U+JiYpOwogCiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBG
aWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3Qo
bWF4RWZmZWN0UmVjdCgpKSk7IH0KIAogICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IExp
Z2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKLQotICAgIHZv
aWQgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBM
aWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WCwgaW50IHN0YXJ0WSk7Ci0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdo
dFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7Ci0KICNpZiBDUFUoQVJNX05FT04pICYmIENQVShBUk1f
VFJBRElUSU9OQUwpICYmIENPTVBJTEVSKEdDQ19DT01QQVRJQkxFKQogICAgIHN0YXRpYyBpbnQg
Z2V0UG93ZXJDb2VmZmljaWVudHMoZmxvYXQgZXhwb25lbnQpOwogICAgIGlubGluZSB2b2lkIHBs
YXRmb3JtQXBwbHlOZW9uKGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQ
YWludGluZ0RhdGEmKTsKICNlbmRpZgogCi0gICAgTGlnaHRpbmdUeXBlIG1fbGlnaHRpbmdUeXBl
OwotICAgIFJlZjxMaWdodFNvdXJjZT4gbV9saWdodFNvdXJjZTsKLQogICAgIENvbG9yIG1fbGln
aHRpbmdDb2xvcjsKICAgICBmbG9hdCBtX3N1cmZhY2VTY2FsZTsKICAgICBmbG9hdCBtX2RpZmZ1
c2VDb25zdGFudDsKQEAgLTE1Niw3ICs3Myw3IEBAIHByb3RlY3RlZDoKICAgICBmbG9hdCBtX3Nw
ZWN1bGFyRXhwb25lbnQ7CiAgICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWDsKICAgICBmbG9h
dCBtX2tlcm5lbFVuaXRMZW5ndGhZOworICAgIFJlZjxMaWdodFNvdXJjZT4gbV9saWdodFNvdXJj
ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKaW5kZXggY2VhMTk3Y2Y4
YTE3NjdjOWRkNGZkNGVlMDMzZjY2ZmZkMWY4MzljYy4uNzZhNzQ2NGYwMGU2ZDM3MDhlZTk0ZGNh
Y2Q5NmY2MWY3YWNhNmJlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiRkVNZXJnZS5oIgogCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0
QXBwbGllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMzgsMjUgKzM5
LDQxIEBAIEZFTWVyZ2U6OkZFTWVyZ2UoKQogewogfQogCi1ib29sIEZFTWVyZ2U6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZF
TWVyZ2VTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMu
CitjbGFzcyBGRU1lcmdlU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNy
ZXRlQXBwbGllcjxGRU1lcmdlPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNy
ZXRlQXBwbGllcjxGRU1lcmdlPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisK
KyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYg
aW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKK307CisKK2Jvb2wgRkVNZXJnZVNvZnR3YXJlQXBwbGll
cjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVm
ZmVjdHMpCiB7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG51bWJlck9mRWZmZWN0SW5wdXRzKCk7Ci0g
ICAgQVNTRVJUKHNpemUgPiAwKTsKKyAgICBBU1NFUlQoaW5wdXRFZmZlY3RzLnNpemUoKSA+IDAp
OwogCi0gICAgYXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0
byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFy
ZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgR3JhcGhpY3NDb250ZXh0
JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdChpKTsKLSAgICAgICAgaWYgKGF1dG8gaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZm
ZXJSZXN1bHQoKSkKLSAgICAgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSkpOworICAgIGF1dG8mIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpOwor
CisgICAgZm9yIChhdXRvJiBpbiA6IGlucHV0RWZmZWN0cykgeworICAgICAgICBhdXRvIGluQnVm
ZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgICAgIGlmICghaW5CdWZmZXIpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmluQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNv
bHV0ZVBhaW50UmVjdCgpKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wg
RkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorewor
ICAgIHJldHVybiBGRU1lcmdlU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlu
cHV0RWZmZWN0cygpKTsKK30KKwogVGV4dFN0cmVhbSYgRkVNZXJnZTo6ZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9u
KSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlTWVyZ2UiOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
Y3BwCmluZGV4IGIyMjNjYjllNTY2MzY5NTljM2Y5MWI4NjFlNmRhMTdjMDM2ZGEzYzcuLmQ5NDUx
ODE1NjhmMGE2ZTdmMGI1N2I1MzljNTM5NDkyMWQ3ODE2NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDb2xvckNvbXBvbmVudHMuaCIKICNpbmNsdWRl
ICJDb2xvclR5cGVzLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1Bh
cmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTgzLDIzICs4NCw0OCBA
QCB2b2lkIEZFTW9ycGhvbG9neTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmls
dGVyJiBmaWx0ZXIpCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChw
YWludFJlY3QpKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcGl4ZWxBcnJheUluZGV4KGludCB4
LCBpbnQgeSwgaW50IHdpZHRoKQotewotICAgIHJldHVybiAoeSAqIHdpZHRoICsgeCkgKiA0Owot
fQorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllciB0
byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVNb3Jw
aG9sb2d5PiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxG
RU1vcnBob2xvZ3k+OwogCi1pbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VD
b2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkKLXsK
LSAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkpOwotfQorcHVibGlj
OgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CiAKLWlubGluZSBQYWNrZWRDb2xvcjo6UkdCQSBtYWtl
UGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4
X3QsIDQ+JiBjb21wb25lbnRzKQotewotICAgIHJldHVybiBQYWNrZWRDb2xvcjo6UkdCQSB7IG1h
a2VGcm9tQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29tcG9uZW50cykgfTsKLX0KKyAgICBi
b29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB1c2luZyBDb2x1bW5FeHRyZW1hID0g
VmVjdG9yPENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiwgMTY+OworCisgICAgc3RydWN0IFBh
aW50aW5nRGF0YSB7CisgICAgICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZTsKKyAgICAg
ICAgaW50IHJhZGl1c1g7CisgICAgICAgIGludCByYWRpdXNZOworICAgICAgICBjb25zdCBVaW50
OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJheTsKKyAgICAgICAgVWludDhDbGFtcGVkQXJyYXkq
IGRzdFBpeGVsQXJyYXk7CisgICAgICAgIGludCB3aWR0aDsKKyAgICAgICAgaW50IGhlaWdodDsK
KyAgICB9OwogCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGU+Ci1BTFdBWVNf
SU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNv
bXBvbmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0
PiYgYikKKyAgICBzdHJ1Y3QgQXBwbHlQYXJhbWV0ZXJzIHsKKyAgICAgICAgY29uc3QgUGFpbnRp
bmdEYXRhKiBwYWludGluZ0RhdGE7CisgICAgICAgIGludCBzdGFydFk7CisgICAgICAgIGludCBl
bmRZOworICAgIH07CisKKyAgICBzdGF0aWMgaW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50
IHgsIGludCB5LCBpbnQgd2lkdGgpIHsgcmV0dXJuICh5ICogd2lkdGggKyB4KSAqIDQ7IH0KKyAg
ICBzdGF0aWMgaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9y
Q29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGNvbXBvbmVudHMp
IHsgcmV0dXJuIFBhY2tlZENvbG9yOjpSR0JBIHsgbWFrZUZyb21Db21wb25lbnRzPFNSR0JBPHVp
bnQ4X3Q+Pihjb21wb25lbnRzKSB9OyB9CisKKyAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9u
ZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2Vk
Q29sb3I6OlJHQkEgcGl4ZWwpIHsgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGFzU1JHQkEocGl4
ZWwpKTsgfQorICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1p
bk9yTWF4KGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JD
b21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBiLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKKyAgICBz
dGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQs
IGludCB5RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOworICAgIHN0YXRp
YyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0
IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSk7CisKKyAgICBz
dGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmLCBpbnQg
c3RhcnRZLCBpbnQgZW5kWSk7CisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybVdvcmtlcihB
cHBseVBhcmFtZXRlcnMqKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtKGNvbnN0IFBh
aW50aW5nRGF0YSYpOworfTsKKworaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBG
RU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Om1pbk9yTWF4KGNvbnN0IENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiYgYSwgY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBiLCBN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCiB7CiAgICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9M
T0dZX09QRVJBVE9SX0VST0RFKQogICAgICAgICByZXR1cm4gcGVyQ29tcG9uZW50TWluKGEsIGIp
OwpAQCAtMTA3LDQ3ICsxMzMsMjcgQEAgQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4gbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QKICAgICByZXR1
cm4gcGVyQ29tcG9uZW50TWF4KGEsIGIpOwogfQogCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHR5cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBj
b2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50
IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgpCitpbmxpbmUgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6Y29sdW1uRXh0cmVt
dW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0
YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUpCiB7
CiAgICAgYXV0byBleHRyZW11bSA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQ
YWNrZWRDb2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3Jj
UGl4ZWxBcnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeVN0YXJ0LCB3aWR0aCkpIH0p
OwogCiAgICAgZm9yIChpbnQgeSA9IHlTdGFydCArIDE7IHkgPCB5RW5kOyArK3kpIHsKICAgICAg
ICAgYXV0byBwaXhlbCA9IG1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRD
b2xvcjo6UkdCQSB7ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkKj4oc3JjUGl4ZWxB
cnJheS5kYXRhKCkgKyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKSB9KTsKLSAgICAgICAg
ZXh0cmVtdW0gPSBtaW5Pck1heDx0eXBlPihleHRyZW11bSwgcGl4ZWwpOworICAgICAgICBleHRy
ZW11bSA9IG1pbk9yTWF4KGV4dHJlbXVtLCBwaXhlbCwgdHlwZSk7CiAgICAgfQogICAgIHJldHVy
biBleHRyZW11bTsKIH0KIAotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXks
IGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9sb2d5T3BlcmF0
b3JUeXBlIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VS
T0RFKQotICAgICAgICByZXR1cm4gY29sdW1uRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9S
X0VST0RFPihzcmNQaXhlbEFycmF5LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKLQotICAgIHJl
dHVybiBjb2x1bW5FeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihzcmNQaXhl
bEFycmF5LCB4LCB5U3RhcnQsIHlFbmQsIHdpZHRoKTsKLX0KLQotdXNpbmcgQ29sdW1uRXh0cmVt
YSA9IFZlY3RvcjxDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4sIDE2PjsKLQotdGVtcGxhdGU8
TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVu
dHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVs
KQoraW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRU1vcnBob2xvZ3lTb2Z0d2Fy
ZUFwcGxpZXI6Omtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9y
cGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQogewogICAgIGF1dG8gZXh0cmVtdW0gPSBrZXJuZWxb
MF07CiAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBrZXJuZWwuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIGV4dHJlbXVtID0gbWluT3JNYXg8dHlwZT4oZXh0cmVtdW0sIGtlcm5lbFtpXSk7CisgICAg
ICAgIGV4dHJlbXVtID0gbWluT3JNYXgoZXh0cmVtdW0sIGtlcm5lbFtpXSwgdHlwZSk7CiAKICAg
ICByZXR1cm4gZXh0cmVtdW07CiB9CiAKLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVp
bnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVtKGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCwgTW9y
cGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQotewotICAgIGlmICh0eXBlID09IEZFTU9SUEhPTE9H
WV9PUEVSQVRPUl9FUk9ERSkKLSAgICAgICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhP
TE9HWV9PUEVSQVRPUl9FUk9ERT4oa2VybmVsKTsKLQotICAgIHJldHVybiBrZXJuZWxFeHRyZW11
bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRElMQVRFPihrZXJuZWwpOwotfQotCi12b2lkIEZFTW9y
cGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEsIGludCBzdGFydFksIGludCBlbmRZKQordm9pZCBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKIHsKICAgICBBU1NFUlQoZW5kWSA+IHN0YXJ0WSk7
CiAKQEAgLTE3MywyOCArMTc5LDI4IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5
R2VuZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0CiAKICAgICAg
ICAgLy8gV2Ugc3RhcnQgYXQgdGhlIGxlZnQgZWRnZSwgc28gY29tcHV0ZSBleHRyZW1lIGZvciB0
aGUgcmFkaXVzWCBjb2x1bW5zLgogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJhZGl1c1g7
ICsreCkKLSAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVs
QXJyYXksIHgsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgsIG1fdHlwZSkpOworICAg
ICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCwg
eVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFpbnRpbmdEYXRhLnR5cGUpKTsKIAog
ICAgICAgICAvLyBLZXJuZWwgaXMgZmlsbGVkLCBnZXQgZXh0cmVtYSBvZiBuZXh0IGNvbHVtbgog
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKICAgICAgICAgICAgIGlm
ICh4IDwgd2lkdGggLSByYWRpdXNYKQotICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNv
bHVtbkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3RhcnQsIHlS
YWRpdXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKKyAgICAgICAgICAgICAgICBleHRyZW1hLmFwcGVu
ZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4ICsgcmFkaXVzWCwgeVJhZGl1c1N0YXJ0
LCB5UmFkaXVzRW5kLCB3aWR0aCwgcGFpbnRpbmdEYXRhLnR5cGUpKTsKIAogICAgICAgICAgICAg
aWYgKHggPiByYWRpdXNYKQogICAgICAgICAgICAgICAgIGV4dHJlbWEucmVtb3ZlKDApOwogCiAg
ICAgICAgICAgICB1bnNpZ25lZCogZGVzdFBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCo+KGRzdFBpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4KHgsIHksIHdpZHRoKSk7
Ci0gICAgICAgICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25l
bnRzKGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEsIG1fdHlwZSkpLnZhbHVlOworICAgICAgICAgICAg
KmRlc3RQaXhlbCA9IG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhrZXJuZWxFeHRy
ZW11bShleHRyZW1hLCBwYWludGluZ0RhdGEudHlwZSkpLnZhbHVlOwogICAgICAgICB9CiAgICAg
fQogfQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFw
cGx5UGFyYW1ldGVycyogcGFyYW0pCit2b2lkIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6
YXBwbHlQbGF0Zm9ybVdvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFtcykKIHsKLSAgICBwYXJh
bS0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpYygqcGFyYW0tPnBhaW50aW5nRGF0YSwgcGFy
YW0tPnN0YXJ0WSwgcGFyYW0tPmVuZFkpOworICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKCpwYXJh
bXMtPnBhaW50aW5nRGF0YSwgcGFyYW1zLT5zdGFydFksIHBhcmFtcy0+ZW5kWSk7CiB9CiAKLXZv
aWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhKQordm9pZCBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0o
Y29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiB7CiAgICAgLy8gRW1waXJpY2FsbHks
IHJ1bnRpbWUgaXMgYXBwcm94aW1hdGVseSBsaW5lYXIgb3ZlciByZWFzb25hYmxlIGtlcm5lbCBz
aXplcyB3aXRoIGEgc2xvcGUgb2YgYWJvdXQgMC42NS4KICAgICBmbG9hdCBrZXJuZWxGYWN0b3Ig
PSBzcXJ0KHBhaW50aW5nRGF0YS5yYWRpdXNYICogcGFpbnRpbmdEYXRhLnJhZGl1c1kpICogMC42
NTsKQEAgLTIwNCw3ICsyMTAsNyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseShj
b25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKICAgICB1bnNpZ25lZCBtYXhOdW1UaHJl
YWRzID0gcGFpbnRpbmdEYXRhLmhlaWdodCAvIDg7CiAgICAgdW5zaWduZWQgb3B0aW1hbFRocmVh
ZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPigocGFpbnRpbmdEYXRhLndpZHRoICogcGFpbnRp
bmdEYXRhLmhlaWdodCAqIGtlcm5lbEZhY3RvcikgLyBtaW5pbWFsQXJlYSwgbWF4TnVtVGhyZWFk
cyk7CiAgICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7Ci0gICAgICAgIFBhcmFsbGVs
Sm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZXZWJDb3JlOjpGRU1v
cnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOworICAg
ICAgICBQYXJhbGxlbEpvYnM8QXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJmFwcGx5UGxh
dGZvcm1Xb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwogICAgICAgICBhdXRvIG51bU9mVGhy
ZWFkcyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKICAgICAgICAgaWYgKG51bU9mVGhy
ZWFkcyA+IDEpIHsKICAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBqb2IgaW50byAiam9iU2l6ZSIt
c2l6ZWQgam9icyBidXQgdGhlcmUgYSBmZXcgam9icyB0aGF0IG5lZWQgdG8gYmUgc2xpZ2h0bHkg
bGFyZ2VyIHNpbmNlCkBAIC0yMTMsOCArMjE5LDcgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRm
b3JtQXBwbHkoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiAgICAgICAgICAgICBp
bnQgam9ic1dpdGhFeHRyYSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgJSBudW1PZlRocmVhZHM7CiAg
ICAgICAgICAgICBpbnQgY3VycmVudFkgPSAwOwogICAgICAgICAgICAgZm9yIChpbnQgam9iID0g
bnVtT2ZUaHJlYWRzIC0gMTsgam9iID49IDA7IC0tam9iKSB7Ci0gICAgICAgICAgICAgICAgUGxh
dGZvcm1BcHBseVBhcmFtZXRlcnMmIHBhcmFtID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2Ip
OwotICAgICAgICAgICAgICAgIHBhcmFtLmZpbHRlciA9IHRoaXM7CisgICAgICAgICAgICAgICAg
QXBwbHlQYXJhbWV0ZXJzJiBwYXJhbSA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKICAg
ICAgICAgICAgICAgICBwYXJhbS5zdGFydFkgPSBjdXJyZW50WTsKICAgICAgICAgICAgICAgICBj
dXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gam9iU2l6ZSArIDEgOiBqb2JTaXplOwog
ICAgICAgICAgICAgICAgIHBhcmFtLmVuZFkgPSBjdXJyZW50WTsKQEAgLTIyNiwzMyArMjMxLDMy
IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhKQogICAgICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkIG1vZGVs
CiAgICAgfQogCi0gICAgcGxhdGZvcm1BcHBseUdlbmVyaWMocGFpbnRpbmdEYXRhLCAwLCBwYWlu
dGluZ0RhdGEuaGVpZ2h0KTsKLX0KLQotYm9vbCBGRU1vcnBob2xvZ3k6OmlzRGVnZW5lcmF0ZShp
bnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJhZGl1c1ggPCAw
IHx8IHJhZGl1c1kgPCAwIHx8ICghcmFkaXVzWCAmJiAhcmFkaXVzWSk7CisgICAgYXBwbHlQbGF0
Zm9ybUdlbmVyaWMocGFpbnRpbmdEYXRhLCAwLCBwYWludGluZ0RhdGEuaGVpZ2h0KTsKIH0KIAot
Ym9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZp
bHRlcikKK2Jvb2wgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0
ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0g
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CiAKLSAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIgPSBwaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhl
bEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKICAg
ICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworICAgIG1fZWZmZWN0LnNl
dElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworCisgICAgYXV0byBpc0RlZ2VuZXJh
dGUgPSBbXShpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpIC0+IGJvb2wgeworICAgICAgICByZXR1
cm4gcmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwgKCFyYWRpdXNYICYmICFyYWRpdXNZKTsK
KyAgICB9OwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lv
bk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgSW50UmVj
dCBlZmZlY3REcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhl
bEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgSW50U2l6ZSByYWRpdXMgPSBm
bG9vcmVkSW50U2l6ZShGbG9hdFNpemUobV9lZmZlY3QucmFkaXVzWCgpLCBtX2VmZmVjdC5yYWRp
dXNZKCkpKTsKIAotICAgIEludFNpemUgcmFkaXVzID0gZmxvb3JlZEludFNpemUoRmxvYXRTaXpl
KG1fcmFkaXVzWCwgbV9yYWRpdXNZKSk7CiAgICAgaWYgKGlzRGVnZW5lcmF0ZShyYWRpdXMud2lk
dGgoKSwgcmFkaXVzLmhlaWdodCgpKSkgewogICAgICAgICBpbi0+Y29weVBpeGVsQnVmZmVyUmVz
dWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3REcmF3aW5nUmVjdCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRl
ci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9yYWRpdXNYLCBtX3JhZGl1c1kgfSkpOworICAgIHJh
ZGl1cyA9IGZsb29yZWRJbnRTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZl
Y3QucmFkaXVzWCgpLCBtX2VmZmVjdC5yYWRpdXNZKCkgfSkpOwogICAgIGludCByYWRpdXNYID0g
c3RkOjptaW4oZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSAtIDEsIHJhZGl1cy53aWR0aCgpKTsK
ICAgICBpbnQgcmFkaXVzWSA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LmhlaWdodCgpIC0g
MSwgcmFkaXVzLmhlaWdodCgpKTsKIApAQCAtMjYxLDcgKzI2NSw3IEBAIGJvb2wgRkVNb3JwaG9s
b2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+
Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgZWZmZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgYXV0byBz
b3VyY2VQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlZmZlY3REcmF3aW5nUmVjdCwgbV9lZmZlY3Qub3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTI2OSw2ICsyNzMsNyBAQCBib29sIEZFTW9ycGhvbG9neTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIGF1dG8mIGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAog
ICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CisgICAgcGFpbnRpbmdEYXRhLnR5cGUgPSBt
X2VmZmVjdC5tb3JwaG9sb2d5T3BlcmF0b3IoKTsKICAgICBwYWludGluZ0RhdGEuc3JjUGl4ZWxB
cnJheSA9ICZzb3VyY2VQaXhlbEFycmF5OwogICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5
ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKICAgICBwYWludGluZ0RhdGEud2lkdGggPSBjZWls
ZihlZmZlY3REcmF3aW5nUmVjdC53aWR0aCgpKTsKQEAgLTI3NiwxMCArMjgxLDE1IEBAIGJvb2wg
RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIp
CiAgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYKTsKICAgICBwYWludGlu
Z0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1c1kpOwogCi0gICAgcGxhdGZvcm1BcHBseShwYWlu
dGluZ0RhdGEpOworICAgIGFwcGx5UGxhdGZvcm0ocGFpbnRpbmdEYXRhKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBs
aWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE1vcnBob2xvZ3lPcGVy
YXRvclR5cGUmIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAppbmRl
eCBkYjg3MGFlN2RmNTA0ZTE5YzRkMDUxM2Y4ZDQyMWIwMWZjY2MxZDE5Li41ODk1MDJhNmY1YmM2
ZDIwYjhlMTllYTlmZjU3Y2E3ODkyNWQ4MjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKQEAgLTUzLDI5ICs1
Myw2IEBAIHByaXZhdGU6CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlk
ZTsKIAotICAgIGJvb2wgaXNEZWdlbmVyYXRlKGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkgY29u
c3Q7Ci0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3QgVWludDhDbGFt
cGVkQXJyYXkqIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQ
aXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0gICAg
ICAgIGludCByYWRpdXNYOwotICAgICAgICBpbnQgcmFkaXVzWTsKLSAgICB9OwotCi0gICAgc3Ry
dWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzIHsKLSAgICAgICAgRkVNb3JwaG9sb2d5KiBmaWx0
ZXI7Ci0gICAgICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgICAgICBjb25z
dCBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQg
cGxhdGZvcm1BcHBseVdvcmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyopOwotCi0gICAgdm9p
ZCBwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYpOwotICAgIHZvaWQgcGxhdGZvcm1B
cHBseUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwot
CiAgICAgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBtX3R5cGU7CiAgICAgZmxvYXQgbV9yYWRpdXNY
OwogICAgIGZsb2F0IG1fcmFkaXVzWTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAKaW5kZXggNDMxNGExYTU2MTI0ZWQxYzgz
NjA5Yzk4YzBiOWZjMWE1ZDIyYzRkZS4uMWRhOTI3NzBlNmMyZDI2NWExZmU4NTcxNzhiNWU4ZTdm
NTYzNmE1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU9mZnNldC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJGRU9mZnNl
dC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGll
ci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtNjQsMjQgKzY1LDM5IEBA
IHZvaWQgRkVPZmZzZXQ6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRS
ZWN0KSk7CiB9CiAKLWJvb2wgRkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImIGZpbHRlcikKKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRU9mZnNldFNvZnR3YXJl
QXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFT2Zm
c2V0U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxG
RU9mZnNldD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8
RkVPZmZzZXQ+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wg
YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVj
dHMpIG92ZXJyaWRlOworfTsKKworYm9vbCBGRU9mZnNldFNvZnR3YXJlQXBwbGllcjo6YXBwbHko
Y29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZl
Y3RzKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOwogCi0gICAgYXV0byByZXN1bHRJ
bWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZm
ZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1
ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgp
KTsKKyAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAot
ICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgZHJhd2luZ1JlZ2lvbi5tb3ZlKGZpbHRlci5z
Y2FsZWRCeUZpbHRlclNjYWxlKHsgbV9keCwgbV9keSB9KSk7CisgICAgRmxvYXRSZWN0IGRyYXdp
bmdSZWdpb24gPSBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKKyAgICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLnNjYWxlZEJ5Rmls
dGVyU2NhbGUoeyBtX2VmZmVjdC5keCgpLCBtX2VmZmVjdC5keSgpIH0pKTsKICAgICByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb24p
OwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVPZmZzZXQ6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVPZmZzZXRTb2Z0
d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBU
ZXh0U3RyZWFtJiBGRU9mZnNldDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0
cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8
IGluZGVudCA8PCAiW2ZlT2Zmc2V0IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcAppbmRl
eCAzZjJkOThiYTliOTk3MTNiYzdmMDljNjU1ZWE1NjFkMjY3YzBmMDVkLi43ZmJmZDgxYTYwOGI2
NWRkNzExNzRhM2I2MzFkM2E0MzM0ZWVmODZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcu
Y3BwCkBAIC0zNCw3ICszNCw3IEBAIFJlZjxGRVNwZWN1bGFyTGlnaHRpbmc+IEZFU3BlY3VsYXJM
aWdodGluZzo6Y3JlYXRlKGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmCiB9CiAKIEZFU3Bl
Y3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKGNvbnN0IENvbG9yJiBsaWdodGluZ0Nv
bG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNw
ZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdodGlu
ZyhTcGVjdWxhckxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1
bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25lbnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxV
bml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVT
cGVjdWxhckxpZ2h0aW5nKQorICAgIDogRkVMaWdodGluZyhGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZF
U3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxh
ckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKaW5kZXggYTllMjEz
MzdiMGQyNzRlNTQ4MGRmNjc2MGY4OTdjNzIwMTllNTQ4YS4uNDM5MDQ4ZjViZDFlMTk3NTdkOTE3
ZmFiMjVmZGE3MzZiMTdkNTc3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmls
dGVyRWZmZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgpAQCAtNDIsMjIgKzQzLDMy
IEBAIEZFVGlsZTo6RkVUaWxlKCkKIHsKIH0KIAotYm9vbCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBG
RVRpbGVTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMu
CitjbGFzcyBGRVRpbGVTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3Jl
dGVBcHBsaWVyPEZFVGlsZT4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0
ZUFwcGxpZXI8RkVUaWxlPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAg
ICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5w
dXRFZmZlY3RzKSBvdmVycmlkZTsKK307CisKK2Jvb2wgRkVUaWxlU29mdHdhcmVBcHBsaWVyOjph
cHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1
dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAg
IEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CiAKLSAgICBhdXRvIHJl
c3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0g
bV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBhdXRvIGluQnVmZmVyID0gaW4tPmlt
YWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUlt
YWdlKCkpOworICAgIG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkp
OwogCiAgICAgLy8gU291cmNlIGlucHV0IG5lZWRzIG1vcmUgYXR0ZW50aW9uLiBJdCBoYXMgdGhl
IHNpemUgb2YgdGhlIGZpbHRlclJlZ2lvbiBidXQgZ2l2ZXMgdGhlCiAgICAgLy8gc2l6ZSBvZiB0
aGUgY3V0dGVkIHNvdXJjZUltYWdlIGJhY2suIFRoaXMgaXMgcGFydCBvZiB0aGUgc3BlY2lmaWNh
dGlvbiBhbmQgb3B0aW1pemF0aW9uLgogICAgIEZsb2F0UmVjdCB0aWxlUmVjdCA9IGluLT5tYXhF
ZmZlY3RSZWN0KCk7CiAgICAgRmxvYXRQb2ludCBpbk1heEVmZmVjdExvY2F0aW9uID0gdGlsZVJl
Y3QubG9jYXRpb24oKTsKLSAgICBGbG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbWF4RWZm
ZWN0UmVjdCgpLmxvY2F0aW9uKCk7CisgICAgRmxvYXRQb2ludCBtYXhFZmZlY3RMb2NhdGlvbiA9
IG1fZWZmZWN0Lm1heEVmZmVjdFJlY3QoKS5sb2NhdGlvbigpOwogICAgIGlmIChpbi0+ZmlsdGVy
VHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYyB8fCBpbi0+ZmlsdGVy
VHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGEpIHsKICAgICAgICAgdGls
ZVJlY3QgPSBmaWx0ZXIuZmlsdGVyUmVnaW9uKCk7CiAgICAgICAgIHRpbGVSZWN0LnNjYWxlKGZp
bHRlci5maWx0ZXJTY2FsZSgpKTsKQEAgLTgyLDExICs5MywxNiBAQCBib29sIEZFVGlsZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogCiAgICAgR3JhcGhpY3ND
b250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKICAgICBmaWx0
ZXJDb250ZXh0LnNldEZpbGxQYXR0ZXJuKFdURk1vdmUocGF0dGVybikpOwotICAgIGZpbHRlckNv
bnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpKTsKKyAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CiAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVUaWxlU29mdHdhcmVBcHBsaWVyKCp0aGlz
KS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogVGV4dFN0cmVhbSYgRkVUaWxl
OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5
cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVUaWxl
IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUdXJidWxlbmNlLmNwcAppbmRleCAyNjU3NzY2M2NjNjMyNzdiZTJkYWEzNjQwOTY4NGIx
ZDcyMjI2OWExLi43NWQzYmY0NGEyMzczNTBmMjc1NWNmNmExMjlmMmQ3MTNiMzA0OTRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVR1cmJ1bGVuY2UuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRkVUdXJidWxlbmNl
LmgiCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVy
LmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KQEAgLTM0LDIwICszNSw2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotLyoKLSAgICBQcm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5n
ZSBbMSwgMioqMzEgLSAyXS4gQWxnb3JpdGhtIGlzOgotICAgIHIgPSAoYSAqIHIpIG1vZCBtIHdo
ZXJlIGEgPSByYW5kQW1wbGl0dWRlID0gMTY4MDcgYW5kCi0gICAgbSA9IHJhbmRNYXhpbXVtID0g
MioqMzEgLSAxID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCi0gICAgU2VlIFtQYXJrICYgTWlsbGVy
XSwgQ0FDTSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKLSAgICBUbyB0ZXN0OiB0
aGUgYWxnb3JpdGhtIHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2NQotICAgIGFz
IHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEu
Ci0qLwotc3RhdGljIGNvbnN0IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsKLXN0YXRpYyBjb25z
dCBsb25nIHNfcmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKiozMSAtIDEKLXN0YXRpYyBj
b25zdCBpbnQgc19yYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7IHByaW1pdGl2ZSByb290
IG9mIG0KLXN0YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKLXN0YXRp
YyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCi0KIFJlZjxGRVR1cmJ1bGVuY2U+
IEZFVHVyYnVsZW5jZTo6Y3JlYXRlKFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZsb2F0IGJhc2VGcmVx
dWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQs
IGJvb2wgc3RpdGNoVGlsZXMpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVUdXJidWxl
bmNlKHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0YXZlcywgc2Vl
ZCwgc3RpdGNoVGlsZXMpKTsKQEAgLTExNSw3MiArMTAyLDEzNCBAQCBib29sIEZFVHVyYnVsZW5j
ZTo6c2V0U3RpdGNoVGlsZXMoYm9vbCBzdGl0Y2gpCiAvLyBUaGUgdHVyYnVsZW5jZSBjYWxjdWxh
dGlvbiBjb2RlIGlzIGFuIGFkYXB0ZWQgdmVyc2lvbiBvZiB3aGF0IGFwcGVhcnMgaW4gdGhlIFNW
RyAxLjEgc3BlY2lmaWNhdGlvbjoKIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRl
cnMuaHRtbCNmZVR1cmJ1bGVuY2UKIAotLy8gQ29tcHV0ZSBwc2V1ZG8gcmFuZG9tIG51bWJlci4K
LWlubGluZSBsb25nIEZFVHVyYnVsZW5jZTo6UGFpbnRpbmdEYXRhOjpyYW5kb20oKQotewotICAg
IGxvbmcgcmVzdWx0ID0gc19yYW5kQW1wbGl0dWRlICogKHNlZWQgJSBzX3JhbmRRKSAtIHNfcmFu
ZFIgKiAoc2VlZCAvIHNfcmFuZFEpOwotICAgIGlmIChyZXN1bHQgPD0gMCkKLSAgICAgICAgcmVz
dWx0ICs9IHNfcmFuZE1heGltdW07Ci0gICAgc2VlZCA9IHJlc3VsdDsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFVHVyYnVs
ZW5jZVNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8
RkVUdXJidWxlbmNlPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBw
bGllcjxGRVR1cmJ1bGVuY2U+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKwor
ICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBp
bnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIC8vIFByb2R1Y2VzIHJlc3Vs
dHMgaW4gdGhlIHJhbmdlIFsxLCAyKiozMSAtIDJdLiBBbGdvcml0aG0gaXM6CisgICAgLy8gciA9
IChhICogcikgbW9kIG0gd2hlcmUgYSA9IHJhbmRBbXBsaXR1ZGUgPSAxNjgwNyBhbmQKKyAgICAv
LyBtID0gcmFuZE1heGltdW0gPSAyKiozMSAtIDEgPSAyMTQ3NDgzNjQ3LCByID0gc2VlZC4KKyAg
ICAvLyBTZWUgW1BhcmsgJiBNaWxsZXJdLCBDQUNNIHZvbC4gMzEgbm8uIDEwIHAuIDExOTUsIE9j
dC4gMTk4OAorICAgIC8vIFRvIHRlc3Q6IHRoZSBhbGdvcml0aG0gc2hvdWxkIHByb2R1Y2UgdGhl
IHJlc3VsdCAxMDQzNjE4MDY1CisgICAgLy8gYXMgdGhlIDEwLDAwMHRoIGdlbmVyYXRlZCBudW1i
ZXIgaWYgdGhlIG9yaWdpbmFsIHNlZWQgaXMgMS4KKyAgICBzdGF0aWMgY29uc3QgaW50IHBlcmxp
bk5vaXNlID0gNDA5NjsKKyAgICBzdGF0aWMgY29uc3QgbG9uZyByYW5kTWF4aW11bSA9IDIxNDc0
ODM2NDc7IC8vIDIqKjMxIC0gMQorICAgIHN0YXRpYyBjb25zdCBpbnQgcmFuZEFtcGxpdHVkZSA9
IDE2ODA3OyAvLyA3Kio1OyBwcmltaXRpdmUgcm9vdCBvZiBtCisgICAgc3RhdGljIGNvbnN0IGlu
dCByYW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKKyAgICBzdGF0aWMgY29uc3QgaW50IHJhbmRSID0g
MjgzNjsgLy8gbSAlIGEKKworICAgIHN0YXRpYyBjb25zdCBpbnQgYmxvY2tTaXplID0gMjU2Owor
ICAgIHN0YXRpYyBjb25zdCBpbnQgYmxvY2tNYXNrID0gYmxvY2tTaXplIC0gMTsKKworICAgIHN0
cnVjdCBQYWludGluZ0RhdGEgeworICAgICAgICAvLyBDb21wdXRlIHBzZXVkbyByYW5kb20gbnVt
YmVyLgorICAgICAgICBsb25nIHJhbmRvbSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvbmcg
cmVzdWx0ID0gcmFuZEFtcGxpdHVkZSAqIChzZWVkICUgcmFuZFEpIC0gcmFuZFIgKiAoc2VlZCAv
IHJhbmRRKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPD0gMCkKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gcmFuZE1heGltdW07CisgICAgICAgICAgICBzZWVkID0gcmVzdWx0OworICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQogCi1pbmxpbmUgZmxvYXQgc21vb3RoQ3Vy
dmUoZmxvYXQgdCkKLXsKLSAgICByZXR1cm4gdCAqIHQgKiAoMyAtIDIgKiB0KTsKLX0KKyAgICAg
ICAgVHVyYnVsZW5jZVR5cGUgdHlwZTsKKyAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVg7Cisg
ICAgICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lZOworICAgICAgICBpbnQgbnVtT2N0YXZlczsKKyAg
ICAgICAgbG9uZyBzZWVkOworICAgICAgICBib29sIHN0aXRjaFRpbGVzOworICAgICAgICBJbnRT
aXplIHBhaW50aW5nU2l6ZTsKIAotaW5saW5lIGZsb2F0IGxpbmVhckludGVycG9sYXRpb24oZmxv
YXQgdCwgZmxvYXQgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gYSArIHQgKiAoYiAtIGEpOwot
fQorICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBibG9ja1NpemUgKyAyXTsKKyAgICAg
ICAgZmxvYXQgZ3JhZGllbnRbNF1bMiAqIGJsb2NrU2l6ZSArIDJdWzJdOworICAgIH07CisKKyAg
ICBzdHJ1Y3QgU3RpdGNoRGF0YSB7CisgICAgICAgIGludCB3aWR0aCB7IDAgfTsgLy8gSG93IG11
Y2ggdG8gc3VidHJhY3QgdG8gd3JhcCBmb3Igc3RpdGNoaW5nLgorICAgICAgICBpbnQgd3JhcFgg
eyAwIH07IC8vIE1pbmltdW0gdmFsdWUgdG8gd3JhcC4KKyAgICAgICAgaW50IGhlaWdodCB7IDAg
fTsKKyAgICAgICAgaW50IHdyYXBZIHsgMCB9OworICAgIH07CisKKyAgICBzdHJ1Y3QgQXBwbHlQ
YXJhbWV0ZXJzIHsKKyAgICAgICAgSW50UmVjdCBmaWx0ZXJSZWdpb247CisgICAgICAgIEZsb2F0
U2l6ZSBmaWx0ZXJTY2FsZTsKKyAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7
CisgICAgICAgIFBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworICAgICAgICBTdGl0Y2hEYXRh
IHN0aXRjaERhdGE7CisgICAgICAgIGludCBzdGFydFk7CisgICAgICAgIGludCBlbmRZOworICAg
IH07CiAKLXZvaWQgRkVUdXJidWxlbmNlOjppbml0UGFpbnQoUGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEpCisgICAgc3RhdGljIGlubGluZSBmbG9hdCBzbW9vdGhDdXJ2ZShmbG9hdCB0KSB7IHJl
dHVybiB0ICogdCAqICgzIC0gMiAqIHQpOyB9CisgICAgc3RhdGljIGlubGluZSBmbG9hdCBsaW5l
YXJJbnRlcnBvbGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0IGIpIHsgcmV0dXJuIGEgKyB0
ICogKGIgLSBhKTsgfQorCisgICAgc3RhdGljIFBhaW50aW5nRGF0YSBpbml0UGFpbnRpbmdEYXRh
KFR1cmJ1bGVuY2VUeXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVksIGludCBudW1PY3RhdmVzLCBsb25nIHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMsIGNvbnN0IElu
dFNpemUmIHBhaW50aW5nU2l6ZSk7CisgICAgc3RhdGljIFN0aXRjaERhdGEgY29tcHV0ZVN0aXRj
aGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNl
RnJlcXVlbmN5WSwgYm9vbCBzdGl0Y2hUaWxlcyk7CisKKyAgICBzdGF0aWMgQ29sb3JDb21wb25l
bnRzPGZsb2F0LCA0PiBub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERh
dGEmLCBjb25zdCBGbG9hdFBvaW50JiBub2lzZVZlY3Rvcik7CisgICAgc3RhdGljIENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9y
Q29tcG9uZW50czxmbG9hdCwgND4mIGZsb2F0Q29tcG9uZW50cyk7CisgICAgc3RhdGljIENvbG9y
Q29tcG9uZW50czx1aW50OF90LCA0PiBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChj
b25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50Jik7CisKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpYyhjb25zdCBJbnRSZWN0JiBmaWx0ZXJS
ZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBw
aXhlbEFycmF5LCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRhLCBpbnQgc3RhcnRZLCBp
bnQgZW5kWSk7CisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybVdvcmtlcihBcHBseVBhcmFt
ZXRlcnMqKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtKGNvbnN0IEludFJlY3QmIGZp
bHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJy
YXkmIHBpeGVsQXJyYXksIFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEmKTsKK307CisKK0ZFVHVy
YnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6UGFpbnRpbmdEYXRhIEZFVHVyYnVsZW5jZVNvZnR3YXJl
QXBwbGllcjo6aW5pdFBhaW50aW5nRGF0YShUdXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNl
RnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBudW1PY3RhdmVzLCBsb25nIHNl
ZWQsIGJvb2wgc3RpdGNoVGlsZXMsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSkKIHsKLSAg
ICBmbG9hdCBub3JtYWxpemF0aW9uRmFjdG9yOworICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0Rh
dGEgeyB0eXBlLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNl
ZWQsIHN0aXRjaFRpbGVzLCBwYWludGluZ1NpemUsIHsgfSwgeyB9IH07CiAKLSAgICAvLyBUaGUg
c2VlZCB2YWx1ZSBjbGFtcCB0byB0aGUgcmFuZ2UgWzEsIHNfcmFuZE1heGltdW0gLSAxXS4KKyAg
ICAvLyBUaGUgc2VlZCB2YWx1ZSBjbGFtcCB0byB0aGUgcmFuZ2UgWzEsIHJhbmRNYXhpbXVtIC0g
MV0uCiAgICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkIDw9IDApCi0gICAgICAgIHBhaW50aW5nRGF0
YS5zZWVkID0gLShwYWludGluZ0RhdGEuc2VlZCAlIChzX3JhbmRNYXhpbXVtIC0gMSkpICsgMTsK
LSAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPiBzX3JhbmRNYXhpbXVtIC0gMSkKLSAgICAgICAg
cGFpbnRpbmdEYXRhLnNlZWQgPSBzX3JhbmRNYXhpbXVtIC0gMTsKKyAgICAgICAgcGFpbnRpbmdE
YXRhLnNlZWQgPSAtKHBhaW50aW5nRGF0YS5zZWVkICUgKHJhbmRNYXhpbXVtIC0gMSkpICsgMTsK
KyAgICBpZiAocGFpbnRpbmdEYXRhLnNlZWQgPiByYW5kTWF4aW11bSAtIDEpCisgICAgICAgIHBh
aW50aW5nRGF0YS5zZWVkID0gcmFuZE1heGltdW0gLSAxOwogCiAgICAgZmxvYXQqIGdyYWRpZW50
OwogICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgNDsgKytjaGFubmVsKSB7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc19ibG9ja1NpemU7ICsraSkgeworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGJsb2NrU2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBwYWludGlu
Z0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gaTsKICAgICAgICAgICAgIGdyYWRpZW50ID0gcGFp
bnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldOwogICAgICAgICAgICAgZG8gewotICAgICAg
ICAgICAgICAgIGdyYWRpZW50WzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEu
cmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2NrU2l6ZSkgLyBzX2Jsb2NrU2l6
ZTsKLSAgICAgICAgICAgICAgICBncmFkaWVudFsxXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFp
bnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkpIC0gc19ibG9ja1NpemUpIC8g
c19ibG9ja1NpemU7CisgICAgICAgICAgICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2FzdDxm
bG9hdD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogYmxvY2tTaXplKSkgLSBibG9ja1Np
emUpIC8gYmxvY2tTaXplOworICAgICAgICAgICAgICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIGJsb2NrU2l6ZSkpIC0gYmxv
Y2tTaXplKSAvIGJsb2NrU2l6ZTsKICAgICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVudFswXSAm
JiAhZ3JhZGllbnRbMV0pOwotICAgICAgICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0ZDo6
aHlwb3QoZ3JhZGllbnRbMF0sIGdyYWRpZW50WzFdKTsKKyAgICAgICAgICAgIGZsb2F0IG5vcm1h
bGl6YXRpb25GYWN0b3IgPSBzdGQ6Omh5cG90KGdyYWRpZW50WzBdLCBncmFkaWVudFsxXSk7CiAg
ICAgICAgICAgICBncmFkaWVudFswXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwogICAgICAgICAg
ICAgZ3JhZGllbnRbMV0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKICAgICAgICAgfQogICAgIH0K
IAotICAgIGZvciAoaW50IGkgPSBzX2Jsb2NrU2l6ZSAtIDE7IGkgPiAwOyAtLWkpIHsKKyAgICBm
b3IgKGludCBpID0gYmxvY2tTaXplIC0gMTsgaSA+IDA7IC0taSkgewogICAgICAgICBpbnQgayA9
IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07Ci0gICAgICAgIGludCBqID0gcGFpbnRp
bmdEYXRhLnJhbmRvbSgpICUgc19ibG9ja1NpemU7CisgICAgICAgIGludCBqID0gcGFpbnRpbmdE
YXRhLnJhbmRvbSgpICUgYmxvY2tTaXplOwogICAgICAgICBBU1NFUlQoaiA+PSAwKTsKLSAgICAg
ICAgQVNTRVJUKGogPCAyICogc19ibG9ja1NpemUgKyAyKTsKKyAgICAgICAgQVNTRVJUKGogPCAy
ICogYmxvY2tTaXplICsgMik7CiAgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jb
aV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2pdOwogICAgICAgICBwYWludGluZ0Rh
dGEubGF0dGljZVNlbGVjdG9yW2pdID0gazsKICAgICB9CiAKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IHNfYmxvY2tTaXplICsgMjsgKytpKSB7Ci0gICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNl
U2VsZWN0b3Jbc19ibG9ja1NpemUgKyBpXSA9IHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3Jb
aV07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBibG9ja1NpemUgKyAyOyArK2kpIHsKKyAgICAg
ICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltibG9ja1NpemUgKyBpXSA9IHBhaW50aW5n
RGF0YS5sYXR0aWNlU2VsZWN0b3JbaV07CiAgICAgICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBj
aGFubmVsIDwgNDsgKytjaGFubmVsKSB7Ci0gICAgICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGll
bnRbY2hhbm5lbF1bc19ibG9ja1NpemUgKyBpXVswXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtj
aGFubmVsXVtpXVswXTsKLSAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVs
XVtzX2Jsb2NrU2l6ZSArIGldWzFdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ld
WzFdOworICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2Jsb2NrU2l6
ZSArIGldWzBdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzBdOworICAgICAg
ICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2Jsb2NrU2l6ZSArIGldWzFdID0g
cGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ldWzFdOwogICAgICAgICB9CiAgICAgfQor
CisgICAgcmV0dXJuIHBhaW50aW5nRGF0YTsKIH0KIAotRkVUdXJidWxlbmNlOjpTdGl0Y2hEYXRh
IEZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYg
YmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WSkgY29uc3QKK0ZFVHVyYnVsZW5j
ZVNvZnR3YXJlQXBwbGllcjo6U3RpdGNoRGF0YSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6
OmNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lY
LCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVksIGJvb2wgc3RpdGNoVGlsZXMpCiB7Ci0gICAgaWYgKCFt
X3N0aXRjaFRpbGVzKQorICAgIGlmICghc3RpdGNoVGlsZXMpCiAgICAgICAgIHJldHVybiB7IH07
CiAKICAgICBmbG9hdCB0aWxlV2lkdGggPSB0aWxlU2l6ZS53aWR0aCgpOwpAQCAtMjA5LDE1ICsy
NTgsMTUgQEAgRkVUdXJidWxlbmNlOjpTdGl0Y2hEYXRhIEZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0
aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYKIAogICAgIFN0aXRjaERhdGEgc3RpdGNo
RGF0YTsKICAgICBzdGl0Y2hEYXRhLndpZHRoID0gcm91bmRmKHRpbGVXaWR0aCAqIGJhc2VGcmVx
dWVuY3lYKTsKLSAgICBzdGl0Y2hEYXRhLndyYXBYID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERh
dGEud2lkdGg7CisgICAgc3RpdGNoRGF0YS53cmFwWCA9IHBlcmxpbk5vaXNlICsgc3RpdGNoRGF0
YS53aWR0aDsKICAgICBzdGl0Y2hEYXRhLmhlaWdodCA9IHJvdW5kZih0aWxlSGVpZ2h0ICogYmFz
ZUZyZXF1ZW5jeVkpOwotICAgIHN0aXRjaERhdGEud3JhcFkgPSBzX3Blcmxpbk5vaXNlICsgc3Rp
dGNoRGF0YS5oZWlnaHQ7CisgICAgc3RpdGNoRGF0YS53cmFwWSA9IHBlcmxpbk5vaXNlICsgc3Rp
dGNoRGF0YS5oZWlnaHQ7CiAKICAgICByZXR1cm4gc3RpdGNoRGF0YTsKIH0KIAogLy8gVGhpcyBp
cyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmls
dGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCi1Db2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+
IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwg
Y29uc3QgU3RpdGNoRGF0YSYgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0
b3IpIGNvbnN0CitDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZVNvZnR3YXJl
QXBwbGllcjo6bm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgY29uc3Qg
U3RpdGNoRGF0YSYgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VWZWN0b3IpCiB7
CiAgICAgc3RydWN0IE5vaXNlUG9zaXRpb24gewogICAgICAgICBpbnQgaW5kZXg7IC8vIGJ4MCwg
YnkwIGluIHRoZSBzcGVjIHRleHQuCkBAIC0yMzAsNyArMjc5LDcgQEAgQ29sb3JDb21wb25lbnRz
PGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEKICAgICAgICAgICAgIC8vICBieDAgPSAoaW50KXQ7CiAgICAgICAgICAgICAvLyAg
YngxID0gYngwKzE7CiAgICAgICAgICAgICAvLyAgcngwID0gdCAtIChpbnQpdDsKLSAgICAgICAg
ICAgIGZsb2F0IHBvc2l0aW9uID0gY29tcG9uZW50ICsgc19wZXJsaW5Ob2lzZTsKKyAgICAgICAg
ICAgIGZsb2F0IHBvc2l0aW9uID0gY29tcG9uZW50ICsgcGVybGluTm9pc2U7CiAgICAgICAgICAg
ICBpbmRleCA9IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24pOwogICAgICAgICAgICAgbmV4dElu
ZGV4ID0gaW5kZXggKyAxOwogICAgICAgICAgICAgZnJhY3Rpb24gPSBwb3NpdGlvbiAtIGluZGV4
OwpAQCAtMjU0LDcgKzMwMyw3IEBAIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxl
bmNlOjpub2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhCiAgICAgTm9pc2VQ
b3NpdGlvbiBub2lzZVkobm9pc2VWZWN0b3IueSgpKTsKIAogICAgIC8vIElmIHN0aXRjaGluZywg
YWRqdXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgotICAgIGlmIChtX3N0aXRjaFRpbGVz
KSB7CisgICAgaWYgKHBhaW50aW5nRGF0YS5zdGl0Y2hUaWxlcykgewogICAgICAgICBub2lzZVgu
c3RpdGNoKHN0aXRjaERhdGEud2lkdGgsIHN0aXRjaERhdGEud3JhcFgpOwogICAgICAgICBub2lz
ZVkuc3RpdGNoKHN0aXRjaERhdGEuaGVpZ2h0LCBzdGl0Y2hEYXRhLndyYXBZKTsKICAgICB9CkBA
IC0yNjMsMTAgKzMxMiwxMCBAQCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5j
ZTo6bm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YQogICAgIC8vIGJ4MSAm
PSBCTTsKICAgICAvLyBieTAgJj0gQk07CiAgICAgLy8gYnkxICY9IEJNOwotICAgIG5vaXNlWC5p
bmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBub2lzZVgubmV4dEluZGV4ICY9IHNfYmxvY2tNYXNr
OwotICAgIG5vaXNlWS5pbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBub2lzZVkubmV4dEluZGV4
ICY9IHNfYmxvY2tNYXNrOworICAgIG5vaXNlWC5pbmRleCAmPSBibG9ja01hc2s7CisgICAgbm9p
c2VYLm5leHRJbmRleCAmPSBibG9ja01hc2s7CisgICAgbm9pc2VZLmluZGV4ICY9IGJsb2NrTWFz
azsKKyAgICBub2lzZVkubmV4dEluZGV4ICY9IGJsb2NrTWFzazsKIAogICAgIC8vIGkgPSB1TGF0
dGljZVNlbGVjdG9yW2J4MF07CiAgICAgLy8gaiA9IHVMYXR0aWNlU2VsZWN0b3JbYngxXTsKQEAg
LTMyMyw3ICszNzIsNyBAQCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZTo6
bm9pc2UyRChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YQogCiAvLyBodHRwczovL3d3
dy53My5vcmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50IGRlc2NyaWJl
cyB0aGlzIGNvbnZlcnNpb24gdG8gY29sb3IgY29tcG9uZW50cy4KIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCB1c2UgY29sb3JDb252ZXJ0PFNSR0JBPHVpbnQ4Pj4oU1JHQkE8ZmxvYXQ+KSB0byBnZXQg
dGhlIHNhbWUgYmVoYXZpb3IuCi1zdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90
LCA0PiB0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9h
dCwgND4mIGZsb2F0Q29tcG9uZW50cykKK0NvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1
cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OnRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMoY29uc3Qg
Q29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiYgZmxvYXRDb21wb25lbnRzKQogewogICAgIHJldHVy
biB7CiAgICAgICAgIHN0ZDo6Y2xhbXA8dWludDhfdD4oc3RhdGljX2Nhc3Q8aW50PihmbG9hdENv
bXBvbmVudHNbMF0gKiAyNTUpLCAwLCAyNTUpLApAQCAtMzMzLDEzICszODIsMTMgQEAgc3RhdGlj
IGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gdG9JbnRCYXNlZENvbG9yQ29tcG9u
ZW50cyhjb25zdCBDb2xvckMKICAgICB9OwogfQogCi1Db2xvckNvbXBvbmVudHM8dWludDhfdCwg
ND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkgY29uc3QKK0NvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRVR1
cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50
KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewogICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0OwogICAgIEZsb2F0UG9pbnQgbm9pc2VWZWN0b3Io
cG9pbnQueCgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lYLCBwb2ludC55KCkgKiBwYWlu
dGluZ0RhdGEuYmFzZUZyZXF1ZW5jeVkpOwogICAgIGZsb2F0IHJhdGlvID0gMTsKLSAgICBmb3Ig
KGludCBvY3RhdmUgPSAwOyBvY3RhdmUgPCBtX251bU9jdGF2ZXM7ICsrb2N0YXZlKSB7Ci0gICAg
ICAgIGlmIChtX3R5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKKyAgICBmb3Ig
KGludCBvY3RhdmUgPSAwOyBvY3RhdmUgPCBwYWludGluZ0RhdGEubnVtT2N0YXZlczsgKytvY3Rh
dmUpIHsKKyAgICAgICAgaWYgKHBhaW50aW5nRGF0YS50eXBlID09IFR1cmJ1bGVuY2VUeXBlOjpG
cmFjdGFsTm9pc2UpCiAgICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9p
c2UyRChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yKSAvIHJhdGlvOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gbm9pc2Uy
RChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yKS5hYnMoKSAvIHJhdGlvOwpA
QCAtMzQ4LDMyICszOTcsMzEgQEAgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVs
ZW5jZTo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QKICAgICAgICAgbm9p
c2VWZWN0b3Iuc2V0WShub2lzZVZlY3Rvci55KCkgKiAyKTsKICAgICAgICAgcmF0aW8gKj0gMjsK
IAotICAgICAgICBpZiAobV9zdGl0Y2hUaWxlcykgewotICAgICAgICAgICAgLy8gVXBkYXRlIHN0
aXRjaCB2YWx1ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGluTm9pc2UgYmVmb3JlIHRoZSBtdWx0aXBs
aWNhdGlvbiBhbmQKKyAgICAgICAgaWYgKHBhaW50aW5nRGF0YS5zdGl0Y2hUaWxlcykgeworICAg
ICAgICAgICAgLy8gVXBkYXRlIHN0aXRjaCB2YWx1ZXMuIFN1YnRyYWN0aW5nIHBlcmxpbk5vaXNl
IGJlZm9yZSB0aGUgbXVsdGlwbGljYXRpb24gYW5kCiAgICAgICAgICAgICAvLyBhZGRpbmcgaXQg
YWZ0ZXJ3YXJkIHNpbXBsaWZpZXMgdG8gc3VidHJhY3RpbmcgaXQgb25jZS4KICAgICAgICAgICAg
IHN0aXRjaERhdGEud2lkdGggKj0gMjsKLSAgICAgICAgICAgIHN0aXRjaERhdGEud3JhcFggPSAy
ICogc3RpdGNoRGF0YS53cmFwWCAtIHNfcGVybGluTm9pc2U7CisgICAgICAgICAgICBzdGl0Y2hE
YXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBwZXJsaW5Ob2lzZTsKICAgICAgICAg
ICAgIHN0aXRjaERhdGEuaGVpZ2h0ICo9IDI7Ci0gICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBZ
ID0gMiAqIHN0aXRjaERhdGEud3JhcFkgLSBzX3Blcmxpbk5vaXNlOworICAgICAgICAgICAgc3Rp
dGNoRGF0YS53cmFwWSA9IDIgKiBzdGl0Y2hEYXRhLndyYXBZIC0gcGVybGluTm9pc2U7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9uUmVz
dWx0IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1KSAv
IDIgYnkgZnJhY3RhbE5vaXNlCiAgICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQg
KiAyNTUpIGJ5IHR1cmJ1bGVuY2UuCi0gICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6
RnJhY3RhbE5vaXNlKQorICAgIGlmIChwYWludGluZ0RhdGEudHlwZSA9PSBUdXJidWxlbmNlVHlw
ZTo6RnJhY3RhbE5vaXNlKQogICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKIAogICAgIHJldHVybiB0b0ludEJh
c2VkQ29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7CiB9CiAKLXZvaWQg
RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBVaW50OENsYW1w
ZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0
aXRjaERhdGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0Cit2b2lkIEZF
VHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgSW50
UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBVaW50OENs
YW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEs
IFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCiB7CiAgICAgQVNT
RVJUKGVuZFkgPiBzdGFydFkpOwogCi0gICAgSW50UmVjdCBmaWx0ZXJSZWdpb24gPSBhYnNvbHV0
ZVBhaW50UmVjdCgpOwogICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwgZmlsdGVyUmVnaW9uLnkoKSAr
IHN0YXJ0WSk7CiAgICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSBzdGFydFkgKiAoZmlsdGVy
UmVnaW9uLndpZHRoKCkgPDwgMik7Ci0gICAgRmxvYXRTaXplIGludmVyc2VTY2FsZSA9IHsgMSAv
IGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5o
ZWlnaHQoKSB9OworICAgIEZsb2F0U2l6ZSBpbnZlcnNlU2NhbGUgPSB7IDEgLyBmaWx0ZXJTY2Fs
ZS53aWR0aCgpLCAxIC8gZmlsdGVyU2NhbGUuaGVpZ2h0KCkgfTsKIAogICAgIGZvciAoaW50IHkg
PSBzdGFydFk7IHkgPCBlbmRZOyArK3kpIHsKICAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkg
KyAxKTsKQEAgLTM4OCw0NSArNDM2LDIyIEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9u
KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJhCiAgICAg
fQogfQogCi12b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFy
YW1ldGVycyogcGFyYW1ldGVycykKK3ZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtV29ya2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKIHsKLSAgICBw
YXJhbWV0ZXJzLT5lZmZlY3QtPmZpbGxSZWdpb24oKnBhcmFtZXRlcnMtPmZpbHRlciwgKnBhcmFt
ZXRlcnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMt
PnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7CisgICAg
YXBwbHlQbGF0Zm9ybUdlbmVyaWMocGFyYW1ldGVycy0+ZmlsdGVyUmVnaW9uLCBwYXJhbWV0ZXJz
LT5maWx0ZXJTY2FsZSwgKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWlu
dGluZ0RhdGEsIHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFy
YW1ldGVycy0+ZW5kWSk7CiB9CiAKLWJvb2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit2b2lkIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllcjo6YXBwbHlQbGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZs
b2F0U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSYgc3RpdGNoRGF0YSkKIHsKLSAgICBh
dXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhl
bEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25Q
aXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50U2l6
ZSByZXN1bHRTaXplKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLQotICAgIGlmIChyZXN1
bHRTaXplLmlzRW1wdHkoKSkgewotICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXkuemVyb0Zp
bGwoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgSW50U2l6ZSB0aWxlU2l6
ZSA9IHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7Ci0K
LSAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCA9IG1fYmFzZUZyZXF1ZW5jeVg7Ci0gICAgZmxvYXQg
YmFzZUZyZXF1ZW5jeVkgPSBtX2Jhc2VGcmVxdWVuY3lZOwotICAgIFN0aXRjaERhdGEgc3RpdGNo
RGF0YSA9IGNvbXB1dGVTdGl0Y2hpbmcodGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJl
cXVlbmN5WSk7CisgICAgaW50IGhlaWdodCA9IGZpbHRlclJlZ2lvbi5oZWlnaHQoKTsKKyAgICB1
bnNpZ25lZCBhcmVhID0gZmlsdGVyUmVnaW9uLmFyZWEoKTsKIAotICAgIFBhaW50aW5nRGF0YSBw
YWludGluZ0RhdGEobV9zZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVu
Y3lZKTsKLSAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKKyAgICBzdGF0aWMgY29uc3QgaW50
IG1pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxp
bWl0IGZvciBwYXJhbGxlbCBqb2JzLgorICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBmaWx0
ZXJSZWdpb24uaGVpZ2h0KCkgLyA4OworICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIg
PSBzdGQ6Om1pbjx1bnNpZ25lZD4oYXJlYSAvIG1pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1U
aHJlYWRzKTsKIAotICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNpemUuYXJlYSgpOwotICAgIGlmIChh
cmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGhl
aWdodCA9IHJlc3VsdFNpemUuaGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRz
ID0gaGVpZ2h0IC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjpt
aW48dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRz
KTsKICAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgUGFyYWxsZWxK
b2JzPEZpbGxSZWdpb25QYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFVHVyYnVs
ZW5jZTo6ZmlsbFJlZ2lvbldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAgIFBh
cmFsbGVsSm9iczxBcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYXBwbHlQbGF0Zm9ybVdv
cmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CiAKICAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1l
dGVyIGFycmF5CiAgICAgICAgIGF1dG8gbnVtSm9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpv
YnMoKTsKQEAgLTQzNywxMCArNDYyLDEwIEBAIGJvb2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgICAgICAgICB1bnNpZ25lZCBz
dGFydFkgPSAwOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtSm9i
czsgKytpKSB7Ci0gICAgICAgICAgICAgICAgRmlsbFJlZ2lvblBhcmFtZXRlcnMmIHBhcmFtcyA9
IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoaSk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRl
ciA9ICZmaWx0ZXI7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmVmZmVjdCA9IHRoaXM7Ci0gICAg
ICAgICAgICAgICAgcGFyYW1zLnBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5Owor
ICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBh
cmFtZXRlcihpKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyUmVnaW9uID0gZmlsdGVy
UmVnaW9uOworICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJTY2FsZSA9IGZpbHRlclNjYWxl
OworICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJnBpeGVsQXJyYXk7CiAgICAg
ICAgICAgICAgICAgcGFyYW1zLnBhaW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7CiAgICAgICAg
ICAgICAgICAgcGFyYW1zLnN0aXRjaERhdGEgPSBzdGl0Y2hEYXRhOwogICAgICAgICAgICAgICAg
IHBhcmFtcy5zdGFydFkgPSBzdGFydFk7CkBAIC00NTEsMTUgKzQ3Niw0OCBAQCBib29sIEZFVHVy
YnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
CiAKICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBu
byByb29tIGZvciBhIG5ldyB0aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMgdG9vIHNtYWxsLgot
ICAgIGZpbGxSZWdpb24oZmlsdGVyLCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0
YSwgc3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhmaWx0
ZXJSZWdpb24sIGZpbHRlclNjYWxlLCBwaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERh
dGEsIDAsIGhlaWdodCk7Cit9CisKK2Jvb2wgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjph
cHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJikKK3sK
KyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJl
c3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOworICAgIGlmICgh
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSW50
U2l6ZSByZXN1bHRTaXplKG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKKyAg
ICBpZiAocmVzdWx0U2l6ZS5hcmVhKCkuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgZGVzdGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGF1dG8gdGlsZVNpemUgPSByb3VuZGVkSW50U2l6ZShtX2VmZmVj
dC5maWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5zaXplKCkpOworCisgICAgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVggPSBtX2VmZmVjdC5iYXNlRnJlcXVlbmN5WCgpOworICAgIGZsb2F0IGJhc2VGcmVx
dWVuY3lZID0gbV9lZmZlY3QuYmFzZUZyZXF1ZW5jeVkoKTsKKyAgICBhdXRvIHN0aXRjaERhdGEg
PSBjb21wdXRlU3RpdGNoaW5nKHRpbGVTaXplLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5j
eVksIG1fZWZmZWN0LnN0aXRjaFRpbGVzKCkpOworCisgICAgYXV0byBwYWludGluZ0RhdGEgPSBp
bml0UGFpbnRpbmdEYXRhKG1fZWZmZWN0LnR5cGUoKSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVx
dWVuY3lZLCBtX2VmZmVjdC5udW1PY3RhdmVzKCksIG1fZWZmZWN0LnNlZWQoKSwgbV9lZmZlY3Qu
c3RpdGNoVGlsZXMoKSwgdGlsZVNpemUpOworCisgICAgYXBwbHlQbGF0Zm9ybShtX2VmZmVjdC5h
YnNvbHV0ZVBhaW50UmVjdCgpLCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSwgZGVzdGluYXRpb25QaXhl
bEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEpOwogICAgIHJldHVybiB0cnVlOwogfQog
Citib29sIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQoreworICAgIHJldHVybiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIoKnRoaXMp
LmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVHVyYnVsZW5jZVR5cGUgdHlwZSkKIHsKICAgICBz
d2l0Y2ggKHR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmluZGV4IGU2OThiMzEzZjE4ODYyNTAwMzRiMDY1
OTBkMWUyYjNlZDZkYzM5ODguLjdjNDdjNzg3NDliODU2ZmM5ZjkxYWY4NGM2MTM0Y2Y0N2RmMDZl
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNTgsNjQgKzU4LDEzIEBAIHB1YmxpYzoKICAgICBib29s
IHNldFN0aXRjaFRpbGVzKGJvb2wpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBpbnQg
c19ibG9ja1NpemUgPSAyNTY7Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrTWFzayA9IHNf
YmxvY2tTaXplIC0gMTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVu
c2lvbiA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwg
am9icy4KLQotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBQYWludGluZ0RhdGEo
bG9uZyBwYWludGluZ1NlZWQsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSwgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAgOiBzZWVkKHBh
aW50aW5nU2VlZCkKLSAgICAgICAgICAgICwgZmlsdGVyU2l6ZShwYWludGluZ1NpemUpCi0gICAg
ICAgICAgICAsIGJhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQotICAgICAgICAgICAgLCBi
YXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAg
ICAgICAgbG9uZyBzZWVkOwotICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBzX2Jsb2Nr
U2l6ZSArIDJdOwotICAgICAgICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9ja1NpemUgKyAy
XVsyXTsKLSAgICAgICAgSW50U2l6ZSBmaWx0ZXJTaXplOwotICAgICAgICBmbG9hdCBiYXNlRnJl
cXVlbmN5WDsKLSAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVk7Ci0KLSAgICAgICAgaW5saW5l
IGxvbmcgcmFuZG9tKCk7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTdGl0Y2hEYXRhIHsKLSAgICAg
ICAgU3RpdGNoRGF0YSgpID0gZGVmYXVsdDsKLQotICAgICAgICBpbnQgd2lkdGggeyAwIH07IC8v
IEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KLSAgICAgICAgaW50
IHdyYXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCi0gICAgICAgIGludCBoZWln
aHQgeyAwIH07Ci0gICAgICAgIGludCB3cmFwWSB7IDAgfTsKLSAgICB9OwotCi0gICAgc3RydWN0
IEZpbGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgY29uc3QgRmlsdGVyKiBmaWx0ZXI7Ci0g
ICAgICAgIEZFVHVyYnVsZW5jZSogZWZmZWN0OwotICAgICAgICBVaW50OENsYW1wZWRBcnJheSog
cGl4ZWxBcnJheTsKLSAgICAgICAgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7Ci0gICAgICAg
IFN0aXRjaERhdGEgc3RpdGNoRGF0YTsKLSAgICAgICAgaW50IHN0YXJ0WTsKLSAgICAgICAgaW50
IGVuZFk7Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIoRmlsbFJl
Z2lvblBhcmFtZXRlcnMqKTsKLQogICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwgZmxv
YXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywg
ZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKICAgICB2b2lkIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJl
Y3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotICAgIGJvb2wgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRh
dGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdE
YXRhJik7Ci0gICAgU3RpdGNoRGF0YSBjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUs
IGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZKSBjb25zdDsKLSAg
ICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiwg
Y29uc3QgU3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBDb2xvckNv
bXBvbmVudHM8dWludDhfdCwgND4gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29u
c3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owot
ICAgIHZvaWQgZmlsbFJlZ2lvbihjb25zdCBGaWx0ZXImLCBVaW50OENsYW1wZWRBcnJheSYsIGNv
bnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25z
dDsKKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlk
ZTsKIAotICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOworICAgIFdURjo6
VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXBy
ZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVHVyYnVsZW5jZVR5cGUgbV90
eXBlOwogICAgIGZsb2F0IG1fYmFzZUZyZXF1ZW5jeVg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdEFwcGxpZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBwbGll
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQ3ZTE0MjUxYzU2MmU5NjdmZmI5YWI3MWVjM2FmYTcwZGNiOWMyYjEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdEFwcGxpZXIuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckVmZmVjdEFwcGxpZXIgeworcHVibGljOgorICAg
IEZpbHRlckVmZmVjdEFwcGxpZXIoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCB+RmlsdGVyRWZm
ZWN0QXBwbGllcigpID0gZGVmYXVsdDsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoY29u
c3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dHMpID0gMDsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckVmZmVjdFR5cGU+CitjbGFzcyBGaWx0ZXJFZmZlY3RD
b25jcmV0ZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0QXBwbGllciB7CitwdWJsaWM6Cisg
ICAgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyKEZpbHRlckVmZmVjdFR5cGUmIGVmZmVjdCkK
KyAgICAgICAgOiBtX2VmZmVjdChlZmZlY3QpCisgICAgeworICAgIH0KKyAgICAKK3Byb3RlY3Rl
ZDoKKyAgICBGaWx0ZXJFZmZlY3RUeXBlJiBtX2VmZmVjdDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvTGlnaHRTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvTGlnaHRTb3VyY2UuaAppbmRleCA5NGQxOTUwMTM5ZDZkMjQzYTg2NjFlNWVhNTVkMjM1
YTczODlmNWQ1Li44ZGI4ZTU2NTk3YmFiZWM4Njg2MTY4M2ZmOGUwNTgyODhjNzEyNmY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291
cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdo
dFNvdXJjZS5oCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBMaWdodFR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0ID0gMDsKIAotICAg
IHZpcnR1YWwgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50
aW5nRGF0YSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBG
aWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBjb25zdCA9IDA7CiAgICAgLy8geiBpcyBhIGZs
b2F0IG51bWJlciwgc2luY2UgaXQgaXMgdGhlIGFscGhhIHZhbHVlIHNjYWxlZCBieSBhIHVzZXIK
ICAgICAvLyBzcGVjaWZpZWQgInN1cmZhY2VTY2FsZSIgY29uc3RhbnQsIHdoaWNoIHR5cGUgaXMg
PG51bWJlcj4gaW4gdGhlIFNWRyBzdGFuZGFyZC4KICAgICAvLyB4IGFuZCB5IGFyZSBpbiB0aGUg
Y29vcmRpbmF0ZXMgb2YgdGhlIEZpbHRlckVmZmVjdCdzIGJ1ZmZlci4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRT
b3VyY2UuY3BwCmluZGV4IDFhYjVlMTllMTFhNGYzNmVhMmE0MjZhNzUwMzg3OTEyOGY1NGI0NGIu
LmMyZDg3NDkzYjI4ZGUzODYxM2UzZTIwMjg0ZmZlMmZmNDI1ZmVlMmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExp
Z2h0U291cmNlLmNwcApAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZl
Y3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJikKK3ZvaWQgUG9pbnRMaWdodFNvdXJjZTo6
aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRp
bmdEYXRhJikgY29uc3QKIHsKICAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRlckVmZmVj
dC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkp
KTsKICAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFj
ZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaApp
bmRleCA2N2EzYTBiZDM5YThhOWNjMTk1NDM0OTg1OTZkNzExNWY0YmI5NWE1Li40MmMzZGM2MTc4
ODUyMmVjNzg3Y2FlZTJhYzM0YThlMzJmOWRiZDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaApA
QCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRZKGZsb2F0KSBvdmVycmlkZTsK
ICAgICBib29sIHNldFooZmxvYXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdE
YXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJyaWRlOworICAgIHZv
aWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBj
b25zdCBvdmVycmlkZTsKICAgICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdo
dGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25z
dCBmaW5hbDsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKQEAgLTUyLDcgKzUyLDcgQEAgcHJpdmF0
ZToKICAgICB9CiAKICAgICBGbG9hdFBvaW50M0QgbV91c2VyU3BhY2VQb3NpdGlvbjsKLSAgICBG
bG9hdFBvaW50M0QgbV9idWZmZXJQb3NpdGlvbjsKKyAgICBtdXRhYmxlIEZsb2F0UG9pbnQzRCBt
X2J1ZmZlclBvc2l0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhh
LmNwcAppbmRleCA4ZmE0NDJiOGQ5ZDUzYTk5ZWY1Y2ExNTg4MjY2MzUwZGE2YmE1ODQwLi44MjAy
ZmI5NDhhOTZkNzAzZTU4NWI0OWM5MmUyNTM0NGIwM2JhYTU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcApA
QCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0ZXIu
aCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC00NSwxNyAr
NDYsMjkgQEAgdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoaW5wdXRFZmZlY3Qo
MCktPmFic29sdXRlUGFpbnRSZWN0KCkpOwogfQogCi1ib29sIFNvdXJjZUFscGhhOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBT
b3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBm
aWxlcy4KK2NsYXNzIFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVm
ZmVjdENvbmNyZXRlQXBwbGllcjxTb3VyY2VBbHBoYT4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0
ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8U291cmNlQWxwaGE+OworCitwdWJsaWM6CisgICAgdXNp
bmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmls
dGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworfTsKKworYm9vbCBTb3Vy
Y2VBbHBoYVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdElt
YWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3RzWzBdLmdldCgpOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdl
QnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGlucHV0RWZmZWN0KDAp
LT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VC
dWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWlu
dFJlY3QoKS5zaXplKCkpOworICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBt
X2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0
JiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKIAogICAgIGZpbHRlckNv
bnRleHQuZmlsbFJlY3QoaW1hZ2VSZWN0LCBDb2xvcjo6YmxhY2spOwpAQCAtNjQsNiArNzcsMTEg
QEAgYm9vbCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gU291cmNlQWxwaGFT
b2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQor
CiBUZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8
PCAiW1NvdXJjZUFscGhhXVxuIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCmluZGV4IGVjZGU0MzFmOWI5
YjA2NDQxM2VhMDViNjBkZGNiOTJlNTg5OGM3MDQuLjdiMjYzZGRlMDk3YzU5MGQ3ZjVkNGM0OWY0
NjRkNTc2NWU2NzQ1ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcApAQCAtMjEsNiArMjEsNyBAQAog
I2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1
ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTQyLDEwICs0MywyMCBAQCB2
b2lkIFNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFp
bnRSZWN0KSk7CiB9CiAKLWJvb2wgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYgZmlsdGVyKQorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIFNvdXJjZUdy
YXBoaWNTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMu
CitjbGFzcyBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVj
dENvbmNyZXRlQXBwbGllcjxTb3VyY2VHcmFwaGljPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRl
ckVmZmVjdENvbmNyZXRlQXBwbGllcjxTb3VyY2VHcmFwaGljPjsKKworcHVibGljOgorICAgIHVz
aW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZp
bHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKK307CisKK2Jvb2wgU291
cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IEZpbHRlckVmZmVjdFZlY3RvciYpCiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBm
aWx0ZXIuc291cmNlSW1hZ2UoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1h
Z2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUlt
YWdlKCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtNTMsNiArNjQsMTEgQEAgYm9vbCBTb3VyY2VHcmFwaGljOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK2Jvb2wgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVy
KCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogVGV4dFN0cmVhbSYg
U291cmNlR3JhcGhpYzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUdy
YXBoaWNdXG4iOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCmluZGV4IDcxNjA3YWIwMGZmOWQ2YTZk
MDE2OTFkOWJiYjg1NTNkMWYzNDhkMDAuLmU3YzdjMDRlZGVlZDg3MmU3OWEyMjNiZGFkODZhOTFl
ZDMzZjAyMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogLy8gYWNjb3JkaW5nIHRvIHRoZSBTVkcgMS4xIFNFIGxpZ2h0IHJl
Z3Jlc3Npb24gdGVzdHMKIHN0YXRpYyBjb25zdCBmbG9hdCBhbnRpQWxpYXNUcmVzaG9sZCA9IDAu
MDE2ZjsKIAotdm9pZCBTcG90TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmls
dGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQordm9p
ZCBTcG90TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBm
aWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKSBjb25zdAogewogICAgIG1f
YnVmZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRv
QnVmZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkpOwogICAgIC8vIFRvIHNjYWxlIFosIG1h
cCBhIHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0
aW9uIGJ5IHouCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaAppbmRleCAzNTE1MTYzNTA3N2VlZjBlNzNjMjZh
ZTQ0MmE1ZWE1MzRmZDFmM2JmLi4yZWRkOTMwOTlkOTcyODJiMDZkN2MxOWU3NzI3ZDc1ZDY0MmU5
YzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1Nwb3RMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAg
IGJvb2wgc2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRM
aW1pdGluZ0NvbmVBbmdsZShmbG9hdCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGluaXRQYWludGlu
Z0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYp
IGNvbnN0IG92ZXJyaWRlOwogICAgIENvbXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhlbExp
Z2h0aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNv
bnN0IGZpbmFsOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNjgsNyArNjgsNyBAQCBwcml2
YXRlOgogICAgIEZsb2F0UG9pbnQzRCBtX3VzZXJTcGFjZVBvc2l0aW9uOwogICAgIEZsb2F0UG9p
bnQzRCBtX3VzZXJTcGFjZVBvaW50c0F0OwogCi0gICAgRmxvYXRQb2ludDNEIG1fYnVmZmVyUG9z
aXRpb247CisgICAgbXV0YWJsZSBGbG9hdFBvaW50M0QgbV9idWZmZXJQb3NpdGlvbjsKIAogICAg
IGZsb2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKICAgICBmbG9hdCBtX2xpbWl0aW5nQ29uZUFuZ2xl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJ
bWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdl
LmNwcAppbmRleCAzZmVjZjFmMzQ0ZTFjN2Y2YTZhMmE2MDkxMTk1MjE4NGI2MTZkNjMyLi5jNzU5
YzlhOGM1NmRiZWIzNzVkZTM3ZjY1NzU1Yzk4NjAxZjY4NDBlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAtMjUsNiArMjUs
NyBAQAogI2luY2x1ZGUgIlNWR0ZFSW1hZ2UuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgorI2lu
Y2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTc0LDI5ICs3NSwzOSBA
QCB2b2lkIEZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoaW1hZ2VS
ZWN0KSk7CiB9CiAKLWJvb2wgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYgZmlsdGVyKQorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFSW1hZ2VTb2Z0d2FyZUFw
cGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUltYWdl
U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUlt
YWdlPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUlt
YWdlPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5
KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBv
dmVycmlkZTsKK307CisKK2Jvb2wgRkVJbWFnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYpCiB7Ci0gICAgYXV0byBy
ZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byByZXN1bHRJbWFnZSA9
IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBwcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0
ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKKyAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IG1f
ZWZmZWN0LmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwogICAgIGF1dG8mIGNvbnRleHQgPSBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpOwogCi0gICAgV1RGOjpzd2l0Y2hPbihtX3NvdXJjZUltYWdl
LAorICAgIFdURjo6c3dpdGNoT24obV9lZmZlY3Quc291cmNlSW1hZ2UoKSwKICAgICAgICAgWyZd
IChjb25zdCBSZWY8SW1hZ2U+JiBpbWFnZSkgewogICAgICAgICAgICAgYXV0byBpbWFnZVJlY3Qg
PSBwcmltaXRpdmVTdWJyZWdpb247Ci0gICAgICAgICAgICBhdXRvIHNyY1JlY3QgPSBtX3NvdXJj
ZUltYWdlUmVjdDsKLSAgICAgICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1S
ZWN0KGltYWdlUmVjdCwgc3JjUmVjdCk7CisgICAgICAgICAgICBhdXRvIHNyY1JlY3QgPSBtX2Vm
ZmVjdC5zb3VyY2VJbWFnZVJlY3QoKTsKKyAgICAgICAgICAgIG1fZWZmZWN0LnByZXNlcnZlQXNw
ZWN0UmF0aW8oKS50cmFuc2Zvcm1SZWN0KGltYWdlUmVjdCwgc3JjUmVjdCk7CiAgICAgICAgICAg
ICBpbWFnZVJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgaW1h
Z2VSZWN0ID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShJbnRSZWN0KGltYWdlUmVjdCkpOwor
ICAgICAgICAgICAgaW1hZ2VSZWN0ID0gbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShJbnRSZWN0KGltYWdlUmVjdCkpOwogICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1h
Z2UsIGltYWdlUmVjdCwgc3JjUmVjdCk7CiAgICAgICAgIH0sCiAgICAgICAgIFsmXSAoY29uc3Qg
UmVmPEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIpIHsKICAgICAgICAgICAgIGF1dG8gaW1hZ2VS
ZWN0ID0gcHJpbWl0aXZlU3VicmVnaW9uOwotICAgICAgICAgICAgaW1hZ2VSZWN0Lm1vdmVCeSht
X3NvdXJjZUltYWdlUmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIGltYWdlUmVjdC5tb3Zl
QnkobV9lZmZlY3Quc291cmNlSW1hZ2VSZWN0KCkubG9jYXRpb24oKSk7CiAgICAgICAgICAgICBp
bWFnZVJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgaW1hZ2VS
ZWN0ID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShJbnRSZWN0KGltYWdlUmVjdCkpOworICAg
ICAgICAgICAgaW1hZ2VSZWN0ID0gbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShJ
bnRSZWN0KGltYWdlUmVjdCkpOwogICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
aW1hZ2VCdWZmZXIsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKICAgICAgICAgfQogICAgICk7CkBA
IC0xMDQsNiArMTE1LDExIEBAIGJvb2wgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEZFSW1hZ2U6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1
cm4gRkVJbWFnZVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVj
dHMoKSk7Cit9CisKIFRleHRTdHJlYW0mIEZFSW1hZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QK
IHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUltYWdlIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAppbmRleCBkYTdlNDdiZDE4ZjU0NGEy
ZTUyMzc3MWQyMzkyN2Q3MjJhOTlhYjVjLi4zNzU1N2E5NmRjYWJlMGY4MDAyNWIwODBhZTcxNzI3
MzJjMmEyYTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVJbWFnZS5oCkBAIC00MSw2ICs0MSw5IEBAIHB1YmxpYzoKICAgICBTb3VyY2VJbWFnZSYg
c291cmNlSW1hZ2UoKSB7IHJldHVybiBtX3NvdXJjZUltYWdlOyB9CiAgICAgdm9pZCBzZXRJbWFn
ZVNvdXJjZShTb3VyY2VJbWFnZSYmIHNvdXJjZUltYWdlKSB7IG1fc291cmNlSW1hZ2UgPSBXVEZN
b3ZlKHNvdXJjZUltYWdlKTsgfQogCisgICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fc291cmNlSW1hZ2VSZWN0OyB9CisgICAgY29uc3QgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29uc3QgeyByZXR1cm4gbV9w
cmVzZXJ2ZUFzcGVjdFJhdGlvOyB9CisKIHByaXZhdGU6CiAgICAgRkVJbWFnZShTb3VyY2VJbWFn
ZSYmLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgU1ZHUHJlc2VydmVB
c3BlY3RSYXRpb1ZhbHVlJik7CiAK
</data>
<flag name="review"
          id="470190"
          type_id="1"
          status="+"
          setter="heycam"
    />
    <flag name="commit-queue"
          id="470186"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445049</attachid>
            <date>2021-11-23 14:31:27 -0800</date>
            <delta_ts>2021-11-23 15:38:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232832-20211123143126.patch</filename>
            <type>text/plain</type>
            <size>216250</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTA4NDZjNzZjOTc5MGVk
ZWIyZGRlYmZlZGU0OGI4NTM0ZTk1YWYyYi4uMGQyZWQ5NWNmOWIyNmU3NGVkYTViZmJmN2Y5MWIy
MDExMDAyMTE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0NyBAQAorMjAyMS0xMS0yMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1vdmUgdGhlIHNvZnR3YXJlIEZpbHRlckVmZmVjdCBmdW5jdGlvbnMgdG8gc2VwYXJhdGUgYXBw
bGllciBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzI4MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHN0ZXAgaXMgcmVxdWlyZWQgdG8gbW92ZSB0aGUgRmlsdGVyRWZmZWN0IHNvZnR3
YXJlIGNvZGUgdG8gc2VwYXJhdGUKKyAgICAgICAgZmlsZXMuIFNpbmNlIHRoZSBGaWx0ZXJFZmZl
Y3QgY2FuIGJlIGFwcGxpZWQgd2l0aCB0aGUgYWNjZWxlcmF0ZWQgQ29yZUltYWdlCisgICAgICAg
IG9yIHRoZSB1bmFjY2VsZXJhdGVkIHNvZnR3YXJlIG1ldGhvZHMsIGl0IG1ha2Ugc2Vuc2UgdG8g
cmVtb3ZlIHRoZSBzb2Z0d2FyZQorICAgICAgICBjb2RlIGZyb20gdGhlIEZpbHRlckVmZmVjdCBj
bGFzc2VzLgorCisgICAgICAgIFRoZSBwbGFuIGlzIHRvIGhhdmUgdGhlIHNvZnR3YXJlIGNvZGUg
aW4gc2VwYXJhdGUgZmlsZXMuIEVhY2ggRmlsdGVyRWZmZWN0CisgICAgICAgIHdpbGwgYmUgYXNr
ZWQgdG8gY3JlYXRlIGFuIGFwcGxpZXIgd2hpY2ggY2FuIGJlIFNvZnR3YXJlQXBwbGllciBvcgor
ICAgICAgICBDb3JlSW1hZ2VBcHBsaWVyLiBUaGlzIGFwcGxpZXIgd2lsbCBiZSBnaXZlbiB0byBG
aWx0ZXJFZmZlY3Q6OmFwcGx5KCkKKyAgICAgICAgd2hpY2ggd2lsbCBwYXNzIHRoZSBpbnB1dCBp
bWFnZXMgdG8gdGhlIGFwcGx5KCkgbWV0aG9kIG9mIHRoZSBhcHBsaWVyIHRvCisgICAgICAgIGdl
dCB0aGUgcmVzdWx0IGltYWdlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExp
Z2h0U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3RhbnRMaWdodFNvdXJjZTo6aW5p
dFBhaW50aW5nRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXN0YW50TGlnaHRTb3Vy
Y2U6OmluaXRQYWludGluZ0RhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmRTb2Z0
d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2FsY3Vs
YXRlU2F0dXJhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6
OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4U29mdHdhcmVBcHBsaWVyOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6Om1hdHJpeCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0
ZUFuZEh1ZVJvdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29m
dHdhcmVBcHBsaWVyOjpsdW1pbmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xv
ck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxh
dGZvcm1VbmFjY2VsZXJhdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNv
cmU6Om1hdHJpeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1ZVJv
dGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsdW1pbmFuY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVyYXRlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjplZmZlY3RUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKTog
RGVsZXRlZC4KKyAgICAgICAgTW92ZSBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoKSBhbmQg
Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cygpIGZyb20KKyAgICAgICAgdGhlIGhlYWRlciBm
aWxlIHRvIHRoZSBzb3VyY2UgZmlsZS4gTW92ZSBjaG9vc2luZyB0aGUgY2FsY3VsYXRpb24gbW9k
ZSBmb3IKKyAgICAgICAgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCBmcm9tIGVmZmVjdEFwcGx5
QWNjZWxlcmF0ZWQoKSB0byBhcHBseVBsYXRmb3JtKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUlkZW50aXR5VGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGll
cjo6Y29tcHV0ZVRhYnVsYXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRy
YW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlRGlzY3JldGVUYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlTGluZWFy
VGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6Y29tcHV0ZUdhbW1hVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUxvb2t1cFRhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxp
bmVhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVHYW1tYVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAgICAg
ICBJbnN0ZWFkIG9mIGNhbGxpbmcgY29tcHV0ZUxvb2t1cFRhYmxlcygpIHRvIGluaXRpYWxpemUg
dGhlIGZvdXIgbG9va3VwCisgICAgICAgIHRhYmxlcywgY2FsbCBjb21wdXRlTG9va3VwVGFibGUo
KSBmb3VyIHRpbWVzOiBvbmUgZm9yIGVhY2ggY29sb3IgY2hhbm5lbC4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjbGFtcEJ5dGUpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVBcml0aG1ldGljUGl4
ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21w
dXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBv
c2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFyaXRobWV0aWMpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5QXJpdGhtZXRpYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlOb25Bcml0
aG1ldGljKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjph
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wQnl0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKTogRGVsZXRlZC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpjbGFt
cFJHQkFWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVB
cHBsaWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpnZXRQaXhlbFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldEludGVyaW9yUGl4ZWxzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldE91
dGVyUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2
ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNs
YW1wUkdCQVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNldERlc3RpbmF0aW9u
UGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OmZh
c3RTZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpnZXRQaXhlbFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
Lmg6CisgICAgICAgIEFkZCB0aGUgbWVtYmVycyBvZiBGRUNvbnZvbHZlTWF0cml4IHRvIFBhaW50
aW5nRGF0YS4gUmVtb3ZlIHRoZSB0ZW1wbGF0ZQorICAgICAgICBmdW5jdGlvbnMgYW5kIHRoZSBN
U1ZDIHdhcm5pbmcuIEp1c3QgaWdub3JlIHRoZSBhbHBoYSBjaGFubmVsIGlmIAorICAgICAgICBw
cmVzZXJ2ZUFscGhhVmFsdWVzIGlzIHRydWUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlm
ZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6CisgICAgICAgIE5vIG5lZWQgdG8gcGFz
cyBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcgd2hlbiBjcmVhdGluZyBGRURpZmZ1c2VMaWdo
dGluZy4KKyAgICAgICAgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZyBpcyBh
bHJlYWR5IHBhc3NlZCB0byBGRUxpZ2h0aW5nLiAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
aXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OmJ5dGVPZmZzZXRPZlBpeGVsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjp4Q2hhbm5lbElu
ZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVB
cHBsaWVyOjp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxh
Y2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGll
cik6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6
YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpieXRlT2Zmc2V0T2ZQaXhlbCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5oOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsSW5kZXgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnlD
aGFubmVsSW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRv
d1NvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kU29mdHdhcmVBcHBs
aWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWSk6CisgICAgICAgIChXZWJD
b3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2xh
bXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2Fs
Y3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5C
bHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdh
dXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6a2VybmVsUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBbHBoYU9ubHkpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXIp
OgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJs
dXJBY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3YXJl
QXBwbGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJHZW5lcmljKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyV29ya2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKToKKyAgICAgICAgKGdhdXNzaWFuS2VybmVsRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Omtlcm5lbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJv
eEJsdXJBbHBoYU9ubHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpzdGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5C
bHVyLmg6CisgICAgICAgIEFkZCB0aGUgdHdvIG1lbWJlcnMgJ2lzQWxwaGFJbWFnZScgYW5kICdl
ZGdlTW9kZScgdG8gQXBwbHlQYXJhbWV0ZXJzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6QWxwaGFXaW5kb3c6OnRvcExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmJvdHRvbUxl
ZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6
QWxwaGFXaW5kb3c6OnRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29m
dHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6Y2VudGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93Ojpib3R0b20gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5k
b3c6OnNldFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdT
b2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNldFRvcFJpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93
OjpzZXRSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNoaWZ0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzaGlmdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6
OnRvcExlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3
YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSaWdo
dE5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBs
aWVyOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5v
cm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5v
cm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9y
bWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6
OnNldFBpeGVsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6c2V0UGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3Jt
R2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRv
cExlZnROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6Omxl
ZnRDb2x1bW5Ob3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFs
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5n
RGF0YTo6Ym90dG9tTGVmdE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJp
Z2h0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnNldFBpeGVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldFBp
eGVsSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6cGxh
dGZvcm1BcHBseUdlbmVyaWNQYWludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxp
Z2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpsaWdodGluZ0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OnNwZWN1bGFyRXhwb25lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcExlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6
OnRvcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBo
YVdpbmRvdzo6Y2VudGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGln
aHRpbmc6OkFscGhhV2luZG93Ojpib3R0b20gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRv
cFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2lu
ZG93OjpzZXRSaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpB
bHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNoaWZ0Um93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzaGlmdCk6IERlbGV0ZWQuCisgICAgICAg
IE1vdmUgZmlsaW5nIHRoZSBzdHJ1Y3R1cmUgTGlnaHRpbmdEYXRhIGZyb20gRkVMaWdodGluZzo6
ZHJhd0xpZ2h0aW5nKCkKKyAgICAgICAgdG8gRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBw
bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6cGl4ZWxBcnJheUluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWFrZVBpeGVsVmFs
dWVGcm9tQ29sb3JDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNv
ZnR3YXJlQXBwbGllcjo6bWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6bWluT3JNYXgpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpjb2x1bW5FeHRyZW11
bSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Omtlcm5l
bEV4dHJlbXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
cjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5
U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OnBpeGVsQXJyYXlJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtl
Q29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Om1pbk9yTWF4KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbHVtbkV4
dHJlbXVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omtlcm5lbEV4dHJlbXVtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVy
aWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5V29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxh
dGZvcm1BcHBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHlEZWdlbmVyYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oOgorICAgICAgICBSZW1vdmUgdGhlIHRlbXBsYXRl
IGZ1bmN0aW9ucyBhbmQganVzdCB0aGUgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSBhcyBhbgorICAg
ICAgICBhcmd1bWVudCB0byB0aGVzZSBmdW5jdGlvbnMuICBSZXBsYWNlIHBsYXRmb3JtQXBwbHlE
ZWdlbmVyYXRlKCkgd2l0aCBhCisgICAgICAgIGNhbGwgdG8gaXNEZWdlbmVyYXRlKCkgYW5kIG1v
dmUgdGhlIGNhbGwgdG8gY29weVByZW11bHRpcGxpZWRSZXN1bHQoKSB0byAKKyAgICAgICAgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0U29mdHdhcmVBcHBs
aWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxh
ckxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVT
cGVjdWxhckxpZ2h0aW5nKToKKyAgICAgICAgTm8gbmVlZCB0byBwYXNzIEZFTGlnaHRpbmc6OlNw
ZWN1bGFyTGlnaHRpbmcgd2hlbiBjcmVhdGluZyBGRURpZmZ1c2VMaWdodGluZy4KKyAgICAgICAg
RmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcgaXMgYWxyZWFkeSBwYXNzZWQg
dG8gRkVMaWdodGluZy4gCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6UGFpbnRpbmdEYXRh
OjpyYW5kb20pOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
OjpzbW9vdGhDdXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFw
cGxpZXI6OmxpbmVhckludGVycG9sYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxl
bmNlU29mdHdhcmVBcHBsaWVyOjppbml0UGFpbnRpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZVN0aXRjaGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6Om5vaXNlMkQpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjp0b0ludEJhc2VkQ29sb3JD
b21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGll
cjo6Y2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1X
b3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjph
cHBseVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0Rh
dGE6OnJhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzbW9vdGhDdXJ2ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXJJbnRlcnBvbGF0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6aW5pdFBhaW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6Om5vaXNlMkQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVu
Y2VWYWx1ZUZvclBvaW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFVHVy
YnVsZW5jZTo6ZmlsbFJlZ2lvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OlBhaW50aW5nRGF0YTo6UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgTW92ZSB0aGUgdGhyZWFkaW5nIGNvZGUgZnJvbSBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSB0
byBhIG5ldyBmdW5jdGlvbgorICAgICAgICBjYWxsZWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBs
aWVyOjphcHBseVBsYXRmb3JtKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpub3Jt
YWxpemVkRmxvYXRzKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSBub3JtYWxpemVkRmxvYXRzKCkg
ZnJvbSBGaWx0ZXJFZmZlY3QgdG8gRkVDb2xvck1hdHJpeC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBwbGllci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjo6RmlsdGVyRWZmZWN0Q29uY3Jl
dGVBcHBsaWVyKToKKyAgICAgICAgSW50cm9kdWNlIHRoaXMgY2xhc3Mgd2hpY2ggd2lsbCBiZSB0
aGUgYmFzZSBjbGFzcyBvZiBhbGwgdGhlIHNvZnR3YXJlIGFuZAorICAgICAgICB0aGUgQ29yZUlt
YWdlIEZpbHRlckVmZmVjdCBhcHBsaWVycy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvTGlnaHRTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9pbnRMaWdodFNv
dXJjZTo6aW5pdFBhaW50aW5nRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQb2ludExp
Z2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaDoKKyAgICAgICAgTWFrZSBpbml0
UGFpbnRpbmdEYXRhKCkgYmUgYSBjb25zdGFudCBmdW5jdGlvbi4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaDoKKyAgICAgICAg
TWFrZSBpbml0UGFpbnRpbmdEYXRhKCkgYmUgYSBjb25zdGFudCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVJbWFnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVJ
bWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmg6CisKIDIwMjEtMTEtMjMgIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1z
dGVhZEBzb255LmNvbT4KIAogICAgICAgICBOb24tdW5pZmllZCBidWlsZCBmaXhlcywgbWlkIE5v
dmVtYmVyIDIwMjEgZWRpdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDdiNGQyMWRhOWIyZjRkODU1YTgxM2NhOWE5MTNlNWIy
ODc0MDE2ZjAuLjI4NmM5MzQ5YjEyMjE5NzljODk5NjlkMWIxYjA5NjIxNDAwMDNjMGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTEwODk2LDYgKzEwODk2LDcgQEAKIAkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhh
UHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4
ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOUQwNTJFMjUzMTNFMjYwMDQyMjA5OCAvKiBS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTEzQTlG
Mjc0QzVDQzcwMEUyQTg4RSAvKiBGaWx0ZXJFZmZlY3RBcHBsaWVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZpbHRlckVmZmVjdEFwcGxpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJC
QUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1h
Z2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
QnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNjIz
RTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNTk0Miw2ICsyNTk0Myw3IEBACiAJCQkJODQ1RTcyRjcwRkQyNjFFRTAw
QTg3RDc5IC8qIEZpbHRlci5oICovLAogCQkJCTA4QzkyNTE3MEZDQzdDNEEwMDQ4MERFQyAvKiBG
aWx0ZXJFZmZlY3QuY3BwICovLAogCQkJCTA4QzkyNTE4MEZDQzdDNEEwMDQ4MERFQyAvKiBGaWx0
ZXJFZmZlY3QuaCAqLywKKwkJCQk3MkExM0E5RjI3NEM1Q0M3MDBFMkE4OEUgLyogRmlsdGVyRWZm
ZWN0QXBwbGllci5oICovLAogCQkJCTJDODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJF
ZmZlY3RSZW5kZXJlci5jcHAgKi8sCiAJCQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZp
bHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCiAJCQkJNzIxNEI5QjcyNzQ0NThGQTAwM0JFNkRGIC8q
IEZpbHRlckVmZmVjdFZlY3Rvci5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3BwCmlu
ZGV4IGU1ZmIxZmY2NjVkM2ViMDdmNDhlZTFkMDJiYmZmY2M2YjA0NDFmODkuLjg5NDdhOTg2MGU0
NmIxMWM1OGUyNzc1MzYyNTZmZGI5ZDUxZDE1NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJj
ZS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIERp
c3RhbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQ
YWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgRGlzdGFudExpZ2h0U291cmNlOjppbml0
UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhKSBjb25zdAogewogICAgIGZsb2F0IGF6aW11dGggPSBkZWcycmFkKG1fYXppbXV0aCk7CiAg
ICAgZmxvYXQgZWxldmF0aW9uID0gZGVnMnJhZChtX2VsZXZhdGlvbik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJj
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGln
aHRTb3VyY2UuaAppbmRleCBjMWUzMGVkZTc1OTgzNzI4YTYzMmJjY2ZmYjA5OTczYTNhNGU3MmZk
Li4zMDE5MmIwZWYwY2QxYmY0MDNkNDIzMzhjZTQwODc3MThkNzUxNzA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJj
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFu
dExpZ2h0U291cmNlLmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0QXpp
bXV0aChmbG9hdCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRFbGV2YXRpb24oZmxvYXQpIG92ZXJy
aWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBh
aW50aW5nRGF0YSYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBG
aWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBjb25zdCBvdmVycmlkZTsKICAgICBDb21wdXRl
ZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRh
JiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVCbGVuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQmxlbmQuY3BwCmluZGV4IGM5MWFhM2Q2OGQ1ZGZmNTMzOTFmZTBkN2Q5OGI3OWE2YjZkNTI4
NmQuLmQyY2FiYmE5Zjg2YWIzMzIwZWMyM2UwNWQ3ZmE1N2FhM2E0ZDQyYjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApA
QCAtMjYsMTAgKzI2LDEwIEBACiAjaW5jbHVkZSAiRkVCbGVuZC5oIgogCiAjaW5jbHVkZSAiRkVC
bGVuZE5FT04uaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXku
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTUzLDEzICs1MywyMyBAQCBib29sIEZFQmxlbmQ6OnNldEJsZW5kTW9kZShCbGVuZE1v
ZGUgbW9kZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNz
IEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmls
ZXMuCitjbGFzcyBGRUJsZW5kU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENv
bmNyZXRlQXBwbGllcjxGRUJsZW5kPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENv
bmNyZXRlQXBwbGllcjxGRUJsZW5kPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7
CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3Rv
ciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKK307CisKICNpZiAhSEFWRShBUk1fTkVPTl9JTlRS
SU5TSUNTKQotYm9vbCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
JikKK2Jvb2wgRkVCbGVuZFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZl
Y3QoMSk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKyAg
ICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0c1sxXS5nZXQoKTsKIAotICAgIGF1dG8g
cmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gcmVzdWx0SW1hZ2Ug
PSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNjksMTIgKzc5LDE3IEBAIGJvb2wgRkVCbGVuZDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdlLT5j
b250ZXh0KCk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVy
MiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsK
LSAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VC
dWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3Zlciwg
bV9tb2RlIH0pOworICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZl
cjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKSk7CisgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVy
LCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVj
dCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3Bl
cmF0b3I6OlNvdXJjZU92ZXIsIG1fZWZmZWN0LmJsZW5kTW9kZSgpIH0pOwogICAgIHJldHVybiB0
cnVlOwogfQogI2VuZGlmCiAKK2Jvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRUJsZW5kU29mdHdhcmVBcHBsaWVy
KCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogVGV4dFN0cmVhbSYg
RkVCbGVuZDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50
YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAi
W2ZlQmxlbmQiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggNWE5MWM0ZWNjNDRmYzc3YWJmZmQ0
OWQ3ZDE2OTdkYzE0ZjkyYjY3NC4uMTAyMzdiYTlkY2MyNDFmZGUxNGYzMTIzZGM2NDg2M2IyMjZi
ZGYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgogCisjaW5jbHVkZSAiRmlsdGVy
RWZmZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKQEAgLTYzLDMyICs2NCwx
MDMgQEAgYm9vbCBGRUNvbG9yTWF0cml4OjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiAm
dmFsdWVzKQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhLCBjb25zdCBWZWN0
b3I8ZmxvYXQ+JiB2YWx1ZXMpCit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRl
Q29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCit7CisgICAgY29tcG9u
ZW50c1swXSA9ICgwLjIxMyArIDAuNzg3ICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbMV0gPSAo
MC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4w
NzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUp
OworICAgIGNvbXBvbmVudHNbNF0gPSAoMC43MTUgKyAwLjI4NSAqIHZhbHVlKTsKKyAgICBjb21w
b25lbnRzWzVdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s2XSA9
ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAw
LjcxNSAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1
ZSk7Cit9CisKK3ZvaWQgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50
cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpCit7CisgICAgZmxvYXQgY29zSHVlID0g
Y29zKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7CisgICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVl
ICogcGlGbG9hdCAvIDE4MCk7CisgICAgY29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICog
MC43ODcgLSBzaW5IdWUgKiAwLjIxMzsKKyAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NI
dWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAuNzE1OworICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAt
IGNvc0h1ZSAqIDAuMDcyICsgc2luSHVlICogMC45Mjg7CisgICAgY29tcG9uZW50c1szXSA9IDAu
MjEzIC0gY29zSHVlICogMC4yMTMgKyBzaW5IdWUgKiAwLjE0MzsKKyAgICBjb21wb25lbnRzWzRd
ID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4NSArIHNpbkh1ZSAqIDAuMTQwOworICAgIGNvbXBvbmVu
dHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyIC0gc2luSHVlICogMC4yODM7CisgICAgY29t
cG9uZW50c1s2XSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKKyAg
ICBjb21wb25lbnRzWzddID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1
OworICAgIGNvbXBvbmVudHNbOF0gPSAwLjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICog
MC4wNzI7Cit9CisKK1ZlY3RvcjxmbG9hdD4gRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0
cyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpCit7CisgICAgVmVjdG9yPGZsb2F0PiBub3Jt
YWxpemVkVmFsdWVzKHZhbHVlcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dmFsdWVzLnNpemUoKTsgKytpKQorICAgICAgICBub3JtYWxpemVkVmFsdWVzW2ldID0gbm9ybWFs
aXplZEZsb2F0KHZhbHVlc1tpXSk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZWRWYWx1ZXM7Cit9CisK
Ky8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyIHRv
IHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVDb2xvck1hdHJpeFNv
ZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb2xv
ck1hdHJpeD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8
RkVDb2xvck1hdHJpeD47CisKK3B1YmxpYzoKKyAgICBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBs
aWVyKEZFQ29sb3JNYXRyaXgmKTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIGlubGluZSB2b2lkIG1hdHJpeChmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0
JiBibHVlLCBmbG9hdCYgYWxwaGEpIGNvbnN0OworICAgIGlubGluZSB2b2lkIHNhdHVyYXRlQW5k
SHVlUm90YXRlKGZsb2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUpIGNvbnN0Owor
ICAgIGlubGluZSB2b2lkIGx1bWluYW5jZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0
JiBibHVlLCBmbG9hdCYgYWxwaGEpIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAg
dm9pZCBhcHBseVBsYXRmb3JtQWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImKSBjb25zdDsKKyNlbmRp
ZgorICAgIHZvaWQgYXBwbHlQbGF0Zm9ybVVuYWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImKSBjb25z
dDsKKworICAgIHZvaWQgYXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYpIGNvbnN0OworCisgICAg
ZmxvYXQgbV9jb21wb25lbnRzWzldOworfTsKKworRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGll
cjo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcihGRUNvbG9yTWF0cml4JiBlZmZlY3QpCisg
ICAgOiBCYXNlKGVmZmVjdCkKK3sKKyAgICBpZiAobV9lZmZlY3QudHlwZSgpID09IEZFQ09MT1JN
QVRSSVhfVFlQRV9TQVRVUkFURSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0
dXJhdGVDb21wb25lbnRzKG1fY29tcG9uZW50cywgbV9lZmZlY3QudmFsdWVzKClbMF0pOworICAg
IGVsc2UgaWYgKG1fZWZmZWN0LnR5cGUoKSA9PSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRF
KQorICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKG1f
Y29tcG9uZW50cywgbV9lZmZlY3QudmFsdWVzKClbMF0pOworfQorCitpbmxpbmUgdm9pZCBGRUNv
bG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjptYXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVu
LCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKSBjb25zdAogewogICAgIGZsb2F0IHIgPSByZWQ7
CiAgICAgZmxvYXQgZyA9IGdyZWVuOwogICAgIGZsb2F0IGIgPSBibHVlOwogICAgIGZsb2F0IGEg
PSBhbHBoYTsKIAotICAgIHJlZCAgICAgPSB2YWx1ZXNbIDBdICogciArIHZhbHVlc1sgMV0gKiBn
ICsgdmFsdWVzWyAyXSAqIGIgKyB2YWx1ZXNbIDNdICogYSArIHZhbHVlc1sgNF0gKiAyNTU7Ci0g
ICAgZ3JlZW4gICA9IHZhbHVlc1sgNV0gKiByICsgdmFsdWVzWyA2XSAqIGcgKyB2YWx1ZXMgWzdd
ICogYiArIHZhbHVlc1sgOF0gKiBhICsgdmFsdWVzWyA5XSAqIDI1NTsKLSAgICBibHVlICAgID0g
dmFsdWVzWzEwXSAqIHIgKyB2YWx1ZXNbMTFdICogZyArIHZhbHVlc1sxMl0gKiBiICsgdmFsdWVz
WzEzXSAqIGEgKyB2YWx1ZXNbMTRdICogMjU1OwotICAgIGFscGhhICAgPSB2YWx1ZXNbMTVdICog
ciArIHZhbHVlc1sxNl0gKiBnICsgdmFsdWVzWzE3XSAqIGIgKyB2YWx1ZXNbMThdICogYSArIHZh
bHVlc1sxOV0gKiAyNTU7CisgICAgY29uc3QgYXV0byYgdmFsdWVzID0gbV9lZmZlY3QudmFsdWVz
KCk7CisKKyAgICByZWQgICA9IHZhbHVlc1sgMF0gKiByICsgdmFsdWVzWyAxXSAqIGcgKyB2YWx1
ZXNbIDJdICogYiArIHZhbHVlc1sgM10gKiBhICsgdmFsdWVzWyA0XSAqIDI1NTsKKyAgICBncmVl
biA9IHZhbHVlc1sgNV0gKiByICsgdmFsdWVzWyA2XSAqIGcgKyB2YWx1ZXNbIDddICogYiArIHZh
bHVlc1sgOF0gKiBhICsgdmFsdWVzWyA5XSAqIDI1NTsKKyAgICBibHVlICA9IHZhbHVlc1sxMF0g
KiByICsgdmFsdWVzWzExXSAqIGcgKyB2YWx1ZXNbMTJdICogYiArIHZhbHVlc1sxM10gKiBhICsg
dmFsdWVzWzE0XSAqIDI1NTsKKyAgICBhbHBoYSA9IHZhbHVlc1sxNV0gKiByICsgdmFsdWVzWzE2
XSAqIGcgKyB2YWx1ZXNbMTddICogYiArIHZhbHVlc1sxOF0gKiBhICsgdmFsdWVzWzE5XSAqIDI1
NTsKIH0KIAotaW5saW5lIHZvaWQgc2F0dXJhdGVBbmRIdWVSb3RhdGUoZmxvYXQmIHJlZCwgZmxv
YXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgY29uc3QgZmxvYXQqIGNvbXBvbmVudHMpCitpbmxpbmUg
dm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1cmF0ZUFuZEh1ZVJvdGF0ZShm
bG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlKSBjb25zdAogewogICAgIGZsb2F0
IHIgPSByZWQ7CiAgICAgZmxvYXQgZyA9IGdyZWVuOwogICAgIGZsb2F0IGIgPSBibHVlOwogCi0g
ICAgcmVkICAgICA9IHIgKiBjb21wb25lbnRzWzBdICsgZyAqIGNvbXBvbmVudHNbMV0gKyBiICog
Y29tcG9uZW50c1syXTsKLSAgICBncmVlbiAgID0gciAqIGNvbXBvbmVudHNbM10gKyBnICogY29t
cG9uZW50c1s0XSArIGIgKiBjb21wb25lbnRzWzVdOwotICAgIGJsdWUgICAgPSByICogY29tcG9u
ZW50c1s2XSArIGcgKiBjb21wb25lbnRzWzddICsgYiAqIGNvbXBvbmVudHNbOF07CisgICAgcmVk
ICAgICA9IHIgKiBtX2NvbXBvbmVudHNbMF0gKyBnICogbV9jb21wb25lbnRzWzFdICsgYiAqIG1f
Y29tcG9uZW50c1syXTsKKyAgICBncmVlbiAgID0gciAqIG1fY29tcG9uZW50c1szXSArIGcgKiBt
X2NvbXBvbmVudHNbNF0gKyBiICogbV9jb21wb25lbnRzWzVdOworICAgIGJsdWUgICAgPSByICog
bV9jb21wb25lbnRzWzZdICsgZyAqIG1fY29tcG9uZW50c1s3XSArIGIgKiBtX2NvbXBvbmVudHNb
OF07CiB9CiAKIC8vIEZJWE1FOiB0aGlzIHNob3VsZCB1c2UgdGhlIGx1bWluYW5jZSguLi4pIGZ1
bmN0aW9uIGluIENvbG9yTHVtaW5hbmNlLmguCi1pbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKQoraW5saW5lIHZv
aWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6bHVtaW5hbmNlKGZsb2F0JiByZWQsIGZs
b2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkgY29uc3QKIHsKICAgICBhbHBo
YSA9IDAuMjEyNSAqIHJlZCArIDAuNzE1NCAqIGdyZWVuICsgMC4wNzIxICogYmx1ZTsKICAgICBy
ZWQgPSAwOwpAQCAtOTcsMTggKzE2OSwxMyBAQCBpbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQm
IHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKQogfQogCiAjaWYg
VVNFKEFDQ0VMRVJBVEUpCi10ZW1wbGF0ZTxDb2xvck1hdHJpeFR5cGUgZmlsdGVyVHlwZT4KLWJv
b2wgZWZmZWN0QXBwbHlBY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwg
Y29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBmbG9hdCBjb21wb25lbnRzWzldLCBJbnRTaXpl
IGJ1ZmZlclNpemUpCit2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxh
dGZvcm1BY2NlbGVyYXRlZChQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNvbnN0CiB7CisgICAg
YXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRhdGEoKTsKKyAgICBhdXRvIGJ1ZmZlclNp
emUgPSBwaXhlbEJ1ZmZlci5zaXplKCk7CisKICAgICBBU1NFUlQocGl4ZWxBcnJheS5sZW5ndGgo
KSA9PSBidWZmZXJTaXplLmFyZWEoKSAqIDQpOwogICAgIAotICAgIGlmIChmaWx0ZXJUeXBlID09
IEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpIHsKLSAgICAgICAgLy8gdkltYWdlTWF0cml4TXVs
dGlwbHlfQVJHQjg4ODggdGFrZXMgYSA0eDQgbWF0cml4LCBpZiBhbnkgdmFsdWUgaW4gdGhlIGxh
c3QgY29sdW1uIG9mIHRoZSBGRUNvbG9yTWF0cml4IDV4NCBtYXRyaXgKLSAgICAgICAgLy8gaXMg
bm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdlIGNvZGUuCi0gICAgICAgIGlmICh2YWx1
ZXNbNF0gIT0gMCB8fCB2YWx1ZXNbOV0gIT0gMCB8fCB2YWx1ZXNbMTRdICE9IDAgfHwgdmFsdWVz
WzE5XSAhPSAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIGNvbnN0
IGludDMyX3QgZGl2aXNvciA9IDI1NjsKICAgICB1aW50OF90KiBkYXRhID0gcGl4ZWxBcnJheS5k
YXRhKCk7CiAKQEAgLTEyNCw4ICsxOTEsMTMgQEAgYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVk
KFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JgogICAg
IGRlc3Qucm93Qnl0ZXMgPSBidWZmZXJTaXplLndpZHRoKCkgKiA0OwogICAgIGRlc3QuZGF0YSA9
IGRhdGE7CiAKLSAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKKyAgICBzd2l0Y2ggKG1fZWZmZWN0
LnR5cGUoKSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAgICAg
IGJyZWFrOworCiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOiB7CisgICAgICAg
IGNvbnN0IGF1dG8mIHZhbHVlcyA9IG1fZWZmZWN0LnZhbHVlcygpOworCiAgICAgICAgIGNvbnN0
IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2
X3Q+KHJvdW5kZih2YWx1ZXNbIDBdICogZGl2aXNvcikpLAogICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MTZfdD4ocm91bmRmKHZhbHVlc1sgNV0gKiBkaXZpc29yKSksCkBAIC0xNTQsMTkgKzIy
NiwxOSBAQCBib29sIGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBp
eGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mCiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZ
UEVfU0FUVVJBVEU6CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFOiB7CiAg
ICAgICAgIGNvbnN0IGludDE2X3QgbWF0cml4WzQgKiA0XSA9IHsKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzBdICogZGl2aXNvcikpLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbM10gKiBkaXZpc29y
KSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s2
XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZiht
X2NvbXBvbmVudHNbMF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYobV9jb21wb25lbnRzWzNdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s2XSAqIGRpdmlzb3IpKSwKICAg
ICAgICAgICAgIDAsCiAKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihj
b21wb25lbnRzWzFdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZf
dD4ocm91bmRmKGNvbXBvbmVudHNbNF0gKiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1s3XSAqIGRpdmlzb3IpKSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbMV0gKiBkaXZpc29y
KSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21wb25lbnRz
WzRdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KG1fY29tcG9uZW50c1s3XSAqIGRpdmlzb3IpKSwKICAgICAgICAgICAgIDAsCiAKLSAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzJdICogZGl2aXNvcikp
LAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbNV0g
KiBkaXZpc29yKSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29t
cG9uZW50c1s4XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+
KHJvdW5kZihtX2NvbXBvbmVudHNbMl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21wb25lbnRzWzVdICogZGl2aXNvcikpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s4XSAqIGRpdmlz
b3IpKSwKICAgICAgICAgICAgIDAsCiAKICAgICAgICAgICAgIDAsCkBAIC0yMDMsMzggKzI3NSwy
NSBAQCBib29sIGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVs
QXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKIAotdGVtcGxhdGU8Q29sb3JNYXRy
aXhUeXBlIGZpbHRlclR5cGU+Ci12b2lkIGVmZmVjdFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBp
eGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgSW50U2l6ZSBidWZmZXJTaXpl
KQordm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtVW5hY2Nl
bGVyYXRlZChQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNvbnN0CiB7Ci0gICAgZmxvYXQgY29t
cG9uZW50c1s5XTsKLQotICAgIGlmIChmaWx0ZXJUeXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9T
QVRVUkFURSkKLSAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25l
bnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0gICAgZWxzZSBpZiAoZmlsdGVyVHlwZSA9PSBG
RUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKQotICAgICAgICBGRUNvbG9yTWF0cml4OjpjYWxj
dWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGNvbXBvbmVudHMsIHZhbHVlc1swXSk7Ci0KKyAgICBh
dXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXIuZGF0YSgpOwogICAgIHVuc2lnbmVkIHBpeGVs
QXJyYXlMZW5ndGggPSBwaXhlbEFycmF5Lmxlbmd0aCgpOwogCi0jaWYgVVNFKEFDQ0VMRVJBVEUp
Ci0gICAgaWYgKGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQ8ZmlsdGVyVHlwZT4ocGl4ZWxBcnJheSwg
dmFsdWVzLCBjb21wb25lbnRzLCBidWZmZXJTaXplKSkKLSAgICAgICAgcmV0dXJuOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oYnVmZmVyU2l6ZSk7Ci0jZW5kaWYKKyAgICBzd2l0Y2ggKG1fZWZm
ZWN0LnR5cGUoKSkgeworICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CisgICAg
ICAgIGJyZWFrOwogCi0gICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7CiAgICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfTUFUUklYOgogICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsQnl0ZU9mZnNl
dCA9IDA7IHBpeGVsQnl0ZU9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsQnl0ZU9mZnNl
dCArPSA0KSB7CiAgICAgICAgICAgICBmbG9hdCByZWQgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0KTsKICAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCArIDEpOwogICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IHBpeGVsQXJyYXku
aXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAyKTsKICAgICAgICAgICAgIGZsb2F0IGFscGhhID0gcGl4
ZWxBcnJheS5pdGVtKHBpeGVsQnl0ZU9mZnNldCArIDMpOwotICAgICAgICAgICAgbWF0cml4KHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCB2YWx1ZXMpOworICAgICAgICAgICAgbWF0cml4KHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0
ZU9mZnNldCwgcmVkKTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNl
dCArIDEsIGdyZWVuKTsKICAgICAgICAgICAgIHBpeGVsQXJyYXkuc2V0KHBpeGVsQnl0ZU9mZnNl
dCArIDIsIGJsdWUpOwpAQCAtMjQ5LDcgKzMwOCw3IEBAIHZvaWQgZWZmZWN0VHlwZShVaW50OENs
YW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzLCBJbnRT
CiAgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZz
ZXQgKyAxKTsKICAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxC
eXRlT2Zmc2V0ICsgMik7CiAgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAgICAgICAgICAgIHNhdHVyYXRlQW5kSHVlUm90YXRl
KHJlZCwgZ3JlZW4sIGJsdWUsIGNvbXBvbmVudHMpOworICAgICAgICAgICAgc2F0dXJhdGVBbmRI
dWVSb3RhdGUocmVkLCBncmVlbiwgYmx1ZSk7CiAgICAgICAgICAgICBwaXhlbEFycmF5LnNldChw
aXhlbEJ5dGVPZmZzZXQsIHJlZCk7CiAgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5
dGVPZmZzZXQgKyAxLCBncmVlbik7CiAgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5
dGVPZmZzZXQgKyAyLCBibHVlKTsKQEAgLTI3Myw1MSArMzMyLDUyIEBAIHZvaWQgZWZmZWN0VHlw
ZShVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFs
dWVzLCBJbnRTCiAgICAgfQogfQogCi1ib29sIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZShjb25zdCBGaWx0ZXImKQordm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJiBwaXhlbEJ1ZmZlcikgY29uc3QKK3sKKyNpZiBV
U0UoQUNDRUxFUkFURSkKKyAgICBjb25zdCBhdXRvJiB2YWx1ZXMgPSBtX2VmZmVjdC52YWx1ZXMo
KTsKKworICAgIC8vIHZJbWFnZU1hdHJpeE11bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1h
dHJpeCwgaWYgYW55IHZhbHVlIGluIHRoZSBsYXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xvck1hdHJp
eCA1eDQgbWF0cml4CisgICAgLy8gaXMgbm90IHplcm8sIGZhbGwgYmFjayB0byBub24tdkltYWdl
IGNvZGUuCisgICAgaWYgKG1fZWZmZWN0LnR5cGUoKSAhPSBGRUNPTE9STUFUUklYX1RZUEVfTUFU
UklYIHx8ICghdmFsdWVzWzRdICYmICF2YWx1ZXNbOV0gJiYgIXZhbHVlc1sxNF0gJiYgIXZhbHVl
c1sxOV0pKSB7CisgICAgICAgIGFwcGx5UGxhdGZvcm1BY2NlbGVyYXRlZChwaXhlbEJ1ZmZlcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBhcHBseVBsYXRmb3JtVW5hY2Nl
bGVyYXRlZChwaXhlbEJ1ZmZlcik7Cit9CisKK2Jvb2wgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBw
bGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1
dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAg
IGF1dG8gaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CiAKLSAgICBhdXRvIHJlc3VsdEltYWdl
ID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3Qu
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7
CiAgICAgaWYgKGluQnVmZmVyKQotICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJ
bWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1h
Z2VCdWZmZXIoKmluQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAKLSAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQg
eyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpS
R0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0
IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
UkdCQTgsIG1fZWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSB9OwogICAgIEludFJlY3QgaW1hZ2VS
ZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKTsKICAg
ICBhdXRvIHBpeGVsQnVmZmVyID0gcmVzdWx0SW1hZ2UtPmdldFBpeGVsQnVmZmVyKGZvcm1hdCwg
aW1hZ2VSZWN0KTsKICAgICBpZiAoIXBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBhdXRvJiBwaXhlbEFycmF5ID0gcGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICBhdXRv
IHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcGl4ZWxCdWZmZXItPnNpemUoKTsKLQotICAgIFZlY3Rv
cjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7Ci0gICAgCi0gICAg
c3dpdGNoIChtX3R5cGUpIHsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg6Ci0gICAg
ICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWD4ocGl4ZWxBcnJheSwgdmFs
dWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFOiAKLSAgICAgICAgZWZmZWN0VHlwZTxGRUNPTE9STUFU
UklYX1RZUEVfU0FUVVJBVEU+KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lv
bnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEU6Ci0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURT4ocGl4
ZWxBcnJheSwgdmFsdWVzLCBwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6Ci0gICAgICAgIGVm
ZmVjdFR5cGU8RkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE+KHBpeGVsQXJyYXks
IHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBzZXRJc0FscGhhSW1hZ2Uo
dHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBpZiAobV9lZmZlY3QudHlwZSgpID09
IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBKQorICAgICAgICBtX2VmZmVjdC5z
ZXRJc0FscGhhSW1hZ2UodHJ1ZSk7CiAKKyAgICBhcHBseVBsYXRmb3JtKCpwaXhlbEJ1ZmZlcik7
CiAgICAgcmVzdWx0SW1hZ2UtPnB1dFBpeGVsQnVmZmVyKCpwaXhlbEJ1ZmZlciwgaW1hZ2VSZWN0
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZFQ29sb3JN
YXRyaXhTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkp
OworfQorCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguaAppbmRleCA0OTdlYjE5NWU0MTc1ZWNkZmQwY2FiMjRjYmNkOWIwZTM5YTdmODA5Li5m
NjlmMGIwMWM5NTA3ZTA1MjZlMGQxNzdlYmJlZjk2OTAwOWNlMWQzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
aApAQCAtNDQsOCArNDQsOSBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFs
dWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KICAgICBib29sIHNldFZhbHVlcyhjb25z
dCBWZWN0b3I8ZmxvYXQ+Jik7CiAKLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlU2F0
dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7Ci0gICAgc3Rh
dGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBv
bmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVTYXR1cmF0ZUNv
bXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKTsKKyAgICBzdGF0aWMgdm9p
ZCBjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2
YWx1ZSk7CisgICAgc3RhdGljIFZlY3RvcjxmbG9hdD4gbm9ybWFsaXplZEZsb2F0cyhjb25zdCBW
ZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMpOwogCiBwcml2YXRlOgogICAgIEZFQ29sb3JNYXRyaXgoQ29s
b3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYpOwpAQCAtNTgsMzUgKzU5LDYgQEAgcHJpdmF0
ZToKICAgICBWZWN0b3I8ZmxvYXQ+IG1fdmFsdWVzOwogfTsKIAotaW5saW5lIHZvaWQgRkVDb2xv
ck1hdHJpeDo6Y2FsY3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBm
bG9hdCB2YWx1ZSkKLXsKLSAgICBjb21wb25lbnRzWzBdID0gKDAuMjEzICsgMC43ODcgKiB2YWx1
ZSk7Ci0gICAgY29tcG9uZW50c1sxXSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNv
bXBvbmVudHNbMl0gPSAoMC4wNzIgLSAwLjA3MiAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzNd
ID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s0XSA9ICgwLjcxNSAr
IDAuMjg1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbNV0gPSAoMC4wNzIgLSAwLjA3MiAqIHZh
bHVlKTsKLSAgICBjb21wb25lbnRzWzZdID0gKDAuMjEzIC0gMC4yMTMgKiB2YWx1ZSk7Ci0gICAg
Y29tcG9uZW50c1s3XSA9ICgwLjcxNSAtIDAuNzE1ICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNb
OF0gPSAoMC4wNzIgKyAwLjkyOCAqIHZhbHVlKTsKLX0KLQotaW5saW5lIHZvaWQgRkVDb2xvck1h
dHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxv
YXQgdmFsdWUpCi17Ci0gICAgZmxvYXQgY29zSHVlID0gY29zKHZhbHVlICogcGlGbG9hdCAvIDE4
MCk7Ci0gICAgZmxvYXQgc2luSHVlID0gc2luKHZhbHVlICogcGlGbG9hdCAvIDE4MCk7Ci0gICAg
Y29tcG9uZW50c1swXSA9IDAuMjEzICsgY29zSHVlICogMC43ODcgLSBzaW5IdWUgKiAwLjIxMzsK
LSAgICBjb21wb25lbnRzWzFdID0gMC43MTUgLSBjb3NIdWUgKiAwLjcxNSAtIHNpbkh1ZSAqIDAu
NzE1OwotICAgIGNvbXBvbmVudHNbMl0gPSAwLjA3MiAtIGNvc0h1ZSAqIDAuMDcyICsgc2luSHVl
ICogMC45Mjg7Ci0gICAgY29tcG9uZW50c1szXSA9IDAuMjEzIC0gY29zSHVlICogMC4yMTMgKyBz
aW5IdWUgKiAwLjE0MzsKLSAgICBjb21wb25lbnRzWzRdID0gMC43MTUgKyBjb3NIdWUgKiAwLjI4
NSArIHNpbkh1ZSAqIDAuMTQwOwotICAgIGNvbXBvbmVudHNbNV0gPSAwLjA3MiAtIGNvc0h1ZSAq
IDAuMDcyIC0gc2luSHVlICogMC4yODM7Ci0gICAgY29tcG9uZW50c1s2XSA9IDAuMjEzIC0gY29z
SHVlICogMC4yMTMgLSBzaW5IdWUgKiAwLjc4NzsKLSAgICBjb21wb25lbnRzWzddID0gMC43MTUg
LSBjb3NIdWUgKiAwLjcxNSArIHNpbkh1ZSAqIDAuNzE1OwotICAgIGNvbXBvbmVudHNbOF0gPSAw
LjA3MiArIGNvc0h1ZSAqIDAuOTI4ICsgc2luSHVlICogMC4wNzI7Ci19Ci0KLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVD
b2xvck1hdHJpeCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IGNkNDg0NTJk
ZDMxNzUzYmZjYmZlMzNjMzQzODY3Y2UzYzliYTExNmYuLmRhZTE4OWVhOWQ3N2NmNzQ2YWEzNDE2
Y2I4MTZmZWZmMjE0Y2UzYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApAQCAt
MjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29tcG9uZW50
VHJhbnNmZXIuaCIKIAorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUg
IlBpeGVsQnVmZmVyLmgiCkBAIC00NywxOCArNDgsNDEgQEAgRkVDb21wb25lbnRUcmFuc2Zlcjo6
RkVDb21wb25lbnRUcmFuc2Zlcihjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRG
dW4KIHsKIH0KIAotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlSWRlbnRpdHlUYWJs
ZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKQorLy8gRklY
TUU6IE1vdmUgdGhlIGNsYXNzIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXIgdG8g
c2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUNvbXBvbmVudFRyYW5z
ZmVyU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxG
RUNvbXBvbmVudFRyYW5zZmVyPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNy
ZXRlQXBwbGllcjxGRUNvbXBvbmVudFRyYW5zZmVyPjsKKworcHVibGljOgorICAgIHVzaW5nIEJh
c2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVm
ZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB1c2lu
ZyBMb29rdXBUYWJsZSA9IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PjsKKworICAgIHN0YXRpYyB2
b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVUYWJ1bGFyVGFibGUoTG9v
a3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgc3RhdGlj
IHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJik7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZUxpbmVhclRhYmxlKExv
b2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIHN0YXRp
YyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYpOworCisgICAgc3RhdGljIExvb2t1cFRhYmxlIGNvbXB1dGVMb29rdXBU
YWJsZShjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisKKyAgICB2b2lkIGFwcGx5
UGxhdGZvcm0oUGl4ZWxCdWZmZXImKSBjb25zdDsKK307CisKK3ZvaWQgRkVDb21wb25lbnRUcmFu
c2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJikKIHsKIH0KIAotdm9pZCBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjb21wdXRlVGFidWxhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit2b2lkIEZFQ29t
cG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3Vw
VGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJG
dW5jdGlvbikKIHsKICAgICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB0YWJsZVZhbHVlcyA9IHRyYW5z
ZmVyRnVuY3Rpb24udGFibGVWYWx1ZXM7CiAgICAgdW5zaWduZWQgbiA9IHRhYmxlVmFsdWVzLnNp
emUoKTsKICAgICBpZiAobiA8IDEpCi0gICAgICAgIHJldHVybjsgICAgICAgICAgICAKKyAgICAg
ICAgcmV0dXJuOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgZG91YmxlIGMgPSBpIC8gMjU1LjA7ICAgICAgICAgICAgICAgIAorICAg
ICAgICBkb3VibGUgYyA9IGkgLyAyNTUuMDsKICAgICAgICAgdW5zaWduZWQgayA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihjICogKG4gLSAxKSk7CiAgICAgICAgIGRvdWJsZSB2MSA9IHRhYmxlVmFs
dWVzW2tdOwogICAgICAgICBkb3VibGUgdjIgPSB0YWJsZVZhbHVlc1tzdGQ6Om1pbigoayArIDEp
LCAobiAtIDEpKV07CkBAIC02OCw3ICs5Miw3IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6
Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lCiAg
ICAgfQogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxl
KExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRy
YW5zZmVyRnVuY3Rpb24pCit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6
OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCiB7CiAgICAgY29uc3QgVmVjdG9y
PGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVzOwogICAg
IHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7CkBAIC04Myw3ICsxMDcsNyBAQCB2b2lk
IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiB2
YWx1ZXMsIGNvbnN0IENvbXBvbgogICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVy
Ojpjb21wdXRlTGluZWFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgdHJhbnNmZXJGdW5jdGlvbikKK3ZvaWQgRkVDb21wb25lbnRUcmFu
c2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1
ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewogICAg
ICAgICBkb3VibGUgdmFsID0gdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSAqIGkgKyAyNTUgKiB0cmFu
c2ZlckZ1bmN0aW9uLmludGVyY2VwdDsKQEAgLTkyLDcgKzExNiw3IEBAIHZvaWQgRkVDb21wb25l
bnRUcmFuc2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0
IENvbXBvbmVuCiAgICAgfQogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVH
YW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2Fy
ZUFwcGxpZXI6OmNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCiB7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICBkb3VibGUg
ZXhwb25lbnQgPSB0cmFuc2ZlckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlr
ZSBwYXNzaW5nIGEgZG91YmxlIGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRv
IGRvdWJsZQpAQCAtMTAyLDYxICsxMjYsNjYgQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpj
b21wdXRlR2FtbWFUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnQKICAg
ICB9CiB9CiAKLWJvb2wgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYpCitGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpMb29r
dXBUYWJsZSBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlTG9va3Vw
VGFibGUoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZnVuY3Rpb24pCiB7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIExvb2t1cFRhYmxlIHRhYmxl
OwogCi0gICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKTsKLSAgICBpZiAoIWRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdGFibGUuc2l6ZSgpOyArK2kpCisgICAgICAgIHRhYmxlW2ldID0gaTsK
KworICAgIHVzaW5nIFRyYW5zZmVyVHlwZSA9IHZvaWQgKCopKExvb2t1cFRhYmxlJiwgY29uc3Qg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIFRyYW5zZmVyVHlwZSBjYWxsRWZmZWN0
W10gPSB7CisgICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJB
TlNGRVJfVFlQRV9VTktOT1dOCisgICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLCAgIC8vIEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9JREVOVElUWQorICAgICAgICBjb21wdXRlVGFidWxhclRh
YmxlLCAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEUKKyAgICAgICAgY29tcHV0
ZURpc2NyZXRlVGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0RJU0NSRVRFCisg
ICAgICAgIGNvbXB1dGVMaW5lYXJUYWJsZSwgICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQ
RV9MSU5FQVIKKyAgICAgICAgY29tcHV0ZUdhbW1hVGFibGUgICAgICAgLy8gRkVDT01QT05FTlRU
UkFOU0ZFUl9UWVBFX0dBTU1BCisgICAgfTsKIAotICAgIExvb2t1cFRhYmxlIHJlZFRhYmxlOwot
ICAgIExvb2t1cFRhYmxlIGdyZWVuVGFibGU7Ci0gICAgTG9va3VwVGFibGUgYmx1ZVRhYmxlOwot
ICAgIExvb2t1cFRhYmxlIGFscGhhVGFibGU7Ci0gICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyZWRU
YWJsZSwgZ3JlZW5UYWJsZSwgYmx1ZVRhYmxlLCBhbHBoYVRhYmxlKTsKKyAgICBSRUxFQVNFX0FT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVfdD4oZnVuY3Rp
b24udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKKyAgICBjYWxsRWZmZWN0
W2Z1bmN0aW9uLnR5cGVdKHRhYmxlLCBmdW5jdGlvbik7CiAKLSAgICBJbnRSZWN0IGRyYXdpbmdS
ZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKLSAgICBpbi0+Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLCBkcmF3aW5nUmVjdCk7Ci0gICAgCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFy
cmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgIHVpbnQ4X3QqIGRhdGEg
PSBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZGF0YSgpOwotICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9u
UGl4ZWxBcnJheUxlbmd0aCA9IGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICBy
ZXR1cm4gdGFibGU7Cit9CisKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGll
cjo6YXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNvbnN0Cit7CisgICAg
YXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBwaXhl
bEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICB1aW50OF90KiBkYXRhID0g
cGl4ZWxBcnJheS5kYXRhKCk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsg
cGl4ZWxPZmZzZXQgPCBkZXN0aW5hdGlvblBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9
IDQpIHsKLSAgICAgICAgZGF0YVtwaXhlbE9mZnNldF0gPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zm
c2V0XV07CisgICAgYXV0byByZWRUYWJsZSAgID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0
LnJlZEZ1bmN0aW9uKCkpOworICAgIGF1dG8gZ3JlZW5UYWJsZSA9IGNvbXB1dGVMb29rdXBUYWJs
ZShtX2VmZmVjdC5ncmVlbkZ1bmN0aW9uKCkpOworICAgIGF1dG8gYmx1ZVRhYmxlICA9IGNvbXB1
dGVMb29rdXBUYWJsZShtX2VmZmVjdC5ibHVlRnVuY3Rpb24oKSk7CisgICAgYXV0byBhbHBoYVRh
YmxlID0gY29tcHV0ZUxvb2t1cFRhYmxlKG1fZWZmZWN0LmFscGhhRnVuY3Rpb24oKSk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5
TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXRdICAg
ICA9IHJlZFRhYmxlW2RhdGFbcGl4ZWxPZmZzZXRdXTsKICAgICAgICAgZGF0YVtwaXhlbE9mZnNl
dCArIDFdID0gZ3JlZW5UYWJsZVtkYXRhW3BpeGVsT2Zmc2V0ICsgMV1dOwogICAgICAgICBkYXRh
W3BpeGVsT2Zmc2V0ICsgMl0gPSBibHVlVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDJdXTsKICAg
ICAgICAgZGF0YVtwaXhlbE9mZnNldCArIDNdID0gYWxwaGFUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0
ICsgM11dOwogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFQ29tcG9uZW50
VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMoTG9va3VwVGFibGUmIHJlZFRhYmxlLCBMb29r
dXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUmIGJsdWVUYWJsZSwgTG9va3VwVGFibGUm
IGFscGhhVGFibGUpCitib29sIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3Rz
KQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWRUYWJsZS5zaXplKCk7ICsraSkK
LSAgICAgICAgcmVkVGFibGVbaV0gPSBncmVlblRhYmxlW2ldID0gYmx1ZVRhYmxlW2ldID0gYWxw
aGFUYWJsZVtpXSA9IGk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5n
ZXQoKTsKKyAgICAKKyAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5w
aXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQp
OworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgdXNpbmcgVHJhbnNmZXJUeXBlID0gdm9pZCAoKikoTG9va3VwVGFibGUmLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgVHJhbnNmZXJUeXBlIGNhbGxFZmZl
Y3RbXSA9IHsKLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8gRkVDT01QT05FTlRU
UkFOU0ZFUl9UWVBFX1VOS05PV04KLSAgICAgICAgY29tcHV0ZUlkZW50aXR5VGFibGUsICAgLy8g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZCi0gICAgICAgIGNvbXB1dGVUYWJ1bGFy
VGFibGUsICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRQotICAgICAgICBjb21w
dXRlRGlzY3JldGVUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUK
LSAgICAgICAgY29tcHV0ZUxpbmVhclRhYmxlLCAgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX0xJTkVBUgotICAgICAgICBjb21wdXRlR2FtbWFUYWJsZSAgICAgICAvLyBGRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfR0FNTUEKLSAgICB9OworICAgIGF1dG8gZHJhd2luZ1JlY3QgPSBtX2Vm
ZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpOworICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIsIGRyYXdpbmdSZWN0KTsKIAotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9yZWRGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9M
RU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KHN0YXRpY19jYXN0PHNpemVfdD4obV9ncmVlbkZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xF
TkdUSChjYWxsRWZmZWN0KSk7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
c3RhdGljX2Nhc3Q8c2l6ZV90PihtX2JsdWVGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9MRU5H
VEgoY2FsbEVmZmVjdCkpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0
YXRpY19jYXN0PHNpemVfdD4obV9hbHBoYUZ1bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdU
SChjYWxsRWZmZWN0KSk7CisgICAgYXBwbHlQbGF0Zm9ybSgqZGVzdGluYXRpb25QaXhlbEJ1ZmZl
cik7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBjYWxsRWZmZWN0W21fcmVkRnVuY3Rpb24u
dHlwZV0ocmVkVGFibGUsIG1fcmVkRnVuY3Rpb24pOwotICAgIGNhbGxFZmZlY3RbbV9ncmVlbkZ1
bmN0aW9uLnR5cGVdKGdyZWVuVGFibGUsIG1fZ3JlZW5GdW5jdGlvbik7Ci0gICAgY2FsbEVmZmVj
dFttX2JsdWVGdW5jdGlvbi50eXBlXShibHVlVGFibGUsIG1fYmx1ZUZ1bmN0aW9uKTsKLSAgICBj
YWxsRWZmZWN0W21fYWxwaGFGdW5jdGlvbi50eXBlXShhbHBoYVRhYmxlLCBtX2FscGhhRnVuY3Rp
b24pOworYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0
d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOwogfQogCiBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQ29tcG9uZW50VHJh
bnNmZXJUeXBlIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCmluZGV4IDZhZGE5YzBh
YmJlNWMyZjlkNjViZDkxOWZmZWM0ZjE3M2QwMDM0MTQuLjUxOGVhMTM0N2E0YWRkYmE0Y2Q1MDBj
YjQyYzgxMzcwNmRjY2QxOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCkBAIC02MSwx
NiArNjEsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZFQ29tcG9uZW50VHJhbnNmZXIoY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBibHVlRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsK
IAotICAgIHVzaW5nIExvb2t1cFRhYmxlID0gc3RkOjphcnJheTx1aW50OF90LCAyNTY+OwotCi0g
ICAgc3RhdGljIHZvaWQgY29tcHV0ZUlkZW50aXR5VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZVRhYnVs
YXJUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsK
LSAgICBzdGF0aWMgdm9pZCBjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRlTGlu
ZWFyVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7
Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0KLSAgICB2b2lkIGNvbXB1dGVMb29rdXBUYWJs
ZXMoTG9va3VwVGFibGUmIHJlZFRhYmxlLCBMb29rdXBUYWJsZSYgZ3JlZW5UYWJsZSwgTG9va3Vw
VGFibGUmIGJsdWVUYWJsZSwgTG9va3VwVGFibGUmIGFscGhhVGFibGUpOwotCiAgICAgYm9vbCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBXVEY6
OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVw
cmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggOWQ5
MmUwMThhZGQwM2ZmYzBiM2Y2OGFlMjA2NmZiMTYwZjI2NDQ0OS4uMTVhNzEyOTk4ODI5YWNkOWI0
ZDI5NDVhZmRlYmJlNmQ2ODdiN2RiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTI1LDYgKzI1LDcg
QEAKICNpbmNsdWRlICJGRUNvbXBvc2l0ZS5oIgogCiAjaW5jbHVkZSAiRkVDb21wb3NpdGVBcml0
aG1ldGljTkVPTi5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUg
IlBpeGVsQnVmZmVyLmgiCkBAIC04NywxNSArODgsNjEgQEAgYm9vbCBGRUNvbXBvc2l0ZTo6c2V0
SzQoZmxvYXQgazQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFy
IGNsYW1wQnl0ZShpbnQgYykKK3ZvaWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogewotICAgIHVuc2lnbmVkIGNoYXIgYnVmZltd
ID0geyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjKSwgMjU1LCAwIH07CisgICAgc3dpdGNo
IChtX3R5cGUpIHsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOgorICAgIGNhc2Ug
RkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKKyAgICAgICAgLy8gRm9yIEluIGFuZCBBdG9wIHRo
ZSBmaXJzdCBlZmZlY3QganVzdCBpbmZsdWVuY2VzIHRoZSByZXN1bHQgb2YKKyAgICAgICAgLy8g
dGhlIHNlY29uZCBlZmZlY3QuIFNvIGp1c3QgdXNlIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IG9m
IHRoZSBzZWNvbmQgZWZmZWN0IGhlcmUuCisgICAgICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGlu
cHV0RWZmZWN0KDEpLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICAgICAgY2xpcEFic29sdXRl
UGFpbnRSZWN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJB
VE9SX0FSSVRITUVUSUM6CisgICAgICAgIC8vIEFyaXRobWV0aWMgbWF5IGluZmx1bmNlIHRoZSBj
b21wZWxlIGZpbHRlciBwcmltaXRpdmUgcmVnaW9uLiBTbyB3ZSBjYW4ndAorICAgICAgICAvLyBv
cHRpbWl6ZSB0aGUgcGFpbnQgcmVnaW9uIGhlcmUuCisgICAgICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7CisgICAgICAgIHJldHVybjsK
KyAgICBkZWZhdWx0OgorICAgICAgICAvLyBUYWtlIHRoZSB1bmlvbiBvZiBib3RoIGlucHV0IGVm
ZmVjdHMuCisgICAgICAgIEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
ZmlsdGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworLy8gRklYTUU6IE1vdmUgdGhl
IGNsYXNzIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQg
aGVhZGVyIGZpbGVzLgorY2xhc3MgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29tcG9zaXRlPiB7CisgICAgdXNpbmcgQmFz
ZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUNvbXBvc2l0ZT47CisKK3B1YmxpYzoK
KyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBj
b25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgc3RhdGljIHVpbnQ4X3QgY2xhbXBCeXRlKGludCk7CisKKyAgICB0ZW1wbGF0ZSA8
aW50IGIxLCBpbnQgYjQ+CisgICAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGlj
UGl4ZWxzKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24s
IGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9h
dCBrNCk7CisKKyAgICB0ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjQ+CisgICAgc3RhdGljIGlubGlu
ZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNv
dXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBm
bG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CisKKyAgICBzdGF0aWMgaW5s
aW5lIHZvaWQgYXBwbHlQbGF0Zm9ybUFyaXRobWV0aWModW5zaWduZWQgY2hhciogc291cmNlLCB1
bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsx
LCBmbG9hdCBrMiwgZmxvYXQgazMsIGZsb2F0IGs0KTsKKworICAgIGJvb2wgYXBwbHlBcml0aG1l
dGljKEZpbHRlckVmZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yKTsKKyAgICBib29sIGFwcGx5
Tm9uQXJpdGhtZXRpYyhGaWx0ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3QqIGluMik7Cit9Owor
Cit1aW50OF90IEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjbGFtcEJ5dGUoaW50IGMpCit7
CisgICAgdWludDhfdCBidWZmW10gPSB7IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGMpLCAyNTUsIDAg
fTsKICAgICB1bnNpZ25lZCB1YyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjKTsKICAgICByZXR1
cm4gYnVmZlshISh1YyAmIH4weGZmKSArICEhKHVjICYgfih+MHUgPj4gMSkpXTsKIH0KIAogdGVt
cGxhdGUgPGludCBiMSwgaW50IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1l
dGljUGl4ZWxzKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRp
b24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBm
bG9hdCBrNCkKK2lubGluZSB2b2lkIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRl
QXJpdGhtZXRpY1BpeGVscyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRl
c3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9h
dCBrMywgZmxvYXQgazQpCiB7CiAgICAgZmxvYXQgc2NhbGVkSzE7CiAgICAgZmxvYXQgc2NhbGVk
SzQ7CkBAIC0xMjIsNyArMTY5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1l
dGljUGl4ZWxzKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhcioKIC8vIGNvbXB1
dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVkIGlzIGEgZmFzdGVyIHZlcnNpb24gb2YgY29tcHV0
ZUFyaXRobWV0aWNQaXhlbHMgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBjbGFtcGluZwogLy8g
aXMgbm90IG5lY2Vzc2FyeS4gVGhpcyBlbmFibGVzIGFnZ3Jlc2l2ZSBjb21waWxlciBvcHRpbWl6
YXRpb25zIHN1Y2ggYXMgYXV0by12ZWN0b3JpemF0aW9uLgogdGVtcGxhdGUgPGludCBiMSwgaW50
IGI0Pgotc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1ldGljUGl4ZWxzVW5jbGFtcGVk
KHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBw
aXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCkK
K2lubGluZSB2b2lkIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlQXJpdGhtZXRp
Y1BpeGVsc1VuY2xhbXBlZCh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRl
c3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9h
dCBrMywgZmxvYXQgazQpCiB7CiAgICAgZmxvYXQgc2NhbGVkSzE7CiAgICAgZmxvYXQgc2NhbGVk
SzQ7CkBAIC0xNDcsNyArMTk0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVBcml0aG1l
dGljUGl4ZWxzVW5jbGFtcGVkKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWcKIH0KIAogI2lm
ICFIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJpdGhtZXRp
Y1NvZnR3YXJlKHVuc2lnbmVkIGNoYXIqIHNvdXJjZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRp
b24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBm
bG9hdCBrNCkKK2lubGluZSB2b2lkIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBseVBs
YXRmb3JtQXJpdGhtZXRpYyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRl
c3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9h
dCBrMywgZmxvYXQgazQpCiB7CiAgICAgZmxvYXQgdXBwZXJMaW1pdCA9IHN0ZDo6bWF4KDAuMGYs
IGsxKSArIHN0ZDo6bWF4KDAuMGYsIGsyKSArIHN0ZDo6bWF4KDAuMGYsIGszKSArIGs0OwogICAg
IGZsb2F0IGxvd2VyTGltaXQgPSBzdGQ6Om1pbigwLjBmLCBrMSkgKyBzdGQ6Om1pbigwLjBmLCBr
MikgKyBzdGQ6Om1pbigwLjBmLCBrMykgKyBrNDsKQEAgLTE4MCw2NiArMjI3LDMyIEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBhcml0aG1ldGljU29mdHdhcmUodW5zaWduZWQgY2hhciogc291cmNlLCB1
bnNpZ25lZCBjaGFyKiBkZXN0CiB9CiAjZW5kaWYKIAotaW5saW5lIHZvaWQgRkVDb21wb3NpdGU6
OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgZmxvYXQgazEsIGZsb2F0IGsyLCBm
bG9hdCBrMywgZmxvYXQgazQpCitib29sIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBs
eUFyaXRobWV0aWMoRmlsdGVyRWZmZWN0KiBpbiwgRmlsdGVyRWZmZWN0KiBpbjIpCiB7Ci0gICAg
aW50IGxlbmd0aCA9IHNvdXJjZS5sZW5ndGgoKTsKLSAgICBBU1NFUlQobGVuZ3RoID09IHN0YXRp
Y19jYXN0PGludD4oZGVzdGluYXRpb24ubGVuZ3RoKCkpKTsKLSAgICAvLyBUaGUgc2VsZWN0aW9u
IGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5LgotI2lmIEhBVkUoQVJN
X05FT05fSU5UUklOU0lDUykKLSAgICBBU1NFUlQoIShsZW5ndGggJiAweDMpKTsKLSAgICBwbGF0
Zm9ybUFyaXRobWV0aWNOZW9uKHNvdXJjZS5kYXRhKCksIGRlc3RpbmF0aW9uLmRhdGEoKSwgbGVu
Z3RoLCBrMSwgazIsIGszLCBrNCk7Ci0jZWxzZQotICAgIGFyaXRobWV0aWNTb2Z0d2FyZShzb3Vy
Y2UuZGF0YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCksIGxlbmd0aCwgazEsIGsyLCBrMywgazQpOwot
I2VuZGlmCi19CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4
ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7Cisg
ICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LXZvaWQgRkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBGRUNPTVBPU0lU
RV9PUEVSQVRPUl9JTjoKLSAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAg
ICAgIC8vIEZvciBJbiBhbmQgQXRvcCB0aGUgZmlyc3QgZWZmZWN0IGp1c3QgaW5mbHVlbmNlcyB0
aGUgcmVzdWx0IG9mCi0gICAgICAgIC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0
aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgotICAgICAg
ICBzZXRBYnNvbHV0ZVBhaW50UmVjdChpbnB1dEVmZmVjdCgxKS0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7Ci0gICAgICAgIGNsaXBBYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgotICAgICAgICAvLyBBcml0
aG1ldGljIG1heSBpbmZsdW5jZSB0aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4g
U28gd2UgY2FuJ3QKLSAgICAgICAgLy8gb3B0aW1pemUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgot
ICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJl
Y3QoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gVGFrZSB0
aGUgdW5pb24gb2YgYm90aCBpbnB1dCBlZmZlY3RzLgotICAgICAgICBGaWx0ZXJFZmZlY3Q6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KGZpbHRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdp
b25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8g
c291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0QURyYXdpbmdSZWN0LCBtX2VmZmVjdC5v
cGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIGlmICghc291cmNlUGl4ZWxCdWZmZXIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gbV9l
ZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSk7CisgICAgaW4yLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4
ZWxCdWZmZXIsIGVmZmVjdEJEcmF3aW5nUmVjdCk7CisKKyAgICBhdXRvJiBzb3VyY2VQaXhlbEFy
cmF5ID0gc291cmNlUGl4ZWxCdWZmZXItPmRhdGEoKTsKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBp
eGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisKKyAgICBpbnQgbGVu
Z3RoID0gc291cmNlUGl4ZWxBcnJheS5sZW5ndGgoKTsKKyAgICBBU1NFUlQobGVuZ3RoID09IHN0
YXRpY19jYXN0PGludD4oZGVzdGluYXRpb25QaXhlbEFycmF5Lmxlbmd0aCgpKSk7CisgICAgYXBw
bHlQbGF0Zm9ybUFyaXRobWV0aWMoc291cmNlUGl4ZWxBcnJheS5kYXRhKCksIGRlc3RpbmF0aW9u
UGl4ZWxBcnJheS5kYXRhKCksIGxlbmd0aCwgbV9lZmZlY3QuazEoKSwgbV9lZmZlY3QuazIoKSwg
bV9lZmZlY3QuazMoKSwgbV9lZmZlY3QuazQoKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorYm9v
bCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlOb25Bcml0aG1ldGljKEZpbHRlckVm
ZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwot
Ci0gICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0g
ICAgICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwotICAgICAgICBpZiAoIWRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAot
ICAgICAgICBJbnRSZWN0IGVmZmVjdEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgIGF1dG8gc291
cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0QURyYXdpbmdSZWN0LCBvcGVyYXRpbmdDb2xv
clNwYWNlKCkpOwotICAgICAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVx
dWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
Ci0gICAgICAgIGluMi0+Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLCBlZmZlY3RCRHJhd2luZ1JlY3QpOwotCi0gICAgICAgIGF1dG8mIHNvdXJjZVBpeGVsQXJy
YXkgPSBzb3VyY2VQaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgICAgICBhdXRvJiBkZXN0aW5hdGlv
blBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAgICAgIHBs
YXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKHNvdXJjZVBpeGVsQXJyYXksIGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSwgbV9rMSwgbV9rMiwgbV9rMywgbV9rNCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOworICAg
IGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlm
ICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjQ4LDUwICsyNjEs
NzUgQEAgYm9vbCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYpCiAgICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXIyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpOworICAgIGF1dG8mIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFnZS0+
Y29udGV4dCgpOworCisgICAgc3dpdGNoIChtX2VmZmVjdC5vcGVyYXRpb24oKSkgeworICAgIGNh
c2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfVU5LTk9XTjoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX09W
RVI6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIs
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0g
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2lu
Z1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3
aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAg
ICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKICAgICAg
ICAgYnJlYWs7CisKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0lOOiB7CiAgICAgICAg
IC8vIEFwcGxpZXMgb25seSB0byB0aGUgaW50ZXJzZWN0ZWQgcmVnaW9uLgogICAgICAgICBJbnRS
ZWN0IGRlc3RpbmF0aW9uUmVjdCA9IGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgICAgICBk
ZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
ICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QoYWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAg
ICAgIGRlc3RpbmF0aW9uUmVjdC5pbnRlcnNlY3QobV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3Qo
KSk7CiAgICAgICAgIGlmIChkZXN0aW5hdGlvblJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIEludFJlY3QgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QgPSBkZXN0aW5h
dGlvblJlY3QgLSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CisgICAgICAgIEludFJl
Y3QgYWRqdXN0ZWREZXN0aW5hdGlvblJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBtX2VmZmVjdC5h
YnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CiAgICAgICAgIEludFJlY3Qgc291cmNlUmVj
dCA9IGRlc3RpbmF0aW9uUmVjdCAtIGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7
CiAgICAgICAgIEludFJlY3Qgc291cmNlMlJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkubG9jYXRpb24oKTsKICAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgRmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25S
ZWN0KSwgRmxvYXRSZWN0KHNvdXJjZTJSZWN0KSk7CiAgICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgRmxvYXRSZWN0KGFkanVzdGVkRGVzdGluYXRpb25S
ZWN0KSwgRmxvYXRSZWN0KHNvdXJjZVJlY3QpLCB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJ
biB9KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVS
QVRPUl9PVVQ6Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1
ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkp
OwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9
LCBpbWFnZUJ1ZmZlcjItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3Rp
bmF0aW9uT3V0KTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyMi0+bG9naWNhbFNpemUoKSB9LCBDb21w
b3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdXQpOwogICAgICAgICBicmVhazsKKwogICAgIGNh
c2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUDoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjIt
PmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBv
c2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2Fs
U2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VBdG9wKTsKICAgICAgICAgYnJlYWs7
CisKICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUjoKLSAgICAgICAgZmlsdGVyQ29u
dGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgp
IH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1IpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2lj
YWxTaXplKCkgfSwgQ29tcG9zaXRlT3BlcmF0b3I6OlhPUik7CiAgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDOgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgY2FzZSBGRUNPTVBP
U0lURV9PUEVSQVRPUl9MSUdIVEVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1
ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRS
ZWN0KCkpLCB7IHsgfSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkgfSwgQ29tcG9zaXRlT3Bl
cmF0b3I6OlBsdXNMaWdodGVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3Qu
ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAg
ICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVj
dC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7
IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVz
TGlnaHRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQog
Citib29sIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBj
b25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKK3sKKyAgICBGaWx0ZXJFZmZl
Y3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOworICAgIEZpbHRlckVmZmVjdCogaW4yID0g
aW5wdXRFZmZlY3RzWzFdLmdldCgpOworCisgICAgaWYgKG1fZWZmZWN0Lm9wZXJhdGlvbigpID09
IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpCisgICAgICAgIHJldHVybiBhcHBseUFy
aXRobWV0aWMoaW4sIGluMik7CisgICAgcmV0dXJuIGFwcGx5Tm9uQXJpdGhtZXRpYyhpbiwgaW4y
KTsKK30KKworYm9vbCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcigq
dGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb21wb3NpdGVPcGVyYXRpb25U
eXBlJiB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5j
cHAKaW5kZXggYWRkMmJmYTA3ZDEyZDIyNTBkYWU2ZTMwNzkwOGUzYWEyZDE2ZTRkNC4uMjQ3NTlm
OGYyMTE5ZWQzNzg2YjFkOTUxY2Y4ZGUwMjg0MzU0YTk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RkVDb252b2x2ZU1hdHJpeC5oIgogCisjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5oIgorI2luY2x1
ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgpAQCAt
MTE1LDYgKzExNyw0MiBAQCBib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldFByZXNlcnZlQWxwaGEo
Ym9vbCBwcmVzZXJ2ZUFscGhhKQogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBGSVhNRTogTW92
ZSB0aGUgY2xhc3MgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBz
b3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFw
cGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29udm9sdmVNYXRy
aXg+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFQ29u
dm9sdmVNYXRyaXg+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJv
b2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVm
ZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewor
ICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheTsKKyAgICAgICAg
VWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXk7CisgICAgICAgIGludCB3aWR0aDsKKyAg
ICAgICAgaW50IGhlaWdodDsKKworICAgICAgICBJbnRTaXplIGtlcm5lbFNpemU7CisgICAgICAg
IGZsb2F0IGRpdmlzb3I7CisgICAgICAgIGZsb2F0IGJpYXM7CisgICAgICAgIEludFBvaW50IHRh
cmdldE9mZnNldDsKKyAgICAgICAgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlOworICAgICAgICBib29s
IHByZXNlcnZlQWxwaGE7CisgICAgICAgIFZlY3RvcjxmbG9hdD4ga2VybmVsTWF0cml4OworICAg
IH07CisKKyAgICBzdGF0aWMgaW5saW5lIHVpbnQ4X3QgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hh
bm5lbCwgdWludDhfdCBtYXggPSAyNTUpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXREZXN0
aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVaW50
OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRvdGFscywgZmxv
YXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzKTsKKworICAg
IHN0YXRpYyBpbmxpbmUgaW50IGdldFBpeGVsVmFsdWUoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50
IHgsIGludCB5KTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRJbnRlcmlvclBpeGVscyhQ
YWludGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwg
aW50IHlFbmQpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRPdXRlclBpeGVscyhQYWludGlu
Z0RhdGEmLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOworCisgICAgdm9pZCBhcHBs
eVBsYXRmb3JtKFBhaW50aW5nRGF0YSYpIGNvbnN0OworfTsKKwogLyoKICAgIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICBDb252b2x2ZU1hdHJpeCBpbXBsZW1lbnRh
dGlvbgpAQCAtMTcxLDcgKzIwOSw3IEBAIGJvb2wgRkVDb252b2x2ZU1hdHJpeDo6c2V0UHJlc2Vy
dmVBbHBoYShib29sIHByZXNlcnZlQWxwaGEpCiAgICBhbmQgd291bGQgbWFrZSBpdCByZWFsbHkg
aGFyZCB0byB1bmRlcnN0YW5kLgogKi8KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQg
Y2hhciBjbGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIG1heCA9IDI1
NSkKK2lubGluZSB1aW50OF90IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmNsYW1w
UkdCQVZhbHVlKGZsb2F0IGNoYW5uZWwsIHVpbnQ4X3QgbWF4KQogewogICAgIGlmIChjaGFubmVs
IDw9IDApCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTgwLDEwICsyMTgsOSBAQCBzdGF0aWMgQUxX
QVlTX0lOTElORSB1bnNpZ25lZCBjaGFyIGNsYW1wUkdCQVZhbHVlKGZsb2F0IGNoYW5uZWwsIHVu
c2lnbmVkIGNoYXIgbQogICAgIHJldHVybiBjaGFubmVsOwogfQogCi10ZW1wbGF0ZTxib29sIHBy
ZXNlcnZlQWxwaGFWYWx1ZXM+Ci1BTFdBWVNfSU5MSU5FIHZvaWQgc2V0RGVzdGluYXRpb25QaXhl
bHMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZVBpeGVscywgVWludDhDbGFtcGVkQXJy
YXkmIGRlc3RQaXhlbHMsIGludCYgcGl4ZWwsIGZsb2F0KiB0b3RhbHMsIGZsb2F0IGRpdmlzb3Is
IGZsb2F0IGJpYXMpCitpbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVy
OjpzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4
ZWxzLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdFBpeGVscywgaW50JiBwaXhlbCwgZmxvYXQqIHRv
dGFscywgZmxvYXQgZGl2aXNvciwgZmxvYXQgYmlhcywgYm9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVz
KQogewotICAgIHVuc2lnbmVkIGNoYXIgbWF4QWxwaGEgPSBwcmVzZXJ2ZUFscGhhVmFsdWVzID8g
MjU1IDogY2xhbXBSR0JBVmFsdWUodG90YWxzWzNdIC8gZGl2aXNvciArIGJpYXMpOworICAgIHVp
bnQ4X3QgbWF4QWxwaGEgPSBwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMjU1IDogY2xhbXBSR0JBVmFs
dWUodG90YWxzWzNdIC8gZGl2aXNvciArIGJpYXMpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MzsgKytpKQogICAgICAgICBkZXN0UGl4ZWxzLnNldChwaXhlbCsrLCBjbGFtcFJHQkFWYWx1ZSh0
b3RhbHNbaV0gLyBkaXZpc29yICsgYmlhcywgbWF4QWxwaGEpKTsKIApAQCAtMTk0LDI1ICsyMzEs
NDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIHNldERlc3RpbmF0aW9uUGl4ZWxzKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFUKICAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4
ZWwrKywgbWF4QWxwaGEpOwogfQogCi0jaWYgQ09NUElMRVIoTVNWQykKLS8vIEluY29ycmVjdGx5
IGRpYWdub3Npbmcgb3ZlcndyaXRlIG9mIHN0YWNrIGluIHx0b3RhbHN8IGR1ZSB0byB8cHJlc2Vy
dmVBbHBoYVZhbHVlc3wuCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhk
aXNhYmxlOiA0Nzg5KQotI2VuZGlmCitpbmxpbmUgaW50IEZFQ29udm9sdmVNYXRyaXhTb2Z0d2Fy
ZUFwcGxpZXI6OmdldFBpeGVsVmFsdWUoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEs
IGludCB4LCBpbnQgeSkKK3sKKyAgICBpZiAoeCA+PSAwICYmIHggPCBwYWludGluZ0RhdGEud2lk
dGggJiYgeSA+PSAwICYmIHkgPCBwYWludGluZ0RhdGEuaGVpZ2h0KQorICAgICAgICByZXR1cm4g
KHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOworCisgICAgc3dpdGNoIChwYWludGlu
Z0RhdGEuZWRnZU1vZGUpIHsKKyAgICBkZWZhdWx0OiAvLyBFREdFTU9ERV9OT05FCisgICAgICAg
IHJldHVybiAtMTsKKyAgICBjYXNlIEVER0VNT0RFX0RVUExJQ0FURToKKyAgICAgICAgaWYgKHgg
PCAwKQorICAgICAgICAgICAgeCA9IDA7CisgICAgICAgIGVsc2UgaWYgKHggPj0gcGFpbnRpbmdE
YXRhLndpZHRoKQorICAgICAgICAgICAgeCA9IHBhaW50aW5nRGF0YS53aWR0aCAtIDE7CisgICAg
ICAgIGlmICh5IDwgMCkKKyAgICAgICAgICAgIHkgPSAwOworICAgICAgICBlbHNlIGlmICh5ID49
IHBhaW50aW5nRGF0YS5oZWlnaHQpCisgICAgICAgICAgICB5ID0gcGFpbnRpbmdEYXRhLmhlaWdo
dCAtIDE7CisgICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7
CisgICAgY2FzZSBFREdFTU9ERV9XUkFQOgorICAgICAgICB3aGlsZSAoeCA8IDApCisgICAgICAg
ICAgICB4ICs9IHBhaW50aW5nRGF0YS53aWR0aDsKKyAgICAgICAgeCAlPSBwYWludGluZ0RhdGEu
d2lkdGg7CisgICAgICAgIHdoaWxlICh5IDwgMCkKKyAgICAgICAgICAgIHkgKz0gcGFpbnRpbmdE
YXRhLmhlaWdodDsKKyAgICAgICAgeSAlPSBwYWludGluZ0RhdGEuaGVpZ2h0OworICAgICAgICBy
ZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOworICAgIH0KK30KIAogLy8g
T25seSBmb3IgcmVnaW9uIEMKLXRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcz4KLUFM
V0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0U2V0SW50ZXJpb3JQaXhlbHMo
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9t
LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCkKK2lubGluZSB2b2lkIEZFQ29udm9sdmVNYXRyaXhTb2Z0
d2FyZUFwcGxpZXI6OnNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
LCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCiB7
CiAgICAgLy8gZWRnZSBtb2RlIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBwaXhlbHMKLSAgICBpbnQg
cGl4ZWwgPSAobV90YXJnZXRPZmZzZXQueSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgbV90YXJn
ZXRPZmZzZXQueCgpKSAqIDQ7CisgICAgaW50IHBpeGVsID0gKHBhaW50aW5nRGF0YS50YXJnZXRP
ZmZzZXQueSgpICogcGFpbnRpbmdEYXRhLndpZHRoICsgcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNl
dC54KCkpICogNDsKICAgICBpbnQga2VybmVsSW5jcmVhc2UgPSBjbGlwUmlnaHQgKiA0OwotICAg
IGludCB4SW5jcmVhc2UgPSAobV9rZXJuZWxTaXplLndpZHRoKCkgLSAxKSAqIDQ7CisgICAgaW50
IHhJbmNyZWFzZSA9IChwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0Owog
ICAgIC8vIENvbnRhaW5zIHRoZSBzdW0gb2YgcmdiKGEpIGNvbXBvbmVudHMKLSAgICBmbG9hdCB0
b3RhbHNbMyArIChwcmVzZXJ2ZUFscGhhVmFsdWVzID8gMCA6IDEpXTsKKyAgICBmbG9hdCB0b3Rh
bHNbNF07CiAKLSAgICAvLyBtX2Rpdmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRy
aXhFbGVtZW50IGVuc3VyZXMgdGhpcwotICAgIEFTU0VSVChtX2Rpdmlzb3IpOworICAgIC8vIGRp
dmlzb3IgY2Fubm90IGJlIDAsIFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhp
cworICAgIEFTU0VSVChwYWludGluZ0RhdGEuZGl2aXNvcik7CiAKICAgICAvLyBTa2lwIHRoZSBm
aXJzdCAnKGNsaXBCb3R0b20gLSB5RW5kKScgbGluZXMKICAgICBwaXhlbCArPSAoY2xpcEJvdHRv
bSAtIHlFbmQpICogKHhJbmNyZWFzZSArIChjbGlwUmlnaHQgKyAxKSAqIDQpOwpAQCAtMjIyLDI5
ICsyODEsMjggQEAgQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRJ
bnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW4KICAgICAgICAgZm9yIChpbnQgeCA9
IGNsaXBSaWdodCArIDE7IHggPiAwOyAtLXgpIHsKICAgICAgICAgICAgIGludCBrZXJuZWxWYWx1
ZSA9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXguc2l6ZSgpIC0gMTsKICAgICAgICAgICAgIGlu
dCBrZXJuZWxQaXhlbCA9IHN0YXJ0S2VybmVsUGl4ZWw7Ci0gICAgICAgICAgICBpbnQgd2lkdGgg
PSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgIGludCB3aWR0aCA9IHBhaW50aW5n
RGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CiAKICAgICAgICAgICAgIHRvdGFsc1swXSA9IDA7CiAg
ICAgICAgICAgICB0b3RhbHNbMV0gPSAwOwogICAgICAgICAgICAgdG90YWxzWzJdID0gMDsKLSAg
ICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAgICB0b3Rh
bHNbM10gPSAwOworICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKIAogICAgICAgICAgICAgd2hp
bGUgKGtlcm5lbFZhbHVlID49IDApIHsKICAgICAgICAgICAgICAgICB0b3RhbHNbMF0gKz0gcGFp
bnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4o
cGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7CiAgICAgICAg
ICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFs
dWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0o
a2VybmVsUGl4ZWwrKykpOwogICAgICAgICAgICAgICAgIHRvdGFsc1syXSArPSBwYWludGluZ0Rh
dGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGlu
Z0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKyspKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCisgICAgICAgICAgICAgICAgaWYgKCFwYWludGlu
Z0RhdGEucHJlc2VydmVBbHBoYSkKICAgICAgICAgICAgICAgICAgICAgdG90YWxzWzNdICs9IHBh
aW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwpKTsKICAgICAgICAg
ICAgICAgICArK2tlcm5lbFBpeGVsOwogICAgICAgICAgICAgICAgIC0ta2VybmVsVmFsdWU7CiAg
ICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7CiAgICAgICAgICAgICAgICAgICAgIGtlcm5l
bFBpeGVsICs9IGtlcm5lbEluY3JlYXNlOwotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IG1f
a2VybmVsU2l6ZS53aWR0aCgpOworICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHBhaW50aW5n
RGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVsczxwcmVzZXJ2ZUFscGhhVmFsdWVz
PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXks
IHBpeGVsLCB0b3RhbHMsIG1fZGl2aXNvciwgcGFpbnRpbmdEYXRhLmJpYXMpOworICAgICAgICAg
ICAgc2V0RGVzdGluYXRpb25QaXhlbHMocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50
aW5nRGF0YS5kc3RQaXhlbEFycmF5LCBwaXhlbCwgdG90YWxzLCBwYWludGluZ0RhdGEuZGl2aXNv
ciwgcGFpbnRpbmdEYXRhLmJpYXMsIHBhaW50aW5nRGF0YS5wcmVzZXJ2ZUFscGhhKTsKICAgICAg
ICAgICAgIHN0YXJ0S2VybmVsUGl4ZWwgKz0gNDsKICAgICAgICAgfQogICAgICAgICBwaXhlbCAr
PSB4SW5jcmVhc2U7CkBAIC0yNTIsNjQgKzMxMCwzMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgRkVD
b252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRp
bgogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBpbnQgRkVDb252b2x2ZU1hdHJpeDo6Z2V0UGl4
ZWxWYWx1ZShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5KQotewotICAg
IGlmICh4ID49IDAgJiYgeCA8IHBhaW50aW5nRGF0YS53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHBh
aW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgIHJldHVybiAoeSAqIHBhaW50aW5nRGF0YS53aWR0
aCArIHgpIDw8IDI7Ci0KLSAgICBzd2l0Y2ggKG1fZWRnZU1vZGUpIHsKLSAgICBkZWZhdWx0OiAv
LyBFREdFTU9ERV9OT05FCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBjYXNlIEVER0VNT0RFX0RV
UExJQ0FURToKLSAgICAgICAgaWYgKHggPCAwKQotICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAg
IGVsc2UgaWYgKHggPj0gcGFpbnRpbmdEYXRhLndpZHRoKQotICAgICAgICAgICAgeCA9IHBhaW50
aW5nRGF0YS53aWR0aCAtIDE7Ci0gICAgICAgIGlmICh5IDwgMCkKLSAgICAgICAgICAgIHkgPSAw
OwotICAgICAgICBlbHNlIGlmICh5ID49IHBhaW50aW5nRGF0YS5oZWlnaHQpCi0gICAgICAgICAg
ICB5ID0gcGFpbnRpbmdEYXRhLmhlaWdodCAtIDE7Ci0gICAgICAgIHJldHVybiAoeSAqIHBhaW50
aW5nRGF0YS53aWR0aCArIHgpIDw8IDI7Ci0gICAgY2FzZSBFREdFTU9ERV9XUkFQOgotICAgICAg
ICB3aGlsZSAoeCA8IDApCi0gICAgICAgICAgICB4ICs9IHBhaW50aW5nRGF0YS53aWR0aDsKLSAg
ICAgICAgeCAlPSBwYWludGluZ0RhdGEud2lkdGg7Ci0gICAgICAgIHdoaWxlICh5IDwgMCkKLSAg
ICAgICAgICAgIHkgKz0gcGFpbnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgeSAlPSBwYWludGlu
Z0RhdGEuaGVpZ2h0OwotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4
KSA8PCAyOwotICAgIH0KLX0KLQogLy8gRm9yIG90aGVyIHJlZ2lvbnMgdGhhbiBDCi10ZW1wbGF0
ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+Ci12b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RT
ZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEs
IGludCB4MiwgaW50IHkyKQoraW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBw
bGllcjo6c2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwg
aW50IHkxLCBpbnQgeDIsIGludCB5MikKIHsKICAgICBpbnQgcGl4ZWwgPSAoeTEgKiBwYWludGlu
Z0RhdGEud2lkdGggKyB4MSkgKiA0OwogICAgIGludCBoZWlnaHQgPSB5MiAtIHkxOwogICAgIGlu
dCB3aWR0aCA9IHgyIC0geDE7Ci0gICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEgLSBtX3Rh
cmdldE9mZnNldC54KCk7CisgICAgaW50IGJlZ2luS2VybmVsUGl4ZWxYID0geDEgLSBwYWludGlu
Z0RhdGEudGFyZ2V0T2Zmc2V0LngoKTsKICAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFggPSBiZWdp
bktlcm5lbFBpeGVsWDsKLSAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAtIG1fdGFyZ2V0
T2Zmc2V0LnkoKTsKKyAgICBpbnQgc3RhcnRLZXJuZWxQaXhlbFkgPSB5MSAtIHBhaW50aW5nRGF0
YS50YXJnZXRPZmZzZXQueSgpOwogICAgIGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdEYXRhLndp
ZHRoIC0gd2lkdGgpICogNDsKICAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihhKSBjb21w
b25lbnRzCi0gICAgZmxvYXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVlcyA/IDAgOiAx
KV07CisgICAgZmxvYXQgdG90YWxzWzRdOwogCi0gICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAw
LCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9k
aXZpc29yKTsKKyAgICAvLyBwYWludGluZ0RhdGEuZGl2aXNvciBjYW5ub3QgYmUgMCwgU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCisgICAgQVNTRVJUKHBhaW50aW5nRGF0
YS5kaXZpc29yKTsKIAogICAgIGZvciAoaW50IHkgPSBoZWlnaHQ7IHkgPiAwOyAtLXkpIHsKICAg
ICAgICAgZm9yIChpbnQgeCA9IHdpZHRoOyB4ID4gMDsgLS14KSB7CiAgICAgICAgICAgICBpbnQg
a2VybmVsVmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7CiAgICAg
ICAgICAgICBpbnQga2VybmVsUGl4ZWxYID0gc3RhcnRLZXJuZWxQaXhlbFg7CiAgICAgICAgICAg
ICBpbnQga2VybmVsUGl4ZWxZID0gc3RhcnRLZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICBpbnQg
d2lkdGggPSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgIGludCB3aWR0aCA9IHBh
aW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CiAKICAgICAgICAgICAgIHRvdGFsc1swXSA9
IDA7CiAgICAgICAgICAgICB0b3RhbHNbMV0gPSAwOwogICAgICAgICAgICAgdG90YWxzWzJdID0g
MDsKLSAgICAgICAgICAgIGlmICghcHJlc2VydmVBbHBoYVZhbHVlcykKLSAgICAgICAgICAgICAg
ICB0b3RhbHNbM10gPSAwOworICAgICAgICAgICAgdG90YWxzWzNdID0gMDsKIAogICAgICAgICAg
ICAgd2hpbGUgKGtlcm5lbFZhbHVlID49IDApIHsKICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxJ
bmRleCA9IGdldFBpeGVsVmFsdWUocGFpbnRpbmdEYXRhLCBrZXJuZWxQaXhlbFgsIGtlcm5lbFBp
eGVsWSk7CkBAIC0zMTgsMTggKzM0NSwxOCBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OmZhc3RT
ZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbgogICAg
ICAgICAgICAgICAgICAgICB0b3RhbHNbMV0gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtr
ZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJy
YXkuaXRlbShwaXhlbEluZGV4ICsgMSkpOwogICAgICAgICAgICAgICAgICAgICB0b3RhbHNbMl0g
Kz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxm
bG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4ICsgMikpOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1
ZXMgJiYgcGl4ZWxJbmRleCA+PSAwKQorICAgICAgICAgICAgICAgIGlmICghcGFpbnRpbmdEYXRh
LnByZXNlcnZlQWxwaGEgJiYgcGl4ZWxJbmRleCA+PSAwKQogICAgICAgICAgICAgICAgICAgICB0
b3RhbHNbM10gKz0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0
aWNfY2FzdDxmbG9hdD4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShwaXhlbEluZGV4
ICsgMykpOwogICAgICAgICAgICAgICAgICsra2VybmVsUGl4ZWxYOwogICAgICAgICAgICAgICAg
IC0ta2VybmVsVmFsdWU7CiAgICAgICAgICAgICAgICAgaWYgKCEtLXdpZHRoKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwogICAgICAgICAg
ICAgICAgICAgICArK2tlcm5lbFBpeGVsWTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBt
X2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBwYWludGlu
Z0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZhbHVl
cz4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5
LCBwaXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKKyAgICAgICAg
ICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWlu
dGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRpdmlz
b3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CiAgICAg
ICAgICAgICArK3N0YXJ0S2VybmVsUGl4ZWxYOwogICAgICAgICB9CiAgICAgICAgIHBpeGVsICs9
IHhJbmNyZWFzZTsKQEAgLTMzOCw5NSArMzY1LDg4IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6
ZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEsIGlu
CiAgICAgfQogfQogCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhwb3ApIC8v
IERpc2FibGUgb2YgNDc4OQotI2VuZGlmCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZl
TWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50
IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5kKQordm9pZCBG
RUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhKSBjb25zdAogewotICAgIC8vIE11c3QgYmUgaW1wbGVtZW50ZWQgaGVy
ZSwgc2luY2UgaXQgcmVmZXJzIGFub3RoZXIgQUxXQVlTX0lOTElORQotICAgIC8vIGZ1bmN0aW9u
LCB3aGljaCBkZWZpbmVkIGluIHRoaXMgQysrIHNvdXJjZSBmaWxlIGFzIHdlbGwKLSAgICBpZiAo
bV9wcmVzZXJ2ZUFscGhhKQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8dHJ1ZT4ocGFp
bnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7Ci0gICAgZWxz
ZQotICAgICAgICBmYXN0U2V0SW50ZXJpb3JQaXhlbHM8ZmFsc2U+KHBhaW50aW5nRGF0YSwgY2xp
cFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotfQorICAgIC8vIERyYXdpbmcgZnVs
bHkgY292ZXJlZCBwaXhlbHMKKyAgICBpbnQgY2xpcFJpZ2h0ID0gcGFpbnRpbmdEYXRhLndpZHRo
IC0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKKyAgICBpbnQgY2xpcEJvdHRvbSA9
IHBhaW50aW5nRGF0YS5oZWlnaHQgLSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS5oZWlnaHQoKTsK
IAotQUxXQVlTX0lOTElORSB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldE91dGVyUGl4ZWxzKFBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIp
Ci17Ci0gICAgLy8gQWx0aG91Z2ggdGhpcyBmdW5jdGlvbiBjYW4gYmUgbW92ZWQgdG8gdGhlIGhl
YWRlciwgaXQgaXMgaW1wbGVtZW50ZWQgaGVyZQotICAgIC8vIGJlY2F1c2Ugc2V0SW50ZXJpb3JQ
aXhlbHMgaXMgYWxzbyBpbXBsZW1lbnRlZCBoZXJlCi0gICAgaWYgKG1fcHJlc2VydmVBbHBoYSkK
LSAgICAgICAgZmFzdFNldE91dGVyUGl4ZWxzPHRydWU+KHBhaW50aW5nRGF0YSwgeDEsIHkxLCB4
MiwgeTIpOwotICAgIGVsc2UKLSAgICAgICAgZmFzdFNldE91dGVyUGl4ZWxzPGZhbHNlPihwYWlu
dGluZ0RhdGEsIHgxLCB5MSwgeDIsIHkyKTsKKyAgICBpZiAoY2xpcFJpZ2h0IDwgMCB8fCBjbGlw
Qm90dG9tIDwgMCkgeworICAgICAgICAvLyBSYXJlIHNpdHVhdGlvbiwgbm90IG9wdGltaXplZCBm
b3Igc3BlZWQKKyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBwYWlu
dGluZ0RhdGEud2lkdGgsIHBhaW50aW5nRGF0YS5oZWlnaHQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWluaW1hbFJlY3REaW1lbnNpb24gPSAo
MTAwICogMTAwKTsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKKwor
ICAgIGlmIChpbnQgaXRlcmF0aW9ucyA9IChwYWludGluZ0RhdGEud2lkdGggKiBwYWludGluZ0Rh
dGEuaGVpZ2h0KSAvIG1pbmltYWxSZWN0RGltZW5zaW9uKSB7CisgICAgICAgIGludCBzdHJpZGUg
PSBjbGlwQm90dG9tIC8gaXRlcmF0aW9uczsKKyAgICAgICAgaW50IGNodW5rQ291bnQgPSAoY2xp
cEJvdHRvbSArIHN0cmlkZSAtIDEpIC8gc3RyaWRlOworCisgICAgICAgIENvbmN1cnJlbnRXb3Jr
UXVldWU6OmFwcGx5KGNodW5rQ291bnQsIFsmXShzaXplX3QgaW5kZXgpIHsKKyAgICAgICAgICAg
IGludCB5U3RhcnQgPSAoc3RyaWRlICogaW5kZXgpOworICAgICAgICAgICAgaW50IHlFbmQgPSBz
dGQ6Om1pbjxpbnQ+KHN0cmlkZSAqIChpbmRleCArIDEpLCBjbGlwQm90dG9tKTsKKworICAgICAg
ICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0
b20sIHlTdGFydCwgeUVuZCk7CisgICAgICAgIH0pOworICAgIH0gZWxzZQorICAgICAgICBzZXRJ
bnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgMCwgY2xp
cEJvdHRvbSk7CisKKyAgICBjbGlwUmlnaHQgKz0gcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC54
KCkgKyAxOworICAgIGNsaXBCb3R0b20gKz0gcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC55KCkg
KyAxOworCisgICAgaWYgKHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpID4gMCkKKyAgICAg
ICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCAwLCBwYWludGluZ0RhdGEud2lkdGgs
IHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpKTsKKyAgICBpZiAoY2xpcEJvdHRvbSA8IHBh
aW50aW5nRGF0YS5oZWlnaHQpCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwg
MCwgY2xpcEJvdHRvbSwgcGFpbnRpbmdEYXRhLndpZHRoLCBwYWludGluZ0RhdGEuaGVpZ2h0KTsK
KyAgICBpZiAocGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC54KCkgPiAwKQorICAgICAgICBzZXRP
dXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgp
LCBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7CisgICAgaWYgKGNs
aXBSaWdodCA8IHBhaW50aW5nRGF0YS53aWR0aCkKKyAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFp
bnRpbmdEYXRhLCBjbGlwUmlnaHQsIHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueSgpLCBwYWlu
dGluZ0RhdGEud2lkdGgsIGNsaXBCb3R0b20pOwogfQogCi1ib29sIEZFQ29udm9sdmVNYXRyaXg6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorYm9vbCBGRUNvbnZvbHZlTWF0
cml4U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZl
Y3RWZWN0b3ImIGlucHV0RWZmZWN0cykKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsK
IAotICAgIGF1dG8gYWxwaGFGb3JtYXQgPSBtX3ByZXNlcnZlQWxwaGEgPyBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgOiBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkOwotICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVy
UmVzdWx0KGFscGhhRm9ybWF0KTsKKyAgICBhdXRvIGFscGhhRm9ybWF0ID0gbV9lZmZlY3QucHJl
c2VydmVBbHBoYSgpID8gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkIDog
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZDsKKyAgICBhdXRvIGRlc3RpbmF0
aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJlc3VsdChhbHBoYUZvcm1hdCk7
CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1
dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBhdXRvIHNvdXJjZVBp
eGVsQnVmZmVyID0gaW4tPmdldFBpeGVsQnVmZmVyUmVzdWx0KGFscGhhRm9ybWF0LCBlZmZlY3RE
cmF3aW5nUmVjdCwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBhdXRvIGVmZmVjdERyYXdp
bmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRvIHNvdXJjZVBpeGVsQnVmZmVyID0gaW4tPmdl
dFBpeGVsQnVmZmVyUmVzdWx0KGFscGhhRm9ybWF0LCBlZmZlY3REcmF3aW5nUmVjdCwgbV9lZmZl
Y3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKICAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvJiBzb3VyY2VQaXhlbEFycmF5ID0gc291
cmNlUGl4ZWxCdWZmZXItPmRhdGEoKTsKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkg
PSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0KLSAgICBJbnRTaXplIHBhaW50U2l6
ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwogICAgIAorICAgIGF1dG8gcGFpbnRTaXpl
ID0gbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CisKICAgICBQYWludGluZ0Rh
dGEgcGFpbnRpbmdEYXRhID0gewogICAgICAgICBzb3VyY2VQaXhlbEFycmF5LAogICAgICAgICBk
ZXN0aW5hdGlvblBpeGVsQXJyYXksCiAgICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAogICAgICAg
ICBwYWludFNpemUuaGVpZ2h0KCksCi0gICAgICAgIG1fYmlhcyAqIDI1NSwKLSAgICAgICAgbm9y
bWFsaXplZEZsb2F0cyhtX2tlcm5lbE1hdHJpeCkKKyAgICAgICAgbV9lZmZlY3Qua2VybmVsU2l6
ZSgpLAorICAgICAgICBtX2VmZmVjdC5kaXZpc29yKCksCisgICAgICAgIG1fZWZmZWN0LmJpYXMo
KSAqIDI1NSwKKyAgICAgICAgbV9lZmZlY3QudGFyZ2V0T2Zmc2V0KCksCisgICAgICAgIG1fZWZm
ZWN0LmVkZ2VNb2RlKCksCisgICAgICAgIG1fZWZmZWN0LnByZXNlcnZlQWxwaGEoKSwKKyAgICAg
ICAgRkVDb2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyhtX2VmZmVjdC5rZXJuZWwoKSkKICAg
ICB9OwogCi0gICAgLy8gRHJhd2luZyBmdWxseSBjb3ZlcmVkIHBpeGVscwotICAgIGludCBjbGlw
UmlnaHQgPSBwYWludFNpemUud2lkdGgoKSAtIG1fa2VybmVsU2l6ZS53aWR0aCgpOwotICAgIGlu
dCBjbGlwQm90dG9tID0gcGFpbnRTaXplLmhlaWdodCgpIC0gbV9rZXJuZWxTaXplLmhlaWdodCgp
OwotCi0gICAgaWYgKGNsaXBSaWdodCA8IDAgfHwgY2xpcEJvdHRvbSA8IDApIHsKLSAgICAgICAg
Ly8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRpbWl6ZWQgZm9yIHNwZWVkCi0gICAgICAgIHNldE91
dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6
ZS5oZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChpbnQg
aXRlcmF0aW9ucyA9IChhYnNvbHV0ZVBhaW50UmVjdCgpLndpZHRoKCkgKiBhYnNvbHV0ZVBhaW50
UmVjdCgpLmhlaWdodCgpKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24pIHsKLSAgICAgICAgaW50
IHN0cmlkZSA9IGNsaXBCb3R0b20gLyBpdGVyYXRpb25zOwotICAgICAgICBpbnQgY2h1bmtDb3Vu
dCA9IChjbGlwQm90dG9tICsgc3RyaWRlIC0gMSkgLyBzdHJpZGU7Ci0KLSAgICAgICAgQ29uY3Vy
cmVudFdvcmtRdWV1ZTo6YXBwbHkoY2h1bmtDb3VudCwgWyZdKHNpemVfdCBpbmRleCkgewotICAg
ICAgICAgICAgaW50IHlTdGFydCA9IChzdHJpZGUgKiBpbmRleCk7Ci0gICAgICAgICAgICBpbnQg
eUVuZCA9IHN0ZDo6bWluPGludD4oc3RyaWRlICogKGluZGV4ICsgMSksIGNsaXBCb3R0b20pOwot
Ci0gICAgICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwg
Y2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKLSAgICAgICAgfSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9t
LCAwLCBjbGlwQm90dG9tKTsKLQotICAgIGNsaXBSaWdodCArPSBtX3RhcmdldE9mZnNldC54KCkg
KyAxOwotICAgIGNsaXBCb3R0b20gKz0gbV90YXJnZXRPZmZzZXQueSgpICsgMTsKLSAgICBpZiAo
bV90YXJnZXRPZmZzZXQueSgpID4gMCkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdE
YXRhLCAwLCAwLCBwYWludFNpemUud2lkdGgoKSwgbV90YXJnZXRPZmZzZXQueSgpKTsKLSAgICBp
ZiAoY2xpcEJvdHRvbSA8IHBhaW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgc2V0T3V0ZXJQaXhl
bHMocGFpbnRpbmdEYXRhLCAwLCBjbGlwQm90dG9tLCBwYWludFNpemUud2lkdGgoKSwgcGFpbnRT
aXplLmhlaWdodCgpKTsKLSAgICBpZiAobV90YXJnZXRPZmZzZXQueCgpID4gMCkKLSAgICAgICAg
c2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBtX3RhcmdldE9mZnNldC55KCksIG1fdGFy
Z2V0T2Zmc2V0LngoKSwgY2xpcEJvdHRvbSk7Ci0gICAgaWYgKGNsaXBSaWdodCA8IHBhaW50U2l6
ZS53aWR0aCgpKQotICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdo
dCwgbV90YXJnZXRPZmZzZXQueSgpLCBwYWludFNpemUud2lkdGgoKSwgY2xpcEJvdHRvbSk7Ci0K
KyAgICBhcHBseVBsYXRmb3JtKHBhaW50aW5nRGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K2Jvb2wgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVy
KCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEVkZ2VNb2RlVHlwZSYgdHlw
ZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKaW5kZXggMDVj
MWE4MzdkMjM0Y2Y1ODRkZTg5MGY1OTRiMjIwNzNmMTMzNjVjNS4uNmI3YWRlNmYwYjIyODlmMzQz
ZTU2ODE0ZmQ4YzJkZTU0NDczZmY5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKQEAgLTY0LDE2
ICs2NCw2IEBAIHB1YmxpYzoKICAgICBib29sIHNldFByZXNlcnZlQWxwaGEoYm9vbCk7CiAKIHBy
aXZhdGU6Ci0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKLSAgICAgICAgY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXk7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5JiBk
c3RQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7Ci0g
ICAgICAgIGZsb2F0IGJpYXM7Ci0gICAgICAgIFZlY3RvcjxmbG9hdD4ga2VybmVsTWF0cml4Owot
ICAgIH07Ci0KICAgICBGRUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUs
IGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQs
IEVkZ2VNb2RlVHlwZSwgY29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBw
cmVzZXJ2ZUFscGhhLCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCiAgICAg
dm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVycmlkZSB7
IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7
IH0KQEAgLTgyLDIxICs3Miw2IEBAIHByaXZhdGU6CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4
dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBl
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHRlbXBsYXRlPGJvb2wgcHJlc2VydmVBbHBoYVZhbHVl
cz4KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmFzdFNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5n
RGF0YSYsIGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVu
ZCk7Ci0KLSAgICBBTFdBWVNfSU5MSU5FIGludCBnZXRQaXhlbFZhbHVlKFBhaW50aW5nRGF0YSYs
IGludCB4LCBpbnQgeSk7Ci0KLSAgICB0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+
Ci0gICAgdm9pZCBmYXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiwgaW50IHgxLCBpbnQg
eTEsIGludCB4MiwgaW50IHkyKTsKLQotICAgIC8vIFdyYXBwZXIgZnVuY3Rpb25zCi0gICAgQUxX
QVlTX0lOTElORSB2b2lkIHNldEludGVyaW9yUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCBjbGlw
UmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCk7Ci0gICAgQUxXQVlT
X0lOTElORSB2b2lkIHNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCB4MSwgaW50IHkx
LCBpbnQgeDIsIGludCB5Mik7Ci0KLSAgICAvLyBQYXJhbGxlbGl6YXRpb24gcGFydHMKLSAgICBz
dGF0aWMgY29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAoMTAwICogMTAwKTsgLy8g
RW1waXJpY2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMKLQogICAgIEludFNpemUgbV9r
ZXJuZWxTaXplOwogICAgIGZsb2F0IG1fZGl2aXNvcjsKICAgICBmbG9hdCBtX2JpYXM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVz
ZUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaWZmdXNlTGlnaHRpbmcuY3BwCmluZGV4IGJkNWI2MTU3ZjhkOGM1NzBmYTUzOGYyNGY4NmM5
NGFhOWEwZTc3NTMuLjc2MGY4MzViMWI1MTIzZGQ0MmMyNmYxN2Y3Y2RjMWQzMzNiMjRjZDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZm
dXNlTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwCkBAIC0zNCw3ICszNCw3IEBAIFJlZjxGRURpZmZ1
c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYgbGlnaHRp
bmdDb2xvciwgZmxvCiB9CiAKIEZFRGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyhj
b25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZm
dXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdodGluZyhE
aWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0
YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUo
bGlnaHRTb3VyY2UpLCBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQorICAg
IDogRkVMaWdodGluZyhGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLCBsaWdo
dGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwgMCwgMCwga2VybmVsVW5p
dExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkKIHsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcAppbmRleCBlN2MxYTIyOTliNGU1MDdjNGY2OGI4
Njg4YThkMDg1NzdjMDU1NmIwLi5kZmM3NjBlMjBmNDk5NDYwNWY5NDQ5MTJlZmRlM2FjMDgxNTA0
YmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2lu
Y2x1ZGUgIkZFRGlzcGxhY2VtZW50TWFwLmgiCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNs
dWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CkBAIC04NCwzMCArODUsNDggQEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3Jt
UmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBjb25zdCBpbnQgaW4KICAgICAgICAg
aW4tPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKIH0K
IAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0T2ZQaXhlbCh1bnNpZ25lZCB4LCB1
bnNpZ25lZCB5LCB1bnNpZ25lZCByb3dCeXRlcykKKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBG
RUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBm
aWxlcy4KK2NsYXNzIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZp
bHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRURpc3BsYWNlbWVudE1hcD4geworICAgIHVzaW5n
IEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVEaXNwbGFjZW1lbnRNYXA+Owor
CitwdWJsaWM6CisgICAgRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXIoRkVEaXNwbGFj
ZW1lbnRNYXAmKTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0
YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQgeCwgdW5zaWdu
ZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMpCisgICAgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBi
eXRlc1BlclBpeGVsID0gNDsKKyAgICAgICAgcmV0dXJuIHggKiBieXRlc1BlclBpeGVsICsgeSAq
IHJvd0J5dGVzOworICAgIH0KKworICAgIGludCB4Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV9lZmZlY3QueENoYW5uZWxTZWxlY3RvcigpIC0gMTsgfQorICAgIGludCB5Q2hhbm5lbElu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV9lZmZlY3QueUNoYW5uZWxTZWxlY3RvcigpIC0gMTsgfQor
fTsKKworRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OkZFRGlzcGxhY2VtZW50TWFw
U29mdHdhcmVBcHBsaWVyKEZFRGlzcGxhY2VtZW50TWFwJiBlZmZlY3QpCisgICAgOiBCYXNlKGVm
ZmVjdCkKIHsKLSAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclBpeGVsID0gNDsKLSAgICByZXR1
cm4geCAqIGJ5dGVzUGVyUGl4ZWwgKyB5ICogcm93Qnl0ZXM7CisgICAgQVNTRVJUKG1fZWZmZWN0
LnhDaGFubmVsU2VsZWN0b3IoKSAhPSBDSEFOTkVMX1VOS05PV04pOworICAgIEFTU0VSVChtX2Vm
ZmVjdC55Q2hhbm5lbFNlbGVjdG9yKCkgIT0gQ0hBTk5FTF9VTktOT1dOKTsKIH0KIAotYm9vbCBG
RURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmls
dGVyKQorYm9vbCBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQog
ewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZl
Y3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotCi0gICAgQVNTRVJUKG1feENoYW5uZWxTZWxlY3Rv
ciAhPSBDSEFOTkVMX1VOS05PV04pOwotICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0b3IgIT0g
Q0hBTk5FTF9VTktOT1dOKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBd
LmdldCgpOworICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3RzWzFdLmdldCgpOwog
Ci0gICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgYXV0byBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVy
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJy
YXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKLSAgICBJbnRSZWN0IGVmZmVj
dEFEcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7CisgICAgYXV0byBlZmZlY3RBRHJhd2luZ1JlY3QgPSBtX2VmZmVj
dC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOwogICAgIGF1dG8gaW5wdXRQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3Vs
dChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlZmZlY3RBRHJhd2luZ1Jl
Y3QpOwogCi0gICAgSW50UmVjdCBlZmZlY3RCRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25P
ZklucHV0UGl4ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRvIGVm
ZmVjdEJEcmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgIC8vIFRoZSBjYWxjdWxhdGlvbnMg
dXNpbmcgdGhlIHBpeGVsIHZhbHVlcyBmcm9tIOKAmGluMuKAmSBhcmUgcGVyZm9ybWVkIHVzaW5n
IG5vbi1wcmVtdWx0aXBsaWVkIGNvbG9yIHZhbHVlcy4KICAgICBhdXRvIGRpc3BsYWNlbWVudFBp
eGVsQnVmZmVyID0gaW4yLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIGVmZmVjdEJEcmF3aW5nUmVjdCk7CiAgICAgCkBAIC0xMTgs
OSArMTM3LDkgQEAgYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIGF1dG8mIGRpc3BsYWNlbWVudEltYWdlID0gZGlz
cGxhY2VtZW50UGl4ZWxCdWZmZXItPmRhdGEoKTsKICAgICBBU1NFUlQoaW5wdXRJbWFnZS5sZW5n
dGgoKSA9PSBkaXNwbGFjZW1lbnRJbWFnZS5sZW5ndGgoKSk7CiAKLSAgICBJbnRTaXplIHBhaW50
U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOworICAgIEludFNpemUgcGFpbnRTaXpl
ID0gbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7CiAKLSAgICBGbG9hdFNpemUg
c2NhbGUgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fc2NhbGUsIG1fc2NhbGUgfSk7
CisgICAgRmxvYXRTaXplIHNjYWxlID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2Vm
ZmVjdC5zY2FsZSgpLCBtX2VmZmVjdC5zY2FsZSgpIH0pOwogICAgIGZsb2F0IHNjYWxlRm9yQ29s
b3JYID0gc2NhbGUud2lkdGgoKSAvIDI1NS4wOwogICAgIGZsb2F0IHNjYWxlRm9yQ29sb3JZID0g
c2NhbGUuaGVpZ2h0KCkgLyAyNTUuMDsKICAgICBmbG9hdCBzY2FsZWRPZmZzZXRYID0gMC41IC0g
c2NhbGUud2lkdGgoKSAqIDAuNTsKQEAgLTE1Myw2ICsxNzIsMTEgQEAgYm9vbCBGRURpc3BsYWNl
bWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAg
IHJldHVybiB0cnVlOwogfQogCitib29sIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZFRGlzcGxhY2Vt
ZW50TWFwU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygp
KTsKK30KKwogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IENoYW5uZWxTZWxlY3RvclR5cGUmIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlz
cGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXggOTkwMTQyNjFjYjgyZTlkYTIwYjllMDNmOGRlZGMy
MjU2ODNjMTJlYS4uN2E2Mzc4YjA0Y2I0YWQ4ODIxMWEwYTRhY2E4OGFmZDg4MzI3Y2VjMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3Bs
YWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAtNTAsMTUgKzUwLDEyIEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgRkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNl
bGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0b3IsIGZsb2F0KTsKIAot
ICAgIGludCB4Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV94Q2hhbm5lbFNlbGVjdG9y
IC0gMTsgfQotICAgIGludCB5Q2hhbm5lbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV95Q2hhbm5l
bFNlbGVjdG9yIC0gMTsgfQotCi0gICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChj
b25zdCBGaWx0ZXImKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KKyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAogICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYgcmVzdWx0Q29sb3JTcGFjZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgdHJhbnNm
b3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqLCBjb25zdCBpbnQpIG92ZXJyaWRlOwog
Ci0gICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBvdmVy
cmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVj
dCgpKSk7IH0KIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihX
VEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJv
cFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5jcHAKaW5kZXggYjYyYWI2ODRjZDkxZWZjNzdmMThhMTY0ZTk1YTQ1OTRmYzc2
ODU4ZS4uYWFiMjQ4ZDE0ODAyZmI2NzU3YWUzYTU5YTQzZTQ2MjkzYWZjMTg1NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmNwcApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlv
bi5oIgogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIK
QEAgLTY5LDE4ICs3MCwyOCBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3Qo
ZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwogfQogCi1ib29sIEZFRHJvcFNo
YWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorLy8gRklY
TUU6IE1vdmUgdGhlIGNsYXNzIEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0
ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBw
bGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVEcm9wU2hhZG93PiB7
CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRURyb3BTaGFk
b3c+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHko
Y29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92
ZXJyaWRlOworfTsKKworYm9vbCBGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNv
bnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0
cykKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKIAotICAgIGF1dG8gcmVzdWx0SW1h
Z2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVj
dC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclNjYWxlKHsgbV9zdGRYLCBtX3N0ZFkgfSk7Ci0gICAgRmxvYXRTaXplIG9mZnNl
dCA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9keCwgbV9keSB9KTsKKyAgICBGbG9h
dFNpemUgYmx1clJhZGl1cyA9IDIgKiBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZm
ZWN0LnN0ZERldmlhdGlvblgoKSwgbV9lZmZlY3Quc3RkRGV2aWF0aW9uWSgpIH0pOworICAgIEZs
b2F0U2l6ZSBvZmZzZXQgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LmR4
KCksIG1fZWZmZWN0LmR5KCkgfSk7CiAKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIEZs
b2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25X
aXRoT2Zmc2V0KGRyYXdpbmdSZWdpb24pOwogICAgIGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0Lm1v
dmUob2Zmc2V0KTsKIApAQCAtODksMTMgKzEwMCwxMyBAQCBib29sIEZFRHJvcFNoYWRvdzo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBHcmFwaGljc0NvbnRleHQmIHJlc3VsdENvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOwotICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEobV9zaGFkb3dPcGFjaXR5
KTsKKyAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKG1fZWZmZWN0LnNoYWRvd09wYWNpdHkoKSk7
CiAgICAgcmVzdWx0Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKnNvdXJjZUltYWdlLCBkcmF3aW5n
UmVnaW9uV2l0aE9mZnNldCk7CiAgICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYSgxKTsKIAotICAg
IFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29s
b3IpOworICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1f
ZWZmZWN0LnNoYWRvd0NvbG9yKCkpOwogCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4
LCByZXN1bHRDb2xvclNwYWNlKCkgfTsKKyAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgs
IG1fZWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSB9OwogICAgIEludFJlY3Qgc2hhZG93QXJlYShJ
bnRQb2ludCgpLCByZXN1bHRJbWFnZS0+dHJ1bmNhdGVkTG9naWNhbFNpemUoKSk7CiAgICAgYXV0
byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3JtYXQsIHNoYWRv
d0FyZWEpOwogICAgIGlmICghcGl4ZWxCdWZmZXIpCkBAIC0xMDcsMTQgKzExOCwxOCBAQCBib29s
IEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVy
KQogICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIHNoYWRvd0Fy
ZWEpOwogCiAgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRl
T3BlcmF0b3I6OlNvdXJjZUluKTsKLSAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xv
cik7CisgICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBt
X2VmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fZWZmZWN0LnNoYWRvd0NvbG9y
KCkpOwogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9w
ZXJhdG9yOjpEZXN0aW5hdGlvbk92ZXIpOwogCiAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5k
cmF3SW1hZ2VCdWZmZXIoKnNvdXJjZUltYWdlLCBkcmF3aW5nUmVnaW9uKTsKLQogICAgIHJldHVy
biB0cnVlOwogfQogCitib29sIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRURyb3BTaGFkb3dTb2Z0d2FyZUFw
cGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorICAgIAogSW50
T3V0c2V0cyBGRURyb3BTaGFkb3c6Om91dHNldHMoKSBjb25zdAogewogICAgIEludFNpemUgb3V0
c2V0U2l6ZSA9IEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKHsgbV9zdGRYLCBt
X3N0ZFkgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRmxvb2QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUZsb29kLmNwcAppbmRleCAyODA5YjRiMTc1ZDMyNTVkMjEwNzQ5OTE2ZWIzZWQwNTAx
MzU2NWE1Li45ODk4YzczNzZmNjVmMmUxMTc1YzFhNzgxYzY0ZWVmODMyNDZhZWIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5j
cHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJGRUZsb29kLmgiCiAKICNpbmNsdWRlICJD
b2xvclNlcmlhbGl6YXRpb24uaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC01OCwxOCArNTksMzMgQEAgYm9vbCBG
RUZsb29kOjpzZXRGbG9vZE9wYWNpdHkoZmxvYXQgZmxvb2RPcGFjaXR5KQogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIEZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImKQorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFRHJvcFNoYWRvd1NvZnR3YXJlQXBwbGll
ciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFRmxvb2RTb2Z0
d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRmxvb2Q+
IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRmxvb2Q+
OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29u
c3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJy
aWRlOworfTsKKworYm9vbCBGRUZsb29kU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0
ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImKQogewotICAgIGF1dG8gcmVzdWx0SW1hZ2Ug
PSBpbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5p
bWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGF1dG8gY29sb3IgPSBmbG9vZENvbG9yKCkuY29sb3JXaXRoQWxwaGFN
dWx0aXBsaWVkQnkoZmxvb2RPcGFjaXR5KCkpOwotICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCku
ZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXpl
KCkpLCBjb2xvcik7CisgICAgYXV0byBjb2xvciA9IG1fZWZmZWN0LmZsb29kQ29sb3IoKS5jb2xv
cldpdGhBbHBoYU11bHRpcGxpZWRCeShtX2VmZmVjdC5mbG9vZE9wYWNpdHkoKSk7CisgICAgcmVz
dWx0SW1hZ2UtPmNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2Vm
ZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIGNvbG9yKTsKIAogICAgIHJldHVybiB0
cnVlOwogfQogCitib29sIEZFRmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVGbG9vZFNvZnR3YXJlQXBwbGllcigqdGhpcyku
YXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIFRleHRTdHJlYW0mIEZFRmxvb2Q6
OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlw
ZSByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUZsb29k
IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggNGM1ZmFiMDFhMzM5NTdlOGZlOTIxNTZkNTA3
OTE2N2Q0YmU5YzBmOS4uZGIzNTkwOGY0ZjRmODlhNDU4ZDc5YmMzMDFmMTI4YWM1NTkyOTEwNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdh
dXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTI4LDMwICsyOCwxNTAgQEAKIAogI2luY2x1ZGUg
IkZFR2F1c3NpYW5CbHVyTkVPTi5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZp
bHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCiAjaW5jbHVk
ZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTQ0lubGluZXMuaD4KKyNlbHNlCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlw
ZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRB
cnJheS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1BhcmFs
bGVsSm9icy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPEZFR2F1c3Np
YW5CbHVyPiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2Rl
VHlwZSBlZGdlTW9kZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUdhdXNzaWFuQmx1
cih4LCB5LCBlZGdlTW9kZSkpOworfQorCitGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIo
ZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQorICAgIDogRmlsdGVyRWZm
ZWN0KEZpbHRlckVmZmVjdDo6VHlwZTo6RkVHYXVzc2lhbkJsdXIpCisgICAgLCBtX3N0ZFgoeCkK
KyAgICAsIG1fc3RkWSh5KQorICAgICwgbV9lZGdlTW9kZShlZGdlTW9kZSkKK3sKK30KKwordm9p
ZCBGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWChmbG9hdCB4KQoreworICAgIG1fc3Rk
WCA9IHg7Cit9CisKK3ZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblkoZmxvYXQg
eSkKK3sKKyAgICBtX3N0ZFkgPSB5OworfQorCit2b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRFZGdl
TW9kZShFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCit7CisgICAgbV9lZGdlTW9kZSA9IGVkZ2VNb2Rl
OworfQogCiBzdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuS2VybmVsRmFjdG9yKCkKIHsKICAg
ICByZXR1cm4gMyAvIDQuZiAqIHNxcnRmKDIgKiBwaUZsb2F0KTsKIH0KIAotc3RhdGljIGNvbnN0
IGludCBnTWF4S2VybmVsU2l6ZSA9IDUwMDsKK3N0YXRpYyBpbnQgY2xhbXBlZFRvS2VybmVsU2l6
ZShmbG9hdCB2YWx1ZSkKK3sKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heEtlcm5l
bFNpemUgPSA1MDA7CisKKyAgICAvLyBMaW1pdCB0aGUga2VybmVsIHNpemUgdG8gNTAwLiBBIGJp
Z2dlciByYWRpdXMgd29uJ3QgbWFrZSBhIGJpZyBkaWZmZXJlbmNlIGZvciB0aGUgcmVzdWx0IGlt
YWdlIGJ1dAorICAgIC8vIGluZmxhdGVzIHRoZSBhYnNvbHV0ZSBwYWludCByZWN0IHRvbyBtdWNo
LiBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBGaXJlZm94JyBiZWhhdmlvci4KKyAgICB1bnNpZ25l
ZCBzaXplID0gc3RkOjptYXg8dW5zaWduZWQ+KDIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmbG9v
cmYodmFsdWUgKiBnYXVzc2lhbktlcm5lbEZhY3RvcigpICsgMC41ZikpKTsKKyAgICByZXR1cm4g
Y2xhbXBUbzxpbnQ+KHN0ZDo6bWluKHNpemUsIG1heEtlcm5lbFNpemUpKTsKK30KKyAgICAKK0lu
dFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNp
emUgc3RkRGV2aWF0aW9uKQoreworICAgIEFTU0VSVChzdGREZXZpYXRpb24ud2lkdGgoKSA+PSAw
ICYmIHN0ZERldmlhdGlvbi5oZWlnaHQoKSA+PSAwKTsKKyAgICBJbnRTaXplIGtlcm5lbFNpemU7
CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBpZiAoc3RkRGV2aWF0aW9uLndpZHRoKCkpCisg
ICAgICAgIGtlcm5lbFNpemUuc2V0V2lkdGgoY2xhbXBlZFRvS2VybmVsU2l6ZShzdGREZXZpYXRp
b24ud2lkdGgoKSkpOworCisgICAgaWYgKHN0ZERldmlhdGlvbi5oZWlnaHQoKSkKKyAgICAgICAg
a2VybmVsU2l6ZS5zZXRIZWlnaHQoY2xhbXBlZFRvS2VybmVsU2l6ZShzdGREZXZpYXRpb24uaGVp
Z2h0KCkpKTsKKworICAgIHJldHVybiBrZXJuZWxTaXplOworfQorCitJbnRTaXplIEZFR2F1c3Np
YW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBGbG9hdFNp
emUgc3RkRGV2aWF0aW9uKQoreworICAgIHJldHVybiBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNp
emUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoc3RkRGV2aWF0aW9uKSk7Cit9CisKK0ludFNp
emUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZU91dHNldFNpemUoRmxvYXRTaXplIHN0ZERldmlh
dGlvbikKK3sKKyAgICBhdXRvIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNp
emUoc3RkRGV2aWF0aW9uKTsKKworICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUg
YW5kIG11bHRpcGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVl
IHRpbWVzLgorICAgIHJldHVybiB7IDMgKiBrZXJuZWxTaXplLndpZHRoKCkgLyAyLCAzICoga2Vy
bmVsU2l6ZS5oZWlnaHQoKSAvIDIgfTsKK30KKwordm9pZCBGRUdhdXNzaWFuQmx1cjo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgSW50U2l6
ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0
ZFkgfSk7CisKKyAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgw
KS0+YWJzb2x1dGVQYWludFJlY3QoKTsKKyAgICAvLyBFZGdlIG1vZGVzIG90aGVyIHRoYW4gJ25v
bmUnIGRvIG5vdCBpbmZsYXRlIHRoZSBhZmZlY3RlZCBwYWludCByZWN0LgorICAgIGlmIChtX2Vk
Z2VNb2RlICE9IEVER0VNT0RFX05PTkUpIHsKKyAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3Qo
ZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJuZWwgc2l6ZSBhbmQgbXVsdGlwbHkg
aXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJsdXIgdGhyZWUgdGltZXMuCisgICAg
YWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVgoMyAqIGtlcm5lbFNpemUud2lkdGgoKSAqIDAuNWYp
OworICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVZKDMgKiBrZXJuZWxTaXplLmhlaWdodCgp
ICogMC41Zik7CisKKyAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQorICAgICAgICBhYnNvbHV0ZVBh
aW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKKyAgICBlbHNlCisgICAgICAgIGFi
c29sdXRlUGFpbnRSZWN0LnVuaXRlKG1heEVmZmVjdFJlY3QoKSk7CisKKyAgICBzZXRBYnNvbHV0
ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Cit9CisKKy8v
IEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllciB0byBz
ZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFR2F1c3NpYW5CbHVyU29m
dHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUdhdXNz
aWFuQmx1cj4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8
RkVHYXVzc2lhbkJsdXI+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAg
IGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1
dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0cnVjdCBBcHBseVBhcmFtZXRl
cnMgeworICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGlvUGl4ZWxBcnJheTsKKyAg
ICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiB0bXBQaXhlbEFycmF5OworICAgICAgICBp
bnQgd2lkdGg7CisgICAgICAgIGludCBoZWlnaHQ7CisgICAgICAgIHVuc2lnbmVkIGtlcm5lbFNp
emVYOworICAgICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWTsKKyAgICAgICAgYm9vbCBpc0FscGhh
SW1hZ2U7CisgICAgICAgIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZTsKKyAgICB9OworCisgICAgc3Rh
dGljIGlubGluZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25l
ZCYgcmFkaXVzLCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0YVJpZ2h0KTsKIAotaW5saW5lIHZv
aWQga2VybmVsUG9zaXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGlu
dCYgZGVsdGFMZWZ0LCBpbnQmIGRlbHRhUmlnaHQpCisgICAgc3RhdGljIGlubGluZSB2b2lkIGJv
eEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVp
bnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQs
IGludCYgZHhSaWdodCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RX
aWR0aCwgaW50JiBlZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSk7CisgICAg
c3RhdGljIGlubGluZSB2b2lkIGJveEJsdXIoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1Bp
eGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwg
aW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5lLCBpbnQg
ZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVU
eXBlKTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyQWNjZWxlcmF0ZWQoVWludDhD
bGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5z
aWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0
SGVpZ2h0KTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1clVuYWNjZWxlcmF0ZWQoVWlu
dDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwg
dW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBpbnQgc3RyaWRlLCBJ
bnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUltYWdlLCBFZGdlTW9kZVR5cGUpOworCisg
ICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBp
b0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5l
bFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlz
QWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1
cldvcmtlcihBcHBseVBhcmFtZXRlcnMqKTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBs
eVBsYXRmb3JtKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkm
IHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXpl
WSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsK
K307CisKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjprZXJuZWxQ
b3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxl
ZnQsIGludCYgZGVsdGFSaWdodCkKIHsKICAgICAvLyBDaGVjayBodHRwOi8vd3d3LnczLm9yZy9U
Ui9TVkcvZmlsdGVycy5odG1sI2ZlR2F1c3NpYW5CbHVyRWxlbWVudCBmb3IgZGV0YWlscy4KICAg
ICBzd2l0Y2ggKGJsdXJJdGVyYXRpb24pIHsKQEAgLTc5LDM3ICsxOTksOCBAQCBpbmxpbmUgdm9p
ZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlvbiwgdW5zaWduZWQmIHJhZGl1cywgaW50
JiBkZWx0YUxlZnQsCiAgICAgfQogfQogCi1SZWY8RkVHYXVzc2lhbkJsdXI+IEZFR2F1c3NpYW5C
bHVyOjpjcmVhdGUoZmxvYXQgeCwgZmxvYXQgeSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFR2F1c3NpYW5CbHVyKHgsIHksIGVkZ2VNb2RlKSk7
Ci19Ci0KLUZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cihmbG9hdCB4LCBmbG9hdCB5LCBF
ZGdlTW9kZVR5cGUgZWRnZU1vZGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoRmlsdGVyRWZmZWN0OjpU
eXBlOjpGRUdhdXNzaWFuQmx1cikKLSAgICAsIG1fc3RkWCh4KQotICAgICwgbV9zdGRZKHkpCi0g
ICAgLCBtX2VkZ2VNb2RlKGVkZ2VNb2RlKQotewotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpz
ZXRTdGREZXZpYXRpb25YKGZsb2F0IHgpCi17Ci0gICAgbV9zdGRYID0geDsKLX0KLQotdm9pZCBG
RUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWShmbG9hdCB5KQotewotICAgIG1fc3RkWSA9
IHk7Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldEVkZ2VNb2RlKEVkZ2VNb2RlVHlwZSBl
ZGdlTW9kZSkKLXsKLSAgICBtX2VkZ2VNb2RlID0gZWRnZU1vZGU7Ci19Ci0KIC8vIFRoaXMgZnVu
Y3Rpb24gb25seSBvcGVyYXRlcyBvbiBBbHBoYSBjaGFubmVsLgotaW5saW5lIHZvaWQgYm94Qmx1
ckFscGhhT25seShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhD
bGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksCi0gICAgdW5zaWduZWQgZHgsIGludCYgZHhMZWZ0
LCBpbnQmIGR4UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZmZWN0
V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpCitpbmxp
bmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckFscGhhT25seShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkm
IGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4LCBpbnQmIGR4TGVmdCwgaW50JiBkeFJpZ2h0LCBp
bnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVmZmVjdFdpZHRoLCBpbnQmIGVmZmVj
dEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxTaXplKQogewogICAgIGNvbnN0IHVpbnQ4X3Qq
IHNyY0RhdGEgPSBzcmNQaXhlbEFycmF5LmRhdGEoKTsKICAgICB1aW50OF90KiBkc3REYXRhID0g
ZHN0UGl4ZWxBcnJheS5kYXRhKCk7CkBAIC0xNDksOCArMjQwLDcgQEAgaW5saW5lIHZvaWQgYm94
Qmx1ckFscGhhT25seShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgVWlu
dDhDbGFtcGUKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIGJveEJsdXIoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5
LAotICAgIHVuc2lnbmVkIGR4LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwgaW50IHN0cmlkZSwg
aW50IHN0cmlkZUxpbmUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCwgYm9vbCBh
bHBoYUltYWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFu
Qmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3Jj
UGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIGR4
LCBpbnQgZHhMZWZ0LCBpbnQgZHhSaWdodCwgaW50IHN0cmlkZSwgaW50IHN0cmlkZUxpbmUsIGlu
dCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCwgYm9vbCBhbHBoYUltYWdlLCBFZGdlTW9k
ZVR5cGUgZWRnZU1vZGUpCiB7CiAgICAgY29uc3QgaW50IG1heEtlcm5lbFNpemUgPSBzdGQ6Om1p
bihkeFJpZ2h0LCBlZmZlY3RXaWR0aCk7CiAgICAgaWYgKGFscGhhSW1hZ2UpCkBAIC0yODAsNyAr
MzcwLDcgQEAgaW5saW5lIHZvaWQgYm94Qmx1cihjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc3Jj
UGl4ZWxBcnJheSwgVWludDhDbGFtcGVkQXJyYXkmIGQKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRF
KQotaW5saW5lIHZvaWQgYWNjZWxlcmF0ZUJveEJsdXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVm
ZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZSwg
aW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0KQoraW5saW5lIHZv
aWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBY2NlbGVyYXRlZChVaW50
OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1
bnNpZ25lZCBrZXJuZWxTaXplLCBpbnQgc3RyaWRlLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZl
Y3RIZWlnaHQpCiB7CiAgICAgaWYgKCFpb0J1ZmZlci5kYXRhKCkgfHwgIXRlbXBCdWZmZXIuZGF0
YSgpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzI2LDcgKzQxNiw3IEBA
IGlubGluZSB2b2lkIGFjY2VsZXJhdGVCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZl
ciwgVWludDhDbGFtcGVkQXJyYXkmIHRlCiB9CiAjZW5kaWYKIAotaW5saW5lIHZvaWQgc3RhbmRh
cmRCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkm
IHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwg
aW50IHN0cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1v
ZGVUeXBlIGVkZ2VNb2RlKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxp
ZXI6OmJveEJsdXJVbmFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWlu
dDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25l
ZCBrZXJuZWxTaXplWSwgaW50IHN0cmlkZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxw
aGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQogewogICAgIGludCBkeExlZnQgPSAwOwog
ICAgIGludCBkeFJpZ2h0ID0gMDsKQEAgLTM3MSwzNSArNDYxLDM5IEBAIGlubGluZSB2b2lkIHN0
YW5kYXJkQm94Qmx1cihVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFy
cmF5JiB0ZW1wCiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZv
cm1BcHBseUdlbmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRB
cnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5l
bFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNv
ZnR3YXJlQXBwbGllcjo6Ym94Qmx1ckdlbmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVy
LCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgs
IHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUsIGJvb2wgaXNBbHBoYUlt
YWdlLCBFZGdlTW9kZVR5cGUgZWRnZU1vZGUpCiB7CiAgICAgaW50IHN0cmlkZSA9IDQgKiBwYWlu
dFNpemUud2lkdGgoKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIGlmIChrZXJuZWxTaXpl
WCA9PSBrZXJuZWxTaXplWSAmJiAobV9lZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FIHx8IG1fZWRn
ZU1vZGUgPT0gRURHRU1PREVfRFVQTElDQVRFKSkgewotICAgICAgICBhY2NlbGVyYXRlQm94Qmx1
cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXpl
LndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7CisgICAgaWYgKGtlcm5lbFNpemVYID09IGtl
cm5lbFNpemVZICYmIChlZGdlTW9kZSA9PSBFREdFTU9ERV9OT05FIHx8IGVkZ2VNb2RlID09IEVE
R0VNT0RFX0RVUExJQ0FURSkpIHsKKyAgICAgICAgYm94Qmx1ckFjY2VsZXJhdGVkKGlvQnVmZmVy
LCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwgc3RyaWRlLCBwYWludFNpemUud2lkdGgoKSwg
cGFpbnRTaXplLmhlaWdodCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCi0g
ICAgc3RhbmRhcmRCb3hCbHVyKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwg
a2VybmVsU2l6ZVksIHN0cmlkZSwgcGFpbnRTaXplLCBpc0FscGhhSW1hZ2UoKSwgbV9lZGdlTW9k
ZSk7CisgICAgYm94Qmx1clVuYWNjZWxlcmF0ZWQoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtl
cm5lbFNpemVYLCBrZXJuZWxTaXplWSwgc3RyaWRlLCBwYWludFNpemUsIGlzQWxwaGFJbWFnZSwg
ZWRnZU1vZGUpOwogfQogCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2Vy
KFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQorI2lmICFVU0UoQUNDRUxFUkFU
RSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyV29y
a2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKIHsKICAgICBJbnRTaXplIHBhaW50U2l6
ZShwYXJhbWV0ZXJzLT53aWR0aCwgcGFyYW1ldGVycy0+aGVpZ2h0KTsKLSAgICBwYXJhbWV0ZXJz
LT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKCpwYXJhbWV0ZXJzLT5pb1BpeGVsQXJyYXks
ICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWCwgcGFy
YW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7CisgICAgYm94Qmx1ckdlbmVyaWMoKnBh
cmFtZXRlcnMtPmlvUGl4ZWxBcnJheSwgKnBhcmFtZXRlcnMtPnRtcFBpeGVsQXJyYXksIHBhcmFt
ZXRlcnMtPmtlcm5lbFNpemVYLCBwYXJhbWV0ZXJzLT5rZXJuZWxTaXplWSwgcGFpbnRTaXplLCBw
YXJhbWV0ZXJzLT5pc0FscGhhSW1hZ2UsIHBhcmFtZXRlcnMtPmVkZ2VNb2RlKTsKIH0KKyNlbmRp
ZgogCi1pbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseShVaW50OENsYW1w
ZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNp
Z25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6
ZSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRm
b3JtKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBp
eGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50
U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2Rl
KQogewogI2lmICFVU0UoQUNDRUxFUkFURSkKICAgICBpbnQgc2NhbmxpbmUgPSA0ICogcGFpbnRT
aXplLndpZHRoKCk7CiAgICAgaW50IGV4dHJhSGVpZ2h0ID0gMyAqIGtlcm5lbFNpemVZICogMC41
ZjsKLSAgICBpbnQgb3B0aW1hbFRocmVhZE51bWJlciA9IChwYWludFNpemUud2lkdGgoKSAqIHBh
aW50U2l6ZS5oZWlnaHQoKSkgLyAoc19taW5pbWFsUmVjdERpbWVuc2lvbiArIGV4dHJhSGVpZ2h0
ICogcGFpbnRTaXplLndpZHRoKCkpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWluaW1h
bFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBw
YXJhbGxlbCBqb2JzCisgICAgaW50IG9wdGltYWxUaHJlYWROdW1iZXIgPSAocGFpbnRTaXplLndp
ZHRoKCkgKiBwYWludFNpemUuaGVpZ2h0KCkpIC8gKG1pbmltYWxSZWN0RGltZW5zaW9uICsgZXh0
cmFIZWlnaHQgKiBwYWludFNpemUud2lkdGgoKSk7CiAKICAgICBpZiAob3B0aW1hbFRocmVhZE51
bWJlciA+IDEpIHsKLSAgICAgICAgUGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJz
PiBwYXJhbGxlbEpvYnMoJnBsYXRmb3JtQXBwbHlXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIp
OworICAgICAgICBQYXJhbGxlbEpvYnM8QXBwbHlQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJmJv
eEJsdXJXb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwogCiAgICAgICAgIGludCBqb2JzID0g
cGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwogICAgICAgICBpZiAoam9icyA+IDEpIHsKQEAg
LTQxMCw4ICs1MDQsNyBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBs
eShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbQogCiAgICAgICAgICAgICBp
bnQgY3VycmVudFkgPSAwOwogICAgICAgICAgICAgZm9yIChpbnQgam9iID0gMDsgam9iIDwgam9i
czsgam9iKyspIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFy
YW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwotICAgICAgICAgICAgICAgIHBhcmFt
cy5maWx0ZXIgPSB0aGlzOworICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW1z
ID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwogCiAgICAgICAgICAgICAgICAgaW50IHN0
YXJ0WSA9ICFqb2IgPyAwIDogY3VycmVudFkgLSBleHRyYUhlaWdodDsKICAgICAgICAgICAgICAg
ICBjdXJyZW50WSArPSBqb2IgPCBqb2JzV2l0aEV4dHJhID8gYmxvY2tIZWlnaHQgKyAxIDogYmxv
Y2tIZWlnaHQ7CkBAIC00MzEsNiArNTI0LDggQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6
OnBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW0KICAg
ICAgICAgICAgICAgICBwYXJhbXMuaGVpZ2h0ID0gZW5kWSAtIHN0YXJ0WTsKICAgICAgICAgICAg
ICAgICBwYXJhbXMua2VybmVsU2l6ZVggPSBrZXJuZWxTaXplWDsKICAgICAgICAgICAgICAgICBw
YXJhbXMua2VybmVsU2l6ZVkgPSBrZXJuZWxTaXplWTsKKyAgICAgICAgICAgICAgICBwYXJhbXMu
aXNBbHBoYUltYWdlID0gaXNBbHBoYUltYWdlOworICAgICAgICAgICAgICAgIHBhcmFtcy5lZGdl
TW9kZSA9IGVkZ2VNb2RlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBwYXJhbGxlbEpv
YnMuZXhlY3V0ZSgpOwpAQCAtNDM4LDcgKzUzMyw3IEBAIGlubGluZSB2b2lkIEZFR2F1c3NpYW5C
bHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFt
CiAgICAgICAgICAgICAvLyBDb3B5IHRvZ2V0aGVyIHRoZSBwYXJ0cyBvZiB0aGUgaW1hZ2UuCiAg
ICAgICAgICAgICBjdXJyZW50WSA9IDA7CiAgICAgICAgICAgICBmb3IgKGludCBqb2IgPSAxOyBq
b2IgPCBqb2JzOyBqb2IrKykgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0
ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7CisgICAgICAgICAgICAg
ICAgQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7
CiAgICAgICAgICAgICAgICAgaW50IHNvdXJjZU9mZnNldDsKICAgICAgICAgICAgICAgICBpbnQg
ZGVzdGluYXRpb25PZmZzZXQ7CiAgICAgICAgICAgICAgICAgaW50IHNpemU7CkBAIC00NTgsOTQg
KzU1Myw0MSBAQCBpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseShVaW50
OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbQogI2VuZGlmCiAKICAgICAvLyBUaGUg
c2VsZWN0aW9uIGhlcmUgZXZlbnR1YWxseSBzaG91bGQgaGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNv
bWUgcGxhdGZvcm1zLgotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKGlvQnVmZmVyLCB0bXBQaXhl
bEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7Ci19Ci0KLXN0YXRp
YyBpbnQgY2xhbXBlZFRvS2VybmVsU2l6ZShmbG9hdCB2YWx1ZSkKLXsKLSAgICAvLyBMaW1pdCB0
aGUga2VybmVsIHNpemUgdG8gNTAwLiBBIGJpZ2dlciByYWRpdXMgd29uJ3QgbWFrZSBhIGJpZyBk
aWZmZXJlbmNlIGZvciB0aGUgcmVzdWx0IGltYWdlIGJ1dAotICAgIC8vIGluZmxhdGVzIHRoZSBh
YnNvbHV0ZSBwYWludCByZWN0IHRvbyBtdWNoLiBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBGaXJl
Zm94JyBiZWhhdmlvci4KLSAgICB1bnNpZ25lZCBzaXplID0gc3RkOjptYXg8dW5zaWduZWQ+KDIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihmbG9vcmYodmFsdWUgKiBnYXVzc2lhbktlcm5lbEZhY3Rv
cigpICsgMC41ZikpKTsKLSAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHN0ZDo6bWluKHNpemUsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihnTWF4S2VybmVsU2l6ZSkpKTsKLX0KLSAgICAKLUludFNpemUg
RkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShGbG9hdFNpemUgc3Rk
RGV2aWF0aW9uKQotewotICAgIEFTU0VSVChzdGREZXZpYXRpb24ud2lkdGgoKSA+PSAwICYmIHN0
ZERldmlhdGlvbi5oZWlnaHQoKSA+PSAwKTsKLSAgICBJbnRTaXplIGtlcm5lbFNpemU7Ci0KLSAg
ICBpZiAoc3RkRGV2aWF0aW9uLndpZHRoKCkpCi0gICAgICAgIGtlcm5lbFNpemUuc2V0V2lkdGgo
Y2xhbXBlZFRvS2VybmVsU2l6ZShzdGREZXZpYXRpb24ud2lkdGgoKSkpOwotCi0gICAgaWYgKHN0
ZERldmlhdGlvbi5oZWlnaHQoKSkKLSAgICAgICAga2VybmVsU2l6ZS5zZXRIZWlnaHQoY2xhbXBl
ZFRvS2VybmVsU2l6ZShzdGREZXZpYXRpb24uaGVpZ2h0KCkpKTsKLQotICAgIHJldHVybiBrZXJu
ZWxTaXplOworICAgIGJveEJsdXJHZW5lcmljKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5LCBrZXJu
ZWxTaXplWCwga2VybmVsU2l6ZVksIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlLCBlZGdlTW9kZSk7
CiB9CiAKLUludFNpemUgRkVHYXVzc2lhbkJsdXI6OmNhbGN1bGF0ZUtlcm5lbFNpemUoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIsIEZsb2F0U2l6ZSBzdGREZXZpYXRpb24pCitib29sIEZFR2F1c3NpYW5C
bHVyU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmls
dGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAgcmV0dXJuIGNhbGN1bGF0ZVVu
c2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZShzdGREZXZpYXRpb24p
KTsKLX0KKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOwogCi1J
bnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGRE
ZXZpYXRpb24pCi17Ci0gICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRlVW5zY2FsZWRLZXJu
ZWxTaXplKHN0ZERldmlhdGlvbik7Ci0KLSAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBz
aXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0
aHJlZSB0aW1lcy4KLSAgICByZXR1cm4geyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAq
IGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAyIH07Ci19Ci0KLXZvaWQgRkVHYXVzc2lhbkJsdXI6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQotewotICAgIElu
dFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwg
bV9zdGRZIH0pOwotCi0gICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZl
Y3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7Ci0gICAgLy8gRWRnZSBtb2RlcyBvdGhlciB0aGFu
ICdub25lJyBkbyBub3QgaW5mbGF0ZSB0aGUgYWZmZWN0ZWQgcGFpbnQgcmVjdC4KLSAgICBpZiAo
bV9lZGdlTW9kZSAhPSBFREdFTU9ERV9OT05FKSB7Ci0gICAgICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRp
cGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgot
ICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAw
LjVmKTsKLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWln
aHQoKSAqIDAuNWYpOwotCi0gICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKLSAgICAgICAgYWJzb2x1
dGVQYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7Ci0gICAgZWxzZQotICAgICAg
ICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOwotCi0gICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwotfQot
Ci1ib29sIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVy
JiBmaWx0ZXIpCi17Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotCi0g
ICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBp
eGVsQnVmZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJ
bWFnZSgpKTsKKyAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgp
KTsKIAotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklu
cHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gZWZmZWN0
RHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQo
KmRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIsIGVmZmVjdERyYXdpbmdSZWN0KTsKLSAgICBpZiAoIW1f
c3RkWCAmJiAhbV9zdGRZKQorICAgIGlmICghbV9lZmZlY3Quc3RkRGV2aWF0aW9uWCgpICYmICFt
X2VmZmVjdC5zdGREZXZpYXRpb25ZKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSW50
U2l6ZSBrZXJuZWxTaXplID0gY2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBt
X3N0ZFkgfSk7CisgICAgYXV0byBrZXJuZWxTaXplID0gbV9lZmZlY3QuY2FsY3VsYXRlS2VybmVs
U2l6ZShmaWx0ZXIsIHsgbV9lZmZlY3Quc3RkRGV2aWF0aW9uWCgpLCBtX2VmZmVjdC5zdGREZXZp
YXRpb25ZKCkgfSk7CiAKLSAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpOworICAgIEludFNpemUgcGFpbnRTaXplID0gbV9lZmZlY3QuYWJzb2x1dGVQYWlu
dFJlY3QoKS5zaXplKCk7CiAgICAgYXV0byB0bXBJbWFnZURhdGEgPSBVaW50OENsYW1wZWRBcnJh
eTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChwYWludFNpemUuYXJlYSgpICogNCk7CiAgICAgaWYg
KCF0bXBJbWFnZURhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICBw
bGF0Zm9ybUFwcGx5KGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVs
U2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUpOworICAgIGFwcGx5
UGxhdGZvcm0oZGVzdGluYXRpb25QaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXpl
LndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSwgbV9lZmZlY3QuaXNBbHBo
YUltYWdlKCksIG1fZWZmZWN0LmVkZ2VNb2RlKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCiti
b29sIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBm
aWx0ZXIpCit7CisgICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyKCp0aGlz
KS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogSW50T3V0c2V0cyBGRUdhdXNz
aWFuQmx1cjo6b3V0c2V0cygpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBvdXRzZXRTaXplID0gY2Fs
Y3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3RkWCwgbV9zdGRZIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCmlu
ZGV4IGQ3NGJkYWE3MmVkMzA0ZjViODAxNzdhZDZjY2E3NzVhNWI0OTM3MTcuLjY1YWE2ZTE4ODk3
ZmE4Y2M5NzY5ZDFlNTU3ZDdkMjZmNWU1Y2EyMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKQEAgLTQ2
LDI5ICs0NiwxMyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZFR2F1c3NpYW5CbHVyKGZsb2F0
IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSk7CiAKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWlu
aW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZv
ciBwYXJhbGxlbCBqb2JzCi0KLSAgICBzdHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMgewot
ICAgICAgICBGRUdhdXNzaWFuQmx1ciogZmlsdGVyOwotICAgICAgICBSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IGlvUGl4ZWxBcnJheTsKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiB0bXBQaXhlbEFycmF5OwotICAgICAgICBpbnQgd2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQ7
Ci0gICAgICAgIHVuc2lnbmVkIGtlcm5lbFNpemVYOwotICAgICAgICB1bnNpZ25lZCBrZXJuZWxT
aXplWTsKLSAgICB9OwotCiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25z
dCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYpIG92ZXJyaWRlOwotCiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAot
ICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRl
cnMqKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVy
LCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVu
c2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpOwotICAgIHZvaWQgcGxhdGZv
cm1BcHBseUdlbmVyaWMoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRB
cnJheSYgdGVtcEJ1ZmZlciwgdW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNp
emVZLCBJbnRTaXplJiBwYWludFNpemUpOworICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgZmxvYXQgbV9zdGRYOwogICAgIGZsb2F0IG1fc3RkWTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuY3BwCmluZGV4IDNhNzhlMDhlNDQxZDEwYTJlOTM2MTcyYjIyZDcwNjI3YWUwNzc0YzAuLjFh
ZGMwZjM3M2E0NjBkZmJkMmFjYmZiOTAyMDg1M2RhY2NiNDU2M2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApA
QCAtMzAsMTYgKzMwLDE1IEBACiAKICNpbmNsdWRlICJDb2xvckNvbnZlcnNpb24uaCIKICNpbmNs
dWRlICJGRUxpZ2h0aW5nTkVPTi5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5j
bHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZFTGln
aHRpbmc6OkZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlIGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3Im
IGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50
LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJj
ZT4mJiBsaWdodFNvdXJjZSwgVHlwZSB0eXBlKQorRkVMaWdodGluZzo6RkVMaWdodGluZyhUeXBl
IHR5cGUsIGNvbnN0IENvbG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZs
b2F0IGRpZmZ1c2VDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3Vs
YXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCiAgICAgOiBGaWx0ZXJFZmZlY3Qo
dHlwZSkKLSAgICAsIG1fbGlnaHRpbmdUeXBlKGxpZ2h0aW5nVHlwZSkKLSAgICAsIG1fbGlnaHRT
b3VyY2UoV1RGTW92ZShsaWdodFNvdXJjZSkpCiAgICAgLCBtX2xpZ2h0aW5nQ29sb3IobGlnaHRp
bmdDb2xvcikKICAgICAsIG1fc3VyZmFjZVNjYWxlKHN1cmZhY2VTY2FsZSkKICAgICAsIG1fZGlm
ZnVzZUNvbnN0YW50KGRpZmZ1c2VDb25zdGFudCkKQEAgLTQ3LDYgKzQ2LDcgQEAgRkVMaWdodGlu
Zzo6RkVMaWdodGluZyhMaWdodGluZ1R5cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGln
aHRpbmdDb2xvciwgZmwKICAgICAsIG1fc3BlY3VsYXJFeHBvbmVudChzcGVjdWxhckV4cG9uZW50
KQogICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWChrZXJuZWxVbml0TGVuZ3RoWCkKICAgICAsIG1f
a2VybmVsVW5pdExlbmd0aFkoa2VybmVsVW5pdExlbmd0aFkpCisgICAgLCBtX2xpZ2h0U291cmNl
KFdURk1vdmUobGlnaHRTb3VyY2UpKQogewogfQogCkBAIC04NiwxNyArODYsMTA1IEBAIGJvb2wg
RkVMaWdodGluZzo6c2V0S2VybmVsVW5pdExlbmd0aFkoZmxvYXQga2VybmVsVW5pdExlbmd0aFkp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBjb25zdGV4cHIgaW50IGNQaXhlbFNpemUg
PSA0Owotc3RhdGljIGNvbnN0ZXhwciBpbnQgY0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7Ci1zdGF0
aWMgY29uc3RleHByIHVpbnQ4X3QgY09wYXF1ZUFscGhhID0gc3RhdGljX2Nhc3Q8dWludDhfdD4o
MHhGRik7CisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
ciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFTGlnaHRpbmdT
b2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFTGln
aHRpbmc+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZF
TGlnaHRpbmc+OworCitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wg
YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVj
dHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGNQaXhl
bFNpemUgPSA0OworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGNBbHBoYUNoYW5uZWxPZmZzZXQg
PSAzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBjT3BhcXVlQWxwaGEgPSBzdGF0aWNf
Y2FzdDx1aW50OF90PigweEZGKTsKKworICAgIC8vIFRoZXNlIGZhY3RvcnMgYW5kIHRoZSBub3Jt
YWwgY29lZmZpY2llbnRzIGNvbWUgZnJvbSB0aGUgdGFibGUgdW5kZXIgaHR0cHM6Ly93d3cudzMu
b3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwjZmVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LgorICAgIHN0
YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYyID0gLTEgLyAyLmY7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjMgPSAtMSAvIDMuZjsKKyAgICBzdGF0aWMgY29u
c3RleHByIGZsb2F0IGNGYWN0b3IxZGl2NCA9IC0xIC8gNC5mOworICAgIHN0YXRpYyBjb25zdGV4
cHIgZmxvYXQgY0ZhY3RvcjJkaXYzID0gLTIgLyAzLmY7CisKKyAgICBzdHJ1Y3QgQWxwaGFXaW5k
b3cgeworICAgICAgICB1aW50OF90IGFscGhhWzNdWzNdIHsgfTsKKyAgICAKKyAgICAgICAgLy8g
VGhlIGltcGxlbWVudGF0aW9ucyBhcmUgbGluZWQgdXAgdG8gbWFrZSBjb21wYXJpbmcgaW5kaWNl
cyBlYXNpZXIuCisgICAgICAgIHVpbnQ4X3QgdG9wTGVmdCgpIGNvbnN0ICAgICAgICAgICAgIHsg
cmV0dXJuIGFscGhhWzBdWzBdOyB9CisgICAgICAgIHVpbnQ4X3QgbGVmdCgpIGNvbnN0ICAgICAg
ICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzBdOyB9CisgICAgICAgIHVpbnQ4X3QgYm90dG9t
TGVmdCgpIGNvbnN0ICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzBdOyB9CisKKyAgICAgICAg
dWludDhfdCB0b3AoKSBjb25zdCAgICAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMF1bMV07
IH0KKyAgICAgICAgdWludDhfdCBjZW50ZXIoKSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4g
YWxwaGFbMV1bMV07IH0KKyAgICAgICAgdWludDhfdCBib3R0b20oKSBjb25zdCAgICAgICAgICAg
ICAgeyByZXR1cm4gYWxwaGFbMl1bMV07IH0KKworICAgICAgICB2b2lkIHNldFRvcCh1aW50OF90
IHZhbHVlKSAgICAgICAgICB7IGFscGhhWzBdWzFdID0gdmFsdWU7IH0KKyAgICAgICAgdm9pZCBz
ZXRDZW50ZXIodWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsxXVsxXSA9IHZhbHVlOyB9Cisg
ICAgICAgIHZvaWQgc2V0Qm90dG9tKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxwaGFbMl1bMV0g
PSB2YWx1ZTsgfQorCisgICAgICAgIHZvaWQgc2V0VG9wUmlnaHQodWludDhfdCB2YWx1ZSkgICAg
IHsgYWxwaGFbMF1bMl0gPSB2YWx1ZTsgfQorICAgICAgICB2b2lkIHNldFJpZ2h0KHVpbnQ4X3Qg
dmFsdWUpICAgICAgICB7IGFscGhhWzFdWzJdID0gdmFsdWU7IH0KKyAgICAgICAgdm9pZCBzZXRC
b3R0b21SaWdodCh1aW50OF90IHZhbHVlKSAgeyBhbHBoYVsyXVsyXSA9IHZhbHVlOyB9CisKKyAg
ICAgICAgc3RhdGljIHZvaWQgc2hpZnRSb3codWludDhfdCBhbHBoYVszXSkKKyAgICAgICAgewor
ICAgICAgICAgICAgYWxwaGFbMF0gPSBhbHBoYVsxXTsKKyAgICAgICAgICAgIGFscGhhWzFdID0g
YWxwaGFbMl07CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgdm9pZCBzaGlmdCgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzBdKTsKKyAgICAgICAgICAgIHNoaWZ0Um93
KGFscGhhWzFdKTsKKyAgICAgICAgICAgIHNoaWZ0Um93KGFscGhhWzJdKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKKyAgICAgICAgLy8gVGhpcyBzdHJ1
Y3R1cmUgY29udGFpbnMgb25seSByZWFkLW9ubHkgKFNNUCBzYWZlKSBkYXRhCisgICAgICAgIEZF
TGlnaHRpbmcqIGVmZmVjdDsKKyAgICAgICAgRmlsdGVyRWZmZWN0OjpUeXBlIGZpbHRlclR5cGU7
CisgICAgICAgIENvbG9yIGxpZ2h0aW5nQ29sb3I7CisgICAgICAgIGZsb2F0IHN1cmZhY2VTY2Fs
ZTsKKyAgICAgICAgZmxvYXQgZGlmZnVzZUNvbnN0YW50OworICAgICAgICBmbG9hdCBzcGVjdWxh
ckNvbnN0YW50OworICAgICAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50OworICAgICAgICBjb25z
dCBMaWdodFNvdXJjZSogbGlnaHRTb3VyY2U7CisgICAgICAgIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSogb3BlcmF0aW5nQ29sb3JTcGFjZTsKKworICAgICAgICBVaW50OENsYW1wZWRBcnJh
eSogcGl4ZWxzOworICAgICAgICBpbnQgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAg
ICAgIGludCB3aWR0aDsKKyAgICAgICAgaW50IGhlaWdodDsKKworICAgICAgICBpbmxpbmUgSW50
U2l6ZSB0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAgICBpbmxpbmUgSW50
U2l6ZSB0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRT
aXplIHRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAgICBpbmxpbmUgSW50
U2l6ZSBsZWZ0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAgICBpbmxpbmUg
SW50U2l6ZSBpbnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYpIGNvbnN0Owor
ICAgICAgICBpbmxpbmUgSW50U2l6ZSByaWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dDsKKyAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBj
b25zdDsKKyAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQp
IGNvbnN0OworICAgICAgICBpbmxpbmUgSW50U2l6ZSBib3R0b21SaWdodE5vcm1hbChpbnQgb2Zm
c2V0KSBjb25zdDsKKyAgICB9OworCisgICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7CisgICAg
ICAgIExpZ2h0aW5nRGF0YSBkYXRhOworICAgICAgICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRh
IHBhaW50aW5nRGF0YTsKKyAgICAgICAgaW50IHlTdGFydDsKKyAgICAgICAgaW50IHlFbmQ7Cisg
ICAgfTsKKworICAgIHN0YXRpYyB2b2lkIHNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29u
c3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4
LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWwyRFZl
Y3RvciwgZmxvYXQgYWxwaGEpOworICAgIHN0YXRpYyB2b2lkIHNldFBpeGVsKGludCBvZmZzZXQs
IGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBp
bnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFs
MkRWZWN0b3IpOwogCi0vLyBUaGVzZSBmYWN0b3JzIGFuZCB0aGUgbm9ybWFsIGNvZWZmaWNpZW50
cyBjb21lIGZyb20gdGhlIHRhYmxlIHVuZGVyIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcvZmls
dGVycy5odG1sI2ZlRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC4KLXN0YXRpYyBjb25zdGV4cHIgZmxv
YXQgY0ZhY3RvcjFkaXYyID0gLTEgLyAyLmY7Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0
b3IxZGl2MyA9IC0xIC8gMy5mOwotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjQg
PSAtMSAvIDQuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjJkaXYzID0gLTIgLyAz
LmY7CisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChjb25zdCBMaWdo
dGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwg
aW50IGVuZFkpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1HZW5lcmljV29ya2VyKEFw
cGx5UGFyYW1ldGVycyopOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1HZW5lcmljKGNv
bnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtKGNvbnN0IExpZ2h0aW5nRGF0YSYpOworfTsKIAot
aW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsKGlu
dCBvZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjpMaWdodGluZ0RhdGE6OnRvcExlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBp
bnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOwogICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5pdGVtKG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0x
MDksNyArMTk3LDcgQEAgaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0
b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNp
emUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50IG9mZnNldCkgY29u
c3QKK2lubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0
YTo6dG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOwogICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0xMjQsNyArMjEyLDcgQEAg
aW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwoaW50
IG9mZnNldCkgY29uc3QKICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpM
aWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50
U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0Tm9y
bWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwogICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0xMzcsNyArMjI1LDcgQEAgaW5saW5lIEludFNp
emUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBj
b25zdAogICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0
YTo6bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoraW5saW5lIEludFNpemUgRkVM
aWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uTm9ybWFsKGlu
dCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKICAgICBpbnQgcmlnaHQg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOwpAQCAtMTUzLDcgKzI0MSw3IEBAIGlubGluZSBJbnRTaXplIEZF
TGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25z
dAogICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
aW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmIGFscGhhV2luZG93KSBjb25z
dAoraW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRh
OjppbnRlcmlvck5vcm1hbChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYgYWxwaGFXaW5kb3cpIGNv
bnN0CiB7CiAgICAgaW50IHJpZ2h0QWxwaGFPZmZzZXQgPSBvZmZzZXQgKyBjUGl4ZWxTaXplICsg
Y0FscGhhQ2hhbm5lbE9mZnNldDsKICAgICAKQEAgLTE4Myw3ICsyNzEsNyBAQCBpbmxpbmUgSW50
U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQs
IEFscGhhV2luZG93JgogICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6Okxp
Z2h0aW5nRGF0YTo6cmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJ
bnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6cmlnaHRDb2x1
bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9m
ZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAgLTE5OSw3ICsyODcsNyBAQCBpbmxpbmUg
SW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsKGludCBv
ZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGln
aHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50
U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbUxlZnRO
b3JtYWwoaW50IG9mZnNldCkgY29uc3QKIHsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAgIGlu
dCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0yMTIsNyArMzAwLDcgQEAgaW5saW5lIElu
dFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0Tm9ybWFsKGludCBvZmZz
ZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRp
bmdEYXRhOjpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJbnRTaXpl
IEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFs
KGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwog
ICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0yMjcsNyArMzE1LDcgQEAgaW5saW5lIEludFNpemUg
RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3dOb3JtYWwoaW50IG9mZnNldCkgY29u
c3QKICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6
OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50U2l6ZSBGRUxp
Z2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGlu
dCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogICAg
IGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0yNDAsMjEgKzMyOCwxNiBAQCBpbmxpbmUgSW50U2l6ZSBG
RUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0Tm9ybWFsKGludCBvZmZzZXQpIGNv
bnN0CiAgICAgfTsKIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBj
b25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZ
LCBJbnRTaXplIG5vcm1hbDJEVmVjdG9yKQotewotICAgIHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0
LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZhY3RvclksIG5vcm1hbDJEVmVj
dG9yLCBkYXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Ci19
Ci0KLXZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBM
aWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRT
aXplIG5vcm1hbDJEVmVjdG9yLCBmbG9hdCBhbHBoYSkKK3ZvaWQgRkVMaWdodGluZ1NvZnR3YXJl
QXBwbGllcjo6c2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEm
IGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50
IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbDJE
VmVjdG9yLCBmbG9hdCBhbHBoYSkKIHsKICAgICBmbG9hdCB6ID0gYWxwaGEgKiBkYXRhLnN1cmZh
Y2VTY2FsZTsKLSAgICBMaWdodFNvdXJjZTo6Q29tcHV0ZWRMaWdodGluZ0RhdGEgbGlnaHRpbmdE
YXRhID0gbV9saWdodFNvdXJjZS0+Y29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKHBhaW50aW5nRGF0
YSwgeCwgeSwgeik7CisgICAgTGlnaHRTb3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIGxpZ2h0
aW5nRGF0YSA9IGRhdGEubGlnaHRTb3VyY2UtPmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShwYWlu
dGluZ0RhdGEsIHgsIHksIHopOwogCiAgICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKICAgICBpZiAo
bm9ybWFsMkRWZWN0b3IuaXNaZXJvKCkpIHsKICAgICAgICAgLy8gTm9ybWFsIHZlY3RvciBpcyAo
MCwgMCwgMSkuIFRoaXMgaXMgYSBxdWl0ZSBmcmVxdWVudCBjYXNlLgotICAgICAgICBpZiAobV9s
aWdodGluZ1R5cGUgPT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQotICAgICAgICAgICAg
bGlnaHRTdHJlbmd0aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVj
dG9yLnooKSAvIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aDsKKyAgICAgICAgaWYgKGRh
dGEuZWZmZWN0LT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VM
aWdodGluZykKKyAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLmRpZmZ1c2VDb25zdGFu
dCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0
b3JMZW5ndGg7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3
YXlWZWN0b3IgPSB7CiAgICAgICAgICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLngo
KSwKQEAgLTI2MiwxMCArMzQ1LDEwIEBAIHZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWxJbnRlcm5h
bChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpCiAgICAgICAg
ICAgICAgICAgbGlnaHRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSArIGxpZ2h0aW5nRGF0YS5saWdo
dFZlY3Rvckxlbmd0aAogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlW
ZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYgKG1f
c3BlY3VsYXJFeHBvbmVudCA9PSAxKQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBt
X3NwZWN1bGFyQ29uc3RhbnQgKiBoYWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5n
dGg7CisgICAgICAgICAgICBpZiAoZGF0YS5zcGVjdWxhckV4cG9uZW50ID09IDEpCisgICAgICAg
ICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAqIGhhbGZ3YXlW
ZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0aDsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93ZihoYWxm
d2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGgsIG1fc3BlY3VsYXJFeHBvbmVudCk7
CisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IGRhdGEuc3BlY3VsYXJDb25zdGFudCAq
IHBvd2YoaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoLCBkYXRhLnNwZWN1
bGFyRXhwb25lbnQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgRmxvYXRQb2lu
dDNEIG5vcm1hbFZlY3RvciA9IHsKQEAgLTI3NSw4ICszNTgsOCBAQCB2b2lkIEZFTGlnaHRpbmc6
OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBj
b25zdCBMaQogICAgICAgICB9OwogICAgICAgICBmbG9hdCBub3JtYWxWZWN0b3JMZW5ndGggPSBu
b3JtYWxWZWN0b3IubGVuZ3RoKCk7CiAKLSAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZF
TGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKLSAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBt
X2RpZmZ1c2VDb25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0
b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0
aCk7CisgICAgICAgIGlmIChkYXRhLmVmZmVjdC0+ZmlsdGVyVHlwZSgpID09IEZpbHRlckVmZmVj
dDo6VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcpCisgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0g
ZGF0YS5kaWZmdXNlQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogbGlnaHRpbmdEYXRhLmxpZ2h0
VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JM
ZW5ndGgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5
VmVjdG9yID0gewogICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci54KCks
CkBAIC0yODQsMTAgKzM2NywxMCBAQCB2b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwo
aW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaQogICAgICAgICAg
ICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEubGlnaHRW
ZWN0b3JMZW5ndGgKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVj
dG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChtX3Nw
ZWN1bGFyRXhwb25lbnQgPT0gMSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9z
cGVjdWxhckNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1h
bFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgaWYgKGRh
dGEuc3BlY3VsYXJFeHBvbmVudCA9PSAxKQorICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGgg
PSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3Rvcikg
LyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFu
dCAqIHBvd2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxl
bmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBtX3NwZWN1bGFyRXhwb25lbnQpOworICAgICAg
ICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKChu
b3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBoYWxm
d2F5VmVjdG9yTGVuZ3RoKSwgZGF0YS5zcGVjdWxhckV4cG9uZW50KTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtMzA1LDggKzM4OCwxMyBAQCB2b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsSW50ZXJu
YWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaQogICAgIGRh
dGEucGl4ZWxzLT5zZXRSYW5nZShwaXhlbFZhbHVlLCAzLCBvZmZzZXQpOwogfQogCit2b2lkIEZF
TGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OnNldFBpeGVsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0
aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUg
bm9ybWFsMkRWZWN0b3IpCit7CisgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRhdGEsIHBh
aW50aW5nRGF0YSwgeCwgeSwgZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFsMkRWZWN0b3IsIGRhdGEu
cGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKK30KKwogLy8gVGhp
cyBhcHBlYXJzIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhlIHNhbWUgcGl4ZWwgYnVmZmVy
LCBidXQgaXQgb25seSByZWFkcyB0aGUgYWxwaGEgY2hhbm5lbCwgYW5kIHdyaXRlcyB0aGUgbm9u
LWFscGhhIGNoYW5uZWxzLgotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1Bh
aW50KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5n
RGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKK3ZvaWQgRkVMaWdodGlu
Z1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChjb25zdCBMaWdodGlu
Z0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0
YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHN0YXJ0WSBpcyA+
IDAgc2luY2Ugd2UgcmVhZCBmcm9tIHRoZSBwcmV2aW91cyByb3cgaW4gdGhlIGxvb3AuCiAgICAg
QVNTRVJUKHN0YXJ0WSk7CkBAIC0zMzEsMjYgKzQxOSwzMCBAQCB2b2lkIEZFTGlnaHRpbmc6OnBs
YXRmb3JtQXBwbHlHZW5lcmljUGFpbnQoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBM
aWdodAogICAgICAgICBhbHBoYVdpbmRvdy5zZXRCb3R0b21SaWdodChkYXRhLnBpeGVscy0+aXRl
bShuZXh0Um93U3RhcnQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwogCiAg
ICAgICAgIGludCBvZmZzZXQgPSByb3dTdGFydE9mZnNldCArIGNQaXhlbFNpemU7Ci0gICAgICAg
IGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNl
dCArPSBjUGl4ZWxTaXplKSB7CisgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0
aCAtIDE7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKICAgICAgICAgICAgIGFscGhhV2lu
ZG93LnNoaWZ0KCk7CiAgICAgICAgICAgICBzZXRQaXhlbEludGVybmFsKG9mZnNldCwgZGF0YSwg
cGFpbnRpbmdEYXRhLCB4LCB5LCBjRmFjdG9yMWRpdjQsIGNGYWN0b3IxZGl2NCwgZGF0YS5pbnRl
cmlvck5vcm1hbChvZmZzZXQsIGFscGhhV2luZG93KSwgYWxwaGFXaW5kb3cuY2VudGVyKCkpOwog
ICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5l
cmljV29ya2VyKFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyogcGFyYW1ldGVycykKK3Zv
aWQgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNXb3JrZXIo
QXBwbHlQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKQogewotICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+
cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5w
YWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+eUVuZCk7CisgICAg
YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludChwYXJhbWV0ZXJzLT5kYXRhLCBwYXJhbWV0ZXJzLT5w
YWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnlTdGFydCwgcGFyYW1ldGVycy0+eUVuZCk7CiB9CiAK
LXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRh
JiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCisj
aWYgIShDUFUoQVJNX05FT04pICYmIENQVShBUk1fVFJBRElUSU9OQUwpICYmIENPTVBJTEVSKEdD
Q19DT01QQVRJQkxFKSkKK3ZvaWQgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0
Zm9ybUdlbmVyaWMoY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiB7Ci0gICAgdW5zaWduZWQgcm93c1RvUHJvY2Vz
cyA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgLSAxOworICAgIHVuc2lnbmVkIHJvd3NUb1By
b2Nlc3MgPSBkYXRhLmhlaWdodCAtIDI7CiAgICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHJv
d3NUb1Byb2Nlc3MgLyA4OwotICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6
Om1pbjx1bnNpZ25lZD4oKChkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgLSAxKSAqIHJvd3NUb1By
b2Nlc3MpIC8gc19taW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7CisgICAgCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgbWluaW1hbFJlY3REaW1lbnNpb24gPSAxMDAgKiAxMDA7
IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCisgICAgdW5zaWduZWQg
b3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPigoKGRhdGEud2lkdGggLSAy
KSAqIHJvd3NUb1Byb2Nlc3MpIC8gbWluaW1hbFJlY3REaW1lbnNpb24sIG1heE51bVRocmVhZHMp
OworCiAgICAgaWYgKG9wdGltYWxUaHJlYWROdW1iZXIgPiAxKSB7CiAgICAgICAgIC8vIEluaXRp
YWxpemUgcGFyYWxsZWwgam9icwotICAgICAgICBQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseUdl
bmVyaWNQYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJnBsYXRmb3JtQXBwbHlHZW5lcmljV29ya2Vy
LCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKKyAgICAgICAgUGFyYWxsZWxKb2JzPEFwcGx5UGFyYW1l
dGVycz4gcGFyYWxsZWxKb2JzKCZhcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtlciwgb3B0aW1hbFRo
cmVhZE51bWJlcik7CiAKICAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVyIGFycmF5CiAgICAg
ICAgIGludCBqb2IgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CkBAIC0zNjIsOCArNDU0
LDcgQEAgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGlu
Z0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmMKIAogICAgICAgICAgICAgaW50IHlTdGFydCA9
IDE7CiAgICAgICAgICAgICBmb3IgKC0tam9iOyBqb2IgPj0gMDsgLS1qb2IpIHsKLSAgICAgICAg
ICAgICAgICBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVs
Sm9icy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyID0gdGhp
czsKKyAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9i
cy5wYXJhbWV0ZXIoam9iKTsKICAgICAgICAgICAgICAgICBwYXJhbXMuZGF0YSA9IGRhdGE7CiAg
ICAgICAgICAgICAgICAgcGFyYW1zLnBhaW50aW5nRGF0YSA9IHBhaW50aW5nRGF0YTsKICAgICAg
ICAgICAgICAgICBwYXJhbXMueVN0YXJ0ID0geVN0YXJ0OwpAQCAtMzc2LDM5ICs0NjcsMTggQEAg
dm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBMaWdodGluZ0RhdGEm
IGRhdGEsIGNvbnN0IExpZ2h0U291cmMKICAgICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRo
cmVhZGVkIG1vZGUuCiAgICAgfQogCi0gICAgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChkYXRh
LCBwYWludGluZ0RhdGEsIDEsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUpOworICAgIGFwcGx5
UGxhdGZvcm1HZW5lcmljUGFpbnQoZGF0YSwgcGFpbnRpbmdEYXRhLCAxLCBkYXRhLmhlaWdodCAt
IDEpOwogfQotCi1pbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KGNvbnN0IExp
Z2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhKQotewotICAgIC8vIFRoZSBzZWxlY3Rpb24gaGVyZSBldmVudHVhbGx5IHNob3VsZCBo
YXBwZW4gZHluYW1pY2FsbHkgb24gc29tZSBwbGF0Zm9ybXMuCi0jaWYgQ1BVKEFSTV9ORU9OKSAm
JiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBw
bGF0Zm9ybUFwcGx5TmVvbihkYXRhLCBwYWludGluZ0RhdGEpOwotI2Vsc2UKLSAgICBwbGF0Zm9y
bUFwcGx5R2VuZXJpYyhkYXRhLCBwYWludGluZ0RhdGEpOwogI2VuZGlmCi19CiAKLWJvb2wgRkVM
aWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0
aCwgaW50IGhlaWdodCkKK3ZvaWQgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0
Zm9ybShjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEpCiB7CiAgICAgTGlnaHRTb3VyY2U6OlBhaW50
aW5nRGF0YSBwYWludGluZ0RhdGE7Ci0gICAgTGlnaHRpbmdEYXRhIGRhdGE7Ci0KLSAgICAvLyBG
SVhNRTogZG8gc29tZXRoaW5nIGlmIHdpZHRoIG9yIGhlaWdodCAob3IgYm90aCkgaXMgMSBwaXhl
bC4KLSAgICAvLyBUaGUgVzMgc3BlYyBkb2VzIG5vdCBkZWZpbmUgdGhpcyBjYXNlLiBOb3cgdGhl
IGZpbHRlciBqdXN0IHJldHVybnMuCi0gICAgaWYgKHdpZHRoIDw9IDIgfHwgaGVpZ2h0IDw9IDIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGRhdGEucGl4ZWxzID0gJnBpeGVsczsKLSAg
ICBkYXRhLnN1cmZhY2VTY2FsZSA9IG1fc3VyZmFjZVNjYWxlIC8gMjU1LjBmOwotICAgIGRhdGEu
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPSB3aWR0aCAqIGNQaXhlbFNpemU7Ci0gICAgZGF0
YS53aWR0aERlY3JlYXNlZEJ5T25lID0gd2lkdGggLSAxOwotICAgIGRhdGEuaGVpZ2h0RGVjcmVh
c2VkQnlPbmUgPSBoZWlnaHQgLSAxOwogCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2xpZ2h0
aW5nQ29sb3IudG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFj
ZSgpKTsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGRhdGEubGlnaHRpbmdDb2xvci50b0NvbG9y
Q29tcG9uZW50c0luQ29sb3JTcGFjZSgqZGF0YS5vcGVyYXRpbmdDb2xvclNwYWNlKTsKICAgICBw
YWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQz
RChyLCBnLCBiKTsKIAotICAgIG1fbGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0RhdGEoKnRoaXMs
IHBhaW50aW5nRGF0YSk7CisgICAgZGF0YS5saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgq
ZGF0YS5lZmZlY3QsIHBhaW50aW5nRGF0YSk7CiAKICAgICAvLyBUb3AgbGVmdC4KICAgICBpbnQg
b2Zmc2V0ID0gMDsKQEAgLTQxNiw0NyArNDg2LDQ3IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xp
Z2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkK
IAogICAgIC8vIFRvcCByaWdodC4KICAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50
aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0
b3IyZGl2MywgZGF0YS50b3BSaWdodE5vcm1hbChvZmZzZXQpKTsKKyAgICBzZXRQaXhlbChvZmZz
ZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aCAtIDEsIDAsIGNGYWN0b3IyZGl2Mywg
Y0ZhY3RvcjJkaXYzLCBkYXRhLnRvcFJpZ2h0Tm9ybWFsKG9mZnNldCkpOwogCiAgICAgLy8gQm90
dG9tIGxlZnQuCi0gICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEu
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBw
YWludGluZ0RhdGEsIDAsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2Mywg
Y0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3JtYWwob2Zmc2V0KSk7CisgICAgb2Zmc2V0
ID0gKGRhdGEuaGVpZ2h0IC0gMSkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwor
ICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhlaWdodCAt
IDEsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbUxlZnROb3JtYWwob2Zm
c2V0KSk7CiAKICAgICAvLyBCb3R0b20gcmlnaHQuCi0gICAgb2Zmc2V0ID0gaGVpZ2h0ICogZGF0
YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwo
b2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgZGF0
YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEu
Ym90dG9tUmlnaHROb3JtYWwob2Zmc2V0KSk7CisgICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHQgKiBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKKyAgICBzZXRQaXhl
bChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aCAtIDEsIGRhdGEuaGVpZ2h0
IC0gMSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIGRhdGEuYm90dG9tUmlnaHROb3JtYWwo
b2Zmc2V0KSk7CiAKLSAgICBpZiAod2lkdGggPj0gMykgeworICAgIGlmIChkYXRhLndpZHRoID49
IDMpIHsKICAgICAgICAgLy8gVG9wIHJvdy4KICAgICAgICAgb2Zmc2V0ID0gY1BpeGVsU2l6ZTsK
LSAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsr
eCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCisgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0
YS53aWR0aCAtIDE7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpCiAgICAgICAgICAgICBzZXRQ
aXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgMCwgY0ZhY3RvcjFkaXYzLCBjRmFj
dG9yMWRpdjIsIGRhdGEudG9wUm93Tm9ybWFsKG9mZnNldCkpOwogCiAgICAgICAgIC8vIEJvdHRv
bSByb3cuCi0gICAgICAgIG9mZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRh
LndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9IGNQ
aXhlbFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0
YSwgeCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRp
djIsIGRhdGEuYm90dG9tUm93Tm9ybWFsKG9mZnNldCkpOworICAgICAgICBvZmZzZXQgPSAoZGF0
YS5oZWlnaHQgLSAxKSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxT
aXplOworICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGggLSAxOyArK3gsIG9m
ZnNldCArPSBjUGl4ZWxTaXplKQorICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBw
YWludGluZ0RhdGEsIHgsIGRhdGEuaGVpZ2h0IC0gMSwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRp
djIsIGRhdGEuYm90dG9tUm93Tm9ybWFsKG9mZnNldCkpOwogICAgIH0KIAotICAgIGlmIChoZWln
aHQgPj0gMykgeworICAgIGlmIChkYXRhLmhlaWdodCA+PSAzKSB7CiAgICAgICAgIC8vIExlZnQg
Y29sdW1uLgogICAgICAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
OwotICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7
ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpCisgICAgICAg
IGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHQgLSAxOyArK3ksIG9mZnNldCArPSBkYXRh
LndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQogICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0
LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBk
YXRhLmxlZnRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7CiAKICAgICAgICAgLy8gUmlnaHQgY29sdW1u
LgogICAgICAgICBvZmZzZXQgPSAyICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAt
IGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNy
ZWFzZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZSkKLSAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRh
LndpZHRoRGVjcmVhc2VkQnlPbmUsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRh
LnJpZ2h0Q29sdW1uTm9ybWFsKG9mZnNldCkpOworICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8
IGRhdGEuaGVpZ2h0IC0gMTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZSkKKyAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRh
LCBkYXRhLndpZHRoIC0gMSwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIGRhdGEucmln
aHRDb2x1bW5Ob3JtYWwob2Zmc2V0KSk7CiAgICAgfQogCi0gICAgaWYgKHdpZHRoID49IDMgJiYg
aGVpZ2h0ID49IDMpIHsKKyAgICBpZiAoZGF0YS53aWR0aCA+PSAzICYmIGRhdGEuaGVpZ2h0ID49
IDMpIHsKICAgICAgICAgLy8gSW50ZXJpb3IgcGl4ZWxzLgotICAgICAgICBwbGF0Zm9ybUFwcGx5
KGRhdGEsIHBhaW50aW5nRGF0YSk7CisgICAgICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKGRhdGEs
IHBhaW50aW5nRGF0YSk7CiAgICAgfQogCi0gICAgaW50IGxhc3RQaXhlbCA9IGRhdGEud2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemUgKiBoZWlnaHQ7Ci0gICAgaWYgKG1fbGlnaHRpbmdUeXBlID09
IERpZmZ1c2VMaWdodGluZykgeworICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplICogZGF0YS5oZWlnaHQ7CisgICAgaWYgKGRhdGEuZWZmZWN0LT5maWx0
ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykgewogICAg
ICAgICBmb3IgKGludCBpID0gY0FscGhhQ2hhbm5lbE9mZnNldDsgaSA8IGxhc3RQaXhlbDsgaSAr
PSBjUGl4ZWxTaXplKQogICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpLCBjT3BhcXVlQWxw
aGEpOwogICAgIH0gZWxzZSB7CkBAIC00NjgsMjEgKzUzOCwyMSBAQCBib29sIEZFTGlnaHRpbmc6
OmRyYXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCiAgICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGkgKyAzLCBhMSA+PSBhMiA/IChh
MSA+PSBhMyA/IGExIDogYTMpIDogKGEyID49IGEzID8gYTIgOiBhMykpOwogICAgICAgICB9CiAg
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRkVMaWdodGluZzo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCitib29sIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOwogCi0gICAgYXV0byBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0g
bV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBzZXRJc0FscGhhSW1hZ2UoZmFsc2UpOworICAgIGF1dG8mIGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKKworICAg
IG1fZWZmZWN0LnNldElzQWxwaGFJbWFnZShmYWxzZSk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdERy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRvIGVmZmVjdERyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVx
dWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
ICAgICBpbi0+Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBl
ZmZlY3REcmF3aW5nUmVjdCk7CiAKICAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVu
Z3RocyBvdGhlciB0aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwpAQCAt
NDkwLDExICs1NjAsMzYgQEAgYm9vbCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
Y29uc3QgRmlsdGVyJikKICAgICAvLyBvdXRwdXQgZm9yIHZhcmlvdXMga2VybmVsVW5pdExlbmd0
aHMsIGFuZCBJIGFtIG5vdCBzdXJlIHRoZXkgYXJlIHJlbGlhYmxlLgogICAgIC8vIEFueXdheSwg
ZmVDb252b2x2ZU1hdHJpeCBzaG91bGQgYWxzbyB1c2UgdGhlIGltcGxlbWVudGF0aW9uCiAKLSAg
ICBJbnRTaXplIGFic29sdXRlUGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7
Ci0gICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ci0+ZGF0YSgpOworICAgIEludFNpemUgc2l6ZSA9IEludFNpemUobV9lZmZlY3QuYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCkpOworCisgICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBpZiB3aWR0
aCBvciBoZWlnaHQgKG9yIGJvdGgpIGlzIDEgcGl4ZWwuCisgICAgLy8gVGhlIFczIHNwZWMgZG9l
cyBub3QgZGVmaW5lIHRoaXMgY2FzZS4gTm93IHRoZSBmaWx0ZXIganVzdCByZXR1cm5zLgorICAg
IGlmIChzaXplLndpZHRoKCkgPD0gMiB8fCBzaXplLmhlaWdodCgpIDw9IDIpCisgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgZHJhd0xpZ2h0aW5nKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgYWJz
b2x1dGVQYWludFNpemUud2lkdGgoKSwgYWJzb2x1dGVQYWludFNpemUuaGVpZ2h0KCkpOworICAg
IExpZ2h0aW5nRGF0YSBkYXRhOworICAgIGRhdGEuZWZmZWN0ID0gJm1fZWZmZWN0OworICAgIGRh
dGEuZmlsdGVyVHlwZSA9IG1fZWZmZWN0LmZpbHRlclR5cGUoKTsKKyAgICBkYXRhLmxpZ2h0aW5n
Q29sb3IgPSBtX2VmZmVjdC5saWdodGluZ0NvbG9yKCk7CisgICAgZGF0YS5zdXJmYWNlU2NhbGUg
PSBtX2VmZmVjdC5zdXJmYWNlU2NhbGUoKSAvIDI1NS4wZjsKKyAgICBkYXRhLmRpZmZ1c2VDb25z
dGFudCA9IG1fZWZmZWN0LmRpZmZ1c2VDb25zdGFudCgpOworICAgIGRhdGEuc3BlY3VsYXJDb25z
dGFudCA9IG1fZWZmZWN0LnNwZWN1bGFyQ29uc3RhbnQoKTsKKyAgICBkYXRhLnNwZWN1bGFyRXhw
b25lbnQgPSBtX2VmZmVjdC5zcGVjdWxhckV4cG9uZW50KCk7CisgICAgZGF0YS5saWdodFNvdXJj
ZSA9ICZtX2VmZmVjdC5saWdodFNvdXJjZSgpOworICAgIGRhdGEub3BlcmF0aW5nQ29sb3JTcGFj
ZSA9ICZtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCk7CisKKyAgICBkYXRhLnBpeGVscyA9
ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CisgICAgZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZSA9IHNpemUud2lkdGgoKSAqIGNQaXhlbFNpemU7CisgICAgZGF0YS53aWR0aCA9IHNpemUu
d2lkdGgoKTsKKyAgICBkYXRhLmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisKKyAgICBhcHBseVBs
YXRmb3JtKGRhdGEpOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEZFTGlnaHRpbmc6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4g
RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVj
dHMoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKaW5kZXggYWQyZmMy
OGZhOWU3ZjRiZjI5MTNkNjdiOTgwNTdmOGVlYmIwOGRiMi4uYTg0ZmU4NWEzODFmYTg0MDc1ZTUx
NjU0Y2MyYzBjNWJiOGMxYWIyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKQEAgLTI5LDkgKzI5LDYgQEAKICNpbmNs
dWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkxpZ2h0
U291cmNlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5oPgotCi0vLyBDb21t
b24gYmFzZSBjbGFzcyBmb3IgRkVEaWZmdXNlTGlnaHRpbmcgYW5kIEZFU3BlY3VsYXJMaWdodGlu
ZwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDExICszNiwxNSBAQCBzdHJ1Y3QgRkVM
aWdodGluZ1BhaW50aW5nRGF0YUZvck5lb247CiAKIGNsYXNzIEZFTGlnaHRpbmcgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKKyAgICBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1fbGlnaHRpbmdDb2xvcjsgfQorICAgIGJvb2wgc2V0TGlnaHRpbmdD
b2xvcihjb25zdCBDb2xvciYpOworCiAgICAgZmxvYXQgc3VyZmFjZVNjYWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdXJmYWNlU2NhbGU7IH0KICAgICBib29sIHNldFN1cmZhY2VTY2FsZShmbG9hdCk7
CiAKLSAgICBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fbGln
aHRpbmdDb2xvcjsgfQotICAgIGJvb2wgc2V0TGlnaHRpbmdDb2xvcihjb25zdCBDb2xvciYpOwor
ICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlmZnVzZUNvbnN0
YW50OyB9CisgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Bl
Y3VsYXJDb25zdGFudDsgfQorICAgIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQoKSBjb25zdCB7IHJl
dHVybiBtX3NwZWN1bGFyRXhwb25lbnQ7IH0KIAogICAgIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhY
KCkgY29uc3QgeyByZXR1cm4gbV9rZXJuZWxVbml0TGVuZ3RoWDsgfQogICAgIGJvb2wgc2V0S2Vy
bmVsVW5pdExlbmd0aFgoZmxvYXQpOwpAQCAtNTQsMTAxICs1NSwxNyBAQCBwdWJsaWM6CiAgICAg
Y29uc3QgTGlnaHRTb3VyY2UmIGxpZ2h0U291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9saWdodFNv
dXJjZS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX21pbmlt
YWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3Ig
cGFyYWxsZWwgam9icwotCi0gICAgZW51bSBMaWdodGluZ1R5cGUgewotICAgICAgICBEaWZmdXNl
TGlnaHRpbmcsCi0gICAgICAgIFNwZWN1bGFyTGlnaHRpbmcKLSAgICB9OwotICAgIAotICAgIHN0
cnVjdCBBbHBoYVdpbmRvdyB7Ci0gICAgICAgIHVpbnQ4X3QgYWxwaGFbM11bM10geyB9OwotICAg
ICAgICAKLSAgICAgICAgLy8gVGhlIGltcGxlbWVudGF0aW9ucyBhcmUgbGluZWQgdXAgdG8gbWFr
ZSBjb21wYXJpbmcgaW5kaWNlcyBlYXNpZXIuCi0gICAgICAgIHVpbnQ4X3QgdG9wTGVmdCgpIGNv
bnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBdWzBdOyB9Ci0gICAgICAgIHVpbnQ4X3Qg
bGVmdCgpIGNvbnN0ICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzBdOyB9Ci0gICAg
ICAgIHVpbnQ4X3QgYm90dG9tTGVmdCgpIGNvbnN0ICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJd
WzBdOyB9Ci0KLSAgICAgICAgdWludDhfdCB0b3AoKSBjb25zdCAgICAgICAgICAgICAgICAgeyBy
ZXR1cm4gYWxwaGFbMF1bMV07IH0KLSAgICAgICAgdWludDhfdCBjZW50ZXIoKSBjb25zdCAgICAg
ICAgICAgICAgeyByZXR1cm4gYWxwaGFbMV1bMV07IH0KLSAgICAgICAgdWludDhfdCBib3R0b20o
KSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4gYWxwaGFbMl1bMV07IH0KLQotICAgICAgICB2
b2lkIHNldFRvcCh1aW50OF90IHZhbHVlKSAgICAgICAgICB7IGFscGhhWzBdWzFdID0gdmFsdWU7
IH0KLSAgICAgICAgdm9pZCBzZXRDZW50ZXIodWludDhfdCB2YWx1ZSkgICAgICAgeyBhbHBoYVsx
XVsxXSA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Qm90dG9tKHVpbnQ4X3QgdmFsdWUpICAg
ICAgIHsgYWxwaGFbMl1bMV0gPSB2YWx1ZTsgfQotCi0gICAgICAgIHZvaWQgc2V0VG9wUmlnaHQo
dWludDhfdCB2YWx1ZSkgICAgIHsgYWxwaGFbMF1bMl0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lk
IHNldFJpZ2h0KHVpbnQ4X3QgdmFsdWUpICAgICAgICB7IGFscGhhWzFdWzJdID0gdmFsdWU7IH0K
LSAgICAgICAgdm9pZCBzZXRCb3R0b21SaWdodCh1aW50OF90IHZhbHVlKSAgeyBhbHBoYVsyXVsy
XSA9IHZhbHVlOyB9Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgc2hpZnRSb3codWludDhfdCBhbHBo
YVszXSkKLSAgICAgICAgewotICAgICAgICAgICAgYWxwaGFbMF0gPSBhbHBoYVsxXTsKLSAgICAg
ICAgICAgIGFscGhhWzFdID0gYWxwaGFbMl07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IHZvaWQgc2hpZnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVswXSk7
Ci0gICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVsxXSk7Ci0gICAgICAgICAgICBzaGlmdFJvdyhh
bHBoYVsyXSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3RydWN0IExpZ2h0aW5nRGF0YSB7
Ci0gICAgICAgIC8vIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIG9ubHkgcmVhZC1vbmx5IChTTVAg
c2FmZSkgZGF0YQotICAgICAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxzOwotICAgICAgICBm
bG9hdCBzdXJmYWNlU2NhbGU7Ci0gICAgICAgIGludCB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZTsKLSAgICAgICAgaW50IHdpZHRoRGVjcmVhc2VkQnlPbmU7Ci0gICAgICAgIGludCBoZWlnaHRE
ZWNyZWFzZWRCeU9uZTsKLQotICAgICAgICBpbmxpbmUgSW50U2l6ZSB0b3BMZWZ0Tm9ybWFsKGlu
dCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSB0b3BSb3dOb3JtYWwoaW50
IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBJbnRTaXplIHRvcFJpZ2h0Tm9ybWFsKGlu
dCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBsZWZ0Q29sdW1uTm9ybWFs
KGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSBpbnRlcmlvck5vcm1h
bChpbnQgb2Zmc2V0LCBBbHBoYVdpbmRvdyYpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6
ZSByaWdodENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIElu
dFNpemUgYm90dG9tTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5l
IEludFNpemUgYm90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxp
bmUgSW50U2l6ZSBib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICB9Owot
Ci0gICAgc3RydWN0IFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyB7Ci0gICAgICAgIEZF
TGlnaHRpbmcqIGZpbHRlcjsKLSAgICAgICAgTGlnaHRpbmdEYXRhIGRhdGE7Ci0gICAgICAgIExp
Z2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgICAgICBpbnQgeVN0YXJ0
OwotICAgICAgICBpbnQgeUVuZDsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgcGxhdGZvcm1B
cHBseUdlbmVyaWNXb3JrZXIoUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzKik7Ci0gICAg
c3RhdGljIHZvaWQgcGxhdGZvcm1BcHBseU5lb25Xb3JrZXIoRkVMaWdodGluZ1BhaW50aW5nRGF0
YUZvck5lb24qKTsKLQotICAgIEZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYg
bGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQs
IGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtl
cm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNl
PiYmLCBUeXBlKTsKLQotICAgIGJvb2wgZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xhbXBlZEFycmF5Jiwg
aW50LCBpbnQpOwotCi0gICAgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGlu
Z0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBm
bG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZlY3Rvcik7Ci0gICAg
dm9pZCBzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNv
bnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IGZhY3Rv
clgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFsVmVjdG9yLCBmbG9hdCBhbHBoYSk7Cisg
ICAgRkVMaWdodGluZyhUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3Vy
ZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQs
IGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIAogICAgIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0
ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CiAKICAgICBi
b29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKIAotICAg
IHZvaWQgcGxhdGZvcm1BcHBseShjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJj
ZTo6UGFpbnRpbmdEYXRhJik7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQo
Y29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGlu
dCBzdGFydFgsIGludCBzdGFydFkpOwotICAgIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoY29u
c3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwotCiAj
aWYgQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxFUihHQ0Nf
Q09NUEFUSUJMRSkKICAgICBzdGF0aWMgaW50IGdldFBvd2VyQ29lZmZpY2llbnRzKGZsb2F0IGV4
cG9uZW50KTsKICAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5TmVvbihjb25zdCBMaWdodGlu
Z0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7CiAjZW5kaWYKIAotICAg
IExpZ2h0aW5nVHlwZSBtX2xpZ2h0aW5nVHlwZTsKLSAgICBSZWY8TGlnaHRTb3VyY2U+IG1fbGln
aHRTb3VyY2U7Ci0KICAgICBDb2xvciBtX2xpZ2h0aW5nQ29sb3I7CiAgICAgZmxvYXQgbV9zdXJm
YWNlU2NhbGU7CiAgICAgZmxvYXQgbV9kaWZmdXNlQ29uc3RhbnQ7CkBAIC0xNTYsNyArNzMsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgZmxvYXQgbV9zcGVjdWxhckV4cG9uZW50OwogICAgIGZsb2F0IG1f
a2VybmVsVW5pdExlbmd0aFg7CiAgICAgZmxvYXQgbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICBS
ZWY8TGlnaHRTb3VyY2U+IG1fbGlnaHRTb3VyY2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNZXJnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTWVyZ2UuY3BwCmluZGV4IGNlYTE5N2NmOGExNzY3YzlkZDRmZDRlZTAzM2Y2NmZmZDFmODM5
Y2MuLjc2YTc0NjRmMDBlNmQzNzA4ZWU5NGRjYWNkOTZmNjFmN2FjYTZiZTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcApA
QCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFTWVyZ2Uu
aCIKIAorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KQEAgLTM4LDI1ICszOSw0MSBAQCBGRU1lcmdlOjpGRU1lcmdlKCkKIHsK
IH0KIAotYm9vbCBGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikK
Ky8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRU1lcmdlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFy
YXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVNZXJnZVNvZnR3YXJlQXBwbGll
ciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVNZXJnZT4geworICAgIHVz
aW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVNZXJnZT47CisKK3B1Ymxp
YzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXIm
LCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9Owor
Citib29sIEZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0
IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIHVuc2lnbmVkIHNpemUg
PSBudW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIEFTU0VSVChzaXplID4gMCk7CisgICAgQVNT
RVJUKGlucHV0RWZmZWN0cy5zaXplKCkgPiAwKTsKIAotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBp
bWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFn
ZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdl
LT5jb250ZXh0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGlmIChh
dXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCkpCi0gICAgICAgICAgICBmaWx0
ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICBhdXRvJiBmaWx0ZXJDb250ZXh0
ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKKworICAgIGZvciAoYXV0byYgaW4gOiBpbnB1dEVm
ZmVjdHMpIHsKKyAgICAgICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgp
OworICAgICAgICBpZiAoIWluQnVmZmVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgbV9lZmZlY3QuZHJhd2lu
Z1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogICAgIH0KIAog
ICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVNZXJnZVNvZnR3YXJlQXBw
bGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIFRleHRTdHJl
YW0mIEZFTWVyZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJl
c2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQg
PDwgIltmZU1lcmdlIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCBiMjIzY2I5ZTU2NjM2OTU5YzNm
OTFiODYxZTZkYTE3YzAzNmRhM2M3Li5kOTQ1MTgxNTY4ZjBhNmU3ZjBiNTdiNTM5YzUzOTQ5MjFk
NzgxNjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAi
Q29sb3JDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiQ29sb3JUeXBlcy5oIgogI2luY2x1ZGUgIkZp
bHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJQaXhl
bEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CkBAIC04MywyMyArODQsNDggQEAgdm9pZCBGRU1vcnBob2xvZ3k6OmRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFic29sdXRl
UGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgaW50IHBpeGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGludCB3aWR0aCkKLXsKLSAgICBy
ZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsKLX0KKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBG
RU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIg
ZmlsZXMuCitjbGFzcyBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVy
RWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFTW9ycGhvbG9neT4geworICAgIHVzaW5nIEJhc2UgPSBG
aWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVNb3JwaG9sb2d5PjsKIAotaW5saW5lIENvbG9y
Q29tcG9uZW50czx1aW50OF90LCA0PiBtYWtlQ29sb3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUo
UGFja2VkQ29sb3I6OlJHQkEgcGl4ZWwpCi17Ci0gICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRz
KGFzU1JHQkEocGl4ZWwpKTsKLX0KK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOwogCi1p
bmxpbmUgUGFja2VkQ29sb3I6OlJHQkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRz
KGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgY29tcG9uZW50cykKLXsKLSAgICBy
ZXR1cm4gUGFja2VkQ29sb3I6OlJHQkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWludDhf
dD4+KGNvbXBvbmVudHMpIH07Ci19CisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25z
dCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6
CisgICAgdXNpbmcgQ29sdW1uRXh0cmVtYSA9IFZlY3RvcjxDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4sIDE2PjsKKworICAgIHN0cnVjdCBQYWludGluZ0RhdGEgeworICAgICAgICBNb3JwaG9s
b2d5T3BlcmF0b3JUeXBlIHR5cGU7CisgICAgICAgIGludCByYWRpdXNYOworICAgICAgICBpbnQg
cmFkaXVzWTsKKyAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkqIHNyY1BpeGVsQXJyYXk7
CisgICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5OworICAgICAgICBpbnQg
d2lkdGg7CisgICAgICAgIGludCBoZWlnaHQ7CisgICAgfTsKIAotdGVtcGxhdGU8TW9ycGhvbG9n
eU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhf
dCwgND4gbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25z
dCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIpCisgICAgc3RydWN0IEFwcGx5UGFyYW1l
dGVycyB7CisgICAgICAgIGNvbnN0IFBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhOworICAgICAg
ICBpbnQgc3RhcnRZOworICAgICAgICBpbnQgZW5kWTsKKyAgICB9OworCisgICAgc3RhdGljIGlu
bGluZSBpbnQgcGl4ZWxBcnJheUluZGV4KGludCB4LCBpbnQgeSwgaW50IHdpZHRoKSB7IHJldHVy
biAoeSAqIHdpZHRoICsgeCkgKiA0OyB9CisgICAgc3RhdGljIGlubGluZSBQYWNrZWRDb2xvcjo6
UkdCQSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+JiBjb21wb25lbnRzKSB7IHJldHVybiBQYWNrZWRDb2xvcjo6UkdCQSB7
IG1ha2VGcm9tQ29tcG9uZW50czxTUkdCQTx1aW50OF90Pj4oY29tcG9uZW50cykgfTsgfQorCisg
ICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9yQ29t
cG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHBpeGVsKSB7IHJldHVybiBh
c0NvbG9yQ29tcG9uZW50cyhhc1NSR0JBKHBpeGVsKSk7IH0KKyAgICBzdGF0aWMgaW5saW5lIENv
bG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4mIGEsIGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYiwgTW9y
cGhvbG9neU9wZXJhdG9yVHlwZSk7CisgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1Bp
eGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50IHdpZHRoLCBNb3JwaG9s
b2d5T3BlcmF0b3JUeXBlKTsKKyAgICBzdGF0aWMgaW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50
OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUpOworCisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdlbmVy
aWMoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOworICAgIHN0YXRp
YyB2b2lkIGFwcGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7CisgICAgc3RhdGlj
IHZvaWQgYXBwbHlQbGF0Zm9ybShjb25zdCBQYWludGluZ0RhdGEmKTsKK307CisKK2lubGluZSBD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpt
aW5Pck1heChjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGEsIGNvbnN0IENvbG9y
Q29tcG9uZW50czx1aW50OF90LCA0PiYgYiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQog
ewogICAgIGlmICh0eXBlID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKICAgICAgICAg
cmV0dXJuIHBlckNvbXBvbmVudE1pbihhLCBiKTsKQEAgLTEwNyw0NyArMTMzLDI3IEBAIEFMV0FZ
U19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1pbk9yTWF4KGNvbnN0IENvbG9y
Q29tcG9uZW50czx1aW50OF90CiAgICAgcmV0dXJuIHBlckNvbXBvbmVudE1heChhLCBiKTsKIH0K
IAotdGVtcGxhdGU8TW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlPgotQUxXQVlTX0lOTElORSBD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY29sdW1uRXh0cmVtdW0oY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIGludCB4LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCwgaW50
IHdpZHRoKQoraW5saW5lIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBGRU1vcnBob2xvZ3lT
b2Z0d2FyZUFwcGxpZXI6OmNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
cmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9y
cGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQogewogICAgIGF1dG8gZXh0cmVtdW0gPSBtYWtlQ29s
b3JDb21wb25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJh
eUluZGV4KHgsIHlTdGFydCwgd2lkdGgpKSB9KTsKIAogICAgIGZvciAoaW50IHkgPSB5U3RhcnQg
KyAxOyB5IDwgeUVuZDsgKyt5KSB7CiAgICAgICAgIGF1dG8gcGl4ZWwgPSBtYWtlQ29sb3JDb21w
b25lbnRzZnJvbVBpeGVsVmFsdWUoUGFja2VkQ29sb3I6OlJHQkEgeyAqcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCo+KHNyY1BpeGVsQXJyYXkuZGF0YSgpICsgcGl4ZWxBcnJheUluZGV4
KHgsIHksIHdpZHRoKSkgfSk7Ci0gICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXg8dHlwZT4oZXh0
cmVtdW0sIHBpeGVsKTsKKyAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heChleHRyZW11bSwgcGl4
ZWwsIHR5cGUpOwogICAgIH0KICAgICByZXR1cm4gZXh0cmVtdW07CiB9CiAKLUFMV0FZU19JTkxJ
TkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQs
IGludCB3aWR0aCwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlKQotewotICAgIGlmICh0eXBl
ID09IEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERSkKLSAgICAgICAgcmV0dXJuIGNvbHVtbkV4
dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9FUk9ERT4oc3JjUGl4ZWxBcnJheSwgeCwgeVN0
YXJ0LCB5RW5kLCB3aWR0aCk7Ci0KLSAgICByZXR1cm4gY29sdW1uRXh0cmVtdW08RkVNT1JQSE9M
T0dZX09QRVJBVE9SX0RJTEFURT4oc3JjUGl4ZWxBcnJheSwgeCwgeVN0YXJ0LCB5RW5kLCB3aWR0
aCk7Ci19Ci0KLXVzaW5nIENvbHVtbkV4dHJlbWEgPSBWZWN0b3I8Q29sb3JDb21wb25lbnRzPHVp
bnQ4X3QsIDQ+LCAxNj47Ci0KLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZT4K
LUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGtlcm5lbEV4dHJlbXVt
KGNvbnN0IENvbHVtbkV4dHJlbWEmIGtlcm5lbCkKK2lubGluZSBDb2xvckNvbXBvbmVudHM8dWlu
dDhfdCwgND4gRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjprZXJuZWxFeHRyZW11bShjb25z
dCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKIHsK
ICAgICBhdXRvIGV4dHJlbXVtID0ga2VybmVsWzBdOwogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBp
IDwga2VybmVsLnNpemUoKTsgKytpKQotICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4PHR5cGU+
KGV4dHJlbXVtLCBrZXJuZWxbaV0pOworICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4KGV4dHJl
bXVtLCBrZXJuZWxbaV0sIHR5cGUpOwogCiAgICAgcmV0dXJuIGV4dHJlbXVtOwogfQogCi1BTFdB
WVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRyZW11bShjb25z
dCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsK
LSAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJl
dHVybiBrZXJuZWxFeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU+KGtlcm5lbCk7
Ci0KLSAgICByZXR1cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0RJTEFU
RT4oa2VybmVsKTsKLX0KLQotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlHZW5lcmlj
KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkK
K3ZvaWQgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpYyhj
b25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCiB7
CiAgICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwogCkBAIC0xNzMsMjggKzE3OSwyOCBAQCB2b2lk
IEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsIGludCBzdAogCiAgICAgICAgIC8vIFdlIHN0YXJ0IGF0IHRoZSBsZWZ0IGVk
Z2UsIHNvIGNvbXB1dGUgZXh0cmVtZSBmb3IgdGhlIHJhZGl1c1ggY29sdW1ucy4KICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCByYWRpdXNYOyArK3gpCi0gICAgICAgICAgICBleHRyZW1hLmFw
cGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRp
dXNFbmQsIHdpZHRoLCBtX3R5cGUpKTsKKyAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVt
bkV4dHJlbXVtKHNyY1BpeGVsQXJyYXksIHgsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lk
dGgsIHBhaW50aW5nRGF0YS50eXBlKSk7CiAKICAgICAgICAgLy8gS2VybmVsIGlzIGZpbGxlZCwg
Z2V0IGV4dHJlbWEgb2YgbmV4dCBjb2x1bW4KICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgKyt4KSB7CiAgICAgICAgICAgICBpZiAoeCA8IHdpZHRoIC0gcmFkaXVzWCkKLSAgICAg
ICAgICAgICAgICBleHRyZW1hLmFwcGVuZChjb2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4
ICsgcmFkaXVzWCwgeVJhZGl1c1N0YXJ0LCB5UmFkaXVzRW5kLCB3aWR0aCwgbV90eXBlKSk7Cisg
ICAgICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJh
eSwgeCArIHJhZGl1c1gsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgsIHBhaW50aW5n
RGF0YS50eXBlKSk7CiAKICAgICAgICAgICAgIGlmICh4ID4gcmFkaXVzWCkKICAgICAgICAgICAg
ICAgICBleHRyZW1hLnJlbW92ZSgwKTsKIAogICAgICAgICAgICAgdW5zaWduZWQqIGRlc3RQaXhl
bCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihkc3RQaXhlbEFycmF5LmRhdGEoKSArIHBp
eGVsQXJyYXlJbmRleCh4LCB5LCB3aWR0aCkpOwotICAgICAgICAgICAgKmRlc3RQaXhlbCA9IG1h
a2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyhrZXJuZWxFeHRyZW11bShleHRyZW1hLCBt
X3R5cGUpKS52YWx1ZTsKKyAgICAgICAgICAgICpkZXN0UGl4ZWwgPSBtYWtlUGl4ZWxWYWx1ZUZy
b21Db2xvckNvbXBvbmVudHMoa2VybmVsRXh0cmVtdW0oZXh0cmVtYSwgcGFpbnRpbmdEYXRhLnR5
cGUpKS52YWx1ZTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMqIHBhcmFtKQordm9pZCBG
RU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJh
bWV0ZXJzKiBwYXJhbXMpCiB7Ci0gICAgcGFyYW0tPmZpbHRlci0+cGxhdGZvcm1BcHBseUdlbmVy
aWMoKnBhcmFtLT5wYWludGluZ0RhdGEsIHBhcmFtLT5zdGFydFksIHBhcmFtLT5lbmRZKTsKKyAg
ICBhcHBseVBsYXRmb3JtR2VuZXJpYygqcGFyYW1zLT5wYWludGluZ0RhdGEsIHBhcmFtcy0+c3Rh
cnRZLCBwYXJhbXMtPmVuZFkpOwogfQogCi12b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBs
eShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgRkVNb3JwaG9sb2d5U29m
dHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhKQogewogICAgIC8vIEVtcGlyaWNhbGx5LCBydW50aW1lIGlzIGFwcHJveGltYXRlbHkgbGlu
ZWFyIG92ZXIgcmVhc29uYWJsZSBrZXJuZWwgc2l6ZXMgd2l0aCBhIHNsb3BlIG9mIGFib3V0IDAu
NjUuCiAgICAgZmxvYXQga2VybmVsRmFjdG9yID0gc3FydChwYWludGluZ0RhdGEucmFkaXVzWCAq
IHBhaW50aW5nRGF0YS5yYWRpdXNZKSAqIDAuNjU7CkBAIC0yMDQsNyArMjEwLDcgQEAgdm9pZCBG
RU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHkoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEpCiAgICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLyA4
OwogICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4o
KHBhaW50aW5nRGF0YS53aWR0aCAqIHBhaW50aW5nRGF0YS5oZWlnaHQgKiBrZXJuZWxGYWN0b3Ip
IC8gbWluaW1hbEFyZWEsIG1heE51bVRocmVhZHMpOwogICAgIGlmIChvcHRpbWFsVGhyZWFkTnVt
YmVyID4gMSkgewotICAgICAgICBQYXJhbGxlbEpvYnM8UGxhdGZvcm1BcHBseVBhcmFtZXRlcnM+
IHBhcmFsbGVsSm9icygmV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2Vy
LCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKKyAgICAgICAgUGFyYWxsZWxKb2JzPEFwcGx5UGFyYW1l
dGVycz4gcGFyYWxsZWxKb2JzKCZhcHBseVBsYXRmb3JtV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVt
YmVyKTsKICAgICAgICAgYXV0byBudW1PZlRocmVhZHMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZK
b2JzKCk7CiAgICAgICAgIGlmIChudW1PZlRocmVhZHMgPiAxKSB7CiAgICAgICAgICAgICAvLyBT
cGxpdCB0aGUgam9iIGludG8gImpvYlNpemUiLXNpemVkIGpvYnMgYnV0IHRoZXJlIGEgZmV3IGpv
YnMgdGhhdCBuZWVkIHRvIGJlIHNsaWdodGx5IGxhcmdlciBzaW5jZQpAQCAtMjEzLDggKzIxOSw3
IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYg
cGFpbnRpbmdEYXRhKQogICAgICAgICAgICAgaW50IGpvYnNXaXRoRXh0cmEgPSBwYWludGluZ0Rh
dGEuaGVpZ2h0ICUgbnVtT2ZUaHJlYWRzOwogICAgICAgICAgICAgaW50IGN1cnJlbnRZID0gMDsK
ICAgICAgICAgICAgIGZvciAoaW50IGpvYiA9IG51bU9mVGhyZWFkcyAtIDE7IGpvYiA+PSAwOyAt
LWpvYikgewotICAgICAgICAgICAgICAgIFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbSA9
IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBwYXJhbS5maWx0
ZXIgPSB0aGlzOworICAgICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW0gPSBwYXJh
bGxlbEpvYnMucGFyYW1ldGVyKGpvYik7CiAgICAgICAgICAgICAgICAgcGFyYW0uc3RhcnRZID0g
Y3VycmVudFk7CiAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gam9iIDwgam9ic1dpdGhFeHRy
YSA/IGpvYlNpemUgKyAxIDogam9iU2l6ZTsKICAgICAgICAgICAgICAgICBwYXJhbS5lbmRZID0g
Y3VycmVudFk7CkBAIC0yMjYsMzMgKzIzMSwzMiBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZv
cm1BcHBseShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKICAgICAgICAgLy8gRmFs
bGJhY2sgdG8gc2luZ2xlIHRocmVhZCBtb2RlbAogICAgIH0KIAotICAgIHBsYXRmb3JtQXBwbHlH
ZW5lcmljKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRpbmdEYXRhLmhlaWdodCk7Ci19Ci0KLWJvb2wg
RkVNb3JwaG9sb2d5Ojppc0RlZ2VuZXJhdGUoaW50IHJhZGl1c1gsIGludCByYWRpdXNZKSBjb25z
dAotewotICAgIHJldHVybiByYWRpdXNYIDwgMCB8fCByYWRpdXNZIDwgMCB8fCAoIXJhZGl1c1gg
JiYgIXJhZGl1c1kpOworICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKHBhaW50aW5nRGF0YSwgMCwg
cGFpbnRpbmdEYXRhLmhlaWdodCk7CiB9CiAKLWJvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCitib29sIEZFTW9ycGhvbG9neVNvZnR3
YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVj
dFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVm
ZmVjdCgwKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOwog
Ci0gICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJSZXN1bHQoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgYXV0byBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiAgICAgaWYgKCFkZXN0aW5hdGlvblBpeGVsQnVmZmVy
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxw
aGFJbWFnZSgpKTsKKyAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFn
ZSgpKTsKKworICAgIGF1dG8gaXNEZWdlbmVyYXRlID0gW10oaW50IHJhZGl1c1gsIGludCByYWRp
dXNZKSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuIHJhZGl1c1ggPCAwIHx8IHJhZGl1c1kgPCAw
IHx8ICghcmFkaXVzWCAmJiAhcmFkaXVzWSk7CisgICAgfTsKIAotICAgIEludFJlY3QgZWZmZWN0
RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpOworICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBtX2VmZmVj
dC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpOworICAgIEludFNpemUgcmFkaXVzID0gZmxvb3JlZEludFNpemUoRmxvYXRTaXplKG1fZWZm
ZWN0LnJhZGl1c1goKSwgbV9lZmZlY3QucmFkaXVzWSgpKSk7CiAKLSAgICBJbnRTaXplIHJhZGl1
cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0U2l6ZShtX3JhZGl1c1gsIG1fcmFkaXVzWSkpOwogICAg
IGlmIChpc0RlZ2VuZXJhdGUocmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSkpIHsKICAg
ICAgICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZlciwg
ZWZmZWN0RHJhd2luZ1JlY3QpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBy
YWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fcmFk
aXVzWCwgbV9yYWRpdXNZIH0pKTsKKyAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIu
c2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LnJhZGl1c1goKSwgbV9lZmZlY3QucmFkaXVz
WSgpIH0pKTsKICAgICBpbnQgcmFkaXVzWCA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0Lndp
ZHRoKCkgLSAxLCByYWRpdXMud2lkdGgoKSk7CiAgICAgaW50IHJhZGl1c1kgPSBzdGQ6Om1pbihl
ZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQoKSk7CiAKQEAgLTI2
MSw3ICsyNjUsNyBAQCBib29sIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBh
dXRvIHNvdXJjZVBpeGVsQnVmZmVyID0gaW4tPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVmZmVjdERyYXdpbmdSZWN0LCBvcGVyYXRp
bmdDb2xvclNwYWNlKCkpOworICAgIGF1dG8gc291cmNlUGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4
ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZm
ZWN0RHJhd2luZ1JlY3QsIG1fZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgaWYg
KCFzb3VyY2VQaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNjksNiAr
MjczLDcgQEAgYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImIGZpbHRlcikKICAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5h
dGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CiAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRh
OworICAgIHBhaW50aW5nRGF0YS50eXBlID0gbV9lZmZlY3QubW9ycGhvbG9neU9wZXJhdG9yKCk7
CiAgICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSAmc291cmNlUGl4ZWxBcnJheTsKICAg
ICBwYWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSA9ICZkZXN0aW5hdGlvblBpeGVsQXJyYXk7CiAg
ICAgcGFpbnRpbmdEYXRhLndpZHRoID0gY2VpbGYoZWZmZWN0RHJhd2luZ1JlY3Qud2lkdGgoKSk7
CkBAIC0yNzYsMTAgKzI4MSwxNSBAQCBib29sIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHBhaW50aW5nRGF0YS5yYWRpdXNYID0g
Y2VpbGYocmFkaXVzWCk7CiAgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1kgPSBjZWlsZihyYWRpdXNZ
KTsKIAotICAgIHBsYXRmb3JtQXBwbHkocGFpbnRpbmdEYXRhKTsKKyAgICBhcHBseVBsYXRmb3Jt
KHBhaW50aW5nRGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVNb3JwaG9sb2d5
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0
dXJuIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1
dEVmZmVjdHMoKSk7Cit9CisKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlJiB0eXBlKQogewogICAgIHN3aXRj
aCAodHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgKaW5kZXggZGI4NzBhZTdkZjUwNGUxOWM0ZDA1MTNmOGQ0
MjFiMDFmY2NjMWQxOS4uNTg5NTAyYTZmNWJjNmQyMGI4ZTE5ZWE5ZmY1N2NhNzg5MjVkODI2NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTW9ycGhvbG9neS5oCkBAIC01MywyOSArNTMsNiBAQCBwcml2YXRlOgogCiAgICAgV1RGOjpU
ZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJl
c2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBib29sIGlzRGVnZW5lcmF0ZShp
bnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpIGNvbnN0OwotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0
YSB7Ci0gICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5KiBzcmNQaXhlbEFycmF5OwotICAg
ICAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRo
OwotICAgICAgICBpbnQgaGVpZ2h0OwotICAgICAgICBpbnQgcmFkaXVzWDsKLSAgICAgICAgaW50
IHJhZGl1c1k7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyB7
Ci0gICAgICAgIEZFTW9ycGhvbG9neSogZmlsdGVyOwotICAgICAgICBpbnQgc3RhcnRZOwotICAg
ICAgICBpbnQgZW5kWTsKLSAgICAgICAgY29uc3QgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7
Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1B
cHBseVBhcmFtZXRlcnMqKTsKLQotICAgIHZvaWQgcGxhdGZvcm1BcHBseShjb25zdCBQYWludGlu
Z0RhdGEmKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0
YSYsIGludCBzdGFydFksIGludCBlbmRZKTsKLQogICAgIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUg
bV90eXBlOwogICAgIGZsb2F0IG1fcmFkaXVzWDsKICAgICBmbG9hdCBtX3JhZGl1c1k7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
Y3BwCmluZGV4IDQzMTRhMWE1NjEyNGVkMWM4MzYwOWM5OGMwYjlmYzFhNWQyMmM0ZGUuLjFkYTky
NzcwZTZjMmQyNjVhMWZlODU3MTc4YjVlOGU3ZjU2MzZhNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC0yNSw2
ICsyNSw3IEBACiAjaW5jbHVkZSAiRkVPZmZzZXQuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgor
I2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KQEAgLTY0LDI0ICs2NSwzOSBAQCB2b2lkIEZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBzZXRBYnNvbHV0ZVBhaW50
UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQogCi1ib29sIEZFT2Zmc2V0Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCisvLyBGSVhNRTogTW92
ZSB0aGUgY2xhc3MgRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFu
ZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRU9mZnNldFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVPZmZzZXQ+IHsKKyAgICB1c2luZyBCYXNlID0g
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFT2Zmc2V0PjsKKworcHVibGljOgorICAgIHVz
aW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZp
bHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKK307CisKK2Jvb2wgRkVP
ZmZzZXRTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBG
aWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1sw
XS5nZXQoKTsKIAotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3VsdCgpOwor
ICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAg
IGF1dG8gaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3Vs
dEltYWdlIHx8ICFpbkJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2V0SXNB
bHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CisgICAgbV9lZmZlY3Quc2V0SXNBbHBoYUlt
YWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKLSAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IGRyYXdpbmdSZWdpb24ubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1f
ZHkgfSkpOworICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gbV9lZmZlY3QuZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgZHJhd2luZ1Jl
Z2lvbi5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9lZmZlY3QuZHgoKSwgbV9l
ZmZlY3QuZHkoKSB9KSk7CiAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZm
ZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCiti
b29sIEZFT2Zmc2V0OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIp
Cit7CisgICAgcmV0dXJuIEZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0
ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogVGV4dFN0cmVhbSYgRkVPZmZzZXQ6OmV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNl
bnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZU9mZnNldCI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3Vs
YXJMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKaW5kZXggM2YyZDk4YmE5Yjk5NzEzYmM3ZjA5YzY1NWVh
NTYxZDI2N2MwZjA1ZC4uN2ZiZmQ4MWE2MDhiNjVkZDcxMTc0YTNiNjMxZDNhNDMzNGVlZjg2ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcApAQCAtMzQsNyArMzQsNyBAQCBSZWY8RkVT
cGVjdWxhckxpZ2h0aW5nPiBGRVNwZWN1bGFyTGlnaHRpbmc6OmNyZWF0ZShjb25zdCBDb2xvciYg
bGlnaHRpbmdDb2xvciwgZgogfQogCiBGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdo
dGluZyhjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9h
dCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxV
bml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBs
aWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRpbmcoU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdD
b2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50
LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3Vy
Y2UpLCBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFU3BlY3VsYXJMaWdodGluZykKKyAgICA6IEZFTGln
aHRpbmcoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcsIGxpZ2h0aW5nQ29s
b3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwg
a2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNl
KSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVRpbGUuY3BwCmluZGV4IGE5ZTIxMzM3YjBkMjc0ZTU0ODBkZjY3NjBmODk3YzcyMDE5
ZTU0OGEuLjQzOTA0OGY1YmQxZTE5NzU3ZDkxN2ZhYjI1ZmRhNzM2YjE3ZDU3NzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAK
QEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1
ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUg
IlBhdHRlcm4uaCIKQEAgLTQyLDIyICs0MywzMiBAQCBGRVRpbGU6OkZFVGlsZSgpCiB7CiB9CiAK
LWJvb2wgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIp
CisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVUaWxlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFy
YXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVUaWxlU29mdHdhcmVBcHBsaWVy
IDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRVRpbGU+IHsKKyAgICB1c2lu
ZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFVGlsZT47CisKK3B1YmxpYzoK
KyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBj
b25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCiti
b29sIEZFVGlsZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIEZpbHRlckVmZmVj
dCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3RzWzBdLmdldCgpOwogCi0gICAgYXV0byByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0
KCk7CisgICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7
CiAgICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICgh
cmVzdWx0SW1hZ2UgfHwgIWluQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBz
ZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKKyAgICBtX2VmZmVjdC5zZXRJc0Fs
cGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAogICAgIC8vIFNvdXJjZSBpbnB1dCBuZWVk
cyBtb3JlIGF0dGVudGlvbi4gSXQgaGFzIHRoZSBzaXplIG9mIHRoZSBmaWx0ZXJSZWdpb24gYnV0
IGdpdmVzIHRoZQogICAgIC8vIHNpemUgb2YgdGhlIGN1dHRlZCBzb3VyY2VJbWFnZSBiYWNrLiBU
aGlzIGlzIHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb24gYW5kIG9wdGltaXphdGlvbi4KICAgICBG
bG9hdFJlY3QgdGlsZVJlY3QgPSBpbi0+bWF4RWZmZWN0UmVjdCgpOwogICAgIEZsb2F0UG9pbnQg
aW5NYXhFZmZlY3RMb2NhdGlvbiA9IHRpbGVSZWN0LmxvY2F0aW9uKCk7Ci0gICAgRmxvYXRQb2lu
dCBtYXhFZmZlY3RMb2NhdGlvbiA9IG1heEVmZmVjdFJlY3QoKS5sb2NhdGlvbigpOworICAgIEZs
b2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtX2VmZmVjdC5tYXhFZmZlY3RSZWN0KCkubG9j
YXRpb24oKTsKICAgICBpZiAoaW4tPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OlNvdXJjZUdyYXBoaWMgfHwgaW4tPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
OlNvdXJjZUFscGhhKSB7CiAgICAgICAgIHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigp
OwogICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CkBAIC04Miwx
MSArOTMsMTYgQEAgYm9vbCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0
ZXImIGZpbHRlcikKIAogICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3Vs
dEltYWdlLT5jb250ZXh0KCk7CiAgICAgZmlsdGVyQ29udGV4dC5zZXRGaWxsUGF0dGVybihXVEZN
b3ZlKHBhdHRlcm4pKTsKLSAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSk7CisgICAgZmlsdGVyQ29udGV4
dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2VmZmVjdC5hYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKSkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVUaWxlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJu
IEZFVGlsZVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMo
KSk7Cit9CisKIFRleHRTdHJlYW0mIEZFVGlsZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0
U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeXBlIHJlcHJlc2VudGF0aW9uKSBjb25zdAogewog
ICAgIHRzIDw8IGluZGVudCA8PCAiW2ZlVGlsZSI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggMjY1
Nzc2NjNjYzYzMjc3YmUyZGFhMzY0MDk2ODRiMWQ3MjIyNjlhMS4uNzVkM2JmNDRhMjM3MzUwZjI3
NTVjZjZhMTI5ZjJkNzEzYjMwNDk0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgi
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2Jz
Lmg+CkBAIC0zNCwyMCArMzUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8qCi0gICAg
UHJvZHVjZXMgcmVzdWx0cyBpbiB0aGUgcmFuZ2UgWzEsIDIqKjMxIC0gMl0uIEFsZ29yaXRobSBp
czoKLSAgICByID0gKGEgKiByKSBtb2QgbSB3aGVyZSBhID0gcmFuZEFtcGxpdHVkZSA9IDE2ODA3
IGFuZAotICAgIG0gPSByYW5kTWF4aW11bSA9IDIqKjMxIC0gMSA9IDIxNDc0ODM2NDcsIHIgPSBz
ZWVkLgotICAgIFNlZSBbUGFyayAmIE1pbGxlcl0sIENBQ00gdm9sLiAzMSBuby4gMTAgcC4gMTE5
NSwgT2N0LiAxOTg4Ci0gICAgVG8gdGVzdDogdGhlIGFsZ29yaXRobSBzaG91bGQgcHJvZHVjZSB0
aGUgcmVzdWx0IDEwNDM2MTgwNjUKLSAgICBhcyB0aGUgMTAsMDAwdGggZ2VuZXJhdGVkIG51bWJl
ciBpZiB0aGUgb3JpZ2luYWwgc2VlZCBpcyAxLgotKi8KLXN0YXRpYyBjb25zdCBpbnQgc19wZXJs
aW5Ob2lzZSA9IDQwOTY7Ci1zdGF0aWMgY29uc3QgbG9uZyBzX3JhbmRNYXhpbXVtID0gMjE0NzQ4
MzY0NzsgLy8gMioqMzEgLSAxCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZEFtcGxpdHVkZSA9IDE2
ODA3OyAvLyA3Kio1OyBwcmltaXRpdmUgcm9vdCBvZiBtCi1zdGF0aWMgY29uc3QgaW50IHNfcmFu
ZFEgPSAxMjc3NzM7IC8vIG0gLyBhCi1zdGF0aWMgY29uc3QgaW50IHNfcmFuZFIgPSAyODM2OyAv
LyBtICUgYQotCiBSZWY8RkVUdXJidWxlbmNlPiBGRVR1cmJ1bGVuY2U6OmNyZWF0ZShUdXJidWxl
bmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVks
IGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQogewogICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZFVHVyYnVsZW5jZSh0eXBlLCBiYXNlRnJlcXVlbmN5WCwgYmFz
ZUZyZXF1ZW5jeVksIG51bU9jdGF2ZXMsIHNlZWQsIHN0aXRjaFRpbGVzKSk7CkBAIC0xMTUsNzIg
KzEwMiwxMzQgQEAgYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRpbGVzKGJvb2wgc3RpdGNo
KQogLy8gVGhlIHR1cmJ1bGVuY2UgY2FsY3VsYXRpb24gY29kZSBpcyBhbiBhZGFwdGVkIHZlcnNp
b24gb2Ygd2hhdCBhcHBlYXJzIGluIHRoZSBTVkcgMS4xIHNwZWNpZmljYXRpb246CiAvLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlCiAKLS8vIENv
bXB1dGUgcHNldWRvIHJhbmRvbSBudW1iZXIuCi1pbmxpbmUgbG9uZyBGRVR1cmJ1bGVuY2U6OlBh
aW50aW5nRGF0YTo6cmFuZG9tKCkKLXsKLSAgICBsb25nIHJlc3VsdCA9IHNfcmFuZEFtcGxpdHVk
ZSAqIChzZWVkICUgc19yYW5kUSkgLSBzX3JhbmRSICogKHNlZWQgLyBzX3JhbmRRKTsKLSAgICBp
ZiAocmVzdWx0IDw9IDApCi0gICAgICAgIHJlc3VsdCArPSBzX3JhbmRNYXhpbXVtOwotICAgIHNl
ZWQgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KKy8vIEZJWE1FOiBNb3ZlIHRoZSBj
bGFzcyBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBo
ZWFkZXIgZmlsZXMuCitjbGFzcyBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMg
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFVHVyYnVsZW5jZT4geworICAgIHVzaW5nIEJh
c2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVUdXJidWxlbmNlPjsKKworcHVibGlj
OgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYs
IGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICAvLyBQcm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEgLSAy
XS4gQWxnb3JpdGhtIGlzOgorICAgIC8vIHIgPSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEgPSByYW5k
QW1wbGl0dWRlID0gMTY4MDcgYW5kCisgICAgLy8gbSA9IHJhbmRNYXhpbXVtID0gMioqMzEgLSAx
ID0gMjE0NzQ4MzY0NywgciA9IHNlZWQuCisgICAgLy8gU2VlIFtQYXJrICYgTWlsbGVyXSwgQ0FD
TSB2b2wuIDMxIG5vLiAxMCBwLiAxMTk1LCBPY3QuIDE5ODgKKyAgICAvLyBUbyB0ZXN0OiB0aGUg
YWxnb3JpdGhtIHNob3VsZCBwcm9kdWNlIHRoZSByZXN1bHQgMTA0MzYxODA2NQorICAgIC8vIGFz
IHRoZSAxMCwwMDB0aCBnZW5lcmF0ZWQgbnVtYmVyIGlmIHRoZSBvcmlnaW5hbCBzZWVkIGlzIDEu
CisgICAgc3RhdGljIGNvbnN0IGludCBwZXJsaW5Ob2lzZSA9IDQwOTY7CisgICAgc3RhdGljIGNv
bnN0IGxvbmcgcmFuZE1heGltdW0gPSAyMTQ3NDgzNjQ3OyAvLyAyKiozMSAtIDEKKyAgICBzdGF0
aWMgY29uc3QgaW50IHJhbmRBbXBsaXR1ZGUgPSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJv
b3Qgb2YgbQorICAgIHN0YXRpYyBjb25zdCBpbnQgcmFuZFEgPSAxMjc3NzM7IC8vIG0gLyBhCisg
ICAgc3RhdGljIGNvbnN0IGludCByYW5kUiA9IDI4MzY7IC8vIG0gJSBhCisKKyAgICBzdGF0aWMg
Y29uc3QgaW50IGJsb2NrU2l6ZSA9IDI1NjsKKyAgICBzdGF0aWMgY29uc3QgaW50IGJsb2NrTWFz
ayA9IGJsb2NrU2l6ZSAtIDE7CisKKyAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKKyAgICAgICAg
Ly8gQ29tcHV0ZSBwc2V1ZG8gcmFuZG9tIG51bWJlci4KKyAgICAgICAgbG9uZyByYW5kb20oKQor
ICAgICAgICB7CisgICAgICAgICAgICBsb25nIHJlc3VsdCA9IHJhbmRBbXBsaXR1ZGUgKiAoc2Vl
ZCAlIHJhbmRRKSAtIHJhbmRSICogKHNlZWQgLyByYW5kUSk7CisgICAgICAgICAgICBpZiAocmVz
dWx0IDw9IDApCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHJhbmRNYXhpbXVtOworICAgICAg
ICAgICAgc2VlZCA9IHJlc3VsdDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0KIAotaW5saW5lIGZsb2F0IHNtb290aEN1cnZlKGZsb2F0IHQpCi17Ci0gICAgcmV0dXJuIHQg
KiB0ICogKDMgLSAyICogdCk7Ci19CisgICAgICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGU7CisgICAg
ICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYOworICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WTsK
KyAgICAgICAgaW50IG51bU9jdGF2ZXM7CisgICAgICAgIGxvbmcgc2VlZDsKKyAgICAgICAgYm9v
bCBzdGl0Y2hUaWxlczsKKyAgICAgICAgSW50U2l6ZSBwYWludGluZ1NpemU7CiAKLWlubGluZSBm
bG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0IGIpCi17Ci0g
ICAgcmV0dXJuIGEgKyB0ICogKGIgLSBhKTsKLX0KKyAgICAgICAgaW50IGxhdHRpY2VTZWxlY3Rv
clsyICogYmxvY2tTaXplICsgMl07CisgICAgICAgIGZsb2F0IGdyYWRpZW50WzRdWzIgKiBibG9j
a1NpemUgKyAyXVsyXTsKKyAgICB9OworCisgICAgc3RydWN0IFN0aXRjaERhdGEgeworICAgICAg
ICBpbnQgd2lkdGggeyAwIH07IC8vIEhvdyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0
aXRjaGluZy4KKyAgICAgICAgaW50IHdyYXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdy
YXAuCisgICAgICAgIGludCBoZWlnaHQgeyAwIH07CisgICAgICAgIGludCB3cmFwWSB7IDAgfTsK
KyAgICB9OworCisgICAgc3RydWN0IEFwcGx5UGFyYW1ldGVycyB7CisgICAgICAgIEludFJlY3Qg
ZmlsdGVyUmVnaW9uOworICAgICAgICBGbG9hdFNpemUgZmlsdGVyU2NhbGU7CisgICAgICAgIFVp
bnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5OworICAgICAgICBQYWludGluZ0RhdGEqIHBhaW50
aW5nRGF0YTsKKyAgICAgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOworICAgICAgICBpbnQgc3Rh
cnRZOworICAgICAgICBpbnQgZW5kWTsKKyAgICB9OwogCi12b2lkIEZFVHVyYnVsZW5jZTo6aW5p
dFBhaW50KFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQorICAgIHN0YXRpYyBpbmxpbmUgZmxv
YXQgc21vb3RoQ3VydmUoZmxvYXQgdCkgeyByZXR1cm4gdCAqIHQgKiAoMyAtIDIgKiB0KTsgfQor
ICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgbGluZWFySW50ZXJwb2xhdGlvbihmbG9hdCB0LCBmbG9h
dCBhLCBmbG9hdCBiKSB7IHJldHVybiBhICsgdCAqIChiIC0gYSk7IH0KKworICAgIHN0YXRpYyBQ
YWludGluZ0RhdGEgaW5pdFBhaW50aW5nRGF0YShUdXJidWxlbmNlVHlwZSwgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgbG9uZyBzZWVk
LCBib29sIHN0aXRjaFRpbGVzLCBjb25zdCBJbnRTaXplJiBwYWludGluZ1NpemUpOworICAgIHN0
YXRpYyBTdGl0Y2hEYXRhIGNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQm
IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVksIGJvb2wgc3RpdGNoVGlsZXMp
OworCisgICAgc3RhdGljIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gbm9pc2UyRChjb25zdCBQ
YWludGluZ0RhdGEmLCBjb25zdCBTdGl0Y2hEYXRhJiwgY29uc3QgRmxvYXRQb2ludCYgbm9pc2VW
ZWN0b3IpOworICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gdG9JbnRCYXNl
ZENvbG9yQ29tcG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENv
bXBvbmVudHMpOworICAgIHN0YXRpYyBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gY2FsY3Vs
YXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0
YSwgY29uc3QgRmxvYXRQb2ludCYpOworCisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybUdl
bmVyaWMoY29uc3QgSW50UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRl
clNjYWxlLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRh
JiwgU3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOworICAgIHN0YXRpYyB2b2lkIGFw
cGx5UGxhdGZvcm1Xb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7CisgICAgc3RhdGljIHZvaWQgYXBw
bHlQbGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0U2l6ZSYg
ZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBQYWludGluZ0RhdGEm
LCBTdGl0Y2hEYXRhJik7Cit9OworCitGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OlBhaW50
aW5nRGF0YSBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmluaXRQYWludGluZ0RhdGEoVHVy
YnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lZLCBpbnQgbnVtT2N0YXZlcywgbG9uZyBzZWVkLCBib29sIHN0aXRjaFRpbGVzLCBjb25zdCBJ
bnRTaXplJiBwYWludGluZ1NpemUpCiB7Ci0gICAgZmxvYXQgbm9ybWFsaXphdGlvbkZhY3RvcjsK
KyAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhIHsgdHlwZSwgYmFzZUZyZXF1ZW5jeVgsIGJh
c2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcywgcGFpbnRpbmdTaXpl
LCB7IH0sIHsgfSB9OwogCi0gICAgLy8gVGhlIHNlZWQgdmFsdWUgY2xhbXAgdG8gdGhlIHJhbmdl
IFsxLCBzX3JhbmRNYXhpbXVtIC0gMV0uCisgICAgLy8gVGhlIHNlZWQgdmFsdWUgY2xhbXAgdG8g
dGhlIHJhbmdlIFsxLCByYW5kTWF4aW11bSAtIDFdLgogICAgIGlmIChwYWludGluZ0RhdGEuc2Vl
ZCA8PSAwKQotICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9IC0ocGFpbnRpbmdEYXRhLnNlZWQg
JSAoc19yYW5kTWF4aW11bSAtIDEpKSArIDE7Ci0gICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkID4g
c19yYW5kTWF4aW11bSAtIDEpCi0gICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gc19yYW5kTWF4
aW11bSAtIDE7CisgICAgICAgIHBhaW50aW5nRGF0YS5zZWVkID0gLShwYWludGluZ0RhdGEuc2Vl
ZCAlIChyYW5kTWF4aW11bSAtIDEpKSArIDE7CisgICAgaWYgKHBhaW50aW5nRGF0YS5zZWVkID4g
cmFuZE1heGltdW0gLSAxKQorICAgICAgICBwYWludGluZ0RhdGEuc2VlZCA9IHJhbmRNYXhpbXVt
IC0gMTsKIAogICAgIGZsb2F0KiBncmFkaWVudDsKICAgICBmb3IgKGludCBjaGFubmVsID0gMDsg
Y2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNf
YmxvY2tTaXplOyArK2kpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBibG9ja1NpemU7
ICsraSkgewogICAgICAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltpXSA9IGk7
CiAgICAgICAgICAgICBncmFkaWVudCA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtp
XTsKICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBncmFkaWVudFswXSA9IHN0YXRp
Y19jYXN0PGZsb2F0PigocGFpbnRpbmdEYXRhLnJhbmRvbSgpICUgKDIgKiBzX2Jsb2NrU2l6ZSkp
IC0gc19ibG9ja1NpemUpIC8gc19ibG9ja1NpemU7Ci0gICAgICAgICAgICAgICAgZ3JhZGllbnRb
MV0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19i
bG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNfYmxvY2tTaXplOworICAgICAgICAgICAgICAg
IGdyYWRpZW50WzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkg
JSAoMiAqIGJsb2NrU2l6ZSkpIC0gYmxvY2tTaXplKSAvIGJsb2NrU2l6ZTsKKyAgICAgICAgICAg
ICAgICBncmFkaWVudFsxXSA9IHN0YXRpY19jYXN0PGZsb2F0PigocGFpbnRpbmdEYXRhLnJhbmRv
bSgpICUgKDIgKiBibG9ja1NpemUpKSAtIGJsb2NrU2l6ZSkgLyBibG9ja1NpemU7CiAgICAgICAg
ICAgICB9IHdoaWxlICghZ3JhZGllbnRbMF0gJiYgIWdyYWRpZW50WzFdKTsKLSAgICAgICAgICAg
IG5vcm1hbGl6YXRpb25GYWN0b3IgPSBzdGQ6Omh5cG90KGdyYWRpZW50WzBdLCBncmFkaWVudFsx
XSk7CisgICAgICAgICAgICBmbG9hdCBub3JtYWxpemF0aW9uRmFjdG9yID0gc3RkOjpoeXBvdChn
cmFkaWVudFswXSwgZ3JhZGllbnRbMV0pOwogICAgICAgICAgICAgZ3JhZGllbnRbMF0gLz0gbm9y
bWFsaXphdGlvbkZhY3RvcjsKICAgICAgICAgICAgIGdyYWRpZW50WzFdIC89IG5vcm1hbGl6YXRp
b25GYWN0b3I7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKGludCBpID0gc19ibG9ja1Np
emUgLSAxOyBpID4gMDsgLS1pKSB7CisgICAgZm9yIChpbnQgaSA9IGJsb2NrU2l6ZSAtIDE7IGkg
PiAwOyAtLWkpIHsKICAgICAgICAgaW50IGsgPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9y
W2ldOwotICAgICAgICBpbnQgaiA9IHBhaW50aW5nRGF0YS5yYW5kb20oKSAlIHNfYmxvY2tTaXpl
OworICAgICAgICBpbnQgaiA9IHBhaW50aW5nRGF0YS5yYW5kb20oKSAlIGJsb2NrU2l6ZTsKICAg
ICAgICAgQVNTRVJUKGogPj0gMCk7Ci0gICAgICAgIEFTU0VSVChqIDwgMiAqIHNfYmxvY2tTaXpl
ICsgMik7CisgICAgICAgIEFTU0VSVChqIDwgMiAqIGJsb2NrU2l6ZSArIDIpOwogICAgICAgICBw
YWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldID0gcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxl
Y3RvcltqXTsKICAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvcltqXSA9IGs7CiAg
ICAgfQogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2Jsb2NrU2l6ZSArIDI7ICsraSkgewot
ICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW3NfYmxvY2tTaXplICsgaV0gPSBw
YWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
YmxvY2tTaXplICsgMjsgKytpKSB7CisgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0
b3JbYmxvY2tTaXplICsgaV0gPSBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9yW2ldOwogICAg
ICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDQ7ICsrY2hhbm5lbCkgewotICAg
ICAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW3NfYmxvY2tTaXplICsgaV1b
MF0gPSBwYWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1baV1bMF07Ci0gICAgICAgICAgICBw
YWludGluZ0RhdGEuZ3JhZGllbnRbY2hhbm5lbF1bc19ibG9ja1NpemUgKyBpXVsxXSA9IHBhaW50
aW5nRGF0YS5ncmFkaWVudFtjaGFubmVsXVtpXVsxXTsKKyAgICAgICAgICAgIHBhaW50aW5nRGF0
YS5ncmFkaWVudFtjaGFubmVsXVtibG9ja1NpemUgKyBpXVswXSA9IHBhaW50aW5nRGF0YS5ncmFk
aWVudFtjaGFubmVsXVtpXVswXTsKKyAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtj
aGFubmVsXVtibG9ja1NpemUgKyBpXVsxXSA9IHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVs
XVtpXVsxXTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiBwYWludGluZ0RhdGE7CiB9
CiAKLUZFVHVyYnVsZW5jZTo6U3RpdGNoRGF0YSBGRVR1cmJ1bGVuY2U6OmNvbXB1dGVTdGl0Y2hp
bmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZy
ZXF1ZW5jeVkpIGNvbnN0CitGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OlN0aXRjaERhdGEg
RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGls
ZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZLCBib29s
IHN0aXRjaFRpbGVzKQogewotICAgIGlmICghbV9zdGl0Y2hUaWxlcykKKyAgICBpZiAoIXN0aXRj
aFRpbGVzKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgZmxvYXQgdGlsZVdpZHRoID0gdGls
ZVNpemUud2lkdGgoKTsKQEAgLTIwOSwxNSArMjU4LDE1IEBAIEZFVHVyYnVsZW5jZTo6U3RpdGNo
RGF0YSBGRVR1cmJ1bGVuY2U6OmNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxv
YXQmCiAKICAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7CiAgICAgc3RpdGNoRGF0YS53aWR0aCA9
IHJvdW5kZih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCk7Ci0gICAgc3RpdGNoRGF0YS53cmFw
WCA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLndpZHRoOworICAgIHN0aXRjaERhdGEud3Jh
cFggPSBwZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7CiAgICAgc3RpdGNoRGF0YS5oZWln
aHQgPSByb3VuZGYodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKTsKLSAgICBzdGl0Y2hEYXRh
LndyYXBZID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEuaGVpZ2h0OworICAgIHN0aXRjaERh
dGEud3JhcFkgPSBwZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEuaGVpZ2h0OwogCiAgICAgcmV0dXJu
IHN0aXRjaERhdGE7CiB9CiAKIC8vIFRoaXMgaXMgdGFrZW4gMToxIGZyb20gU1ZHIHNwZWM6IGh0
dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50
LgotQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY29uc3Qg
UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRjaERhdGEs
IGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKSBjb25zdAorQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6Om5vaXNlMkQoY29uc3QgUGFpbnRp
bmdEYXRhJiBwYWludGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRjaERhdGEsIGNvbnN0
IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKQogewogICAgIHN0cnVjdCBOb2lzZVBvc2l0aW9uIHsK
ICAgICAgICAgaW50IGluZGV4OyAvLyBieDAsIGJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgpAQCAtMjMw
LDcgKzI3OSw3IEBAIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxlbmNlOjpub2lz
ZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhCiAgICAgICAgICAgICAvLyAgYngw
ID0gKGludCl0OwogICAgICAgICAgICAgLy8gIGJ4MSA9IGJ4MCsxOwogICAgICAgICAgICAgLy8g
IHJ4MCA9IHQgLSAoaW50KXQ7Ci0gICAgICAgICAgICBmbG9hdCBwb3NpdGlvbiA9IGNvbXBvbmVu
dCArIHNfcGVybGluTm9pc2U7CisgICAgICAgICAgICBmbG9hdCBwb3NpdGlvbiA9IGNvbXBvbmVu
dCArIHBlcmxpbk5vaXNlOwogICAgICAgICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KHBv
c2l0aW9uKTsKICAgICAgICAgICAgIG5leHRJbmRleCA9IGluZGV4ICsgMTsKICAgICAgICAgICAg
IGZyYWN0aW9uID0gcG9zaXRpb24gLSBpbmRleDsKQEAgLTI1NCw3ICszMDMsNyBAQCBDb2xvckNv
bXBvbmVudHM8ZmxvYXQsIDQ+IEZFVHVyYnVsZW5jZTo6bm9pc2UyRChjb25zdCBQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YQogICAgIE5vaXNlUG9zaXRpb24gbm9pc2VZKG5vaXNlVmVjdG9yLnko
KSk7CiAKICAgICAvLyBJZiBzdGl0Y2hpbmcsIGFkanVzdCBsYXR0aWNlIHBvaW50cyBhY2NvcmRp
bmdseS4KLSAgICBpZiAobV9zdGl0Y2hUaWxlcykgeworICAgIGlmIChwYWludGluZ0RhdGEuc3Rp
dGNoVGlsZXMpIHsKICAgICAgICAgbm9pc2VYLnN0aXRjaChzdGl0Y2hEYXRhLndpZHRoLCBzdGl0
Y2hEYXRhLndyYXBYKTsKICAgICAgICAgbm9pc2VZLnN0aXRjaChzdGl0Y2hEYXRhLmhlaWdodCwg
c3RpdGNoRGF0YS53cmFwWSk7CiAgICAgfQpAQCAtMjYzLDEwICszMTIsMTAgQEAgQ29sb3JDb21w
b25lbnRzPGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRh
JiBwYWludGluZ0RhdGEKICAgICAvLyBieDEgJj0gQk07CiAgICAgLy8gYnkwICY9IEJNOwogICAg
IC8vIGJ5MSAmPSBCTTsKLSAgICBub2lzZVguaW5kZXggJj0gc19ibG9ja01hc2s7Ci0gICAgbm9p
c2VYLm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKLSAgICBub2lzZVkuaW5kZXggJj0gc19ibG9j
a01hc2s7Ci0gICAgbm9pc2VZLm5leHRJbmRleCAmPSBzX2Jsb2NrTWFzazsKKyAgICBub2lzZVgu
aW5kZXggJj0gYmxvY2tNYXNrOworICAgIG5vaXNlWC5uZXh0SW5kZXggJj0gYmxvY2tNYXNrOwor
ICAgIG5vaXNlWS5pbmRleCAmPSBibG9ja01hc2s7CisgICAgbm9pc2VZLm5leHRJbmRleCAmPSBi
bG9ja01hc2s7CiAKICAgICAvLyBpID0gdUxhdHRpY2VTZWxlY3RvcltieDBdOwogICAgIC8vIGog
PSB1TGF0dGljZVNlbGVjdG9yW2J4MV07CkBAIC0zMjMsNyArMzcyLDcgQEAgQ29sb3JDb21wb25l
bnRzPGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEKIAogLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJzLmh0bWwj
ZmVUdXJidWxlbmNlRWxlbWVudCBkZXNjcmliZXMgdGhpcyBjb252ZXJzaW9uIHRvIGNvbG9yIGNv
bXBvbmVudHMuCiAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGNvbG9yQ29udmVydDxTUkdCQTx1
aW50OD4+KFNSR0JBPGZsb2F0PikgdG8gZ2V0IHRoZSBzYW1lIGJlaGF2aW9yLgotc3RhdGljIGlu
bGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50
cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENvbXBvbmVudHMpCitDb2xv
ckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjp0b0lu
dEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4mIGZs
b2F0Q29tcG9uZW50cykKIHsKICAgICByZXR1cm4gewogICAgICAgICBzdGQ6OmNsYW1wPHVpbnQ4
X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1KSwgMCwgMjU1KSwK
QEAgLTMzMywxMyArMzgyLDEzIEBAIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4
X3QsIDQ+IHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDCiAgICAgfTsKIH0K
IAotQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5jZTo6Y2FsY3VsYXRlVHVy
YnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0
aXRjaERhdGEgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CitDb2xv
ckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpjYWxj
dWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsK
ICAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdDsK
ICAgICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50LngoKSAqIHBhaW50aW5nRGF0YS5iYXNl
RnJlcXVlbmN5WCwgcG9pbnQueSgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lZKTsKICAg
ICBmbG9hdCByYXRpbyA9IDE7Ci0gICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgbV9u
dW1PY3RhdmVzOyArK29jdGF2ZSkgewotICAgICAgICBpZiAobV90eXBlID09IFR1cmJ1bGVuY2VU
eXBlOjpGcmFjdGFsTm9pc2UpCisgICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgcGFp
bnRpbmdEYXRhLm51bU9jdGF2ZXM7ICsrb2N0YXZlKSB7CisgICAgICAgIGlmIChwYWludGluZ0Rh
dGEudHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQogICAgICAgICAgICAgdHVy
YnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRh
LCBub2lzZVZlY3RvcikgLyByYXRpbzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdHVyYnVs
ZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCBu
b2lzZVZlY3RvcikuYWJzKCkgLyByYXRpbzsKQEAgLTM0OCwzMiArMzk3LDMxIEBAIENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1
ZUZvclBvaW50KGNvbnN0CiAgICAgICAgIG5vaXNlVmVjdG9yLnNldFkobm9pc2VWZWN0b3IueSgp
ICogMik7CiAgICAgICAgIHJhdGlvICo9IDI7CiAKLSAgICAgICAgaWYgKG1fc3RpdGNoVGlsZXMp
IHsKLSAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFsdWVzLiBTdWJ0cmFjdGluZyBzX3Bl
cmxpbk5vaXNlIGJlZm9yZSB0aGUgbXVsdGlwbGljYXRpb24gYW5kCisgICAgICAgIGlmIChwYWlu
dGluZ0RhdGEuc3RpdGNoVGlsZXMpIHsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFs
dWVzLiBTdWJ0cmFjdGluZyBwZXJsaW5Ob2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFu
ZAogICAgICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRy
YWN0aW5nIGl0IG9uY2UuCiAgICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7Ci0gICAg
ICAgICAgICBzdGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Blcmxp
bk5vaXNlOworICAgICAgICAgICAgc3RpdGNoRGF0YS53cmFwWCA9IDIgKiBzdGl0Y2hEYXRhLndy
YXBYIC0gcGVybGluTm9pc2U7CiAgICAgICAgICAgICBzdGl0Y2hEYXRhLmhlaWdodCAqPSAyOwot
ICAgICAgICAgICAgc3RpdGNoRGF0YS53cmFwWSA9IDIgKiBzdGl0Y2hEYXRhLndyYXBZIC0gc19w
ZXJsaW5Ob2lzZTsKKyAgICAgICAgICAgIHN0aXRjaERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0
YS53cmFwWSAtIHBlcmxpbk5vaXNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gVGhlIHZh
bHVlIG9mIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCBjb21lcyBmcm9tICgodHVyYnVsZW5jZUZ1
bmN0aW9uUmVzdWx0ICogMjU1KSArIDI1NSkgLyAyIGJ5IGZyYWN0YWxOb2lzZQogICAgIC8vIGFu
ZCAodHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMjU1KSBieSB0dXJidWxlbmNlLgotICAgIGlm
IChtX3R5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKKyAgICBpZiAocGFpbnRp
bmdEYXRhLnR5cGUgPT0gVHVyYnVsZW5jZVR5cGU6OkZyYWN0YWxOb2lzZSkKICAgICAgICAgdHVy
YnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0gdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICogMC41ZiAr
IDAuNWY7CiAKICAgICByZXR1cm4gdG9JbnRCYXNlZENvbG9yQ29tcG9uZW50cyh0dXJidWxlbmNl
RnVuY3Rpb25SZXN1bHQpOwogfQogCi12b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbihjb25z
dCBGaWx0ZXImIGZpbHRlciwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFBh
aW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBzdGFy
dFksIGludCBlbmRZKSBjb25zdAordm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IEludFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxv
YXRTaXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0
IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBTdGl0Y2hEYXRhIHN0aXRjaERhdGEsIGludCBz
dGFydFksIGludCBlbmRZKQogewogICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKIAotICAgIElu
dFJlY3QgZmlsdGVyUmVnaW9uID0gYWJzb2x1dGVQYWludFJlY3QoKTsKICAgICBGbG9hdFBvaW50
IHBvaW50KDAsIGZpbHRlclJlZ2lvbi55KCkgKyBzdGFydFkpOwogICAgIGludCBpbmRleE9mUGl4
ZWxDaGFubmVsID0gc3RhcnRZICogKGZpbHRlclJlZ2lvbi53aWR0aCgpIDw8IDIpOwotICAgIEZs
b2F0U2l6ZSBpbnZlcnNlU2NhbGUgPSB7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53aWR0aCgp
LCAxIC8gZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkgfTsKKyAgICBGbG9hdFNpemUgaW52
ZXJzZVNjYWxlID0geyAxIC8gZmlsdGVyU2NhbGUud2lkdGgoKSwgMSAvIGZpbHRlclNjYWxlLmhl
aWdodCgpIH07CiAKICAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsgKyt5KSB7CiAg
ICAgICAgIHBvaW50LnNldFkocG9pbnQueSgpICsgMSk7CkBAIC0zODgsNDUgKzQzNiwyMiBAQCB2
b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbihjb25zdCBGaWx0ZXImIGZpbHRlciwgVWludDhD
bGFtcGVkQXJyYXkmIHBpeGVsQXJyYQogICAgIH0KIH0KIAotdm9pZCBGRVR1cmJ1bGVuY2U6OmZp
bGxSZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCit2b2lkIEZF
VHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybVdvcmtlcihBcHBseVBhcmFt
ZXRlcnMqIHBhcmFtZXRlcnMpCiB7Ci0gICAgcGFyYW1ldGVycy0+ZWZmZWN0LT5maWxsUmVnaW9u
KCpwYXJhbWV0ZXJzLT5maWx0ZXIsICpwYXJhbWV0ZXJzLT5waXhlbEFycmF5LCAqcGFyYW1ldGVy
cy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGl0Y2hEYXRhLCBwYXJhbWV0ZXJzLT5zdGFy
dFksIHBhcmFtZXRlcnMtPmVuZFkpOworICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljKHBhcmFtZXRl
cnMtPmZpbHRlclJlZ2lvbiwgcGFyYW1ldGVycy0+ZmlsdGVyU2NhbGUsICpwYXJhbWV0ZXJzLT5w
aXhlbEFycmF5LCAqcGFyYW1ldGVycy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT5zdGl0Y2hE
YXRhLCBwYXJhbWV0ZXJzLT5zdGFydFksIHBhcmFtZXRlcnMtPmVuZFkpOwogfQogCi1ib29sIEZF
VHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQor
dm9pZCBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0oY29uc3QgSW50
UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBVaW50OENs
YW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRj
aERhdGEmIHN0aXRjaERhdGEpCiB7Ci0gICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0g
cGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXItPmRhdGEoKTsKLQotICAgIEludFNpemUgcmVzdWx0U2l6ZShhYnNvbHV0ZVBhaW50UmVj
dCgpLnNpemUoKSk7Ci0KLSAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ZGVzdGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIEludFNpemUgdGlsZVNpemUgPSByb3VuZGVkSW50U2l6ZShmaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oKS5zaXplKCkpOwotCi0gICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVggPSBt
X2Jhc2VGcmVxdWVuY3lYOwotICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lZID0gbV9iYXNlRnJlcXVl
bmN5WTsKLSAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGEgPSBjb21wdXRlU3RpdGNoaW5nKHRpbGVT
aXplLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVkpOworICAgIGludCBoZWlnaHQgPSBm
aWx0ZXJSZWdpb24uaGVpZ2h0KCk7CisgICAgdW5zaWduZWQgYXJlYSA9IGZpbHRlclJlZ2lvbi5h
cmVhKCk7CiAKLSAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgdGlsZVNpemUs
IGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSk7Ci0gICAgaW5pdFBhaW50KHBhaW50aW5n
RGF0YSk7CisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbWFsUmVjdERpbWVuc2lvbiA9ICgxMDAg
KiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icy4KKyAgICB1
bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0gZmlsdGVyUmVnaW9uLmhlaWdodCgpIC8gODsKKyAgICB1
bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWduZWQ+KGFyZWEgLyBt
aW5pbWFsUmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7CiAKLSAgICBhdXRvIGFyZWEgPSBy
ZXN1bHRTaXplLmFyZWEoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGludCBoZWlnaHQgPSByZXN1bHRTaXplLmhlaWdodCgpOwot
Ci0gICAgdW5zaWduZWQgbWF4TnVtVGhyZWFkcyA9IGhlaWdodCAvIDg7Ci0gICAgdW5zaWduZWQg
b3B0aW1hbFRocmVhZE51bWJlciA9IHN0ZDo6bWluPHVuc2lnbmVkPihhcmVhIC8gc19taW5pbWFs
UmVjdERpbWVuc2lvbiwgbWF4TnVtVGhyZWFkcyk7CiAgICAgaWYgKG9wdGltYWxUaHJlYWROdW1i
ZXIgPiAxKSB7Ci0gICAgICAgIFBhcmFsbGVsSm9iczxGaWxsUmVnaW9uUGFyYW1ldGVycz4gcGFy
YWxsZWxKb2JzKCZXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIsIG9wdGlt
YWxUaHJlYWROdW1iZXIpOworICAgICAgICBQYXJhbGxlbEpvYnM8QXBwbHlQYXJhbWV0ZXJzPiBw
YXJhbGxlbEpvYnMoJmFwcGx5UGxhdGZvcm1Xb3JrZXIsIG9wdGltYWxUaHJlYWROdW1iZXIpOwog
CiAgICAgICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJheQogICAgICAgICBhdXRvIG51bUpv
YnMgPSBwYXJhbGxlbEpvYnMubnVtYmVyT2ZKb2JzKCk7CkBAIC00MzcsMTAgKzQ2MiwxMCBAQCBi
b29sIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmls
dGVyKQogICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRZID0gMDsKIAogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUpvYnM7ICsraSkgewotICAgICAgICAgICAgICAgIEZp
bGxSZWdpb25QYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGkpOwot
ICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXIgPSAmZmlsdGVyOwotICAgICAgICAgICAgICAg
IHBhcmFtcy5lZmZlY3QgPSB0aGlzOwotICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5
ID0gJmRlc3RpbmF0aW9uUGl4ZWxBcnJheTsKKyAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRl
cnMmIHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoaSk7CisgICAgICAgICAgICAgICAg
cGFyYW1zLmZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsKKyAgICAgICAgICAgICAgICBwYXJh
bXMuZmlsdGVyU2NhbGUgPSBmaWx0ZXJTY2FsZTsKKyAgICAgICAgICAgICAgICBwYXJhbXMucGl4
ZWxBcnJheSA9ICZwaXhlbEFycmF5OwogICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0Rh
dGEgPSAmcGFpbnRpbmdEYXRhOwogICAgICAgICAgICAgICAgIHBhcmFtcy5zdGl0Y2hEYXRhID0g
c3RpdGNoRGF0YTsKICAgICAgICAgICAgICAgICBwYXJhbXMuc3RhcnRZID0gc3RhcnRZOwpAQCAt
NDUxLDE1ICs0NzYsNDggQEAgYm9vbCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcGFy
YWxsZWxKb2JzLmV4ZWN1dGUoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xl
IHRocmVhZGVkIG1vZGUgaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYSBuZXcgdGhyZWFkIG9yIHRo
ZSBwYWludCBhcmVhIGlzIHRvbyBzbWFsbC4KLSAgICBmaWxsUmVnaW9uKGZpbHRlciwgZGVzdGlu
YXRpb25QaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIDAsIGhlaWdodCk7Cisg
ICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoZmlsdGVyUmVnaW9uLCBmaWx0ZXJTY2FsZSwgcGl4ZWxB
cnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hEYXRhLCAwLCBoZWlnaHQpOworfQorCitib29sIEZF
VHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IEZpbHRlckVmZmVjdFZlY3RvciYpCit7CisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2VmZmVjdC5hYnNv
bHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CisgICAgaWYgKHJlc3VsdFNpemUuYXJlYSgpLmhhc092
ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgZGVzdGluYXRp
b25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgaWYg
KHJlc3VsdFNpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS56
ZXJvRmlsbCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBhdXRvIHRpbGVT
aXplID0gcm91bmRlZEludFNpemUobV9lZmZlY3QuZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCku
c2l6ZSgpKTsKKworICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lYID0gbV9lZmZlY3QuYmFzZUZyZXF1
ZW5jeVgoKTsKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WSA9IG1fZWZmZWN0LmJhc2VGcmVxdWVu
Y3lZKCk7CisgICAgYXV0byBzdGl0Y2hEYXRhID0gY29tcHV0ZVN0aXRjaGluZyh0aWxlU2l6ZSwg
YmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZLCBtX2VmZmVjdC5zdGl0Y2hUaWxlcygpKTsK
KworICAgIGF1dG8gcGFpbnRpbmdEYXRhID0gaW5pdFBhaW50aW5nRGF0YShtX2VmZmVjdC50eXBl
KCksIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbV9lZmZlY3QubnVtT2N0YXZlcygp
LCBtX2VmZmVjdC5zZWVkKCksIG1fZWZmZWN0LnN0aXRjaFRpbGVzKCksIHRpbGVTaXplKTsKKwor
ICAgIGFwcGx5UGxhdGZvcm0obV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKSwgZmlsdGVyLmZp
bHRlclNjYWxlKCksIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgcGFpbnRpbmdEYXRhLCBzdGl0Y2hE
YXRhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVUdXJi
dWxlbmNlU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygp
KTsKK30KKwogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFR1
cmJ1bGVuY2VUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApp
bmRleCBlNjk4YjMxM2YxODg2MjUwMDM0YjA2NTkwZDFlMmIzZWQ2ZGMzOTg4Li43YzQ3Yzc4NzQ5
Yjg1NmZjOWY5MWFmODRjNjEzNGNmNDdkZjA2ZTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKQEAgLTU4LDY0
ICs1OCwxMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRTdGl0Y2hUaWxlcyhib29sKTsKIAogcHJp
dmF0ZToKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfYmxvY2tTaXplID0gMjU2OwotICAgIHN0YXRp
YyBjb25zdCBpbnQgc19ibG9ja01hc2sgPSBzX2Jsb2NrU2l6ZSAtIDE7Ci0KLSAgICBzdGF0aWMg
Y29uc3QgaW50IHNfbWluaW1hbFJlY3REaW1lbnNpb24gPSAoMTAwICogMTAwKTsgLy8gRW1waXJp
Y2FsIGRhdGEgbGltaXQgZm9yIHBhcmFsbGVsIGpvYnMuCi0KLSAgICBzdHJ1Y3QgUGFpbnRpbmdE
YXRhIHsKLSAgICAgICAgUGFpbnRpbmdEYXRhKGxvbmcgcGFpbnRpbmdTZWVkLCBjb25zdCBJbnRT
aXplJiBwYWludGluZ1NpemUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVl
bmN5WSkKLSAgICAgICAgICAgIDogc2VlZChwYWludGluZ1NlZWQpCi0gICAgICAgICAgICAsIGZp
bHRlclNpemUocGFpbnRpbmdTaXplKQotICAgICAgICAgICAgLCBiYXNlRnJlcXVlbmN5WChiYXNl
RnJlcXVlbmN5WCkKLSAgICAgICAgICAgICwgYmFzZUZyZXF1ZW5jeVkoYmFzZUZyZXF1ZW5jeVkp
Ci0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIGxvbmcgc2VlZDsKLSAgICAgICAgaW50
IGxhdHRpY2VTZWxlY3RvclsyICogc19ibG9ja1NpemUgKyAyXTsKLSAgICAgICAgZmxvYXQgZ3Jh
ZGllbnRbNF1bMiAqIHNfYmxvY2tTaXplICsgMl1bMl07Ci0gICAgICAgIEludFNpemUgZmlsdGVy
U2l6ZTsKLSAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVg7Ci0gICAgICAgIGZsb2F0IGJhc2VG
cmVxdWVuY3lZOwotCi0gICAgICAgIGlubGluZSBsb25nIHJhbmRvbSgpOwotICAgIH07Ci0KLSAg
ICBzdHJ1Y3QgU3RpdGNoRGF0YSB7Ci0gICAgICAgIFN0aXRjaERhdGEoKSA9IGRlZmF1bHQ7Ci0K
LSAgICAgICAgaW50IHdpZHRoIHsgMCB9OyAvLyBIb3cgbXVjaCB0byBzdWJ0cmFjdCB0byB3cmFw
IGZvciBzdGl0Y2hpbmcuCi0gICAgICAgIGludCB3cmFwWCB7IDAgfTsgLy8gTWluaW11bSB2YWx1
ZSB0byB3cmFwLgotICAgICAgICBpbnQgaGVpZ2h0IHsgMCB9OwotICAgICAgICBpbnQgd3JhcFkg
eyAwIH07Ci0gICAgfTsKLQotICAgIHN0cnVjdCBGaWxsUmVnaW9uUGFyYW1ldGVycyB7Ci0gICAg
ICAgIGNvbnN0IEZpbHRlciogZmlsdGVyOwotICAgICAgICBGRVR1cmJ1bGVuY2UqIGVmZmVjdDsK
LSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXk7Ci0gICAgICAgIFBhaW50aW5n
RGF0YSogcGFpbnRpbmdEYXRhOwotICAgICAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7Ci0gICAg
ICAgIGludCBzdGFydFk7Ci0gICAgICAgIGludCBlbmRZOwotICAgIH07Ci0KLSAgICBzdGF0aWMg
dm9pZCBmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKik7Ci0KICAgICBGRVR1
cmJ1bGVuY2UoVHVyYnVsZW5jZVR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNl
RnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQsIGJvb2wgc3RpdGNoVGlsZXMp
OwogCiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImKSBv
dmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0
UmVjdCgpKSk7IH0KLSAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
KSBvdmVycmlkZTsKLSAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKIAot
ICAgIHZvaWQgaW5pdFBhaW50KFBhaW50aW5nRGF0YSYpOwotICAgIFN0aXRjaERhdGEgY29tcHV0
ZVN0aXRjaGluZyhJbnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0
JiBiYXNlRnJlcXVlbmN5WSkgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBu
b2lzZTJEKGNvbnN0IFBhaW50aW5nRGF0YSYsIGNvbnN0IFN0aXRjaERhdGEmLCBjb25zdCBGbG9h
dFBvaW50JikgY29uc3Q7Ci0gICAgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNhbGN1bGF0
ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEs
IGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2b2lkIGZpbGxSZWdpb24oY29uc3QgRmls
dGVyJiwgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBQYWludGluZ0RhdGEmLCBTdGl0Y2hEYXRh
LCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkgY29uc3Q7CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgdm9pZCBmaWxsUmVn
aW9uV29ya2VyKHZvaWQqKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIFR1cmJ1bGVuY2VUeXBlIG1fdHlwZTsKICAgICBmbG9hdCBtX2Jhc2VGcmVxdWVu
Y3lYOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3RBcHBsaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdEFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40N2UxNDI1MWM1NjJl
OTY3ZmZiOWFiNzFlYzNhZmE3MGRjYjljMmIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3RBcHBsaWVyLmgKQEAg
LTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJF
ZmZlY3RBcHBsaWVyIHsKK3B1YmxpYzoKKyAgICBGaWx0ZXJFZmZlY3RBcHBsaWVyKCkgPSBkZWZh
dWx0OworICAgIHZpcnR1YWwgfkZpbHRlckVmZmVjdEFwcGxpZXIoKSA9IGRlZmF1bHQ7CisgICAg
CisgICAgdmlydHVhbCBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVj
dFZlY3RvciYgaW5wdXRzKSA9IDA7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXJFZmZl
Y3RUeXBlPgorY2xhc3MgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyIDogcHVibGljIEZpbHRl
ckVmZmVjdEFwcGxpZXIgeworcHVibGljOgorICAgIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGll
cihGaWx0ZXJFZmZlY3RUeXBlJiBlZmZlY3QpCisgICAgICAgIDogbV9lZmZlY3QoZWZmZWN0KQor
ICAgIHsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRmlsdGVyRWZmZWN0VHlwZSYgbV9l
ZmZlY3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKaW5kZXggOTRk
MTk1MDEzOWQ2ZDI0M2E4NjYxZTVlYTU1ZDIzNWE3Mzg5ZjVkNS4uOGRiOGU1NjU5N2JhYmVjODY4
NjE2ODNmZjhlMDU4Mjg4YzcxMjZmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaApAQCAtNjUsNyArNjUsNyBAQCBw
dWJsaWM6CiAgICAgTGlnaHRUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAg
ICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRl
eHRTdHJlYW0mKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0
YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikg
Y29uc3QgPSAwOwogICAgIC8vIHogaXMgYSBmbG9hdCBudW1iZXIsIHNpbmNlIGl0IGlzIHRoZSBh
bHBoYSB2YWx1ZSBzY2FsZWQgYnkgYSB1c2VyCiAgICAgLy8gc3BlY2lmaWVkICJzdXJmYWNlU2Nh
bGUiIGNvbnN0YW50LCB3aGljaCB0eXBlIGlzIDxudW1iZXI+IGluIHRoZSBTVkcgc3RhbmRhcmQu
CiAgICAgLy8geCBhbmQgeSBhcmUgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBGaWx0ZXJFZmZl
Y3QncyBidWZmZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcAppbmRleCAxYWI1ZTE5ZTExYTRm
MzZlYTJhNDI2YTc1MDM4NzkxMjhmNTRiNDRiLi5jMmQ4NzQ5M2IyOGRlMzg2MTNlM2UyMDI4NGZm
ZTJmZjQyNWZlZTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKQEAgLTM2LDcgKzM2LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIFBvaW50TGlnaHRTb3VyY2U6OmluaXRQ
YWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0
YSYpCit2b2lkIFBvaW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVy
RWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYpIGNvbnN0CiB7CiAgICAgbV9idWZm
ZXJQb3NpdGlvbi5zZXRYWShmaWx0ZXJFZmZlY3QubWFwUG9pbnRGcm9tVXNlclNwYWNlVG9CdWZm
ZXIobV91c2VyU3BhY2VQb3NpdGlvbi54eSgpKSk7CiAgICAgLy8gVG8gc2NhbGUgWiwgbWFwIGEg
cG9pbnQgb2Zmc2V0IGZyb20gbV91c2VyU3BhY2VQb3NpdGlvbiBpbiB0aGUgeCBkaXJlY3Rpb24g
Ynkgei4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvUG9pbnRMaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgKaW5kZXggNjdhM2EwYmQzOWE4YTljYzE5NTQzNDk4
NTk2ZDcxMTVmNGJiOTVhNS4uNDJjM2RjNjE3ODg1MjJlYzc4N2NhZWUyYWMzNGE4ZTMyZjlkYmQ0
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Q
b2ludExpZ2h0U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmgKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAg
IGJvb2wgc2V0WShmbG9hdCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRaKGZsb2F0KSBvdmVycmlk
ZTsKIAotICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWlu
dGluZ0RhdGEmKSBvdmVycmlkZTsKKyAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29uc3QgRmls
dGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgQ29tcHV0ZWRM
aWdodGluZ0RhdGEgY29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5nRGF0YSYs
IGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CkBAIC01Miw3ICs1Miw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgRmxvYXRQb2ludDNE
IG1fdXNlclNwYWNlUG9zaXRpb247Ci0gICAgRmxvYXRQb2ludDNEIG1fYnVmZmVyUG9zaXRpb247
CisgICAgbXV0YWJsZSBGbG9hdFBvaW50M0QgbV9idWZmZXJQb3NpdGlvbjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKaW5kZXggOGZhNDQyYjhkOWQ1M2E5OWVm
NWNhMTU4ODI2NjM1MGRhNmJhNTg0MC4uODIwMmZiOTQ4YTk2ZDcwM2U1ODViNDljOTJlMjUzNDRi
MDNiYWE1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VBbHBoYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUg
IkNvbG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBw
bGllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KIApAQCAtNDUsMTcgKzQ2LDI5IEBAIHZvaWQgU291cmNlQWxwaGE6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFi
c29sdXRlUGFpbnRSZWN0KGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKIH0K
IAotYm9vbCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYp
CisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXIgdG8g
c2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBTb3VyY2VBbHBoYVNvZnR3
YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8U291cmNlQWxw
aGE+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPFNvdXJj
ZUFscGhhPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFw
cGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3Rz
KSBvdmVycmlkZTsKK307CisKK2Jvb2wgU291cmNlQWxwaGFTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQog
ewotICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7Cisg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKworICAgIGF1dG8g
cmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVz
dWx0SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXIgPSBpbnB1dEVmZmVjdCgwKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBh
dXRvIGltYWdlQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRmxvYXRSZWN0IGltYWdlUmVj
dChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKKyAgICBGbG9hdFJl
Y3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5z
aXplKCkpOwogICAgIEdyYXBoaWNzQ29udGV4dCYgZmlsdGVyQ29udGV4dCA9IHJlc3VsdEltYWdl
LT5jb250ZXh0KCk7CiAKICAgICBmaWx0ZXJDb250ZXh0LmZpbGxSZWN0KGltYWdlUmVjdCwgQ29s
b3I6OmJsYWNrKTsKQEAgLTY0LDYgKzc3LDExIEBAIGJvb2wgU291cmNlQWxwaGE6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29s
IFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIp
Cit7CisgICAgcmV0dXJuIFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShm
aWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogVGV4dFN0cmVhbSYgU291cmNlQWxwaGE6OmV4
dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSkg
Y29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltTb3VyY2VBbHBoYV1cbiI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmNwcAppbmRleCBlY2RlNDMxZjliOWIwNjQ0MTNlYTA1YjYwZGRjYjkyZTU4OThjNzA0
Li43YjI2M2RkZTA5N2M1OTBkN2Y1ZDRjNDlmNDY0ZDU3NjVlNjc0NTgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3Jh
cGhpYy5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCkBAIC00MiwxMCArNDMsMjAgQEAgdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBzZXRBYnNvbHV0ZVBh
aW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQogCi1ib29sIFNvdXJjZUdy
YXBoaWM6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKKy8vIEZJ
WE1FOiBNb3ZlIHRoZSBjbGFzcyBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFy
YXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgU291cmNlR3JhcGhpY1NvZnR3YXJl
QXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8U291cmNlR3JhcGhp
Yz4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8U291cmNl
R3JhcGhpYz47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBh
cHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0
cykgb3ZlcnJpZGU7Cit9OworCitib29sIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXI6OmFw
cGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImKQogewot
ICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAg
SW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdlKCk7CisgICAgYXV0
byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byBz
b3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJbWFnZSgpOwogICAgIGlmICghcmVzdWx0SW1hZ2Ug
fHwgIXNvdXJjZUltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTUzLDYgKzY0LDEx
IEBAIGJvb2wgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFNvdXJjZUdyYXBoaWM6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4g
U291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVm
ZmVjdHMoKSk7Cit9CisKIFRleHRTdHJlYW0mIFNvdXJjZUdyYXBoaWM6OmV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3QKIHsKICAg
ICB0cyA8PCBpbmRlbnQgPDwgIltTb3VyY2VHcmFwaGljXVxuIjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNl
LmNwcAppbmRleCA3MTYwN2FiMDBmZjlkNmE2ZDAxNjkxZDliYmI4NTUzZDFmMzQ4ZDAwLi5lN2M3
YzA0ZWRlZWQ4NzJlNzlhMjIzYmRhZDg2YTkxZWQzM2YwMjJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3Vy
Y2UuY3BwCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGFjY29yZGlu
ZyB0byB0aGUgU1ZHIDEuMSBTRSBsaWdodCByZWdyZXNzaW9uIHRlc3RzCiBzdGF0aWMgY29uc3Qg
ZmxvYXQgYW50aUFsaWFzVHJlc2hvbGQgPSAwLjAxNmY7CiAKLXZvaWQgU3BvdExpZ2h0U291cmNl
Ojppbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKK3ZvaWQgU3BvdExpZ2h0U291cmNlOjppbml0UGFpbnRp
bmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYgZmlsdGVyRWZmZWN0LCBQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSkgY29uc3QKIHsKICAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRlckVm
ZmVjdC5tYXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5
KCkpKTsKICAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJT
cGFjZVBvc2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmgK
aW5kZXggMzUxNTE2MzUwNzdlZWYwZTczYzI2YWU0NDJhNWVhNTM0ZmQxZjNiZi4uMmVkZDkzMDk5
ZDk3MjgyYjA2ZDdjMTllNzcyN2Q3NWQ2NDJlOWM1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5oCkBA
IC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldFNwZWN1bGFyRXhwb25lbnQoZmxv
YXQpIG92ZXJyaWRlOwogICAgIGJvb2wgc2V0TGltaXRpbmdDb25lQW5nbGUoZmxvYXQpIG92ZXJy
aWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBh
aW50aW5nRGF0YSYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBG
aWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBjb25zdCBvdmVycmlkZTsKICAgICBDb21wdXRl
ZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEoY29uc3QgUGFpbnRpbmdEYXRh
JiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBmaW5hbDsKIAogICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKQEAgLTY4LDcgKzY4LDcgQEAgcHJpdmF0ZToKICAgICBGbG9hdFBvaW50M0QgbV91c2Vy
U3BhY2VQb3NpdGlvbjsKICAgICBGbG9hdFBvaW50M0QgbV91c2VyU3BhY2VQb2ludHNBdDsKIAot
ICAgIEZsb2F0UG9pbnQzRCBtX2J1ZmZlclBvc2l0aW9uOworICAgIG11dGFibGUgRmxvYXRQb2lu
dDNEIG1fYnVmZmVyUG9zaXRpb247CiAKICAgICBmbG9hdCBtX3NwZWN1bGFyRXhwb25lbnQ7CiAg
ICAgZmxvYXQgbV9saW1pdGluZ0NvbmVBbmdsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKaW5kZXggM2ZlY2YxZjM0NGUxYzdmNmE2
YTJhNjA5MTE5NTIxODRiNjE2ZDYzMi4uYzc1OWM5YThjNTZkYmViMzc1ZGUzN2Y2NTc1NWM5ODYw
MWY2ODQwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVJbWFnZS5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJTVkdGRUltYWdlLmgi
CiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgogCkBAIC03NCwyOSArNzUsMzkgQEAgdm9pZCBGRUltYWdlOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBzZXRBYnNvbHV0ZVBhaW50
UmVjdChlbmNsb3NpbmdJbnRSZWN0KGltYWdlUmVjdCkpOwogfQogCi1ib29sIEZFSW1hZ2U6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKKy8vIEZJWE1FOiBNb3Zl
IHRoZSBjbGFzcyBGRUltYWdlU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQg
aGVhZGVyIGZpbGVzLgorY2xhc3MgRkVJbWFnZVNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0
ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVJbWFnZT4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0
ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVJbWFnZT47CisKK3B1YmxpYzoKKyAgICB1c2luZyBC
YXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCitib29sIEZFSW1hZ2VT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJF
ZmZlY3RWZWN0b3ImKQogewotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJlc3Vs
dCgpOworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3VsdCgp
OwogICAgIGlmICghcmVzdWx0SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1
dG8gcHJpbWl0aXZlU3VicmVnaW9uID0gZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CisgICAg
YXV0byBwcmltaXRpdmVTdWJyZWdpb24gPSBtX2VmZmVjdC5maWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24oKTsKICAgICBhdXRvJiBjb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKIAotICAg
IFdURjo6c3dpdGNoT24obV9zb3VyY2VJbWFnZSwKKyAgICBXVEY6OnN3aXRjaE9uKG1fZWZmZWN0
LnNvdXJjZUltYWdlKCksCiAgICAgICAgIFsmXSAoY29uc3QgUmVmPEltYWdlPiYgaW1hZ2UpIHsK
ICAgICAgICAgICAgIGF1dG8gaW1hZ2VSZWN0ID0gcHJpbWl0aXZlU3VicmVnaW9uOwotICAgICAg
ICAgICAgYXV0byBzcmNSZWN0ID0gbV9zb3VyY2VJbWFnZVJlY3Q7Ci0gICAgICAgICAgICBtX3By
ZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChpbWFnZVJlY3QsIHNyY1JlY3QpOworICAg
ICAgICAgICAgYXV0byBzcmNSZWN0ID0gbV9lZmZlY3Quc291cmNlSW1hZ2VSZWN0KCk7CisgICAg
ICAgICAgICBtX2VmZmVjdC5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCkudHJhbnNmb3JtUmVjdChpbWFn
ZVJlY3QsIHNyY1JlY3QpOwogICAgICAgICAgICAgaW1hZ2VSZWN0LnNjYWxlKGZpbHRlci5maWx0
ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIGltYWdlUmVjdCA9IGRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoSW50UmVjdChpbWFnZVJlY3QpKTsKKyAgICAgICAgICAgIGltYWdlUmVjdCA9IG1fZWZm
ZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoSW50UmVjdChpbWFnZVJlY3QpKTsKICAgICAg
ICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCBpbWFnZVJlY3QsIHNyY1JlY3QpOwogICAg
ICAgICB9LAogICAgICAgICBbJl0gKGNvbnN0IFJlZjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVy
KSB7CiAgICAgICAgICAgICBhdXRvIGltYWdlUmVjdCA9IHByaW1pdGl2ZVN1YnJlZ2lvbjsKLSAg
ICAgICAgICAgIGltYWdlUmVjdC5tb3ZlQnkobV9zb3VyY2VJbWFnZVJlY3QubG9jYXRpb24oKSk7
CisgICAgICAgICAgICBpbWFnZVJlY3QubW92ZUJ5KG1fZWZmZWN0LnNvdXJjZUltYWdlUmVjdCgp
LmxvY2F0aW9uKCkpOwogICAgICAgICAgICAgaW1hZ2VSZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJT
Y2FsZSgpKTsKLSAgICAgICAgICAgIGltYWdlUmVjdCA9IGRyYXdpbmdSZWdpb25PZklucHV0SW1h
Z2UoSW50UmVjdChpbWFnZVJlY3QpKTsKKyAgICAgICAgICAgIGltYWdlUmVjdCA9IG1fZWZmZWN0
LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoSW50UmVjdChpbWFnZVJlY3QpKTsKICAgICAgICAg
ICAgIGNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBpbWFnZVJlY3QubG9jYXRp
b24oKSk7CiAgICAgICAgIH0KICAgICApOwpAQCAtMTA0LDYgKzExNSwxMSBAQCBib29sIEZFSW1h
Z2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZFSW1hZ2VTb2Z0d2FyZUFwcGxpZXIoKnRo
aXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBUZXh0U3RyZWFtJiBGRUlt
YWdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlv
blR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVJ
bWFnZSI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmgKaW5kZXggZGE3ZTQ3YmQxOGY1NDRhMmU1MjM3NzFkMjM5MjdkNzIyYTk5YWI1Yy4uMzc1
NTdhOTZkY2FiZTBmODAwMjViMDgwYWU3MTcyNzMyYzJhMmE1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaApAQCAtNDEsNiArNDEsOSBA
QCBwdWJsaWM6CiAgICAgU291cmNlSW1hZ2UmIHNvdXJjZUltYWdlKCkgeyByZXR1cm4gbV9zb3Vy
Y2VJbWFnZTsgfQogICAgIHZvaWQgc2V0SW1hZ2VTb3VyY2UoU291cmNlSW1hZ2UmJiBzb3VyY2VJ
bWFnZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92ZShzb3VyY2VJbWFnZSk7IH0KIAorICAgIEZs
b2F0UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUltYWdlUmVj
dDsgfQorICAgIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3Bl
Y3RSYXRpbygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlc2VydmVBc3BlY3RSYXRpbzsgfQorCiBwcml2
YXRlOgogICAgIEZFSW1hZ2UoU291cmNlSW1hZ2UmJiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJ
bWFnZVJlY3QsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwogCg==
</data>
<flag name="review"
          id="470187"
          type_id="1"
          status="+"
          setter="heycam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445054</attachid>
            <date>2021-11-23 16:48:04 -0800</date>
            <delta_ts>2021-11-23 17:34:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232832-20211123164803.patch</filename>
            <type>text/plain</type>
            <size>212685</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTA4NDZjNzZjOTc5MGVk
ZWIyZGRlYmZlZGU0OGI4NTM0ZTk1YWYyYi4uNzNmNmQyMGNmNWNlNTM4MzMwZDdlN2E1ODVmM2Y4
NDdkOGI3MjNkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0NyBAQAorMjAyMS0xMS0yMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1vdmUgdGhlIHNvZnR3YXJlIEZpbHRlckVmZmVjdCBmdW5jdGlvbnMgdG8gc2VwYXJhdGUgYXBw
bGllciBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzI4MzIKKworICAgICAgICBSZXZpZXdlZCBieSBDYW1lcm9uIE1jQ29ybWFjay4KKwor
ICAgICAgICBUaGlzIHN0ZXAgaXMgcmVxdWlyZWQgdG8gbW92ZSB0aGUgRmlsdGVyRWZmZWN0IHNv
ZnR3YXJlIGNvZGUgdG8gc2VwYXJhdGUKKyAgICAgICAgZmlsZXMuIFNpbmNlIHRoZSBGaWx0ZXJF
ZmZlY3QgY2FuIGJlIGFwcGxpZWQgd2l0aCB0aGUgYWNjZWxlcmF0ZWQgQ29yZUltYWdlCisgICAg
ICAgIG9yIHRoZSB1bmFjY2VsZXJhdGVkIHNvZnR3YXJlIG1ldGhvZHMsIGl0IG1ha2Ugc2Vuc2Ug
dG8gcmVtb3ZlIHRoZSBzb2Z0d2FyZQorICAgICAgICBjb2RlIGZyb20gdGhlIEZpbHRlckVmZmVj
dCBjbGFzc2VzLgorCisgICAgICAgIFRoZSBwbGFuIGlzIHRvIGhhdmUgdGhlIHNvZnR3YXJlIGNv
ZGUgaW4gc2VwYXJhdGUgZmlsZXMuIEVhY2ggRmlsdGVyRWZmZWN0CisgICAgICAgIHdpbGwgYmUg
YXNrZWQgdG8gY3JlYXRlIGFuIGFwcGxpZXIgd2hpY2ggY2FuIGJlIFNvZnR3YXJlQXBwbGllciBv
cgorICAgICAgICBDb3JlSW1hZ2VBcHBsaWVyLiBUaGlzIGFwcGxpZXIgd2lsbCBiZSBnaXZlbiB0
byBGaWx0ZXJFZmZlY3Q6OmFwcGx5KCkKKyAgICAgICAgd2hpY2ggd2lsbCBwYXNzIHRoZSBpbnB1
dCBpbWFnZXMgdG8gdGhlIGFwcGx5KCkgbWV0aG9kIG9mIHRoZSBhcHBsaWVyIHRvCisgICAgICAg
IGdldCB0aGUgcmVzdWx0IGltYWdlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFu
dExpZ2h0U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3RhbnRMaWdodFNvdXJjZTo6
aW5pdFBhaW50aW5nRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXN0YW50TGlnaHRT
b3VyY2U6OmluaXRQYWludGluZ0RhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmRT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6Y2Fs
Y3VsYXRlU2F0dXJhdGVDb21wb25lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRy
aXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b2xvck1hdHJpeDo6bm9ybWFsaXplZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9y
TWF0cml4U29mdHdhcmVBcHBsaWVyOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6Om1hdHJpeCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjpzYXR1
cmF0ZUFuZEh1ZVJvdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4
U29mdHdhcmVBcHBsaWVyOjpsdW1pbmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
UGxhdGZvcm1VbmFjY2VsZXJhdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXhTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdl
YkNvcmU6Om1hdHJpeCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzYXR1cmF0ZUFuZEh1
ZVJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsdW1pbmFuY2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6ZWZmZWN0QXBwbHlBY2NlbGVyYXRlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjplZmZlY3RUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSBjYWxjdWxhdGVTYXR1cmF0ZUNvbXBvbmVudHMoKSBh
bmQgY2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cygpIGZyb20KKyAgICAgICAgdGhlIGhlYWRl
ciBmaWxlIHRvIHRoZSBzb3VyY2UgZmlsZS4gTW92ZSBjaG9vc2luZyB0aGUgY2FsY3VsYXRpb24g
bW9kZSBmb3IKKyAgICAgICAgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCBmcm9tIGVmZmVjdEFw
cGx5QWNjZWxlcmF0ZWQoKSB0byBhcHBseVBsYXRmb3JtKCkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUlkZW50aXR5
VGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBw
bGllcjo6Y29tcHV0ZVRhYnVsYXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVu
dFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlRGlzY3JldGVUYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlTGlu
ZWFyVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJl
QXBwbGllcjo6Y29tcHV0ZUdhbW1hVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25l
bnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUxvb2t1cFRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZv
cm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJl
QXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZURpc2NyZXRlVGFibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0
ZUxpbmVhclRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJh
bnNmZXI6OmNvbXB1dGVHYW1tYVRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oOgorICAg
ICAgICBJbnN0ZWFkIG9mIGNhbGxpbmcgY29tcHV0ZUxvb2t1cFRhYmxlcygpIHRvIGluaXRpYWxp
emUgdGhlIGZvdXIgbG9va3VwCisgICAgICAgIHRhYmxlcywgY2FsbCBjb21wdXRlTG9va3VwVGFi
bGUoKSBmb3VyIHRpbWVzOiBvbmUgZm9yIGVhY2ggY29sb3IgY2hhbm5lbC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb21wb3NpdGU6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpjbGFtcEJ5dGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVBcml0aG1ldGlj
UGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyOjpj
b21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUFyaXRobWV0aWMpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5QXJpdGhtZXRpYyk6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlOb25B
cml0aG1ldGljKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVy
OjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wQnl0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjphcml0aG1ldGljU29mdHdhcmUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXJpdGhtZXRpY1NvZnR3YXJlKTogRGVsZXRlZC4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpj
bGFtcFJHQkFWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4U29mdHdh
cmVBcHBsaWVyOjpzZXREZXN0aW5hdGlvblBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpnZXRQaXhlbFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNldEludGVyaW9yUGl4ZWxz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6OnNl
dE91dGVyUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXhTb2Z0d2Fy
ZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252
b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVD
b252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNsYW1wUkdCQVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNldERlc3RpbmF0
aW9uUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6
OmZhc3RTZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUNv
bnZvbHZlTWF0cml4OjpnZXRQaXhlbFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRPdXRlclBpeGVscyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVscyk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4Lmg6CisgICAgICAgIEFkZCB0aGUgbWVtYmVycyBvZiBGRUNvbnZvbHZlTWF0cml4IHRvIFBh
aW50aW5nRGF0YS4gUmVtb3ZlIHRoZSB0ZW1wbGF0ZQorICAgICAgICBmdW5jdGlvbnMgYW5kIHRo
ZSBNU1ZDIHdhcm5pbmcuIEp1c3QgaWdub3JlIHRoZSBhbHBoYSBjaGFubmVsIGlmIAorICAgICAg
ICBwcmVzZXJ2ZUFscGhhVmFsdWVzIGlzIHRydWUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
RGlmZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6CisgICAgICAgIE5vIG5lZWQgdG8g
cGFzcyBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcgd2hlbiBjcmVhdGluZyBGRURpZmZ1c2VM
aWdodGluZy4KKyAgICAgICAgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZyBp
cyBhbHJlYWR5IHBhc3NlZCB0byBGRUxpZ2h0aW5nLiAKKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OmJ5dGVPZmZzZXRPZlBpeGVsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjp4Q2hhbm5l
bEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwU29mdHdh
cmVBcHBsaWVyOjp5Q2hhbm5lbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlz
cGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBw
bGllcik6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGll
cjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpieXRlT2Zmc2V0T2ZQaXhlbCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5oOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnhDaGFubmVsSW5k
ZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6
OnlDaGFubmVsSW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNo
YWRvd1NvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hh
ZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kU29mdHdhcmVB
cHBsaWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFuQmx1cik6CisgICAg
ICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWCk6CisgICAgICAg
IChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0U3RkRGV2aWF0aW9uWSk6CisgICAgICAgIChX
ZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6c2V0RWRnZU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
Y2xhbXBlZFRvS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6
Y2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3Np
YW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3Np
YW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3Np
YW5CbHVyOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6a2VybmVsUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBbHBoYU9ubHkp
OgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJs
dXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJv
eEJsdXJBY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1clNvZnR3
YXJlQXBwbGllcjo6Ym94Qmx1clVuYWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RkVH
YXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJHZW5lcmljKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyV29ya2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjph
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKGdhdXNzaWFuS2VybmVsRmFjdG9yKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Omtlcm5lbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmJveEJsdXJBbHBoYU9ubHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym94Qmx1cik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphY2NlbGVyYXRlQm94Qmx1cik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpzdGFuZGFyZEJveEJsdXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5V29ya2VyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmg6CisgICAgICAgIEFkZCB0aGUgdHdvIG1lbWJlcnMgJ2lzQWxwaGFJbWFnZScgYW5k
ICdlZGdlTW9kZScgdG8gQXBwbHlQYXJhbWV0ZXJzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OkZFTGlnaHRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllcjo6QWxwaGFXaW5kb3c6OnRvcExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OmJvdHRv
bUxlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGll
cjo6QWxwaGFXaW5kb3c6OnRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5n
U29mdHdhcmVBcHBsaWVyOjpBbHBoYVdpbmRvdzo6Y2VudGVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93Ojpib3R0b20gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFX
aW5kb3c6OnNldFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBs
aWVyOjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzZXRCb3R0b20pOgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNldFRvcFJpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2lu
ZG93OjpzZXRSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBs
aWVyOjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZ1NvZnR3YXJlQXBwbGllcjo6QWxwaGFXaW5kb3c6OnNoaWZ0Um93KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkFscGhhV2luZG93OjpzaGlmdCk6
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0Rh
dGE6OnRvcExlZnROb3JtYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1Nv
ZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BS
aWdodE5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVB
cHBsaWVyOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjppbnRlcmlv
ck5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBs
aWVyOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVm
dE5vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBs
aWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0
Tm9ybWFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxp
ZXI6OnNldFBpeGVsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3
YXJlQXBwbGllcjo6c2V0UGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZ1NvZnR3
YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWNQYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtlcik6
CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRm
b3JtR2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVy
OjphcHBseVBsYXRmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmdTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6
OnRvcExlZnROb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdo
dGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3dOb3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6
OmxlZnRDb2x1bW5Ob3JtYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9y
bWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1hbCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05vcm1hbCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRv
bVJpZ2h0Tm9ybWFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRp
bmc6OnNldFBpeGVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNl
dFBpeGVsSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6
cGxhdGZvcm1BcHBseUdlbmVyaWNQYWludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1dvcmtlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmg6CisgICAgICAgIChX
ZWJDb3JlOjpGRUxpZ2h0aW5nOjpsaWdodGluZ0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OmRpZmZ1c2VDb25zdGFudCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUxpZ2h0aW5nOjpzcGVjdWxhckNvbnN0YW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFTGlnaHRpbmc6OnNwZWN1bGFyRXhwb25lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnRvcExlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmxlZnQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OmJvdHRvbUxlZnQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5k
b3c6OnRvcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpB
bHBoYVdpbmRvdzo6Y2VudGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TGlnaHRpbmc6OkFscGhhV2luZG93Ojpib3R0b20gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNldFRvcCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpBbHBoYVdpbmRvdzo6c2V0Q2VudGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzZXRCb3R0b20p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNl
dFRvcFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhh
V2luZG93OjpzZXRSaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5n
OjpBbHBoYVdpbmRvdzo6c2V0Qm90dG9tUmlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVMaWdodGluZzo6QWxwaGFXaW5kb3c6OnNoaWZ0Um93KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkZFTGlnaHRpbmc6OkFscGhhV2luZG93OjpzaGlmdCk6IERlbGV0ZWQuCisgICAg
ICAgIE1vdmUgZmlsbGluZyB0aGUgc3RydWN0dXJlIExpZ2h0aW5nRGF0YSBmcm9tIEZFTGlnaHRp
bmc6OmRyYXdMaWdodGluZygpCisgICAgICAgIHRvIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6
OmFwcGx5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OnBpeGVsQXJyYXlJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Om1ha2VQaXhl
bFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xv
Z3lTb2Z0d2FyZUFwcGxpZXI6Om1ha2VDb2xvckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6Om1pbk9yTWF4KToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6Y29sdW1uRXh0
cmVtdW0pOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjpr
ZXJuZWxFeHRyZW11bSk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhv
bG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybVdvcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAg
IChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
IChXZWJDb3JlOjpwaXhlbEFycmF5SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
bWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Om1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9uZW50cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjptaW5Pck1heCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb2x1
bW5FeHRyZW11bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjprZXJuZWxFeHRyZW11bSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlH
ZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZv
cm1BcHBseVdvcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnBsYXRmb3JtQXBwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5
OjpwbGF0Zm9ybUFwcGx5RGVnZW5lcmF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaDoKKyAgICAgICAgUmVtb3ZlIHRoZSB0ZW1w
bGF0ZSBmdW5jdGlvbnMgYW5kIGp1c3QgdGhlIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgYXMgYW4K
KyAgICAgICAgYXJndW1lbnQgdG8gdGhlc2UgZnVuY3Rpb25zLiAgUmVwbGFjZSBwbGF0Zm9ybUFw
cGx5RGVnZW5lcmF0ZSgpIHdpdGggYQorICAgICAgICBjYWxsIHRvIGlzRGVnZW5lcmF0ZSgpIGFu
ZCBtb3ZlIHRoZSBjYWxsIHRvIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkgdG8gCisgICAgICAg
IHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldFNvZnR3YXJl
QXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3Bl
Y3VsYXJMaWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVNwZWN1bGFyTGlnaHRpbmc6
OkZFU3BlY3VsYXJMaWdodGluZyk6CisgICAgICAgIE5vIG5lZWQgdG8gcGFzcyBGRUxpZ2h0aW5n
OjpTcGVjdWxhckxpZ2h0aW5nIHdoZW4gY3JlYXRpbmcgRkVEaWZmdXNlTGlnaHRpbmcuCisgICAg
ICAgIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nIGlzIGFscmVhZHkgcGFz
c2VkIHRvIEZFTGlnaHRpbmcuIAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlU29mdHdhcmVBcHBsaWVyOjph
cHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OlBhaW50aW5n
RGF0YTo6cmFuZG9tKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBw
bGllcjo6c21vb3RoQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdh
cmVBcHBsaWVyOjpsaW5lYXJJbnRlcnBvbGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVy
YnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6aW5pdFBhaW50aW5nRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVTdGl0Y2hpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpub2lzZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6dG9JbnRCYXNlZENv
bG9yQ29tcG9uZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFw
cGxpZXI6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRm
b3JtV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGll
cjo6YXBwbHlQbGF0Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2VTb2Z0d2Fy
ZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6UGFpbnRp
bmdEYXRhOjpyYW5kb20pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c21vb3RoQ3VydmUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bGluZWFySW50ZXJwb2xhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmluaXRQYWludCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OmNvbXB1dGVTdGl0Y2hpbmcgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpub2lzZTJEIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJi
dWxlbmNlVmFsdWVGb3JQb2ludCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpG
RVR1cmJ1bGVuY2U6OmZpbGxSZWdpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6RkVUdXJidWxlbmNlOjpQYWludGluZ0RhdGE6OlBhaW50aW5nRGF0YSk6IERlbGV0ZWQuCisg
ICAgICAgIE1vdmUgdGhlIHRocmVhZGluZyBjb2RlIGZyb20gcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkgdG8gYSBuZXcgZnVuY3Rpb24KKyAgICAgICAgY2FsbGVkIEZFVHVyYnVsZW5jZVNvZnR3YXJl
QXBwbGllcjo6YXBwbHlQbGF0Zm9ybSgpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
bm9ybWFsaXplZEZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAgIE1vdmUgbm9ybWFsaXplZEZsb2F0
cygpIGZyb20gRmlsdGVyRWZmZWN0IHRvIEZFQ29sb3JNYXRyaXguCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdEFwcGxpZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI6OkZpbHRlckVmZmVjdENv
bmNyZXRlQXBwbGllcik6CisgICAgICAgIEludHJvZHVjZSB0aGlzIGNsYXNzIHdoaWNoIHdpbGwg
YmUgdGhlIGJhc2UgY2xhc3Mgb2YgYWxsIHRoZSBzb2Z0d2FyZSBhbmQKKyAgICAgICAgdGhlIENv
cmVJbWFnZSBGaWx0ZXJFZmZlY3QgYXBwbGllcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50TGln
aHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UG9p
bnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmg6CisgICAgICAgIE1ha2Ug
aW5pdFBhaW50aW5nRGF0YSgpIGJlIGEgY29uc3RhbnQgZnVuY3Rpb24uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNwb3RMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTcG90TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmg6CisgICAg
ICAgIE1ha2UgaW5pdFBhaW50aW5nRGF0YSgpIGJlIGEgY29uc3RhbnQgZnVuY3Rpb24uCisKKyAg
ICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFSW1hZ2VTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6
OkZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorCiAyMDIxLTExLTIzICBEb24gT2xtc3RlYWQgIDxkb24u
b2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgTm9uLXVuaWZpZWQgYnVpbGQgZml4ZXMsIG1p
ZCBOb3ZlbWJlciAyMDIxIGVkaXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3YjRkMjFkYTliMmY0ZDg1NWE4MTNjYTlhOTEz
ZTViMjg3NDAxNmYwLi4yODZjOTM0OWIxMjIxOTc5Yzg5OTY5ZDFiMWIwOTYyMTQwMDAzYzBhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xMDg5Niw2ICsxMDg5Niw3IEBACiAJCTcyOTlCQzY0MjNENjg2QTYwMENDNjg4MyAvKiBB
bHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFscGhhUHJlbXVsdGlwbGlj
YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjYyM0Q2ODZDNjAw
Q0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjlEMDUyRTI1MzEzRTI2MDA0MjIwOTgg
LyogUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkEx
M0E5RjI3NEM1Q0M3MDBFMkE4OEUgLyogRmlsdGVyRWZmZWN0QXBwbGllci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGaWx0ZXJFZmZlY3RBcHBsaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyQkFDM0E0MjNFMTczMjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFDIC8q
IEltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJCQUMz
QTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjU5NDIsNiArMjU5NDMsNyBAQAogCQkJCTg0NUU3MkY3MEZEMjYx
RUUwMEE4N0Q3OSAvKiBGaWx0ZXIuaCAqLywKIAkJCQkwOEM5MjUxNzBGQ0M3QzRBMDA0ODBERUMg
LyogRmlsdGVyRWZmZWN0LmNwcCAqLywKIAkJCQkwOEM5MjUxODBGQ0M3QzRBMDA0ODBERUMgLyog
RmlsdGVyRWZmZWN0LmggKi8sCisJCQkJNzJBMTNBOUYyNzRDNUNDNzAwRTJBODhFIC8qIEZpbHRl
ckVmZmVjdEFwcGxpZXIuaCAqLywKIAkJCQkyQzg1NjUzODI0QzEwQjBCMDBBMzc2NzMgLyogRmls
dGVyRWZmZWN0UmVuZGVyZXIuY3BwICovLAogCQkJCTJDODU2NTMzMjRDMEY3M0MwMEEzNzY3MyAv
KiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5oICovLAogCQkJCTcyMTRCOUI3Mjc0NDU4RkEwMDNCRTZE
RiAvKiBGaWx0ZXJFZmZlY3RWZWN0b3IuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNw
cAppbmRleCBlNWZiMWZmNjY1ZDNlYjA3ZjQ4ZWUxZDAyYmJmZmNjNmIwNDQxZjg5Li44OTQ3YTk4
NjBlNDZiMTFjNThlMjc3NTM2MjU2ZmRiOWQ1MWQxNTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRT
b3VyY2UuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBEaXN0YW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0
JiwgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCit2b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6
aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSkgY29uc3QKIHsKICAgICBmbG9hdCBhemltdXRoID0gZGVnMnJhZChtX2F6aW11dGgp
OwogICAgIGZsb2F0IGVsZXZhdGlvbiA9IGRlZzJyYWQobV9lbGV2YXRpb24pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRT
b3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFu
dExpZ2h0U291cmNlLmgKaW5kZXggYzFlMzBlZGU3NTk4MzcyOGE2MzJiY2NmZmIwOTk3M2EzYTRl
NzJmZC4uMzAxOTJiMGVmMGNkMWJmNDAzZDQyMzM4Y2U0MDg3NzE4ZDc1MTcwNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRT
b3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rp
c3RhbnRMaWdodFNvdXJjZS5oCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBib29sIHNl
dEF6aW11dGgoZmxvYXQpIG92ZXJyaWRlOwogICAgIGJvb2wgc2V0RWxldmF0aW9uKGZsb2F0KSBv
dmVycmlkZTsKIAotICAgIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3Qm
LCBQYWludGluZ0RhdGEmKSBvdmVycmlkZTsKKyAgICB2b2lkIGluaXRQYWludGluZ0RhdGEoY29u
c3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgQ29t
cHV0ZWRMaWdodGluZ0RhdGEgY29tcHV0ZVBpeGVsTGlnaHRpbmdEYXRhKGNvbnN0IFBhaW50aW5n
RGF0YSYsIGludCB4LCBpbnQgeSwgZmxvYXQgeikgY29uc3QgZmluYWw7CiAKICAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQmxlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUJsZW5kLmNwcAppbmRleCBjOTFhYTNkNjhkNWRmZjUzMzkxZmUwZDdkOThiNzlhNmI2
ZDUyODZkLi5kMmNhYmJhOWY4NmFiMzMyMGVjMjNlMDVkN2ZhNTdhYTNhNGQ0MmI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5j
cHAKQEAgLTI2LDEwICsyNiwxMCBAQAogI2luY2x1ZGUgIkZFQmxlbmQuaCIKIAogI2luY2x1ZGUg
IkZFQmxlbmRORU9OLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgogI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFy
cmF5Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC01MywxMyArNTMsMjMgQEAgYm9vbCBGRUJsZW5kOjpzZXRCbGVuZE1vZGUoQmxl
bmRNb2RlIG1vZGUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy8vIEZJWE1FOiBNb3ZlIHRoZSBj
bGFzcyBGRUJsZW5kU29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVy
IGZpbGVzLgorY2xhc3MgRkVCbGVuZFNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZl
Y3RDb25jcmV0ZUFwcGxpZXI8RkVCbGVuZD4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZl
Y3RDb25jcmV0ZUFwcGxpZXI8RkVCbGVuZD47CisKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlOjpC
YXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RW
ZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCiAjaWYgIUhBVkUoQVJNX05FT05f
SU5UUklOU0lDUykKLWJvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYpCitib29sIEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYs
IGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0
RWZmZWN0KDEpOworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7
CisgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdHNbMV0uZ2V0KCk7CiAKLSAgICBh
dXRvIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdElt
YWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTY5LDEyICs3OSwxNyBAQCBib29sIEZFQmxl
bmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJbWFn
ZS0+Y29udGV4dCgpOwotICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1
ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3
aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGlt
YWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92
ZXIsIG1fbW9kZSB9KTsKKyAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VC
dWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSkpOworICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1
ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCB7IENvbXBvc2l0
ZU9wZXJhdG9yOjpTb3VyY2VPdmVyLCBtX2VmZmVjdC5ibGVuZE1vZGUoKSB9KTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KICNlbmRpZgogCitib29sIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVCbGVuZFNvZnR3YXJlQXBw
bGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIFRleHRTdHJl
YW0mIEZFQmxlbmQ6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYgdHMsIFJlcHJl
c2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICB0cyA8PCBpbmRlbnQg
PDwgIltmZUJsZW5kIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IDVhOTFjNGVjYzQ0ZmM3N2Fi
ZmZkNDlkN2QxNjk3ZGMxNGY5MmI2NzQuLjEwMjM3YmE5ZGNjMjQxZmRlMTRmMzEyM2RjNjQ4NjNi
MjI2YmRmMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKIAorI2luY2x1ZGUgIkZp
bHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCkBAIC02MywzMiAr
NjQsMTAzIEBAIGJvb2wgRkVDb2xvck1hdHJpeDo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9h
dD4gJnZhbHVlcykKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIHZvaWQgbWF0cml4KGZs
b2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSwgY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdmFsdWVzKQordm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVTYXR1
cmF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQoreworICAgIGNv
bXBvbmVudHNbMF0gPSAoMC4yMTMgKyAwLjc4NyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzFd
ID0gKDAuNzE1IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1syXSA9ICgwLjA3MiAt
IDAuMDcyICogdmFsdWUpOworICAgIGNvbXBvbmVudHNbM10gPSAoMC4yMTMgLSAwLjIxMyAqIHZh
bHVlKTsKKyAgICBjb21wb25lbnRzWzRdID0gKDAuNzE1ICsgMC4yODUgKiB2YWx1ZSk7CisgICAg
Y29tcG9uZW50c1s1XSA9ICgwLjA3MiAtIDAuMDcyICogdmFsdWUpOworICAgIGNvbXBvbmVudHNb
Nl0gPSAoMC4yMTMgLSAwLjIxMyAqIHZhbHVlKTsKKyAgICBjb21wb25lbnRzWzddID0gKDAuNzE1
IC0gMC43MTUgKiB2YWx1ZSk7CisgICAgY29tcG9uZW50c1s4XSA9ICgwLjA3MiArIDAuOTI4ICog
dmFsdWUpOworfQorCit2b2lkIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBv
bmVudHMoZmxvYXQqIGNvbXBvbmVudHMsIGZsb2F0IHZhbHVlKQoreworICAgIGZsb2F0IGNvc0h1
ZSA9IGNvcyh2YWx1ZSAqIHBpRmxvYXQgLyAxODApOworICAgIGZsb2F0IHNpbkh1ZSA9IHNpbih2
YWx1ZSAqIHBpRmxvYXQgLyAxODApOworICAgIGNvbXBvbmVudHNbMF0gPSAwLjIxMyArIGNvc0h1
ZSAqIDAuNzg3IC0gc2luSHVlICogMC4yMTM7CisgICAgY29tcG9uZW50c1sxXSA9IDAuNzE1IC0g
Y29zSHVlICogMC43MTUgLSBzaW5IdWUgKiAwLjcxNTsKKyAgICBjb21wb25lbnRzWzJdID0gMC4w
NzIgLSBjb3NIdWUgKiAwLjA3MiArIHNpbkh1ZSAqIDAuOTI4OworICAgIGNvbXBvbmVudHNbM10g
PSAwLjIxMyAtIGNvc0h1ZSAqIDAuMjEzICsgc2luSHVlICogMC4xNDM7CisgICAgY29tcG9uZW50
c1s0XSA9IDAuNzE1ICsgY29zSHVlICogMC4yODUgKyBzaW5IdWUgKiAwLjE0MDsKKyAgICBjb21w
b25lbnRzWzVdID0gMC4wNzIgLSBjb3NIdWUgKiAwLjA3MiAtIHNpbkh1ZSAqIDAuMjgzOworICAg
IGNvbXBvbmVudHNbNl0gPSAwLjIxMyAtIGNvc0h1ZSAqIDAuMjEzIC0gc2luSHVlICogMC43ODc7
CisgICAgY29tcG9uZW50c1s3XSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgKyBzaW5IdWUgKiAw
LjcxNTsKKyAgICBjb21wb25lbnRzWzhdID0gMC4wNzIgKyBjb3NIdWUgKiAwLjkyOCArIHNpbkh1
ZSAqIDAuMDcyOworfQorCitWZWN0b3I8ZmxvYXQ+IEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRG
bG9hdHMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKQoreworICAgIFZlY3RvcjxmbG9hdD4g
bm9ybWFsaXplZFZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHZhbHVlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbm9ybWFsaXplZFZhbHVlc1tpXSA9IG5v
cm1hbGl6ZWRGbG9hdCh2YWx1ZXNbaV0pOworICAgIHJldHVybiBub3JtYWxpemVkVmFsdWVzOwor
fQorCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGll
ciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFQ29sb3JNYXRy
aXhTb2Z0d2FyZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZF
Q29sb3JNYXRyaXg+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBs
aWVyPEZFQ29sb3JNYXRyaXg+OworCitwdWJsaWM6CisgICAgRkVDb2xvck1hdHJpeFNvZnR3YXJl
QXBwbGllcihGRUNvbG9yTWF0cml4Jik7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYs
IGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBpbmxpbmUgdm9pZCBtYXRyaXgoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBm
bG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKSBjb25zdDsKKyAgICBpbmxpbmUgdm9pZCBzYXR1cmF0
ZUFuZEh1ZVJvdGF0ZShmbG9hdCYgcmVkLCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlKSBjb25z
dDsKKyAgICBpbmxpbmUgdm9pZCBsdW1pbmFuY2UoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBm
bG9hdCYgYmx1ZSwgZmxvYXQmIGFscGhhKSBjb25zdDsKKworI2lmIFVTRShBQ0NFTEVSQVRFKQor
ICAgIHZvaWQgYXBwbHlQbGF0Zm9ybUFjY2VsZXJhdGVkKFBpeGVsQnVmZmVyJikgY29uc3Q7Cisj
ZW5kaWYKKyAgICB2b2lkIGFwcGx5UGxhdGZvcm1VbmFjY2VsZXJhdGVkKFBpeGVsQnVmZmVyJikg
Y29uc3Q7CisKKyAgICB2b2lkIGFwcGx5UGxhdGZvcm0oUGl4ZWxCdWZmZXImKSBjb25zdDsKKwor
ICAgIGZsb2F0IG1fY29tcG9uZW50c1s5XTsKK307CisKK0ZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFw
cGxpZXI6OkZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXIoRkVDb2xvck1hdHJpeCYgZWZmZWN0
KQorICAgIDogQmFzZShlZmZlY3QpCit7CisgICAgaWYgKG1fZWZmZWN0LnR5cGUoKSA9PSBGRUNP
TE9STUFUUklYX1RZUEVfU0FUVVJBVEUpCisgICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0
ZVNhdHVyYXRlQ29tcG9uZW50cyhtX2NvbXBvbmVudHMsIG1fZWZmZWN0LnZhbHVlcygpWzBdKTsK
KyAgICBlbHNlIGlmIChtX2VmZmVjdC50eXBlKCkgPT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJP
VEFURSkKKyAgICAgICAgRkVDb2xvck1hdHJpeDo6Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50
cyhtX2NvbXBvbmVudHMsIG1fZWZmZWN0LnZhbHVlcygpWzBdKTsKK30KKworaW5saW5lIHZvaWQg
RkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6bWF0cml4KGZsb2F0JiByZWQsIGZsb2F0JiBn
cmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkgY29uc3QKIHsKICAgICBmbG9hdCByID0g
cmVkOwogICAgIGZsb2F0IGcgPSBncmVlbjsKICAgICBmbG9hdCBiID0gYmx1ZTsKICAgICBmbG9h
dCBhID0gYWxwaGE7CiAKLSAgICByZWQgICAgID0gdmFsdWVzWyAwXSAqIHIgKyB2YWx1ZXNbIDFd
ICogZyArIHZhbHVlc1sgMl0gKiBiICsgdmFsdWVzWyAzXSAqIGEgKyB2YWx1ZXNbIDRdICogMjU1
OwotICAgIGdyZWVuICAgPSB2YWx1ZXNbIDVdICogciArIHZhbHVlc1sgNl0gKiBnICsgdmFsdWVz
IFs3XSAqIGIgKyB2YWx1ZXNbIDhdICogYSArIHZhbHVlc1sgOV0gKiAyNTU7Ci0gICAgYmx1ZSAg
ICA9IHZhbHVlc1sxMF0gKiByICsgdmFsdWVzWzExXSAqIGcgKyB2YWx1ZXNbMTJdICogYiArIHZh
bHVlc1sxM10gKiBhICsgdmFsdWVzWzE0XSAqIDI1NTsKLSAgICBhbHBoYSAgID0gdmFsdWVzWzE1
XSAqIHIgKyB2YWx1ZXNbMTZdICogZyArIHZhbHVlc1sxN10gKiBiICsgdmFsdWVzWzE4XSAqIGEg
KyB2YWx1ZXNbMTldICogMjU1OworICAgIGNvbnN0IGF1dG8mIHZhbHVlcyA9IG1fZWZmZWN0LnZh
bHVlcygpOworCisgICAgcmVkICAgPSB2YWx1ZXNbIDBdICogciArIHZhbHVlc1sgMV0gKiBnICsg
dmFsdWVzWyAyXSAqIGIgKyB2YWx1ZXNbIDNdICogYSArIHZhbHVlc1sgNF0gKiAyNTU7CisgICAg
Z3JlZW4gPSB2YWx1ZXNbIDVdICogciArIHZhbHVlc1sgNl0gKiBnICsgdmFsdWVzWyA3XSAqIGIg
KyB2YWx1ZXNbIDhdICogYSArIHZhbHVlc1sgOV0gKiAyNTU7CisgICAgYmx1ZSAgPSB2YWx1ZXNb
MTBdICogciArIHZhbHVlc1sxMV0gKiBnICsgdmFsdWVzWzEyXSAqIGIgKyB2YWx1ZXNbMTNdICog
YSArIHZhbHVlc1sxNF0gKiAyNTU7CisgICAgYWxwaGEgPSB2YWx1ZXNbMTVdICogciArIHZhbHVl
c1sxNl0gKiBnICsgdmFsdWVzWzE3XSAqIGIgKyB2YWx1ZXNbMThdICogYSArIHZhbHVlc1sxOV0g
KiAyNTU7CiB9CiAKLWlubGluZSB2b2lkIHNhdHVyYXRlQW5kSHVlUm90YXRlKGZsb2F0JiByZWQs
IGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGNvbnN0IGZsb2F0KiBjb21wb25lbnRzKQoraW5s
aW5lIHZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6c2F0dXJhdGVBbmRIdWVSb3Rh
dGUoZmxvYXQmIHJlZCwgZmxvYXQmIGdyZWVuLCBmbG9hdCYgYmx1ZSkgY29uc3QKIHsKICAgICBm
bG9hdCByID0gcmVkOwogICAgIGZsb2F0IGcgPSBncmVlbjsKICAgICBmbG9hdCBiID0gYmx1ZTsK
IAotICAgIHJlZCAgICAgPSByICogY29tcG9uZW50c1swXSArIGcgKiBjb21wb25lbnRzWzFdICsg
YiAqIGNvbXBvbmVudHNbMl07Ci0gICAgZ3JlZW4gICA9IHIgKiBjb21wb25lbnRzWzNdICsgZyAq
IGNvbXBvbmVudHNbNF0gKyBiICogY29tcG9uZW50c1s1XTsKLSAgICBibHVlICAgID0gciAqIGNv
bXBvbmVudHNbNl0gKyBnICogY29tcG9uZW50c1s3XSArIGIgKiBjb21wb25lbnRzWzhdOworICAg
IHJlZCAgICAgPSByICogbV9jb21wb25lbnRzWzBdICsgZyAqIG1fY29tcG9uZW50c1sxXSArIGIg
KiBtX2NvbXBvbmVudHNbMl07CisgICAgZ3JlZW4gICA9IHIgKiBtX2NvbXBvbmVudHNbM10gKyBn
ICogbV9jb21wb25lbnRzWzRdICsgYiAqIG1fY29tcG9uZW50c1s1XTsKKyAgICBibHVlICAgID0g
ciAqIG1fY29tcG9uZW50c1s2XSArIGcgKiBtX2NvbXBvbmVudHNbN10gKyBiICogbV9jb21wb25l
bnRzWzhdOwogfQogCiAvLyBGSVhNRTogdGhpcyBzaG91bGQgdXNlIHRoZSBsdW1pbmFuY2UoLi4u
KSBmdW5jdGlvbiBpbiBDb2xvckx1bWluYW5jZS5oLgotaW5saW5lIHZvaWQgbHVtaW5hbmNlKGZs
b2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkKK2lubGlu
ZSB2b2lkIEZFQ29sb3JNYXRyaXhTb2Z0d2FyZUFwcGxpZXI6Omx1bWluYW5jZShmbG9hdCYgcmVk
LCBmbG9hdCYgZ3JlZW4sIGZsb2F0JiBibHVlLCBmbG9hdCYgYWxwaGEpIGNvbnN0CiB7CiAgICAg
YWxwaGEgPSAwLjIxMjUgKiByZWQgKyAwLjcxNTQgKiBncmVlbiArIDAuMDcyMSAqIGJsdWU7CiAg
ICAgcmVkID0gMDsKQEAgLTk3LDE4ICsxNjksMTMgQEAgaW5saW5lIHZvaWQgbHVtaW5hbmNlKGZs
b2F0JiByZWQsIGZsb2F0JiBncmVlbiwgZmxvYXQmIGJsdWUsIGZsb2F0JiBhbHBoYSkKIH0KIAog
I2lmIFVTRShBQ0NFTEVSQVRFKQotdGVtcGxhdGU8Q29sb3JNYXRyaXhUeXBlIGZpbHRlclR5cGU+
Ci1ib29sIGVmZmVjdEFwcGx5QWNjZWxlcmF0ZWQoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJy
YXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywgZmxvYXQgY29tcG9uZW50c1s5XSwgSW50
U2l6ZSBidWZmZXJTaXplKQordm9pZCBGRUNvbG9yTWF0cml4U29mdHdhcmVBcHBsaWVyOjphcHBs
eVBsYXRmb3JtQWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKSBjb25zdAogewor
ICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci5kYXRhKCk7CisgICAgYXV0byBidWZm
ZXJTaXplID0gcGl4ZWxCdWZmZXIuc2l6ZSgpOworCiAgICAgQVNTRVJUKHBpeGVsQXJyYXkubGVu
Z3RoKCkgPT0gYnVmZmVyU2l6ZS5hcmVhKCkgKiA0KTsKICAgICAKLSAgICBpZiAoZmlsdGVyVHlw
ZSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYKSB7Ci0gICAgICAgIC8vIHZJbWFnZU1hdHJp
eE11bHRpcGx5X0FSR0I4ODg4IHRha2VzIGEgNHg0IG1hdHJpeCwgaWYgYW55IHZhbHVlIGluIHRo
ZSBsYXN0IGNvbHVtbiBvZiB0aGUgRkVDb2xvck1hdHJpeCA1eDQgbWF0cml4Ci0gICAgICAgIC8v
IGlzIG5vdCB6ZXJvLCBmYWxsIGJhY2sgdG8gbm9uLXZJbWFnZSBjb2RlLgotICAgICAgICBpZiAo
dmFsdWVzWzRdICE9IDAgfHwgdmFsdWVzWzldICE9IDAgfHwgdmFsdWVzWzE0XSAhPSAwIHx8IHZh
bHVlc1sxOV0gIT0gMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBj
b25zdCBpbnQzMl90IGRpdmlzb3IgPSAyNTY7CiAgICAgdWludDhfdCogZGF0YSA9IHBpeGVsQXJy
YXkuZGF0YSgpOwogCkBAIC0xMjQsOCArMTkxLDEzIEBAIGJvb2wgZWZmZWN0QXBwbHlBY2NlbGVy
YXRlZChVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgVmVjdG9yPGZsb2F0PiYK
ICAgICBkZXN0LnJvd0J5dGVzID0gYnVmZmVyU2l6ZS53aWR0aCgpICogNDsKICAgICBkZXN0LmRh
dGEgPSBkYXRhOwogCi0gICAgc3dpdGNoIChmaWx0ZXJUeXBlKSB7CisgICAgc3dpdGNoIChtX2Vm
ZmVjdC50eXBlKCkpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgorICAg
ICAgICBicmVhazsKKwogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWDogeworICAg
ICAgICBjb25zdCBhdXRvJiB2YWx1ZXMgPSBtX2VmZmVjdC52YWx1ZXMoKTsKKwogICAgICAgICBj
b25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQxNl90Pihyb3VuZGYodmFsdWVzWyAwXSAqIGRpdmlzb3IpKSwKICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDE2X3Q+KHJvdW5kZih2YWx1ZXNbIDVdICogZGl2aXNvcikpLApAQCAtMTU0LDE5
ICsyMjYsMTkgQEAgYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5
JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JgogICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX1NBVFVSQVRFOgogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURTog
ewogICAgICAgICBjb25zdCBpbnQxNl90IG1hdHJpeFs0ICogNF0gPSB7Ci0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1swXSAqIGRpdmlzb3IpKSwKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzNdICogZGl2
aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVu
dHNbNl0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYobV9jb21wb25lbnRzWzBdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1szXSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbNl0gKiBkaXZpc29yKSks
CiAgICAgICAgICAgICAwLAogCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3Vu
ZGYoY29tcG9uZW50c1sxXSAqIGRpdmlzb3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHJvdW5kZihjb21wb25lbnRzWzRdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKGNvbXBvbmVudHNbN10gKiBkaXZpc29yKSksCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYobV9jb21wb25lbnRzWzFdICogZGl2
aXNvcikpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKG1fY29tcG9u
ZW50c1s0XSAqIGRpdmlzb3IpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJv
dW5kZihtX2NvbXBvbmVudHNbN10gKiBkaXZpc29yKSksCiAgICAgICAgICAgICAwLAogCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90Pihyb3VuZGYoY29tcG9uZW50c1syXSAqIGRpdmlz
b3IpKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihjb21wb25lbnRz
WzVdICogZGl2aXNvcikpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdD4ocm91bmRm
KGNvbXBvbmVudHNbOF0gKiBkaXZpc29yKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQx
Nl90Pihyb3VuZGYobV9jb21wb25lbnRzWzJdICogZGl2aXNvcikpLAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MTZfdD4ocm91bmRmKG1fY29tcG9uZW50c1s1XSAqIGRpdmlzb3IpKSwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3Q+KHJvdW5kZihtX2NvbXBvbmVudHNbOF0gKiBk
aXZpc29yKSksCiAgICAgICAgICAgICAwLAogCiAgICAgICAgICAgICAwLApAQCAtMjAzLDM4ICsy
NzUsMjUgQEAgYm9vbCBlZmZlY3RBcHBseUFjY2VsZXJhdGVkKFVpbnQ4Q2xhbXBlZEFycmF5JiBw
aXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JgogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCiAKLXRlbXBsYXRlPENvbG9y
TWF0cml4VHlwZSBmaWx0ZXJUeXBlPgotdm9pZCBlZmZlY3RUeXBlKFVpbnQ4Q2xhbXBlZEFycmF5
JiBwaXhlbEFycmF5LCBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMsIEludFNpemUgYnVmZmVy
U2l6ZSkKK3ZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybVVu
YWNjZWxlcmF0ZWQoUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKSBjb25zdAogewotICAgIGZsb2F0
IGNvbXBvbmVudHNbOV07Ci0KLSAgICBpZiAoZmlsdGVyVHlwZSA9PSBGRUNPTE9STUFUUklYX1RZ
UEVfU0FUVVJBVEUpCi0gICAgICAgIEZFQ29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29t
cG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotICAgIGVsc2UgaWYgKGZpbHRlclR5cGUg
PT0gRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSkKLSAgICAgICAgRkVDb2xvck1hdHJpeDo6
Y2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhjb21wb25lbnRzLCB2YWx1ZXNbMF0pOwotCisg
ICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLmRhdGEoKTsKICAgICB1bnNpZ25lZCBw
aXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS5sZW5ndGgoKTsKIAotI2lmIFVTRShBQ0NFTEVS
QVRFKQotICAgIGlmIChlZmZlY3RBcHBseUFjY2VsZXJhdGVkPGZpbHRlclR5cGU+KHBpeGVsQXJy
YXksIHZhbHVlcywgY29tcG9uZW50cywgYnVmZmVyU2l6ZSkpCi0gICAgICAgIHJldHVybjsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKGJ1ZmZlclNpemUpOwotI2VuZGlmCisgICAgc3dpdGNoICht
X2VmZmVjdC50eXBlKCkpIHsKKyAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgor
ICAgICAgICBicmVhazsKIAotICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkgewogICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX01BVFJJWDoKICAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbEJ5dGVP
ZmZzZXQgPSAwOyBwaXhlbEJ5dGVPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbEJ5dGVP
ZmZzZXQgKz0gNCkgewogICAgICAgICAgICAgZmxvYXQgcmVkID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCk7CiAgICAgICAgICAgICBmbG9hdCBncmVlbiA9IHBpeGVsQXJyYXkuaXRl
bShwaXhlbEJ5dGVPZmZzZXQgKyAxKTsKICAgICAgICAgICAgIGZsb2F0IGJsdWUgPSBwaXhlbEFy
cmF5Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMik7CiAgICAgICAgICAgICBmbG9hdCBhbHBoYSA9
IHBpeGVsQXJyYXkuaXRlbShwaXhlbEJ5dGVPZmZzZXQgKyAzKTsKLSAgICAgICAgICAgIG1hdHJp
eChyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSwgdmFsdWVzKTsKKyAgICAgICAgICAgIG1hdHJpeChy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhl
bEJ5dGVPZmZzZXQsIHJlZCk7CiAgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAxLCBncmVlbik7CiAgICAgICAgICAgICBwaXhlbEFycmF5LnNldChwaXhlbEJ5dGVP
ZmZzZXQgKyAyLCBibHVlKTsKQEAgLTI0OSw3ICszMDgsNyBAQCB2b2lkIGVmZmVjdFR5cGUoVWlu
dDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlcywg
SW50UwogICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSBwaXhlbEFycmF5Lml0ZW0ocGl4ZWxCeXRl
T2Zmc2V0ICsgMSk7CiAgICAgICAgICAgICBmbG9hdCBibHVlID0gcGl4ZWxBcnJheS5pdGVtKHBp
eGVsQnl0ZU9mZnNldCArIDIpOwogICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSBwaXhlbEFycmF5
Lml0ZW0ocGl4ZWxCeXRlT2Zmc2V0ICsgMyk7Ci0gICAgICAgICAgICBzYXR1cmF0ZUFuZEh1ZVJv
dGF0ZShyZWQsIGdyZWVuLCBibHVlLCBjb21wb25lbnRzKTsKKyAgICAgICAgICAgIHNhdHVyYXRl
QW5kSHVlUm90YXRlKHJlZCwgZ3JlZW4sIGJsdWUpOwogICAgICAgICAgICAgcGl4ZWxBcnJheS5z
ZXQocGl4ZWxCeXRlT2Zmc2V0LCByZWQpOwogICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4
ZWxCeXRlT2Zmc2V0ICsgMSwgZ3JlZW4pOwogICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXQocGl4
ZWxCeXRlT2Zmc2V0ICsgMiwgYmx1ZSk7CkBAIC0yNzMsNTEgKzMzMiw1MiBAQCB2b2lkIGVmZmVj
dFR5cGUoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcywgSW50UwogICAgIH0KIH0KIAotYm9vbCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK3ZvaWQgRkVDb2xvck1hdHJpeFNvZnR3YXJlQXBw
bGllcjo6YXBwbHlQbGF0Zm9ybShQaXhlbEJ1ZmZlciYgcGl4ZWxCdWZmZXIpIGNvbnN0Cit7Cisj
aWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgY29uc3QgYXV0byYgdmFsdWVzID0gbV9lZmZlY3QudmFs
dWVzKCk7CisKKyAgICAvLyB2SW1hZ2VNYXRyaXhNdWx0aXBseV9BUkdCODg4OCB0YWtlcyBhIDR4
NCBtYXRyaXgsIGlmIGFueSB2YWx1ZSBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIEZFQ29sb3JN
YXRyaXggNXg0IG1hdHJpeAorICAgIC8vIGlzIG5vdCB6ZXJvLCBmYWxsIGJhY2sgdG8gbm9uLXZJ
bWFnZSBjb2RlLgorICAgIGlmIChtX2VmZmVjdC50eXBlKCkgIT0gRkVDT0xPUk1BVFJJWF9UWVBF
X01BVFJJWCB8fCAoIXZhbHVlc1s0XSAmJiAhdmFsdWVzWzldICYmICF2YWx1ZXNbMTRdICYmICF2
YWx1ZXNbMTldKSkgeworICAgICAgICBhcHBseVBsYXRmb3JtQWNjZWxlcmF0ZWQocGl4ZWxCdWZm
ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgYXBwbHlQbGF0Zm9ybVVu
YWNjZWxlcmF0ZWQocGl4ZWxCdWZmZXIpOworfQorCitib29sIEZFQ29sb3JNYXRyaXhTb2Z0d2Fy
ZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYg
aW5wdXRFZmZlY3RzKQogewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
KyAgICBhdXRvIGluID0gaW5wdXRFZmZlY3RzWzBdLmdldCgpOwogCi0gICAgYXV0byByZXN1bHRJ
bWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZm
ZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOwogICAgIGlmIChpbkJ1ZmZlcikKLSAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5k
cmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJh
d0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCi0gICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9y
bWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1h
dDo6UkdCQTgsIHJlc3VsdENvbG9yU3BhY2UoKSB9OworICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZv
cm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3Jt
YXQ6OlJHQkE4LCBtX2VmZmVjdC5yZXN1bHRDb2xvclNwYWNlKCkgfTsKICAgICBJbnRSZWN0IGlt
YWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+dHJ1bmNhdGVkTG9naWNhbFNpemUoKSk7
CiAgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHJlc3VsdEltYWdlLT5nZXRQaXhlbEJ1ZmZlcihmb3Jt
YXQsIGltYWdlUmVjdCk7CiAgICAgaWYgKCFwaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgYXV0byYgcGl4ZWxBcnJheSA9IHBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0gICAg
YXV0byBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHBpeGVsQnVmZmVyLT5zaXplKCk7Ci0KLSAgICBW
ZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwotICAgIAot
ICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9X
TjoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYOgot
ICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVg+KHBpeGVsQXJyYXks
IHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURTogCi0gICAgICAgIGVmZmVjdFR5cGU8RkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFPihwaXhlbEFycmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1l
bnNpb25zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfSFVF
Uk9UQVRFOgotICAgICAgICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEU+
KHBpeGVsQXJyYXksIHZhbHVlcywgcGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOgotICAgICAg
ICBlZmZlY3RUeXBlPEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBPihwaXhlbEFy
cmF5LCB2YWx1ZXMsIHBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICAgICAgc2V0SXNBbHBoYUlt
YWdlKHRydWUpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgaWYgKG1fZWZmZWN0LnR5cGUo
KSA9PSBGRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQSkKKyAgICAgICAgbV9lZmZl
Y3Quc2V0SXNBbHBoYUltYWdlKHRydWUpOwogCisgICAgYXBwbHlQbGF0Zm9ybSgqcGl4ZWxCdWZm
ZXIpOwogICAgIHJlc3VsdEltYWdlLT5wdXRQaXhlbEJ1ZmZlcigqcGl4ZWxCdWZmZXIsIGltYWdl
UmVjdCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRkVDb2xvck1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRUNv
bG9yTWF0cml4U29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0
cygpKTsKK30KKwogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xv
ck1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmgKaW5kZXggNDk3ZWIxOTVlNDE3NWVjZGZkMGNhYjI0Y2JjZDliMGUzOWE3Zjgw
OS4uZjY5ZjBiMDFjOTUwN2UwNTI2ZTBkMTc3ZWJiZWY5NjkwMDljZTFkMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmgKQEAgLTQ0LDggKzQ0LDkgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxmbG9hdD4m
IHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CiAgICAgYm9vbCBzZXRWYWx1ZXMo
Y29uc3QgVmVjdG9yPGZsb2F0PiYpOwogCi0gICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0
ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxvYXQgdmFsdWUpOwotICAg
IHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBj
b21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlU2F0dXJh
dGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdCB2YWx1ZSk7CisgICAgc3RhdGlj
IHZvaWQgY2FsY3VsYXRlSHVlUm90YXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50cywgZmxv
YXQgdmFsdWUpOworICAgIHN0YXRpYyBWZWN0b3I8ZmxvYXQ+IG5vcm1hbGl6ZWRGbG9hdHMoY29u
c3QgVmVjdG9yPGZsb2F0PiYgdmFsdWVzKTsKIAogcHJpdmF0ZToKICAgICBGRUNvbG9yTWF0cml4
KENvbG9yTWF0cml4VHlwZSwgVmVjdG9yPGZsb2F0PiYmKTsKQEAgLTU4LDM1ICs1OSw2IEBAIHBy
aXZhdGU6CiAgICAgVmVjdG9yPGZsb2F0PiBtX3ZhbHVlczsKIH07CiAKLWlubGluZSB2b2lkIEZF
Q29sb3JNYXRyaXg6OmNhbGN1bGF0ZVNhdHVyYXRlQ29tcG9uZW50cyhmbG9hdCogY29tcG9uZW50
cywgZmxvYXQgdmFsdWUpCi17Ci0gICAgY29tcG9uZW50c1swXSA9ICgwLjIxMyArIDAuNzg3ICog
dmFsdWUpOwotICAgIGNvbXBvbmVudHNbMV0gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKLSAg
ICBjb21wb25lbnRzWzJdID0gKDAuMDcyIC0gMC4wNzIgKiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50
c1szXSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOwotICAgIGNvbXBvbmVudHNbNF0gPSAoMC43
MTUgKyAwLjI4NSAqIHZhbHVlKTsKLSAgICBjb21wb25lbnRzWzVdID0gKDAuMDcyIC0gMC4wNzIg
KiB2YWx1ZSk7Ci0gICAgY29tcG9uZW50c1s2XSA9ICgwLjIxMyAtIDAuMjEzICogdmFsdWUpOwot
ICAgIGNvbXBvbmVudHNbN10gPSAoMC43MTUgLSAwLjcxNSAqIHZhbHVlKTsKLSAgICBjb21wb25l
bnRzWzhdID0gKDAuMDcyICsgMC45MjggKiB2YWx1ZSk7Ci19Ci0KLWlubGluZSB2b2lkIEZFQ29s
b3JNYXRyaXg6OmNhbGN1bGF0ZUh1ZVJvdGF0ZUNvbXBvbmVudHMoZmxvYXQqIGNvbXBvbmVudHMs
IGZsb2F0IHZhbHVlKQotewotICAgIGZsb2F0IGNvc0h1ZSA9IGNvcyh2YWx1ZSAqIHBpRmxvYXQg
LyAxODApOwotICAgIGZsb2F0IHNpbkh1ZSA9IHNpbih2YWx1ZSAqIHBpRmxvYXQgLyAxODApOwot
ICAgIGNvbXBvbmVudHNbMF0gPSAwLjIxMyArIGNvc0h1ZSAqIDAuNzg3IC0gc2luSHVlICogMC4y
MTM7Ci0gICAgY29tcG9uZW50c1sxXSA9IDAuNzE1IC0gY29zSHVlICogMC43MTUgLSBzaW5IdWUg
KiAwLjcxNTsKLSAgICBjb21wb25lbnRzWzJdID0gMC4wNzIgLSBjb3NIdWUgKiAwLjA3MiArIHNp
bkh1ZSAqIDAuOTI4OwotICAgIGNvbXBvbmVudHNbM10gPSAwLjIxMyAtIGNvc0h1ZSAqIDAuMjEz
ICsgc2luSHVlICogMC4xNDM7Ci0gICAgY29tcG9uZW50c1s0XSA9IDAuNzE1ICsgY29zSHVlICog
MC4yODUgKyBzaW5IdWUgKiAwLjE0MDsKLSAgICBjb21wb25lbnRzWzVdID0gMC4wNzIgLSBjb3NI
dWUgKiAwLjA3MiAtIHNpbkh1ZSAqIDAuMjgzOwotICAgIGNvbXBvbmVudHNbNl0gPSAwLjIxMyAt
IGNvc0h1ZSAqIDAuMjEzIC0gc2luSHVlICogMC43ODc7Ci0gICAgY29tcG9uZW50c1s3XSA9IDAu
NzE1IC0gY29zSHVlICogMC43MTUgKyBzaW5IdWUgKiAwLjcxNTsKLSAgICBjb21wb25lbnRzWzhd
ID0gMC4wNzIgKyBjb3NIdWUgKiAwLjkyOCArIHNpbkh1ZSAqIDAuMDcyOwotfQotCi0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNU
KEZFQ29sb3JNYXRyaXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCBjZDQ4
NDUyZGQzMTc1M2JmY2JmZTMzYzM0Mzg2N2NlM2M5YmExMTZmLi5kYWUxODllYTlkNzdjZjc0NmFh
MzQxNmNiODE2ZmVmZjIxNGNlM2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAK
QEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRUNvbXBv
bmVudFRyYW5zZmVyLmgiCiAKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgpAQCAtNDcsMTggKzQ4LDQxIEBAIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OkZFQ29tcG9uZW50VHJhbnNmZXIoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYg
cmVkRnVuCiB7CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUlkZW50aXR5
VGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJikKKy8v
IEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVy
IHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVDb21wb25lbnRU
cmFuc2ZlclNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxp
ZXI8RkVDb21wb25lbnRUcmFuc2Zlcj4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RD
b25jcmV0ZUFwcGxpZXI8RkVDb21wb25lbnRUcmFuc2Zlcj47CisKK3B1YmxpYzoKKyAgICB1c2lu
ZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0
ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
dXNpbmcgTG9va3VwVGFibGUgPSBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj47CisKKyAgICBzdGF0
aWMgdm9pZCBjb21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlVGFidWxhclRhYmxl
KExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIHN0
YXRpYyB2b2lkIGNvbXB1dGVEaXNjcmV0ZVRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVMaW5lYXJUYWJs
ZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAgICBz
dGF0aWMgdm9pZCBjb21wdXRlR2FtbWFUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mKTsKKworICAgIHN0YXRpYyBMb29rdXBUYWJsZSBjb21wdXRlTG9v
a3VwVGFibGUoY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOworCisgICAgdm9pZCBh
cHBseVBsYXRmb3JtKFBpeGVsQnVmZmVyJikgY29uc3Q7Cit9OworCit2b2lkIEZFQ29tcG9uZW50
VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxl
JiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpCiB7CiB9CiAKLXZvaWQgRkVDb21w
b25lbnRUcmFuc2Zlcjo6Y29tcHV0ZVRhYnVsYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQordm9pZCBG
RUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVyOjpjb21wdXRlVGFidWxhclRhYmxlKExv
b2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5z
ZmVyRnVuY3Rpb24pCiB7CiAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0
cmFuc2ZlckZ1bmN0aW9uLnRhYmxlVmFsdWVzOwogICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVl
cy5zaXplKCk7CiAgICAgaWYgKG4gPCAxKQotICAgICAgICByZXR1cm47ICAgICAgICAgICAgCisg
ICAgICAgIHJldHVybjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGRvdWJsZSBjID0gaSAvIDI1NS4wOyAgICAgICAgICAgICAgICAK
KyAgICAgICAgZG91YmxlIGMgPSBpIC8gMjU1LjA7CiAgICAgICAgIHVuc2lnbmVkIGsgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oYyAqIChuIC0gMSkpOwogICAgICAgICBkb3VibGUgdjEgPSB0YWJs
ZVZhbHVlc1trXTsKICAgICAgICAgZG91YmxlIHYyID0gdGFibGVWYWx1ZXNbc3RkOjptaW4oKGsg
KyAxKSwgKG4gLSAxKSldOwpAQCAtNjgsNyArOTIsNyBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNm
ZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9u
ZQogICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlRGlzY3JldGVU
YWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiB0cmFuc2ZlckZ1bmN0aW9uKQordm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBs
aWVyOjpjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQogewogICAgIGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsK
ICAgICB1bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwpAQCAtODMsNyArMTA3LDcgQEAg
dm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRlRGlzY3JldGVUYWJsZShMb29rdXBUYWJs
ZSYgdmFsdWVzLCBjb25zdCBDb21wb24KICAgICB9CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFu
c2Zlcjo6Y29tcHV0ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiB2YWx1ZXMsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCit2b2lkIEZFQ29tcG9uZW50
VHJhbnNmZXJTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVMaW5lYXJUYWJsZShMb29rdXBUYWJsZSYg
dmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9u
KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgZG91YmxlIHZhbCA9IHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgKiBpICsgMjU1ICog
dHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQ7CkBAIC05Miw3ICsxMTYsNyBAQCB2b2lkIEZFQ29t
cG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBj
b25zdCBDb21wb25lbgogICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21w
dXRlR2FtbWFUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQordm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyU29m
dHdhcmVBcHBsaWVyOjpjb21wdXRlR2FtbWFUYWJsZShMb29rdXBUYWJsZSYgdmFsdWVzLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQogewogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgZG91
YmxlIGV4cG9uZW50ID0gdHJhbnNmZXJGdW5jdGlvbi5leHBvbmVudDsgLy8gUkNWVCBkb2Vzbid0
IGxpa2UgcGFzc2luZyBhIGRvdWJsZSBhbmQgYSBmbG9hdCB0byBwb3csIHNvIHByb21vdGUgdGhp
cyB0byBkb3VibGUKQEAgLTEwMiw2MSArMTI2LDY2IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zl
cjo6Y29tcHV0ZUdhbW1hVGFibGUoTG9va3VwVGFibGUmIHZhbHVlcywgY29uc3QgQ29tcG9uZW50
CiAgICAgfQogfQogCi1ib29sIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImKQorRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6
TG9va3VwVGFibGUgRkVDb21wb25lbnRUcmFuc2ZlclNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUxv
b2t1cFRhYmxlKGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmN0aW9uKQogewot
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBMb29rdXBUYWJsZSB0
YWJsZTsKIAotICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVz
dWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCk7Ci0gICAgaWYgKCFk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlLnNpemUoKTsgKytpKQorICAgICAgICB0YWJsZVtpXSA9
IGk7CisKKyAgICB1c2luZyBUcmFuc2ZlclR5cGUgPSB2b2lkICgqKShMb29rdXBUYWJsZSYsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKKyAgICBUcmFuc2ZlclR5cGUgY2FsbEVm
ZmVjdFtdID0geworICAgICAgICBjb21wdXRlSWRlbnRpdHlUYWJsZSwgICAvLyBGRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfVU5LTk9XTgorICAgICAgICBjb21wdXRlSWRlbnRpdHlUYWJsZSwgICAv
LyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfSURFTlRJVFkKKyAgICAgICAgY29tcHV0ZVRhYnVs
YXJUYWJsZSwgICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1RBQkxFCisgICAgICAgIGNv
bXB1dGVEaXNjcmV0ZVRhYmxlLCAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9ESVNDUkVU
RQorICAgICAgICBjb21wdXRlTGluZWFyVGFibGUsICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfTElORUFSCisgICAgICAgIGNvbXB1dGVHYW1tYVRhYmxlICAgICAgIC8vIEZFQ09NUE9O
RU5UVFJBTlNGRVJfVFlQRV9HQU1NQQorICAgIH07CiAKLSAgICBMb29rdXBUYWJsZSByZWRUYWJs
ZTsKLSAgICBMb29rdXBUYWJsZSBncmVlblRhYmxlOwotICAgIExvb2t1cFRhYmxlIGJsdWVUYWJs
ZTsKLSAgICBMb29rdXBUYWJsZSBhbHBoYVRhYmxlOwotICAgIGNvbXB1dGVMb29rdXBUYWJsZXMo
cmVkVGFibGUsIGdyZWVuVGFibGUsIGJsdWVUYWJsZSwgYWxwaGFUYWJsZSk7CisgICAgUkVMRUFT
RV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KGZ1
bmN0aW9uLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7CisgICAgY2FsbEVm
ZmVjdFtmdW5jdGlvbi50eXBlXSh0YWJsZSwgZnVuY3Rpb24pOwogCi0gICAgSW50UmVjdCBkcmF3
aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7Ci0gICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25Q
aXhlbEJ1ZmZlciwgZHJhd2luZ1JlY3QpOwotICAgIAotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4
ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICB1aW50OF90KiBk
YXRhID0gZGVzdGluYXRpb25QaXhlbEFycmF5LmRhdGEoKTsKLSAgICB1bnNpZ25lZCBkZXN0aW5h
dGlvblBpeGVsQXJyYXlMZW5ndGggPSBkZXN0aW5hdGlvblBpeGVsQXJyYXkubGVuZ3RoKCk7Cisg
ICAgcmV0dXJuIHRhYmxlOworfQorCit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXJTb2Z0d2FyZUFw
cGxpZXI6OmFwcGx5UGxhdGZvcm0oUGl4ZWxCdWZmZXImIHBpeGVsQnVmZmVyKSBjb25zdAorewor
ICAgIGF1dG8mIHBpeGVsQXJyYXkgPSBwaXhlbEJ1ZmZlci5kYXRhKCk7CisgICAgdW5zaWduZWQg
cGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXkubGVuZ3RoKCk7CisgICAgdWludDhfdCogZGF0
YSA9IHBpeGVsQXJyYXkuZGF0YSgpOwogCi0gICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9
IDA7IHBpeGVsT2Zmc2V0IDwgZGVzdGluYXRpb25QaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNl
dCArPSA0KSB7Ci0gICAgICAgIGRhdGFbcGl4ZWxPZmZzZXRdID0gcmVkVGFibGVbZGF0YVtwaXhl
bE9mZnNldF1dOworICAgIGF1dG8gcmVkVGFibGUgICA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2Vm
ZmVjdC5yZWRGdW5jdGlvbigpKTsKKyAgICBhdXRvIGdyZWVuVGFibGUgPSBjb21wdXRlTG9va3Vw
VGFibGUobV9lZmZlY3QuZ3JlZW5GdW5jdGlvbigpKTsKKyAgICBhdXRvIGJsdWVUYWJsZSAgPSBj
b21wdXRlTG9va3VwVGFibGUobV9lZmZlY3QuYmx1ZUZ1bmN0aW9uKCkpOworICAgIGF1dG8gYWxw
aGFUYWJsZSA9IGNvbXB1dGVMb29rdXBUYWJsZShtX2VmZmVjdC5hbHBoYUZ1bmN0aW9uKCkpOwor
CisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxB
cnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgeworICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0
XSAgICAgPSByZWRUYWJsZVtkYXRhW3BpeGVsT2Zmc2V0XV07CiAgICAgICAgIGRhdGFbcGl4ZWxP
ZmZzZXQgKyAxXSA9IGdyZWVuVGFibGVbZGF0YVtwaXhlbE9mZnNldCArIDFdXTsKICAgICAgICAg
ZGF0YVtwaXhlbE9mZnNldCArIDJdID0gYmx1ZVRhYmxlW2RhdGFbcGl4ZWxPZmZzZXQgKyAyXV07
CiAgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQgKyAzXSA9IGFscGhhVGFibGVbZGF0YVtwaXhlbE9m
ZnNldCArIDNdXTsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRUNvbXBv
bmVudFRyYW5zZmVyOjpjb21wdXRlTG9va3VwVGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwg
TG9va3VwVGFibGUmIGdyZWVuVGFibGUsIExvb2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRh
YmxlJiBhbHBoYVRhYmxlKQorYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyU29mdHdhcmVBcHBsaWVy
OjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZm
ZWN0cykKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVkVGFibGUuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIHJlZFRhYmxlW2ldID0gZ3JlZW5UYWJsZVtpXSA9IGJsdWVUYWJsZVtpXSA9
IGFscGhhVGFibGVbaV0gPSBpOworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNb
MF0uZ2V0KCk7CisgICAgCisgICAgYXV0byBkZXN0aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZl
Y3QucGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHVzaW5nIFRyYW5zZmVyVHlwZSA9IHZvaWQgKCopKExvb2t1cFRhYmxlJiwg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIFRyYW5zZmVyVHlwZSBjYWxs
RWZmZWN0W10gPSB7Ci0gICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLCAgIC8vIEZFQ09NUE9O
RU5UVFJBTlNGRVJfVFlQRV9VTktOT1dOCi0gICAgICAgIGNvbXB1dGVJZGVudGl0eVRhYmxlLCAg
IC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9JREVOVElUWQotICAgICAgICBjb21wdXRlVGFi
dWxhclRhYmxlLCAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEUKLSAgICAgICAg
Y29tcHV0ZURpc2NyZXRlVGFibGUsICAgLy8gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0RJU0NS
RVRFCi0gICAgICAgIGNvbXB1dGVMaW5lYXJUYWJsZSwgICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNG
RVJfVFlQRV9MSU5FQVIKLSAgICAgICAgY29tcHV0ZUdhbW1hVGFibGUgICAgICAgLy8gRkVDT01Q
T05FTlRUUkFOU0ZFUl9UWVBFX0dBTU1BCi0gICAgfTsKKyAgICBhdXRvIGRyYXdpbmdSZWN0ID0g
bV9lZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKTsKKyAgICBpbi0+Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlvblBp
eGVsQnVmZmVyLCBkcmF3aW5nUmVjdCk7CiAKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fcmVkRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJS
QVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fZ3JlZW5GdW5jdGlvbi50eXBlKSA8IFdURl9BUlJB
WV9MRU5HVEgoY2FsbEVmZmVjdCkpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKHN0YXRpY19jYXN0PHNpemVfdD4obV9ibHVlRnVuY3Rpb24udHlwZSkgPCBXVEZfQVJSQVlf
TEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYWxwaGFGdW5jdGlvbi50eXBlKSA8IFdURl9BUlJBWV9M
RU5HVEgoY2FsbEVmZmVjdCkpOworICAgIGFwcGx5UGxhdGZvcm0oKmRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXIpOworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgY2FsbEVmZmVjdFttX3JlZEZ1bmN0
aW9uLnR5cGVdKHJlZFRhYmxlLCBtX3JlZEZ1bmN0aW9uKTsKLSAgICBjYWxsRWZmZWN0W21fZ3Jl
ZW5GdW5jdGlvbi50eXBlXShncmVlblRhYmxlLCBtX2dyZWVuRnVuY3Rpb24pOwotICAgIGNhbGxF
ZmZlY3RbbV9ibHVlRnVuY3Rpb24udHlwZV0oYmx1ZVRhYmxlLCBtX2JsdWVGdW5jdGlvbik7Ci0g
ICAgY2FsbEVmZmVjdFttX2FscGhhRnVuY3Rpb24udHlwZV0oYWxwaGFUYWJsZSwgbV9hbHBoYUZ1
bmN0aW9uKTsKK2Jvb2wgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVy
U29mdHdhcmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKIH0K
IAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbXBvbmVu
dFRyYW5zZmVyVHlwZSB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAppbmRleCA2YWRh
OWMwYWJiZTVjMmY5ZDY1YmQ5MTlmZmVjNGYxNzNkMDAzNDE0Li41MThlYTEzNDdhNGFkZGJhNGNk
NTAwY2I0MmM4MTM3MDZkY2NkMTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaApAQCAt
NjEsMTYgKzYxLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUNvbXBvbmVudFRyYW5zZmVy
KGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVuYywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVu
Yyk7CiAKLSAgICB1c2luZyBMb29rdXBUYWJsZSA9IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PjsK
LQotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxlKExvb2t1cFRhYmxlJiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVU
YWJ1bGFyVGFibGUoTG9va3VwVGFibGUmLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
Jik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0ZURpc2NyZXRlVGFibGUoTG9va3VwVGFibGUmLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0gICAgc3RhdGljIHZvaWQgY29tcHV0
ZUxpbmVhclRhYmxlKExvb2t1cFRhYmxlJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biYpOwotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVHYW1tYVRhYmxlKExvb2t1cFRhYmxlJiwgY29u
c3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwotCi0gICAgdm9pZCBjb21wdXRlTG9va3Vw
VGFibGVzKExvb2t1cFRhYmxlJiByZWRUYWJsZSwgTG9va3VwVGFibGUmIGdyZWVuVGFibGUsIExv
b2t1cFRhYmxlJiBibHVlVGFibGUsIExvb2t1cFRhYmxlJiBhbHBoYVRhYmxlKTsKLQogICAgIGJv
b2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwogCiAgICAg
V1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYs
IFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4
IDlkOTJlMDE4YWRkMDNmZmMwYjNmNjhhZTIwNjZmYjE2MGYyNjQ0NDkuLjE1YTcxMjk5ODgyOWFj
ZDliNGQyOTQ1YWZkZWJiZTZkNjg3YjdkYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0yNSw2ICsy
NSw3IEBACiAjaW5jbHVkZSAiRkVDb21wb3NpdGUuaCIKIAogI2luY2x1ZGUgIkZFQ29tcG9zaXRl
QXJpdGhtZXRpY05FT04uaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgpAQCAtODcsMTUgKzg4LDYxIEBAIGJvb2wgRkVDb21wb3NpdGU6
OnNldEs0KGZsb2F0IGs0KQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdW5zaWduZWQg
Y2hhciBjbGFtcEJ5dGUoaW50IGMpCit2b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKIHsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1
ZmZbXSA9IHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyksIDI1NSwgMCB9OworICAgIHN3
aXRjaCAobV90eXBlKSB7CisgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjoKKyAgICBj
YXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6CisgICAgICAgIC8vIEZvciBJbiBhbmQgQXRv
cCB0aGUgZmlyc3QgZWZmZWN0IGp1c3QgaW5mbHVlbmNlcyB0aGUgcmVzdWx0IG9mCisgICAgICAg
IC8vIHRoZSBzZWNvbmQgZWZmZWN0LiBTbyBqdXN0IHVzZSB0aGUgYWJzb2x1dGUgcGFpbnQgcmVj
dCBvZiB0aGUgc2Vjb25kIGVmZmVjdCBoZXJlLgorICAgICAgICBzZXRBYnNvbHV0ZVBhaW50UmVj
dChpbnB1dEVmZmVjdCgxKS0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgICAgIGNsaXBBYnNv
bHV0ZVBhaW50UmVjdCgpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9BUklUSE1FVElDOgorICAgICAgICAvLyBBcml0aG1ldGljIG1heSBpbmZsdW5jZSB0
aGUgY29tcGVsZSBmaWx0ZXIgcHJpbWl0aXZlIHJlZ2lvbi4gU28gd2UgY2FuJ3QKKyAgICAgICAg
Ly8gb3B0aW1pemUgdGhlIHBhaW50IHJlZ2lvbiBoZXJlLgorICAgICAgICBzZXRBYnNvbHV0ZVBh
aW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOworICAgICAgICByZXR1
cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gVGFrZSB0aGUgdW5pb24gb2YgYm90aCBpbnB1
dCBlZmZlY3RzLgorICAgICAgICBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KGZpbHRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKKy8vIEZJWE1FOiBNb3Zl
IHRoZSBjbGFzcyBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2Ug
YW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFQ29tcG9zaXRlU29mdHdhcmVBcHBsaWVyIDogcHVi
bGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUNvbXBvc2l0ZT4geworICAgIHVzaW5n
IEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVDb21wb3NpdGU+OworCitwdWJs
aWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIHN0YXRpYyB1aW50OF90IGNsYW1wQnl0ZShpbnQpOworCisgICAgdGVtcGxh
dGUgPGludCBiMSwgaW50IGI0PgorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGht
ZXRpY1BpeGVscyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0
aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywg
ZmxvYXQgazQpOworCisgICAgdGVtcGxhdGUgPGludCBiMSwgaW50IGI0PgorICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCh1bnNpZ25lZCBjaGFy
KiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0
aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOworCisgICAgc3RhdGlj
IGlubGluZSB2b2lkIGFwcGx5UGxhdGZvcm1Bcml0aG1ldGljKHVuc2lnbmVkIGNoYXIqIHNvdXJj
ZSwgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb24sIGludCBwaXhlbEFycmF5TGVuZ3RoLCBmbG9h
dCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBrNCk7CisKKyAgICBib29sIGFwcGx5QXJp
dGhtZXRpYyhGaWx0ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3QqIGluMik7CisgICAgYm9vbCBh
cHBseU5vbkFyaXRobWV0aWMoRmlsdGVyRWZmZWN0KiBpbiwgRmlsdGVyRWZmZWN0KiBpbjIpOwor
fTsKKwordWludDhfdCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y2xhbXBCeXRlKGludCBj
KQoreworICAgIHVpbnQ4X3QgYnVmZltdID0geyBzdGF0aWNfY2FzdDx1aW50OF90PihjKSwgMjU1
LCAwIH07CiAgICAgdW5zaWduZWQgdWMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYyk7CiAgICAg
cmV0dXJuIGJ1ZmZbISEodWMgJiB+MHhmZikgKyAhISh1YyAmIH4ofjB1ID4+IDEpKV07CiB9CiAK
IHRlbXBsYXRlIDxpbnQgYjEsIGludCBiND4KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJp
dGhtZXRpY1BpeGVscyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3Rp
bmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBr
MywgZmxvYXQgazQpCitpbmxpbmUgdm9pZCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y29t
cHV0ZUFyaXRobWV0aWNQaXhlbHModW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFy
KiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KQogewogICAgIGZsb2F0IHNjYWxlZEsxOwogICAgIGZsb2F0IHNj
YWxlZEs0OwpAQCAtMTIyLDcgKzE2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJp
dGhtZXRpY1BpeGVscyh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqCiAvLyBj
b21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xhbXBlZCBpcyBhIGZhc3RlciB2ZXJzaW9uIG9mIGNv
bXB1dGVBcml0aG1ldGljUGl4ZWxzIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgY2xhbXBpbmcK
IC8vIGlzIG5vdCBuZWNlc3NhcnkuIFRoaXMgZW5hYmxlcyBhZ2dyZXNpdmUgY29tcGlsZXIgb3B0
aW1pemF0aW9ucyBzdWNoIGFzIGF1dG8tdmVjdG9yaXphdGlvbi4KIHRlbXBsYXRlIDxpbnQgYjEs
IGludCBiND4KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJpdGhtZXRpY1BpeGVsc1VuY2xh
bXBlZCh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3RpbmF0aW9uLCBp
bnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQg
azQpCitpbmxpbmUgdm9pZCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6Y29tcHV0ZUFyaXRo
bWV0aWNQaXhlbHNVbmNsYW1wZWQodW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFy
KiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KQogewogICAgIGZsb2F0IHNjYWxlZEsxOwogICAgIGZsb2F0IHNj
YWxlZEs0OwpAQCAtMTQ3LDcgKzE5NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjb21wdXRlQXJp
dGhtZXRpY1BpeGVsc1VuY2xhbXBlZCh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnCiB9CiAK
ICNpZiAhSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQotc3RhdGljIGlubGluZSB2b2lkIGFyaXRo
bWV0aWNTb2Z0d2FyZSh1bnNpZ25lZCBjaGFyKiBzb3VyY2UsIHVuc2lnbmVkIGNoYXIqIGRlc3Rp
bmF0aW9uLCBpbnQgcGl4ZWxBcnJheUxlbmd0aCwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBr
MywgZmxvYXQgazQpCitpbmxpbmUgdm9pZCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBw
bHlQbGF0Zm9ybUFyaXRobWV0aWModW5zaWduZWQgY2hhciogc291cmNlLCB1bnNpZ25lZCBjaGFy
KiBkZXN0aW5hdGlvbiwgaW50IHBpeGVsQXJyYXlMZW5ndGgsIGZsb2F0IGsxLCBmbG9hdCBrMiwg
ZmxvYXQgazMsIGZsb2F0IGs0KQogewogICAgIGZsb2F0IHVwcGVyTGltaXQgPSBzdGQ6Om1heCgw
LjBmLCBrMSkgKyBzdGQ6Om1heCgwLjBmLCBrMikgKyBzdGQ6Om1heCgwLjBmLCBrMykgKyBrNDsK
ICAgICBmbG9hdCBsb3dlckxpbWl0ID0gc3RkOjptaW4oMC4wZiwgazEpICsgc3RkOjptaW4oMC4w
ZiwgazIpICsgc3RkOjptaW4oMC4wZiwgazMpICsgazQ7CkBAIC0xODAsNjYgKzIyNywzMiBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgYXJpdGhtZXRpY1NvZnR3YXJlKHVuc2lnbmVkIGNoYXIqIHNvdXJj
ZSwgdW5zaWduZWQgY2hhciogZGVzdAogfQogI2VuZGlmCiAKLWlubGluZSB2b2lkIEZFQ29tcG9z
aXRlOjpwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGZsb2F0IGsxLCBmbG9hdCBr
MiwgZmxvYXQgazMsIGZsb2F0IGs0KQorYm9vbCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6
YXBwbHlBcml0aG1ldGljKEZpbHRlckVmZmVjdCogaW4sIEZpbHRlckVmZmVjdCogaW4yKQogewot
ICAgIGludCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoKCk7Ci0gICAgQVNTRVJUKGxlbmd0aCA9PSBz
dGF0aWNfY2FzdDxpbnQ+KGRlc3RpbmF0aW9uLmxlbmd0aCgpKSk7Ci0gICAgLy8gVGhlIHNlbGVj
dGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxseS4KLSNpZiBIQVZF
KEFSTV9ORU9OX0lOVFJJTlNJQ1MpCi0gICAgQVNTRVJUKCEobGVuZ3RoICYgMHgzKSk7Ci0gICAg
cGxhdGZvcm1Bcml0aG1ldGljTmVvbihzb3VyY2UuZGF0YSgpLCBkZXN0aW5hdGlvbi5kYXRhKCks
IGxlbmd0aCwgazEsIGsyLCBrMywgazQpOwotI2Vsc2UKLSAgICBhcml0aG1ldGljU29mdHdhcmUo
c291cmNlLmRhdGEoKSwgZGVzdGluYXRpb24uZGF0YSgpLCBsZW5ndGgsIGsxLCBrMiwgazMsIGs0
KTsKLSNlbmRpZgotfQorICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0
LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
OworICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi12b2lkIEZFQ29tcG9zaXRlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBG
aWx0ZXImIGZpbHRlcikKLXsKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgRkVDT01Q
T1NJVEVfT1BFUkFUT1JfSU46Ci0gICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgot
ICAgICAgICAvLyBGb3IgSW4gYW5kIEF0b3AgdGhlIGZpcnN0IGVmZmVjdCBqdXN0IGluZmx1ZW5j
ZXMgdGhlIHJlc3VsdCBvZgotICAgICAgICAvLyB0aGUgc2Vjb25kIGVmZmVjdC4gU28ganVzdCB1
c2UgdGhlIGFic29sdXRlIHBhaW50IHJlY3Qgb2YgdGhlIHNlY29uZCBlZmZlY3QgaGVyZS4KLSAg
ICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoaW5wdXRFZmZlY3QoMSktPmFic29sdXRlUGFpbnRS
ZWN0KCkpOwotICAgICAgICBjbGlwQWJzb2x1dGVQYWludFJlY3QoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzoKLSAgICAgICAgLy8g
QXJpdGhtZXRpYyBtYXkgaW5mbHVuY2UgdGhlIGNvbXBlbGUgZmlsdGVyIHByaW1pdGl2ZSByZWdp
b24uIFNvIHdlIGNhbid0Ci0gICAgICAgIC8vIG9wdGltaXplIHRoZSBwYWludCByZWdpb24gaGVy
ZS4KLSAgICAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZl
Y3RSZWN0KCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRh
a2UgdGhlIHVuaW9uIG9mIGJvdGggaW5wdXQgZWZmZWN0cy4KLSAgICAgICAgRmlsdGVyRWZmZWN0
OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChmaWx0ZXIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIEludFJlY3QgZWZmZWN0QURyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBh
dXRvIHNvdXJjZVBpeGVsQnVmZmVyID0gaW4tPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVmZmVjdEFEcmF3aW5nUmVjdCwgbV9lZmZl
Y3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBpZiAoIXNvdXJjZVBpeGVsQnVmZmVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9
IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRl
UGFpbnRSZWN0KCkpOworICAgIGluMi0+Y29weVBpeGVsQnVmZmVyUmVzdWx0KCpkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLCBlZmZlY3RCRHJhd2luZ1JlY3QpOworCisgICAgYXV0byYgc291cmNlUGl4
ZWxBcnJheSA9IHNvdXJjZVBpeGVsQnVmZmVyLT5kYXRhKCk7CisgICAgYXV0byYgZGVzdGluYXRp
b25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOworCisgICAgaW50
IGxlbmd0aCA9IHNvdXJjZVBpeGVsQXJyYXkubGVuZ3RoKCk7CisgICAgQVNTRVJUKGxlbmd0aCA9
PSBzdGF0aWNfY2FzdDxpbnQ+KGRlc3RpbmF0aW9uUGl4ZWxBcnJheS5sZW5ndGgoKSkpOworICAg
IGFwcGx5UGxhdGZvcm1Bcml0aG1ldGljKHNvdXJjZVBpeGVsQXJyYXkuZGF0YSgpLCBkZXN0aW5h
dGlvblBpeGVsQXJyYXkuZGF0YSgpLCBsZW5ndGgsIG1fZWZmZWN0LmsxKCksIG1fZWZmZWN0Lmsy
KCksIG1fZWZmZWN0LmszKCksIG1fZWZmZWN0Lms0KCkpOworICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikK
K2Jvb2wgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5Tm9uQXJpdGhtZXRpYyhGaWx0
ZXJFZmZlY3QqIGluLCBGaWx0ZXJFZmZlY3QqIGluMikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgx
KTsKLQotICAgIGlmIChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykg
ewotICAgICAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclJlc3Vs
dChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKLSAgICAgICAgaWYgKCFk
ZXN0aW5hdGlvblBpeGVsQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAKLSAgICAgICAgSW50UmVjdCBlZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25P
ZklucHV0UGl4ZWxCdWZmZXIoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAgICAgICBhdXRv
IHNvdXJjZVBpeGVsQnVmZmVyID0gaW4tPmdldFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGVmZmVjdEFEcmF3aW5nUmVjdCwgb3BlcmF0aW5n
Q29sb3JTcGFjZSgpKTsKLSAgICAgICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZlcikKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBJbnRSZWN0IGVmZmVjdEJEcmF3aW5nUmVjdCA9
IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbjItPmFic29sdXRlUGFpbnRSZWN0
KCkpOwotICAgICAgICBpbjItPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhl
bEJ1ZmZlciwgZWZmZWN0QkRyYXdpbmdSZWN0KTsKLQotICAgICAgICBhdXRvJiBzb3VyY2VQaXhl
bEFycmF5ID0gc291cmNlUGl4ZWxCdWZmZXItPmRhdGEoKTsKLSAgICAgICAgYXV0byYgZGVzdGlu
YXRpb25QaXhlbEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotICAgICAg
ICBwbGF0Zm9ybUFyaXRobWV0aWNTb2Z0d2FyZShzb3VyY2VQaXhlbEFycmF5LCBkZXN0aW5hdGlv
blBpeGVsQXJyYXksIG1fazEsIG1fazIsIG1fazMsIG1fazQpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBhdXRvIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsK
KyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAg
ICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI0OCw1MCAr
MjYxLDc1IEBAIGJvb2wgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImKQogICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyMikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgR3JhcGhpY3NDb250ZXh0JiBmaWx0ZXJDb250ZXh0ID0gcmVz
dWx0SW1hZ2UtPmNvbnRleHQoKTsKKyAgICBhdXRvJiBmaWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1h
Z2UtPmNvbnRleHQoKTsKKworICAgIHN3aXRjaCAobV9lZmZlY3Qub3BlcmF0aW9uKCkpIHsKKyAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX1VOS05PV046CisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRP
Ul9PVkVSOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZm
ZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkp
OwotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAg
ICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3Qu
ZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAg
ICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVj
dC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAg
ICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9JTjogewogICAg
ICAgICAvLyBBcHBsaWVzIG9ubHkgdG8gdGhlIGludGVyc2VjdGVkIHJlZ2lvbi4KICAgICAgICAg
SW50UmVjdCBkZXN0aW5hdGlvblJlY3QgPSBpbi0+YWJzb2x1dGVQYWludFJlY3QoKTsKICAgICAg
ICAgZGVzdGluYXRpb25SZWN0LmludGVyc2VjdChpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpOwot
ICAgICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KGFic29sdXRlUGFpbnRSZWN0KCkpOwor
ICAgICAgICBkZXN0aW5hdGlvblJlY3QuaW50ZXJzZWN0KG1fZWZmZWN0LmFic29sdXRlUGFpbnRS
ZWN0KCkpOwogICAgICAgICBpZiAoZGVzdGluYXRpb25SZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBJbnRSZWN0IGFkanVzdGVkRGVzdGluYXRpb25SZWN0ID0gZGVz
dGluYXRpb25SZWN0IC0gYWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOworICAgICAgICBJ
bnRSZWN0IGFkanVzdGVkRGVzdGluYXRpb25SZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gbV9lZmZl
Y3QuYWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpOwogICAgICAgICBJbnRSZWN0IHNvdXJj
ZVJlY3QgPSBkZXN0aW5hdGlvblJlY3QgLSBpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlv
bigpOwogICAgICAgICBJbnRSZWN0IHNvdXJjZTJSZWN0ID0gZGVzdGluYXRpb25SZWN0IC0gaW4y
LT5hYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7CiAgICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIEZsb2F0UmVjdChhZGp1c3RlZERlc3RpbmF0
aW9uUmVjdCksIEZsb2F0UmVjdChzb3VyY2UyUmVjdCkpOwogICAgICAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIEZsb2F0UmVjdChhZGp1c3RlZERlc3RpbmF0
aW9uUmVjdCksIEZsb2F0UmVjdChzb3VyY2VSZWN0KSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291
cmNlSW4gfSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKwogICAgIGNhc2UgRkVDT01QT1NJVEVf
T1BFUkFUT1JfT1VUOgotICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0
KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVy
MiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpLCB7
IHsgfSwgaW1hZ2VCdWZmZXIyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpE
ZXN0aW5hdGlvbk91dCk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1
dGVQYWludFJlY3QoKSkpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2VCdWZmZXIyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJz
b2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlcjItPmxvZ2ljYWxTaXplKCkgfSwg
Q29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKICAgICAgICAgYnJlYWs7CisKICAg
ICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1A6Ci0gICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
aW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0lt
YWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCBD
b21wb3NpdGVPcGVyYXRvcjo6U291cmNlQXRvcCk7CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJh
d0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgICAgIGZpbHRlckNvbnRleHQu
ZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9n
aWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlQXRvcCk7CiAgICAgICAgIGJy
ZWFrOworCiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9YT1I6Ci0gICAgICAgIGZpbHRl
ckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklu
cHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0gICAgICAgIGZpbHRlckNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNp
emUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6WE9SKTsKKyAgICAgICAgZmlsdGVyQ29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5w
dXRJbWFnZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKKyAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBtX2VmZmVjdC5kcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5s
b2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0ZU9wZXJhdG9yOjpYT1IpOwogICAgICAgICBicmVhazsK
KworICAgIGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQzoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGNhc2UgRkVD
T01QT1NJVEVfT1BFUkFUT1JfTElHSFRFUjoKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFi
c29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZm
ZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSwgeyB7IH0sIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpIH0sIENvbXBvc2l0
ZU9wZXJhdG9yOjpQbHVzTGlnaHRlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIG1fZWZm
ZWN0LmRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
CisgICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgbV9l
ZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSks
IHsgeyB9LCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSB9LCBDb21wb3NpdGVPcGVyYXRvcjo6
UGx1c0xpZ2h0ZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAorYm9vbCBGRUNvbXBvc2l0ZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCit7CisgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlu
MiA9IGlucHV0RWZmZWN0c1sxXS5nZXQoKTsKKworICAgIGlmIChtX2VmZmVjdC5vcGVyYXRpb24o
KSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKQorICAgICAgICByZXR1cm4gYXBw
bHlBcml0aG1ldGljKGluLCBpbjIpOworICAgIHJldHVybiBhcHBseU5vbkFyaXRobWV0aWMoaW4s
IGluMik7Cit9CisKK2Jvb2wgRkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25z
dCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxp
ZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29tcG9zaXRlT3BlcmF0
aW9uVHlwZSYgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguY3BwCmluZGV4IGFkZDJiZmEwN2QxMmQyMjUwZGFlNmUzMDc5MDhlM2FhMmQxNmU0ZDQuLjI0
NzU5ZjhmMjExOWVkMzc4NmIxZDk1MWNmOGRlMDI4NDM1NGE5OWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZl
TWF0cml4LmNwcApAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAorI2luY2x1ZGUgIkZFQ29sb3JNYXRyaXguaCIKKyNp
bmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
ICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4K
QEAgLTExNSw2ICsxMTcsNDIgQEAgYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpzZXRQcmVzZXJ2ZUFs
cGhhKGJvb2wgcHJlc2VydmVBbHBoYSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorLy8gRklYTUU6
IE1vdmUgdGhlIGNsYXNzIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJh
dGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUNvbnZvbHZlTWF0cml4U29mdHdh
cmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUNvbnZvbHZl
TWF0cml4PiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxG
RUNvbnZvbHZlTWF0cml4PjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAg
ICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5w
dXRFZmZlY3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRh
IHsKKyAgICAgICAgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXk7CisgICAg
ICAgIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5OworICAgICAgICBpbnQgd2lkdGg7
CisgICAgICAgIGludCBoZWlnaHQ7CisKKyAgICAgICAgSW50U2l6ZSBrZXJuZWxTaXplOworICAg
ICAgICBmbG9hdCBkaXZpc29yOworICAgICAgICBmbG9hdCBiaWFzOworICAgICAgICBJbnRQb2lu
dCB0YXJnZXRPZmZzZXQ7CisgICAgICAgIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZTsKKyAgICAgICAg
Ym9vbCBwcmVzZXJ2ZUFscGhhOworICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtlcm5lbE1hdHJpeDsK
KyAgICB9OworCisgICAgc3RhdGljIGlubGluZSB1aW50OF90IGNsYW1wUkdCQVZhbHVlKGZsb2F0
IGNoYW5uZWwsIHVpbnQ4X3QgbWF4ID0gMjU1KTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgc2V0
RGVzdGluYXRpb25QaXhlbHMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZVBpeGVscywg
VWludDhDbGFtcGVkQXJyYXkmIGRlc3RQaXhlbHMsIGludCYgcGl4ZWwsIGZsb2F0KiB0b3RhbHMs
IGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGJvb2wgcHJlc2VydmVBbHBoYVZhbHVlcyk7CisK
KyAgICBzdGF0aWMgaW5saW5lIGludCBnZXRQaXhlbFZhbHVlKGNvbnN0IFBhaW50aW5nRGF0YSYs
IGludCB4LCBpbnQgeSk7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgc2V0SW50ZXJpb3JQaXhl
bHMoUGFpbnRpbmdEYXRhJiwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3Rh
cnQsIGludCB5RW5kKTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgc2V0T3V0ZXJQaXhlbHMoUGFp
bnRpbmdEYXRhJiwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyKTsKKworICAgIHZvaWQg
YXBwbHlQbGF0Zm9ybShQYWludGluZ0RhdGEmKSBjb25zdDsKK307CisKIC8qCiAgICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgQ29udm9sdmVNYXRyaXggaW1wbGVt
ZW50YXRpb24KQEAgLTE3MSw3ICsyMDksNyBAQCBib29sIEZFQ29udm9sdmVNYXRyaXg6OnNldFBy
ZXNlcnZlQWxwaGEoYm9vbCBwcmVzZXJ2ZUFscGhhKQogICAgYW5kIHdvdWxkIG1ha2UgaXQgcmVh
bGx5IGhhcmQgdG8gdW5kZXJzdGFuZC4KICovCiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2ln
bmVkIGNoYXIgY2xhbXBSR0JBVmFsdWUoZmxvYXQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBtYXgg
PSAyNTUpCitpbmxpbmUgdWludDhfdCBGRUNvbnZvbHZlTWF0cml4U29mdHdhcmVBcHBsaWVyOjpj
bGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFubmVsLCB1aW50OF90IG1heCkKIHsKICAgICBpZiAoY2hh
bm5lbCA8PSAwKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE4MCwxMCArMjE4LDkgQEAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgdW5zaWduZWQgY2hhciBjbGFtcFJHQkFWYWx1ZShmbG9hdCBjaGFubmVs
LCB1bnNpZ25lZCBjaGFyIG0KICAgICByZXR1cm4gY2hhbm5lbDsKIH0KIAotdGVtcGxhdGU8Ym9v
bCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotQUxXQVlTX0lOTElORSB2b2lkIHNldERlc3RpbmF0aW9u
UGl4ZWxzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2VQaXhlbHMsIFVpbnQ4Q2xhbXBl
ZEFycmF5JiBkZXN0UGl4ZWxzLCBpbnQmIHBpeGVsLCBmbG9hdCogdG90YWxzLCBmbG9hdCBkaXZp
c29yLCBmbG9hdCBiaWFzKQoraW5saW5lIHZvaWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBw
bGllcjo6c2V0RGVzdGluYXRpb25QaXhlbHMoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJj
ZVBpeGVscywgVWludDhDbGFtcGVkQXJyYXkmIGRlc3RQaXhlbHMsIGludCYgcGl4ZWwsIGZsb2F0
KiB0b3RhbHMsIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGJvb2wgcHJlc2VydmVBbHBoYVZh
bHVlcykKIHsKLSAgICB1bnNpZ25lZCBjaGFyIG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVl
cyA/IDI1NSA6IGNsYW1wUkdCQVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKKyAg
ICB1aW50OF90IG1heEFscGhhID0gcHJlc2VydmVBbHBoYVZhbHVlcyA/IDI1NSA6IGNsYW1wUkdC
QVZhbHVlKHRvdGFsc1szXSAvIGRpdmlzb3IgKyBiaWFzKTsKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IDM7ICsraSkKICAgICAgICAgZGVzdFBpeGVscy5zZXQocGl4ZWwrKywgY2xhbXBSR0JBVmFs
dWUodG90YWxzW2ldIC8gZGl2aXNvciArIGJpYXMsIG1heEFscGhhKSk7CiAKQEAgLTE5NCwyNSAr
MjMxLDQ3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBzZXREZXN0aW5hdGlvblBpeGVscyhjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlUGl4ZWxzLCBVCiAgICAgICAgIGRlc3RQaXhlbHMuc2V0
KHBpeGVsKyssIG1heEFscGhhKTsKIH0KIAotI2lmIENPTVBJTEVSKE1TVkMpCi0vLyBJbmNvcnJl
Y3RseSBkaWFnbm9zaW5nIG92ZXJ3cml0ZSBvZiBzdGFjayBpbiB8dG90YWxzfCBkdWUgdG8gfHBy
ZXNlcnZlQWxwaGFWYWx1ZXN8LgotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5p
bmcoZGlzYWJsZTogNDc4OSkKLSNlbmRpZgoraW5saW5lIGludCBGRUNvbnZvbHZlTWF0cml4U29m
dHdhcmVBcHBsaWVyOjpnZXRQaXhlbFZhbHVlKGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhLCBpbnQgeCwgaW50IHkpCit7CisgICAgaWYgKHggPj0gMCAmJiB4IDwgcGFpbnRpbmdEYXRh
LndpZHRoICYmIHkgPj0gMCAmJiB5IDwgcGFpbnRpbmdEYXRhLmhlaWdodCkKKyAgICAgICAgcmV0
dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKKworICAgIHN3aXRjaCAocGFp
bnRpbmdEYXRhLmVkZ2VNb2RlKSB7CisgICAgZGVmYXVsdDogLy8gRURHRU1PREVfTk9ORQorICAg
ICAgICByZXR1cm4gLTE7CisgICAgY2FzZSBFREdFTU9ERV9EVVBMSUNBVEU6CisgICAgICAgIGlm
ICh4IDwgMCkKKyAgICAgICAgICAgIHggPSAwOworICAgICAgICBlbHNlIGlmICh4ID49IHBhaW50
aW5nRGF0YS53aWR0aCkKKyAgICAgICAgICAgIHggPSBwYWludGluZ0RhdGEud2lkdGggLSAxOwor
ICAgICAgICBpZiAoeSA8IDApCisgICAgICAgICAgICB5ID0gMDsKKyAgICAgICAgZWxzZSBpZiAo
eSA+PSBwYWludGluZ0RhdGEuaGVpZ2h0KQorICAgICAgICAgICAgeSA9IHBhaW50aW5nRGF0YS5o
ZWlnaHQgLSAxOworICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEud2lkdGggKyB4KSA8
PCAyOworICAgIGNhc2UgRURHRU1PREVfV1JBUDoKKyAgICAgICAgd2hpbGUgKHggPCAwKQorICAg
ICAgICAgICAgeCArPSBwYWludGluZ0RhdGEud2lkdGg7CisgICAgICAgIHggJT0gcGFpbnRpbmdE
YXRhLndpZHRoOworICAgICAgICB3aGlsZSAoeSA8IDApCisgICAgICAgICAgICB5ICs9IHBhaW50
aW5nRGF0YS5oZWlnaHQ7CisgICAgICAgIHkgJT0gcGFpbnRpbmdEYXRhLmhlaWdodDsKKyAgICAg
ICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRoICsgeCkgPDwgMjsKKyAgICB9Cit9CiAK
IC8vIE9ubHkgZm9yIHJlZ2lvbiBDCi10ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFWYWx1ZXM+
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6ZmFzdFNldEludGVyaW9yUGl4
ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJv
dHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpCitpbmxpbmUgdm9pZCBGRUNvbnZvbHZlTWF0cml4
U29mdHdhcmVBcHBsaWVyOjpzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwgaW50IGNsaXBSaWdodCwgaW50IGNsaXBCb3R0b20sIGludCB5U3RhcnQsIGludCB5RW5k
KQogewogICAgIC8vIGVkZ2UgbW9kZSBkb2VzIG5vdCBhZmZlY3QgdGhlc2UgcGl4ZWxzCi0gICAg
aW50IHBpeGVsID0gKG1fdGFyZ2V0T2Zmc2V0LnkoKSAqIHBhaW50aW5nRGF0YS53aWR0aCArIG1f
dGFyZ2V0T2Zmc2V0LngoKSkgKiA0OworICAgIGludCBwaXhlbCA9IChwYWludGluZ0RhdGEudGFy
Z2V0T2Zmc2V0LnkoKSAqIHBhaW50aW5nRGF0YS53aWR0aCArIHBhaW50aW5nRGF0YS50YXJnZXRP
ZmZzZXQueCgpKSAqIDQ7CiAgICAgaW50IGtlcm5lbEluY3JlYXNlID0gY2xpcFJpZ2h0ICogNDsK
LSAgICBpbnQgeEluY3JlYXNlID0gKG1fa2VybmVsU2l6ZS53aWR0aCgpIC0gMSkgKiA0OworICAg
IGludCB4SW5jcmVhc2UgPSAocGFpbnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKSAtIDEpICog
NDsKICAgICAvLyBDb250YWlucyB0aGUgc3VtIG9mIHJnYihhKSBjb21wb25lbnRzCi0gICAgZmxv
YXQgdG90YWxzWzMgKyAocHJlc2VydmVBbHBoYVZhbHVlcyA/IDAgOiAxKV07CisgICAgZmxvYXQg
dG90YWxzWzRdOwogCi0gICAgLy8gbV9kaXZpc29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZl
TWF0cml4RWxlbWVudCBlbnN1cmVzIHRoaXMKLSAgICBBU1NFUlQobV9kaXZpc29yKTsKKyAgICAv
LyBkaXZpc29yIGNhbm5vdCBiZSAwLCBTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudCBlbnN1cmVz
IHRoaXMKKyAgICBBU1NFUlQocGFpbnRpbmdEYXRhLmRpdmlzb3IpOwogCiAgICAgLy8gU2tpcCB0
aGUgZmlyc3QgJyhjbGlwQm90dG9tIC0geUVuZCknIGxpbmVzCiAgICAgcGl4ZWwgKz0gKGNsaXBC
b3R0b20gLSB5RW5kKSAqICh4SW5jcmVhc2UgKyAoY2xpcFJpZ2h0ICsgMSkgKiA0KTsKQEAgLTIy
MiwyOSArMjgxLDI4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpmYXN0
U2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluCiAgICAgICAgIGZvciAoaW50
IHggPSBjbGlwUmlnaHQgKyAxOyB4ID4gMDsgLS14KSB7CiAgICAgICAgICAgICBpbnQga2VybmVs
VmFsdWUgPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4LnNpemUoKSAtIDE7CiAgICAgICAgICAg
ICBpbnQga2VybmVsUGl4ZWwgPSBzdGFydEtlcm5lbFBpeGVsOwotICAgICAgICAgICAgaW50IHdp
ZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAgICAgICBpbnQgd2lkdGggPSBwYWlu
dGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOwogCiAgICAgICAgICAgICB0b3RhbHNbMF0gPSAw
OwogICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKICAgICAgICAgICAgIHRvdGFsc1syXSA9IDA7
Ci0gICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAgICAgICAg
dG90YWxzWzNdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7CiAKICAgICAgICAgICAg
IHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgdG90YWxzWzBdICs9
IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0oa2VybmVsUGl4ZWwrKykpOwogICAg
ICAgICAgICAgICAgIHRvdGFsc1sxXSArPSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5l
bFZhbHVlXSAqIHN0YXRpY19jYXN0PGZsb2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5p
dGVtKGtlcm5lbFBpeGVsKyspKTsKICAgICAgICAgICAgICAgICB0b3RhbHNbMl0gKz0gcGFpbnRp
bmdEYXRhLmtlcm5lbE1hdHJpeFtrZXJuZWxWYWx1ZV0gKiBzdGF0aWNfY2FzdDxmbG9hdD4ocGFp
bnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkuaXRlbShrZXJuZWxQaXhlbCsrKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhhVmFsdWVzKQorICAgICAgICAgICAgICAgIGlmICghcGFp
bnRpbmdEYXRhLnByZXNlcnZlQWxwaGEpCiAgICAgICAgICAgICAgICAgICAgIHRvdGFsc1szXSAr
PSBwYWludGluZ0RhdGEua2VybmVsTWF0cml4W2tlcm5lbFZhbHVlXSAqIHN0YXRpY19jYXN0PGZs
b2F0PihwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheS5pdGVtKGtlcm5lbFBpeGVsKSk7CiAgICAg
ICAgICAgICAgICAgKytrZXJuZWxQaXhlbDsKICAgICAgICAgICAgICAgICAtLWtlcm5lbFZhbHVl
OwogICAgICAgICAgICAgICAgIGlmICghLS13aWR0aCkgewogICAgICAgICAgICAgICAgICAgICBr
ZXJuZWxQaXhlbCArPSBrZXJuZWxJbmNyZWFzZTsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGgg
PSBtX2tlcm5lbFNpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBwYWlu
dGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgc2V0RGVzdGluYXRpb25QaXhlbHM8cHJlc2VydmVBbHBoYVZh
bHVlcz4ocGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXksIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFy
cmF5LCBwaXhlbCwgdG90YWxzLCBtX2Rpdmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzKTsKKyAgICAg
ICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzKHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBw
YWludGluZ0RhdGEuZHN0UGl4ZWxBcnJheSwgcGl4ZWwsIHRvdGFscywgcGFpbnRpbmdEYXRhLmRp
dmlzb3IsIHBhaW50aW5nRGF0YS5iaWFzLCBwYWludGluZ0RhdGEucHJlc2VydmVBbHBoYSk7CiAg
ICAgICAgICAgICBzdGFydEtlcm5lbFBpeGVsICs9IDQ7CiAgICAgICAgIH0KICAgICAgICAgcGl4
ZWwgKz0geEluY3JlYXNlOwpAQCAtMjUyLDY0ICszMTAsMzMgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEZFQ29udm9sdmVNYXRyaXg6OmZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmIHBh
aW50aW4KICAgICB9CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50IEZFQ29udm9sdmVNYXRyaXg6Omdl
dFBpeGVsVmFsdWUoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSkKLXsK
LSAgICBpZiAoeCA+PSAwICYmIHggPCBwYWludGluZ0RhdGEud2lkdGggJiYgeSA+PSAwICYmIHkg
PCBwYWludGluZ0RhdGEuaGVpZ2h0KQotICAgICAgICByZXR1cm4gKHkgKiBwYWludGluZ0RhdGEu
d2lkdGggKyB4KSA8PCAyOwotCi0gICAgc3dpdGNoIChtX2VkZ2VNb2RlKSB7Ci0gICAgZGVmYXVs
dDogLy8gRURHRU1PREVfTk9ORQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgY2FzZSBFREdFTU9E
RV9EVVBMSUNBVEU6Ci0gICAgICAgIGlmICh4IDwgMCkKLSAgICAgICAgICAgIHggPSAwOwotICAg
ICAgICBlbHNlIGlmICh4ID49IHBhaW50aW5nRGF0YS53aWR0aCkKLSAgICAgICAgICAgIHggPSBw
YWludGluZ0RhdGEud2lkdGggLSAxOwotICAgICAgICBpZiAoeSA8IDApCi0gICAgICAgICAgICB5
ID0gMDsKLSAgICAgICAgZWxzZSBpZiAoeSA+PSBwYWludGluZ0RhdGEuaGVpZ2h0KQotICAgICAg
ICAgICAgeSA9IHBhaW50aW5nRGF0YS5oZWlnaHQgLSAxOwotICAgICAgICByZXR1cm4gKHkgKiBw
YWludGluZ0RhdGEud2lkdGggKyB4KSA8PCAyOwotICAgIGNhc2UgRURHRU1PREVfV1JBUDoKLSAg
ICAgICAgd2hpbGUgKHggPCAwKQotICAgICAgICAgICAgeCArPSBwYWludGluZ0RhdGEud2lkdGg7
Ci0gICAgICAgIHggJT0gcGFpbnRpbmdEYXRhLndpZHRoOwotICAgICAgICB3aGlsZSAoeSA8IDAp
Ci0gICAgICAgICAgICB5ICs9IHBhaW50aW5nRGF0YS5oZWlnaHQ7Ci0gICAgICAgIHkgJT0gcGFp
bnRpbmdEYXRhLmhlaWdodDsKLSAgICAgICAgcmV0dXJuICh5ICogcGFpbnRpbmdEYXRhLndpZHRo
ICsgeCkgPDwgMjsKLSAgICB9Ci19Ci0KIC8vIEZvciBvdGhlciByZWdpb25zIHRoYW4gQwotdGVt
cGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFsdWVzPgotdm9pZCBGRUNvbnZvbHZlTWF0cml4Ojpm
YXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwgaW50
IHkxLCBpbnQgeDIsIGludCB5MikKK2lubGluZSB2b2lkIEZFQ29udm9sdmVNYXRyaXhTb2Z0d2Fy
ZUFwcGxpZXI6OnNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQg
eDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCiB7CiAgICAgaW50IHBpeGVsID0gKHkxICogcGFp
bnRpbmdEYXRhLndpZHRoICsgeDEpICogNDsKICAgICBpbnQgaGVpZ2h0ID0geTIgLSB5MTsKICAg
ICBpbnQgd2lkdGggPSB4MiAtIHgxOwotICAgIGludCBiZWdpbktlcm5lbFBpeGVsWCA9IHgxIC0g
bV90YXJnZXRPZmZzZXQueCgpOworICAgIGludCBiZWdpbktlcm5lbFBpeGVsWCA9IHgxIC0gcGFp
bnRpbmdEYXRhLnRhcmdldE9mZnNldC54KCk7CiAgICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxYID0g
YmVnaW5LZXJuZWxQaXhlbFg7Ci0gICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxZID0geTEgLSBtX3Rh
cmdldE9mZnNldC55KCk7CisgICAgaW50IHN0YXJ0S2VybmVsUGl4ZWxZID0geTEgLSBwYWludGlu
Z0RhdGEudGFyZ2V0T2Zmc2V0LnkoKTsKICAgICBpbnQgeEluY3JlYXNlID0gKHBhaW50aW5nRGF0
YS53aWR0aCAtIHdpZHRoKSAqIDQ7CiAgICAgLy8gQ29udGFpbnMgdGhlIHN1bSBvZiByZ2IoYSkg
Y29tcG9uZW50cwotICAgIGZsb2F0IHRvdGFsc1szICsgKHByZXNlcnZlQWxwaGFWYWx1ZXMgPyAw
IDogMSldOworICAgIGZsb2F0IHRvdGFsc1s0XTsKIAotICAgIC8vIG1fZGl2aXNvciBjYW5ub3Qg
YmUgMCwgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQgZW5zdXJlcyB0aGlzCi0gICAgQVNTRVJU
KG1fZGl2aXNvcik7CisgICAgLy8gcGFpbnRpbmdEYXRhLmRpdmlzb3IgY2Fubm90IGJlIDAsIFNW
R0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50IGVuc3VyZXMgdGhpcworICAgIEFTU0VSVChwYWludGlu
Z0RhdGEuZGl2aXNvcik7CiAKICAgICBmb3IgKGludCB5ID0gaGVpZ2h0OyB5ID4gMDsgLS15KSB7
CiAgICAgICAgIGZvciAoaW50IHggPSB3aWR0aDsgeCA+IDA7IC0teCkgewogICAgICAgICAgICAg
aW50IGtlcm5lbFZhbHVlID0gcGFpbnRpbmdEYXRhLmtlcm5lbE1hdHJpeC5zaXplKCkgLSAxOwog
ICAgICAgICAgICAgaW50IGtlcm5lbFBpeGVsWCA9IHN0YXJ0S2VybmVsUGl4ZWxYOwogICAgICAg
ICAgICAgaW50IGtlcm5lbFBpeGVsWSA9IHN0YXJ0S2VybmVsUGl4ZWxZOwotICAgICAgICAgICAg
aW50IHdpZHRoID0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAgICAgICBpbnQgd2lkdGgg
PSBwYWludGluZ0RhdGEua2VybmVsU2l6ZS53aWR0aCgpOwogCiAgICAgICAgICAgICB0b3RhbHNb
MF0gPSAwOwogICAgICAgICAgICAgdG90YWxzWzFdID0gMDsKICAgICAgICAgICAgIHRvdGFsc1sy
XSA9IDA7Ci0gICAgICAgICAgICBpZiAoIXByZXNlcnZlQWxwaGFWYWx1ZXMpCi0gICAgICAgICAg
ICAgICAgdG90YWxzWzNdID0gMDsKKyAgICAgICAgICAgIHRvdGFsc1szXSA9IDA7CiAKICAgICAg
ICAgICAgIHdoaWxlIChrZXJuZWxWYWx1ZSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgaW50IHBp
eGVsSW5kZXggPSBnZXRQaXhlbFZhbHVlKHBhaW50aW5nRGF0YSwga2VybmVsUGl4ZWxYLCBrZXJu
ZWxQaXhlbFkpOwpAQCAtMzE4LDE4ICszNDUsMTggQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4Ojpm
YXN0U2V0T3V0ZXJQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4MSwgaW4K
ICAgICAgICAgICAgICAgICAgICAgdG90YWxzWzFdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRy
aXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhl
bEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDEpKTsKICAgICAgICAgICAgICAgICAgICAgdG90YWxz
WzJdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICogc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJbmRleCArIDIp
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZUFscGhh
VmFsdWVzICYmIHBpeGVsSW5kZXggPj0gMCkKKyAgICAgICAgICAgICAgICBpZiAoIXBhaW50aW5n
RGF0YS5wcmVzZXJ2ZUFscGhhICYmIHBpeGVsSW5kZXggPj0gMCkKICAgICAgICAgICAgICAgICAg
ICAgdG90YWxzWzNdICs9IHBhaW50aW5nRGF0YS5rZXJuZWxNYXRyaXhba2VybmVsVmFsdWVdICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5Lml0ZW0ocGl4ZWxJ
bmRleCArIDMpKTsKICAgICAgICAgICAgICAgICArK2tlcm5lbFBpeGVsWDsKICAgICAgICAgICAg
ICAgICAtLWtlcm5lbFZhbHVlOwogICAgICAgICAgICAgICAgIGlmICghLS13aWR0aCkgewogICAg
ICAgICAgICAgICAgICAgICBrZXJuZWxQaXhlbFggPSBzdGFydEtlcm5lbFBpeGVsWDsKICAgICAg
ICAgICAgICAgICAgICAgKytrZXJuZWxQaXhlbFk7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRo
ID0gbV9rZXJuZWxTaXplLndpZHRoKCk7CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gcGFp
bnRpbmdEYXRhLmtlcm5lbFNpemUud2lkdGgoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIHNldERlc3RpbmF0aW9uUGl4ZWxzPHByZXNlcnZlQWxwaGFW
YWx1ZXM+KHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5LCBwYWludGluZ0RhdGEuZHN0UGl4ZWxB
cnJheSwgcGl4ZWwsIHRvdGFscywgbV9kaXZpc29yLCBwYWludGluZ0RhdGEuYmlhcyk7CisgICAg
ICAgICAgICBzZXREZXN0aW5hdGlvblBpeGVscyhwYWludGluZ0RhdGEuc3JjUGl4ZWxBcnJheSwg
cGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXksIHBpeGVsLCB0b3RhbHMsIHBhaW50aW5nRGF0YS5k
aXZpc29yLCBwYWludGluZ0RhdGEuYmlhcywgcGFpbnRpbmdEYXRhLnByZXNlcnZlQWxwaGEpOwog
ICAgICAgICAgICAgKytzdGFydEtlcm5lbFBpeGVsWDsKICAgICAgICAgfQogICAgICAgICBwaXhl
bCArPSB4SW5jcmVhc2U7CkBAIC0zMzgsOTUgKzM2NSw4OCBAQCB2b2lkIEZFQ29udm9sdmVNYXRy
aXg6OmZhc3RTZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgx
LCBpbgogICAgIH0KIH0KIAotI2lmIENPTVBJTEVSKE1TVkMpCi0jcHJhZ21hIHdhcm5pbmcocG9w
KSAvLyBEaXNhYmxlIG9mIDQ3ODkKLSNlbmRpZgotCi1BTFdBWVNfSU5MSU5FIHZvaWQgRkVDb252
b2x2ZU1hdHJpeDo6c2V0SW50ZXJpb3JQaXhlbHMoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEs
IGludCBjbGlwUmlnaHQsIGludCBjbGlwQm90dG9tLCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCkKK3Zv
aWQgRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSkgY29uc3QKIHsKLSAgICAvLyBNdXN0IGJlIGltcGxlbWVudGVk
IGhlcmUsIHNpbmNlIGl0IHJlZmVycyBhbm90aGVyIEFMV0FZU19JTkxJTkUKLSAgICAvLyBmdW5j
dGlvbiwgd2hpY2ggZGVmaW5lZCBpbiB0aGlzIEMrKyBzb3VyY2UgZmlsZSBhcyB3ZWxsCi0gICAg
aWYgKG1fcHJlc2VydmVBbHBoYSkKLSAgICAgICAgZmFzdFNldEludGVyaW9yUGl4ZWxzPHRydWU+
KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlwQm90dG9tLCB5U3RhcnQsIHlFbmQpOwotICAg
IGVsc2UKLSAgICAgICAgZmFzdFNldEludGVyaW9yUGl4ZWxzPGZhbHNlPihwYWludGluZ0RhdGEs
IGNsaXBSaWdodCwgY2xpcEJvdHRvbSwgeVN0YXJ0LCB5RW5kKTsKLX0KKyAgICAvLyBEcmF3aW5n
IGZ1bGx5IGNvdmVyZWQgcGl4ZWxzCisgICAgaW50IGNsaXBSaWdodCA9IHBhaW50aW5nRGF0YS53
aWR0aCAtIHBhaW50aW5nRGF0YS5rZXJuZWxTaXplLndpZHRoKCk7CisgICAgaW50IGNsaXBCb3R0
b20gPSBwYWludGluZ0RhdGEuaGVpZ2h0IC0gcGFpbnRpbmdEYXRhLmtlcm5lbFNpemUuaGVpZ2h0
KCk7CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRPdXRlclBpeGVs
cyhQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50
IHkyKQotewotICAgIC8vIEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gY2FuIGJlIG1vdmVkIHRvIHRo
ZSBoZWFkZXIsIGl0IGlzIGltcGxlbWVudGVkIGhlcmUKLSAgICAvLyBiZWNhdXNlIHNldEludGVy
aW9yUGl4ZWxzIGlzIGFsc28gaW1wbGVtZW50ZWQgaGVyZQotICAgIGlmIChtX3ByZXNlcnZlQWxw
aGEpCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczx0cnVlPihwYWludGluZ0RhdGEsIHgxLCB5
MSwgeDIsIHkyKTsKLSAgICBlbHNlCi0gICAgICAgIGZhc3RTZXRPdXRlclBpeGVsczxmYWxzZT4o
cGFpbnRpbmdEYXRhLCB4MSwgeTEsIHgyLCB5Mik7CisgICAgaWYgKGNsaXBSaWdodCA8IDAgfHwg
Y2xpcEJvdHRvbSA8IDApIHsKKyAgICAgICAgLy8gUmFyZSBzaXR1YXRpb24sIG5vdCBvcHRpbWl6
ZWQgZm9yIHNwZWVkCisgICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwg
cGFpbnRpbmdEYXRhLndpZHRoLCBwYWludGluZ0RhdGEuaGVpZ2h0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1pbmltYWxSZWN0RGltZW5zaW9u
ID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2Jz
CisKKyAgICBpZiAoaW50IGl0ZXJhdGlvbnMgPSAocGFpbnRpbmdEYXRhLndpZHRoICogcGFpbnRp
bmdEYXRhLmhlaWdodCkgLyBtaW5pbWFsUmVjdERpbWVuc2lvbikgeworICAgICAgICBpbnQgc3Ry
aWRlID0gY2xpcEJvdHRvbSAvIGl0ZXJhdGlvbnM7CisgICAgICAgIGludCBjaHVua0NvdW50ID0g
KGNsaXBCb3R0b20gKyBzdHJpZGUgLSAxKSAvIHN0cmlkZTsKKworICAgICAgICBDb25jdXJyZW50
V29ya1F1ZXVlOjphcHBseShjaHVua0NvdW50LCBbJl0oc2l6ZV90IGluZGV4KSB7CisgICAgICAg
ICAgICBpbnQgeVN0YXJ0ID0gKHN0cmlkZSAqIGluZGV4KTsKKyAgICAgICAgICAgIGludCB5RW5k
ID0gc3RkOjptaW48aW50PihzdHJpZGUgKiAoaW5kZXggKyAxKSwgY2xpcEJvdHRvbSk7CisKKyAg
ICAgICAgICAgIHNldEludGVyaW9yUGl4ZWxzKHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBjbGlw
Qm90dG9tLCB5U3RhcnQsIHlFbmQpOworICAgICAgICB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAg
c2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmlnaHQsIGNsaXBCb3R0b20sIDAs
IGNsaXBCb3R0b20pOworCisgICAgY2xpcFJpZ2h0ICs9IHBhaW50aW5nRGF0YS50YXJnZXRPZmZz
ZXQueCgpICsgMTsKKyAgICBjbGlwQm90dG9tICs9IHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQu
eSgpICsgMTsKKworICAgIGlmIChwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSA+IDApCisg
ICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgMCwgcGFpbnRpbmdEYXRhLndp
ZHRoLCBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSk7CisgICAgaWYgKGNsaXBCb3R0b20g
PCBwYWludGluZ0RhdGEuaGVpZ2h0KQorICAgICAgICBzZXRPdXRlclBpeGVscyhwYWludGluZ0Rh
dGEsIDAsIGNsaXBCb3R0b20sIHBhaW50aW5nRGF0YS53aWR0aCwgcGFpbnRpbmdEYXRhLmhlaWdo
dCk7CisgICAgaWYgKHBhaW50aW5nRGF0YS50YXJnZXRPZmZzZXQueCgpID4gMCkKKyAgICAgICAg
c2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCAwLCBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0
LnkoKSwgcGFpbnRpbmdEYXRhLnRhcmdldE9mZnNldC54KCksIGNsaXBCb3R0b20pOworICAgIGlm
IChjbGlwUmlnaHQgPCBwYWludGluZ0RhdGEud2lkdGgpCisgICAgICAgIHNldE91dGVyUGl4ZWxz
KHBhaW50aW5nRGF0YSwgY2xpcFJpZ2h0LCBwYWludGluZ0RhdGEudGFyZ2V0T2Zmc2V0LnkoKSwg
cGFpbnRpbmdEYXRhLndpZHRoLCBjbGlwQm90dG9tKTsKIH0KIAotYm9vbCBGRUNvbnZvbHZlTWF0
cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKK2Jvb2wgRkVDb252b2x2
ZU1hdHJpeFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0KDApOworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0
KCk7CiAKLSAgICBhdXRvIGFscGhhRm9ybWF0ID0gbV9wcmVzZXJ2ZUFscGhhID8gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkIDogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZDsKLSAgICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1
ZmZlclJlc3VsdChhbHBoYUZvcm1hdCk7CisgICAgYXV0byBhbHBoYUZvcm1hdCA9IG1fZWZmZWN0
LnByZXNlcnZlQWxwaGEoKSA/IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCA6IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ7CisgICAgYXV0byBkZXN0
aW5hdGlvblBpeGVsQnVmZmVyID0gbV9lZmZlY3QucGl4ZWxCdWZmZXJSZXN1bHQoYWxwaGFGb3Jt
YXQpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9m
SW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgYXV0byBzb3Vy
Y2VQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChhbHBoYUZvcm1hdCwgZWZm
ZWN0RHJhd2luZ1JlY3QsIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgYXV0byBlZmZlY3RE
cmF3aW5nUmVjdCA9IG1fZWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgYXV0byBzb3VyY2VQaXhlbEJ1ZmZlciA9IGlu
LT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChhbHBoYUZvcm1hdCwgZWZmZWN0RHJhd2luZ1JlY3QsIG1f
ZWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CiAgICAgaWYgKCFzb3VyY2VQaXhlbEJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byYgc291cmNlUGl4ZWxBcnJheSA9
IHNvdXJjZVBpeGVsQnVmZmVyLT5kYXRhKCk7CiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFy
cmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50U2l6ZSBwYWlu
dFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKICAgICAKKyAgICBhdXRvIHBhaW50
U2l6ZSA9IG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOworCiAgICAgUGFpbnRp
bmdEYXRhIHBhaW50aW5nRGF0YSA9IHsKICAgICAgICAgc291cmNlUGl4ZWxBcnJheSwKICAgICAg
ICAgZGVzdGluYXRpb25QaXhlbEFycmF5LAogICAgICAgICBwYWludFNpemUud2lkdGgoKSwKICAg
ICAgICAgcGFpbnRTaXplLmhlaWdodCgpLAotICAgICAgICBtX2JpYXMgKiAyNTUsCi0gICAgICAg
IG5vcm1hbGl6ZWRGbG9hdHMobV9rZXJuZWxNYXRyaXgpCisgICAgICAgIG1fZWZmZWN0Lmtlcm5l
bFNpemUoKSwKKyAgICAgICAgbV9lZmZlY3QuZGl2aXNvcigpLAorICAgICAgICBtX2VmZmVjdC5i
aWFzKCkgKiAyNTUsCisgICAgICAgIG1fZWZmZWN0LnRhcmdldE9mZnNldCgpLAorICAgICAgICBt
X2VmZmVjdC5lZGdlTW9kZSgpLAorICAgICAgICBtX2VmZmVjdC5wcmVzZXJ2ZUFscGhhKCksCisg
ICAgICAgIEZFQ29sb3JNYXRyaXg6Om5vcm1hbGl6ZWRGbG9hdHMobV9lZmZlY3Qua2VybmVsKCkp
CiAgICAgfTsKIAotICAgIC8vIERyYXdpbmcgZnVsbHkgY292ZXJlZCBwaXhlbHMKLSAgICBpbnQg
Y2xpcFJpZ2h0ID0gcGFpbnRTaXplLndpZHRoKCkgLSBtX2tlcm5lbFNpemUud2lkdGgoKTsKLSAg
ICBpbnQgY2xpcEJvdHRvbSA9IHBhaW50U2l6ZS5oZWlnaHQoKSAtIG1fa2VybmVsU2l6ZS5oZWln
aHQoKTsKLQotICAgIGlmIChjbGlwUmlnaHQgPCAwIHx8IGNsaXBCb3R0b20gPCAwKSB7Ci0gICAg
ICAgIC8vIFJhcmUgc2l0dWF0aW9uLCBub3Qgb3B0aW1pemVkIGZvciBzcGVlZAotICAgICAgICBz
ZXRPdXRlclBpeGVscyhwYWludGluZ0RhdGEsIDAsIDAsIHBhaW50U2l6ZS53aWR0aCgpLCBwYWlu
dFNpemUuaGVpZ2h0KCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAo
aW50IGl0ZXJhdGlvbnMgPSAoYWJzb2x1dGVQYWludFJlY3QoKS53aWR0aCgpICogYWJzb2x1dGVQ
YWludFJlY3QoKS5oZWlnaHQoKSkgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uKSB7Ci0gICAgICAg
IGludCBzdHJpZGUgPSBjbGlwQm90dG9tIC8gaXRlcmF0aW9uczsKLSAgICAgICAgaW50IGNodW5r
Q291bnQgPSAoY2xpcEJvdHRvbSArIHN0cmlkZSAtIDEpIC8gc3RyaWRlOwotCi0gICAgICAgIENv
bmN1cnJlbnRXb3JrUXVldWU6OmFwcGx5KGNodW5rQ291bnQsIFsmXShzaXplX3QgaW5kZXgpIHsK
LSAgICAgICAgICAgIGludCB5U3RhcnQgPSAoc3RyaWRlICogaW5kZXgpOwotICAgICAgICAgICAg
aW50IHlFbmQgPSBzdGQ6Om1pbjxpbnQ+KHN0cmlkZSAqIChpbmRleCArIDEpLCBjbGlwQm90dG9t
KTsKLQotICAgICAgICAgICAgc2V0SW50ZXJpb3JQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlwUmln
aHQsIGNsaXBCb3R0b20sIHlTdGFydCwgeUVuZCk7Ci0gICAgICAgIH0pOwotICAgIH0gZWxzZQot
ICAgICAgICBzZXRJbnRlcmlvclBpeGVscyhwYWludGluZ0RhdGEsIGNsaXBSaWdodCwgY2xpcEJv
dHRvbSwgMCwgY2xpcEJvdHRvbSk7Ci0KLSAgICBjbGlwUmlnaHQgKz0gbV90YXJnZXRPZmZzZXQu
eCgpICsgMTsKLSAgICBjbGlwQm90dG9tICs9IG1fdGFyZ2V0T2Zmc2V0LnkoKSArIDE7Ci0gICAg
aWYgKG1fdGFyZ2V0T2Zmc2V0LnkoKSA+IDApCi0gICAgICAgIHNldE91dGVyUGl4ZWxzKHBhaW50
aW5nRGF0YSwgMCwgMCwgcGFpbnRTaXplLndpZHRoKCksIG1fdGFyZ2V0T2Zmc2V0LnkoKSk7Ci0g
ICAgaWYgKGNsaXBCb3R0b20gPCBwYWludFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHNldE91dGVy
UGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgY2xpcEJvdHRvbSwgcGFpbnRTaXplLndpZHRoKCksIHBh
aW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgaWYgKG1fdGFyZ2V0T2Zmc2V0LngoKSA+IDApCi0gICAg
ICAgIHNldE91dGVyUGl4ZWxzKHBhaW50aW5nRGF0YSwgMCwgbV90YXJnZXRPZmZzZXQueSgpLCBt
X3RhcmdldE9mZnNldC54KCksIGNsaXBCb3R0b20pOwotICAgIGlmIChjbGlwUmlnaHQgPCBwYWlu
dFNpemUud2lkdGgoKSkKLSAgICAgICAgc2V0T3V0ZXJQaXhlbHMocGFpbnRpbmdEYXRhLCBjbGlw
UmlnaHQsIG1fdGFyZ2V0T2Zmc2V0LnkoKSwgcGFpbnRTaXplLndpZHRoKCksIGNsaXBCb3R0b20p
OwotCisgICAgYXBwbHlQbGF0Zm9ybShwYWludGluZ0RhdGEpOwogICAgIHJldHVybiB0cnVlOwog
fQogCitib29sIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBG
aWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVDb252b2x2ZU1hdHJpeFNvZnR3YXJlQXBw
bGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBFZGdlTW9kZVR5cGUm
IHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCmluZGV4
IDA1YzFhODM3ZDIzNGNmNTg0ZGU4OTBmNTk0YjIyMDczZjEzMzY1YzUuLjZiN2FkZTZmMGIyMjg5
ZjM0M2U1NjgxNGZkOGMyZGU1NDQ3M2ZmOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oCkBAIC02
NCwxNiArNjQsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOwog
CiBwcml2YXRlOgotCi0gICAgc3RydWN0IFBhaW50aW5nRGF0YSB7Ci0gICAgICAgIGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5OwotICAgICAgICBVaW50OENsYW1wZWRBcnJh
eSYgZHN0UGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVpZ2h0
OwotICAgICAgICBmbG9hdCBiaWFzOwotICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtlcm5lbE1hdHJp
eDsKLSAgICB9OwotCiAgICAgRkVDb252b2x2ZU1hdHJpeChjb25zdCBJbnRTaXplJiBrZXJuZWxT
aXplLCBmbG9hdCBkaXZpc29yLCBmbG9hdCBiaWFzLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0T2Zm
c2V0LCBFZGdlTW9kZVR5cGUsIGNvbnN0IEZsb2F0UG9pbnQmIGtlcm5lbFVuaXRMZW5ndGgsIGJv
b2wgcHJlc2VydmVBbHBoYSwgY29uc3QgVmVjdG9yPGZsb2F0PiYga2VybmVsTWF0cml4KTsKIAog
ICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikgb3ZlcnJp
ZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3Qo
KSkpOyB9CkBAIC04MiwyMSArNzIsNiBAQCBwcml2YXRlOgogCiAgICAgV1RGOjpUZXh0U3RyZWFt
JiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9u
VHlwZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB0ZW1wbGF0ZTxib29sIHByZXNlcnZlQWxwaGFW
YWx1ZXM+Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIGZhc3RTZXRJbnRlcmlvclBpeGVscyhQYWlu
dGluZ0RhdGEmLCBpbnQgY2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50
IHlFbmQpOwotCi0gICAgQUxXQVlTX0lOTElORSBpbnQgZ2V0UGl4ZWxWYWx1ZShQYWludGluZ0Rh
dGEmLCBpbnQgeCwgaW50IHkpOwotCi0gICAgdGVtcGxhdGU8Ym9vbCBwcmVzZXJ2ZUFscGhhVmFs
dWVzPgotICAgIHZvaWQgZmFzdFNldE91dGVyUGl4ZWxzKFBhaW50aW5nRGF0YSYsIGludCB4MSwg
aW50IHkxLCBpbnQgeDIsIGludCB5Mik7Ci0KLSAgICAvLyBXcmFwcGVyIGZ1bmN0aW9ucwotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXRJbnRlcmlvclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQg
Y2xpcFJpZ2h0LCBpbnQgY2xpcEJvdHRvbSwgaW50IHlTdGFydCwgaW50IHlFbmQpOwotICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBzZXRPdXRlclBpeGVscyhQYWludGluZ0RhdGEmLCBpbnQgeDEsIGlu
dCB5MSwgaW50IHgyLCBpbnQgeTIpOwotCi0gICAgLy8gUGFyYWxsZWxpemF0aW9uIHBhcnRzCi0g
ICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7
IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0IGZvciBwYXJhbGxlbCBqb2JzCi0KICAgICBJbnRTaXpl
IG1fa2VybmVsU2l6ZTsKICAgICBmbG9hdCBtX2Rpdmlzb3I7CiAgICAgZmxvYXQgbV9iaWFzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
ZmZ1c2VMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcAppbmRleCBiZDViNjE1N2Y4ZDhjNTcwZmE1MzhmMjRm
ODZjOTRhYTlhMGU3NzUzLi43NjBmODM1YjFiNTEyM2RkNDJjMjZmMTdmN2NkYzFkMzMzYjI0Y2Q2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlmZnVzZUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcApAQCAtMzQsNyArMzQsNyBAQCBSZWY8RkVE
aWZmdXNlTGlnaHRpbmc+IEZFRGlmZnVzZUxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29sb3ImIGxp
Z2h0aW5nQ29sb3IsIGZsbwogfQogCiBGRURpZmZ1c2VMaWdodGluZzo6RkVEaWZmdXNlTGlnaHRp
bmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQg
ZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJiBsaWdodFNvdXJjZSkKLSAgICA6IEZFTGlnaHRp
bmcoRGlmZnVzZUxpZ2h0aW5nLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VD
b25zdGFudCwgMCwgMCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZN
b3ZlKGxpZ2h0U291cmNlKSwgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZykK
KyAgICA6IEZFTGlnaHRpbmcoRmlsdGVyRWZmZWN0OjpUeXBlOjpGRURpZmZ1c2VMaWdodGluZywg
bGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIDAsIDAsIGtlcm5l
bFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSkpCiB7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggZTdjMWEyMjk5YjRlNTA3YzRm
NjhiODY4OGE4ZDA4NTc3YzA1NTZiMC4uZGZjNzYwZTIwZjQ5OTQ2MDVmOTQ0OTEyZWZkZTNhYzA4
MTUwNGJhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTI1LDYgKzI1LDcgQEAK
ICNpbmNsdWRlICJGRURpc3BsYWNlbWVudE1hcC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCisj
aW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgpAQCAtODQsMzAgKzg1LDQ4IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OnRyYW5z
Zm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50IGluCiAgICAg
ICAgIGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYnl0ZU9mZnNldE9mUGl4ZWwodW5zaWduZWQg
eCwgdW5zaWduZWQgeSwgdW5zaWduZWQgcm93Qnl0ZXMpCisvLyBGSVhNRTogTW92ZSB0aGUgY2xh
c3MgRkVDb21wb3NpdGVTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFk
ZXIgZmlsZXMuCitjbGFzcyBGRURpc3BsYWNlbWVudE1hcFNvZnR3YXJlQXBwbGllciA6IHB1Ymxp
YyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVEaXNwbGFjZW1lbnRNYXA+IHsKKyAgICB1
c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRGlzcGxhY2VtZW50TWFw
PjsKKworcHVibGljOgorICAgIEZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyKEZFRGlz
cGxhY2VtZW50TWFwJik7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZp
bHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGJ5dGVPZmZzZXRPZlBpeGVsKHVuc2lnbmVkIHgsIHVu
c2lnbmVkIHksIHVuc2lnbmVkIHJvd0J5dGVzKQorICAgIHsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgYnl0ZXNQZXJQaXhlbCA9IDQ7CisgICAgICAgIHJldHVybiB4ICogYnl0ZXNQZXJQaXhlbCAr
IHkgKiByb3dCeXRlczsKKyAgICB9CisKKyAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1fZWZmZWN0LnhDaGFubmVsU2VsZWN0b3IoKSAtIDE7IH0KKyAgICBpbnQgeUNoYW5u
ZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZWZmZWN0LnlDaGFubmVsU2VsZWN0b3IoKSAtIDE7
IH0KK307CisKK0ZFRGlzcGxhY2VtZW50TWFwU29mdHdhcmVBcHBsaWVyOjpGRURpc3BsYWNlbWVu
dE1hcFNvZnR3YXJlQXBwbGllcihGRURpc3BsYWNlbWVudE1hcCYgZWZmZWN0KQorICAgIDogQmFz
ZShlZmZlY3QpCiB7Ci0gICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQZXJQaXhlbCA9IDQ7Ci0gICAg
cmV0dXJuIHggKiBieXRlc1BlclBpeGVsICsgeSAqIHJvd0J5dGVzOworICAgIEFTU0VSVChtX2Vm
ZmVjdC54Q2hhbm5lbFNlbGVjdG9yKCkgIT0gQ0hBTk5FTF9VTktOT1dOKTsKKyAgICBBU1NFUlQo
bV9lZmZlY3QueUNoYW5uZWxTZWxlY3RvcigpICE9IENIQU5ORUxfVU5LTk9XTik7CiB9CiAKLWJv
b2wgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXIm
IGZpbHRlcikKK2Jvb2wgRkVEaXNwbGFjZW1lbnRNYXBTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNv
bnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0
cykKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgRmlsdGVy
RWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKLQotICAgIEFTU0VSVChtX3hDaGFubmVsU2Vs
ZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKLSAgICBBU1NFUlQobV95Q2hhbm5lbFNlbGVjdG9y
ICE9IENIQU5ORUxfVU5LTk9XTik7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0
c1swXS5nZXQoKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0c1sxXS5nZXQo
KTsKIAotICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGF1dG8gZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1
ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCi0gICAgSW50UmVjdCBl
ZmZlY3RBRHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoaW4t
PmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGF1dG8gZWZmZWN0QURyYXdpbmdSZWN0ID0gbV9l
ZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKICAgICBhdXRvIGlucHV0UGl4ZWxCdWZmZXIgPSBpbi0+Z2V0UGl4ZWxCdWZmZXJS
ZXN1bHQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZWZmZWN0QURyYXdp
bmdSZWN0KTsKIAotICAgIEludFJlY3QgZWZmZWN0QkRyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVn
aW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgYXV0
byBlZmZlY3RCRHJhd2luZ1JlY3QgPSBtX2VmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICAvLyBUaGUgY2FsY3VsYXRp
b25zIHVzaW5nIHRoZSBwaXhlbCB2YWx1ZXMgZnJvbSDigJhpbjLigJkgYXJlIHBlcmZvcm1lZCB1
c2luZyBub24tcHJlbXVsdGlwbGllZCBjb2xvciB2YWx1ZXMuCiAgICAgYXV0byBkaXNwbGFjZW1l
bnRQaXhlbEJ1ZmZlciA9IGluMi0+Z2V0UGl4ZWxCdWZmZXJSZXN1bHQoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBlZmZlY3RCRHJhd2luZ1JlY3QpOwogICAgIApAQCAt
MTE4LDkgKzEzNyw5IEBAIGJvb2wgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBhdXRvJiBkaXNwbGFjZW1lbnRJbWFnZSA9
IGRpc3BsYWNlbWVudFBpeGVsQnVmZmVyLT5kYXRhKCk7CiAgICAgQVNTRVJUKGlucHV0SW1hZ2Uu
bGVuZ3RoKCkgPT0gZGlzcGxhY2VtZW50SW1hZ2UubGVuZ3RoKCkpOwogCi0gICAgSW50U2l6ZSBw
YWludFNpemUgPSBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKKyAgICBJbnRTaXplIHBhaW50
U2l6ZSA9IG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpOwogCi0gICAgRmxvYXRT
aXplIHNjYWxlID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX3NjYWxlLCBtX3NjYWxl
IH0pOworICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsg
bV9lZmZlY3Quc2NhbGUoKSwgbV9lZmZlY3Quc2NhbGUoKSB9KTsKICAgICBmbG9hdCBzY2FsZUZv
ckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKICAgICBmbG9hdCBzY2FsZUZvckNvbG9y
WSA9IHNjYWxlLmhlaWdodCgpIC8gMjU1LjA7CiAgICAgZmxvYXQgc2NhbGVkT2Zmc2V0WCA9IDAu
NSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7CkBAIC0xNTMsNiArMTcyLDExIEBAIGJvb2wgRkVEaXNw
bGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRURpc3Bs
YWNlbWVudE1hcFNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVj
dHMoKSk7Cit9CisKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBDaGFubmVsU2VsZWN0b3JUeXBlJiB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpc3BsYWNlbWVudE1hcC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpc3BsYWNlbWVudE1hcC5oCmluZGV4IDk5MDE0MjYxY2I4MmU5ZGEyMGI5ZTAzZjhk
ZWRjMjI1NjgzYzEyZWEuLjdhNjM3OGIwNGNiNGFkODgyMTFhMGE0YWNhODhhZmQ4ODMyN2NlYzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aXNwbGFjZW1lbnRNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKQEAgLTUwLDE1ICs1MCwxMiBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEZFRGlzcGxhY2VtZW50TWFwKENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5u
ZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7
CiAKLSAgICBpbnQgeENoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feENoYW5uZWxTZWxl
Y3RvciAtIDE7IH0KLSAgICBpbnQgeUNoYW5uZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1feUNo
YW5uZWxTZWxlY3RvciAtIDE7IH0KLQotICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJl
Y3QoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3Np
bmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKICAgICBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIHJlc3VsdENvbG9yU3BhY2UoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiwgY29uc3QgaW50KSBvdmVycmlk
ZTsKIAotICAgIGJvb2wgcGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJy
aWRlOworICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJikg
b3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVj
dFJlY3QoKSkpOyB9CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IGI2MmFiNjg0Y2Q5MWVmYzc3ZjE4YTE2NGU5NWE0NTk0
ZmM3Njg1OGUuLmFhYjI0OGQxNDgwMmZiNjc1N2FlM2E1OWE0M2U0NjI5M2FmYzE4NTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hh
ZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJDb2xvclNlcmlhbGl6
YXRpb24uaCIKICNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgogI2luY2x1ZGUgIkZpbHRlci5o
IgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVy
LmgiCkBAIC02OSwxOCArNzAsMjggQEAgdm9pZCBGRURyb3BTaGFkb3c6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKIH0KIAotYm9vbCBGRURy
b3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKKy8v
IEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRURyb3BTaGFkb3dTb2Z0d2FyZUFwcGxpZXIgdG8gc2Vw
YXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRURyb3BTaGFkb3dTb2Z0d2Fy
ZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFRHJvcFNoYWRv
dz4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVEcm9w
U2hhZG93PjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFw
cGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3Rz
KSBvdmVycmlkZTsKK307CisKK2Jvb2wgRkVEcm9wU2hhZG93U29mdHdhcmVBcHBsaWVyOjphcHBs
eShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVm
ZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIEZp
bHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdHNbMF0uZ2V0KCk7CiAKLSAgICBhdXRvIHJlc3Vs
dEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9l
ZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBGbG9hdFNpemUgYmx1clJhZGl1cyA9IDIgKiBmaWx0ZXIu
c2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIEZsb2F0U2l6ZSBv
ZmZzZXQgPSBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZHgsIG1fZHkgfSk7CisgICAg
RmxvYXRTaXplIGJsdXJSYWRpdXMgPSAyICogZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBt
X2VmZmVjdC5zdGREZXZpYXRpb25YKCksIG1fZWZmZWN0LnN0ZERldmlhdGlvblkoKSB9KTsKKyAg
ICBGbG9hdFNpemUgb2Zmc2V0ID0gZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2VmZmVj
dC5keCgpLCBtX2VmZmVjdC5keSgpIH0pOwogCi0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb24g
PSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAg
ICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IG1fZWZmZWN0LmRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVn
aW9uV2l0aE9mZnNldChkcmF3aW5nUmVnaW9uKTsKICAgICBkcmF3aW5nUmVnaW9uV2l0aE9mZnNl
dC5tb3ZlKG9mZnNldCk7CiAKQEAgLTg5LDEzICsxMDAsMTMgQEAgYm9vbCBGRURyb3BTaGFkb3c6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgR3JhcGhpY3NDb250ZXh0JiByZXN1bHRDb250ZXh0ID0gcmVzdWx0
SW1hZ2UtPmNvbnRleHQoKTsKLSAgICByZXN1bHRDb250ZXh0LnNldEFscGhhKG1fc2hhZG93T3Bh
Y2l0eSk7CisgICAgcmVzdWx0Q29udGV4dC5zZXRBbHBoYShtX2VmZmVjdC5zaGFkb3dPcGFjaXR5
KCkpOwogICAgIHJlc3VsdENvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJh
d2luZ1JlZ2lvbldpdGhPZmZzZXQpOwogICAgIHJlc3VsdENvbnRleHQuc2V0QWxwaGEoMSk7CiAK
LSAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRv
d0NvbG9yKTsKKyAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3coYmx1clJhZGl1cywgb2Zmc2V0
LCBtX2VmZmVjdC5zaGFkb3dDb2xvcigpKTsKIAotICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1h
dCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0OjpS
R0JBOCwgcmVzdWx0Q29sb3JTcGFjZSgpIH07CisgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0
IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJH
QkE4LCBtX2VmZmVjdC5yZXN1bHRDb2xvclNwYWNlKCkgfTsKICAgICBJbnRSZWN0IHNoYWRvd0Fy
ZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPnRydW5jYXRlZExvZ2ljYWxTaXplKCkpOwogICAg
IGF1dG8gcGl4ZWxCdWZmZXIgPSByZXN1bHRJbWFnZS0+Z2V0UGl4ZWxCdWZmZXIoZm9ybWF0LCBz
aGFkb3dBcmVhKTsKICAgICBpZiAoIXBpeGVsQnVmZmVyKQpAQCAtMTA3LDE0ICsxMTgsMTggQEAg
Ym9vbCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZp
bHRlcikKICAgICByZXN1bHRJbWFnZS0+cHV0UGl4ZWxCdWZmZXIoKnBpeGVsQnVmZmVyLCBzaGFk
b3dBcmVhKTsKIAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBv
c2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7Ci0gICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93
Q29sb3IpOworICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgbV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX2VmZmVjdC5zaGFkb3dD
b2xvcigpKTsKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3Np
dGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdmVyKTsKIAogICAgIHJlc3VsdEltYWdlLT5jb250ZXh0
KCkuZHJhd0ltYWdlQnVmZmVyKCpzb3VyY2VJbWFnZSwgZHJhd2luZ1JlZ2lvbik7Ci0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gRkVEcm9wU2hhZG93U29mdHdh
cmVBcHBsaWVyKCp0aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKyAgICAK
IEludE91dHNldHMgRkVEcm9wU2hhZG93OjpvdXRzZXRzKCkgY29uc3QKIHsKICAgICBJbnRTaXpl
IG91dHNldFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZSh7IG1fc3Rk
WCwgbV9zdGRZIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVGbG9vZC5jcHAKaW5kZXggMjgwOWI0YjE3NWQzMjU1ZDIxMDc0OTkxNmViM2Vk
MDUwMTM1NjVhNS4uOTg5OGM3Mzc2ZjY1ZjJlMTE3NWMxYTc4MWM2NGVlZjgzMjQ2YWViMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxv
b2QuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiRkVGbG9vZC5oIgogCiAjaW5jbHVk
ZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCisjaW5jbHVkZSAiRmlsdGVyRWZmZWN0QXBwbGllci5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtNTgsMTggKzU5LDMzIEBAIGJv
b2wgRkVGbG9vZDo6c2V0Rmxvb2RPcGFjaXR5KGZsb2F0IGZsb29kT3BhY2l0eSkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJikKKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBGRURyb3BTaGFkb3dTb2Z0d2FyZUFw
cGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUZsb29k
U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUZs
b29kPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUZs
b29kPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5
KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBv
dmVycmlkZTsKK307CisKK2Jvb2wgRkVGbG9vZFNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3Qg
RmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJikKIHsKLSAgICBhdXRvIHJlc3VsdElt
YWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZl
Y3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIGNvbG9yID0gZmxvb2RDb2xvcigpLmNvbG9yV2l0aEFs
cGhhTXVsdGlwbGllZEJ5KGZsb29kT3BhY2l0eSgpKTsKLSAgICByZXN1bHRJbWFnZS0+Y29udGV4
dCgpLmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCku
c2l6ZSgpKSwgY29sb3IpOworICAgIGF1dG8gY29sb3IgPSBtX2VmZmVjdC5mbG9vZENvbG9yKCku
Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkobV9lZmZlY3QuZmxvb2RPcGFjaXR5KCkpOworICAg
IHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
bV9lZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBjb2xvcik7CiAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZFRmxvb2RTb2Z0d2FyZUFwcGxpZXIoKnRo
aXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBUZXh0U3RyZWFtJiBGRUZs
b29kOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlv
blR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVG
bG9vZCI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCmluZGV4IDRjNWZhYjAxYTMzOTU3ZThmZTkyMTU2
ZDUwNzkxNjdkNGJlOWMwZjkuLmRiMzU5MDhmNGY0Zjg5YTQ1OGQ3OWJjMzAxZjEyOGFjNTU5Mjkx
MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBAIC0yOCwzMCArMjgsMTUwIEBACiAKICNpbmNs
dWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRl
ICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFKQogI2lu
Y2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CisjZWxzZQogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFt
cGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9Q
YXJhbGxlbEpvYnMuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxGRUdh
dXNzaWFuQmx1cj4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5LCBFZGdl
TW9kZVR5cGUgZWRnZU1vZGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVHYXVzc2lh
bkJsdXIoeCwgeSwgZWRnZU1vZGUpKTsKK30KKworRkVHYXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5C
bHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKKyAgICA6IEZpbHRl
ckVmZmVjdChGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFR2F1c3NpYW5CbHVyKQorICAgICwgbV9zdGRY
KHgpCisgICAgLCBtX3N0ZFkoeSkKKyAgICAsIG1fZWRnZU1vZGUoZWRnZU1vZGUpCit7Cit9CisK
K3ZvaWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblgoZmxvYXQgeCkKK3sKKyAgICBt
X3N0ZFggPSB4OworfQorCit2b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRTdGREZXZpYXRpb25ZKGZs
b2F0IHkpCit7CisgICAgbV9zdGRZID0geTsKK30KKwordm9pZCBGRUdhdXNzaWFuQmx1cjo6c2V0
RWRnZU1vZGUoRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoreworICAgIG1fZWRnZU1vZGUgPSBlZGdl
TW9kZTsKK30KIAogc3RhdGljIGlubGluZSBmbG9hdCBnYXVzc2lhbktlcm5lbEZhY3RvcigpCiB7
CiAgICAgcmV0dXJuIDMgLyA0LmYgKiBzcXJ0ZigyICogcGlGbG9hdCk7CiB9CiAKLXN0YXRpYyBj
b25zdCBpbnQgZ01heEtlcm5lbFNpemUgPSA1MDA7CitzdGF0aWMgaW50IGNsYW1wZWRUb0tlcm5l
bFNpemUoZmxvYXQgdmFsdWUpCit7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhL
ZXJuZWxTaXplID0gNTAwOworCisgICAgLy8gTGltaXQgdGhlIGtlcm5lbCBzaXplIHRvIDUwMC4g
QSBiaWdnZXIgcmFkaXVzIHdvbid0IG1ha2UgYSBiaWcgZGlmZmVyZW5jZSBmb3IgdGhlIHJlc3Vs
dCBpbWFnZSBidXQKKyAgICAvLyBpbmZsYXRlcyB0aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCB0b28g
bXVjaC4gVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggRmlyZWZveCcgYmVoYXZpb3IuCisgICAgdW5z
aWduZWQgc2l6ZSA9IHN0ZDo6bWF4PHVuc2lnbmVkPigyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Zmxvb3JmKHZhbHVlICogZ2F1c3NpYW5LZXJuZWxGYWN0b3IoKSArIDAuNWYpKSk7CisgICAgcmV0
dXJuIGNsYW1wVG88aW50PihzdGQ6Om1pbihzaXplLCBtYXhLZXJuZWxTaXplKSk7Cit9CisgICAg
CitJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxv
YXRTaXplIHN0ZERldmlhdGlvbikKK3sKKyAgICBBU1NFUlQoc3RkRGV2aWF0aW9uLndpZHRoKCkg
Pj0gMCAmJiBzdGREZXZpYXRpb24uaGVpZ2h0KCkgPj0gMCk7CisgICAgSW50U2l6ZSBrZXJuZWxT
aXplOwogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgaWYgKHN0ZERldmlhdGlvbi53aWR0aCgp
KQorICAgICAgICBrZXJuZWxTaXplLnNldFdpZHRoKGNsYW1wZWRUb0tlcm5lbFNpemUoc3RkRGV2
aWF0aW9uLndpZHRoKCkpKTsKKworICAgIGlmIChzdGREZXZpYXRpb24uaGVpZ2h0KCkpCisgICAg
ICAgIGtlcm5lbFNpemUuc2V0SGVpZ2h0KGNsYW1wZWRUb0tlcm5lbFNpemUoc3RkRGV2aWF0aW9u
LmhlaWdodCgpKSk7CisKKyAgICByZXR1cm4ga2VybmVsU2l6ZTsKK30KKworSW50U2l6ZSBGRUdh
dXNzaWFuQmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxv
YXRTaXplIHN0ZERldmlhdGlvbikKK3sKKyAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJu
ZWxTaXplKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHN0ZERldmlhdGlvbikpOworfQorCitJ
bnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVPdXRzZXRTaXplKEZsb2F0U2l6ZSBzdGRE
ZXZpYXRpb24pCit7CisgICAgYXV0byBrZXJuZWxTaXplID0gY2FsY3VsYXRlVW5zY2FsZWRLZXJu
ZWxTaXplKHN0ZERldmlhdGlvbik7CisKKyAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBz
aXplIGFuZCBtdWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0
aHJlZSB0aW1lcy4KKyAgICByZXR1cm4geyAzICoga2VybmVsU2l6ZS53aWR0aCgpIC8gMiwgMyAq
IGtlcm5lbFNpemUuaGVpZ2h0KCkgLyAyIH07Cit9CisKK3ZvaWQgRkVHYXVzc2lhbkJsdXI6OmRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIElu
dFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3RkWCwg
bV9zdGRZIH0pOworCisgICAgRmxvYXRSZWN0IGFic29sdXRlUGFpbnRSZWN0ID0gaW5wdXRFZmZl
Y3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CisgICAgLy8gRWRnZSBtb2RlcyBvdGhlciB0aGFu
ICdub25lJyBkbyBub3QgaW5mbGF0ZSB0aGUgYWZmZWN0ZWQgcGFpbnQgcmVjdC4KKyAgICBpZiAo
bV9lZGdlTW9kZSAhPSBFREdFTU9ERV9OT05FKSB7CisgICAgICAgIHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFdlIHRha2UgdGhlIGhhbGYga2VybmVsIHNpemUgYW5kIG11bHRp
cGx5IGl0IHdpdGggdGhyZWUsIGJlY2F1c2Ugd2UgcnVuIGJveCBibHVyIHRocmVlIHRpbWVzLgor
ICAgIGFic29sdXRlUGFpbnRSZWN0LmluZmxhdGVYKDMgKiBrZXJuZWxTaXplLndpZHRoKCkgKiAw
LjVmKTsKKyAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWSgzICoga2VybmVsU2l6ZS5oZWln
aHQoKSAqIDAuNWYpOworCisgICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKKyAgICAgICAgYWJzb2x1
dGVQYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7CisgICAgZWxzZQorICAgICAg
ICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShtYXhFZmZlY3RSZWN0KCkpOworCisgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOworfQor
CisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXIg
dG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUdhdXNzaWFuQmx1
clNvZnR3YXJlQXBwbGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVH
YXVzc2lhbkJsdXI+IHsKKyAgICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBs
aWVyPEZFR2F1c3NpYW5CbHVyPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisK
KyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYg
aW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgQXBwbHlQYXJh
bWV0ZXJzIHsKKyAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBpb1BpeGVsQXJyYXk7
CisgICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gdG1wUGl4ZWxBcnJheTsKKyAgICAg
ICAgaW50IHdpZHRoOworICAgICAgICBpbnQgaGVpZ2h0OworICAgICAgICB1bnNpZ25lZCBrZXJu
ZWxTaXplWDsKKyAgICAgICAgdW5zaWduZWQga2VybmVsU2l6ZVk7CisgICAgICAgIGJvb2wgaXNB
bHBoYUltYWdlOworICAgICAgICBFZGdlTW9kZVR5cGUgZWRnZU1vZGU7CisgICAgfTsKKworICAg
IHN0YXRpYyBpbmxpbmUgdm9pZCBrZXJuZWxQb3NpdGlvbihpbnQgYmx1ckl0ZXJhdGlvbiwgdW5z
aWduZWQmIHJhZGl1cywgaW50JiBkZWx0YUxlZnQsIGludCYgZGVsdGFSaWdodCk7CiAKLWlubGlu
ZSB2b2lkIGtlcm5lbFBvc2l0aW9uKGludCBibHVySXRlcmF0aW9uLCB1bnNpZ25lZCYgcmFkaXVz
LCBpbnQmIGRlbHRhTGVmdCwgaW50JiBkZWx0YVJpZ2h0KQorICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCBib3hCbHVyQWxwaGFPbmx5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5
LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQgZHgsIGludCYgZHhM
ZWZ0LCBpbnQmIGR4UmlnaHQsIGludCYgc3RyaWRlLCBpbnQmIHN0cmlkZUxpbmUsIGludCYgZWZm
ZWN0V2lkdGgsIGludCYgZWZmZWN0SGVpZ2h0LCBjb25zdCBpbnQmIG1heEtlcm5lbFNpemUpOwor
ICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
cmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQg
ZHgsIGludCBkeExlZnQsIGludCBkeFJpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgc3RyaWRlTGluZSwg
aW50IGVmZmVjdFdpZHRoLCBpbnQgZWZmZWN0SGVpZ2h0LCBib29sIGFscGhhSW1hZ2UsIEVkZ2VN
b2RlVHlwZSk7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYm94Qmx1ckFjY2VsZXJhdGVkKFVp
bnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIs
IHVuc2lnbmVkIGtlcm5lbFNpemUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVm
ZmVjdEhlaWdodCk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGJveEJsdXJVbmFjY2VsZXJhdGVk
KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZm
ZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgaW50IHN0cmlk
ZSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlKTsK
KworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBib3hCbHVyR2VuZXJpYyhVaW50OENsYW1wZWRBcnJh
eSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBr
ZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9v
bCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSk7CisgICAgc3RhdGljIGlubGluZSB2b2lkIGJv
eEJsdXJXb3JrZXIoQXBwbHlQYXJhbWV0ZXJzKik7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQg
YXBwbHlQbGF0Zm9ybShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFy
cmF5JiB0bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVs
U2l6ZVksIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlw
ZSk7Cit9OworCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6a2Vy
bmVsUG9zaXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGludCYgZGVs
dGFMZWZ0LCBpbnQmIGRlbHRhUmlnaHQpCiB7CiAgICAgLy8gQ2hlY2sgaHR0cDovL3d3dy53My5v
cmcvVFIvU1ZHL2ZpbHRlcnMuaHRtbCNmZUdhdXNzaWFuQmx1ckVsZW1lbnQgZm9yIGRldGFpbHMu
CiAgICAgc3dpdGNoIChibHVySXRlcmF0aW9uKSB7CkBAIC03OSwzNyArMTk5LDggQEAgaW5saW5l
IHZvaWQga2VybmVsUG9zaXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMs
IGludCYgZGVsdGFMZWZ0LAogICAgIH0KIH0KIAotUmVmPEZFR2F1c3NpYW5CbHVyPiBGRUdhdXNz
aWFuQmx1cjo6Y3JlYXRlKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRUdhdXNzaWFuQmx1cih4LCB5LCBlZGdlTW9k
ZSkpOwotfQotCi1GRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoZmxvYXQgeCwgZmxvYXQg
eSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQotICAgIDogRmlsdGVyRWZmZWN0KEZpbHRlckVmZmVj
dDo6VHlwZTo6RkVHYXVzc2lhbkJsdXIpCi0gICAgLCBtX3N0ZFgoeCkKLSAgICAsIG1fc3RkWSh5
KQotICAgICwgbV9lZGdlTW9kZShlZGdlTW9kZSkKLXsKLX0KLQotdm9pZCBGRUdhdXNzaWFuQmx1
cjo6c2V0U3RkRGV2aWF0aW9uWChmbG9hdCB4KQotewotICAgIG1fc3RkWCA9IHg7Ci19Ci0KLXZv
aWQgRkVHYXVzc2lhbkJsdXI6OnNldFN0ZERldmlhdGlvblkoZmxvYXQgeSkKLXsKLSAgICBtX3N0
ZFkgPSB5OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVyOjpzZXRFZGdlTW9kZShFZGdlTW9kZVR5
cGUgZWRnZU1vZGUpCi17Ci0gICAgbV9lZGdlTW9kZSA9IGVkZ2VNb2RlOwotfQotCiAvLyBUaGlz
IGZ1bmN0aW9uIG9ubHkgb3BlcmF0ZXMgb24gQWxwaGEgY2hhbm5lbC4KLWlubGluZSB2b2lkIGJv
eEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVp
bnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LAotICAgIHVuc2lnbmVkIGR4LCBpbnQmIGR4
TGVmdCwgaW50JiBkeFJpZ2h0LCBpbnQmIHN0cmlkZSwgaW50JiBzdHJpZGVMaW5lLCBpbnQmIGVm
ZmVjdFdpZHRoLCBpbnQmIGVmZmVjdEhlaWdodCwgY29uc3QgaW50JiBtYXhLZXJuZWxTaXplKQor
aW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJBbHBoYU9u
bHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBkeCwgaW50JiBkeExlZnQsIGludCYgZHhSaWdo
dCwgaW50JiBzdHJpZGUsIGludCYgc3RyaWRlTGluZSwgaW50JiBlZmZlY3RXaWR0aCwgaW50JiBl
ZmZlY3RIZWlnaHQsIGNvbnN0IGludCYgbWF4S2VybmVsU2l6ZSkKIHsKICAgICBjb25zdCB1aW50
OF90KiBzcmNEYXRhID0gc3JjUGl4ZWxBcnJheS5kYXRhKCk7CiAgICAgdWludDhfdCogZHN0RGF0
YSA9IGRzdFBpeGVsQXJyYXkuZGF0YSgpOwpAQCAtMTQ5LDggKzI0MCw3IEBAIGlubGluZSB2b2lk
IGJveEJsdXJBbHBoYU9ubHkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNyY1BpeGVsQXJyYXks
IFVpbnQ4Q2xhbXBlCiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBib3hCbHVyKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBVaW50OENsYW1wZWRBcnJheSYgZHN0UGl4ZWxB
cnJheSwKLSAgICB1bnNpZ25lZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJp
ZGUsIGludCBzdHJpZGVMaW5lLCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJv
b2wgYWxwaGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQoraW5saW5lIHZvaWQgRkVHYXVz
c2lhbkJsdXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXIoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkc3RQaXhlbEFycmF5LCB1bnNpZ25l
ZCBkeCwgaW50IGR4TGVmdCwgaW50IGR4UmlnaHQsIGludCBzdHJpZGUsIGludCBzdHJpZGVMaW5l
LCBpbnQgZWZmZWN0V2lkdGgsIGludCBlZmZlY3RIZWlnaHQsIGJvb2wgYWxwaGFJbWFnZSwgRWRn
ZU1vZGVUeXBlIGVkZ2VNb2RlKQogewogICAgIGNvbnN0IGludCBtYXhLZXJuZWxTaXplID0gc3Rk
OjptaW4oZHhSaWdodCwgZWZmZWN0V2lkdGgpOwogICAgIGlmIChhbHBoYUltYWdlKQpAQCAtMjgw
LDcgKzM3MCw3IEBAIGlubGluZSB2b2lkIGJveEJsdXIoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNyY1BpeGVsQXJyYXksIFVpbnQ4Q2xhbXBlZEFycmF5JiBkCiB9CiAKICNpZiBVU0UoQUNDRUxF
UkFURSkKLWlubGluZSB2b2lkIGFjY2VsZXJhdGVCb3hCbHVyKFVpbnQ4Q2xhbXBlZEFycmF5JiBp
b0J1ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNp
emUsIGludCBzdHJpZGUsIGludCBlZmZlY3RXaWR0aCwgaW50IGVmZmVjdEhlaWdodCkKK2lubGlu
ZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVBcHBsaWVyOjpib3hCbHVyQWNjZWxlcmF0ZWQo
VWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdGVtcEJ1ZmZl
ciwgdW5zaWduZWQga2VybmVsU2l6ZSwgaW50IHN0cmlkZSwgaW50IGVmZmVjdFdpZHRoLCBpbnQg
ZWZmZWN0SGVpZ2h0KQogewogICAgIGlmICghaW9CdWZmZXIuZGF0YSgpIHx8ICF0ZW1wQnVmZmVy
LmRhdGEoKSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTMyNiw3ICs0MTYs
NyBAQCBpbmxpbmUgdm9pZCBhY2NlbGVyYXRlQm94Qmx1cihVaW50OENsYW1wZWRBcnJheSYgaW9C
dWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZQogfQogI2VuZGlmCiAKLWlubGluZSB2b2lkIHN0
YW5kYXJkQm94Qmx1cihVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFy
cmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6
ZVksIGludCBzdHJpZGUsIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVk
Z2VNb2RlVHlwZSBlZGdlTW9kZSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyU29mdHdhcmVB
cHBsaWVyOjpib3hCbHVyVW5hY2NlbGVyYXRlZChVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIs
IFVpbnQ4Q2xhbXBlZEFycmF5JiB0ZW1wQnVmZmVyLCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5z
aWduZWQga2VybmVsU2l6ZVksIGludCBzdHJpZGUsIEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBp
c0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKIHsKICAgICBpbnQgZHhMZWZ0ID0g
MDsKICAgICBpbnQgZHhSaWdodCA9IDA7CkBAIC0zNzEsMzUgKzQ2MSwzOSBAQCBpbmxpbmUgdm9p
ZCBzdGFuZGFyZEJveEJsdXIoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1w
ZWRBcnJheSYgdGVtcAogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBs
YXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFt
cGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBr
ZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKQoraW5saW5lIHZvaWQgRkVHYXVzc2lhbkJs
dXJTb2Z0d2FyZUFwcGxpZXI6OmJveEJsdXJHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1
ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNp
emVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplLCBib29sIGlzQWxw
aGFJbWFnZSwgRWRnZU1vZGVUeXBlIGVkZ2VNb2RlKQogewogICAgIGludCBzdHJpZGUgPSA0ICog
cGFpbnRTaXplLndpZHRoKCk7CiAKICNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBpZiAoa2VybmVs
U2l6ZVggPT0ga2VybmVsU2l6ZVkgJiYgKG1fZWRnZU1vZGUgPT0gRURHRU1PREVfTk9ORSB8fCBt
X2VkZ2VNb2RlID09IEVER0VNT0RFX0RVUExJQ0FURSkpIHsKLSAgICAgICAgYWNjZWxlcmF0ZUJv
eEJsdXIoaW9CdWZmZXIsIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNpemVYLCBzdHJpZGUsIHBhaW50
U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCkpOworICAgIGlmIChrZXJuZWxTaXplWCA9
PSBrZXJuZWxTaXplWSAmJiAoZWRnZU1vZGUgPT0gRURHRU1PREVfTk9ORSB8fCBlZGdlTW9kZSA9
PSBFREdFTU9ERV9EVVBMSUNBVEUpKSB7CisgICAgICAgIGJveEJsdXJBY2NlbGVyYXRlZChpb0J1
ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIHN0cmlkZSwgcGFpbnRTaXplLndpZHRo
KCksIHBhaW50U2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYK
IAotICAgIHN0YW5kYXJkQm94Qmx1cihpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6
ZVgsIGtlcm5lbFNpemVZLCBzdHJpZGUsIHBhaW50U2l6ZSwgaXNBbHBoYUltYWdlKCksIG1fZWRn
ZU1vZGUpOworICAgIGJveEJsdXJVbmFjY2VsZXJhdGVkKGlvQnVmZmVyLCB0bXBQaXhlbEFycmF5
LCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHN0cmlkZSwgcGFpbnRTaXplLCBpc0FscGhhSW1h
Z2UsIGVkZ2VNb2RlKTsKIH0KIAotdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVdv
cmtlcihQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKKyNpZiAhVVNFKEFDQ0VM
RVJBVEUpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6Ym94Qmx1
cldvcmtlcihBcHBseVBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCiB7CiAgICAgSW50U2l6ZSBwYWlu
dFNpemUocGFyYW1ldGVycy0+d2lkdGgsIHBhcmFtZXRlcnMtPmhlaWdodCk7Ci0gICAgcGFyYW1l
dGVycy0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpYygqcGFyYW1ldGVycy0+aW9QaXhlbEFy
cmF5LCAqcGFyYW1ldGVycy0+dG1wUGl4ZWxBcnJheSwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVgs
IHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBwYWludFNpemUpOworICAgIGJveEJsdXJHZW5lcmlj
KCpwYXJhbWV0ZXJzLT5pb1BpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT50bXBQaXhlbEFycmF5LCBw
YXJhbWV0ZXJzLT5rZXJuZWxTaXplWCwgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVksIHBhaW50U2l6
ZSwgcGFyYW1ldGVycy0+aXNBbHBoYUltYWdlLCBwYXJhbWV0ZXJzLT5lZGdlTW9kZSk7CiB9Cisj
ZW5kaWYKIAotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHkoVWludDhD
bGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW1wZWRBcnJheSYgdG1wUGl4ZWxBcnJheSwg
dW5zaWduZWQga2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWlu
dFNpemUpCitpbmxpbmUgdm9pZCBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcjo6YXBwbHlQ
bGF0Zm9ybShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4Q2xhbXBlZEFycmF5JiB0
bXBQaXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVks
IEludFNpemUmIHBhaW50U2l6ZSwgYm9vbCBpc0FscGhhSW1hZ2UsIEVkZ2VNb2RlVHlwZSBlZGdl
TW9kZSkKIHsKICNpZiAhVVNFKEFDQ0VMRVJBVEUpCiAgICAgaW50IHNjYW5saW5lID0gNCAqIHBh
aW50U2l6ZS53aWR0aCgpOwogICAgIGludCBleHRyYUhlaWdodCA9IDMgKiBrZXJuZWxTaXplWSAq
IDAuNWY7Ci0gICAgaW50IG9wdGltYWxUaHJlYWROdW1iZXIgPSAocGFpbnRTaXplLndpZHRoKCkg
KiBwYWludFNpemUuaGVpZ2h0KCkpIC8gKHNfbWluaW1hbFJlY3REaW1lbnNpb24gKyBleHRyYUhl
aWdodCAqIHBhaW50U2l6ZS53aWR0aCgpKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1p
bmltYWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBm
b3IgcGFyYWxsZWwgam9icworICAgIGludCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gKHBhaW50U2l6
ZS53aWR0aCgpICogcGFpbnRTaXplLmhlaWdodCgpKSAvIChtaW5pbWFsUmVjdERpbWVuc2lvbiAr
IGV4dHJhSGVpZ2h0ICogcGFpbnRTaXplLndpZHRoKCkpOwogCiAgICAgaWYgKG9wdGltYWxUaHJl
YWROdW1iZXIgPiAxKSB7Ci0gICAgICAgIFBhcmFsbGVsSm9iczxQbGF0Zm9ybUFwcGx5UGFyYW1l
dGVycz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5V29ya2VyLCBvcHRpbWFsVGhyZWFkTnVt
YmVyKTsKKyAgICAgICAgUGFyYWxsZWxKb2JzPEFwcGx5UGFyYW1ldGVycz4gcGFyYWxsZWxKb2Jz
KCZib3hCbHVyV29ya2VyLCBvcHRpbWFsVGhyZWFkTnVtYmVyKTsKIAogICAgICAgICBpbnQgam9i
cyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMoKTsKICAgICAgICAgaWYgKGpvYnMgPiAxKSB7
CkBAIC00MTAsOCArNTA0LDcgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3Jt
QXBwbHkoVWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW0KIAogICAgICAgICAg
ICAgaW50IGN1cnJlbnRZID0gMDsKICAgICAgICAgICAgIGZvciAoaW50IGpvYiA9IDA7IGpvYiA8
IGpvYnM7IGpvYisrKSB7Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1BcHBseVBhcmFtZXRlcnMm
IHBhcmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKLSAgICAgICAgICAgICAgICBw
YXJhbXMuZmlsdGVyID0gdGhpczsKKyAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBh
cmFtcyA9IHBhcmFsbGVsSm9icy5wYXJhbWV0ZXIoam9iKTsKIAogICAgICAgICAgICAgICAgIGlu
dCBzdGFydFkgPSAham9iID8gMCA6IGN1cnJlbnRZIC0gZXh0cmFIZWlnaHQ7CiAgICAgICAgICAg
ICAgICAgY3VycmVudFkgKz0gam9iIDwgam9ic1dpdGhFeHRyYSA/IGJsb2NrSGVpZ2h0ICsgMSA6
IGJsb2NrSGVpZ2h0OwpAQCAtNDMxLDYgKzUyNCw4IEBAIGlubGluZSB2b2lkIEZFR2F1c3NpYW5C
bHVyOjpwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFt
CiAgICAgICAgICAgICAgICAgcGFyYW1zLmhlaWdodCA9IGVuZFkgLSBzdGFydFk7CiAgICAgICAg
ICAgICAgICAgcGFyYW1zLmtlcm5lbFNpemVYID0ga2VybmVsU2l6ZVg7CiAgICAgICAgICAgICAg
ICAgcGFyYW1zLmtlcm5lbFNpemVZID0ga2VybmVsU2l6ZVk7CisgICAgICAgICAgICAgICAgcGFy
YW1zLmlzQWxwaGFJbWFnZSA9IGlzQWxwaGFJbWFnZTsKKyAgICAgICAgICAgICAgICBwYXJhbXMu
ZWRnZU1vZGUgPSBlZGdlTW9kZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcGFyYWxs
ZWxKb2JzLmV4ZWN1dGUoKTsKQEAgLTQzOCw3ICs1MzMsNyBAQCBpbmxpbmUgdm9pZCBGRUdhdXNz
aWFuQmx1cjo6cGxhdGZvcm1BcHBseShVaW50OENsYW1wZWRBcnJheSYgaW9CdWZmZXIsIFVpbnQ4
Q2xhbQogICAgICAgICAgICAgLy8gQ29weSB0b2dldGhlciB0aGUgcGFydHMgb2YgdGhlIGltYWdl
LgogICAgICAgICAgICAgY3VycmVudFkgPSAwOwogICAgICAgICAgICAgZm9yIChpbnQgam9iID0g
MTsgam9iIDwgam9iczsgam9iKyspIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFy
YW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOworICAgICAgICAg
ICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFtZXRlcihq
b2IpOwogICAgICAgICAgICAgICAgIGludCBzb3VyY2VPZmZzZXQ7CiAgICAgICAgICAgICAgICAg
aW50IGRlc3RpbmF0aW9uT2Zmc2V0OwogICAgICAgICAgICAgICAgIGludCBzaXplOwpAQCAtNDU4
LDk0ICs1NTMsNDEgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHko
VWludDhDbGFtcGVkQXJyYXkmIGlvQnVmZmVyLCBVaW50OENsYW0KICNlbmRpZgogCiAgICAgLy8g
VGhlIHNlbGVjdGlvbiBoZXJlIGV2ZW50dWFsbHkgc2hvdWxkIGhhcHBlbiBkeW5hbWljYWxseSBv
biBzb21lIHBsYXRmb3Jtcy4KLSAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhpb0J1ZmZlciwgdG1w
UGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBwYWludFNpemUpOwotfQotCi1z
dGF0aWMgaW50IGNsYW1wZWRUb0tlcm5lbFNpemUoZmxvYXQgdmFsdWUpCi17Ci0gICAgLy8gTGlt
aXQgdGhlIGtlcm5lbCBzaXplIHRvIDUwMC4gQSBiaWdnZXIgcmFkaXVzIHdvbid0IG1ha2UgYSBi
aWcgZGlmZmVyZW5jZSBmb3IgdGhlIHJlc3VsdCBpbWFnZSBidXQKLSAgICAvLyBpbmZsYXRlcyB0
aGUgYWJzb2x1dGUgcGFpbnQgcmVjdCB0b28gbXVjaC4gVGhpcyBpcyBjb21wYXRpYmxlIHdpdGgg
RmlyZWZveCcgYmVoYXZpb3IuCi0gICAgdW5zaWduZWQgc2l6ZSA9IHN0ZDo6bWF4PHVuc2lnbmVk
PigyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmxvb3JmKHZhbHVlICogZ2F1c3NpYW5LZXJuZWxG
YWN0b3IoKSArIDAuNWYpKSk7Ci0gICAgcmV0dXJuIGNsYW1wVG88aW50PihzdGQ6Om1pbihzaXpl
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ01heEtlcm5lbFNpemUpKSk7Ci19Ci0gICAgCi1JbnRT
aXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUoRmxvYXRTaXpl
IHN0ZERldmlhdGlvbikKLXsKLSAgICBBU1NFUlQoc3RkRGV2aWF0aW9uLndpZHRoKCkgPj0gMCAm
JiBzdGREZXZpYXRpb24uaGVpZ2h0KCkgPj0gMCk7Ci0gICAgSW50U2l6ZSBrZXJuZWxTaXplOwot
Ci0gICAgaWYgKHN0ZERldmlhdGlvbi53aWR0aCgpKQotICAgICAgICBrZXJuZWxTaXplLnNldFdp
ZHRoKGNsYW1wZWRUb0tlcm5lbFNpemUoc3RkRGV2aWF0aW9uLndpZHRoKCkpKTsKLQotICAgIGlm
IChzdGREZXZpYXRpb24uaGVpZ2h0KCkpCi0gICAgICAgIGtlcm5lbFNpemUuc2V0SGVpZ2h0KGNs
YW1wZWRUb0tlcm5lbFNpemUoc3RkRGV2aWF0aW9uLmhlaWdodCgpKSk7Ci0KLSAgICByZXR1cm4g
a2VybmVsU2l6ZTsKKyAgICBib3hCbHVyR2VuZXJpYyhpb0J1ZmZlciwgdG1wUGl4ZWxBcnJheSwg
a2VybmVsU2l6ZVgsIGtlcm5lbFNpemVZLCBwYWludFNpemUsIGlzQWxwaGFJbWFnZSwgZWRnZU1v
ZGUpOwogfQogCi1JbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVLZXJuZWxTaXplKGNv
bnN0IEZpbHRlciYgZmlsdGVyLCBGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQorYm9vbCBGRUdhdXNz
aWFuQmx1clNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKQogewotICAgIHJldHVybiBjYWxjdWxh
dGVVbnNjYWxlZEtlcm5lbFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoc3RkRGV2aWF0
aW9uKSk7Ci19CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsK
IAotSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUg
c3RkRGV2aWF0aW9uKQotewotICAgIGF1dG8ga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZVVuc2NhbGVk
S2VybmVsU2l6ZShzdGREZXZpYXRpb24pOwotCi0gICAgLy8gV2UgdGFrZSB0aGUgaGFsZiBrZXJu
ZWwgc2l6ZSBhbmQgbXVsdGlwbHkgaXQgd2l0aCB0aHJlZSwgYmVjYXVzZSB3ZSBydW4gYm94IGJs
dXIgdGhyZWUgdGltZXMuCi0gICAgcmV0dXJuIHsgMyAqIGtlcm5lbFNpemUud2lkdGgoKSAvIDIs
IDMgKiBrZXJuZWxTaXplLmhlaWdodCgpIC8gMiB9OwotfQotCi12b2lkIEZFR2F1c3NpYW5CbHVy
OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKLXsKLSAg
ICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlciwgeyBtX3N0
ZFgsIG1fc3RkWSB9KTsKLQotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVBhaW50UmVjdCA9IGlucHV0
RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIC8vIEVkZ2UgbW9kZXMgb3RoZXIg
dGhhbiAnbm9uZScgZG8gbm90IGluZmxhdGUgdGhlIGFmZmVjdGVkIHBhaW50IHJlY3QuCi0gICAg
aWYgKG1fZWRnZU1vZGUgIT0gRURHRU1PREVfTk9ORSkgewotICAgICAgICBzZXRBYnNvbHV0ZVBh
aW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSB0YWtlIHRoZSBoYWxmIGtlcm5lbCBzaXplIGFuZCBt
dWx0aXBseSBpdCB3aXRoIHRocmVlLCBiZWNhdXNlIHdlIHJ1biBib3ggYmx1ciB0aHJlZSB0aW1l
cy4KLSAgICBhYnNvbHV0ZVBhaW50UmVjdC5pbmZsYXRlWCgzICoga2VybmVsU2l6ZS53aWR0aCgp
ICogMC41Zik7Ci0gICAgYWJzb2x1dGVQYWludFJlY3QuaW5mbGF0ZVkoMyAqIGtlcm5lbFNpemUu
aGVpZ2h0KCkgKiAwLjVmKTsKLQotICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCi0gICAgICAgIGFi
c29sdXRlUGFpbnRSZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwotICAgIGVsc2UKLSAg
ICAgICAgYWJzb2x1dGVQYWludFJlY3QudW5pdGUobWF4RWZmZWN0UmVjdCgpKTsKLQotICAgIHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVQYWludFJlY3QpKTsK
LX0KLQotYm9vbCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZp
bHRlciYgZmlsdGVyKQotewotICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsK
LQotICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGF1dG8gZGVzdGluYXRp
b25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0Fs
cGhhSW1hZ2UoKSk7CisgICAgbV9lZmZlY3Quc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1h
Z2UoKSk7CiAKLSAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9u
T2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBhdXRvIGVm
ZmVjdERyYXdpbmdSZWN0ID0gbV9lZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVm
ZmVyKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICBpbi0+Y29weVBpeGVsQnVmZmVyUmVz
dWx0KCpkZXN0aW5hdGlvblBpeGVsQnVmZmVyLCBlZmZlY3REcmF3aW5nUmVjdCk7Ci0gICAgaWYg
KCFtX3N0ZFggJiYgIW1fc3RkWSkKKyAgICBpZiAoIW1fZWZmZWN0LnN0ZERldmlhdGlvblgoKSAm
JiAhbV9lZmZlY3Quc3RkRGV2aWF0aW9uWSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IEludFNpemUga2VybmVsU2l6ZSA9IGNhbGN1bGF0ZUtlcm5lbFNpemUoZmlsdGVyLCB7IG1fc3Rk
WCwgbV9zdGRZIH0pOworICAgIGF1dG8ga2VybmVsU2l6ZSA9IG1fZWZmZWN0LmNhbGN1bGF0ZUtl
cm5lbFNpemUoZmlsdGVyLCB7IG1fZWZmZWN0LnN0ZERldmlhdGlvblgoKSwgbV9lZmZlY3Quc3Rk
RGV2aWF0aW9uWSgpIH0pOwogCi0gICAgSW50U2l6ZSBwYWludFNpemUgPSBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKTsKKyAgICBJbnRTaXplIHBhaW50U2l6ZSA9IG1fZWZmZWN0LmFic29sdXRl
UGFpbnRSZWN0KCkuc2l6ZSgpOwogICAgIGF1dG8gdG1wSW1hZ2VEYXRhID0gVWludDhDbGFtcGVk
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQocGFpbnRTaXplLmFyZWEoKSAqIDQpOwogICAg
IGlmICghdG1wSW1hZ2VEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7Ci0g
ICAgcGxhdGZvcm1BcHBseShkZXN0aW5hdGlvblBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtl
cm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplKTsKKyAgICBh
cHBseVBsYXRmb3JtKGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2VybmVs
U2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUsIG1fZWZmZWN0Lmlz
QWxwaGFJbWFnZSgpLCBtX2VmZmVjdC5lZGdlTW9kZSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorYm9vbCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQoreworICAgIHJldHVybiBGRUdhdXNzaWFuQmx1clNvZnR3YXJlQXBwbGllcigq
dGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIEludE91dHNldHMgRkVH
YXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25zdAogewogICAgIEludFNpemUgb3V0c2V0U2l6ZSA9
IGNhbGN1bGF0ZU91dHNldFNpemUoeyBtX3N0ZFgsIG1fc3RkWSB9KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIu
aAppbmRleCBkNzRiZGFhNzJlZDMwNGY1YjgwMTc3YWQ2Y2NhNzc1YTViNDkzNzE3Li42NWFhNmUx
ODg5N2ZhOGNjOTc2OWQxZTU1N2Q3ZDI2ZjVlNWNhMjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCkBA
IC00NiwyOSArNDYsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUdhdXNzaWFuQmx1cihm
bG9hdCB4LCBmbG9hdCB5LCBFZGdlTW9kZVR5cGUpOwogCi0gICAgc3RhdGljIGNvbnN0IGludCBz
X21pbmltYWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1p
dCBmb3IgcGFyYWxsZWwgam9icwotCi0gICAgc3RydWN0IFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJz
IHsKLSAgICAgICAgRkVHYXVzc2lhbkJsdXIqIGZpbHRlcjsKLSAgICAgICAgUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBpb1BpeGVsQXJyYXk7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gdG1wUGl4ZWxBcnJheTsKLSAgICAgICAgaW50IHdpZHRoOwotICAgICAgICBpbnQgaGVp
Z2h0OwotICAgICAgICB1bnNpZ25lZCBrZXJuZWxTaXplWDsKLSAgICAgICAgdW5zaWduZWQga2Vy
bmVsU2l6ZVk7Ci0gICAgfTsKLQogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
Y29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAKLSAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsKLQogICAgIEludE91dHNldHMgb3V0c2V0cygpIGNv
bnN0IG92ZXJyaWRlOwogCi0gICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0
aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7
CiAKLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJh
bWV0ZXJzKik7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5KFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1
ZmZlciwgVWludDhDbGFtcGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVY
LCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKLSAgICB2b2lkIHBs
YXRmb3JtQXBwbHlHZW5lcmljKFVpbnQ4Q2xhbXBlZEFycmF5JiBpb0J1ZmZlciwgVWludDhDbGFt
cGVkQXJyYXkmIHRlbXBCdWZmZXIsIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJu
ZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKKyAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIGZsb2F0IG1fc3RkWDsKICAgICBmbG9hdCBtX3N0ZFk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmNwcAppbmRleCAzYTc4ZTA4ZTQ0MWQxMGEyZTkzNjE3MmIyMmQ3MDYyN2FlMDc3NGMw
Li4xYWRjMGYzNzNhNDYwZGZiZDJhY2JmYjkwMjA4NTNkYWNjYjQ1NjNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHAKQEAgLTMwLDE2ICszMCwxNSBAQAogCiAjaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9uLmgiCiAj
aW5jbHVkZSAiRkVMaWdodGluZ05FT04uaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVy
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgog
I2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
RUxpZ2h0aW5nOjpGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENv
bG9yJiBsaWdodGluZ0NvbG9yLCBmbG9hdCBzdXJmYWNlU2NhbGUsIGZsb2F0IGRpZmZ1c2VDb25z
dGFudCwgZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRT
b3VyY2U+JiYgbGlnaHRTb3VyY2UsIFR5cGUgdHlwZSkKK0ZFTGlnaHRpbmc6OkZFTGlnaHRpbmco
VHlwZSB0eXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxl
LCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQsIGZsb2F0IHNw
ZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQogICAgIDogRmlsdGVyRWZm
ZWN0KHR5cGUpCi0gICAgLCBtX2xpZ2h0aW5nVHlwZShsaWdodGluZ1R5cGUpCi0gICAgLCBtX2xp
Z2h0U291cmNlKFdURk1vdmUobGlnaHRTb3VyY2UpKQogICAgICwgbV9saWdodGluZ0NvbG9yKGxp
Z2h0aW5nQ29sb3IpCiAgICAgLCBtX3N1cmZhY2VTY2FsZShzdXJmYWNlU2NhbGUpCiAgICAgLCBt
X2RpZmZ1c2VDb25zdGFudChkaWZmdXNlQ29uc3RhbnQpCkBAIC00Nyw2ICs0Niw3IEBAIEZFTGln
aHRpbmc6OkZFTGlnaHRpbmcoTGlnaHRpbmdUeXBlIGxpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3Im
IGxpZ2h0aW5nQ29sb3IsIGZsCiAgICAgLCBtX3NwZWN1bGFyRXhwb25lbnQoc3BlY3VsYXJFeHBv
bmVudCkKICAgICAsIG1fa2VybmVsVW5pdExlbmd0aFgoa2VybmVsVW5pdExlbmd0aFgpCiAgICAg
LCBtX2tlcm5lbFVuaXRMZW5ndGhZKGtlcm5lbFVuaXRMZW5ndGhZKQorICAgICwgbV9saWdodFNv
dXJjZShXVEZNb3ZlKGxpZ2h0U291cmNlKSkKIHsKIH0KIApAQCAtODYsMTcgKzg2LDEwNSBAQCBi
b29sIEZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRMZW5n
dGhZKQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgY29uc3RleHByIGludCBjUGl4ZWxT
aXplID0gNDsKLXN0YXRpYyBjb25zdGV4cHIgaW50IGNBbHBoYUNoYW5uZWxPZmZzZXQgPSAzOwot
c3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGNPcGFxdWVBbHBoYSA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KDB4RkYpOworLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFTGlnaHRpbmdTb2Z0d2FyZUFw
cGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUxpZ2h0
aW5nU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxG
RUxpZ2h0aW5nPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGll
cjxGRUxpZ2h0aW5nPjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBi
b29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRF
ZmZlY3RzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBj
UGl4ZWxTaXplID0gNDsKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBjQWxwaGFDaGFubmVsT2Zm
c2V0ID0gMzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgY09wYXF1ZUFscGhhID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oMHhGRik7CisKKyAgICAvLyBUaGVzZSBmYWN0b3JzIGFuZCB0aGUg
bm9ybWFsIGNvZWZmaWNpZW50cyBjb21lIGZyb20gdGhlIHRhYmxlIHVuZGVyIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi9TVkcvZmlsdGVycy5odG1sI2ZlRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC4KKyAg
ICBzdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IxZGl2MiA9IC0xIC8gMi5mOworICAgIHN0
YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFkaXYzID0gLTEgLyAzLmY7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBmbG9hdCBjRmFjdG9yMWRpdjQgPSAtMSAvIDQuZjsKKyAgICBzdGF0aWMgY29u
c3RleHByIGZsb2F0IGNGYWN0b3IyZGl2MyA9IC0yIC8gMy5mOworCisgICAgc3RydWN0IEFscGhh
V2luZG93IHsKKyAgICAgICAgdWludDhfdCBhbHBoYVszXVszXSB7IH07CisgICAgCisgICAgICAg
IC8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGxpbmVkIHVwIHRvIG1ha2UgY29tcGFyaW5nIGlu
ZGljZXMgZWFzaWVyLgorICAgICAgICB1aW50OF90IHRvcExlZnQoKSBjb25zdCAgICAgICAgICAg
ICB7IHJldHVybiBhbHBoYVswXVswXTsgfQorICAgICAgICB1aW50OF90IGxlZnQoKSBjb25zdCAg
ICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVswXTsgfQorICAgICAgICB1aW50OF90IGJv
dHRvbUxlZnQoKSBjb25zdCAgICAgICAgICB7IHJldHVybiBhbHBoYVsyXVswXTsgfQorCisgICAg
ICAgIHVpbnQ4X3QgdG9wKCkgY29uc3QgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzBd
WzFdOyB9CisgICAgICAgIHVpbnQ4X3QgY2VudGVyKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0
dXJuIGFscGhhWzFdWzFdOyB9CisgICAgICAgIHVpbnQ4X3QgYm90dG9tKCkgY29uc3QgICAgICAg
ICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzFdOyB9CisKKyAgICAgICAgdm9pZCBzZXRUb3AodWlu
dDhfdCB2YWx1ZSkgICAgICAgICAgeyBhbHBoYVswXVsxXSA9IHZhbHVlOyB9CisgICAgICAgIHZv
aWQgc2V0Q2VudGVyKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxwaGFbMV1bMV0gPSB2YWx1ZTsg
fQorICAgICAgICB2b2lkIHNldEJvdHRvbSh1aW50OF90IHZhbHVlKSAgICAgICB7IGFscGhhWzJd
WzFdID0gdmFsdWU7IH0KKworICAgICAgICB2b2lkIHNldFRvcFJpZ2h0KHVpbnQ4X3QgdmFsdWUp
ICAgICB7IGFscGhhWzBdWzJdID0gdmFsdWU7IH0KKyAgICAgICAgdm9pZCBzZXRSaWdodCh1aW50
OF90IHZhbHVlKSAgICAgICAgeyBhbHBoYVsxXVsyXSA9IHZhbHVlOyB9CisgICAgICAgIHZvaWQg
c2V0Qm90dG9tUmlnaHQodWludDhfdCB2YWx1ZSkgIHsgYWxwaGFbMl1bMl0gPSB2YWx1ZTsgfQor
CisgICAgICAgIHN0YXRpYyB2b2lkIHNoaWZ0Um93KHVpbnQ4X3QgYWxwaGFbM10pCisgICAgICAg
IHsKKyAgICAgICAgICAgIGFscGhhWzBdID0gYWxwaGFbMV07CisgICAgICAgICAgICBhbHBoYVsx
XSA9IGFscGhhWzJdOworICAgICAgICB9CisgICAgCisgICAgICAgIHZvaWQgc2hpZnQoKQorICAg
ICAgICB7CisgICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVswXSk7CisgICAgICAgICAgICBzaGlm
dFJvdyhhbHBoYVsxXSk7CisgICAgICAgICAgICBzaGlmdFJvdyhhbHBoYVsyXSk7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgc3RydWN0IExpZ2h0aW5nRGF0YSB7CisgICAgICAgIC8vIFRoaXMg
c3RydWN0dXJlIGNvbnRhaW5zIG9ubHkgcmVhZC1vbmx5IChTTVAgc2FmZSkgZGF0YQorICAgICAg
ICBGRUxpZ2h0aW5nKiBlZmZlY3Q7CisgICAgICAgIEZpbHRlckVmZmVjdDo6VHlwZSBmaWx0ZXJU
eXBlOworICAgICAgICBDb2xvciBsaWdodGluZ0NvbG9yOworICAgICAgICBmbG9hdCBzdXJmYWNl
U2NhbGU7CisgICAgICAgIGZsb2F0IGRpZmZ1c2VDb25zdGFudDsKKyAgICAgICAgZmxvYXQgc3Bl
Y3VsYXJDb25zdGFudDsKKyAgICAgICAgZmxvYXQgc3BlY3VsYXJFeHBvbmVudDsKKyAgICAgICAg
Y29uc3QgTGlnaHRTb3VyY2UqIGxpZ2h0U291cmNlOworICAgICAgICBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UqIG9wZXJhdGluZ0NvbG9yU3BhY2U7CisKKyAgICAgICAgVWludDhDbGFtcGVk
QXJyYXkqIHBpeGVsczsKKyAgICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwor
ICAgICAgICBpbnQgd2lkdGg7CisgICAgICAgIGludCBoZWlnaHQ7CisKKyAgICAgICAgaW5saW5l
IEludFNpemUgdG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAgICAgaW5saW5l
IEludFNpemUgdG9wUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0OworICAgICAgICBpbmxpbmUg
SW50U2l6ZSB0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAgICAgaW5saW5l
IEludFNpemUgbGVmdENvbHVtbk5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICAgICAgaW5s
aW5lIEludFNpemUgaW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmKSBjb25z
dDsKKyAgICAgICAgaW5saW5lIEludFNpemUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkg
Y29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNl
dCkgY29uc3Q7CisgICAgICAgIGlubGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1hbChpbnQgb2Zm
c2V0KSBjb25zdDsKKyAgICAgICAgaW5saW5lIEludFNpemUgYm90dG9tUmlnaHROb3JtYWwoaW50
IG9mZnNldCkgY29uc3Q7CisgICAgfTsKKworICAgIHN0cnVjdCBBcHBseVBhcmFtZXRlcnMgewor
ICAgICAgICBMaWdodGluZ0RhdGEgZGF0YTsKKyAgICAgICAgTGlnaHRTb3VyY2U6OlBhaW50aW5n
RGF0YSBwYWludGluZ0RhdGE7CisgICAgICAgIGludCB5U3RhcnQ7CisgICAgICAgIGludCB5RW5k
OworICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQs
IGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLCBp
bnQgeCwgaW50IHksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFNpemUgbm9ybWFs
MkRWZWN0b3IsIGZsb2F0IGFscGhhKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRQaXhlbChpbnQgb2Zm
c2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRh
JiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5v
cm1hbDJEVmVjdG9yKTsKIAotLy8gVGhlc2UgZmFjdG9ycyBhbmQgdGhlIG5vcm1hbCBjb2VmZmlj
aWVudHMgY29tZSBmcm9tIHRoZSB0YWJsZSB1bmRlciBodHRwczovL3d3dy53My5vcmcvVFIvU1ZH
L2ZpbHRlcnMuaHRtbCNmZURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuCi1zdGF0aWMgY29uc3RleHBy
IGZsb2F0IGNGYWN0b3IxZGl2MiA9IC0xIC8gMi5mOwotc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBj
RmFjdG9yMWRpdjMgPSAtMSAvIDMuZjsKLXN0YXRpYyBjb25zdGV4cHIgZmxvYXQgY0ZhY3RvcjFk
aXY0ID0gLTEgLyA0LmY7Ci1zdGF0aWMgY29uc3RleHByIGZsb2F0IGNGYWN0b3IyZGl2MyA9IC0y
IC8gMy5mOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1HZW5lcmljUGFpbnQoY29uc3Qg
TGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCBzdGFy
dFksIGludCBlbmRZKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJpY1dvcmtl
cihBcHBseVBhcmFtZXRlcnMqKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtR2VuZXJp
Yyhjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJik7
CisgICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybShjb25zdCBMaWdodGluZ0RhdGEmKTsKK307
CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wTGVmdE5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdAoraW5saW5lIEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBw
bGllcjo6TGlnaHRpbmdEYXRhOjp0b3BMZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAg
ICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKICAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+aXRlbShvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwpA
QCAtMTA5LDcgKzE5Nyw3IEBAIGlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0
YTo6dG9wTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAKLWlubGluZSBJ
bnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9ybWFsKGludCBvZmZzZXQp
IGNvbnN0CitpbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGlu
Z0RhdGE6OnRvcFJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogewogICAgIGludCBsZWZ0ID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwpAQCAtMTI0LDcgKzIxMiw3
IEBAIGlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93Tm9ybWFs
KGludCBvZmZzZXQpIGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoraW5saW5l
IEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjp0b3BSaWdo
dE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAogewogICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zm
c2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwpAQCAtMTM3LDcgKzIyNSw3IEBAIGlubGluZSBJ
bnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHROb3JtYWwoaW50IG9mZnNl
dCkgY29uc3QKICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGlu
Z0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3QKK2lubGluZSBJbnRTaXpl
IEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5nRGF0YTo6bGVmdENvbHVtbk5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdAogewogICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CiAgICAgaW50IHJp
Z2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsgY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKQEAgLTE1Myw3ICsyNDEsNyBAQCBpbmxpbmUgSW50U2l6
ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkg
Y29uc3QKICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5nOjpMaWdodGluZ0Rh
dGE6OmludGVyaW9yTm9ybWFsKGludCBvZmZzZXQsIEFscGhhV2luZG93JiBhbHBoYVdpbmRvdykg
Y29uc3QKK2lubGluZSBJbnRTaXplIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OkxpZ2h0aW5n
RGF0YTo6aW50ZXJpb3JOb3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmIGFscGhhV2luZG93
KSBjb25zdAogewogICAgIGludCByaWdodEFscGhhT2Zmc2V0ID0gb2Zmc2V0ICsgY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQ7CiAgICAgCkBAIC0xODMsNyArMjcxLDcgQEAgaW5saW5l
IEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlvck5vcm1hbChpbnQgb2Zm
c2V0LCBBbHBoYVdpbmRvdyYKICAgICB9OwogfQogCi1pbmxpbmUgSW50U2l6ZSBGRUxpZ2h0aW5n
OjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0Citpbmxp
bmUgSW50U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OnJpZ2h0
Q29sdW1uTm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGxlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOwogICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRl
bShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CkBAIC0xOTksNyArMjg3LDcgQEAgaW5s
aW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpyaWdodENvbHVtbk5vcm1hbChp
bnQgb2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6
OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoraW5saW5l
IEludFNpemUgRkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpib3R0b21M
ZWZ0Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgaW50IGNlbnRlciA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5pdGVtKG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKICAg
ICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+aXRlbShvZmZzZXQgKyBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwpAQCAtMjEyLDcgKzMwMCw3IEBAIGlubGlu
ZSBJbnRTaXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdE5vcm1hbChpbnQg
b2Zmc2V0KSBjb25zdAogICAgIH07CiB9CiAKLWlubGluZSBJbnRTaXplIEZFTGlnaHRpbmc6Okxp
Z2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQpIGNvbnN0CitpbmxpbmUgSW50
U2l6ZSBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJvd05v
cm1hbChpbnQgb2Zmc2V0KSBjb25zdAogewogICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwpAQCAtMjI3LDcgKzMxNSw3IEBAIGlubGluZSBJbnRT
aXplIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93Tm9ybWFsKGludCBvZmZzZXQp
IGNvbnN0CiAgICAgfTsKIH0KIAotaW5saW5lIEludFNpemUgRkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjpib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0KSBjb25zdAoraW5saW5lIEludFNpemUg
RkVMaWdodGluZ1NvZnR3YXJlQXBwbGllcjo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdAogewogICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPml0ZW0ob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
ICAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPml0ZW0ob2Zmc2V0ICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOwpAQCAtMjQwLDIxICszMjgsMTYgQEAgaW5saW5lIEludFNp
emUgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodE5vcm1hbChpbnQgb2Zmc2V0
KSBjb25zdAogICAgIH07CiB9CiAKLXZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWwoaW50IG9mZnNl
dCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFj
dG9yWSwgSW50U2l6ZSBub3JtYWwyRFZlY3RvcikKLXsKLSAgICBzZXRQaXhlbEludGVybmFsKG9m
ZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCB5LCBmYWN0b3JYLCBmYWN0b3JZLCBub3JtYWwy
RFZlY3RvciwgZGF0YS5waXhlbHMtPml0ZW0ob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OwotfQotCi12b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29u
c3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsIGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwg
SW50U2l6ZSBub3JtYWwyRFZlY3RvciwgZmxvYXQgYWxwaGEpCit2b2lkIEZFTGlnaHRpbmdTb2Z0
d2FyZUFwcGxpZXI6OnNldFBpeGVsSW50ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdE
YXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEs
IGludCB4LCBpbnQgeSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3Jt
YWwyRFZlY3RvciwgZmxvYXQgYWxwaGEpCiB7CiAgICAgZmxvYXQgeiA9IGFscGhhICogZGF0YS5z
dXJmYWNlU2NhbGU7Ci0gICAgTGlnaHRTb3VyY2U6OkNvbXB1dGVkTGlnaHRpbmdEYXRhIGxpZ2h0
aW5nRGF0YSA9IG1fbGlnaHRTb3VyY2UtPmNvbXB1dGVQaXhlbExpZ2h0aW5nRGF0YShwYWludGlu
Z0RhdGEsIHgsIHksIHopOworICAgIExpZ2h0U291cmNlOjpDb21wdXRlZExpZ2h0aW5nRGF0YSBs
aWdodGluZ0RhdGEgPSBkYXRhLmxpZ2h0U291cmNlLT5jb21wdXRlUGl4ZWxMaWdodGluZ0RhdGEo
cGFpbnRpbmdEYXRhLCB4LCB5LCB6KTsKIAogICAgIGZsb2F0IGxpZ2h0U3RyZW5ndGg7CiAgICAg
aWYgKG5vcm1hbDJEVmVjdG9yLmlzWmVybygpKSB7CiAgICAgICAgIC8vIE5vcm1hbCB2ZWN0b3Ig
aXMgKDAsIDAsIDEpLiBUaGlzIGlzIGEgcXVpdGUgZnJlcXVlbnQgY2FzZS4KLSAgICAgICAgaWYg
KG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKLSAgICAgICAg
ICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIGxpZ2h0aW5nRGF0YS5saWdo
dFZlY3Rvci56KCkgLyBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGg7CisgICAgICAgIGlm
IChkYXRhLmVmZmVjdC0+ZmlsdGVyVHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZm
dXNlTGlnaHRpbmcpCisgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5kaWZmdXNlQ29u
c3RhbnQgKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueigpIC8gbGlnaHRpbmdEYXRhLmxpZ2h0
VmVjdG9yTGVuZ3RoOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBo
YWxmd2F5VmVjdG9yID0gewogICAgICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rv
ci54KCksCkBAIC0yNjIsMTAgKzM0NSwxMCBAQCB2b2lkIEZFTGlnaHRpbmc6OnNldFBpeGVsSW50
ZXJuYWwoaW50IG9mZnNldCwgY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaQogICAg
ICAgICAgICAgICAgIGxpZ2h0aW5nRGF0YS5saWdodFZlY3Rvci56KCkgKyBsaWdodGluZ0RhdGEu
bGlnaHRWZWN0b3JMZW5ndGgKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICBmbG9hdCBoYWxm
d2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlm
IChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMSkKLSAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3Ro
ID0gbV9zcGVjdWxhckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9y
TGVuZ3RoOworICAgICAgICAgICAgaWYgKGRhdGEuc3BlY3VsYXJFeHBvbmVudCA9PSAxKQorICAg
ICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29uc3RhbnQgKiBoYWxm
d2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGg7CiAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIHBvd2Yo
aGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVuZ3RoLCBtX3NwZWN1bGFyRXhwb25l
bnQpOworICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBkYXRhLnNwZWN1bGFyQ29uc3Rh
bnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0aCwgZGF0YS5z
cGVjdWxhckV4cG9uZW50KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIEZsb2F0
UG9pbnQzRCBub3JtYWxWZWN0b3IgPSB7CkBAIC0yNzUsOCArMzU4LDggQEAgdm9pZCBGRUxpZ2h0
aW5nOjpzZXRQaXhlbEludGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0
YSwgY29uc3QgTGkKICAgICAgICAgfTsKICAgICAgICAgZmxvYXQgbm9ybWFsVmVjdG9yTGVuZ3Ro
ID0gbm9ybWFsVmVjdG9yLmxlbmd0aCgpOwogCi0gICAgICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9
PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCi0gICAgICAgICAgICBsaWdodFN0cmVuZ3Ro
ID0gbV9kaWZmdXNlQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogbGlnaHRpbmdEYXRhLmxpZ2h0
VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3JM
ZW5ndGgpOworICAgICAgICBpZiAoZGF0YS5lZmZlY3QtPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJF
ZmZlY3Q6OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQorICAgICAgICAgICAgbGlnaHRTdHJlbmd0
aCA9IGRhdGEuZGlmZnVzZUNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGxpZ2h0aW5nRGF0YS5s
aWdodFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogbGlnaHRpbmdEYXRhLmxpZ2h0VmVj
dG9yTGVuZ3RoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBGbG9hdFBvaW50M0QgaGFs
ZndheVZlY3RvciA9IHsKICAgICAgICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3Iu
eCgpLApAQCAtMjg0LDEwICszNjcsMTAgQEAgdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbEludGVy
bmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGkKICAgICAg
ICAgICAgICAgICBsaWdodGluZ0RhdGEubGlnaHRWZWN0b3IueigpICsgbGlnaHRpbmdEYXRhLmxp
Z2h0VmVjdG9yTGVuZ3RoCiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgZmxvYXQgaGFsZndh
eVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0b3IubGVuZ3RoKCk7Ci0gICAgICAgICAgICBpZiAo
bV9zcGVjdWxhckV4cG9uZW50ID09IDEpCi0gICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9
IG1fc3BlY3VsYXJDb25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yKSAvIChu
b3JtYWxWZWN0b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgIGlm
IChkYXRhLnNwZWN1bGFyRXhwb25lbnQgPT0gMSkKKyAgICAgICAgICAgICAgICBsaWdodFN0cmVu
Z3RoID0gZGF0YS5zcGVjdWxhckNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0
b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29u
c3RhbnQgKiBwb3dmKChub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0
b3JMZW5ndGggKiBoYWxmd2F5VmVjdG9yTGVuZ3RoKSwgbV9zcGVjdWxhckV4cG9uZW50KTsKKyAg
ICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gZGF0YS5zcGVjdWxhckNvbnN0YW50ICogcG93
Zigobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICog
aGFsZndheVZlY3Rvckxlbmd0aCksIGRhdGEuc3BlY3VsYXJFeHBvbmVudCk7CiAgICAgICAgIH0K
ICAgICB9CiAKQEAgLTMwNSw4ICszODgsMTMgQEAgdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbElu
dGVybmFsKGludCBvZmZzZXQsIGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGkKICAg
ICBkYXRhLnBpeGVscy0+c2V0UmFuZ2UocGl4ZWxWYWx1ZSwgMywgb2Zmc2V0KTsKIH0KIAordm9p
ZCBGRUxpZ2h0aW5nU29mdHdhcmVBcHBsaWVyOjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBjb25zdCBM
aWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRT
aXplIG5vcm1hbDJEVmVjdG9yKQoreworICAgIHNldFBpeGVsSW50ZXJuYWwob2Zmc2V0LCBkYXRh
LCBwYWludGluZ0RhdGEsIHgsIHksIGZhY3RvclgsIGZhY3RvclksIG5vcm1hbDJEVmVjdG9yLCBk
YXRhLnBpeGVscy0+aXRlbShvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cit9CisKIC8v
IFRoaXMgYXBwZWFycyB0byByZWFkIGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzYW1lIHBpeGVsIGJ1
ZmZlciwgYnV0IGl0IG9ubHkgcmVhZHMgdGhlIGFscGhhIGNoYW5uZWwsIGFuZCB3cml0ZXMgdGhl
IG5vbi1hbHBoYSBjaGFubmVscy4KLXZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVy
aWNQYWludChjb25zdCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWlu
dGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCit2b2lkIEZFTGln
aHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljUGFpbnQoY29uc3QgTGln
aHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEsIGludCBzdGFydFksIGludCBlbmRZKQogewogICAgIC8vIE1ha2Ugc3VyZSBzdGFydFkg
aXMgPiAwIHNpbmNlIHdlIHJlYWQgZnJvbSB0aGUgcHJldmlvdXMgcm93IGluIHRoZSBsb29wLgog
ICAgIEFTU0VSVChzdGFydFkpOwpAQCAtMzMxLDI2ICs0MTksMzAgQEAgdm9pZCBGRUxpZ2h0aW5n
OjpwbGF0Zm9ybUFwcGx5R2VuZXJpY1BhaW50KGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29u
c3QgTGlnaHQKICAgICAgICAgYWxwaGFXaW5kb3cuc2V0Qm90dG9tUmlnaHQoZGF0YS5waXhlbHMt
Pml0ZW0obmV4dFJvd1N0YXJ0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
IAogICAgICAgICBpbnQgb2Zmc2V0ID0gcm93U3RhcnRPZmZzZXQgKyBjUGl4ZWxTaXplOwotICAg
ICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBv
ZmZzZXQgKz0gY1BpeGVsU2l6ZSkgeworICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEu
d2lkdGggLSAxOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKSB7CiAgICAgICAgICAgICBhbHBo
YVdpbmRvdy5zaGlmdCgpOwogICAgICAgICAgICAgc2V0UGl4ZWxJbnRlcm5hbChvZmZzZXQsIGRh
dGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgY0ZhY3RvcjFkaXY0LCBjRmFjdG9yMWRpdjQsIGRhdGEu
aW50ZXJpb3JOb3JtYWwob2Zmc2V0LCBhbHBoYVdpbmRvdyksIGFscGhhV2luZG93LmNlbnRlcigp
KTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5
R2VuZXJpY1dvcmtlcihQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMp
Cit2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5UGxhdGZvcm1HZW5lcmljV29y
a2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKIHsKLSAgICBwYXJhbWV0ZXJzLT5maWx0
ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQocGFyYW1ldGVycy0+ZGF0YSwgcGFyYW1ldGVy
cy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT55U3RhcnQsIHBhcmFtZXRlcnMtPnlFbmQpOwor
ICAgIGFwcGx5UGxhdGZvcm1HZW5lcmljUGFpbnQocGFyYW1ldGVycy0+ZGF0YSwgcGFyYW1ldGVy
cy0+cGFpbnRpbmdEYXRhLCBwYXJhbWV0ZXJzLT55U3RhcnQsIHBhcmFtZXRlcnMtPnlFbmQpOwog
fQogCi12b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IExpZ2h0aW5n
RGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRh
KQorI2lmICEoQ1BVKEFSTV9ORU9OKSAmJiBDUFUoQVJNX1RSQURJVElPTkFMKSAmJiBDT01QSUxF
UihHQ0NfQ09NUEFUSUJMRSkpCit2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
UGxhdGZvcm1HZW5lcmljKGNvbnN0IExpZ2h0aW5nRGF0YSYgZGF0YSwgY29uc3QgTGlnaHRTb3Vy
Y2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogewotICAgIHVuc2lnbmVkIHJvd3NUb1By
b2Nlc3MgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lIC0gMTsKKyAgICB1bnNpZ25lZCByb3dz
VG9Qcm9jZXNzID0gZGF0YS5oZWlnaHQgLSAyOwogICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMg
PSByb3dzVG9Qcm9jZXNzIC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0g
c3RkOjptaW48dW5zaWduZWQ+KCgoZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lIC0gMSkgKiByb3dz
VG9Qcm9jZXNzKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb24sIG1heE51bVRocmVhZHMpOworICAg
IAorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG1pbmltYWxSZWN0RGltZW5zaW9uID0gMTAwICog
MTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9icworICAgIHVuc2ln
bmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBzdGQ6Om1pbjx1bnNpZ25lZD4oKChkYXRhLndpZHRo
IC0gMikgKiByb3dzVG9Qcm9jZXNzKSAvIG1pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJl
YWRzKTsKKwogICAgIGlmIChvcHRpbWFsVGhyZWFkTnVtYmVyID4gMSkgewogICAgICAgICAvLyBJ
bml0aWFsaXplIHBhcmFsbGVsIGpvYnMKLSAgICAgICAgUGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBw
bHlHZW5lcmljUGFyYW1ldGVycz4gcGFyYWxsZWxKb2JzKCZwbGF0Zm9ybUFwcGx5R2VuZXJpY1dv
cmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAgIFBhcmFsbGVsSm9iczxBcHBseVBh
cmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYXBwbHlQbGF0Zm9ybUdlbmVyaWNXb3JrZXIsIG9wdGlt
YWxUaHJlYWROdW1iZXIpOwogCiAgICAgICAgIC8vIEZpbGwgdGhlIHBhcmFtZXRlciBhcnJheQog
ICAgICAgICBpbnQgam9iID0gcGFyYWxsZWxKb2JzLm51bWJlck9mSm9icygpOwpAQCAtMzYyLDgg
KzQ1NCw3IEBAIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGln
aHRpbmdEYXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjCiAKICAgICAgICAgICAgIGludCB5U3Rh
cnQgPSAxOwogICAgICAgICAgICAgZm9yICgtLWpvYjsgam9iID49IDA7IC0tam9iKSB7Ci0gICAg
ICAgICAgICAgICAgUGxhdGZvcm1BcHBseUdlbmVyaWNQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJh
bGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9
IHRoaXM7CisgICAgICAgICAgICAgICAgQXBwbHlQYXJhbWV0ZXJzJiBwYXJhbXMgPSBwYXJhbGxl
bEpvYnMucGFyYW1ldGVyKGpvYik7CiAgICAgICAgICAgICAgICAgcGFyYW1zLmRhdGEgPSBkYXRh
OwogICAgICAgICAgICAgICAgIHBhcmFtcy5wYWludGluZ0RhdGEgPSBwYWludGluZ0RhdGE7CiAg
ICAgICAgICAgICAgICAgcGFyYW1zLnlTdGFydCA9IHlTdGFydDsKQEAgLTM3NiwzOSArNDY3LDE4
IEBAIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMoY29uc3QgTGlnaHRpbmdE
YXRhJiBkYXRhLCBjb25zdCBMaWdodFNvdXJjCiAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNpbmds
ZSB0aHJlYWRlZCBtb2RlLgogICAgIH0KIAotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQo
ZGF0YSwgcGFpbnRpbmdEYXRhLCAxLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lKTsKKyAgICBh
cHBseVBsYXRmb3JtR2VuZXJpY1BhaW50KGRhdGEsIHBhaW50aW5nRGF0YSwgMSwgZGF0YS5oZWln
aHQgLSAxKTsKIH0KLQotaW5saW5lIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseShjb25z
dCBMaWdodGluZ0RhdGEmIGRhdGEsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSkKLXsKLSAgICAvLyBUaGUgc2VsZWN0aW9uIGhlcmUgZXZlbnR1YWxseSBzaG91
bGQgaGFwcGVuIGR5bmFtaWNhbGx5IG9uIHNvbWUgcGxhdGZvcm1zLgotI2lmIENQVShBUk1fTkVP
TikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIoR0NDX0NPTVBBVElCTEUpCi0g
ICAgcGxhdGZvcm1BcHBseU5lb24oZGF0YSwgcGFpbnRpbmdEYXRhKTsKLSNlbHNlCi0gICAgcGxh
dGZvcm1BcHBseUdlbmVyaWMoZGF0YSwgcGFpbnRpbmdEYXRhKTsKICNlbmRpZgotfQogCi1ib29s
IEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQg
d2lkdGgsIGludCBoZWlnaHQpCit2b2lkIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5
UGxhdGZvcm0oY29uc3QgTGlnaHRpbmdEYXRhJiBkYXRhKQogewogICAgIExpZ2h0U291cmNlOjpQ
YWludGluZ0RhdGEgcGFpbnRpbmdEYXRhOwotICAgIExpZ2h0aW5nRGF0YSBkYXRhOwotCi0gICAg
Ly8gRklYTUU6IGRvIHNvbWV0aGluZyBpZiB3aWR0aCBvciBoZWlnaHQgKG9yIGJvdGgpIGlzIDEg
cGl4ZWwuCi0gICAgLy8gVGhlIFczIHNwZWMgZG9lcyBub3QgZGVmaW5lIHRoaXMgY2FzZS4gTm93
IHRoZSBmaWx0ZXIganVzdCByZXR1cm5zLgotICAgIGlmICh3aWR0aCA8PSAyIHx8IGhlaWdodCA8
PSAyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBkYXRhLnBpeGVscyA9ICZwaXhlbHM7
Ci0gICAgZGF0YS5zdXJmYWNlU2NhbGUgPSBtX3N1cmZhY2VTY2FsZSAvIDI1NS4wZjsKLSAgICBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplID0gd2lkdGggKiBjUGl4ZWxTaXplOwotICAg
IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA9IHdpZHRoIC0gMTsKLSAgICBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0gMTsKIAotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gbV9s
aWdodGluZ0NvbG9yLnRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKG9wZXJhdGluZ0NvbG9y
U3BhY2UoKSk7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBkYXRhLmxpZ2h0aW5nQ29sb3IudG9D
b2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoKmRhdGEub3BlcmF0aW5nQ29sb3JTcGFjZSk7CiAg
ICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBv
aW50M0QociwgZywgYik7CiAKLSAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKCp0
aGlzLCBwYWludGluZ0RhdGEpOworICAgIGRhdGEubGlnaHRTb3VyY2UtPmluaXRQYWludGluZ0Rh
dGEoKmRhdGEuZWZmZWN0LCBwYWludGluZ0RhdGEpOwogCiAgICAgLy8gVG9wIGxlZnQuCiAgICAg
aW50IG9mZnNldCA9IDA7CkBAIC00MTYsNDcgKzQ4Niw0NyBAQCBib29sIEZFTGlnaHRpbmc6OmRy
YXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWln
aHQpCiAKICAgICAvLyBUb3AgcmlnaHQuCiAgICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBw
YWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgMCwgY0ZhY3RvcjJkaXYzLCBj
RmFjdG9yMmRpdjMsIGRhdGEudG9wUmlnaHROb3JtYWwob2Zmc2V0KSk7CisgICAgc2V0UGl4ZWwo
b2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGggLSAxLCAwLCBjRmFjdG9yMmRp
djMsIGNGYWN0b3IyZGl2MywgZGF0YS50b3BSaWdodE5vcm1hbChvZmZzZXQpKTsKIAogICAgIC8v
IEJvdHRvbSBsZWZ0LgotICAgIG9mZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIHNldFBpeGVsKG9mZnNldCwgZGF0
YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMmRp
djMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21MZWZ0Tm9ybWFsKG9mZnNldCkpOworICAgIG9m
ZnNldCA9IChkYXRhLmhlaWdodCAtIDEpICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZTsKKyAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgZGF0YS5oZWln
aHQgLSAxLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2MywgZGF0YS5ib3R0b21MZWZ0Tm9ybWFs
KG9mZnNldCkpOwogCiAgICAgLy8gQm90dG9tIHJpZ2h0LgotICAgIG9mZnNldCA9IGhlaWdodCAq
IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAgIHNldFBp
eGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUs
IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBk
YXRhLmJvdHRvbVJpZ2h0Tm9ybWFsKG9mZnNldCkpOworICAgIG9mZnNldCA9IGRhdGEuaGVpZ2h0
ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7CisgICAgc2V0
UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGggLSAxLCBkYXRhLmhl
aWdodCAtIDEsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBkYXRhLmJvdHRvbVJpZ2h0Tm9y
bWFsKG9mZnNldCkpOwogCi0gICAgaWYgKHdpZHRoID49IDMpIHsKKyAgICBpZiAoZGF0YS53aWR0
aCA+PSAzKSB7CiAgICAgICAgIC8vIFRvcCByb3cuCiAgICAgICAgIG9mZnNldCA9IGNQaXhlbFNp
emU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25l
OyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQorICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8
IGRhdGEud2lkdGggLSAxOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKQogICAgICAgICAgICAg
c2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIDAsIGNGYWN0b3IxZGl2Mywg
Y0ZhY3RvcjFkaXYyLCBkYXRhLnRvcFJvd05vcm1hbChvZmZzZXQpKTsKIAogICAgICAgICAvLyBC
b3R0b20gcm93LgotICAgICAgICBvZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICog
ZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZv
ciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCAr
PSBjUGl4ZWxTaXplKQotICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGlu
Z0RhdGEsIHgsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IxZGl2MywgY0ZhY3Rv
cjFkaXYyLCBkYXRhLmJvdHRvbVJvd05vcm1hbChvZmZzZXQpKTsKKyAgICAgICAgb2Zmc2V0ID0g
KGRhdGEuaGVpZ2h0IC0gMSkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1Bp
eGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoIC0gMTsgKyt4
LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkKKyAgICAgICAgICAgIHNldFBpeGVsKG9mZnNldCwgZGF0
YSwgcGFpbnRpbmdEYXRhLCB4LCBkYXRhLmhlaWdodCAtIDEsIGNGYWN0b3IxZGl2MywgY0ZhY3Rv
cjFkaXYyLCBkYXRhLmJvdHRvbVJvd05vcm1hbChvZmZzZXQpKTsKICAgICB9CiAKLSAgICBpZiAo
aGVpZ2h0ID49IDMpIHsKKyAgICBpZiAoZGF0YS5oZWlnaHQgPj0gMykgewogICAgICAgICAvLyBM
ZWZ0IGNvbHVtbi4KICAgICAgICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5
T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKQorICAg
ICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0IC0gMTsgKyt5LCBvZmZzZXQgKz0g
ZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkKICAgICAgICAgICAgIHNldFBpeGVsKG9m
ZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2
MywgZGF0YS5sZWZ0Q29sdW1uTm9ybWFsKG9mZnNldCkpOwogCiAgICAgICAgIC8vIFJpZ2h0IGNv
bHVtbi4KICAgICAgICAgb2Zmc2V0ID0gMiAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emUgLSBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0
RGVjcmVhc2VkQnlPbmU7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemUpCi0gICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwg
ZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2Mywg
ZGF0YS5yaWdodENvbHVtbk5vcm1hbChvZmZzZXQpKTsKKyAgICAgICAgZm9yIChpbnQgeSA9IDE7
IHkgPCBkYXRhLmhlaWdodCAtIDE7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemUpCisgICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5n
RGF0YSwgZGF0YS53aWR0aCAtIDEsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBkYXRh
LnJpZ2h0Q29sdW1uTm9ybWFsKG9mZnNldCkpOwogICAgIH0KIAotICAgIGlmICh3aWR0aCA+PSAz
ICYmIGhlaWdodCA+PSAzKSB7CisgICAgaWYgKGRhdGEud2lkdGggPj0gMyAmJiBkYXRhLmhlaWdo
dCA+PSAzKSB7CiAgICAgICAgIC8vIEludGVyaW9yIHBpeGVscy4KLSAgICAgICAgcGxhdGZvcm1B
cHBseShkYXRhLCBwYWludGluZ0RhdGEpOworICAgICAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhk
YXRhLCBwYWludGluZ0RhdGEpOwogICAgIH0KIAotICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICogaGVpZ2h0OwotICAgIGlmIChtX2xpZ2h0aW5nVHlw
ZSA9PSBEaWZmdXNlTGlnaHRpbmcpIHsKKyAgICBpbnQgbGFzdFBpeGVsID0gZGF0YS53aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGRhdGEuaGVpZ2h0OworICAgIGlmIChkYXRhLmVmZmVjdC0+
ZmlsdGVyVHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcpIHsK
ICAgICAgICAgZm9yIChpbnQgaSA9IGNBbHBoYUNoYW5uZWxPZmZzZXQ7IGkgPCBsYXN0UGl4ZWw7
IGkgKz0gY1BpeGVsU2l6ZSkKICAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5zZXQoaSwgY09wYXF1
ZUFscGhhKTsKICAgICB9IGVsc2UgewpAQCAtNDY4LDIxICs1MzgsMjEgQEAgYm9vbCBGRUxpZ2h0
aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVkQXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQogICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpICsgMywgYTEgPj0gYTIg
PyAoYTEgPj0gYTMgPyBhMSA6IGEzKSA6IChhMiA+PSBhMyA/IGEyIDogYTMpKTsKICAgICAgICAg
fQogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZFTGlnaHRpbmc6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKQorYm9vbCBGRUxpZ2h0aW5nU29mdHdhcmVB
cHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlu
cHV0RWZmZWN0cykKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Cisg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQoKTsKIAotICAgIGF1dG8g
ZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1ZmZlcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgc2V0SXNBbHBoYUltYWdlKGZhbHNlKTsKKyAgICBhdXRvJiBk
ZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVsQnVmZmVyLT5kYXRhKCk7CisK
KyAgICBtX2VmZmVjdC5zZXRJc0FscGhhSW1hZ2UoZmFsc2UpOwogCi0gICAgSW50UmVjdCBlZmZl
Y3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7CisgICAgYXV0byBlZmZlY3REcmF3aW5nUmVjdCA9IG1fZWZmZWN0
LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSk7CiAgICAgaW4tPmNvcHlQaXhlbEJ1ZmZlclJlc3VsdCgqZGVzdGluYXRpb25QaXhlbEJ1ZmZl
ciwgZWZmZWN0RHJhd2luZ1JlY3QpOwogCiAgICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5p
dExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMK
QEAgLTQ5MCwxMSArNTYwLDM2IEBAIGJvb2wgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKGNvbnN0IEZpbHRlciYpCiAgICAgLy8gb3V0cHV0IGZvciB2YXJpb3VzIGtlcm5lbFVuaXRM
ZW5ndGhzLCBhbmQgSSBhbSBub3Qgc3VyZSB0aGV5IGFyZSByZWxpYWJsZS4KICAgICAvLyBBbnl3
YXksIGZlQ29udm9sdmVNYXRyaXggc2hvdWxkIGFsc28gdXNlIHRoZSBpbXBsZW1lbnRhdGlvbgog
Ci0gICAgSW50U2l6ZSBhYnNvbHV0ZVBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6
ZSgpOwotICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXItPmRhdGEoKTsKKyAgICBJbnRTaXplIHNpemUgPSBJbnRTaXplKG1fZWZmZWN0LmFic29s
dXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKKworICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgaWYg
d2lkdGggb3IgaGVpZ2h0IChvciBib3RoKSBpcyAxIHBpeGVsLgorICAgIC8vIFRoZSBXMyBzcGVj
IGRvZXMgbm90IGRlZmluZSB0aGlzIGNhc2UuIE5vdyB0aGUgZmlsdGVyIGp1c3QgcmV0dXJucy4K
KyAgICBpZiAoc2l6ZS53aWR0aCgpIDw9IDIgfHwgc2l6ZS5oZWlnaHQoKSA8PSAyKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIGRyYXdMaWdodGluZyhkZXN0aW5hdGlvblBpeGVsQXJyYXks
IGFic29sdXRlUGFpbnRTaXplLndpZHRoKCksIGFic29sdXRlUGFpbnRTaXplLmhlaWdodCgpKTsK
KyAgICBMaWdodGluZ0RhdGEgZGF0YTsKKyAgICBkYXRhLmVmZmVjdCA9ICZtX2VmZmVjdDsKKyAg
ICBkYXRhLmZpbHRlclR5cGUgPSBtX2VmZmVjdC5maWx0ZXJUeXBlKCk7CisgICAgZGF0YS5saWdo
dGluZ0NvbG9yID0gbV9lZmZlY3QubGlnaHRpbmdDb2xvcigpOworICAgIGRhdGEuc3VyZmFjZVNj
YWxlID0gbV9lZmZlY3Quc3VyZmFjZVNjYWxlKCkgLyAyNTUuMGY7CisgICAgZGF0YS5kaWZmdXNl
Q29uc3RhbnQgPSBtX2VmZmVjdC5kaWZmdXNlQ29uc3RhbnQoKTsKKyAgICBkYXRhLnNwZWN1bGFy
Q29uc3RhbnQgPSBtX2VmZmVjdC5zcGVjdWxhckNvbnN0YW50KCk7CisgICAgZGF0YS5zcGVjdWxh
ckV4cG9uZW50ID0gbV9lZmZlY3Quc3BlY3VsYXJFeHBvbmVudCgpOworICAgIGRhdGEubGlnaHRT
b3VyY2UgPSAmbV9lZmZlY3QubGlnaHRTb3VyY2UoKTsKKyAgICBkYXRhLm9wZXJhdGluZ0NvbG9y
U3BhY2UgPSAmbV9lZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpOworCisgICAgZGF0YS5waXhl
bHMgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OworICAgIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemUgPSBzaXplLndpZHRoKCkgKiBjUGl4ZWxTaXplOworICAgIGRhdGEud2lkdGggPSBz
aXplLndpZHRoKCk7CisgICAgZGF0YS5oZWlnaHQgPSBzaXplLmhlaWdodCgpOworCisgICAgYXBw
bHlQbGF0Zm9ybShkYXRhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRUxpZ2h0aW5n
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0
dXJuIEZFTGlnaHRpbmdTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRF
ZmZlY3RzKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCmluZGV4IGFk
MmZjMjhmYTllN2Y0YmYyOTEzZDY3Yjk4MDU3ZjhlZWJiMDhkYjIuLmE4NGZlODVhMzgxZmE4NDA3
NWU1MTY1NGNjMmMwYzViYjhjMWFiMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCkBAIC0yOSw5ICsyOSw2IEBACiAj
aW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJM
aWdodFNvdXJjZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZvcndhcmQuaD4KLQotLy8g
Q29tbW9uIGJhc2UgY2xhc3MgZm9yIEZFRGlmZnVzZUxpZ2h0aW5nIGFuZCBGRVNwZWN1bGFyTGln
aHRpbmcKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOSwxMSArMzYsMTUgQEAgc3RydWN0
IEZFTGlnaHRpbmdQYWludGluZ0RhdGFGb3JOZW9uOwogCiBjbGFzcyBGRUxpZ2h0aW5nIDogcHVi
bGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6CisgICAgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29s
b3IoKSBjb25zdCB7IHJldHVybiBtX2xpZ2h0aW5nQ29sb3I7IH0KKyAgICBib29sIHNldExpZ2h0
aW5nQ29sb3IoY29uc3QgQ29sb3ImKTsKKwogICAgIGZsb2F0IHN1cmZhY2VTY2FsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3VyZmFjZVNjYWxlOyB9CiAgICAgYm9vbCBzZXRTdXJmYWNlU2NhbGUoZmxv
YXQpOwogCi0gICAgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IoKSBjb25zdCB7IHJldHVybiBt
X2xpZ2h0aW5nQ29sb3I7IH0KLSAgICBib29sIHNldExpZ2h0aW5nQ29sb3IoY29uc3QgQ29sb3Im
KTsKKyAgICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX2RpZmZ1c2VD
b25zdGFudDsgfQorICAgIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBt
X3NwZWN1bGFyQ29uc3RhbnQ7IH0KKyAgICBmbG9hdCBzcGVjdWxhckV4cG9uZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9zcGVjdWxhckV4cG9uZW50OyB9CiAKICAgICBmbG9hdCBrZXJuZWxVbml0TGVu
Z3RoWCgpIGNvbnN0IHsgcmV0dXJuIG1fa2VybmVsVW5pdExlbmd0aFg7IH0KICAgICBib29sIHNl
dEtlcm5lbFVuaXRMZW5ndGhYKGZsb2F0KTsKQEAgLTU0LDEwMSArNTUsMTcgQEAgcHVibGljOgog
ICAgIGNvbnN0IExpZ2h0U291cmNlJiBsaWdodFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGln
aHRTb3VyY2UuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCBpbnQgc19t
aW5pbWFsUmVjdERpbWVuc2lvbiA9IDEwMCAqIDEwMDsgLy8gRW1waXJpY2FsIGRhdGEgbGltaXQg
Zm9yIHBhcmFsbGVsIGpvYnMKLQotICAgIGVudW0gTGlnaHRpbmdUeXBlIHsKLSAgICAgICAgRGlm
ZnVzZUxpZ2h0aW5nLAotICAgICAgICBTcGVjdWxhckxpZ2h0aW5nCi0gICAgfTsKLSAgICAKLSAg
ICBzdHJ1Y3QgQWxwaGFXaW5kb3cgewotICAgICAgICB1aW50OF90IGFscGhhWzNdWzNdIHsgfTsK
LSAgICAgICAgCi0gICAgICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGxpbmVkIHVwIHRv
IG1ha2UgY29tcGFyaW5nIGluZGljZXMgZWFzaWVyLgotICAgICAgICB1aW50OF90IHRvcExlZnQo
KSBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVswXVswXTsgfQotICAgICAgICB1aW50
OF90IGxlZnQoKSBjb25zdCAgICAgICAgICAgICAgICB7IHJldHVybiBhbHBoYVsxXVswXTsgfQot
ICAgICAgICB1aW50OF90IGJvdHRvbUxlZnQoKSBjb25zdCAgICAgICAgICB7IHJldHVybiBhbHBo
YVsyXVswXTsgfQotCi0gICAgICAgIHVpbnQ4X3QgdG9wKCkgY29uc3QgICAgICAgICAgICAgICAg
IHsgcmV0dXJuIGFscGhhWzBdWzFdOyB9Ci0gICAgICAgIHVpbnQ4X3QgY2VudGVyKCkgY29uc3Qg
ICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzFdWzFdOyB9Ci0gICAgICAgIHVpbnQ4X3QgYm90
dG9tKCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIGFscGhhWzJdWzFdOyB9Ci0KLSAgICAg
ICAgdm9pZCBzZXRUb3AodWludDhfdCB2YWx1ZSkgICAgICAgICAgeyBhbHBoYVswXVsxXSA9IHZh
bHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0Q2VudGVyKHVpbnQ4X3QgdmFsdWUpICAgICAgIHsgYWxw
aGFbMV1bMV0gPSB2YWx1ZTsgfQotICAgICAgICB2b2lkIHNldEJvdHRvbSh1aW50OF90IHZhbHVl
KSAgICAgICB7IGFscGhhWzJdWzFdID0gdmFsdWU7IH0KLQotICAgICAgICB2b2lkIHNldFRvcFJp
Z2h0KHVpbnQ4X3QgdmFsdWUpICAgICB7IGFscGhhWzBdWzJdID0gdmFsdWU7IH0KLSAgICAgICAg
dm9pZCBzZXRSaWdodCh1aW50OF90IHZhbHVlKSAgICAgICAgeyBhbHBoYVsxXVsyXSA9IHZhbHVl
OyB9Ci0gICAgICAgIHZvaWQgc2V0Qm90dG9tUmlnaHQodWludDhfdCB2YWx1ZSkgIHsgYWxwaGFb
Ml1bMl0gPSB2YWx1ZTsgfQotCi0gICAgICAgIHN0YXRpYyB2b2lkIHNoaWZ0Um93KHVpbnQ4X3Qg
YWxwaGFbM10pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFscGhhWzBdID0gYWxwaGFbMV07Ci0g
ICAgICAgICAgICBhbHBoYVsxXSA9IGFscGhhWzJdOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICB2b2lkIHNoaWZ0KCkKLSAgICAgICAgewotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFb
MF0pOwotICAgICAgICAgICAgc2hpZnRSb3coYWxwaGFbMV0pOwotICAgICAgICAgICAgc2hpZnRS
b3coYWxwaGFbMl0pOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCBMaWdodGluZ0Rh
dGEgewotICAgICAgICAvLyBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBvbmx5IHJlYWQtb25seSAo
U01QIHNhZmUpIGRhdGEKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsczsKLSAgICAg
ICAgZmxvYXQgc3VyZmFjZVNjYWxlOwotICAgICAgICBpbnQgd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemU7Ci0gICAgICAgIGludCB3aWR0aERlY3JlYXNlZEJ5T25lOwotICAgICAgICBpbnQgaGVp
Z2h0RGVjcmVhc2VkQnlPbmU7Ci0KLSAgICAgICAgaW5saW5lIEludFNpemUgdG9wTGVmdE5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgdG9wUm93Tm9ybWFs
KGludCBvZmZzZXQpIGNvbnN0OwotICAgICAgICBpbmxpbmUgSW50U2l6ZSB0b3BSaWdodE5vcm1h
bChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgbGVmdENvbHVtbk5v
cm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAgaW5saW5lIEludFNpemUgaW50ZXJpb3JO
b3JtYWwoaW50IG9mZnNldCwgQWxwaGFXaW5kb3cmKSBjb25zdDsKLSAgICAgICAgaW5saW5lIElu
dFNpemUgcmlnaHRDb2x1bW5Ob3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlubGlu
ZSBJbnRTaXplIGJvdHRvbUxlZnROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAgICAgIGlu
bGluZSBJbnRTaXplIGJvdHRvbVJvd05vcm1hbChpbnQgb2Zmc2V0KSBjb25zdDsKLSAgICAgICAg
aW5saW5lIEludFNpemUgYm90dG9tUmlnaHROb3JtYWwoaW50IG9mZnNldCkgY29uc3Q7Ci0gICAg
fTsKLQotICAgIHN0cnVjdCBQbGF0Zm9ybUFwcGx5R2VuZXJpY1BhcmFtZXRlcnMgewotICAgICAg
ICBGRUxpZ2h0aW5nKiBmaWx0ZXI7Ci0gICAgICAgIExpZ2h0aW5nRGF0YSBkYXRhOwotICAgICAg
ICBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YTsKLSAgICAgICAgaW50IHlT
dGFydDsKLSAgICAgICAgaW50IHlFbmQ7Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIHBsYXRm
b3JtQXBwbHlHZW5lcmljV29ya2VyKFBsYXRmb3JtQXBwbHlHZW5lcmljUGFyYW1ldGVycyopOwot
ICAgIHN0YXRpYyB2b2lkIHBsYXRmb3JtQXBwbHlOZW9uV29ya2VyKEZFTGlnaHRpbmdQYWludGlu
Z0RhdGFGb3JOZW9uKik7Ci0KLSAgICBGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSwgY29uc3QgQ29s
b3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0
YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNv
dXJjZT4mJiwgVHlwZSk7Ci0KLSAgICBib29sIGRyYXdMaWdodGluZyhVaW50OENsYW1wZWRBcnJh
eSYsIGludCwgaW50KTsKLQotICAgIHZvaWQgc2V0UGl4ZWwoaW50IG9mZnNldCwgY29uc3QgTGln
aHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsIGludCB4LCBpbnQg
eSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50U2l6ZSBub3JtYWxWZWN0b3IpOwot
ICAgIHZvaWQgc2V0UGl4ZWxJbnRlcm5hbChpbnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEm
LCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBm
YWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZlY3RvciwgZmxvYXQgYWxwaGEp
OworICAgIEZFTGlnaHRpbmcoVHlwZSwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0
IHN1cmZhY2VTY2FsZSwgZmxvYXQgZGlmZnVzZUNvbnN0YW50LCBmbG9hdCBzcGVjdWxhckNvbnN0
YW50LCBmbG9hdCBzcGVjdWxhckV4cG9uZW50LCBmbG9hdCBrZXJuZWxVbml0TGVuZ3RoWCwgZmxv
YXQga2VybmVsVW5pdExlbmd0aFksIFJlZjxMaWdodFNvdXJjZT4mJik7CiAKICAgICB2b2lkIGRl
dGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQogCiAg
ICAgYm9vbCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3QgTGlnaHRpbmdEYXRhJiwgY29uc3QgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSYpOwotCi0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY1Bh
aW50KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
LCBpbnQgc3RhcnRYLCBpbnQgc3RhcnRZKTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmlj
KGNvbnN0IExpZ2h0aW5nRGF0YSYsIGNvbnN0IExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsK
LQogI2lmIENQVShBUk1fTkVPTikgJiYgQ1BVKEFSTV9UUkFESVRJT05BTCkgJiYgQ09NUElMRVIo
R0NDX0NPTVBBVElCTEUpCiAgICAgc3RhdGljIGludCBnZXRQb3dlckNvZWZmaWNpZW50cyhmbG9h
dCBleHBvbmVudCk7CiAgICAgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseU5lb24oY29uc3QgTGln
aHRpbmdEYXRhJiwgY29uc3QgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwogI2VuZGlmCiAK
LSAgICBMaWdodGluZ1R5cGUgbV9saWdodGluZ1R5cGU7Ci0gICAgUmVmPExpZ2h0U291cmNlPiBt
X2xpZ2h0U291cmNlOwotCiAgICAgQ29sb3IgbV9saWdodGluZ0NvbG9yOwogICAgIGZsb2F0IG1f
c3VyZmFjZVNjYWxlOwogICAgIGZsb2F0IG1fZGlmZnVzZUNvbnN0YW50OwpAQCAtMTU2LDcgKzcz
LDcgQEAgcHJvdGVjdGVkOgogICAgIGZsb2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKICAgICBmbG9h
dCBtX2tlcm5lbFVuaXRMZW5ndGhYOwogICAgIGZsb2F0IG1fa2VybmVsVW5pdExlbmd0aFk7Cisg
ICAgUmVmPExpZ2h0U291cmNlPiBtX2xpZ2h0U291cmNlOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1lcmdlLmNwcAppbmRleCBjZWExOTdjZjhhMTc2N2M5ZGQ0ZmQ0ZWUwMzNmNjZmZmQx
ZjgzOWNjLi43NmE3NDY0ZjAwZTZkMzcwOGVlOTRkY2FjZDk2ZjYxZjdhY2E2YmU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5j
cHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGRU1l
cmdlLmgiCiAKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0zOCwyNSArMzksNDEgQEAgRkVNZXJnZTo6RkVNZXJnZSgp
CiB7CiB9CiAKLWJvb2wgRkVNZXJnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYpCisvLyBGSVhNRTogTW92ZSB0aGUgY2xhc3MgRkVNZXJnZVNvZnR3YXJlQXBwbGllciB0byBz
ZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFTWVyZ2VTb2Z0d2FyZUFw
cGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFTWVyZ2U+IHsKKyAg
ICB1c2luZyBCYXNlID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFTWVyZ2U+OworCitw
dWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmls
dGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOwor
fTsKKworYm9vbCBGRU1lcmdlU29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBj
b25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKIHsKLSAgICB1bnNpZ25lZCBz
aXplID0gbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKLSAgICBBU1NFUlQoc2l6ZSA+IDApOworICAg
IEFTU0VSVChpbnB1dEVmZmVjdHMuc2l6ZSgpID4gMCk7CiAKLSAgICBhdXRvIHJlc3VsdEltYWdl
ID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3Qu
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KGkpOwotICAgICAgICBp
ZiAoYXV0byBpbkJ1ZmZlciA9IGluLT5pbWFnZUJ1ZmZlclJlc3VsdCgpKQotICAgICAgICAgICAg
ZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJ
bnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CisgICAgYXV0byYgZmlsdGVyQ29u
dGV4dCA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCk7CisKKyAgICBmb3IgKGF1dG8mIGluIDogaW5w
dXRFZmZlY3RzKSB7CisgICAgICAgIGF1dG8gaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1
bHQoKTsKKyAgICAgICAgaWYgKCFpbkJ1ZmZlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIG1fZWZmZWN0LmRy
YXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKICAgICB9
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit7CisgICAgcmV0dXJuIEZFTWVyZ2VTb2Z0d2Fy
ZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBUZXh0
U3RyZWFtJiBGRU1lcmdlOjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBS
ZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5k
ZW50IDw8ICJbZmVNZXJnZSI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKaW5kZXggYjIyM2NiOWU1NjYzNjk1
OWMzZjkxYjg2MWU2ZGExN2MwMzZkYTNjNy4uZDk0NTE4MTU2OGYwYTZlN2YwYjU3YjUzOWM1Mzk0
OTIxZDc4MTY3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1
ZGUgIkNvbG9yQ29tcG9uZW50cy5oIgogI2luY2x1ZGUgIkNvbG9yVHlwZXMuaCIKICNpbmNsdWRl
ICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAi
UGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgpAQCAtODMsMjMgKzg0LDQ4IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdChjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBzZXRBYnNv
bHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQogCi1zdGF0aWMg
aW5saW5lIGludCBwaXhlbEFycmF5SW5kZXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgpCi17Ci0g
ICAgcmV0dXJuICh5ICogd2lkdGggKyB4KSAqIDQ7Ci19CisvLyBGSVhNRTogTW92ZSB0aGUgY2xh
c3MgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJjZSBhbmQgaGVh
ZGVyIGZpbGVzLgorY2xhc3MgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZp
bHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRU1vcnBob2xvZ3k+IHsKKyAgICB1c2luZyBCYXNl
ID0gRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFTW9ycGhvbG9neT47CiAKLWlubGluZSBD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWFrZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZh
bHVlKFBhY2tlZENvbG9yOjpSR0JBIHBpeGVsKQotewotICAgIHJldHVybiBhc0NvbG9yQ29tcG9u
ZW50cyhhc1NSR0JBKHBpeGVsKSk7Ci19CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsK
IAotaW5saW5lIFBhY2tlZENvbG9yOjpSR0JBIG1ha2VQaXhlbFZhbHVlRnJvbUNvbG9yQ29tcG9u
ZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGNvbXBvbmVudHMpCi17Ci0g
ICAgcmV0dXJuIFBhY2tlZENvbG9yOjpSR0JBIHsgbWFrZUZyb21Db21wb25lbnRzPFNSR0JBPHVp
bnQ4X3Q+Pihjb21wb25lbnRzKSB9OwotfQorICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwg
Y29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIHVzaW5nIENvbHVtbkV4dHJlbWEgPSBWZWN0b3I8Q29sb3JDb21wb25lbnRzPHVp
bnQ4X3QsIDQ+LCAxNj47CisKKyAgICBzdHJ1Y3QgUGFpbnRpbmdEYXRhIHsKKyAgICAgICAgTW9y
cGhvbG9neU9wZXJhdG9yVHlwZSB0eXBlOworICAgICAgICBpbnQgcmFkaXVzWDsKKyAgICAgICAg
aW50IHJhZGl1c1k7CisgICAgICAgIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5KiBzcmNQaXhlbEFy
cmF5OworICAgICAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheTsKKyAgICAgICAg
aW50IHdpZHRoOworICAgICAgICBpbnQgaGVpZ2h0OworICAgIH07CiAKLXRlbXBsYXRlPE1vcnBo
b2xvZ3lPcGVyYXRvclR5cGUgdHlwZT4KLUFMV0FZU19JTkxJTkUgQ29sb3JDb21wb25lbnRzPHVp
bnQ4X3QsIDQ+IG1pbk9yTWF4KGNvbnN0IENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiYgYSwg
Y29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBiKQorICAgIHN0cnVjdCBBcHBseVBh
cmFtZXRlcnMgeworICAgICAgICBjb25zdCBQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YTsKKyAg
ICAgICAgaW50IHN0YXJ0WTsKKyAgICAgICAgaW50IGVuZFk7CisgICAgfTsKKworICAgIHN0YXRp
YyBpbmxpbmUgaW50IHBpeGVsQXJyYXlJbmRleChpbnQgeCwgaW50IHksIGludCB3aWR0aCkgeyBy
ZXR1cm4gKHkgKiB3aWR0aCArIHgpICogNDsgfQorICAgIHN0YXRpYyBpbmxpbmUgUGFja2VkQ29s
b3I6OlJHQkEgbWFrZVBpeGVsVmFsdWVGcm9tQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29t
cG9uZW50czx1aW50OF90LCA0PiYgY29tcG9uZW50cykgeyByZXR1cm4gUGFja2VkQ29sb3I6OlJH
QkEgeyBtYWtlRnJvbUNvbXBvbmVudHM8U1JHQkE8dWludDhfdD4+KGNvbXBvbmVudHMpIH07IH0K
KworICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IG1ha2VDb2xv
ckNvbXBvbmVudHNmcm9tUGl4ZWxWYWx1ZShQYWNrZWRDb2xvcjo6UkdCQSBwaXhlbCkgeyByZXR1
cm4gYXNDb2xvckNvbXBvbmVudHMoYXNTUkdCQShwaXhlbCkpOyB9CisgICAgc3RhdGljIGlubGlu
ZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gbWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIs
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUpOworICAgIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25l
bnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
cmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQsIGludCB3aWR0aCwgTW9y
cGhvbG9neU9wZXJhdG9yVHlwZSk7CisgICAgc3RhdGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8
dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0oY29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBN
b3JwaG9sb2d5T3BlcmF0b3JUeXBlKTsKKworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1H
ZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0YSYsIGludCBzdGFydFksIGludCBlbmRZKTsKKyAgICBz
dGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtV29ya2VyKEFwcGx5UGFyYW1ldGVycyopOworICAgIHN0
YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm0oY29uc3QgUGFpbnRpbmdEYXRhJik7Cit9OworCitpbmxp
bmUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGll
cjo6bWluT3JNYXgoY29uc3QgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+JiBhLCBjb25zdCBD
b2xvckNvbXBvbmVudHM8dWludDhfdCwgND4mIGIsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlw
ZSkKIHsKICAgICBpZiAodHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCiAgICAg
ICAgIHJldHVybiBwZXJDb21wb25lbnRNaW4oYSwgYik7CkBAIC0xMDcsNDcgKzEzMywyNyBAQCBB
TFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBtaW5Pck1heChjb25zdCBD
b2xvckNvbXBvbmVudHM8dWludDhfdAogICAgIHJldHVybiBwZXJDb21wb25lbnRNYXgoYSwgYik7
CiB9CiAKLXRlbXBsYXRlPE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZT4KLUFMV0FZU19JTkxJ
TkUgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNvbHVtbkV4dHJlbXVtKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzcmNQaXhlbEFycmF5LCBpbnQgeCwgaW50IHlTdGFydCwgaW50IHlFbmQs
IGludCB3aWR0aCkKK2lubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVNb3JwaG9s
b2d5U29mdHdhcmVBcHBsaWVyOjpjb2x1bW5FeHRyZW11bShjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5RW5kLCBpbnQgd2lkdGgs
IE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKIHsKICAgICBhdXRvIGV4dHJlbXVtID0gbWFr
ZUNvbG9yQ29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVs
QXJyYXlJbmRleCh4LCB5U3RhcnQsIHdpZHRoKSkgfSk7CiAKICAgICBmb3IgKGludCB5ID0geVN0
YXJ0ICsgMTsgeSA8IHlFbmQ7ICsreSkgewogICAgICAgICBhdXRvIHBpeGVsID0gbWFrZUNvbG9y
Q29tcG9uZW50c2Zyb21QaXhlbFZhbHVlKFBhY2tlZENvbG9yOjpSR0JBIHsgKnJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5zaWduZWQqPihzcmNQaXhlbEFycmF5LmRhdGEoKSArIHBpeGVsQXJyYXlJ
bmRleCh4LCB5LCB3aWR0aCkpIH0pOwotICAgICAgICBleHRyZW11bSA9IG1pbk9yTWF4PHR5cGU+
KGV4dHJlbXVtLCBwaXhlbCk7CisgICAgICAgIGV4dHJlbXVtID0gbWluT3JNYXgoZXh0cmVtdW0s
IHBpeGVsLCB0eXBlKTsKICAgICB9CiAgICAgcmV0dXJuIGV4dHJlbXVtOwogfQogCi1BTFdBWVNf
SU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBjb2x1bW5FeHRyZW11bShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc3JjUGl4ZWxBcnJheSwgaW50IHgsIGludCB5U3RhcnQsIGludCB5
RW5kLCBpbnQgd2lkdGgsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAo
dHlwZSA9PSBGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREUpCi0gICAgICAgIHJldHVybiBjb2x1
bW5FeHRyZW11bTxGRU1PUlBIT0xPR1lfT1BFUkFUT1JfRVJPREU+KHNyY1BpeGVsQXJyYXksIHgs
IHlTdGFydCwgeUVuZCwgd2lkdGgpOwotCi0gICAgcmV0dXJuIGNvbHVtbkV4dHJlbXVtPEZFTU9S
UEhPTE9HWV9PUEVSQVRPUl9ESUxBVEU+KHNyY1BpeGVsQXJyYXksIHgsIHlTdGFydCwgeUVuZCwg
d2lkdGgpOwotfQotCi11c2luZyBDb2x1bW5FeHRyZW1hID0gVmVjdG9yPENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiwgMTY+OwotCi10ZW1wbGF0ZTxNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5
cGU+Ci1BTFdBWVNfSU5MSU5FIENvbG9yQ29tcG9uZW50czx1aW50OF90LCA0PiBrZXJuZWxFeHRy
ZW11bShjb25zdCBDb2x1bW5FeHRyZW1hJiBrZXJuZWwpCitpbmxpbmUgQ29sb3JDb21wb25lbnRz
PHVpbnQ4X3QsIDQ+IEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6a2VybmVsRXh0cmVtdW0o
Y29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUp
CiB7CiAgICAgYXV0byBleHRyZW11bSA9IGtlcm5lbFswXTsKICAgICBmb3IgKHNpemVfdCBpID0g
MTsgaSA8IGtlcm5lbC5zaXplKCk7ICsraSkKLSAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heDx0
eXBlPihleHRyZW11bSwga2VybmVsW2ldKTsKKyAgICAgICAgZXh0cmVtdW0gPSBtaW5Pck1heChl
eHRyZW11bSwga2VybmVsW2ldLCB0eXBlKTsKIAogICAgIHJldHVybiBleHRyZW11bTsKIH0KIAot
QUxXQVlTX0lOTElORSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4ga2VybmVsRXh0cmVtdW0o
Y29uc3QgQ29sdW1uRXh0cmVtYSYga2VybmVsLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUp
Ci17Ci0gICAgaWYgKHR5cGUgPT0gRkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFKQotICAgICAg
ICByZXR1cm4ga2VybmVsRXh0cmVtdW08RkVNT1JQSE9MT0dZX09QRVJBVE9SX0VST0RFPihrZXJu
ZWwpOwotCi0gICAgcmV0dXJuIGtlcm5lbEV4dHJlbXVtPEZFTU9SUEhPTE9HWV9PUEVSQVRPUl9E
SUxBVEU+KGtlcm5lbCk7Ci19Ci0KLXZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2Vu
ZXJpYyhjb25zdCBQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVu
ZFkpCit2b2lkIEZFTW9ycGhvbG9neVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVy
aWMoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCBzdGFydFksIGludCBlbmRZ
KQogewogICAgIEFTU0VSVChlbmRZID4gc3RhcnRZKTsKIApAQCAtMTczLDI4ICsxNzksMjggQEAg
dm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlHZW5lcmljKGNvbnN0IFBhaW50aW5nRGF0
YSYgcGFpbnRpbmdEYXRhLCBpbnQgc3QKIAogICAgICAgICAvLyBXZSBzdGFydCBhdCB0aGUgbGVm
dCBlZGdlLCBzbyBjb21wdXRlIGV4dHJlbWUgZm9yIHRoZSByYWRpdXNYIGNvbHVtbnMuCiAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgcmFkaXVzWDsgKyt4KQotICAgICAgICAgICAgZXh0cmVt
YS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJheSwgeCwgeVJhZGl1c1N0YXJ0LCB5
UmFkaXVzRW5kLCB3aWR0aCwgbV90eXBlKSk7CisgICAgICAgICAgICBleHRyZW1hLmFwcGVuZChj
b2x1bW5FeHRyZW11bShzcmNQaXhlbEFycmF5LCB4LCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQs
IHdpZHRoLCBwYWludGluZ0RhdGEudHlwZSkpOwogCiAgICAgICAgIC8vIEtlcm5lbCBpcyBmaWxs
ZWQsIGdldCBleHRyZW1hIG9mIG5leHQgY29sdW1uCiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGg7ICsreCkgewogICAgICAgICAgICAgaWYgKHggPCB3aWR0aCAtIHJhZGl1c1gpCi0g
ICAgICAgICAgICAgICAgZXh0cmVtYS5hcHBlbmQoY29sdW1uRXh0cmVtdW0oc3JjUGl4ZWxBcnJh
eSwgeCArIHJhZGl1c1gsIHlSYWRpdXNTdGFydCwgeVJhZGl1c0VuZCwgd2lkdGgsIG1fdHlwZSkp
OworICAgICAgICAgICAgICAgIGV4dHJlbWEuYXBwZW5kKGNvbHVtbkV4dHJlbXVtKHNyY1BpeGVs
QXJyYXksIHggKyByYWRpdXNYLCB5UmFkaXVzU3RhcnQsIHlSYWRpdXNFbmQsIHdpZHRoLCBwYWlu
dGluZ0RhdGEudHlwZSkpOwogCiAgICAgICAgICAgICBpZiAoeCA+IHJhZGl1c1gpCiAgICAgICAg
ICAgICAgICAgZXh0cmVtYS5yZW1vdmUoMCk7CiAKICAgICAgICAgICAgIHVuc2lnbmVkKiBkZXN0
UGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4oZHN0UGl4ZWxBcnJheS5kYXRhKCkg
KyBwaXhlbEFycmF5SW5kZXgoeCwgeSwgd2lkdGgpKTsKLSAgICAgICAgICAgICpkZXN0UGl4ZWwg
PSBtYWtlUGl4ZWxWYWx1ZUZyb21Db2xvckNvbXBvbmVudHMoa2VybmVsRXh0cmVtdW0oZXh0cmVt
YSwgbV90eXBlKSkudmFsdWU7CisgICAgICAgICAgICAqZGVzdFBpeGVsID0gbWFrZVBpeGVsVmFs
dWVGcm9tQ29sb3JDb21wb25lbnRzKGtlcm5lbEV4dHJlbXVtKGV4dHJlbWEsIHBhaW50aW5nRGF0
YS50eXBlKSkudmFsdWU7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgRkVNb3JwaG9sb2d5
OjpwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBwYXJhbSkKK3Zv
aWQgRkVNb3JwaG9sb2d5U29mdHdhcmVBcHBsaWVyOjphcHBseVBsYXRmb3JtV29ya2VyKEFwcGx5
UGFyYW1ldGVycyogcGFyYW1zKQogewotICAgIHBhcmFtLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlH
ZW5lcmljKCpwYXJhbS0+cGFpbnRpbmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7
CisgICAgYXBwbHlQbGF0Zm9ybUdlbmVyaWMoKnBhcmFtcy0+cGFpbnRpbmdEYXRhLCBwYXJhbXMt
PnN0YXJ0WSwgcGFyYW1zLT5lbmRZKTsKIH0KIAotdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3Jt
QXBwbHkoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCit2b2lkIEZFTW9ycGhvbG9n
eVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybShjb25zdCBQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSkKIHsKICAgICAvLyBFbXBpcmljYWxseSwgcnVudGltZSBpcyBhcHByb3hpbWF0ZWx5
IGxpbmVhciBvdmVyIHJlYXNvbmFibGUga2VybmVsIHNpemVzIHdpdGggYSBzbG9wZSBvZiBhYm91
dCAwLjY1LgogICAgIGZsb2F0IGtlcm5lbEZhY3RvciA9IHNxcnQocGFpbnRpbmdEYXRhLnJhZGl1
c1ggKiBwYWludGluZ0RhdGEucmFkaXVzWSkgKiAwLjY1OwpAQCAtMjA0LDcgKzIxMCw3IEBAIHZv
aWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KGNvbnN0IFBhaW50aW5nRGF0YSYgcGFpbnRp
bmdEYXRhKQogICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBwYWludGluZ0RhdGEuaGVpZ2h0
IC8gODsKICAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48dW5zaWdu
ZWQ+KChwYWludGluZ0RhdGEud2lkdGggKiBwYWludGluZ0RhdGEuaGVpZ2h0ICoga2VybmVsRmFj
dG9yKSAvIG1pbmltYWxBcmVhLCBtYXhOdW1UaHJlYWRzKTsKICAgICBpZiAob3B0aW1hbFRocmVh
ZE51bWJlciA+IDEpIHsKLSAgICAgICAgUGFyYWxsZWxKb2JzPFBsYXRmb3JtQXBwbHlQYXJhbWV0
ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVdv
cmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAgIFBhcmFsbGVsSm9iczxBcHBseVBh
cmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYXBwbHlQbGF0Zm9ybVdvcmtlciwgb3B0aW1hbFRocmVh
ZE51bWJlcik7CiAgICAgICAgIGF1dG8gbnVtT2ZUaHJlYWRzID0gcGFyYWxsZWxKb2JzLm51bWJl
ck9mSm9icygpOwogICAgICAgICBpZiAobnVtT2ZUaHJlYWRzID4gMSkgewogICAgICAgICAgICAg
Ly8gU3BsaXQgdGhlIGpvYiBpbnRvICJqb2JTaXplIi1zaXplZCBqb2JzIGJ1dCB0aGVyZSBhIGZl
dyBqb2JzIHRoYXQgbmVlZCB0byBiZSBzbGlnaHRseSBsYXJnZXIgc2luY2UKQEAgLTIxMyw4ICsy
MTksNyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseShjb25zdCBQYWludGluZ0Rh
dGEmIHBhaW50aW5nRGF0YSkKICAgICAgICAgICAgIGludCBqb2JzV2l0aEV4dHJhID0gcGFpbnRp
bmdEYXRhLmhlaWdodCAlIG51bU9mVGhyZWFkczsKICAgICAgICAgICAgIGludCBjdXJyZW50WSA9
IDA7CiAgICAgICAgICAgICBmb3IgKGludCBqb2IgPSBudW1PZlRocmVhZHMgLSAxOyBqb2IgPj0g
MDsgLS1qb2IpIHsKLSAgICAgICAgICAgICAgICBQbGF0Zm9ybUFwcGx5UGFyYW1ldGVycyYgcGFy
YW0gPSBwYXJhbGxlbEpvYnMucGFyYW1ldGVyKGpvYik7Ci0gICAgICAgICAgICAgICAgcGFyYW0u
ZmlsdGVyID0gdGhpczsKKyAgICAgICAgICAgICAgICBBcHBseVBhcmFtZXRlcnMmIHBhcmFtID0g
cGFyYWxsZWxKb2JzLnBhcmFtZXRlcihqb2IpOwogICAgICAgICAgICAgICAgIHBhcmFtLnN0YXJ0
WSA9IGN1cnJlbnRZOwogICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGpvYiA8IGpvYnNXaXRo
RXh0cmEgPyBqb2JTaXplICsgMSA6IGpvYlNpemU7CiAgICAgICAgICAgICAgICAgcGFyYW0uZW5k
WSA9IGN1cnJlbnRZOwpAQCAtMjI2LDMzICsyMzEsMzIgQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBs
YXRmb3JtQXBwbHkoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiAgICAgICAgIC8v
IEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWQgbW9kZWwKICAgICB9CiAKLSAgICBwbGF0Zm9ybUFw
cGx5R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOwotfQotCi1i
b29sIEZFTW9ycGhvbG9neTo6aXNEZWdlbmVyYXRlKGludCByYWRpdXNYLCBpbnQgcmFkaXVzWSkg
Y29uc3QKLXsKLSAgICByZXR1cm4gcmFkaXVzWCA8IDAgfHwgcmFkaXVzWSA8IDAgfHwgKCFyYWRp
dXNYICYmICFyYWRpdXNZKTsKKyAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhwYWludGluZ0RhdGEs
IDAsIHBhaW50aW5nRGF0YS5oZWlnaHQpOwogfQogCi1ib29sIEZFTW9ycGhvbG9neTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorYm9vbCBGRU1vcnBob2xvZ3lT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5w
dXRFZmZlY3QoMCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0c1swXS5nZXQo
KTsKIAotICAgIGF1dG8gZGVzdGluYXRpb25QaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyUmVzdWx0
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGF1dG8gZGVzdGlu
YXRpb25QaXhlbEJ1ZmZlciA9IG1fZWZmZWN0LnBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1
ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2V0SXNBbHBoYUltYWdlKGluLT5p
c0FscGhhSW1hZ2UoKSk7CisgICAgbV9lZmZlY3Quc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhh
SW1hZ2UoKSk7CisKKyAgICBhdXRvIGlzRGVnZW5lcmF0ZSA9IFtdKGludCByYWRpdXNYLCBpbnQg
cmFkaXVzWSkgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiByYWRpdXNYIDwgMCB8fCByYWRpdXNZ
IDwgMCB8fCAoIXJhZGl1c1ggJiYgIXJhZGl1c1kpOworICAgIH07CiAKLSAgICBJbnRSZWN0IGVm
ZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKKyAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gbV9l
ZmZlY3QucmVxdWVzdGVkUmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKKyAgICBJbnRTaXplIHJhZGl1cyA9IGZsb29yZWRJbnRTaXplKEZsb2F0U2l6ZSht
X2VmZmVjdC5yYWRpdXNYKCksIG1fZWZmZWN0LnJhZGl1c1koKSkpOwogCi0gICAgSW50U2l6ZSBy
YWRpdXMgPSBmbG9vcmVkSW50U2l6ZShGbG9hdFNpemUobV9yYWRpdXNYLCBtX3JhZGl1c1kpKTsK
ICAgICBpZiAoaXNEZWdlbmVyYXRlKHJhZGl1cy53aWR0aCgpLCByYWRpdXMuaGVpZ2h0KCkpKSB7
CiAgICAgICAgIGluLT5jb3B5UGl4ZWxCdWZmZXJSZXN1bHQoKmRlc3RpbmF0aW9uUGl4ZWxCdWZm
ZXIsIGVmZmVjdERyYXdpbmdSZWN0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0g
ICAgcmFkaXVzID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBt
X3JhZGl1c1gsIG1fcmFkaXVzWSB9KSk7CisgICAgcmFkaXVzID0gZmxvb3JlZEludFNpemUoZmls
dGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2VmZmVjdC5yYWRpdXNYKCksIG1fZWZmZWN0LnJh
ZGl1c1koKSB9KSk7CiAgICAgaW50IHJhZGl1c1ggPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVj
dC53aWR0aCgpIC0gMSwgcmFkaXVzLndpZHRoKCkpOwogICAgIGludCByYWRpdXNZID0gc3RkOjpt
aW4oZWZmZWN0RHJhd2luZ1JlY3QuaGVpZ2h0KCkgLSAxLCByYWRpdXMuaGVpZ2h0KCkpOwogCkBA
IC0yNjEsNyArMjY1LDcgQEAgYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0g
ICAgYXV0byBzb3VyY2VQaXhlbEJ1ZmZlciA9IGluLT5nZXRQaXhlbEJ1ZmZlclJlc3VsdChBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBlZmZlY3REcmF3aW5nUmVjdCwgb3Bl
cmF0aW5nQ29sb3JTcGFjZSgpKTsKKyAgICBhdXRvIHNvdXJjZVBpeGVsQnVmZmVyID0gaW4tPmdl
dFBpeGVsQnVmZmVyUmVzdWx0KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IGVmZmVjdERyYXdpbmdSZWN0LCBtX2VmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogICAg
IGlmICghc291cmNlUGl4ZWxCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjY5
LDYgKzI3Myw3IEBAIGJvb2wgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29u
c3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgYXV0byYgZGVzdGluYXRpb25QaXhlbEFycmF5ID0gZGVz
dGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwogCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5n
RGF0YTsKKyAgICBwYWludGluZ0RhdGEudHlwZSA9IG1fZWZmZWN0Lm1vcnBob2xvZ3lPcGVyYXRv
cigpOwogICAgIHBhaW50aW5nRGF0YS5zcmNQaXhlbEFycmF5ID0gJnNvdXJjZVBpeGVsQXJyYXk7
CiAgICAgcGFpbnRpbmdEYXRhLmRzdFBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5
OwogICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRo
KCkpOwpAQCAtMjc2LDEwICsyODEsMTUgQEAgYm9vbCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICBwYWludGluZ0RhdGEucmFkaXVz
WCA9IGNlaWxmKHJhZGl1c1gpOwogICAgIHBhaW50aW5nRGF0YS5yYWRpdXNZID0gY2VpbGYocmFk
aXVzWSk7CiAKLSAgICBwbGF0Zm9ybUFwcGx5KHBhaW50aW5nRGF0YSk7CisgICAgYXBwbHlQbGF0
Zm9ybShwYWludGluZ0RhdGEpOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEZFTW9ycGhv
bG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAg
IHJldHVybiBGRU1vcnBob2xvZ3lTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwg
aW5wdXRFZmZlY3RzKCkpOworfQorCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSYgdHlwZSkKIHsKICAgICBz
d2l0Y2ggKHR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCmluZGV4IGRiODcwYWU3ZGY1MDRlMTljNGQwNTEz
ZjhkNDIxYjAxZmNjYzFkMTkuLjU4OTUwMmE2ZjViYzZkMjBiOGUxOWVhOWZmNTdjYTc4OTI1ZDgy
NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1vcnBob2xvZ3kuaApAQCAtNTMsMjkgKzUzLDYgQEAgcHJpdmF0ZToKIAogICAgIFdU
Rjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBS
ZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYm9vbCBpc0RlZ2VuZXJh
dGUoaW50IHJhZGl1c1gsIGludCByYWRpdXNZKSBjb25zdDsKLQotICAgIHN0cnVjdCBQYWludGlu
Z0RhdGEgewotICAgICAgICBjb25zdCBVaW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJheTsK
LSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXk7Ci0gICAgICAgIGludCB3
aWR0aDsKLSAgICAgICAgaW50IGhlaWdodDsKLSAgICAgICAgaW50IHJhZGl1c1g7Ci0gICAgICAg
IGludCByYWRpdXNZOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUGxhdGZvcm1BcHBseVBhcmFtZXRl
cnMgewotICAgICAgICBGRU1vcnBob2xvZ3kqIGZpbHRlcjsKLSAgICAgICAgaW50IHN0YXJ0WTsK
LSAgICAgICAgaW50IGVuZFk7Ci0gICAgICAgIGNvbnN0IFBhaW50aW5nRGF0YSogcGFpbnRpbmdE
YXRhOwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRm
b3JtQXBwbHlQYXJhbWV0ZXJzKik7Ci0KLSAgICB2b2lkIHBsYXRmb3JtQXBwbHkoY29uc3QgUGFp
bnRpbmdEYXRhJik7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhjb25zdCBQYWludGlu
Z0RhdGEmLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7Ci0KICAgICBNb3JwaG9sb2d5T3BlcmF0b3JU
eXBlIG1fdHlwZTsKICAgICBmbG9hdCBtX3JhZGl1c1g7CiAgICAgZmxvYXQgbV9yYWRpdXNZOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9m
ZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmNwcAppbmRleCA0MzE0YTFhNTYxMjRlZDFjODM2MDljOThjMGI5ZmMxYTVkMjJjNGRlLi4x
ZGE5Mjc3MGU2YzJkMjY1YTFmZTg1NzE3OGI1ZThlN2Y1NjM2YTU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcApAQCAt
MjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkZFT2Zmc2V0LmgiCiAKICNpbmNsdWRlICJGaWx0ZXIu
aCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CkBAIC02NCwyNCArNjUsMzkgQEAgdm9pZCBGRU9mZnNldDo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgc2V0QWJzb2x1dGVQ
YWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKIH0KIAotYm9vbCBGRU9mZnNl
dDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQorLy8gRklYTUU6
IE1vdmUgdGhlIGNsYXNzIEZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyIHRvIHNlcGFyYXRlIHNvdXJj
ZSBhbmQgaGVhZGVyIGZpbGVzLgorY2xhc3MgRkVPZmZzZXRTb2Z0d2FyZUFwcGxpZXIgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFT2Zmc2V0PiB7CisgICAgdXNpbmcgQmFz
ZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRU9mZnNldD47CisKK3B1YmxpYzoKKyAg
ICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgYm9vbCBhcHBseShjb25zdCBGaWx0ZXImLCBjb25z
dCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykgb3ZlcnJpZGU7Cit9OworCitib29s
IEZFT2Zmc2V0U29mdHdhcmVBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29u
c3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOworICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dHNbMF0uZ2V0KCk7CiAKLSAgICBhdXRvIHJlc3VsdEltYWdlID0gaW1hZ2VCdWZmZXJSZXN1bHQo
KTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VCdWZmZXJSZXN1bHQoKTsK
ICAgICBhdXRvIGluQnVmZmVyID0gaW4tPmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFy
ZXN1bHRJbWFnZSB8fCAhaW5CdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHNl
dElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOworICAgIG1fZWZmZWN0LnNldElzQWxw
aGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCi0gICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdp
b24gPSBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
LSAgICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2R4
LCBtX2R5IH0pKTsKKyAgICBGbG9hdFJlY3QgZHJhd2luZ1JlZ2lvbiA9IG1fZWZmZWN0LmRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOworICAgIGRyYXdp
bmdSZWdpb24ubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZWZmZWN0LmR4KCks
IG1fZWZmZWN0LmR5KCkgfSkpOwogICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdl
QnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorYm9vbCBGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmls
dGVyKQoreworICAgIHJldHVybiBGRU9mZnNldFNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHko
ZmlsdGVyLCBpbnB1dEVmZmVjdHMoKSk7Cit9CisKIFRleHRTdHJlYW0mIEZFT2Zmc2V0OjpleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBSZXByZXNlbnRhdGlvblR5cGUgcmVw
cmVzZW50YXRpb24pIGNvbnN0CiB7CiAgICAgdHMgPDwgaW5kZW50IDw8ICJbZmVPZmZzZXQiOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNw
ZWN1bGFyTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCmluZGV4IDNmMmQ5OGJhOWI5OTcxM2JjN2YwOWM2
NTVlYTU2MWQyNjdjMGYwNWQuLjdmYmZkODFhNjA4YjY1ZGQ3MTE3NGEzYjYzMWQzYTQzMzRlZWY4
NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVTcGVjdWxhckxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAKQEAgLTM0LDcgKzM0LDcgQEAgUmVm
PEZFU3BlY3VsYXJMaWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoY29uc3QgQ29s
b3ImIGxpZ2h0aW5nQ29sb3IsIGYKIH0KIAogRkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFy
TGlnaHRpbmcoY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwg
ZmxvYXQgc3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2Vy
bmVsVW5pdExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+
JiYgbGlnaHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5nKFNwZWN1bGFyTGlnaHRpbmcsIGxpZ2h0
aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBv
bmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0
U291cmNlKSwgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcpCisgICAgOiBG
RUxpZ2h0aW5nKEZpbHRlckVmZmVjdDo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nLCBsaWdodGlu
Z0NvbG9yLCBzdXJmYWNlU2NhbGUsIDAsIHNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyRXhwb25l
bnQsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNv
dXJjZSkpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCBhOWUyMTMzN2IwZDI3NGU1NDgwZGY2NzYwZjg5N2M3
MjAxOWU1NDhhLi40MzkwNDhmNWJkMWUxOTc1N2Q5MTdmYWIyNWZkYTczNmIxN2Q1Nzc2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUu
Y3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNp
bmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNs
dWRlICJQYXR0ZXJuLmgiCkBAIC00MiwyMiArNDMsMzIgQEAgRkVUaWxlOjpGRVRpbGUoKQogewog
fQogCi1ib29sIEZFVGlsZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmls
dGVyKQorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFVGlsZVNvZnR3YXJlQXBwbGllciB0byBz
ZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxlcy4KK2NsYXNzIEZFVGlsZVNvZnR3YXJlQXBw
bGllciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVUaWxlPiB7CisgICAg
dXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRVRpbGU+OworCitwdWJs
aWM6CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVy
JiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworfTsK
KworYm9vbCBGRVRpbGVTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVy
LCBjb25zdCBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cykKIHsKLSAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CisgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0c1swXS5nZXQoKTsKIAotICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBpbWFnZUJ1ZmZlclJl
c3VsdCgpOworICAgIGF1dG8gcmVzdWx0SW1hZ2UgPSBtX2VmZmVjdC5pbWFnZUJ1ZmZlclJlc3Vs
dCgpOwogICAgIGF1dG8gaW5CdWZmZXIgPSBpbi0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBp
ZiAoIXJlc3VsdEltYWdlIHx8ICFpbkJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CisgICAgbV9lZmZlY3Quc2V0
SXNBbHBoYUltYWdlKGluLT5pc0FscGhhSW1hZ2UoKSk7CiAKICAgICAvLyBTb3VyY2UgaW5wdXQg
bmVlZHMgbW9yZSBhdHRlbnRpb24uIEl0IGhhcyB0aGUgc2l6ZSBvZiB0aGUgZmlsdGVyUmVnaW9u
IGJ1dCBnaXZlcyB0aGUKICAgICAvLyBzaXplIG9mIHRoZSBjdXR0ZWQgc291cmNlSW1hZ2UgYmFj
ay4gVGhpcyBpcyBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBvcHRpbWl6YXRpb24uCiAg
ICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKICAgICBGbG9hdFBv
aW50IGluTWF4RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOwotICAgIEZsb2F0
UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24oKTsKKyAg
ICBGbG9hdFBvaW50IG1heEVmZmVjdExvY2F0aW9uID0gbV9lZmZlY3QubWF4RWZmZWN0UmVjdCgp
LmxvY2F0aW9uKCk7CiAgICAgaWYgKGluLT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpU
eXBlOjpTb3VyY2VHcmFwaGljIHx8IGluLT5maWx0ZXJUeXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpU
eXBlOjpTb3VyY2VBbHBoYSkgewogICAgICAgICB0aWxlUmVjdCA9IGZpbHRlci5maWx0ZXJSZWdp
b24oKTsKICAgICAgICAgdGlsZVJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwpAQCAt
ODIsMTEgKzkzLDE2IEBAIGJvb2wgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCiAKICAgICBHcmFwaGljc0NvbnRleHQmIGZpbHRlckNvbnRleHQgPSBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpOwogICAgIGZpbHRlckNvbnRleHQuc2V0RmlsbFBhdHRlcm4o
V1RGTW92ZShwYXR0ZXJuKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5maWxsUmVjdChGbG9hdFJlY3Qo
RmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpOworICAgIGZpbHRlckNv
bnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9lZmZlY3QuYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCkpKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEZFVGls
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQoreworICAgIHJl
dHVybiBGRVRpbGVTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZl
Y3RzKCkpOworfQorCiBUZXh0U3RyZWFtJiBGRVRpbGU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
VGV4dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QK
IHsKICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZVRpbGUiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4
IDI2NTc3NjYzY2M2MzI3N2JlMmRhYTM2NDA5Njg0YjFkNzIyMjY5YTEuLjNiNDdhMTk1NzlhODVm
Zjk0ZGQxZjJkZmE4MTBmZDc1ZDgzNmZkODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTI3LDYg
KzI3LDcgQEAKICNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5o
IgorI2luY2x1ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZl
ci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVs
Sm9icy5oPgpAQCAtMzQsMjAgKzM1LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vKgot
ICAgIFByb2R1Y2VzIHJlc3VsdHMgaW4gdGhlIHJhbmdlIFsxLCAyKiozMSAtIDJdLiBBbGdvcml0
aG0gaXM6Ci0gICAgciA9IChhICogcikgbW9kIG0gd2hlcmUgYSA9IHJhbmRBbXBsaXR1ZGUgPSAx
NjgwNyBhbmQKLSAgICBtID0gcmFuZE1heGltdW0gPSAyKiozMSAtIDEgPSAyMTQ3NDgzNjQ3LCBy
ID0gc2VlZC4KLSAgICBTZWUgW1BhcmsgJiBNaWxsZXJdLCBDQUNNIHZvbC4gMzEgbm8uIDEwIHAu
IDExOTUsIE9jdC4gMTk4OAotICAgIFRvIHRlc3Q6IHRoZSBhbGdvcml0aG0gc2hvdWxkIHByb2R1
Y2UgdGhlIHJlc3VsdCAxMDQzNjE4MDY1Ci0gICAgYXMgdGhlIDEwLDAwMHRoIGdlbmVyYXRlZCBu
dW1iZXIgaWYgdGhlIG9yaWdpbmFsIHNlZWQgaXMgMS4KLSovCi1zdGF0aWMgY29uc3QgaW50IHNf
cGVybGluTm9pc2UgPSA0MDk2Owotc3RhdGljIGNvbnN0IGxvbmcgc19yYW5kTWF4aW11bSA9IDIx
NDc0ODM2NDc7IC8vIDIqKjMxIC0gMQotc3RhdGljIGNvbnN0IGludCBzX3JhbmRBbXBsaXR1ZGUg
PSAxNjgwNzsgLy8gNyoqNTsgcHJpbWl0aXZlIHJvb3Qgb2YgbQotc3RhdGljIGNvbnN0IGludCBz
X3JhbmRRID0gMTI3NzczOyAvLyBtIC8gYQotc3RhdGljIGNvbnN0IGludCBzX3JhbmRSID0gMjgz
NjsgLy8gbSAlIGEKLQogUmVmPEZFVHVyYnVsZW5jZT4gRkVUdXJidWxlbmNlOjpjcmVhdGUoVHVy
YnVsZW5jZVR5cGUgdHlwZSwgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVu
Y3lZLCBpbnQgbnVtT2N0YXZlcywgZmxvYXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcykKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGRVR1cmJ1bGVuY2UodHlwZSwgYmFzZUZyZXF1ZW5jeVgs
IGJhc2VGcmVxdWVuY3lZLCBudW1PY3RhdmVzLCBzZWVkLCBzdGl0Y2hUaWxlcykpOwpAQCAtMTE1
LDI5ICsxMDIsODkgQEAgYm9vbCBGRVR1cmJ1bGVuY2U6OnNldFN0aXRjaFRpbGVzKGJvb2wgc3Rp
dGNoKQogLy8gVGhlIHR1cmJ1bGVuY2UgY2FsY3VsYXRpb24gY29kZSBpcyBhbiBhZGFwdGVkIHZl
cnNpb24gb2Ygd2hhdCBhcHBlYXJzIGluIHRoZSBTVkcgMS4xIHNwZWNpZmljYXRpb246CiAvLyBo
dHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlCiAKLS8v
IENvbXB1dGUgcHNldWRvIHJhbmRvbSBudW1iZXIuCi1pbmxpbmUgbG9uZyBGRVR1cmJ1bGVuY2U6
OlBhaW50aW5nRGF0YTo6cmFuZG9tKCkKLXsKLSAgICBsb25nIHJlc3VsdCA9IHNfcmFuZEFtcGxp
dHVkZSAqIChzZWVkICUgc19yYW5kUSkgLSBzX3JhbmRSICogKHNlZWQgLyBzX3JhbmRRKTsKLSAg
ICBpZiAocmVzdWx0IDw9IDApCi0gICAgICAgIHJlc3VsdCArPSBzX3JhbmRNYXhpbXVtOwotICAg
IHNlZWQgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KKy8vIEZJWE1FOiBNb3ZlIHRo
ZSBjbGFzcyBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFu
ZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIgOiBwdWJs
aWMgRmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyPEZFVHVyYnVsZW5jZT4geworICAgIHVzaW5n
IEJhc2UgPSBGaWx0ZXJFZmZlY3RDb25jcmV0ZUFwcGxpZXI8RkVUdXJidWxlbmNlPjsKKworcHVi
bGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRl
ciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICAvLyBQcm9kdWNlcyByZXN1bHRzIGluIHRoZSByYW5nZSBbMSwgMioqMzEg
LSAyXS4gQWxnb3JpdGhtIGlzOgorICAgIC8vIHIgPSAoYSAqIHIpIG1vZCBtIHdoZXJlIGEgPSBz
X3JhbmRBbXBsaXR1ZGUgPSAxNjgwNyBhbmQKKyAgICAvLyBtID0gc19yYW5kTWF4aW11bSA9IDIq
KjMxIC0gMSA9IDIxNDc0ODM2NDcsIHIgPSBzZWVkLgorICAgIC8vIFNlZSBbUGFyayAmIE1pbGxl
cl0sIENBQ00gdm9sLiAzMSBuby4gMTAgcC4gMTE5NSwgT2N0LiAxOTg4CisgICAgLy8gVG8gdGVz
dDogdGhlIGFsZ29yaXRobSBzaG91bGQgcHJvZHVjZSB0aGUgcmVzdWx0IDEwNDM2MTgwNjUKKyAg
ICAvLyBhcyB0aGUgMTAsMDAwdGggZ2VuZXJhdGVkIG51bWJlciBpZiB0aGUgb3JpZ2luYWwgc2Vl
ZCBpcyAxLgorICAgIHN0YXRpYyBjb25zdCBpbnQgc19wZXJsaW5Ob2lzZSA9IDQwOTY7CisgICAg
c3RhdGljIGNvbnN0IGxvbmcgc19yYW5kTWF4aW11bSA9IDIxNDc0ODM2NDc7IC8vIDIqKjMxIC0g
MQorICAgIHN0YXRpYyBjb25zdCBpbnQgc19yYW5kQW1wbGl0dWRlID0gMTY4MDc7IC8vIDcqKjU7
IHByaW1pdGl2ZSByb290IG9mIG0KKyAgICBzdGF0aWMgY29uc3QgaW50IHNfcmFuZFEgPSAxMjc3
NzM7IC8vIG0gLyBhCisgICAgc3RhdGljIGNvbnN0IGludCBzX3JhbmRSID0gMjgzNjsgLy8gbSAl
IGEKKworICAgIHN0YXRpYyBjb25zdCBpbnQgc19ibG9ja1NpemUgPSAyNTY7CisgICAgc3RhdGlj
IGNvbnN0IGludCBzX2Jsb2NrTWFzayA9IHNfYmxvY2tTaXplIC0gMTsKKworICAgIHN0cnVjdCBQ
YWludGluZ0RhdGEgeworICAgICAgICAvLyBDb21wdXRlIHBzZXVkbyByYW5kb20gbnVtYmVyLgor
ICAgICAgICBsb25nIHJhbmRvbSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvbmcgcmVzdWx0
ID0gc19yYW5kQW1wbGl0dWRlICogKHNlZWQgJSBzX3JhbmRRKSAtIHNfcmFuZFIgKiAoc2VlZCAv
IHNfcmFuZFEpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA8PSAwKQorICAgICAgICAgICAgICAg
IHJlc3VsdCArPSBzX3JhbmRNYXhpbXVtOworICAgICAgICAgICAgc2VlZCA9IHJlc3VsdDsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KIAotaW5saW5lIGZsb2F0IHNtb290
aEN1cnZlKGZsb2F0IHQpCi17Ci0gICAgcmV0dXJuIHQgKiB0ICogKDMgLSAyICogdCk7Ci19Cisg
ICAgICAgIFR1cmJ1bGVuY2VUeXBlIHR5cGU7CisgICAgICAgIGZsb2F0IGJhc2VGcmVxdWVuY3lY
OworICAgICAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WTsKKyAgICAgICAgaW50IG51bU9jdGF2ZXM7
CisgICAgICAgIGxvbmcgc2VlZDsKKyAgICAgICAgYm9vbCBzdGl0Y2hUaWxlczsKKyAgICAgICAg
SW50U2l6ZSBwYWludGluZ1NpemU7CiAKLWlubGluZSBmbG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9u
KGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0IGIpCi17Ci0gICAgcmV0dXJuIGEgKyB0ICogKGIgLSBh
KTsKLX0KKyAgICAgICAgaW50IGxhdHRpY2VTZWxlY3RvclsyICogc19ibG9ja1NpemUgKyAyXTsK
KyAgICAgICAgZmxvYXQgZ3JhZGllbnRbNF1bMiAqIHNfYmxvY2tTaXplICsgMl1bMl07CisgICAg
fTsKKworICAgIHN0cnVjdCBTdGl0Y2hEYXRhIHsKKyAgICAgICAgaW50IHdpZHRoIHsgMCB9OyAv
LyBIb3cgbXVjaCB0byBzdWJ0cmFjdCB0byB3cmFwIGZvciBzdGl0Y2hpbmcuCisgICAgICAgIGlu
dCB3cmFwWCB7IDAgfTsgLy8gTWluaW11bSB2YWx1ZSB0byB3cmFwLgorICAgICAgICBpbnQgaGVp
Z2h0IHsgMCB9OworICAgICAgICBpbnQgd3JhcFkgeyAwIH07CisgICAgfTsKKworICAgIHN0cnVj
dCBBcHBseVBhcmFtZXRlcnMgeworICAgICAgICBJbnRSZWN0IGZpbHRlclJlZ2lvbjsKKyAgICAg
ICAgRmxvYXRTaXplIGZpbHRlclNjYWxlOworICAgICAgICBVaW50OENsYW1wZWRBcnJheSogcGl4
ZWxBcnJheTsKKyAgICAgICAgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7CisgICAgICAgIFN0
aXRjaERhdGEgc3RpdGNoRGF0YTsKKyAgICAgICAgaW50IHN0YXJ0WTsKKyAgICAgICAgaW50IGVu
ZFk7CisgICAgfTsKIAotdm9pZCBGRVR1cmJ1bGVuY2U6OmluaXRQYWludChQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSkKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IHNtb290aEN1cnZlKGZsb2F0
IHQpIHsgcmV0dXJuIHQgKiB0ICogKDMgLSAyICogdCk7IH0KKyAgICBzdGF0aWMgaW5saW5lIGZs
b2F0IGxpbmVhckludGVycG9sYXRpb24oZmxvYXQgdCwgZmxvYXQgYSwgZmxvYXQgYikgeyByZXR1
cm4gYSArIHQgKiAoYiAtIGEpOyB9CisKKyAgICBzdGF0aWMgUGFpbnRpbmdEYXRhIGluaXRQYWlu
dGluZ0RhdGEoVHVyYnVsZW5jZVR5cGUsIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNl
RnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGxvbmcgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcywg
Y29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXplKTsKKyAgICBzdGF0aWMgU3RpdGNoRGF0YSBjb21w
dXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZsb2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxv
YXQmIGJhc2VGcmVxdWVuY3lZLCBib29sIHN0aXRjaFRpbGVzKTsKKworICAgIHN0YXRpYyBDb2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiwgY29uc3Qg
U3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmIG5vaXNlVmVjdG9yKTsKKyAgICBzdGF0aWMg
Q29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMoY29u
c3QgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiYgZmxvYXRDb21wb25lbnRzKTsKKyAgICBzdGF0
aWMgQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IGNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZv
clBvaW50KGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQm
KTsKKworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1HZW5lcmljKGNvbnN0IEludFJlY3Qm
IGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgVWludDhDbGFtcGVk
QXJyYXkmIHBpeGVsQXJyYXksIGNvbnN0IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBz
dGFydFksIGludCBlbmRZKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVBsYXRmb3JtV29ya2VyKEFw
cGx5UGFyYW1ldGVycyopOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm0oY29uc3QgSW50
UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBVaW50OENs
YW1wZWRBcnJheSYgcGl4ZWxBcnJheSwgUGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSYpOworfTsK
KworRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjpQYWludGluZ0RhdGEgRkVUdXJidWxlbmNl
U29mdHdhcmVBcHBsaWVyOjppbml0UGFpbnRpbmdEYXRhKFR1cmJ1bGVuY2VUeXBlIHR5cGUsIGZs
b2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMs
IGxvbmcgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcywgY29uc3QgSW50U2l6ZSYgcGFpbnRpbmdTaXpl
KQogewotICAgIGZsb2F0IG5vcm1hbGl6YXRpb25GYWN0b3I7CisgICAgUGFpbnRpbmdEYXRhIHBh
aW50aW5nRGF0YSB7IHR5cGUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WSwgbnVtT2N0
YXZlcywgc2VlZCwgc3RpdGNoVGlsZXMsIHBhaW50aW5nU2l6ZSwgeyB9LCB7IH0gfTsKIAogICAg
IC8vIFRoZSBzZWVkIHZhbHVlIGNsYW1wIHRvIHRoZSByYW5nZSBbMSwgc19yYW5kTWF4aW11bSAt
IDFdLgogICAgIGlmIChwYWludGluZ0RhdGEuc2VlZCA8PSAwKQpAQCAtMTU0LDcgKzIwMSw3IEBA
IHZvaWQgRkVUdXJidWxlbmNlOjppbml0UGFpbnQoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEp
CiAgICAgICAgICAgICAgICAgZ3JhZGllbnRbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhaW50
aW5nRGF0YS5yYW5kb20oKSAlICgyICogc19ibG9ja1NpemUpKSAtIHNfYmxvY2tTaXplKSAvIHNf
YmxvY2tTaXplOwogICAgICAgICAgICAgICAgIGdyYWRpZW50WzFdID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KChwYWludGluZ0RhdGEucmFuZG9tKCkgJSAoMiAqIHNfYmxvY2tTaXplKSkgLSBzX2Jsb2Nr
U2l6ZSkgLyBzX2Jsb2NrU2l6ZTsKICAgICAgICAgICAgIH0gd2hpbGUgKCFncmFkaWVudFswXSAm
JiAhZ3JhZGllbnRbMV0pOwotICAgICAgICAgICAgbm9ybWFsaXphdGlvbkZhY3RvciA9IHN0ZDo6
aHlwb3QoZ3JhZGllbnRbMF0sIGdyYWRpZW50WzFdKTsKKyAgICAgICAgICAgIGZsb2F0IG5vcm1h
bGl6YXRpb25GYWN0b3IgPSBzdGQ6Omh5cG90KGdyYWRpZW50WzBdLCBncmFkaWVudFsxXSk7CiAg
ICAgICAgICAgICBncmFkaWVudFswXSAvPSBub3JtYWxpemF0aW9uRmFjdG9yOwogICAgICAgICAg
ICAgZ3JhZGllbnRbMV0gLz0gbm9ybWFsaXphdGlvbkZhY3RvcjsKICAgICAgICAgfQpAQCAtMTc2
LDExICsyMjMsMTMgQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmluaXRQYWludChQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSkKICAgICAgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudFtjaGFubmVs
XVtzX2Jsb2NrU2l6ZSArIGldWzFdID0gcGFpbnRpbmdEYXRhLmdyYWRpZW50W2NoYW5uZWxdW2ld
WzFdOwogICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHBhaW50aW5nRGF0YTsKIH0KIAot
RkVUdXJidWxlbmNlOjpTdGl0Y2hEYXRhIEZFVHVyYnVsZW5jZTo6Y29tcHV0ZVN0aXRjaGluZyhJ
bnRTaXplIHRpbGVTaXplLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0JiBiYXNlRnJlcXVl
bmN5WSkgY29uc3QKK0ZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6U3RpdGNoRGF0YSBGRVR1
cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXI6OmNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6
ZSwgZmxvYXQmIGJhc2VGcmVxdWVuY3lYLCBmbG9hdCYgYmFzZUZyZXF1ZW5jeVksIGJvb2wgc3Rp
dGNoVGlsZXMpCiB7Ci0gICAgaWYgKCFtX3N0aXRjaFRpbGVzKQorICAgIGlmICghc3RpdGNoVGls
ZXMpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBmbG9hdCB0aWxlV2lkdGggPSB0aWxlU2l6
ZS53aWR0aCgpOwpAQCAtMjE3LDcgKzI2Niw3IEBAIEZFVHVyYnVsZW5jZTo6U3RpdGNoRGF0YSBG
RVR1cmJ1bGVuY2U6OmNvbXB1dGVTdGl0Y2hpbmcoSW50U2l6ZSB0aWxlU2l6ZSwgZmxvYXQmCiB9
CiAKIC8vIFRoaXMgaXMgdGFrZW4gMToxIGZyb20gU1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3Jn
L1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNmZVR1cmJ1bGVuY2VFbGVtZW50LgotQ29sb3JDb21wb25l
bnRzPGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiBw
YWludGluZ0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9p
bnQmIG5vaXNlVmVjdG9yKSBjb25zdAorQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBGRVR1cmJ1
bGVuY2VTb2Z0d2FyZUFwcGxpZXI6Om5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEsIGNvbnN0IFN0aXRjaERhdGEmIHN0aXRjaERhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIG5v
aXNlVmVjdG9yKQogewogICAgIHN0cnVjdCBOb2lzZVBvc2l0aW9uIHsKICAgICAgICAgaW50IGlu
ZGV4OyAvLyBieDAsIGJ5MCBpbiB0aGUgc3BlYyB0ZXh0LgpAQCAtMjU0LDcgKzMwMyw3IEBAIENv
bG9yQ29tcG9uZW50czxmbG9hdCwgND4gRkVUdXJidWxlbmNlOjpub2lzZTJEKGNvbnN0IFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhCiAgICAgTm9pc2VQb3NpdGlvbiBub2lzZVkobm9pc2VWZWN0
b3IueSgpKTsKIAogICAgIC8vIElmIHN0aXRjaGluZywgYWRqdXN0IGxhdHRpY2UgcG9pbnRzIGFj
Y29yZGluZ2x5LgotICAgIGlmIChtX3N0aXRjaFRpbGVzKSB7CisgICAgaWYgKHBhaW50aW5nRGF0
YS5zdGl0Y2hUaWxlcykgewogICAgICAgICBub2lzZVguc3RpdGNoKHN0aXRjaERhdGEud2lkdGgs
IHN0aXRjaERhdGEud3JhcFgpOwogICAgICAgICBub2lzZVkuc3RpdGNoKHN0aXRjaERhdGEuaGVp
Z2h0LCBzdGl0Y2hEYXRhLndyYXBZKTsKICAgICB9CkBAIC0zMjMsNyArMzcyLDcgQEAgQ29sb3JD
b21wb25lbnRzPGZsb2F0LCA0PiBGRVR1cmJ1bGVuY2U6Om5vaXNlMkQoY29uc3QgUGFpbnRpbmdE
YXRhJiBwYWludGluZ0RhdGEKIAogLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRy9maWx0ZXJz
Lmh0bWwjZmVUdXJidWxlbmNlRWxlbWVudCBkZXNjcmliZXMgdGhpcyBjb252ZXJzaW9uIHRvIGNv
bG9yIGNvbXBvbmVudHMuCiAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGNvbG9yQ29udmVydDxT
UkdCQTx1aW50OD4+KFNSR0JBPGZsb2F0PikgdG8gZ2V0IHRoZSBzYW1lIGJlaGF2aW9yLgotc3Rh
dGljIGlubGluZSBDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gdG9JbnRCYXNlZENvbG9yQ29t
cG9uZW50cyhjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+JiBmbG9hdENvbXBvbmVudHMp
CitDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
Ojp0b0ludEJhc2VkQ29sb3JDb21wb25lbnRzKGNvbnN0IENvbG9yQ29tcG9uZW50czxmbG9hdCwg
ND4mIGZsb2F0Q29tcG9uZW50cykKIHsKICAgICByZXR1cm4gewogICAgICAgICBzdGQ6OmNsYW1w
PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGludD4oZmxvYXRDb21wb25lbnRzWzBdICogMjU1KSwgMCwg
MjU1KSwKQEAgLTMzMywxMyArMzgyLDEzIEBAIHN0YXRpYyBpbmxpbmUgQ29sb3JDb21wb25lbnRz
PHVpbnQ4X3QsIDQ+IHRvSW50QmFzZWRDb2xvckNvbXBvbmVudHMoY29uc3QgQ29sb3JDCiAgICAg
fTsKIH0KIAotQ29sb3JDb21wb25lbnRzPHVpbnQ4X3QsIDQ+IEZFVHVyYnVsZW5jZTo6Y2FsY3Vs
YXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0Rh
dGEsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0
CitDb2xvckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVy
OjpjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVGb3JQb2ludChjb25zdCBQYWludGluZ0RhdGEmIHBh
aW50aW5nRGF0YSwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCkKIHsKICAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IHR1cmJ1bGVuY2VGdW5jdGlvblJl
c3VsdDsKICAgICBGbG9hdFBvaW50IG5vaXNlVmVjdG9yKHBvaW50LngoKSAqIHBhaW50aW5nRGF0
YS5iYXNlRnJlcXVlbmN5WCwgcG9pbnQueSgpICogcGFpbnRpbmdEYXRhLmJhc2VGcmVxdWVuY3lZ
KTsKICAgICBmbG9hdCByYXRpbyA9IDE7Ci0gICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZl
IDwgbV9udW1PY3RhdmVzOyArK29jdGF2ZSkgewotICAgICAgICBpZiAobV90eXBlID09IFR1cmJ1
bGVuY2VUeXBlOjpGcmFjdGFsTm9pc2UpCisgICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZl
IDwgcGFpbnRpbmdEYXRhLm51bU9jdGF2ZXM7ICsrb2N0YXZlKSB7CisgICAgICAgIGlmIChwYWlu
dGluZ0RhdGEudHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJhY3RhbE5vaXNlKQogICAgICAgICAg
ICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0
Y2hEYXRhLCBub2lzZVZlY3RvcikgLyByYXRpbzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
dHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ICs9IG5vaXNlMkQocGFpbnRpbmdEYXRhLCBzdGl0Y2hE
YXRhLCBub2lzZVZlY3RvcikuYWJzKCkgLyByYXRpbzsKQEAgLTM0OCw3ICszOTcsNyBAQCBDb2xv
ckNvbXBvbmVudHM8dWludDhfdCwgND4gRkVUdXJidWxlbmNlOjpjYWxjdWxhdGVUdXJidWxlbmNl
VmFsdWVGb3JQb2ludChjb25zdAogICAgICAgICBub2lzZVZlY3Rvci5zZXRZKG5vaXNlVmVjdG9y
LnkoKSAqIDIpOwogICAgICAgICByYXRpbyAqPSAyOwogCi0gICAgICAgIGlmIChtX3N0aXRjaFRp
bGVzKSB7CisgICAgICAgIGlmIChwYWludGluZ0RhdGEuc3RpdGNoVGlsZXMpIHsKICAgICAgICAg
ICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFsdWVzLiBTdWJ0cmFjdGluZyBzX3Blcmxpbk5vaXNlIGJl
Zm9yZSB0aGUgbXVsdGlwbGljYXRpb24gYW5kCiAgICAgICAgICAgICAvLyBhZGRpbmcgaXQgYWZ0
ZXJ3YXJkIHNpbXBsaWZpZXMgdG8gc3VidHJhY3RpbmcgaXQgb25jZS4KICAgICAgICAgICAgIHN0
aXRjaERhdGEud2lkdGggKj0gMjsKQEAgLTM2MCwyMCArNDA5LDE5IEBAIENvbG9yQ29tcG9uZW50
czx1aW50OF90LCA0PiBGRVR1cmJ1bGVuY2U6OmNhbGN1bGF0ZVR1cmJ1bGVuY2VWYWx1ZUZvclBv
aW50KGNvbnN0CiAKICAgICAvLyBUaGUgdmFsdWUgb2YgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0
IGNvbWVzIGZyb20gKCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAyNTUpICsgMjU1KSAvIDIg
YnkgZnJhY3RhbE5vaXNlCiAgICAgLy8gYW5kICh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAy
NTUpIGJ5IHR1cmJ1bGVuY2UuCi0gICAgaWYgKG1fdHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6RnJh
Y3RhbE5vaXNlKQorICAgIGlmIChwYWludGluZ0RhdGEudHlwZSA9PSBUdXJidWxlbmNlVHlwZTo6
RnJhY3RhbE5vaXNlKQogICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSB0dXJidWxl
bmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKIAogICAgIHJldHVybiB0b0ludEJhc2Vk
Q29sb3JDb21wb25lbnRzKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7CiB9CiAKLXZvaWQgRkVU
dXJidWxlbmNlOjpmaWxsUmVnaW9uKGNvbnN0IEZpbHRlciYgZmlsdGVyLCBVaW50OENsYW1wZWRB
cnJheSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0aXRj
aERhdGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpIGNvbnN0Cit2b2lkIEZFVHVy
YnVsZW5jZVNvZnR3YXJlQXBwbGllcjo6YXBwbHlQbGF0Zm9ybUdlbmVyaWMoY29uc3QgSW50UmVj
dCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBVaW50OENsYW1w
ZWRBcnJheSYgcGl4ZWxBcnJheSwgY29uc3QgUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIFN0
aXRjaERhdGEgc3RpdGNoRGF0YSwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCiB7CiAgICAgQVNTRVJU
KGVuZFkgPiBzdGFydFkpOwogCi0gICAgSW50UmVjdCBmaWx0ZXJSZWdpb24gPSBhYnNvbHV0ZVBh
aW50UmVjdCgpOwogICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwgZmlsdGVyUmVnaW9uLnkoKSArIHN0
YXJ0WSk7CiAgICAgaW50IGluZGV4T2ZQaXhlbENoYW5uZWwgPSBzdGFydFkgKiAoZmlsdGVyUmVn
aW9uLndpZHRoKCkgPDwgMik7Ci0gICAgRmxvYXRTaXplIGludmVyc2VTY2FsZSA9IHsgMSAvIGZp
bHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5oZWln
aHQoKSB9OworICAgIEZsb2F0U2l6ZSBpbnZlcnNlU2NhbGUgPSB7IDEgLyBmaWx0ZXJTY2FsZS53
aWR0aCgpLCAxIC8gZmlsdGVyU2NhbGUuaGVpZ2h0KCkgfTsKIAogICAgIGZvciAoaW50IHkgPSBz
dGFydFk7IHkgPCBlbmRZOyArK3kpIHsKICAgICAgICAgcG9pbnQuc2V0WShwb2ludC55KCkgKyAx
KTsKQEAgLTM4OCw0NSArNDM2LDIyIEBAIHZvaWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKGNv
bnN0IEZpbHRlciYgZmlsdGVyLCBVaW50OENsYW1wZWRBcnJheSYgcGl4ZWxBcnJhCiAgICAgfQog
fQogCi12b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1l
dGVycyogcGFyYW1ldGVycykKK3ZvaWQgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBs
eVBsYXRmb3JtV29ya2VyKEFwcGx5UGFyYW1ldGVycyogcGFyYW1ldGVycykKIHsKLSAgICBwYXJh
bWV0ZXJzLT5lZmZlY3QtPmZpbGxSZWdpb24oKnBhcmFtZXRlcnMtPmZpbHRlciwgKnBhcmFtZXRl
cnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGluZ0RhdGEsIHBhcmFtZXRlcnMtPnN0
aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1ldGVycy0+ZW5kWSk7CisgICAgYXBw
bHlQbGF0Zm9ybUdlbmVyaWMocGFyYW1ldGVycy0+ZmlsdGVyUmVnaW9uLCBwYXJhbWV0ZXJzLT5m
aWx0ZXJTY2FsZSwgKnBhcmFtZXRlcnMtPnBpeGVsQXJyYXksICpwYXJhbWV0ZXJzLT5wYWludGlu
Z0RhdGEsIHBhcmFtZXRlcnMtPnN0aXRjaERhdGEsIHBhcmFtZXRlcnMtPnN0YXJ0WSwgcGFyYW1l
dGVycy0+ZW5kWSk7CiB9CiAKLWJvb2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCit2b2lkIEZFVHVyYnVsZW5jZVNvZnR3YXJlQXBwbGll
cjo6YXBwbHlQbGF0Zm9ybShjb25zdCBJbnRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0
U2l6ZSYgZmlsdGVyU2NhbGUsIFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwgU3RpdGNoRGF0YSYgc3RpdGNoRGF0YSkKIHsKLSAgICBhdXRv
IGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlclJlc3VsdChBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOwotICAgIGlmICghZGVzdGluYXRpb25QaXhlbEJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgZGVzdGluYXRpb25QaXhl
bEFycmF5ID0gZGVzdGluYXRpb25QaXhlbEJ1ZmZlci0+ZGF0YSgpOwotCi0gICAgSW50U2l6ZSBy
ZXN1bHRTaXplKGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKLQotICAgIGlmIChyZXN1bHRT
aXplLmlzRW1wdHkoKSkgewotICAgICAgICBkZXN0aW5hdGlvblBpeGVsQXJyYXkuemVyb0ZpbGwo
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgSW50U2l6ZSB0aWxlU2l6ZSA9
IHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpLnNpemUoKSk7Ci0KLSAg
ICBmbG9hdCBiYXNlRnJlcXVlbmN5WCA9IG1fYmFzZUZyZXF1ZW5jeVg7Ci0gICAgZmxvYXQgYmFz
ZUZyZXF1ZW5jeVkgPSBtX2Jhc2VGcmVxdWVuY3lZOwotICAgIFN0aXRjaERhdGEgc3RpdGNoRGF0
YSA9IGNvbXB1dGVTdGl0Y2hpbmcodGlsZVNpemUsIGJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVl
bmN5WSk7CisgICAgaW50IGhlaWdodCA9IGZpbHRlclJlZ2lvbi5oZWlnaHQoKTsKKyAgICB1bnNp
Z25lZCBhcmVhID0gZmlsdGVyUmVnaW9uLmFyZWEoKTsKIAotICAgIFBhaW50aW5nRGF0YSBwYWlu
dGluZ0RhdGEobV9zZWVkLCB0aWxlU2l6ZSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lZ
KTsKLSAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1p
bmltYWxSZWN0RGltZW5zaW9uID0gKDEwMCAqIDEwMCk7IC8vIEVtcGlyaWNhbCBkYXRhIGxpbWl0
IGZvciBwYXJhbGxlbCBqb2JzLgorICAgIHVuc2lnbmVkIG1heE51bVRocmVhZHMgPSBmaWx0ZXJS
ZWdpb24uaGVpZ2h0KCkgLyA4OworICAgIHVuc2lnbmVkIG9wdGltYWxUaHJlYWROdW1iZXIgPSBz
dGQ6Om1pbjx1bnNpZ25lZD4oYXJlYSAvIG1pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJl
YWRzKTsKIAotICAgIGF1dG8gYXJlYSA9IHJlc3VsdFNpemUuYXJlYSgpOwotICAgIGlmIChhcmVh
Lmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IGhlaWdo
dCA9IHJlc3VsdFNpemUuaGVpZ2h0KCk7Ci0KLSAgICB1bnNpZ25lZCBtYXhOdW1UaHJlYWRzID0g
aGVpZ2h0IC8gODsKLSAgICB1bnNpZ25lZCBvcHRpbWFsVGhyZWFkTnVtYmVyID0gc3RkOjptaW48
dW5zaWduZWQ+KGFyZWEgLyBzX21pbmltYWxSZWN0RGltZW5zaW9uLCBtYXhOdW1UaHJlYWRzKTsK
ICAgICBpZiAob3B0aW1hbFRocmVhZE51bWJlciA+IDEpIHsKLSAgICAgICAgUGFyYWxsZWxKb2Jz
PEZpbGxSZWdpb25QYXJhbWV0ZXJzPiBwYXJhbGxlbEpvYnMoJldlYkNvcmU6OkZFVHVyYnVsZW5j
ZTo6ZmlsbFJlZ2lvbldvcmtlciwgb3B0aW1hbFRocmVhZE51bWJlcik7CisgICAgICAgIFBhcmFs
bGVsSm9iczxBcHBseVBhcmFtZXRlcnM+IHBhcmFsbGVsSm9icygmYXBwbHlQbGF0Zm9ybVdvcmtl
ciwgb3B0aW1hbFRocmVhZE51bWJlcik7CiAKICAgICAgICAgLy8gRmlsbCB0aGUgcGFyYW1ldGVy
IGFycmF5CiAgICAgICAgIGF1dG8gbnVtSm9icyA9IHBhcmFsbGVsSm9icy5udW1iZXJPZkpvYnMo
KTsKQEAgLTQzNywxMCArNDYyLDEwIEBAIGJvb2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgICAgICAgICB1bnNpZ25lZCBzdGFy
dFkgPSAwOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtSm9iczsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgRmlsbFJlZ2lvblBhcmFtZXRlcnMmIHBhcmFtcyA9IHBh
cmFsbGVsSm9icy5wYXJhbWV0ZXIoaSk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlciA9
ICZmaWx0ZXI7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmVmZmVjdCA9IHRoaXM7Ci0gICAgICAg
ICAgICAgICAgcGFyYW1zLnBpeGVsQXJyYXkgPSAmZGVzdGluYXRpb25QaXhlbEFycmF5OworICAg
ICAgICAgICAgICAgIEFwcGx5UGFyYW1ldGVycyYgcGFyYW1zID0gcGFyYWxsZWxKb2JzLnBhcmFt
ZXRlcihpKTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVn
aW9uOworICAgICAgICAgICAgICAgIHBhcmFtcy5maWx0ZXJTY2FsZSA9IGZpbHRlclNjYWxlOwor
ICAgICAgICAgICAgICAgIHBhcmFtcy5waXhlbEFycmF5ID0gJnBpeGVsQXJyYXk7CiAgICAgICAg
ICAgICAgICAgcGFyYW1zLnBhaW50aW5nRGF0YSA9ICZwYWludGluZ0RhdGE7CiAgICAgICAgICAg
ICAgICAgcGFyYW1zLnN0aXRjaERhdGEgPSBzdGl0Y2hEYXRhOwogICAgICAgICAgICAgICAgIHBh
cmFtcy5zdGFydFkgPSBzdGFydFk7CkBAIC00NTEsMTUgKzQ3Niw0OCBAQCBib29sIEZFVHVyYnVs
ZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmlsdGVyKQogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBwYXJhbGxlbEpvYnMuZXhlY3V0ZSgpOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICAvLyBGYWxsYmFjayB0byBzaW5nbGUgdGhyZWFkZWQgbW9kZSBpZiB0aGVyZSBpcyBubyBy
b29tIGZvciBhIG5ldyB0aHJlYWQgb3IgdGhlIHBhaW50IGFyZWEgaXMgdG9vIHNtYWxsLgotICAg
IGZpbGxSZWdpb24oZmlsdGVyLCBkZXN0aW5hdGlvblBpeGVsQXJyYXksIHBhaW50aW5nRGF0YSwg
c3RpdGNoRGF0YSwgMCwgaGVpZ2h0KTsKKyAgICBhcHBseVBsYXRmb3JtR2VuZXJpYyhmaWx0ZXJS
ZWdpb24sIGZpbHRlclNjYWxlLCBwaXhlbEFycmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEs
IDAsIGhlaWdodCk7Cit9CisKK2Jvb2wgRkVUdXJidWxlbmNlU29mdHdhcmVBcHBsaWVyOjphcHBs
eShjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJikKK3sKKyAg
ICBhdXRvIGRlc3RpbmF0aW9uUGl4ZWxCdWZmZXIgPSBtX2VmZmVjdC5waXhlbEJ1ZmZlclJlc3Vs
dChBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpOworICAgIGlmICghZGVz
dGluYXRpb25QaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSW50U2l6
ZSByZXN1bHRTaXplKG1fZWZmZWN0LmFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKTsKKyAgICBp
ZiAocmVzdWx0U2l6ZS5hcmVhKCkuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBhdXRvJiBkZXN0aW5hdGlvblBpeGVsQXJyYXkgPSBkZXN0aW5hdGlvblBpeGVs
QnVmZmVyLT5kYXRhKCk7CisKKyAgICBpZiAocmVzdWx0U2l6ZS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgZGVzdGluYXRpb25QaXhlbEFycmF5Lnplcm9GaWxsKCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGF1dG8gdGlsZVNpemUgPSByb3VuZGVkSW50U2l6ZShtX2VmZmVjdC5m
aWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5zaXplKCkpOworCisgICAgZmxvYXQgYmFzZUZyZXF1
ZW5jeVggPSBtX2VmZmVjdC5iYXNlRnJlcXVlbmN5WCgpOworICAgIGZsb2F0IGJhc2VGcmVxdWVu
Y3lZID0gbV9lZmZlY3QuYmFzZUZyZXF1ZW5jeVkoKTsKKyAgICBhdXRvIHN0aXRjaERhdGEgPSBj
b21wdXRlU3RpdGNoaW5nKHRpbGVTaXplLCBiYXNlRnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVks
IG1fZWZmZWN0LnN0aXRjaFRpbGVzKCkpOworCisgICAgYXV0byBwYWludGluZ0RhdGEgPSBpbml0
UGFpbnRpbmdEYXRhKG1fZWZmZWN0LnR5cGUoKSwgYmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVu
Y3lZLCBtX2VmZmVjdC5udW1PY3RhdmVzKCksIG1fZWZmZWN0LnNlZWQoKSwgbV9lZmZlY3Quc3Rp
dGNoVGlsZXMoKSwgdGlsZVNpemUpOworCisgICAgYXBwbHlQbGF0Zm9ybShtX2VmZmVjdC5hYnNv
bHV0ZVBhaW50UmVjdCgpLCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSwgZGVzdGluYXRpb25QaXhlbEFy
cmF5LCBwYWludGluZ0RhdGEsIHN0aXRjaERhdGEpOwogICAgIHJldHVybiB0cnVlOwogfQogCiti
b29sIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYgZmls
dGVyKQoreworICAgIHJldHVybiBGRVR1cmJ1bGVuY2VTb2Z0d2FyZUFwcGxpZXIoKnRoaXMpLmFw
cGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgVHVyYnVsZW5jZVR5cGUgdHlwZSkKIHsKICAgICBzd2l0
Y2ggKHR5cGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmluZGV4IGU2OThiMzEzZjE4ODYyNTAwMzRiMDY1OTBk
MWUyYjNlZDZkYzM5ODguLjdjNDdjNzg3NDliODU2ZmM5ZjkxYWY4NGM2MTM0Y2Y0N2RmMDZlMjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuaApAQCAtNTgsNjQgKzU4LDEzIEBAIHB1YmxpYzoKICAgICBib29sIHNl
dFN0aXRjaFRpbGVzKGJvb2wpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBpbnQgc19i
bG9ja1NpemUgPSAyNTY7Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2Jsb2NrTWFzayA9IHNfYmxv
Y2tTaXplIC0gMTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5pbWFsUmVjdERpbWVuc2lv
biA9ICgxMDAgKiAxMDApOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwgam9i
cy4KLQotICAgIHN0cnVjdCBQYWludGluZ0RhdGEgewotICAgICAgICBQYWludGluZ0RhdGEobG9u
ZyBwYWludGluZ1NlZWQsIGNvbnN0IEludFNpemUmIHBhaW50aW5nU2l6ZSwgZmxvYXQgYmFzZUZy
ZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZKQotICAgICAgICAgICAgOiBzZWVkKHBhaW50
aW5nU2VlZCkKLSAgICAgICAgICAgICwgZmlsdGVyU2l6ZShwYWludGluZ1NpemUpCi0gICAgICAg
ICAgICAsIGJhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQotICAgICAgICAgICAgLCBiYXNl
RnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAg
ICAgbG9uZyBzZWVkOwotICAgICAgICBpbnQgbGF0dGljZVNlbGVjdG9yWzIgKiBzX2Jsb2NrU2l6
ZSArIDJdOwotICAgICAgICBmbG9hdCBncmFkaWVudFs0XVsyICogc19ibG9ja1NpemUgKyAyXVsy
XTsKLSAgICAgICAgSW50U2l6ZSBmaWx0ZXJTaXplOwotICAgICAgICBmbG9hdCBiYXNlRnJlcXVl
bmN5WDsKLSAgICAgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVk7Ci0KLSAgICAgICAgaW5saW5lIGxv
bmcgcmFuZG9tKCk7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTdGl0Y2hEYXRhIHsKLSAgICAgICAg
U3RpdGNoRGF0YSgpID0gZGVmYXVsdDsKLQotICAgICAgICBpbnQgd2lkdGggeyAwIH07IC8vIEhv
dyBtdWNoIHRvIHN1YnRyYWN0IHRvIHdyYXAgZm9yIHN0aXRjaGluZy4KLSAgICAgICAgaW50IHdy
YXBYIHsgMCB9OyAvLyBNaW5pbXVtIHZhbHVlIHRvIHdyYXAuCi0gICAgICAgIGludCBoZWlnaHQg
eyAwIH07Ci0gICAgICAgIGludCB3cmFwWSB7IDAgfTsKLSAgICB9OwotCi0gICAgc3RydWN0IEZp
bGxSZWdpb25QYXJhbWV0ZXJzIHsKLSAgICAgICAgY29uc3QgRmlsdGVyKiBmaWx0ZXI7Ci0gICAg
ICAgIEZFVHVyYnVsZW5jZSogZWZmZWN0OwotICAgICAgICBVaW50OENsYW1wZWRBcnJheSogcGl4
ZWxBcnJheTsKLSAgICAgICAgUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGE7Ci0gICAgICAgIFN0
aXRjaERhdGEgc3RpdGNoRGF0YTsKLSAgICAgICAgaW50IHN0YXJ0WTsKLSAgICAgICAgaW50IGVu
ZFk7Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIoRmlsbFJlZ2lv
blBhcmFtZXRlcnMqKTsKLQogICAgIEZFVHVyYnVsZW5jZShUdXJidWxlbmNlVHlwZSwgZmxvYXQg
YmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBpbnQgbnVtT2N0YXZlcywgZmxv
YXQgc2VlZCwgYm9vbCBzdGl0Y2hUaWxlcyk7CiAKICAgICB2b2lkIGRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3Qo
ZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQotICAgIGJvb2wgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpIG92ZXJyaWRlOwotICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlv
blR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnQoUGFpbnRpbmdEYXRh
Jik7Ci0gICAgU3RpdGNoRGF0YSBjb21wdXRlU3RpdGNoaW5nKEludFNpemUgdGlsZVNpemUsIGZs
b2F0JiBiYXNlRnJlcXVlbmN5WCwgZmxvYXQmIGJhc2VGcmVxdWVuY3lZKSBjb25zdDsKLSAgICBD
b2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IG5vaXNlMkQoY29uc3QgUGFpbnRpbmdEYXRhJiwgY29u
c3QgU3RpdGNoRGF0YSYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBDb2xvckNvbXBv
bmVudHM8dWludDhfdCwgND4gY2FsY3VsYXRlVHVyYnVsZW5jZVZhbHVlRm9yUG9pbnQoY29uc3Qg
UGFpbnRpbmdEYXRhJiwgU3RpdGNoRGF0YSwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAg
IHZvaWQgZmlsbFJlZ2lvbihjb25zdCBGaWx0ZXImLCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0
IFBhaW50aW5nRGF0YSYsIFN0aXRjaERhdGEsIGludCBzdGFydFksIGludCBlbmRZKSBjb25zdDsK
KyAgICBib29sIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImKSBvdmVycmlkZTsK
IAotICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOworICAgIFdURjo6VGV4
dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNl
bnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVHVyYnVsZW5jZVR5cGUgbV90eXBl
OwogICAgIGZsb2F0IG1fYmFzZUZyZXF1ZW5jeVg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdEFwcGxpZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0QXBwbGllci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQ3ZTE0MjUxYzU2MmU5NjdmZmI5YWI3MWVjM2FmYTcwZGNiOWMyYjEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdEFwcGxpZXIuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEZpbHRlckVmZmVjdEFwcGxpZXIgeworcHVibGljOgorICAgIEZp
bHRlckVmZmVjdEFwcGxpZXIoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0
QXBwbGllcigpID0gZGVmYXVsdDsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoY29uc3Qg
RmlsdGVyJiwgY29uc3QgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dHMpID0gMDsKK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZpbHRlckVmZmVjdFR5cGU+CitjbGFzcyBGaWx0ZXJFZmZlY3RDb25j
cmV0ZUFwcGxpZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0QXBwbGllciB7CitwdWJsaWM6CisgICAg
RmlsdGVyRWZmZWN0Q29uY3JldGVBcHBsaWVyKEZpbHRlckVmZmVjdFR5cGUmIGVmZmVjdCkKKyAg
ICAgICAgOiBtX2VmZmVjdChlZmZlY3QpCisgICAgeworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoK
KyAgICBGaWx0ZXJFZmZlY3RUeXBlJiBtX2VmZmVjdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvTGlnaHRTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvTGlnaHRTb3VyY2UuaAppbmRleCA5NGQxOTUwMTM5ZDZkMjQzYTg2NjFlNWVhNTVkMjM1YTcz
ODlmNWQ1Li44ZGI4ZTU2NTk3YmFiZWM4Njg2MTY4M2ZmOGUwNTgyODhjNzEyNmY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNv
dXJjZS5oCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBMaWdodFR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0ID0gMDsKIAotICAgIHZp
cnR1YWwgdm9pZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5n
RGF0YSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0
ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBjb25zdCA9IDA7CiAgICAgLy8geiBpcyBhIGZsb2F0
IG51bWJlciwgc2luY2UgaXQgaXMgdGhlIGFscGhhIHZhbHVlIHNjYWxlZCBieSBhIHVzZXIKICAg
ICAvLyBzcGVjaWZpZWQgInN1cmZhY2VTY2FsZSIgY29uc3RhbnQsIHdoaWNoIHR5cGUgaXMgPG51
bWJlcj4gaW4gdGhlIFNWRyBzdGFuZGFyZC4KICAgICAvLyB4IGFuZCB5IGFyZSBpbiB0aGUgY29v
cmRpbmF0ZXMgb2YgdGhlIEZpbHRlckVmZmVjdCdzIGJ1ZmZlci4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3Vy
Y2UuY3BwCmluZGV4IDFhYjVlMTllMTFhNGYzNmVhMmE0MjZhNzUwMzg3OTEyOGY1NGI0NGIuLmMy
ZDg3NDkzYjI4ZGUzODYxM2UzZTIwMjg0ZmZlMmZmNDI1ZmVlMmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0
U291cmNlLmNwcApAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgUG9pbnRMaWdodFNvdXJjZTo6aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3Qm
IGZpbHRlckVmZmVjdCwgUGFpbnRpbmdEYXRhJikKK3ZvaWQgUG9pbnRMaWdodFNvdXJjZTo6aW5p
dFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmIGZpbHRlckVmZmVjdCwgUGFpbnRpbmdE
YXRhJikgY29uc3QKIHsKICAgICBtX2J1ZmZlclBvc2l0aW9uLnNldFhZKGZpbHRlckVmZmVjdC5t
YXBQb2ludEZyb21Vc2VyU3BhY2VUb0J1ZmZlcihtX3VzZXJTcGFjZVBvc2l0aW9uLnh5KCkpKTsK
ICAgICAvLyBUbyBzY2FsZSBaLCBtYXAgYSBwb2ludCBvZmZzZXQgZnJvbSBtX3VzZXJTcGFjZVBv
c2l0aW9uIGluIHRoZSB4IGRpcmVjdGlvbiBieSB6LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0U291cmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaAppbmRl
eCA2N2EzYTBiZDM5YThhOWNjMTk1NDM0OTg1OTZkNzExNWY0YmI5NWE1Li40MmMzZGM2MTc4ODUy
MmVjNzg3Y2FlZTJhYzM0YThlMzJmOWRiZDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1BvaW50TGlnaHRTb3VyY2UuaApAQCAt
MzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRZKGZsb2F0KSBvdmVycmlkZTsKICAg
ICBib29sIHNldFooZmxvYXQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBpbml0UGFpbnRpbmdEYXRh
KGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIG92ZXJyaWRlOworICAgIHZvaWQg
aW5pdFBhaW50aW5nRGF0YShjb25zdCBGaWx0ZXJFZmZlY3QmLCBQYWludGluZ0RhdGEmKSBjb25z
dCBvdmVycmlkZTsKICAgICBDb21wdXRlZExpZ2h0aW5nRGF0YSBjb21wdXRlUGl4ZWxMaWdodGlu
Z0RhdGEoY29uc3QgUGFpbnRpbmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCB6KSBjb25zdCBm
aW5hbDsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKQEAgLTUyLDcgKzUyLDcgQEAgcHJpdmF0ZToK
ICAgICB9CiAKICAgICBGbG9hdFBvaW50M0QgbV91c2VyU3BhY2VQb3NpdGlvbjsKLSAgICBGbG9h
dFBvaW50M0QgbV9idWZmZXJQb3NpdGlvbjsKKyAgICBtdXRhYmxlIEZsb2F0UG9pbnQzRCBtX2J1
ZmZlclBvc2l0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNw
cAppbmRleCA4ZmE0NDJiOGQ5ZDUzYTk5ZWY1Y2ExNTg4MjY2MzUwZGE2YmE1ODQwLi44MjAyZmI5
NDhhOTZkNzAzZTU4NWI0OWM5MmUyNTM0NGIwM2JhYTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcApAQCAt
MjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIK
KyNpbmNsdWRlICJGaWx0ZXJFZmZlY3RBcHBsaWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC00NSwxNyArNDYs
MjkgQEAgdm9pZCBTb3VyY2VBbHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoaW5wdXRFZmZlY3QoMCkt
PmFic29sdXRlUGFpbnRSZWN0KCkpOwogfQogCi1ib29sIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJikKKy8vIEZJWE1FOiBNb3ZlIHRoZSBjbGFzcyBTb3Vy
Y2VBbHBoYVNvZnR3YXJlQXBwbGllciB0byBzZXBhcmF0ZSBzb3VyY2UgYW5kIGhlYWRlciBmaWxl
cy4KK2NsYXNzIFNvdXJjZUFscGhhU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVj
dENvbmNyZXRlQXBwbGllcjxTb3VyY2VBbHBoYT4geworICAgIHVzaW5nIEJhc2UgPSBGaWx0ZXJF
ZmZlY3RDb25jcmV0ZUFwcGxpZXI8U291cmNlQWxwaGE+OworCitwdWJsaWM6CisgICAgdXNpbmcg
QmFzZTo6QmFzZTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVy
RWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpIG92ZXJyaWRlOworfTsKKworYm9vbCBTb3VyY2VB
bHBoYVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVyRWZm
ZWN0VmVjdG9yJiBpbnB1dEVmZmVjdHMpCiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gaW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZl
Y3RzWzBdLmdldCgpOworCisgICAgYXV0byByZXN1bHRJbWFnZSA9IG1fZWZmZWN0LmltYWdlQnVm
ZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAotICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGlucHV0RWZmZWN0KDApLT5p
bWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBpbi0+aW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJl
Y3QoKS5zaXplKCkpOworICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QoRmxvYXRQb2ludCgpLCBtX2Vm
ZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0JiBm
aWx0ZXJDb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKTsKIAogICAgIGZpbHRlckNvbnRl
eHQuZmlsbFJlY3QoaW1hZ2VSZWN0LCBDb2xvcjo6YmxhY2spOwpAQCAtNjQsNiArNzcsMTEgQEAg
Ym9vbCBTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRlciYpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4gU291cmNlQWxwaGFTb2Z0
d2FyZUFwcGxpZXIoKnRoaXMpLmFwcGx5KGZpbHRlciwgaW5wdXRFZmZlY3RzKCkpOworfQorCiBU
ZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFt
JiB0cywgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAi
W1NvdXJjZUFscGhhXVxuIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCmluZGV4IGVjZGU0MzFmOWI5YjA2
NDQxM2VhMDViNjBkZGNiOTJlNTg5OGM3MDQuLjdiMjYzZGRlMDk3YzU5MGQ3ZjVkNGM0OWY0NjRk
NTc2NWU2NzQ1ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcApAQCAtMjEsNiArMjEsNyBAQAogI2lu
Y2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUg
IkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTQyLDEwICs0MywyMCBAQCB2b2lk
IFNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYg
ZmlsdGVyKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRS
ZWN0KSk7CiB9CiAKLWJvb2wgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNv
bnN0IEZpbHRlciYgZmlsdGVyKQorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIFNvdXJjZUdyYXBo
aWNTb2Z0d2FyZUFwcGxpZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitj
bGFzcyBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENv
bmNyZXRlQXBwbGllcjxTb3VyY2VHcmFwaGljPiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVm
ZmVjdENvbmNyZXRlQXBwbGllcjxTb3VyY2VHcmFwaGljPjsKKworcHVibGljOgorICAgIHVzaW5n
IEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRl
ckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVycmlkZTsKK307CisKK2Jvb2wgU291cmNl
R3JhcGhpY1NvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IEZpbHRlckVmZmVjdFZlY3RvciYpCiB7Ci0gICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0g
aW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBmaWx0
ZXIuc291cmNlSW1hZ2UoKTsKKyAgICBhdXRvIHJlc3VsdEltYWdlID0gbV9lZmZlY3QuaW1hZ2VC
dWZmZXJSZXN1bHQoKTsKKyAgICBhdXRvIHNvdXJjZUltYWdlID0gZmlsdGVyLnNvdXJjZUltYWdl
KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtNTMsNiArNjQsMTEgQEAgYm9vbCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoY29uc3QgRmlsdGVyJiBmaWx0ZXIpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK2Jvb2wgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQoreworICAgIHJldHVybiBTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyKCp0
aGlzKS5hcHBseShmaWx0ZXIsIGlucHV0RWZmZWN0cygpKTsKK30KKwogVGV4dFN0cmVhbSYgU291
cmNlR3JhcGhpYzo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVz
ZW50YXRpb25UeXBlKSBjb25zdAogewogICAgIHRzIDw8IGluZGVudCA8PCAiW1NvdXJjZUdyYXBo
aWNdXG4iOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9TcG90TGlnaHRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCmluZGV4IDcxNjA3YWIwMGZmOWQ2YTZkMDE2
OTFkOWJiYjg1NTNkMWYzNDhkMDAuLmU3YzdjMDRlZGVlZDg3MmU3OWEyMjNiZGFkODZhOTFlZDMz
ZjAyMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU3BvdExpZ2h0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogLy8gYWNjb3JkaW5nIHRvIHRoZSBTVkcgMS4xIFNFIGxpZ2h0IHJlZ3Jl
c3Npb24gdGVzdHMKIHN0YXRpYyBjb25zdCBmbG9hdCBhbnRpQWxpYXNUcmVzaG9sZCA9IDAuMDE2
ZjsKIAotdm9pZCBTcG90TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVy
RWZmZWN0JiBmaWx0ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQordm9pZCBT
cG90TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoY29uc3QgRmlsdGVyRWZmZWN0JiBmaWx0
ZXJFZmZlY3QsIFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKSBjb25zdAogewogICAgIG1fYnVm
ZmVyUG9zaXRpb24uc2V0WFkoZmlsdGVyRWZmZWN0Lm1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVm
ZmVyKG1fdXNlclNwYWNlUG9zaXRpb24ueHkoKSkpOwogICAgIC8vIFRvIHNjYWxlIFosIG1hcCBh
IHBvaW50IG9mZnNldCBmcm9tIG1fdXNlclNwYWNlUG9zaXRpb24gaW4gdGhlIHggZGlyZWN0aW9u
IGJ5IHouCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1Nwb3RMaWdodFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuaAppbmRleCAzNTE1MTYzNTA3N2VlZjBlNzNjMjZhZTQ0
MmE1ZWE1MzRmZDFmM2JmLi4yZWRkOTMwOTlkOTcyODJiMDZkN2MxOWU3NzI3ZDc1ZDY0MmU5YzUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nw
b3RMaWdodFNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU3BvdExpZ2h0U291cmNlLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIGJv
b2wgc2V0U3BlY3VsYXJFeHBvbmVudChmbG9hdCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzZXRMaW1p
dGluZ0NvbmVBbmdsZShmbG9hdCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGluaXRQYWludGluZ0Rh
dGEoY29uc3QgRmlsdGVyRWZmZWN0JiwgUGFpbnRpbmdEYXRhJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBpbml0UGFpbnRpbmdEYXRhKGNvbnN0IEZpbHRlckVmZmVjdCYsIFBhaW50aW5nRGF0YSYpIGNv
bnN0IG92ZXJyaWRlOwogICAgIENvbXB1dGVkTGlnaHRpbmdEYXRhIGNvbXB1dGVQaXhlbExpZ2h0
aW5nRGF0YShjb25zdCBQYWludGluZ0RhdGEmLCBpbnQgeCwgaW50IHksIGZsb2F0IHopIGNvbnN0
IGZpbmFsOwogCiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdU
Rjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNjgsNyArNjgsNyBAQCBwcml2YXRl
OgogICAgIEZsb2F0UG9pbnQzRCBtX3VzZXJTcGFjZVBvc2l0aW9uOwogICAgIEZsb2F0UG9pbnQz
RCBtX3VzZXJTcGFjZVBvaW50c0F0OwogCi0gICAgRmxvYXRQb2ludDNEIG1fYnVmZmVyUG9zaXRp
b247CisgICAgbXV0YWJsZSBGbG9hdFBvaW50M0QgbV9idWZmZXJQb3NpdGlvbjsKIAogICAgIGZs
b2F0IG1fc3BlY3VsYXJFeHBvbmVudDsKICAgICBmbG9hdCBtX2xpbWl0aW5nQ29uZUFuZ2xlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFn
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNw
cAppbmRleCAzZmVjZjFmMzQ0ZTFjN2Y2YTZhMmE2MDkxMTk1MjE4NGI2MTZkNjMyLi5jNzU5Yzlh
OGM1NmRiZWIzNzVkZTM3ZjY1NzU1Yzk4NjAxZjY4NDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAtMjUsNiArMjUsNyBA
QAogI2luY2x1ZGUgIlNWR0ZFSW1hZ2UuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1
ZGUgIkZpbHRlckVmZmVjdEFwcGxpZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTc0LDI5ICs3NSwzOSBAQCB2
b2lkIEZFSW1hZ2U6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEZpbHRlciYgZmls
dGVyKQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoaW1hZ2VSZWN0
KSk7CiB9CiAKLWJvb2wgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0IEZpbHRl
ciYgZmlsdGVyKQorLy8gRklYTUU6IE1vdmUgdGhlIGNsYXNzIEZFSW1hZ2VTb2Z0d2FyZUFwcGxp
ZXIgdG8gc2VwYXJhdGUgc291cmNlIGFuZCBoZWFkZXIgZmlsZXMuCitjbGFzcyBGRUltYWdlU29m
dHdhcmVBcHBsaWVyIDogcHVibGljIEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUltYWdl
PiB7CisgICAgdXNpbmcgQmFzZSA9IEZpbHRlckVmZmVjdENvbmNyZXRlQXBwbGllcjxGRUltYWdl
PjsKKworcHVibGljOgorICAgIHVzaW5nIEJhc2U6OkJhc2U7CisKKyAgICBib29sIGFwcGx5KGNv
bnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKSBvdmVy
cmlkZTsKK307CisKK2Jvb2wgRkVJbWFnZVNvZnR3YXJlQXBwbGllcjo6YXBwbHkoY29uc3QgRmls
dGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckVmZmVjdFZlY3RvciYpCiB7Ci0gICAgYXV0byByZXN1
bHRJbWFnZSA9IGltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgYXV0byByZXN1bHRJbWFnZSA9IG1f
ZWZmZWN0LmltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBwcmltaXRpdmVTdWJyZWdpb24gPSBmaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oKTsKKyAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IG1fZWZm
ZWN0LmZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwogICAgIGF1dG8mIGNvbnRleHQgPSByZXN1
bHRJbWFnZS0+Y29udGV4dCgpOwogCi0gICAgV1RGOjpzd2l0Y2hPbihtX3NvdXJjZUltYWdlLAor
ICAgIFdURjo6c3dpdGNoT24obV9lZmZlY3Quc291cmNlSW1hZ2UoKSwKICAgICAgICAgWyZdIChj
b25zdCBSZWY8SW1hZ2U+JiBpbWFnZSkgewogICAgICAgICAgICAgYXV0byBpbWFnZVJlY3QgPSBw
cmltaXRpdmVTdWJyZWdpb247Ci0gICAgICAgICAgICBhdXRvIHNyY1JlY3QgPSBtX3NvdXJjZUlt
YWdlUmVjdDsKLSAgICAgICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0
KGltYWdlUmVjdCwgc3JjUmVjdCk7CisgICAgICAgICAgICBhdXRvIHNyY1JlY3QgPSBtX2VmZmVj
dC5zb3VyY2VJbWFnZVJlY3QoKTsKKyAgICAgICAgICAgIG1fZWZmZWN0LnByZXNlcnZlQXNwZWN0
UmF0aW8oKS50cmFuc2Zvcm1SZWN0KGltYWdlUmVjdCwgc3JjUmVjdCk7CiAgICAgICAgICAgICBp
bWFnZVJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgaW1hZ2VS
ZWN0ID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShJbnRSZWN0KGltYWdlUmVjdCkpOworICAg
ICAgICAgICAgaW1hZ2VSZWN0ID0gbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShJ
bnRSZWN0KGltYWdlUmVjdCkpOwogICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2Us
IGltYWdlUmVjdCwgc3JjUmVjdCk7CiAgICAgICAgIH0sCiAgICAgICAgIFsmXSAoY29uc3QgUmVm
PEltYWdlQnVmZmVyPiYgaW1hZ2VCdWZmZXIpIHsKICAgICAgICAgICAgIGF1dG8gaW1hZ2VSZWN0
ID0gcHJpbWl0aXZlU3VicmVnaW9uOwotICAgICAgICAgICAgaW1hZ2VSZWN0Lm1vdmVCeShtX3Nv
dXJjZUltYWdlUmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIGltYWdlUmVjdC5tb3ZlQnko
bV9lZmZlY3Quc291cmNlSW1hZ2VSZWN0KCkubG9jYXRpb24oKSk7CiAgICAgICAgICAgICBpbWFn
ZVJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgaW1hZ2VSZWN0
ID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShJbnRSZWN0KGltYWdlUmVjdCkpOworICAgICAg
ICAgICAgaW1hZ2VSZWN0ID0gbV9lZmZlY3QuZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShJbnRS
ZWN0KGltYWdlUmVjdCkpOwogICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoaW1h
Z2VCdWZmZXIsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKICAgICAgICAgfQogICAgICk7CkBAIC0x
MDQsNiArMTE1LDExIEBAIGJvb2wgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKGNvbnN0
IEZpbHRlciYgZmlsdGVyKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEZFSW1hZ2U6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZShjb25zdCBGaWx0ZXImIGZpbHRlcikKK3sKKyAgICByZXR1cm4g
RkVJbWFnZVNvZnR3YXJlQXBwbGllcigqdGhpcykuYXBwbHkoZmlsdGVyLCBpbnB1dEVmZmVjdHMo
KSk7Cit9CisKIFRleHRTdHJlYW0mIEZFSW1hZ2U6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4
dFN0cmVhbSYgdHMsIFJlcHJlc2VudGF0aW9uVHlwZSByZXByZXNlbnRhdGlvbikgY29uc3QKIHsK
ICAgICB0cyA8PCBpbmRlbnQgPDwgIltmZUltYWdlIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAppbmRleCBkYTdlNDdiZDE4ZjU0NGEyZTUy
Mzc3MWQyMzkyN2Q3MjJhOTlhYjVjLi4zNzU1N2E5NmRjYWJlMGY4MDAyNWIwODBhZTcxNzI3MzJj
MmEyYTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGRUltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVJbWFnZS5oCkBAIC00MSw2ICs0MSw5IEBAIHB1YmxpYzoKICAgICBTb3VyY2VJbWFnZSYgc291
cmNlSW1hZ2UoKSB7IHJldHVybiBtX3NvdXJjZUltYWdlOyB9CiAgICAgdm9pZCBzZXRJbWFnZVNv
dXJjZShTb3VyY2VJbWFnZSYmIHNvdXJjZUltYWdlKSB7IG1fc291cmNlSW1hZ2UgPSBXVEZNb3Zl
KHNvdXJjZUltYWdlKTsgfQogCisgICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlSW1hZ2VSZWN0OyB9CisgICAgY29uc3QgU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlJiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29uc3QgeyByZXR1cm4gbV9wcmVz
ZXJ2ZUFzcGVjdFJhdGlvOyB9CisKIHByaXZhdGU6CiAgICAgRkVJbWFnZShTb3VyY2VJbWFnZSYm
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgU1ZHUHJlc2VydmVBc3Bl
Y3RSYXRpb1ZhbHVlJik7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>