<?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>60682</bug_id>
          
          <creation_ts>2011-05-11 18:18:58 -0700</creation_ts>
          <short_desc>Add DynamicsCompressorNode implementation</short_desc>
          <delta_ts>2011-05-16 14:35:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>senorblanco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>402518</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-11 18:18:58 -0700</bug_when>
    <thetext>Add DynamicsCompressorNode implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402533</commentid>
    <comment_count>1</comment_count>
      <attachid>93231</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-11 18:31:21 -0700</bug_when>
    <thetext>Created attachment 93231
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402539</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-11 18:47:11 -0700</bug_when>
    <thetext>This implements DynamicsCompressorNode as described here:
http://chromium.googlecode.com/svn/trunk/samples/audio/specification/specification.html#DynamicsCompressorNode-section

A dynamics compression effect is commonly used in musical production and game audio. It lowers the volume of the loudest parts of the signal and raises the volume of the softest parts, making the sound richer, fuller, and more controlled.

Here are some links to help review the different parts of the compression algorithm:

* The pre/post emphasis filter is shown here
http://chromium.googlecode.com/svn/trunk/samples/audio/emphasis-filter.html

* The static compression curve
http://chromium.googlecode.com/svn/trunk/samples/audio/compression-curve.html

* Exponential slew warping
http://chromium.googlecode.com/svn/trunk/samples/audio/exponential-warp.html

* Adaptive release rate
http://chromium.googlecode.com/svn/trunk/samples/audio/adaptive-release.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402574</commentid>
    <comment_count>3</comment_count>
      <attachid>93231</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-11 19:54:05 -0700</bug_when>
    <thetext>Comment on attachment 93231
Patch

Attachment 93231 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/8684628</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402648</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-11 21:54:59 -0700</bug_when>
    <thetext>This Wikipedia article is probably a useful reference:
http://en.wikipedia.org/wiki/Dynamic_range_compression

Please note that the &quot;ratio&quot; is implemented as &quot;headroom&quot; in this algorithm.  See the &quot;static compression curve&quot; demo:
http://chromium.googlecode.com/svn/trunk/samples/audio/compression-curve.html

But it would be trivial to implement other compression curves, including ones which use &quot;ratio&quot; as a parameter.

This algorithm is &quot;stereo linked&quot; as described in the article.  &quot;Makeup gain&quot; is automatically computed, although additional &quot;post gain&quot; can be set.  There is a &quot;Look-ahead&quot; section, with adjustable pre-delay.

In theory, multi-band compression can be achieved by combining several AudioNodes together with appropriate cross-over filters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403796</commentid>
    <comment_count>5</comment_count>
      <attachid>93231</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-05-13 13:28:33 -0700</bug_when>
    <thetext>Comment on attachment 93231
Patch

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

Most of my comments are style-related; I don&apos;t have anything useful to say about the audio algorithm itself (looks very cool, though).

The Mac build breakage should be fixed.

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:89
&gt; +    float gk = 1.0 - gain / 20.0;

Use 1 and 20 here.  According to WebKit style, &quot;Unless required in order to force floating point math, do not append .0, .f and .0f to floating point literals.&quot;  (I hate this rule, but when in Rome..).  Since gain is already a float, 20 will be promoted to float, as will 1.

&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:220
&gt; +    m_lastFilterStageGain = -1.0;

As above, these three should be -1, not -1.0.

&gt; Source/WebCore/platform/audio/DynamicsCompressor.h:58
&gt; +        ParamReduction,

This enum element seems to be unused, and could be removed.

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:50
&gt; +    return 1.0 - exp(-k * x);

1.0 -&gt; 1

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:106
&gt; +    float dryMix = 1.0 - effectBlend;

1.0 -&gt; 1

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:117
&gt; +    double fullRangeGain = (linearThreshold + kk * saturate(1.0 - linearThreshold, 1.0));

1.0 -&gt; 1

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:118
&gt; +    double fullRangeMakeupGain = 1.0 / fullRangeGain;

1.0 -&gt; 1

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:141
&gt; +    double kA = 0.9999999999999998*y1 + 1.8432219684323923e-16*y2 - 1.9373394351676423e-16*y3 + 8.824516011816245e-18*y4;

Nit:  probably should document how these coefficients were derived.

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:165
&gt; +            m_detectorAverage = 1.0;

1.0 -&gt; 1

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:167
&gt; +            m_detectorAverage = 1.0;

1.0 -&gt; 1

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:189
&gt; +            m_maxAttackCompressionDiffDb = -1.0;

-1, etc (apply to the rest of this patch as necessary)

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:219
&gt; +            // Fix gremlins.

Don&apos;t feed them NaN after midnight.

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:256
&gt; +                    float L = *sourceL++;

Variable names shouldn&apos;t start with a capital.

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:284
&gt; +                double shapedInput = absInput &lt; linearThreshold ? absInput : linearThreshold + kk * saturate(absInput - linearThreshold, 1.0 / kk);

Note:  If this loop is hot, I think you could hoist this reciprocal out of the loop (just in case the compiler doesn&apos;t).

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:291
&gt; +                double dbPerFrame = attenuationDb / (0.0025 * sampleRate);

Same here.

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:352
&gt; +    // printf(&quot;m_compressorGain = %f\n&quot;, m_compressorGain);

Commented-out code should probably be removed.

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:358
&gt; +    m_compressorGain = 1.0;

1.0 -&gt; 1

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.h:80
&gt; +    enum { DefaultPreDelayFrames = 256 /*512*/ }; // setPreDelayTime() will override this initial value

/*512*/ should probably be removed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403940</commentid>
    <comment_count>6</comment_count>
      <attachid>93528</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-13 16:26:38 -0700</bug_when>
    <thetext>Created attachment 93528
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403941</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-13 16:28:57 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=93231&amp;action=review

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:89
&gt;&gt; +    float gk = 1.0 - gain / 20.0;
&gt; 
&gt; Use 1 and 20 here.  According to WebKit style, &quot;Unless required in order to force floating point math, do not append .0, .f and .0f to floating point literals.&quot;  (I hate this rule, but when in Rome..).  Since gain is already a float, 20 will be promoted to float, as will 1.

FIXED

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressor.cpp:220
&gt;&gt; +    m_lastFilterStageGain = -1.0;
&gt; 
&gt; As above, these three should be -1, not -1.0.

FIXED

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressor.h:58
&gt;&gt; +        ParamReduction,
&gt; 
&gt; This enum element seems to be unused, and could be removed.

FIXED

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:50
&gt;&gt; +    return 1.0 - exp(-k * x);
&gt; 
&gt; 1.0 -&gt; 1

FIXED

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:106
&gt;&gt; +    float dryMix = 1.0 - effectBlend;
&gt; 
&gt; 1.0 -&gt; 1

FIXED

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:117
&gt;&gt; +    double fullRangeGain = (linearThreshold + kk * saturate(1.0 - linearThreshold, 1.0));
&gt; 
&gt; 1.0 -&gt; 1

FIXED

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:118
&gt;&gt; +    double fullRangeMakeupGain = 1.0 / fullRangeGain;
&gt; 
&gt; 1.0 -&gt; 1

FIXED

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:141
&gt;&gt; +    double kA = 0.9999999999999998*y1 + 1.8432219684323923e-16*y2 - 1.9373394351676423e-16*y3 + 8.824516011816245e-18*y4;
&gt; 
&gt; Nit:  probably should document how these coefficients were derived.

FIXED

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:165
&gt;&gt; +            m_detectorAverage = 1.0;
&gt; 
&gt; 1.0 -&gt; 1

FIXED

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:167
&gt;&gt; +            m_detectorAverage = 1.0;
&gt; 
&gt; 1.0 -&gt; 1

FIXED

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:189
&gt;&gt; +            m_maxAttackCompressionDiffDb = -1.0;
&gt; 
&gt; -1, etc (apply to the rest of this patch as necessary)

FIXED

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:219
&gt;&gt; +            // Fix gremlins.
&gt; 
&gt; Don&apos;t feed them NaN after midnight.

:)

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:256
&gt;&gt; +                    float L = *sourceL++;
&gt; 
&gt; Variable names shouldn&apos;t start with a capital.

FIXED

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:284
&gt;&gt; +                double shapedInput = absInput &lt; linearThreshold ? absInput : linearThreshold + kk * saturate(absInput - linearThreshold, 1.0 / kk);
&gt; 
&gt; Note:  If this loop is hot, I think you could hoist this reciprocal out of the loop (just in case the compiler doesn&apos;t).

FIXED

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:291
&gt;&gt; +                double dbPerFrame = attenuationDb / (0.0025 * sampleRate);
&gt; 
&gt; Same here.

FIXED

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:352
&gt;&gt; +    // printf(&quot;m_compressorGain = %f\n&quot;, m_compressorGain);
&gt; 
&gt; Commented-out code should probably be removed.

FIXED

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:358
&gt;&gt; +    m_compressorGain = 1.0;
&gt; 
&gt; 1.0 -&gt; 1

FIXED

&gt;&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.h:80
&gt;&gt; +    enum { DefaultPreDelayFrames = 256 /*512*/ }; // setPreDelayTime() will override this initial value
&gt; 
&gt; /*512*/ should probably be removed?

FIXED</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404006</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-13 18:52:34 -0700</bug_when>
    <thetext>Stephen, thanks for having a look.  I think I&apos;ve addressed all of your comments and fixed the mac build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404659</commentid>
    <comment_count>9</comment_count>
      <attachid>93528</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-05-16 12:32:02 -0700</bug_when>
    <thetext>Comment on attachment 93528
Patch

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

Looks good.  r=me

&gt; Source/WebCore/platform/audio/DynamicsCompressorKernel.cpp:298
&gt; +                double dbPerFrame = attenuationDb / satReleaseFrames;

Perf nit:  This division could still be hoisted out of the loop (just a side note, totally up to you if it&apos;s necessary).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404720</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-05-16 14:35:08 -0700</bug_when>
    <thetext>Committed r86607: &lt;http://trac.webkit.org/changeset/86607&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93231</attachid>
            <date>2011-05-11 18:31:21 -0700</date>
            <delta_ts>2011-05-13 16:26:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60682-20110511183120.patch</filename>
            <type>text/plain</type>
            <size>64209</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2Mjk4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTEtMDUtMTEgIENocmlzIFJv
Z2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgRHluYW1pY3NDb21wcmVzc29yTm9kZSBpbXBsZW1lbnRh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA2
ODIKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8gQVBJIGlzIG5vdCB5ZXQgaW1w
bGVtZW50ZWQuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6OkR5bmFtaWNzQ29tcHJlc3Nv
cik6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6OmluaXRpYWxpemVQYXJh
bWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcjo6cGFyYW1ldGVy
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yOjpzZXRFbXBoYXNp
c1N0YWdlUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6
OnNldEVtcGhhc2lzUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXBy
ZXNzb3I6OnByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yOjpy
ZXNldCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yOjppc1N0ZXJlbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6OnNhbXBsZVJhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yOjpueXF1aXN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnNhdHVyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nv
cktlcm5lbDo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkR5
bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0UHJlRGVsYXlUaW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3Jl
OjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnJlc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6Om1ldGVyaW5nR2Fpbik6CisgICAgICAgIChXZWJD
b3JlOjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OmxhdGVuY3lGcmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpzYW1wbGVSYXRlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9hdWRpby9aZXJvUG9sZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
WmVyb1BvbGU6OnByb2Nlc3MpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1plcm9Qb2xlLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WmVyb1BvbGU6Olplcm9Qb2xlKToKKyAgICAgICAg
KFdlYkNvcmU6Olplcm9Qb2xlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpaZXJvUG9sZTo6
c2V0WmVybyk6CisgICAgICAgIChXZWJDb3JlOjpaZXJvUG9sZTo6c2V0UG9sZSk6CisgICAgICAg
IChXZWJDb3JlOjpaZXJvUG9sZTo6emVybyk6CisgICAgICAgIChXZWJDb3JlOjpaZXJvUG9sZTo6
cG9sZSk6CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlRHluYW1pY3NDb21wcmVzc29yKToKKyAgICAgICAg
KiB3ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NvbnRl
eHQuaWRsOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvTm9kZS5oOgorICAgICAgICAqIHdlYmF1
ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkR5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OkR5bmFtaWNzQ29tcHJlc3Nvck5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yTm9kZTo6fkR5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yTm9kZTo6cHJvY2Vzcyk6
CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3JOb2RlOjpyZXNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3JOb2RlOjppbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OnVuaW5pdGlhbGl6ZSk6CisgICAg
ICAgICogd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OmNyZWF0ZSk6CisgICAgICAgICogd2Vi
YXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5pZGw6IEFkZGVkLgorCiAyMDExLTA1LTExICBL
ZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
aW1pdHJpIEdsYXprb3YuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtl
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlz
aW9uIDg2MjkyKQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2lu
ZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCBET01fQ0xBU1NFUyA9IFwKICAgICBBdWRpb1NvdXJj
ZU5vZGUgXAogICAgIENvbnZvbHZlck5vZGUgXAogICAgIERlbGF5Tm9kZSBcCisgICAgRHluYW1p
Y3NDb21wcmVzc29yTm9kZSBcCiAgICAgSGlnaFBhc3MyRmlsdGVyTm9kZSBcCiAgICAgSmF2YVNj
cmlwdEF1ZGlvTm9kZSBcCiAgICAgTG93UGFzczJGaWx0ZXJOb2RlIFwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHJldmlzaW9uIDg2MjkyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDA1LDYgKzE0MDUsNyBAQAogICAgICAgICAgICAgJ3dlYmF1ZGlv
L0F1ZGlvU291cmNlTm9kZS5pZGwnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0NvbnZvbHZlck5v
ZGUuaWRsJywKICAgICAgICAgICAgICd3ZWJhdWRpby9EZWxheU5vZGUuaWRsJywKKyAgICAgICAg
ICAgICd3ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbCcsCiAgICAgICAgICAgICAn
d2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwnLAogICAgICAgICAgICAgJ3dlYmF1ZGlv
L0phdmFTY3JpcHRBdWRpb05vZGUuaWRsJywKICAgICAgICAgICAgICd3ZWJhdWRpby9Mb3dQYXNz
MkZpbHRlck5vZGUuaWRsJywKQEAgLTM2NTMsNiArMzY1NCwxMCBAQAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2F1ZGlvL0Rlbm9ybWFsRGlzYWJsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
YXVkaW8vRGlzdGFuY2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9EaXN0YW5j
ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuY3Bw
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQYW5uZXIuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2F1ZGlvL0ZGVENvbnZvbHZlci5jcHAnLApAQCAtMzY4Niw2ICszNjkxLDgg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9TaW5jUmVzYW1wbGVyLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2F1ZGlvL1ZlY3Rvck1hdGguY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9hdWRpby9WZWN0b3JNYXRoLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL1pl
cm9Qb2xlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vWmVyb1BvbGUuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vY2hyb21pdW0vQXVkaW9CdXNDaHJvbWl1bS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL2ZmdHcvRkZURnJhbWVGRlRXLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvQnVzTWFjLm1tJywKQEAgLTU5NDIs
NiArNTk0OSw4IEBACiAgICAgICAgICAgICAnd2ViYXVkaW8vRGVsYXlOb2RlLmgnLAogICAgICAg
ICAgICAgJ3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmNwcCcsCiAgICAgICAgICAgICAnd2ViYXVk
aW8vRGVsYXlQcm9jZXNzb3IuaCcsCisgICAgICAgICAgICAnd2ViYXVkaW8vRHluYW1pY3NDb21w
cmVzc29yTm9kZS5jcHAnLAorICAgICAgICAgICAgJ3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
ck5vZGUuaCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5jcHAn
LAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaCcsCiAgICAgICAg
ICAgICAnd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHAnLApJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
ODYyOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTU4NTcsNiArNTg1NywxNiBAQAogCQlGRDMxNjBCRTEyQjAy
NzJBMDBDMUEzNTkgLyogQXVkaW9GaWxlUmVhZGVyTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMzE2MEI4MTJCMDI3MkEwMEMxQTM1OSAvKiBB
dWRpb0ZpbGVSZWFkZXJNYWMuY3BwICovOyB9OwogCQlGRDMxNjBCRjEyQjAyNzJBMDBDMUEzNTkg
LyogQXVkaW9GaWxlUmVhZGVyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRDMxNjBCOTEyQjAyNzJBMDBDMUEzNTkgLyogQXVkaW9GaWxlUmVhZGVy
TWFjLmggKi87IH07CiAJCUZEMzE2MEMwMTJCMDI3MkEwMEMxQTM1OSAvKiBGRlRGcmFtZU1hYy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDMxNjBC
QTEyQjAyNzJBMDBDMUEzNTkgLyogRkZURnJhbWVNYWMuY3BwICovOyB9OworCQlGRDUzNzM1MjEz
N0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ1MzczNTAxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xl
LmNwcCAqLzsgfTsKKwkJRkQ1MzczNTMxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDUzNzM1MTEzN0I2
NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCAqLzsgfTsKKwkJRkQ1MzczNTYxMzdCNjUzQjAwMDA4
RENFIC8qIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDUzNzM1NDEzN0I2NTNCMDAwMDhEQ0UgLyogRHlu
YW1pY3NDb21wcmVzc29yS2VybmVsLmNwcCAqLzsgfTsKKwkJRkQ1MzczNTcxMzdCNjUzQjAwMDA4
RENFIC8qIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ1MzczNTUxMzdCNjUzQjAwMDA4RENFIC8qIER5bmFt
aWNzQ29tcHJlc3Nvcktlcm5lbC5oICovOyB9OworCQlGRDZFRDJDMzEzNkI4RTQyMDAzQ0YwNzIg
LyogRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRDZFRDJDMTEzNkI4RTQyMDAzQ0YwNzIgLyogRHluYW1pY3ND
b21wcmVzc29yTm9kZS5jcHAgKi87IH07CisJCUZENkVEMkM0MTM2QjhFNDIwMDNDRjA3MiAvKiBE
eW5hbWljc0NvbXByZXNzb3JOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRDZFRDJDMjEzNkI4RTQyMDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVz
c29yTm9kZS5oICovOyB9OworCQlGRDZFRDJDNzEzNkI4RTY2MDAzQ0YwNzIgLyogRHluYW1pY3ND
b21wcmVzc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZENkVEMkM1MTM2QjhFNjYwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3IuY3BwICov
OyB9OworCQlGRDZFRDJDODEzNkI4RTY2MDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDZFRDJDNjEz
NkI4RTY2MDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yLmggKi87IH07CisJCUZENzg2OEI5
MTM2Qjk5OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ3ODY4QjcxMzZCOTk5MjAw
RDQwM0RGIC8qIEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAgKi87IH07CisJCUZENzg2OEJB
MTM2Qjk5OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENzg2OEI4MTM2Qjk5OTIwMEQ0
MDNERiAvKiBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCAqLzsgfTsKIAkJRkRBMTVFOUQxMkIw
M0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9CdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRBMTVFODExMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVk
aW9CdWZmZXIuY3BwICovOyB9OwogCQlGREExNUU5RTEyQjAzRUUxMDAzQTU4M0EgLyogSlNBdWRp
b0J1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkRBMTVFODIxMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9CdWZmZXIuaCAqLzsgfTsKIAkJRkRB
MTVFOUYxMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQTE1RTgzMTJCMDNF
RTEwMDNBNTgzQSAvKiBKU0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAgKi87IH07CkBAIC0xMjM3
OCw2ICsxMjM4OCwxNyBAQAogCQlGRDMxNjBCODEyQjAyNzJBMDBDMUEzNTkgLyogQXVkaW9GaWxl
UmVhZGVyTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlv
RmlsZVJlYWRlck1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEMzE2MEI5
MTJCMDI3MkEwMEMxQTM1OSAvKiBBdWRpb0ZpbGVSZWFkZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9GaWxlUmVhZGVyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZEMzE2MEJBMTJCMDI3MkEwMEMxQTM1OSAvKiBGRlRGcmFtZU1hYy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGRlRGcmFtZU1hYy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZENTM3MzUwMTM3QjY1MTgwMDAwOERDRSAvKiBa
ZXJvUG9sZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBaZXJvUG9s
ZS5jcHA7IHBhdGggPSB3ZWJhdWRpby9hdWRpby9aZXJvUG9sZS5jcHA7IHNvdXJjZVRyZWUgPSBT
T1VSQ0VfUk9PVDsgfTsKKwkJRkQ1MzczNTExMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFplcm9Qb2xlLmg7IHBhdGggPSB3ZWJh
dWRpby9hdWRpby9aZXJvUG9sZS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUZE
NTM3MzU0MTM3QjY1M0IwMDAwOERDRSAvKiBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRHluYW1pY3NDb21wcmVzc29yS2Vy
bmVsLmNwcDsgcGF0aCA9IHdlYmF1ZGlvL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5j
cHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJRkQ1MzczNTUxMzdCNjUzQjAwMDA4
RENFIC8qIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuaDsgcGF0aCA9IHdlYmF1ZGlvL2F1
ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7
IH07CisJCUZENkVEMkMxMTM2QjhFNDIwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3JOb2Rl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IER5bmFtaWNzQ29tcHJl
c3Nvck5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDZFRDJDMjEzNkI4
RTQyMDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yTm9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZENkVEMkM1MTM2QjhFNjYwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXBy
ZXNzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRHluYW1pY3ND
b21wcmVzc29yLmNwcDsgcGF0aCA9IHdlYmF1ZGlvL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5j
cHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJRkQ2RUQyQzYxMzZCOEU2NjAwM0NG
MDcyIC8qIER5bmFtaWNzQ29tcHJlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBEeW5hbWljc0NvbXByZXNzb3IuaDsgcGF0aCA9IHdlYmF1ZGlvL2F1ZGlvL0R5bmFtaWNz
Q29tcHJlc3Nvci5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUZENkVEMkM5MTM2
QjhFOUQwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkQ3ODY4QjcxMzZCOTk5MjAwRDQwM0RGIC8qIEpTRHluYW1pY3NDb21wcmVz
c29yTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0R5bmFt
aWNzQ29tcHJlc3Nvck5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDc4
NjhCODEzNkI5OTkyMDBENDAzREYgLyogSlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5oOyBw
YXRoID0gLi4vLi4vV2ViS2l0QnVpbGQvUmVsZWFzZS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
RHluYW1pY3NDb21wcmVzc29yTm9kZS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CiAJ
CUZEQTE1RTgxMTJCMDNFRTEwMDNBNTgzQSAvKiBKU0F1ZGlvQnVmZmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXVkaW9CdWZmZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGREExNUU4MjEyQjAzRUUxMDAzQTU4M0EgLyogSlNBdWRpb0J1
ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0F1ZGlvQnVmZmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEQTE1RTgzMTJCMDNFRTEwMDNBNTgzQSAv
KiBKU0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xOTUyMiw2ICsxOTU0Myw5IEBACiAJCQkJRkQzMTVGRTUxMkIwMjY3NjAw
QzFBMzU5IC8qIERlbGF5Tm9kZS5pZGwgKi8sCiAJCQkJRkQzMTVGRTYxMkIwMjY3NjAwQzFBMzU5
IC8qIERlbGF5UHJvY2Vzc29yLmNwcCAqLywKIAkJCQlGRDMxNUZFNzEyQjAyNjc2MDBDMUEzNTkg
LyogRGVsYXlQcm9jZXNzb3IuaCAqLywKKwkJCQlGRDZFRDJDMTEzNkI4RTQyMDAzQ0YwNzIgLyog
RHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAgKi8sCisJCQkJRkQ2RUQyQzIxMzZCOEU0MjAwM0NG
MDcyIC8qIER5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCAqLywKKwkJCQlGRDZFRDJDOTEzNkI4RTlE
MDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yTm9kZS5pZGwgKi8sCiAJCQkJRkQzMTVGRTgx
MkIwMjY3NjAwQzFBMzU5IC8qIEhpZ2hQYXNzMkZpbHRlck5vZGUuY3BwICovLAogCQkJCUZEMzE1
RkU5MTJCMDI2NzYwMEMxQTM1OSAvKiBIaWdoUGFzczJGaWx0ZXJOb2RlLmggKi8sCiAJCQkJRkQz
MTVGRUExMkIwMjY3NjAwQzFBMzU5IC8qIEhpZ2hQYXNzMkZpbHRlck5vZGUuaWRsICovLApAQCAt
MTk1NzMsNiArMTk1OTcsMTAgQEAKIAkJCQlGRDMxNjA1OTEyQjAyNkY3MDBDMUEzNTkgLyogQ29u
ZS5oICovLAogCQkJCUZEMzE2MDVBMTJCMDI2RjcwMEMxQTM1OSAvKiBEaXN0YW5jZS5jcHAgKi8s
CiAJCQkJRkQzMTYwNUIxMkIwMjZGNzAwQzFBMzU5IC8qIERpc3RhbmNlLmggKi8sCisJCQkJRkQ2
RUQyQzUxMzZCOEU2NjAwM0NGMDcyIC8qIER5bmFtaWNzQ29tcHJlc3Nvci5jcHAgKi8sCisJCQkJ
RkQ2RUQyQzYxMzZCOEU2NjAwM0NGMDcyIC8qIER5bmFtaWNzQ29tcHJlc3Nvci5oICovLAorCQkJ
CUZENTM3MzU0MTM3QjY1M0IwMDAwOERDRSAvKiBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3Bw
ICovLAorCQkJCUZENTM3MzU1MTM3QjY1M0IwMDAwOERDRSAvKiBEeW5hbWljc0NvbXByZXNzb3JL
ZXJuZWwuaCAqLywKIAkJCQlGRDE2NjBBNDEzNzg3QzZEMDAxRkZBN0IgLyogRGVub3JtYWxEaXNh
Ymxlci5oICovLAogCQkJCUZEMzE2MDVDMTJCMDI2RjcwMEMxQTM1OSAvKiBFcXVhbFBvd2VyUGFu
bmVyLmNwcCAqLywKIAkJCQlGRDMxNjA1RDEyQjAyNkY3MDBDMUEzNTkgLyogRXF1YWxQb3dlclBh
bm5lci5oICovLApAQCAtMTk2MDQsNiArMTk2MzIsOCBAQAogCQkJCUZEMzE2MDc3MTJCMDI2Rjcw
MEMxQTM1OSAvKiBSZXZlcmJJbnB1dEJ1ZmZlci5oICovLAogCQkJCUZEMzE2MDc4MTJCMDI2Rjcw
MEMxQTM1OSAvKiBWZWN0b3JNYXRoLmNwcCAqLywKIAkJCQlGRDMxNjA3OTEyQjAyNkY3MDBDMUEz
NTkgLyogVmVjdG9yTWF0aC5oICovLAorCQkJCUZENTM3MzUwMTM3QjY1MTgwMDAwOERDRSAvKiBa
ZXJvUG9sZS5jcHAgKi8sCisJCQkJRkQ1MzczNTExMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xl
LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGF1ZGlvOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKQEAgLTE5NjU2LDYgKzE5Njg2LDggQEAKIAkJCQlGREExNUVCQzEyQjAzRjBCMDAzQTU4M0Eg
LyogSlNDb252b2x2ZXJOb2RlLmggKi8sCiAJCQkJRkRBMTVFQ0YxMkIwM0Y5NDAwM0E1ODNBIC8q
IEpTRGVsYXlOb2RlLmNwcCAqLywKIAkJCQlGREExNUVEMDEyQjAzRjk0MDAzQTU4M0EgLyogSlNE
ZWxheU5vZGUuaCAqLywKKwkJCQlGRDc4NjhCNzEzNkI5OTkyMDBENDAzREYgLyogSlNEeW5hbWlj
c0NvbXByZXNzb3JOb2RlLmNwcCAqLywKKwkJCQlGRDc4NjhCODEzNkI5OTkyMDBENDAzREYgLyog
SlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmggKi8sCiAJCQkJRkRBMTVFQkYxMkIwM0YyRDAwM0E1
ODNBIC8qIEpTSGlnaFBhc3MyRmlsdGVyTm9kZS5jcHAgKi8sCiAJCQkJRkRBMTVFQzAxMkIwM0Yy
RDAwM0E1ODNBIC8qIEpTSGlnaFBhc3MyRmlsdGVyTm9kZS5oICovLAogCQkJCUZEQTE1RUNCMTJC
MDNGNjEwMDNBNTgzQSAvKiBKU0phdmFTY3JpcHRBdWRpb05vZGUuY3BwICovLApAQCAtMjI3NTIs
MTAgKzIyNzg0LDE1IEBACiAJCQkJOTNGMTk5RUQwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9j
ZXNzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBY
U0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0UyRTBGMTJGMEZDOUMwMEMx
MzM3OSAvKiBYU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUZENkVEMkM0MTM2QjhFNDIw
MDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RDZFRDJDODEzNkI4RTY2MDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlGRDc4NjhCQTEzNkI5OTkyMDBENDAzREYgLyogSlNEeW5hbWljc0NvbXByZXNz
b3JOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0FGRkRGNzEzNzBBMEI4MDBFODk1QzAgLyog
U2hhcmVkQnVmZmVyQ1JMRkxpbmVSZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3OUUzNzE3
MTM3MzZBNjYwMEI5RTkxOSAvKiBRdW90ZWRQcmludGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZEMTY2MEE1MTM3ODdDNkQwMDFGRkE3QiAvKiBEZW5vcm1hbERpc2FibGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0U1NjQ0RTEzN0EzNEQ2MDA3RDI5MzQgLyogQ29uc29sZVR5cGVzLmggaW4g
SGVhZGVycyAqLywKKwkJCQlGRDUzNzM1MzEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCBp
biBIZWFkZXJzICovLAorCQkJCUZENTM3MzU3MTM3QjY1M0IwMDAwOERDRSAvKiBEeW5hbWljc0Nv
bXByZXNzb3JLZXJuZWwuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjU0MjAsOCArMjU0NTcsMTMgQEAK
IAkJCQk5M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmlj
b2RlU29ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzdFMkUwRTEyRjBGQzlDMDBDMTMzNzkg
LyogWFNTRmlsdGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZENkVEMkMzMTM2QjhFNDIwMDND
RjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZE
NkVEMkM3MTM2QjhFNjYwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3IuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkQ3ODY4QjkxMzZCOTk5MjAwRDQwM0RGIC8qIEpTRHluYW1pY3NDb21wcmVz
c29yTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0FGRkRGNjEzNzBBMEI4MDBFODk1QzAg
LyogU2hhcmVkQnVmZmVyQ1JMRkxpbmVSZWFkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzc5
RTM3MTYxMzczNkE2NjAwQjlFOTE5IC8qIFF1b3RlZFByaW50YWJsZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlGRDUzNzM1MjEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkQ1MzczNTYxMzdCNjUzQjAwMDA4RENFIC8qIER5bmFtaWNzQ29tcHJlc3Nv
cktlcm5lbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkR5bmFtaWNzQ29tcHJlc3Nvci5oIgorCisj
aW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJBdWRpb1V0aWxpdGllcy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBBdWRpb1V0aWxpdGllczsKKyAgICAK
K0R5bmFtaWNzQ29tcHJlc3Nvcjo6RHluYW1pY3NDb21wcmVzc29yKGJvb2wgaXNTdGVyZW8sIGRv
dWJsZSBzYW1wbGVSYXRlKQorICAgIDogbV9pc1N0ZXJlbyhpc1N0ZXJlbykKKyAgICAsIG1fc2Ft
cGxlUmF0ZShzYW1wbGVSYXRlKQorICAgICwgbV9jb21wcmVzc29yKHNhbXBsZVJhdGUpCit7Cisg
ICAgLy8gVW5pbml0aWFsaXplZCBzdGF0ZSAtIGZvciBwYXJhbWV0ZXIgcmVjYWxjdWxhdGlvbi4K
KyAgICBtX2xhc3RGaWx0ZXJTdGFnZVJhdGlvID0gLTEuMDsKKyAgICBtX2xhc3RBbmNob3IgPSAt
MS4wOworICAgIG1fbGFzdEZpbHRlclN0YWdlR2FpbiA9IC0xLjA7CisKKyAgICBpbml0aWFsaXpl
UGFyYW1ldGVycygpOworfQorCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6aW5pdGlhbGl6ZVBh
cmFtZXRlcnMoKQoreworICAgIC8vIEluaXRpYWxpemVzIGNvbXByZXNzb3IgdG8gZGVmYXVsdCB2
YWx1ZXMuCisgICAgCisgICAgbV9wYXJhbWV0ZXJzW1BhcmFtVGhyZXNob2xkXSA9IC0yNDsgLy8g
ZEIKKyAgICBtX3BhcmFtZXRlcnNbUGFyYW1IZWFkcm9vbV0gPSAyMTsgLy8gZEIKKyAgICBtX3Bh
cmFtZXRlcnNbUGFyYW1BdHRhY2tdID0gMC4wMDM7IC8vIHNlY29uZHMKKyAgICBtX3BhcmFtZXRl
cnNbUGFyYW1SZWxlYXNlXSA9IDAuMjUwOyAvLyBzZWNvbmRzCisgICAgbV9wYXJhbWV0ZXJzW1Bh
cmFtUHJlRGVsYXldID0gMC4wMDY7IC8vIHNlY29uZHMKKworICAgIC8vIFJlbGVhc2Ugem9uZSB2
YWx1ZXMgMCAtPiAxLgorICAgIG1fcGFyYW1ldGVyc1tQYXJhbVJlbGVhc2Vab25lMV0gPSAwLjA5
OworICAgIG1fcGFyYW1ldGVyc1tQYXJhbVJlbGVhc2Vab25lMl0gPSAwLjE2OworICAgIG1fcGFy
YW1ldGVyc1tQYXJhbVJlbGVhc2Vab25lM10gPSAwLjQyOworICAgIG1fcGFyYW1ldGVyc1tQYXJh
bVJlbGVhc2Vab25lNF0gPSAwLjk4OworCisgICAgbV9wYXJhbWV0ZXJzW1BhcmFtRmlsdGVyU3Rh
Z2VHYWluXSA9IDQuNDsgLy8gZEIKKyAgICBtX3BhcmFtZXRlcnNbUGFyYW1GaWx0ZXJTdGFnZVJh
dGlvXSA9IDIuMDsKKyAgICBtX3BhcmFtZXRlcnNbUGFyYW1GaWx0ZXJBbmNob3JdID0gMTUwMDAu
MCAvIG55cXVpc3QoKTsKKyAgICAKKyAgICBtX3BhcmFtZXRlcnNbUGFyYW1Qb3N0R2Fpbl0gPSAw
LjA7IC8vIGRCCisKKyAgICAvLyBFcXVhbC1wb3dlciBjcm9zc2ZhZGUgKDAgLT4gMSkuCisgICAg
bV9wYXJhbWV0ZXJzW1BhcmFtRWZmZWN0QmxlbmRdID0gMS4wOworfQorCitkb3VibGUgRHluYW1p
Y3NDb21wcmVzc29yOjpwYXJhbWV0ZXJWYWx1ZSh1bnNpZ25lZCBwYXJhbWV0ZXJJRCkKK3sKKyAg
ICBBU1NFUlQocGFyYW1ldGVySUQgPCBQYXJhbUxhc3QpOworICAgIHJldHVybiBtX3BhcmFtZXRl
cnNbcGFyYW1ldGVySURdOworfQorCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0RW1waGFz
aXNTdGFnZVBhcmFtZXRlcnModW5zaWduZWQgc3RhZ2VJbmRleCwgZmxvYXQgZ2FpbiwgZmxvYXQg
bm9ybWFsaXplZEZyZXF1ZW5jeSAvKiAwIC0+IDEgKi8pCit7CisgICAgZmxvYXQgZ2sgPSAxLjAg
LSBnYWluIC8gMjAuMDsKKyAgICBmbG9hdCBmMSA9IG5vcm1hbGl6ZWRGcmVxdWVuY3kgKiBnazsK
KyAgICBmbG9hdCBmMiA9IG5vcm1hbGl6ZWRGcmVxdWVuY3kgLyBnazsKKyAgICBmbG9hdCByMSA9
IGV4cCgtZjEgKiBNX1BJKTsKKyAgICBmbG9hdCByMiA9IGV4cCgtZjIgKiBNX1BJKTsKKworICAg
IC8vIFNldCBwcmUtZmlsdGVyIHplcm8gYW5kIHBvbGUgdG8gY3JlYXRlIGFuIGVtcGhhc2lzIGZp
bHRlci4KKyAgICBtX3ByZUZpbHRlcltzdGFnZUluZGV4XS5zZXRaZXJvKHIxKTsKKyAgICBtX3By
ZUZpbHRlcltzdGFnZUluZGV4XS5zZXRQb2xlKHIyKTsKKyAgICBtX3ByZUZpbHRlclJbc3RhZ2VJ
bmRleF0uc2V0WmVybyhyMSk7CisgICAgbV9wcmVGaWx0ZXJSW3N0YWdlSW5kZXhdLnNldFBvbGUo
cjIpOworCisgICAgLy8gU2V0IHBvc3QtZmlsdGVyIHdpdGggemVybyBhbmQgcG9sZSByZXZlcnNl
ZCB0byBjcmVhdGUgdGhlIGRlLWVtcGhhc2lzIGZpbHRlci4KKyAgICAvLyBJZiB0aGVyZSB3ZXJl
IG5vIGNvbXByZXNzb3Iga2VybmVsIGluIGJldHdlZW4sIHRoZXkgd291bGQgY2FuY2VsIGVhY2gg
b3RoZXIgb3V0IChhbGxwYXNzIGZpbHRlcikuCisgICAgbV9wb3N0RmlsdGVyW3N0YWdlSW5kZXhd
LnNldFplcm8ocjIpOworICAgIG1fcG9zdEZpbHRlcltzdGFnZUluZGV4XS5zZXRQb2xlKHIxKTsK
KyAgICBtX3Bvc3RGaWx0ZXJSW3N0YWdlSW5kZXhdLnNldFplcm8ocjIpOworICAgIG1fcG9zdEZp
bHRlclJbc3RhZ2VJbmRleF0uc2V0UG9sZShyMSk7Cit9CisKK3ZvaWQgRHluYW1pY3NDb21wcmVz
c29yOjpzZXRFbXBoYXNpc1BhcmFtZXRlcnMoZmxvYXQgZ2FpbiwgZmxvYXQgYW5jaG9yRnJlcSwg
ZmxvYXQgZmlsdGVyU3RhZ2VSYXRpbykKK3sKKyAgICBzZXRFbXBoYXNpc1N0YWdlUGFyYW1ldGVy
cygwLCBnYWluLCBhbmNob3JGcmVxKTsKKyAgICBzZXRFbXBoYXNpc1N0YWdlUGFyYW1ldGVycygx
LCBnYWluLCBhbmNob3JGcmVxIC8gZmlsdGVyU3RhZ2VSYXRpbyk7CisgICAgc2V0RW1waGFzaXNT
dGFnZVBhcmFtZXRlcnMoMiwgZ2FpbiwgYW5jaG9yRnJlcSAvIChmaWx0ZXJTdGFnZVJhdGlvICog
ZmlsdGVyU3RhZ2VSYXRpbykpOworICAgIHNldEVtcGhhc2lzU3RhZ2VQYXJhbWV0ZXJzKDMsIGdh
aW4sIGFuY2hvckZyZXEgLyAoZmlsdGVyU3RhZ2VSYXRpbyAqIGZpbHRlclN0YWdlUmF0aW8gKiBm
aWx0ZXJTdGFnZVJhdGlvKSk7Cit9CisKK3ZvaWQgRHluYW1pY3NDb21wcmVzc29yOjpwcm9jZXNz
KEF1ZGlvQnVzKiBzb3VyY2VCdXMsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbkJ1cywgdW5zaWduZWQg
ZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIGZsb2F0KiBzb3VyY2VMID0gc291cmNlQnVzLT5jaGFu
bmVsKDApLT5kYXRhKCk7CisgICAgZmxvYXQqIHNvdXJjZVI7CisKKyAgICBpZiAoc291cmNlQnVz
LT5udW1iZXJPZkNoYW5uZWxzKCkgPiAxKQorICAgICAgICBzb3VyY2VSID0gc291cmNlQnVzLT5j
aGFubmVsKDEpLT5kYXRhKCk7CisgICAgZWxzZQorICAgICAgICBzb3VyY2VSID0gc291cmNlTDsK
KworICAgIEFTU0VSVChkZXN0aW5hdGlvbkJ1cy0+bnVtYmVyT2ZDaGFubmVscygpID09IDIpOwor
CisgICAgZmxvYXQqIGRlc3RpbmF0aW9uTCA9IGRlc3RpbmF0aW9uQnVzLT5jaGFubmVsKDApLT5k
YXRhKCk7CisgICAgZmxvYXQqIGRlc3RpbmF0aW9uUiA9IGRlc3RpbmF0aW9uQnVzLT5jaGFubmVs
KDEpLT5kYXRhKCk7CisKKyAgICBmbG9hdCBmaWx0ZXJTdGFnZUdhaW4gPSBwYXJhbWV0ZXJWYWx1
ZShQYXJhbUZpbHRlclN0YWdlR2Fpbik7CisKKyAgICBmbG9hdCBmaWx0ZXJTdGFnZVJhdGlvID0g
cGFyYW1ldGVyVmFsdWUoUGFyYW1GaWx0ZXJTdGFnZVJhdGlvKTsKKyAgICAvLyBmaWx0ZXJEID0g
MS4xICsgZmlsdGVyRDsKKworICAgIGZsb2F0IGFuY2hvciA9IHBhcmFtZXRlclZhbHVlKFBhcmFt
RmlsdGVyQW5jaG9yKTsKKworICAgIGlmIChmaWx0ZXJTdGFnZUdhaW4gIT0gbV9sYXN0RmlsdGVy
U3RhZ2VHYWluIHx8IGZpbHRlclN0YWdlUmF0aW8gIT0gbV9sYXN0RmlsdGVyU3RhZ2VSYXRpbyB8
fCBhbmNob3IgIT0gbV9sYXN0QW5jaG9yKSB7CisgICAgICAgIG1fbGFzdEZpbHRlclN0YWdlR2Fp
biA9IGZpbHRlclN0YWdlR2FpbjsKKyAgICAgICAgbV9sYXN0RmlsdGVyU3RhZ2VSYXRpbyA9IGZp
bHRlclN0YWdlUmF0aW87CisgICAgICAgIG1fbGFzdEFuY2hvciA9IGFuY2hvcjsKKworICAgICAg
ICBzZXRFbXBoYXNpc1BhcmFtZXRlcnMoZmlsdGVyU3RhZ2VHYWluLCBhbmNob3IsIGZpbHRlclN0
YWdlUmF0aW8pOworICAgIH0KKworICAgIC8vIEFwcGx5IHByZS1lbXBoYXNpcyBmaWx0ZXIuCisg
ICAgLy8gTm90ZSB0aGF0IHRoZSBmaW5hbCB0aHJlZSBzdGFnZXMgYXJlIGNvbXB1dGVkIGluLXBs
YWNlIGluIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCisgICAgbV9wcmVGaWx0ZXJbMF0ucHJvY2Vz
cyhzb3VyY2VMLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgbV9wcmVGaWx0
ZXJbMV0ucHJvY2VzcyhkZXN0aW5hdGlvbkwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNz
KTsKKyAgICBtX3ByZUZpbHRlclsyXS5wcm9jZXNzKGRlc3RpbmF0aW9uTCwgZGVzdGluYXRpb25M
LCBmcmFtZXNUb1Byb2Nlc3MpOworICAgIG1fcHJlRmlsdGVyWzNdLnByb2Nlc3MoZGVzdGluYXRp
b25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7CisKKyAgICBpZiAoaXNTdGVyZW8o
KSkgeworICAgICAgICBtX3ByZUZpbHRlclJbMF0ucHJvY2Vzcyhzb3VyY2VSLCBkZXN0aW5hdGlv
blIsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIG1fcHJlRmlsdGVyUlsxXS5wcm9jZXNzKGRl
c3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgICAgICBtX3By
ZUZpbHRlclJbMl0ucHJvY2VzcyhkZXN0aW5hdGlvblIsIGRlc3RpbmF0aW9uUiwgZnJhbWVzVG9Q
cm9jZXNzKTsKKyAgICAgICAgbV9wcmVGaWx0ZXJSWzNdLnByb2Nlc3MoZGVzdGluYXRpb25SLCBk
ZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgfQorCisgICAgZmxvYXQgZGJUaHJl
c2hvbGQgPSBwYXJhbWV0ZXJWYWx1ZShQYXJhbVRocmVzaG9sZCk7CisgICAgZmxvYXQgZGJIZWFk
cm9vbSA9IHBhcmFtZXRlclZhbHVlKFBhcmFtSGVhZHJvb20pOworICAgIGZsb2F0IGF0dGFja1Rp
bWUgPSBwYXJhbWV0ZXJWYWx1ZShQYXJhbUF0dGFjayk7CisgICAgZmxvYXQgcmVsZWFzZVRpbWUg
PSBwYXJhbWV0ZXJWYWx1ZShQYXJhbVJlbGVhc2UpOworICAgIGZsb2F0IHByZURlbGF5VGltZSA9
IHBhcmFtZXRlclZhbHVlKFBhcmFtUHJlRGVsYXkpOworCisgICAgLy8gVGhpcyBpcyBlZmZlY3Rp
dmVseSBhIG1hc3RlciB2b2x1bWUgb24gdGhlIGNvbXByZXNzZWQgc2lnbmFsIChwcmUtYmxlbmRp
bmcpLgorICAgIGZsb2F0IGRiUG9zdEdhaW4gPSBwYXJhbWV0ZXJWYWx1ZShQYXJhbVBvc3RHYWlu
KTsKKworICAgIC8vIEVxdWFsLXBvd2VyIGJsZW5kaW5nIHZhbHVlIGZyb20gZHJ5IHRvIGNvbXBs
ZXRlbHkgcHJvY2Vzc2VkICgwIC0+IDEpCisgICAgLy8gMCBtZWFucyB0aGUgc2lnbmFsIGlzIGNv
bXBsZXRlbHkgdW5wcm9jZXNzZWQuCisgICAgLy8gMSBtaXhlcyBpbiBvbmx5IHRoZSBjb21wcmVz
c2VkIHNpZ25hbC4KKyAgICBmbG9hdCBlZmZlY3RCbGVuZCA9IHBhcmFtZXRlclZhbHVlKFBhcmFt
RWZmZWN0QmxlbmQpOworCisgICAgZG91YmxlIHJlbGVhc2Vab25lMSA9IHBhcmFtZXRlclZhbHVl
KFBhcmFtUmVsZWFzZVpvbmUxKTsKKyAgICBkb3VibGUgcmVsZWFzZVpvbmUyID0gcGFyYW1ldGVy
VmFsdWUoUGFyYW1SZWxlYXNlWm9uZTIpOworICAgIGRvdWJsZSByZWxlYXNlWm9uZTMgPSBwYXJh
bWV0ZXJWYWx1ZShQYXJhbVJlbGVhc2Vab25lMyk7CisgICAgZG91YmxlIHJlbGVhc2Vab25lNCA9
IHBhcmFtZXRlclZhbHVlKFBhcmFtUmVsZWFzZVpvbmU0KTsKKworICAgIC8vIEFwcGx5IGNvbXBy
ZXNzaW9uIHRvIHRoZSBwcmUtZmlsdGVyZWQgc2lnbmFsLgorICAgIC8vIFRoZSBwcm9jZXNzaW5n
IGlzIHBlcmZvcm1lZCBpbiBwbGFjZS4KKyAgICBtX2NvbXByZXNzb3IucHJvY2VzcyhkZXN0aW5h
dGlvbkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25MLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0aW5hdGlvblIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzVG9Qcm9jZXNzLAor
CisgICAgICAgICAgICAgICAgICAgICAgICAgZGJUaHJlc2hvbGQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgZGJIZWFkcm9vbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2tUaW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VUaW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIHByZURlbGF5VGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkYlBvc3RH
YWluLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdEJsZW5kLAorCisgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVsZWFzZVpvbmUxLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJl
bGVhc2Vab25lMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlWm9uZTMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZVpvbmU0CisgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKKworICAgIC8vIEFwcGx5IGRlLWVtcGhhc2lzIGZpbHRlci4KKyAgICBtX3Bvc3RGaWx0
ZXJbMF0ucHJvY2VzcyhkZXN0aW5hdGlvbkwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNz
KTsKKyAgICBtX3Bvc3RGaWx0ZXJbMV0ucHJvY2VzcyhkZXN0aW5hdGlvbkwsIGRlc3RpbmF0aW9u
TCwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBtX3Bvc3RGaWx0ZXJbMl0ucHJvY2VzcyhkZXN0aW5h
dGlvbkwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBtX3Bvc3RGaWx0ZXJb
M10ucHJvY2VzcyhkZXN0aW5hdGlvbkwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Qcm9jZXNzKTsK
KworICAgIGlmIChpc1N0ZXJlbygpKSB7CisgICAgICAgIG1fcG9zdEZpbHRlclJbMF0ucHJvY2Vz
cyhkZXN0aW5hdGlvblIsIGRlc3RpbmF0aW9uUiwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAgICAg
bV9wb3N0RmlsdGVyUlsxXS5wcm9jZXNzKGRlc3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBmcmFt
ZXNUb1Byb2Nlc3MpOworICAgICAgICBtX3Bvc3RGaWx0ZXJSWzJdLnByb2Nlc3MoZGVzdGluYXRp
b25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIG1fcG9zdEZpbHRl
clJbM10ucHJvY2VzcyhkZXN0aW5hdGlvblIsIGRlc3RpbmF0aW9uUiwgZnJhbWVzVG9Qcm9jZXNz
KTsKKyAgICB9Cit9CisKK3ZvaWQgRHluYW1pY3NDb21wcmVzc29yOjpyZXNldCgpCit7CisgICAg
bV9sYXN0RmlsdGVyU3RhZ2VSYXRpbyA9IC0xLjA7IC8vIGZvciByZWNhbGMKKyAgICBtX2xhc3RB
bmNob3IgPSAtMS4wOworICAgIG1fbGFzdEZpbHRlclN0YWdlR2FpbiA9IC0xLjA7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNDsgKytpKSB7CisgICAgICAgIG1fcHJlRmlsdGVyW2ld
LnJlc2V0KCk7CisgICAgICAgIG1fcHJlRmlsdGVyUltpXS5yZXNldCgpOworICAgICAgICBtX3Bv
c3RGaWx0ZXJbaV0ucmVzZXQoKTsKKyAgICAgICAgbV9wb3N0RmlsdGVyUltpXS5yZXNldCgpOwor
ICAgIH0KKworICAgIG1fY29tcHJlc3Nvci5yZXNldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3Iu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIER5bmFtaWNzQ29tcHJl
c3Nvcl9oCisjZGVmaW5lIER5bmFtaWNzQ29tcHJlc3Nvcl9oCisKKyNpbmNsdWRlICJBdWRpb0Fy
cmF5LmgiCisjaW5jbHVkZSAiRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmgiCisjaW5jbHVkZSAi
WmVyb1BvbGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1czsKKwor
Ly8gRHluYW1pY3NDb21wcmVzc29yIGltcGxlbWVudHMgYSBmbGV4aWJsZSBhdWRpbyBkeW5hbWlj
cyBjb21wcmVzc2lvbiBlZmZlY3Qgc3VjaCBhcworLy8gaXMgY29tbW9ubHkgdXNlZCBpbiBtdXNp
Y2FsIHByb2R1Y3Rpb24gYW5kIGdhbWUgYXVkaW8uIEl0IGxvd2VycyB0aGUgdm9sdW1lCisvLyBv
ZiB0aGUgbG91ZGVzdCBwYXJ0cyBvZiB0aGUgc2lnbmFsIGFuZCByYWlzZXMgdGhlIHZvbHVtZSBv
ZiB0aGUgc29mdGVzdCBwYXJ0cywKKy8vIG1ha2luZyB0aGUgc291bmQgcmljaGVyLCBmdWxsZXIs
IGFuZCBtb3JlIGNvbnRyb2xsZWQuCisKK2NsYXNzIER5bmFtaWNzQ29tcHJlc3NvciB7CitwdWJs
aWM6CisgICAgZW51bSB7CisgICAgICAgIFBhcmFtVGhyZXNob2xkLAorICAgICAgICBQYXJhbUhl
YWRyb29tLAorICAgICAgICBQYXJhbUF0dGFjaywKKyAgICAgICAgUGFyYW1SZWxlYXNlLAorICAg
ICAgICBQYXJhbVByZURlbGF5LAorICAgICAgICBQYXJhbVJlbGVhc2Vab25lMSwKKyAgICAgICAg
UGFyYW1SZWxlYXNlWm9uZTIsCisgICAgICAgIFBhcmFtUmVsZWFzZVpvbmUzLAorICAgICAgICBQ
YXJhbVJlbGVhc2Vab25lNCwKKyAgICAgICAgUGFyYW1Qb3N0R2FpbiwKKyAgICAgICAgUGFyYW1S
ZWR1Y3Rpb24sCisgICAgICAgIFBhcmFtRmlsdGVyU3RhZ2VHYWluLAorICAgICAgICBQYXJhbUZp
bHRlclN0YWdlUmF0aW8sCisgICAgICAgIFBhcmFtRmlsdGVyQW5jaG9yLAorICAgICAgICBQYXJh
bUVmZmVjdEJsZW5kLAorICAgICAgICBQYXJhbUxhc3QKKyAgICB9OworCisgICAgRHluYW1pY3ND
b21wcmVzc29yKGJvb2wgaXNTdGVyZW8sIGRvdWJsZSBzYW1wbGVSYXRlKTsKKworICAgIHZvaWQg
cHJvY2VzcyhBdWRpb0J1cyogc291cmNlQnVzLCBBdWRpb0J1cyogZGVzdGluYXRpb25CdXMsIHVu
c2lnbmVkIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgdm9pZCByZXNldCgpOworCisgICAgZG91Ymxl
IHBhcmFtZXRlclZhbHVlKHVuc2lnbmVkIHBhcmFtZXRlcklEKTsKKworICAgIGJvb2wgaXNTdGVy
ZW8oKSBjb25zdCB7IHJldHVybiBtX2lzU3RlcmVvOyB9CisgICAgZG91YmxlIHNhbXBsZVJhdGUo
KSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KKyAgICBkb3VibGUgbnlxdWlzdCgpIGNv
bnN0IHsgcmV0dXJuIDAuNSAqIG1fc2FtcGxlUmF0ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgLy8g
bV9wYXJhbWV0ZXJzIGhvbGRzIHRoZSB0d2Vha2FibGUgY29tcHJlc3NvciBwYXJhbWV0ZXJzLgor
ICAgIC8vIEZJWE1FOiBleHBvc2Ugc29tZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgb25lcyAoc3Vj
aCBhcyB0aHJlc2hvbGQsIGF0dGFjaywgcmVsZWFzZSkKKyAgICAvLyBhcyBEeW5hbWljc0NvbXBy
ZXNzb3JOb2RlIGF0dHJpYnV0ZXMuCisgICAgZG91YmxlIG1fcGFyYW1ldGVyc1tQYXJhbUxhc3Rd
OworICAgIHZvaWQgaW5pdGlhbGl6ZVBhcmFtZXRlcnMoKTsKKworICAgIGJvb2wgbV9pc1N0ZXJl
bzsKKyAgICBkb3VibGUgbV9zYW1wbGVSYXRlOworCisgICAgLy8gRW1waGFzaXMgZmlsdGVyIGNv
bnRyb2xzLgorICAgIGZsb2F0IG1fbGFzdEZpbHRlclN0YWdlUmF0aW87CisgICAgZmxvYXQgbV9s
YXN0QW5jaG9yOworICAgIGZsb2F0IG1fbGFzdEZpbHRlclN0YWdlR2FpbjsKKworICAgIC8vIEVt
cGhhc2lzIGZpbHRlcnMuCisgICAgWmVyb1BvbGUgbV9wcmVGaWx0ZXJbNF07CisgICAgWmVyb1Bv
bGUgbV9wcmVGaWx0ZXJSWzRdOworICAgIFplcm9Qb2xlIG1fcG9zdEZpbHRlcls0XTsKKyAgICBa
ZXJvUG9sZSBtX3Bvc3RGaWx0ZXJSWzRdOworCisgICAgdm9pZCBzZXRFbXBoYXNpc1N0YWdlUGFy
YW1ldGVycyh1bnNpZ25lZCBzdGFnZUluZGV4LCBmbG9hdCBnYWluLCBmbG9hdCBub3JtYWxpemVk
RnJlcXVlbmN5IC8qIDAgLT4gMSAqLyk7CisgICAgdm9pZCBzZXRFbXBoYXNpc1BhcmFtZXRlcnMo
ZmxvYXQgZ2FpbiwgZmxvYXQgYW5jaG9yRnJlcSwgZmxvYXQgZmlsdGVyU3RhZ2VSYXRpbyk7CisK
KyAgICAvLyBUaGUgY29yZSBjb21wcmVzc29yLgorICAgIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5l
bCBtX2NvbXByZXNzb3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBEeW5hbWljc0NvbXByZXNzb3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29y
S2VybmVsLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiRHluYW1pY3NDb21w
cmVzc29yS2VybmVsLmgiCisKKyNpbmNsdWRlICJBdWRpb1V0aWxpdGllcy5oIgorI2luY2x1ZGUg
PGFsZ29yaXRobT4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit1c2luZyBuYW1lc3BhY2UgQXVkaW9VdGlsaXRpZXM7CisKKy8vIE1ldGVyaW5nIGhpdHMg
cGVha3MgaW5zdGFudGx5LCBidXQgcmVsZWFzZXMgdGhpcyBmYXN0IChpbiBzZWNvbmRzKS4KK2Nv
bnN0IGRvdWJsZSBtZXRlcmluZ1JlbGVhc2VUaW1lQ29uc3RhbnQgPSAwLjMyNTsKKyAgICAKKy8v
IEV4cG9uZW50aWFsIHNhdHVyYXRpb24gY3VydmUuCitzdGF0aWMgZG91YmxlIHNhdHVyYXRlKGRv
dWJsZSB4LCBkb3VibGUgaykKK3sKKyAgICByZXR1cm4gMS4wIC0gZXhwKC1rICogeCk7Cit9CisK
K0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsKGRvdWJs
ZSBzYW1wbGVSYXRlKQorICAgIDogbV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUpCisgICAgLCBtX2xh
c3RQcmVEZWxheUZyYW1lcyhEZWZhdWx0UHJlRGVsYXlGcmFtZXMpCisgICAgLCBtX3ByZURlbGF5
QnVmZmVyTChNYXhQcmVEZWxheUZyYW1lcykKKyAgICAsIG1fcHJlRGVsYXlCdWZmZXJSKE1heFBy
ZURlbGF5RnJhbWVzKQorICAgICwgbV9wcmVEZWxheVJlYWRJbmRleCgwKQorICAgICwgbV9wcmVE
ZWxheVdyaXRlSW5kZXgoRGVmYXVsdFByZURlbGF5RnJhbWVzKQoreworICAgIC8vIEluaXRpYWxp
emVzIG1vc3QgbWVtYmVyIHZhcmlhYmxlcworICAgIHJlc2V0KCk7CisgICAgCisgICAgbV9tZXRl
cmluZ1JlbGVhc2VLID0gZGlzY3JldGVUaW1lQ29uc3RhbnRGb3JTYW1wbGVSYXRlKG1ldGVyaW5n
UmVsZWFzZVRpbWVDb25zdGFudCwgc2FtcGxlUmF0ZSk7Cit9CisKK3ZvaWQgRHluYW1pY3NDb21w
cmVzc29yS2VybmVsOjpzZXRQcmVEZWxheVRpbWUoZmxvYXQgcHJlRGVsYXlUaW1lKQoreworICAg
IC8vIFJlLWNvbmZpZ3VyZSBsb29rLWFoZWFkIHNlY3Rpb24gcHJlLWRlbGF5IGlmIGRlbGF5IHRp
bWUgaGFzIGNoYW5nZWQuCisgICAgdW5zaWduZWQgcHJlRGVsYXlGcmFtZXMgPSBwcmVEZWxheVRp
bWUgLyBzYW1wbGVSYXRlKCk7CisgICAgaWYgKHByZURlbGF5RnJhbWVzID4gTWF4UHJlRGVsYXlG
cmFtZXMgLSAxKQorICAgICAgICBwcmVEZWxheUZyYW1lcyA9IE1heFByZURlbGF5RnJhbWVzIC0g
MTsKKyAgICAgICAgCisgICAgaWYgKG1fbGFzdFByZURlbGF5RnJhbWVzICE9IHByZURlbGF5RnJh
bWVzKSB7CisgICAgICAgIG1fbGFzdFByZURlbGF5RnJhbWVzID0gcHJlRGVsYXlGcmFtZXM7Cisg
ICAgICAgIG1fcHJlRGVsYXlCdWZmZXJMLnplcm8oKTsKKyAgICAgICAgbV9wcmVEZWxheUJ1ZmZl
clIuemVybygpOworICAgICAgICBtX3ByZURlbGF5UmVhZEluZGV4ID0gMDsKKyAgICAgICAgbV9w
cmVEZWxheVdyaXRlSW5kZXggPSBwcmVEZWxheUZyYW1lczsKKyAgICB9Cit9CisKK3ZvaWQgRHlu
YW1pY3NDb21wcmVzc29yS2VybmVsOjpwcm9jZXNzKGZsb2F0KiBzb3VyY2VMLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uTCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBzb3VyY2VSLCAvKiBzdGVy
ZW8tbGlua2VkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9h
dCogZGVzdGluYXRpb25SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgZnJhbWVzVG9Qcm9jZXNzLAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCBkYlRocmVzaG9sZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IGRiSGVhZHJvb20sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCBhdHRhY2tUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgcmVsZWFzZVRpbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmbG9hdCBwcmVEZWxheVRpbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCBkYlBvc3RHYWluLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZWZmZWN0QmxlbmQsIC8qIGVxdWFsIHBvd2VyIGNy
b3NzZmFkZSAqLworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9h
dCByZWxlYXNlWm9uZTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCByZWxlYXNlWm9uZTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCByZWxlYXNlWm9uZTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCByZWxlYXNlWm9uZTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkKK3sKKyAgICBib29sIGlzU3RlcmVvID0gZGVzdGluYXRpb25SOworICAgIGZsb2F0
IHNhbXBsZVJhdGUgPSB0aGlzLT5zYW1wbGVSYXRlKCk7CisKKyAgICBmbG9hdCBkcnlNaXggPSAx
LjAgLSBlZmZlY3RCbGVuZDsKKyAgICBmbG9hdCB3ZXRNaXggPSBlZmZlY3RCbGVuZDsKKworICAg
IC8vIFRocmVzaG9sZCBhbmQgaGVhZHJvb20uCisgICAgZG91YmxlIGxpbmVhclRocmVzaG9sZCA9
IGRlY2liZWxzVG9MaW5lYXIoZGJUaHJlc2hvbGQpOworICAgIGRvdWJsZSBsaW5lYXJIZWFkcm9v
bSA9IGRlY2liZWxzVG9MaW5lYXIoZGJIZWFkcm9vbSk7CisKKyAgICAvLyBNYWtldXAgZ2Fpbi4K
KyAgICBkb3VibGUgbWF4aW11bSA9IDEuMDUgKiBsaW5lYXJIZWFkcm9vbSAqIGxpbmVhclRocmVz
aG9sZDsKKyAgICBkb3VibGUga2sgPSAobWF4aW11bSAtIGxpbmVhclRocmVzaG9sZCk7CisKKyAg
ICBkb3VibGUgZnVsbFJhbmdlR2FpbiA9IChsaW5lYXJUaHJlc2hvbGQgKyBrayAqIHNhdHVyYXRl
KDEuMCAtIGxpbmVhclRocmVzaG9sZCwgMS4wKSk7CisgICAgZG91YmxlIGZ1bGxSYW5nZU1ha2V1
cEdhaW4gPSAxLjAgLyBmdWxsUmFuZ2VHYWluOworICAgIC8vIEVtcGlyaWNhbC9wZXJjZXB0dWFs
IHR1bmluZy4KKyAgICBmdWxsUmFuZ2VNYWtldXBHYWluID0gcG93KGZ1bGxSYW5nZU1ha2V1cEdh
aW4sIDAuNik7CisKKyAgICBmbG9hdCBtYXN0ZXJMaW5lYXJHYWluID0gZGVjaWJlbHNUb0xpbmVh
cihkYlBvc3RHYWluKSAqIGZ1bGxSYW5nZU1ha2V1cEdhaW47CisKKyAgICAvLyBBdHRhY2sgcGFy
YW1ldGVycy4KKyAgICBhdHRhY2tUaW1lID0gbWF4KDAuMDAxZiwgYXR0YWNrVGltZSk7CisgICAg
ZmxvYXQgYXR0YWNrRnJhbWVzID0gYXR0YWNrVGltZSAqIHNhbXBsZVJhdGU7CisKKyAgICAvLyBS
ZWxlYXNlIHBhcmFtZXRlcnMuCisgICAgZmxvYXQgcmVsZWFzZUZyYW1lcyA9IHNhbXBsZVJhdGUg
KiByZWxlYXNlVGltZTsKKworICAgIC8vIENyZWF0ZSBhIHNtb290aCBmdW5jdGlvbiB3aGljaCBw
YXNzZXMgdGhyb3VnaCBmb3VyIHBvaW50cy4KKworICAgIC8vIFBvbHlub21pYWwgb2YgdGhlIGZv
cm0KKyAgICAvLyB5ID0gYSArIGIqeCArIGMqeF4yICsgZCp4XjMgKyBlKnheNDsKKworICAgIGRv
dWJsZSB5MSA9IHJlbGVhc2VGcmFtZXMgKiByZWxlYXNlWm9uZTE7CisgICAgZG91YmxlIHkyID0g
cmVsZWFzZUZyYW1lcyAqIHJlbGVhc2Vab25lMjsKKyAgICBkb3VibGUgeTMgPSByZWxlYXNlRnJh
bWVzICogcmVsZWFzZVpvbmUzOworICAgIGRvdWJsZSB5NCA9IHJlbGVhc2VGcmFtZXMgKiByZWxl
YXNlWm9uZTQ7CisKKyAgICBkb3VibGUga0EgPSAwLjk5OTk5OTk5OTk5OTk5OTgqeTEgKyAxLjg0
MzIyMTk2ODQzMjM5MjNlLTE2KnkyIC0gMS45MzczMzk0MzUxNjc2NDIzZS0xNip5MyArIDguODI0
NTE2MDExODE2MjQ1ZS0xOCp5NDsKKyAgICBkb3VibGUga0IgPSAtMS41Nzg4MzIwMzUyODQ1ODg4
KnkxICsgMi4zMzA1ODM3MDMyMDc0Mjg2KnkyIC0gMC45MTQxMTk0MjA0ODQwNDI5KnkzICsgMC4x
NjIzNjc3NTI1NjEyMDMyKnk0OworICAgIGRvdWJsZSBrQyA9IDAuNTMzNDE0Mjg2OTEwNjQyNCp5
MSAtIDEuMjcyNzM2Nzg5MjEzNjMxKnkyICsgMC45MjU4ODU2MDQyMjA3NTEyKnkzIC0gMC4xODY1
NjMxMDE5MTc3NjIyNip5NDsKKyAgICBkb3VibGUga0QgPSAwLjA4NzgzNDYzMTM4MjA3MjM0Knkx
IC0gMC4xNjk0MTYyOTY3OTI1NjIyKnkyICsgMC4wODU4ODA1Nzk1MTU5NTI3Mip5MyAtIDAuMDA0
Mjk4OTE0MTA1NDYyODMqeTQ7CisgICAgZG91YmxlIGtFID0gLTAuMDQyNDE2ODgzMDA4MTIzMDc0
KnkxICsgMC4xMTE1NjkzODI3OTg3NjAyKnkyIC0gMC4wOTc2NDY3NjMyNTI2NTg3Mip5MyArIDAu
MDI4NDk0MjYzNDYyMDIxNTc2Knk0OworCisgICAgLy8geCByYW5nZXMgZnJvbSAwIC0+IDMgICAg
ICAgMCAgICAxICAgIDIgICAzCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAtMTUg
IC0xMCAgLTUgICAwZGIKKworICAgIC8vIHkgY2FsY3VsYXRlcyBhZGFwdGl2ZSByZWxlYXNlIGZy
YW1lcyBkZXBlbmRpbmcgb24gdGhlIGFtb3VudCBvZiBjb21wcmVzc2lvbi4KKworICAgIHNldFBy
ZURlbGF5VGltZShwcmVEZWxheVRpbWUpOworICAgIAorICAgIGNvbnN0IGludCBuRGl2aXNpb25G
cmFtZXMgPSAzMjsKKworICAgIGNvbnN0IGludCBuRGl2aXNpb25zID0gZnJhbWVzVG9Qcm9jZXNz
IC8gbkRpdmlzaW9uRnJhbWVzOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuRGl2aXNpb25z
OyArK2kpIHsKKyAgICAgICAgLy8gfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cisg
ICAgICAgIC8vIENhbGN1bGF0ZSBkZXNpcmVkIGdhaW4KKyAgICAgICAgLy8gfn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKyAgICAgICAgLy8gRml4IGdyZW1saW5zLgorICAgICAg
ICBpZiAoaXNuYW4obV9kZXRlY3RvckF2ZXJhZ2UpKQorICAgICAgICAgICAgbV9kZXRlY3RvckF2
ZXJhZ2UgPSAxLjA7CisgICAgICAgIGlmIChpc2luZihtX2RldGVjdG9yQXZlcmFnZSkpCisgICAg
ICAgICAgICBtX2RldGVjdG9yQXZlcmFnZSA9IDEuMDsKKworICAgICAgICBmbG9hdCBkZXNpcmVk
R2FpbiA9IG1fZGV0ZWN0b3JBdmVyYWdlOworCisgICAgICAgIC8vIFByZS13YXJwIHNvIHdlIGdl
dCBkZXNpcmVkR2FpbiBhZnRlciBzaW4oKSB3YXJwIGJlbG93LgorICAgICAgICBkb3VibGUgc2Nh
bGVkRGVzaXJlZEdhaW4gPSBhc2luKGRlc2lyZWRHYWluKSAvICgwLjUgKiBNX1BJKTsKKworICAg
ICAgICAvLyB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgICAgICAgLy8gRGVh
bCB3aXRoIGVudmVsb3BlcworICAgICAgICAvLyB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn4KKworICAgICAgICAvLyBlbnZlbG9wZVJhdGUgaXMgdGhlIHJhdGUgd2Ugc2xldyBmcm9t
IGN1cnJlbnQgY29tcHJlc3NvciBsZXZlbCB0byB0aGUgZGVzaXJlZCBsZXZlbC4KKyAgICAgICAg
Ly8gVGhlIGV4YWN0IHJhdGUgZGVwZW5kcyBvbiBpZiB3ZSdyZSBhdHRhY2tpbmcgb3IgcmVsZWFz
aW5nIGFuZCBieSBob3cgbXVjaC4KKyAgICAgICAgZmxvYXQgZW52ZWxvcGVSYXRlOworCisgICAg
ICAgIGJvb2wgaXNSZWxlYXNpbmcgPSBzY2FsZWREZXNpcmVkR2FpbiA+IG1fY29tcHJlc3Nvckdh
aW47CisKKyAgICAgICAgLy8gY29tcHJlc3Npb25EaWZmRGIgaXMgdGhlIGRpZmZlcmVuY2UgYmV0
d2VlbiBjdXJyZW50IGNvbXByZXNzaW9uIGxldmVsIGFuZCB0aGUgZGVzaXJlZCBsZXZlbC4KKyAg
ICAgICAgZG91YmxlIGNvbXByZXNzaW9uRGlmZkRiID0gbGluZWFyVG9EZWNpYmVscyhtX2NvbXBy
ZXNzb3JHYWluIC8gc2NhbGVkRGVzaXJlZEdhaW4pOworCisgICAgICAgIGlmIChpc1JlbGVhc2lu
ZykgeworICAgICAgICAgICAgLy8gUmVsZWFzZSBtb2RlIC0gY29tcHJlc3Npb25EaWZmRGIgc2hv
dWxkIGJlIG5lZ2F0aXZlIGRCCisgICAgICAgICAgICBtX21heEF0dGFja0NvbXByZXNzaW9uRGlm
ZkRiID0gLTEuMDsKKworICAgICAgICAgICAgLy8gRml4IGdyZW1saW5zLgorICAgICAgICAgICAg
aWYgKGlzbmFuKGNvbXByZXNzaW9uRGlmZkRiKSkKKyAgICAgICAgICAgICAgICBjb21wcmVzc2lv
bkRpZmZEYiA9IC0xLjA7CisgICAgICAgICAgICBpZiAoaXNpbmYoY29tcHJlc3Npb25EaWZmRGIp
KQorICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uRGlmZkRiID0gLTEuMDsKKworICAgICAgICAg
ICAgLy8gQWRhcHRpdmUgcmVsZWFzZSAtIGhpZ2hlciBjb21wcmVzc2lvbiAobG93ZXIgY29tcHJl
c3Npb25EaWZmRGIpICByZWxlYXNlcyBmYXN0ZXIuCisKKyAgICAgICAgICAgIC8vIENvbnRhaW4g
d2l0aGluIHJhbmdlOiAtMTIgLT4gMCB0aGVuIHNjYWxlIHRvIGdvIGZyb20gMCAtPiAzCisgICAg
ICAgICAgICBkb3VibGUgeCA9IGNvbXByZXNzaW9uRGlmZkRiOworICAgICAgICAgICAgeCA9IG1h
eCgtMTIuMCwgeCk7CisgICAgICAgICAgICB4ID0gbWluKDAuMCwgeCk7CisgICAgICAgICAgICB4
ID0gMC4yNSAqICh4ICsgMTIuMCk7CisKKyAgICAgICAgICAgIC8vIENvbXB1dGUgYWRhcHRpdmUg
cmVsZWFzZSBjdXJ2ZSB1c2luZyA0dGggb3JkZXIgcG9seW5vbWlhbC4KKyAgICAgICAgICAgIC8v
IE5vcm1hbCB2YWx1ZXMgZm9yIHRoZSBwb2x5bm9taWFsIGNvZWZmaWNpZW50cyB3b3VsZCBjcmVh
dGUgYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgZnVuY3Rpb24uCisgICAgICAgICAgICBkb3Vi
bGUgeDIgPSB4ICogeDsKKyAgICAgICAgICAgIGRvdWJsZSB4MyA9IHgyICogeDsKKyAgICAgICAg
ICAgIGRvdWJsZSB4NCA9IHgyICogeDI7CisgICAgICAgICAgICBkb3VibGUgcmVsZWFzZUZyYW1l
cyA9IGtBICsga0IgKiB4ICsga0MgKiB4MiArIGtEICogeDMgKyBrRSAqIHg0OworCisjZGVmaW5l
IGtTcGFjaW5nRGIgNS4wCisgICAgICAgICAgICBkb3VibGUgZGJQZXJGcmFtZSA9IGtTcGFjaW5n
RGIgLyByZWxlYXNlRnJhbWVzOworCisgICAgICAgICAgICBlbnZlbG9wZVJhdGUgPSBkZWNpYmVs
c1RvTGluZWFyKGRiUGVyRnJhbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
QXR0YWNrIG1vZGUgLSBjb21wcmVzc2lvbkRpZmZEYiBzaG91bGQgYmUgcG9zaXRpdmUgZEIKKwor
ICAgICAgICAgICAgLy8gRml4IGdyZW1saW5zLgorICAgICAgICAgICAgaWYgKGlzbmFuKGNvbXBy
ZXNzaW9uRGlmZkRiKSkKKyAgICAgICAgICAgICAgICBjb21wcmVzc2lvbkRpZmZEYiA9IDEuMDsK
KyAgICAgICAgICAgIGlmIChpc2luZihjb21wcmVzc2lvbkRpZmZEYikpCisgICAgICAgICAgICAg
ICAgY29tcHJlc3Npb25EaWZmRGIgPSAxLjA7CisKKyAgICAgICAgICAgIC8vIEFzIGxvbmcgYXMg
d2UncmUgc3RpbGwgaW4gYXR0YWNrIG1vZGUsIHVzZSBhIHJhdGUgYmFzZWQgb2ZmCisgICAgICAg
ICAgICAvLyB0aGUgbGFyZ2VzdCBjb21wcmVzc2lvbkRpZmZEYiB3ZSd2ZSBlbmNvdW50ZXJlZCBz
byBmYXIuCisgICAgICAgICAgICBpZiAobV9tYXhBdHRhY2tDb21wcmVzc2lvbkRpZmZEYiA9PSAt
MS4wIHx8IG1fbWF4QXR0YWNrQ29tcHJlc3Npb25EaWZmRGIgPCBjb21wcmVzc2lvbkRpZmZEYikK
KyAgICAgICAgICAgICAgICBtX21heEF0dGFja0NvbXByZXNzaW9uRGlmZkRiID0gY29tcHJlc3Np
b25EaWZmRGI7CisKKyAgICAgICAgICAgIGRvdWJsZSBlZmZBdHRlbkRpZmZEYiA9IG1heCgwLjVm
LCBtX21heEF0dGFja0NvbXByZXNzaW9uRGlmZkRiKTsKKworICAgICAgICAgICAgZG91YmxlIHgg
PSAwLjI1IC8gZWZmQXR0ZW5EaWZmRGI7CisgICAgICAgICAgICBlbnZlbG9wZVJhdGUgPSAxLjAg
LSBwb3coeCwgZG91YmxlKDEuMCAvIGF0dGFja0ZyYW1lcykpOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgICAgICAgIC8vIElubmVy
IGxvb3AgLSBjYWxjdWxhdGUgc2hhcGVkIHBvd2VyIGF2ZXJhZ2UgLSBhcHBseSBjb21wcmVzc2lv
bi4KKyAgICAgICAgLy8gfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKyAgICAg
ICAgeworICAgICAgICAgICAgZmxvYXQqIGRlbGF5QnVmZmVyTCA9IG1fcHJlRGVsYXlCdWZmZXJM
LmRhdGEoKTsKKyAgICAgICAgICAgIGZsb2F0KiBkZWxheUJ1ZmZlclIgPSBtX3ByZURlbGF5QnVm
ZmVyUi5kYXRhKCk7CisgICAgICAgICAgICBpbnQgcHJlRGVsYXlSZWFkSW5kZXggPSBtX3ByZURl
bGF5UmVhZEluZGV4OworICAgICAgICAgICAgaW50IHByZURlbGF5V3JpdGVJbmRleCA9IG1fcHJl
RGVsYXlXcml0ZUluZGV4OworICAgICAgICAgICAgZmxvYXQgZGV0ZWN0b3JBdmVyYWdlID0gbV9k
ZXRlY3RvckF2ZXJhZ2U7CisgICAgICAgICAgICBmbG9hdCBjb21wcmVzc29yR2FpbiA9IG1fY29t
cHJlc3NvckdhaW47CisKKyAgICAgICAgICAgIGludCBsb29wRnJhbWVzID0gbkRpdmlzaW9uRnJh
bWVzOworICAgICAgICAgICAgd2hpbGUgKGxvb3BGcmFtZXMtLSkgeworICAgICAgICAgICAgICAg
IGZsb2F0IGNvbXByZXNzb3JJbnB1dDsKKyAgICAgICAgICAgICAgICBmbG9hdCBpbnB1dEw7Cisg
ICAgICAgICAgICAgICAgZmxvYXQgaW5wdXRSID0gMC4wOworCisgICAgICAgICAgICAgICAgLy8g
UHJlZGVsYXkgc2lnbmFsLCBjb21wdXRpbmcgY29tcHJlc3Npb24gYW1vdW50IGZyb20gdW4tZGVs
YXllZCB2ZXJzaW9uLgorICAgICAgICAgICAgICAgIGlmIChpc1N0ZXJlbykgeworICAgICAgICAg
ICAgICAgICAgICBmbG9hdCBMID0gKnNvdXJjZUwrKzsKKyAgICAgICAgICAgICAgICAgICAgZmxv
YXQgUiA9ICpzb3VyY2VSKys7CisKKyAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NvcklucHV0
ID0gMC41ICogKEwgKyBSKTsKKworICAgICAgICAgICAgICAgICAgICBpbnB1dEwgPSBkZWxheUJ1
ZmZlckxbcHJlRGVsYXlSZWFkSW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpbnB1dFIgPSBk
ZWxheUJ1ZmZlclJbcHJlRGVsYXlSZWFkSW5kZXhdOworCisgICAgICAgICAgICAgICAgICAgIGRl
bGF5QnVmZmVyTFtwcmVEZWxheVdyaXRlSW5kZXhdID0gTDsKKyAgICAgICAgICAgICAgICAgICAg
ZGVsYXlCdWZmZXJSW3ByZURlbGF5V3JpdGVJbmRleF0gPSBSOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb3JJbnB1dCA9ICpzb3VyY2VMKys7
CisKKyAgICAgICAgICAgICAgICAgICAgaW5wdXRMID0gZGVsYXlCdWZmZXJMW3ByZURlbGF5UmVh
ZEluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgZGVsYXlCdWZmZXJMW3ByZURlbGF5V3JpdGVJ
bmRleF0gPSBjb21wcmVzc29ySW5wdXQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgcHJlRGVsYXlSZWFkSW5kZXggPSAocHJlRGVsYXlSZWFkSW5kZXggKyAxKSAmIE1heFBy
ZURlbGF5RnJhbWVzTWFzazsKKyAgICAgICAgICAgICAgICBwcmVEZWxheVdyaXRlSW5kZXggPSAo
cHJlRGVsYXlXcml0ZUluZGV4ICsgMSkgJiBNYXhQcmVEZWxheUZyYW1lc01hc2s7CisKKyAgICAg
ICAgICAgICAgICAvLyBDYWxjdWxhdGUgc2hhcGVkIHBvd2VyIG9uIHVuZGVsYXllZCBpbnB1dC4K
KworICAgICAgICAgICAgICAgIGZsb2F0IHNjYWxlZElucHV0ID0gY29tcHJlc3NvcklucHV0Owor
ICAgICAgICAgICAgICAgIGRvdWJsZSBhYnNJbnB1dCA9IHNjYWxlZElucHV0ID4gMC4wID8gc2Nh
bGVkSW5wdXQgOiAtc2NhbGVkSW5wdXQ7CisKKyAgICAgICAgICAgICAgICAvLyBQdXQgdGhyb3Vn
aCBzaGFwaW5nIGN1cnZlLgorICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgbGluZWFyIHVwIHRv
IHRoZSB0aHJlc2hvbGQsIHRoZW4gZXhwb25lbnRpYWxseSBhcHByb2FjaGVzIHRoZSBtYXhpbXVt
IChoZWFkcm9vbSBhbW91bnQgYWJvdmUgdGhyZXNob2xkKS4KKyAgICAgICAgICAgICAgICAvLyBU
aGUgdHJhbnNpdGlvbiBmcm9tIHRoZSB0aHJlc2hvbGQgdG8gdGhlIGV4cG9uZW50aWFsIHBvcnRp
b24gaXMgc21vb3RoICgxc3QgZGVyaXZhdGl2ZSBtYXRjaGVkKS4KKyAgICAgICAgICAgICAgICBk
b3VibGUgc2hhcGVkSW5wdXQgPSBhYnNJbnB1dCA8IGxpbmVhclRocmVzaG9sZCA/IGFic0lucHV0
IDogbGluZWFyVGhyZXNob2xkICsga2sgKiBzYXR1cmF0ZShhYnNJbnB1dCAtIGxpbmVhclRocmVz
aG9sZCwgMS4wIC8ga2spOworCisgICAgICAgICAgICAgICAgZG91YmxlIGF0dGVudWF0aW9uID0g
YWJzSW5wdXQgPD0gMC4wMDAxID8gMS4wIDogc2hhcGVkSW5wdXQgLyBhYnNJbnB1dDsKKworICAg
ICAgICAgICAgICAgIGRvdWJsZSBhdHRlbnVhdGlvbkRiID0gLWxpbmVhclRvRGVjaWJlbHMoYXR0
ZW51YXRpb24pOworICAgICAgICAgICAgICAgIGF0dGVudWF0aW9uRGIgPSBtYXgoMi4wLCBhdHRl
bnVhdGlvbkRiKTsKKworICAgICAgICAgICAgICAgIGRvdWJsZSBkYlBlckZyYW1lID0gYXR0ZW51
YXRpb25EYiAvICgwLjAwMjUgKiBzYW1wbGVSYXRlKTsKKworICAgICAgICAgICAgICAgIGRvdWJs
ZSBzYXRSZWxlYXNlUmF0ZSA9IGRlY2liZWxzVG9MaW5lYXIoZGJQZXJGcmFtZSkgLSAxLjA7CisK
KyAgICAgICAgICAgICAgICBib29sIGlzUmVsZWFzZSA9IChhdHRlbnVhdGlvbiA+IGRldGVjdG9y
QXZlcmFnZSk7CisgICAgICAgICAgICAgICAgZG91YmxlIHJhdGUgPSBpc1JlbGVhc2UgPyBzYXRS
ZWxlYXNlUmF0ZSA6IDEuMDsKKworICAgICAgICAgICAgICAgIGRldGVjdG9yQXZlcmFnZSArPSAo
YXR0ZW51YXRpb24gLSBkZXRlY3RvckF2ZXJhZ2UpICogcmF0ZTsKKyAgICAgICAgICAgICAgICBk
ZXRlY3RvckF2ZXJhZ2UgPSBtaW4oMS4wZiwgZGV0ZWN0b3JBdmVyYWdlKTsKKworICAgICAgICAg
ICAgICAgIC8vIEZpeCBncmVtbGlucy4KKyAgICAgICAgICAgICAgICBpZiAoaXNuYW4oZGV0ZWN0
b3JBdmVyYWdlKSkKKyAgICAgICAgICAgICAgICAgICAgZGV0ZWN0b3JBdmVyYWdlID0gMS4wOwor
ICAgICAgICAgICAgICAgIGlmIChpc2luZihkZXRlY3RvckF2ZXJhZ2UpKQorICAgICAgICAgICAg
ICAgICAgICBkZXRlY3RvckF2ZXJhZ2UgPSAxLjA7CisKKyAgICAgICAgICAgICAgICAvLyBFeHBv
bmVudGlhbCBhcHByb2FjaCB0byBkZXNpcmVkIGdhaW4uCisgICAgICAgICAgICAgICAgaWYgKGVu
dmVsb3BlUmF0ZSA8IDEuMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBBdHRhY2sgLSByZWR1
Y2UgZ2FpbiB0byBkZXNpcmVkLgorICAgICAgICAgICAgICAgICAgICBjb21wcmVzc29yR2FpbiAr
PSAoc2NhbGVkRGVzaXJlZEdhaW4gLSBjb21wcmVzc29yR2FpbikgKiBlbnZlbG9wZVJhdGU7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVsZWFzZSAt
IGV4cG9uZW50aWFsbHkgaW5jcmVhc2UgZ2FpbiB0byAxLjAKKyAgICAgICAgICAgICAgICAgICAg
Y29tcHJlc3NvckdhaW4gKj0gZW52ZWxvcGVSYXRlOworICAgICAgICAgICAgICAgICAgICBjb21w
cmVzc29yR2FpbiA9IG1pbigxLjBmLCBjb21wcmVzc29yR2Fpbik7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgLy8gV2FycCBwcmUtY29tcHJlc3Npb24gZ2FpbiB0byBzbW9v
dGggb3V0IHNoYXJwIGV4cG9uZW50aWFsIHRyYW5zaXRpb24gcG9pbnRzLgorICAgICAgICAgICAg
ICAgIGRvdWJsZSBwb3N0V2FycENvbXByZXNzb3JHYWluID0gc2luKDAuNSAqIE1fUEkgKiBjb21w
cmVzc29yR2Fpbik7CisKKyAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdG90YWwgZ2FpbiB1
c2luZyBtYXN0ZXIgZ2FpbiBhbmQgZWZmZWN0IGJsZW5kLgorICAgICAgICAgICAgICAgIGRvdWJs
ZSB0b3RhbEdhaW4gPSBkcnlNaXggKyB3ZXRNaXggKiBtYXN0ZXJMaW5lYXJHYWluICogcG9zdFdh
cnBDb21wcmVzc29yR2FpbjsKKworICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBtZXRlcmlu
Zy4KKyAgICAgICAgICAgICAgICBkb3VibGUgZGJSZWFsR2FpbiA9IDIwLjAgKiBsb2cxMChwb3N0
V2FycENvbXByZXNzb3JHYWluKTsKKyAgICAgICAgICAgICAgICBpZiAoZGJSZWFsR2FpbiA8IG1f
bWV0ZXJpbmdHYWluKQorICAgICAgICAgICAgICAgICAgICBtX21ldGVyaW5nR2FpbiA9IGRiUmVh
bEdhaW47CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX21ldGVy
aW5nR2FpbiArPSAoZGJSZWFsR2FpbiAtIG1fbWV0ZXJpbmdHYWluKSAqIG1fbWV0ZXJpbmdSZWxl
YXNlSzsKKworICAgICAgICAgICAgICAgIC8vIEFwcGx5IGZpbmFsIGdhaW4uCisgICAgICAgICAg
ICAgICAgaWYgKGlzU3RlcmVvKSB7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IG91dHB1dEwg
PSBpbnB1dEw7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IG91dHB1dFIgPSBpbnB1dFI7CisK
KyAgICAgICAgICAgICAgICAgICAgb3V0cHV0TCAqPSB0b3RhbEdhaW47CisgICAgICAgICAgICAg
ICAgICAgIG91dHB1dFIgKj0gdG90YWxHYWluOworCisgICAgICAgICAgICAgICAgICAgICpkZXN0
aW5hdGlvbkwrKyA9IG91dHB1dEw7CisgICAgICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblIr
KyA9IG91dHB1dFI7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICpkZXN0aW5hdGlvbkwrKyA9IGlucHV0TCAqIHRvdGFsR2FpbjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gTG9jYWxzIGJhY2sgdG8gbWVtYmVyIHZhcmlhYmxlcy4KKyAgICAgICAg
ICAgIG1fcHJlRGVsYXlSZWFkSW5kZXggPSBwcmVEZWxheVJlYWRJbmRleDsKKyAgICAgICAgICAg
IG1fcHJlRGVsYXlXcml0ZUluZGV4ID0gcHJlRGVsYXlXcml0ZUluZGV4OworICAgICAgICAgICAg
bV9kZXRlY3RvckF2ZXJhZ2UgPSBkZXRlY3RvckF2ZXJhZ2U7CisgICAgICAgICAgICBtX2NvbXBy
ZXNzb3JHYWluID0gY29tcHJlc3NvckdhaW47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
Ly8gcHJpbnRmKCJtX2NvbXByZXNzb3JHYWluID0gJWZcbiIsIG1fY29tcHJlc3NvckdhaW4pOwor
fQorCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cmVzZXQoKQoreworICAgIG1fZGV0
ZWN0b3JBdmVyYWdlID0gMDsKKyAgICBtX2NvbXByZXNzb3JHYWluID0gMS4wOworICAgIG1fbWV0
ZXJpbmdHYWluID0gMS4wOworCisgICAgLy8gUHJlZGVsYXkgc2VjdGlvbi4KKyAgICBtX3ByZURl
bGF5QnVmZmVyTC56ZXJvKCk7CisgICAgbV9wcmVEZWxheUJ1ZmZlclIuemVybygpOworICAgIG1f
cHJlRGVsYXlSZWFkSW5kZXggPSAwOworICAgIG1fcHJlRGVsYXlXcml0ZUluZGV4ID0gRGVmYXVs
dFByZURlbGF5RnJhbWVzOworCisgICAgbV9tYXhBdHRhY2tDb21wcmVzc2lvbkRpZmZEYiA9IC0x
LjA7IC8vIHVuaW5pdGlhbGl6ZWQgc3RhdGUKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVz
c29yS2VybmVsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIER5bmFt
aWNzQ29tcHJlc3Nvcktlcm5lbF9oCisjZGVmaW5lIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbF9o
CisKKyNpbmNsdWRlICJBdWRpb0FycmF5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRHluYW1pY3NDb21wcmVzc29yS2VybmVsIHsKK3B1YmxpYzoKKyAgICBEeW5hbWljc0NvbXBy
ZXNzb3JLZXJuZWwoZG91YmxlIHNhbXBsZVJhdGUpOworCisgICAgLy8gUGVyZm9ybXMgc3RlcmVv
LWxpbmtlZCBjb21wcmVzc2lvbi4KKyAgICB2b2lkIHByb2Nlc3MoZmxvYXQgKnNvdXJjZUwsCisg
ICAgICAgICAgICAgICAgIGZsb2F0ICpkZXN0aW5hdGlvbkwsCisgICAgICAgICAgICAgICAgIGZs
b2F0ICpzb3VyY2VSLAorICAgICAgICAgICAgICAgICBmbG9hdCAqZGVzdGluYXRpb25SLAorICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZXNUb1Byb2Nlc3MsCisKKyAgICAgICAgICAgICAg
ICAgZmxvYXQgZGJUaHJlc2hvbGQsCisgICAgICAgICAgICAgICAgIGZsb2F0IGRiSGVhZHJvb20s
CisgICAgICAgICAgICAgICAgIGZsb2F0IGF0dGFja1RpbWUsCisgICAgICAgICAgICAgICAgIGZs
b2F0IHJlbGVhc2VUaW1lLAorICAgICAgICAgICAgICAgICBmbG9hdCBwcmVEZWxheVRpbWUsCisg
ICAgICAgICAgICAgICAgIGZsb2F0IGRiUG9zdEdhaW4sCisgICAgICAgICAgICAgICAgIGZsb2F0
IGVmZmVjdEJsZW5kLAorCisgICAgICAgICAgICAgICAgIGZsb2F0IHJlbGVhc2Vab25lMSwKKyAg
ICAgICAgICAgICAgICAgZmxvYXQgcmVsZWFzZVpvbmUyLAorICAgICAgICAgICAgICAgICBmbG9h
dCByZWxlYXNlWm9uZTMsCisgICAgICAgICAgICAgICAgIGZsb2F0IHJlbGVhc2Vab25lNAorICAg
ICAgICAgICAgICAgICApOworCisgICAgdm9pZCByZXNldCgpOworCisgICAgdW5zaWduZWQgbGF0
ZW5jeUZyYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFByZURlbGF5RnJhbWVzOyB9CisKKyAg
ICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9CisKK3By
b3RlY3RlZDoKKyAgICBmbG9hdCBtX3NhbXBsZVJhdGU7CisgICAgCisgICAgZmxvYXQgbV9kZXRl
Y3RvckF2ZXJhZ2U7CisgICAgZmxvYXQgbV9jb21wcmVzc29yR2FpbjsKKworICAgIC8vIE1ldGVy
aW5nCisgICAgZmxvYXQgbV9tZXRlcmluZ1JlbGVhc2VLOworICAgIGZsb2F0IG1fbWV0ZXJpbmdH
YWluOworCisgICAgLy8gTG9va2FoZWFkIHNlY3Rpb24uCisgICAgZW51bSB7IE1heFByZURlbGF5
RnJhbWVzID0gMTAyNCB9OworICAgIGVudW0geyBNYXhQcmVEZWxheUZyYW1lc01hc2sgPSBNYXhQ
cmVEZWxheUZyYW1lcyAtIDEgfTsKKyAgICBlbnVtIHsgRGVmYXVsdFByZURlbGF5RnJhbWVzID0g
MjU2IC8qNTEyKi8gfTsgLy8gc2V0UHJlRGVsYXlUaW1lKCkgd2lsbCBvdmVycmlkZSB0aGlzIGlu
aXRpYWwgdmFsdWUKKyAgICB1bnNpZ25lZCBtX2xhc3RQcmVEZWxheUZyYW1lczsKKyAgICB2b2lk
IHNldFByZURlbGF5VGltZShmbG9hdCk7CisKKyAgICBBdWRpb0Zsb2F0QXJyYXkgbV9wcmVEZWxh
eUJ1ZmZlckw7CisgICAgQXVkaW9GbG9hdEFycmF5IG1fcHJlRGVsYXlCdWZmZXJSOworICAgIGlu
dCBtX3ByZURlbGF5UmVhZEluZGV4OworICAgIGludCBtX3ByZURlbGF5V3JpdGVJbmRleDsKKwor
ICAgIGZsb2F0IG1fbWF4QXR0YWNrQ29tcHJlc3Npb25EaWZmRGI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWxfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vWmVyb1BvbGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1plcm9Qb2xlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1plcm9Qb2xlLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJaZXJvUG9sZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3ZvaWQgWmVyb1BvbGU6OnByb2Nlc3MoZmxvYXQgKnNvdXJjZSwgZmxvYXQgKmRlc3Rp
bmF0aW9uLCB1bnNpZ25lZCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgZmxvYXQgemVybyA9IG1f
emVybzsKKyAgICBmbG9hdCBwb2xlID0gbV9wb2xlOworCisgICAgLy8gR2FpbiBjb21wZW5zYXRp
b24gdG8gbWFrZSAwZEIgQCAwSHoKKyAgICBjb25zdCBmbG9hdCBrMSA9IDEuMCAvICgxLjAgLSB6
ZXJvKTsKKyAgICBjb25zdCBmbG9hdCBrMiA9IDEuMCAtIHBvbGU7CisgICAgCisgICAgLy8gTWVt
YmVyIHZhcmlhYmxlcyB0byBsb2NhbHMuCisgICAgZmxvYXQgbGFzdFggPSBtX2xhc3RYOworICAg
IGZsb2F0IGxhc3RZID0gbV9sYXN0WTsKKworICAgIHdoaWxlIChmcmFtZXNUb1Byb2Nlc3MtLSkg
eworICAgICAgICBmbG9hdCBpbnB1dCA9ICpzb3VyY2UrKzsKKworICAgICAgICAvLyBaZXJvCisg
ICAgICAgIGZsb2F0IG91dHB1dDEgPSBrMSAqIChpbnB1dCAtIHplcm8gKiBsYXN0WCk7CisgICAg
ICAgIGxhc3RYID0gaW5wdXQ7CisKKyAgICAgICAgLy8gUG9sZQorICAgICAgICBmbG9hdCBvdXRw
dXQyID0gazIgKiBvdXRwdXQxICsgcG9sZSAqIGxhc3RZOworICAgICAgICBsYXN0WSA9IG91dHB1
dDI7CisKKyAgICAgICAgKmRlc3RpbmF0aW9uKysgPSBvdXRwdXQyOworICAgIH0KKyAgICAKKyAg
ICAvLyBMb2NhbHMgdG8gbWVtYmVyIHZhcmlhYmxlcy4KKyAgICBtX2xhc3RYID0gbGFzdFg7Cisg
ICAgbV9sYXN0WSA9IGxhc3RZOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vWmVyb1BvbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9aZXJvUG9sZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vWmVyb1BvbGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgWmVy
b1BvbGVfaAorI2RlZmluZSBaZXJvUG9sZV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
WmVyb1BvbGUgaXMgYSBzaW1wbGUgZmlsdGVyIHdpdGggb25lIHplcm8gYW5kIG9uZSBwb2xlLgor
CitjbGFzcyBaZXJvUG9sZSB7CitwdWJsaWM6CisgICAgWmVyb1BvbGUoKQorICAgICAgICA6IG1f
emVybygwLjApCisgICAgICAgICwgbV9wb2xlKDAuMCkKKyAgICAgICAgLCBtX2xhc3RYKDAuMCkK
KyAgICAgICAgLCBtX2xhc3RZKDAuMCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBwcm9jZXNz
KGZsb2F0ICpzb3VyY2UsIGZsb2F0ICpkZXN0aW5hdGlvbiwgdW5zaWduZWQgZnJhbWVzVG9Qcm9j
ZXNzKTsKKworICAgIC8vIFJlc2V0IGZpbHRlciBzdGF0ZS4KKyAgICB2b2lkIHJlc2V0KCkgeyBt
X2xhc3RYID0gMC4wOyBtX2xhc3RZID0gMC4wOyB9CisgICAgCisgICAgdm9pZCBzZXRaZXJvKGZs
b2F0IHplcm8pIHsgbV96ZXJvID0gemVybzsgfQorICAgIHZvaWQgc2V0UG9sZShmbG9hdCBwb2xl
KSB7IG1fcG9sZSA9IHBvbGU7IH0KKyAgICAKKyAgICBmbG9hdCB6ZXJvKCkgY29uc3QgeyByZXR1
cm4gbV96ZXJvOyB9CisgICAgZmxvYXQgcG9sZSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9sZTsgfQor
Citwcml2YXRlOgorICAgIGZsb2F0IG1femVybzsKKyAgICBmbG9hdCBtX3BvbGU7CisgICAgZmxv
YXQgbV9sYXN0WDsKKyAgICBmbG9hdCBtX2xhc3RZOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gWmVyb1BvbGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9Db250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0NvbnRleHQuY3BwCShyZXZpc2lvbiA4NjI5MikKKysrIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAK
ICNpbmNsdWRlICJEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKICNpbmNsdWRlICJEZWxh
eU5vZGUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkR5bmFtaWNzQ29tcHJl
c3Nvck5vZGUuaCIKICNpbmNsdWRlICJGRlRGcmFtZS5oIgogI2luY2x1ZGUgIkhSVEZEYXRhYmFz
ZUxvYWRlci5oIgogI2luY2x1ZGUgIkhSVEZQYW5uZXIuaCIKQEAgLTI5MSw2ICsyOTIsMTMgQEAg
UGFzc1JlZlB0cjxDb252b2x2ZXJOb2RlPiBBdWRpb0NvbnRleHQ6OgogICAgIHJldHVybiBDb252
b2x2ZXJOb2RlOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSk7
CiB9CiAKK1Bhc3NSZWZQdHI8RHluYW1pY3NDb21wcmVzc29yTm9kZT4gQXVkaW9Db250ZXh0Ojpj
cmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICByZXR1cm4gRHluYW1pY3NDb21wcmVzc29yTm9k
ZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVSYXRlKCkpOworfQorCiBQ
YXNzUmVmUHRyPFJlYWx0aW1lQW5hbHlzZXJOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUFuYWx5
c2VyKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9Db250ZXh0LmgJKHJldmlzaW9uIDg2MjkyKQorKysgU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcg
QEAgY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBMb3dQYXNzMkZpbHRlck5vZGU7CiBjbGFzcyBIaWdo
UGFzczJGaWx0ZXJOb2RlOwogY2xhc3MgQ29udm9sdmVyTm9kZTsKK2NsYXNzIER5bmFtaWNzQ29t
cHJlc3Nvck5vZGU7CiBjbGFzcyBSZWFsdGltZUFuYWx5c2VyTm9kZTsKIGNsYXNzIEphdmFTY3Jp
cHRBdWRpb05vZGU7CiAKQEAgLTEwNCw2ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0
cjxIaWdoUGFzczJGaWx0ZXJOb2RlPiBjcmVhdGVIaWdoUGFzczJGaWx0ZXIoKTsKICAgICBQYXNz
UmVmUHRyPEF1ZGlvUGFubmVyTm9kZT4gY3JlYXRlUGFubmVyKCk7CiAgICAgUGFzc1JlZlB0cjxD
b252b2x2ZXJOb2RlPiBjcmVhdGVDb252b2x2ZXIoKTsKKyAgICBQYXNzUmVmUHRyPER5bmFtaWNz
Q29tcHJlc3Nvck5vZGU+IGNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvcigpOyAgICAKICAgICBQYXNz
UmVmUHRyPFJlYWx0aW1lQW5hbHlzZXJOb2RlPiBjcmVhdGVBbmFseXNlcigpOwogICAgIFBhc3NS
ZWZQdHI8SmF2YVNjcmlwdEF1ZGlvTm9kZT4gY3JlYXRlSmF2YVNjcmlwdE5vZGUoc2l6ZV90IGJ1
ZmZlclNpemUpOwogICAgIFBhc3NSZWZQdHI8QXVkaW9DaGFubmVsU3BsaXR0ZXI+IGNyZWF0ZUNo
YW5uZWxTcGxpdHRlcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250
ZXh0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuaWRsCShyZXZpc2lvbiA4NjI5MikKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
Q29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAgbW9kdWxlIHdlYmF1
ZGlvIHsKICAgICAgICAgSGlnaFBhc3MyRmlsdGVyTm9kZSBjcmVhdGVIaWdoUGFzczJGaWx0ZXIo
KTsKICAgICAgICAgQXVkaW9QYW5uZXJOb2RlIGNyZWF0ZVBhbm5lcigpOwogICAgICAgICBDb252
b2x2ZXJOb2RlIGNyZWF0ZUNvbnZvbHZlcigpOworICAgICAgICBEeW5hbWljc0NvbXByZXNzb3JO
b2RlIGNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvcigpOwogICAgICAgICBSZWFsdGltZUFuYWx5c2Vy
Tm9kZSBjcmVhdGVBbmFseXNlcigpOwogICAgICAgICBKYXZhU2NyaXB0QXVkaW9Ob2RlIGNyZWF0
ZUphdmFTY3JpcHROb2RlKGluIHVuc2lnbmVkIGxvbmcgYnVmZmVyU2l6ZSk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCShyZXZpc2lvbiA4NjI5MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw3
IEBAIHB1YmxpYzoKICAgICAgICAgTm9kZVR5cGVDaGFubmVsU3BsaXR0ZXIsCiAgICAgICAgIE5v
ZGVUeXBlQ2hhbm5lbE1lcmdlciwKICAgICAgICAgTm9kZVR5cGVBbmFseXNlciwKKyAgICAgICAg
Tm9kZVR5cGVEeW5hbWljc0NvbXByZXNzb3IsCiAgICAgICAgIE5vZGVUeXBlRW5kCiAgICAgfTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVz
c29yTm9kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5h
bWljc0NvbXByZXNzb3JOb2RlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisK
KyNpbmNsdWRlICJEeW5hbWljc0NvbXByZXNzb3JOb2RlLmgiCisKKyNpbmNsdWRlICJBdWRpb0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9k
ZU91dHB1dC5oIgorI2luY2x1ZGUgIkR5bmFtaWNzQ29tcHJlc3Nvci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0R5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OkR5bmFtaWNzQ29tcHJlc3Nvck5v
ZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBkb3VibGUgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlv
Tm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQoreworICAgIGFkZElucHV0KGFkb3B0UHRyKG5ldyBB
dWRpb05vZGVJbnB1dCh0aGlzKSkpOworICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9O
b2RlT3V0cHV0KHRoaXMsIDIpKSk7CisgICAgCisgICAgc2V0VHlwZShOb2RlVHlwZUR5bmFtaWNz
Q29tcHJlc3Nvcik7CisgICAgCisgICAgaW5pdGlhbGl6ZSgpOworfQorCitEeW5hbWljc0NvbXBy
ZXNzb3JOb2RlOjp+RHluYW1pY3NDb21wcmVzc29yTm9kZSgpCit7CisgICAgdW5pbml0aWFsaXpl
KCk7Cit9CisKK3ZvaWQgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJh
bWVzVG9Qcm9jZXNzKQoreworICAgIEF1ZGlvQnVzKiBvdXRwdXRCdXMgPSBvdXRwdXQoMCktPmJ1
cygpOworICAgIEFTU0VSVChvdXRwdXRCdXMpOworCisgICAgbV9keW5hbWljc0NvbXByZXNzb3It
PnByb2Nlc3MoaW5wdXQoMCktPmJ1cygpLCBvdXRwdXRCdXMsIGZyYW1lc1RvUHJvY2Vzcyk7Cit9
CisKK3ZvaWQgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6cmVzZXQoKQoreworICAgIG1fZHluYW1p
Y3NDb21wcmVzc29yLT5yZXNldCgpOworfQorCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6
OmluaXRpYWxpemUoKQoreworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEF1ZGlvTm9kZTo6aW5pdGlhbGl6ZSgpOyAgICAKKyAgICBtX2R5bmFtaWNzQ29t
cHJlc3NvciA9IGFkb3B0UHRyKG5ldyBEeW5hbWljc0NvbXByZXNzb3IodHJ1ZSwgc2FtcGxlUmF0
ZSgpKSk7Cit9CisKK3ZvaWQgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6dW5pbml0aWFsaXplKCkK
K3sKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9k
eW5hbWljc0NvbXByZXNzb3IuY2xlYXIoKTsKKyAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FV
RElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJl
c3Nvck5vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFt
aWNzQ29tcHJlc3Nvck5vZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgRHluYW1pY3NDb21wcmVzc29yTm9kZV9oCisjZGVmaW5lIER5bmFtaWNz
Q29tcHJlc3Nvck5vZGVfaAorCisjaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIER5bmFtaWNzQ29tcHJl
c3NvcjsKKyAgICAKK2NsYXNzIER5bmFtaWNzQ29tcHJlc3Nvck5vZGUgOiBwdWJsaWMgQXVkaW9O
b2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEeW5hbWljc0NvbXByZXNzb3JO
b2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBkb3VibGUgc2FtcGxlUmF0ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRHluYW1pY3NDb21wcmVzc29yTm9kZShj
b250ZXh0LCBzYW1wbGVSYXRlKSk7ICAgICAgCisgICAgfQorICAgIAorICAgIHZpcnR1YWwgfkR5
bmFtaWNzQ29tcHJlc3Nvck5vZGUoKTsKKyAgICAKKyAgICAvLyBBdWRpb05vZGUKKyAgICB2aXJ0
dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVzZXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZpcnR1YWwg
dm9pZCB1bmluaXRpYWxpemUoKTsKKworcHJpdmF0ZToKKyAgICBEeW5hbWljc0NvbXByZXNzb3JO
b2RlKEF1ZGlvQ29udGV4dCosIGRvdWJsZSBzYW1wbGVSYXRlKTsKKworICAgIE93blB0cjxEeW5h
bWljc0NvbXByZXNzb3I+IG1fZHluYW1pY3NDb21wcmVzc29yOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRHluYW1pY3NDb21wcmVzc29yTm9kZV9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmlk
bAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJl
c3Nvck5vZGUuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
bW9kdWxlIGF1ZGlvIHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1XRUJf
QVVESU8sCisgICAgICAgIEdlbmVyYXRlVG9KUworICAgIF0gRHluYW1pY3NDb21wcmVzc29yTm9k
ZSA6IEF1ZGlvTm9kZSB7CisgICAgfTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93528</attachid>
            <date>2011-05-13 16:26:38 -0700</date>
            <delta_ts>2011-05-16 12:32:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60682-20110513162637.patch</filename>
            <type>text/plain</type>
            <size>65820</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NDcxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjEgQEAKKzIwMTEtMDUtMTMgIENocmlzIFJv
Z2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgRHluYW1pY3NDb21wcmVzc29yTm9kZSBpbXBsZW1lbnRh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA2
ODIKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8gQVBJIGlzIG5vdCB5ZXQgaW1w
bGVtZW50ZWQuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6OkR5bmFtaWNzQ29tcHJlc3Nv
cik6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6OmluaXRpYWxpemVQYXJh
bWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvcjo6cGFyYW1ldGVy
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yOjpzZXRFbXBoYXNp
c1N0YWdlUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6
OnNldEVtcGhhc2lzUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXBy
ZXNzb3I6OnByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yOjpy
ZXNldCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yOjppc1N0ZXJlbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3I6OnNhbXBsZVJhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yOjpueXF1aXN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnNhdHVyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nv
cktlcm5lbDo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkR5
bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0UHJlRGVsYXlUaW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3Jl
OjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OnJlc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OmxhdGVuY3lGcmFtZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpzYW1wbGVSYXRlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9hdWRpby9aZXJvUG9sZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WmVy
b1BvbGU6OnByb2Nlc3MpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL1plcm9Qb2xlLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6WmVyb1BvbGU6Olplcm9Qb2xlKToKKyAgICAgICAgKFdl
YkNvcmU6Olplcm9Qb2xlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpaZXJvUG9sZTo6c2V0
WmVybyk6CisgICAgICAgIChXZWJDb3JlOjpaZXJvUG9sZTo6c2V0UG9sZSk6CisgICAgICAgIChX
ZWJDb3JlOjpaZXJvUG9sZTo6emVybyk6CisgICAgICAgIChXZWJDb3JlOjpaZXJvUG9sZTo6cG9s
ZSk6CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlRHluYW1pY3NDb21wcmVzc29yKToKKyAgICAgICAgKiB3
ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NvbnRleHQu
aWRsOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvTm9kZS5oOgorICAgICAgICAqIHdlYmF1ZGlv
L0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkR5
bmFtaWNzQ29tcHJlc3Nvck5vZGU6OkR5bmFtaWNzQ29tcHJlc3Nvck5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yTm9kZTo6fkR5bmFtaWNzQ29tcHJlc3Nvck5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY3NDb21wcmVzc29yTm9kZTo6cHJvY2Vzcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3JOb2RlOjpyZXNldCk6CisgICAgICAg
IChXZWJDb3JlOjpEeW5hbWljc0NvbXByZXNzb3JOb2RlOjppbml0aWFsaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OnVuaW5pdGlhbGl6ZSk6CisgICAgICAg
ICogd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkR5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OmNyZWF0ZSk6CisgICAgICAgICogd2ViYXVk
aW8vRHluYW1pY3NDb21wcmVzc29yTm9kZS5pZGw6IEFkZGVkLgorCiAyMDExLTA1LTEzICBPbGl2
ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZy
ZXkgR2FyZW4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDg2
NDcxKQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5
KQpAQCAtNjksNiArNjksNyBAQCBET01fQ0xBU1NFUyA9IFwKICAgICBBdWRpb1NvdXJjZU5vZGUg
XAogICAgIENvbnZvbHZlck5vZGUgXAogICAgIERlbGF5Tm9kZSBcCisgICAgRHluYW1pY3NDb21w
cmVzc29yTm9kZSBcCiAgICAgSGlnaFBhc3MyRmlsdGVyTm9kZSBcCiAgICAgSmF2YVNjcmlwdEF1
ZGlvTm9kZSBcCiAgICAgTG93UGFzczJGaWx0ZXJOb2RlIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJ
KHJldmlzaW9uIDg2NDcxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDA1LDYgKzE0MDUsNyBAQAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlv
U291cmNlTm9kZS5pZGwnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaWRs
JywKICAgICAgICAgICAgICd3ZWJhdWRpby9EZWxheU5vZGUuaWRsJywKKyAgICAgICAgICAgICd3
ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbCcsCiAgICAgICAgICAgICAnd2ViYXVk
aW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0phdmFT
Y3JpcHRBdWRpb05vZGUuaWRsJywKICAgICAgICAgICAgICd3ZWJhdWRpby9Mb3dQYXNzMkZpbHRl
ck5vZGUuaWRsJywKQEAgLTM2NTQsNiArMzY1NSwxMCBAQAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2F1ZGlvL0Rlbm9ybWFsRGlzYWJsZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8v
RGlzdGFuY2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9EaXN0YW5jZS5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3IuaCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQYW5uZXIuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2F1ZGlvL0ZGVENvbnZvbHZlci5jcHAnLApAQCAtMzY4Nyw2ICszNjkyLDggQEAKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9TaW5jUmVzYW1wbGVyLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2F1ZGlvL1ZlY3Rvck1hdGguY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9h
dWRpby9WZWN0b3JNYXRoLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL1plcm9Qb2xl
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vWmVyb1BvbGUuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vYXVkaW8vY2hyb21pdW0vQXVkaW9CdXNDaHJvbWl1bS5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL2ZmdHcvRkZURnJhbWVGRlRXLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvQnVzTWFjLm1tJywKQEAgLTU5NDMsNiArNTk1
MCw4IEBACiAgICAgICAgICAgICAnd2ViYXVkaW8vRGVsYXlOb2RlLmgnLAogICAgICAgICAgICAg
J3dlYmF1ZGlvL0RlbGF5UHJvY2Vzc29yLmNwcCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vRGVs
YXlQcm9jZXNzb3IuaCcsCisgICAgICAgICAgICAnd2ViYXVkaW8vRHluYW1pY3NDb21wcmVzc29y
Tm9kZS5jcHAnLAorICAgICAgICAgICAgJ3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUu
aCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5jcHAnLAogICAg
ICAgICAgICAgJ3dlYmF1ZGlvL0hpZ2hQYXNzMkZpbHRlck5vZGUuaCcsCiAgICAgICAgICAgICAn
d2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gODY0NzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTU4NjEsNiArNTg2MSwxNiBAQAogCQlGRDMxNjBCRTEyQjAyNzJBMDBD
MUEzNTkgLyogQXVkaW9GaWxlUmVhZGVyTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMzE2MEI4MTJCMDI3MkEwMEMxQTM1OSAvKiBBdWRpb0Zp
bGVSZWFkZXJNYWMuY3BwICovOyB9OwogCQlGRDMxNjBCRjEyQjAyNzJBMDBDMUEzNTkgLyogQXVk
aW9GaWxlUmVhZGVyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRDMxNjBCOTEyQjAyNzJBMDBDMUEzNTkgLyogQXVkaW9GaWxlUmVhZGVyTWFjLmgg
Ki87IH07CiAJCUZEMzE2MEMwMTJCMDI3MkEwMEMxQTM1OSAvKiBGRlRGcmFtZU1hYy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDMxNjBCQTEyQjAy
NzJBMDBDMUEzNTkgLyogRkZURnJhbWVNYWMuY3BwICovOyB9OworCQlGRDUzNzM1MjEzN0I2NTE4
MDAwMDhEQ0UgLyogWmVyb1BvbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkQ1MzczNTAxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmNwcCAq
LzsgfTsKKwkJRkQ1MzczNTMxMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDUzNzM1MTEzN0I2NTE4MDAw
MDhEQ0UgLyogWmVyb1BvbGUuaCAqLzsgfTsKKwkJRkQ1MzczNTYxMzdCNjUzQjAwMDA4RENFIC8q
IER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRDUzNzM1NDEzN0I2NTNCMDAwMDhEQ0UgLyogRHluYW1pY3ND
b21wcmVzc29yS2VybmVsLmNwcCAqLzsgfTsKKwkJRkQ1MzczNTcxMzdCNjUzQjAwMDA4RENFIC8q
IER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkQ1MzczNTUxMzdCNjUzQjAwMDA4RENFIC8qIER5bmFtaWNzQ29t
cHJlc3Nvcktlcm5lbC5oICovOyB9OworCQlGRDZFRDJDMzEzNkI4RTQyMDAzQ0YwNzIgLyogRHlu
YW1pY3NDb21wcmVzc29yTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRDZFRDJDMTEzNkI4RTQyMDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVz
c29yTm9kZS5jcHAgKi87IH07CisJCUZENkVEMkM0MTM2QjhFNDIwMDNDRjA3MiAvKiBEeW5hbWlj
c0NvbXByZXNzb3JOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRDZFRDJDMjEzNkI4RTQyMDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yTm9k
ZS5oICovOyB9OworCQlGRDZFRDJDNzEzNkI4RTY2MDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVz
c29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZE
NkVEMkM1MTM2QjhFNjYwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3IuY3BwICovOyB9Owor
CQlGRDZFRDJDODEzNkI4RTY2MDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDZFRDJDNjEzNkI4RTY2
MDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yLmggKi87IH07CisJCUZENzg2OEI5MTM2Qjk5
OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQ3ODY4QjcxMzZCOTk5MjAwRDQwM0RG
IC8qIEpTRHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAgKi87IH07CisJCUZENzg2OEJBMTM2Qjk5
OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZENzg2OEI4MTM2Qjk5OTIwMEQ0MDNERiAv
KiBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCAqLzsgfTsKIAkJRkRBMTVFOUQxMkIwM0VFMTAw
M0E1ODNBIC8qIEpTQXVkaW9CdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkRBMTVFODExMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9CdWZm
ZXIuY3BwICovOyB9OwogCQlGREExNUU5RTEyQjAzRUUxMDAzQTU4M0EgLyogSlNBdWRpb0J1ZmZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRBMTVF
ODIxMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9CdWZmZXIuaCAqLzsgfTsKIAkJRkRBMTVFOUYx
MkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQTE1RTgzMTJCMDNFRTEwMDNB
NTgzQSAvKiBKU0F1ZGlvQnVmZmVyU291cmNlTm9kZS5jcHAgKi87IH07CkBAIC0xMjI0OCw3ICsx
MjI1OCw3IEBACiAJCUZCQzIyMERFMTIzN0ZCRUIwMEJDRjc4OCAvKiBHcmFwaGljc0NvbnRleHQz
RE9wZW5HTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGlj
c0NvbnRleHQzRE9wZW5HTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEMDZE
RkEzMTM0QTRERUYwMDZGNUQ3RCAvKiBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVmYXVsdEF1ZGlvRGVzdGluYXRp
b25Ob2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQwNkRGQTQxMzRBNERF
RjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkQxNjYwQTQxMzc4N0M2RDAwMUZGQTdCIC8qIERlbm9y
bWFsRGlzYWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGVub3JtYWxE
aXNhYmxlci5oOyBwYXRoID0gd2ViYXVkaW8vYXVkaW8vRGVub3JtYWxEaXNhYmxlci5oOyBzb3Vy
Y2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUZEMTY2MEE0MTM3ODdDNkQwMDFGRkE3QiAvKiBE
ZW5vcm1hbERpc2FibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlbm9y
bWFsRGlzYWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQyREJGMEUxMkIw
NDhBMzAwRUQ5OEM2IC8qIEFjY2VsZXJhdGUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBB
Y2NlbGVyYXRlLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0Fj
Y2VsZXJhdGUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQlGRDJE
QkYwRjEyQjA0OEEzMDBFRDk4QzYgLyogQXVkaW9Ub29sYm94LmZyYW1ld29yayAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3Jr
OyBuYW1lID0gQXVkaW9Ub29sYm94LmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9G
cmFtZXdvcmtzL0F1ZGlvVG9vbGJveC5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRl
PiI7IH07CiAJCUZEMkRCRjEwMTJCMDQ4QTMwMEVEOThDNiAvKiBBdWRpb1VuaXQuZnJhbWV3b3Jr
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBl
ci5mcmFtZXdvcms7IG5hbWUgPSBBdWRpb1VuaXQuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9M
aWJyYXJ5L0ZyYW1ld29ya3MvQXVkaW9Vbml0LmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJz
b2x1dGU+IjsgfTsKQEAgLTEyMzg3LDYgKzEyMzk3LDE3IEBACiAJCUZEMzE2MEI4MTJCMDI3MkEw
MEMxQTM1OSAvKiBBdWRpb0ZpbGVSZWFkZXJNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQXVkaW9GaWxlUmVhZGVyTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkQzMTYwQjkxMkIwMjcyQTAwQzFBMzU5IC8qIEF1ZGlvRmlsZVJlYWRlck1h
Yy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb0ZpbGVSZWFkZXJNYWMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQzMTYwQkExMkIwMjcyQTAwQzFBMzU5
IC8qIEZGVEZyYW1lTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZGVEZyYW1lTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQ1MzczNTAx
MzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFplcm9Qb2xlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkQ1MzczNTExMzdCNjUxODAwMDA4RENFIC8qIFplcm9Qb2xlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFplcm9Qb2xlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZENTM3MzU0MTM3QjY1M0IwMDAwOERDRSAvKiBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRHluYW1pY3NDb21wcmVzc29y
S2VybmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQ1MzczNTUxMzdCNjUz
QjAwMDA4RENFIC8qIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkQ2RUQyQzExMzZCOEU0MjAwM0NGMDcyIC8qIER5bmFtaWNzQ29t
cHJlc3Nvck5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRHlu
YW1pY3NDb21wcmVzc29yTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZE
NkVEMkMyMTM2QjhFNDIwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQ2RUQyQzUxMzZCOEU2NjAwM0NGMDcyIC8qIER5
bmFtaWNzQ29tcHJlc3Nvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEeW5hbWljc0NvbXByZXNzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RDZFRDJDNjEzNkI4RTY2MDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER5bmFtaWNzQ29tcHJlc3Nvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRDZFRDJDOTEzNkI4RTlEMDAzQ0YwNzIgLyogRHluYW1pY3ND
b21wcmVzc29yTm9kZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRHluYW1pY3NDb21wcmVz
c29yTm9kZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZENzg2OEI3MTM2Qjk5
OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkQ3ODY4QjgxMzZCOTk5MjAwRDQwM0RGIC8qIEpT
RHluYW1pY3NDb21wcmVzc29yTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkRBMTVFODExMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9CdWZmZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBdWRpb0J1ZmZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEQTE1RTgyMTJCMDNFRTEwMDNBNTgzQSAvKiBKU0F1ZGlv
QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXVkaW9CdWZmZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRBMTVFODMxMkIwM0VFMTAwM0E1ODNB
IC8qIEpTQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTQXVkaW9CdWZmZXJTb3VyY2VOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE5NTM2LDYgKzE5NTU3LDkgQEAKIAkJCQlGRDMxNUZFNTEyQjAyNjc2
MDBDMUEzNTkgLyogRGVsYXlOb2RlLmlkbCAqLywKIAkJCQlGRDMxNUZFNjEyQjAyNjc2MDBDMUEz
NTkgLyogRGVsYXlQcm9jZXNzb3IuY3BwICovLAogCQkJCUZEMzE1RkU3MTJCMDI2NzYwMEMxQTM1
OSAvKiBEZWxheVByb2Nlc3Nvci5oICovLAorCQkJCUZENkVEMkMxMTM2QjhFNDIwMDNDRjA3MiAv
KiBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCAqLywKKwkJCQlGRDZFRDJDMjEzNkI4RTQyMDAz
Q0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yTm9kZS5oICovLAorCQkJCUZENkVEMkM5MTM2QjhF
OUQwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbCAqLywKIAkJCQlGRDMxNUZF
ODEyQjAyNjc2MDBDMUEzNTkgLyogSGlnaFBhc3MyRmlsdGVyTm9kZS5jcHAgKi8sCiAJCQkJRkQz
MTVGRTkxMkIwMjY3NjAwQzFBMzU5IC8qIEhpZ2hQYXNzMkZpbHRlck5vZGUuaCAqLywKIAkJCQlG
RDMxNUZFQTEyQjAyNjc2MDBDMUEzNTkgLyogSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwgKi8sCkBA
IC0xOTU4Nyw2ICsxOTYxMSwxMCBAQAogCQkJCUZEMzE2MDU5MTJCMDI2RjcwMEMxQTM1OSAvKiBD
b25lLmggKi8sCiAJCQkJRkQzMTYwNUExMkIwMjZGNzAwQzFBMzU5IC8qIERpc3RhbmNlLmNwcCAq
LywKIAkJCQlGRDMxNjA1QjEyQjAyNkY3MDBDMUEzNTkgLyogRGlzdGFuY2UuaCAqLywKKwkJCQlG
RDZFRDJDNTEzNkI4RTY2MDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yLmNwcCAqLywKKwkJ
CQlGRDZFRDJDNjEzNkI4RTY2MDAzQ0YwNzIgLyogRHluYW1pY3NDb21wcmVzc29yLmggKi8sCisJ
CQkJRkQ1MzczNTQxMzdCNjUzQjAwMDA4RENFIC8qIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5j
cHAgKi8sCisJCQkJRkQ1MzczNTUxMzdCNjUzQjAwMDA4RENFIC8qIER5bmFtaWNzQ29tcHJlc3Nv
cktlcm5lbC5oICovLAogCQkJCUZEMTY2MEE0MTM3ODdDNkQwMDFGRkE3QiAvKiBEZW5vcm1hbERp
c2FibGVyLmggKi8sCiAJCQkJRkQzMTYwNUMxMkIwMjZGNzAwQzFBMzU5IC8qIEVxdWFsUG93ZXJQ
YW5uZXIuY3BwICovLAogCQkJCUZEMzE2MDVEMTJCMDI2RjcwMEMxQTM1OSAvKiBFcXVhbFBvd2Vy
UGFubmVyLmggKi8sCkBAIC0xOTYxOCw2ICsxOTY0Niw4IEBACiAJCQkJRkQzMTYwNzcxMkIwMjZG
NzAwQzFBMzU5IC8qIFJldmVyYklucHV0QnVmZmVyLmggKi8sCiAJCQkJRkQzMTYwNzgxMkIwMjZG
NzAwQzFBMzU5IC8qIFZlY3Rvck1hdGguY3BwICovLAogCQkJCUZEMzE2MDc5MTJCMDI2RjcwMEMx
QTM1OSAvKiBWZWN0b3JNYXRoLmggKi8sCisJCQkJRkQ1MzczNTAxMzdCNjUxODAwMDA4RENFIC8q
IFplcm9Qb2xlLmNwcCAqLywKKwkJCQlGRDUzNzM1MTEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1Bv
bGUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gYXVkaW87CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwpAQCAtMTk2NzAsNiArMTk3MDAsOCBAQAogCQkJCUZEQTE1RUJDMTJCMDNGMEIwMDNBNTgz
QSAvKiBKU0NvbnZvbHZlck5vZGUuaCAqLywKIAkJCQlGREExNUVDRjEyQjAzRjk0MDAzQTU4M0Eg
LyogSlNEZWxheU5vZGUuY3BwICovLAogCQkJCUZEQTE1RUQwMTJCMDNGOTQwMDNBNTgzQSAvKiBK
U0RlbGF5Tm9kZS5oICovLAorCQkJCUZENzg2OEI3MTM2Qjk5OTIwMEQ0MDNERiAvKiBKU0R5bmFt
aWNzQ29tcHJlc3Nvck5vZGUuY3BwICovLAorCQkJCUZENzg2OEI4MTM2Qjk5OTIwMEQ0MDNERiAv
KiBKU0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCAqLywKIAkJCQlGREExNUVCRjEyQjAzRjJEMDAz
QTU4M0EgLyogSlNIaWdoUGFzczJGaWx0ZXJOb2RlLmNwcCAqLywKIAkJCQlGREExNUVDMDEyQjAz
RjJEMDAzQTU4M0EgLyogSlNIaWdoUGFzczJGaWx0ZXJOb2RlLmggKi8sCiAJCQkJRkRBMTVFQ0Ix
MkIwM0Y2MTAwM0E1ODNBIC8qIEpTSmF2YVNjcmlwdEF1ZGlvTm9kZS5jcHAgKi8sCkBAIC0yMjc2
OCwxMCArMjI4MDAsMTUgQEAKIAkJCQk5M0YxOTlFRDA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFBy
b2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8q
IFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3RTJFMEYxMkYwRkM5QzAw
QzEzMzc5IC8qIFhTU0ZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkQ2RUQyQzQxMzZCOEU0
MjAwM0NGMDcyIC8qIER5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUZENkVEMkM4MTM2QjhFNjYwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZENzg2OEJBMTM2Qjk5OTIwMEQ0MDNERiAvKiBKU0R5bmFtaWNzQ29tcHJl
c3Nvck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3QUZGREY3MTM3MEEwQjgwMEU4OTVDMCAv
KiBTaGFyZWRCdWZmZXJDUkxGTGluZVJlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc5RTM3
MTcxMzczNkE2NjAwQjlFOTE5IC8qIFF1b3RlZFByaW50YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkQxNjYwQTUxMzc4N0M2RDAwMUZGQTdCIC8qIERlbm9ybWFsRGlzYWJsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDRTU2NDRFMTM3QTM0RDYwMDdEMjkzNCAvKiBDb25zb2xlVHlwZXMuaCBp
biBIZWFkZXJzICovLAorCQkJCUZENTM3MzUzMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRkQ1MzczNTcxMzdCNjUzQjAwMDA4RENFIC8qIER5bmFtaWNz
Q29tcHJlc3Nvcktlcm5lbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGN0U0OTExMzdDRDdDNzAw
MUREQUU3IC8qIEFkanVzdFZpZXdTaXplT3JOb3QuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMjU0MzgsOCArMjU0
NzUsMTMgQEAKIAkJCQk5M0YxOUIwNTA4MjQ1RTU5MDAxRTlBQkMgLyogWFNMVFByb2Nlc3Nvckxp
YnhzbHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8q
IFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzdFMkUwRTEyRjBGQzlD
MDBDMTMzNzkgLyogWFNTRmlsdGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZENkVEMkMzMTM2
QjhFNDIwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUZENkVEMkM3MTM2QjhFNjYwMDNDRjA3MiAvKiBEeW5hbWljc0NvbXByZXNzb3IuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJRkQ3ODY4QjkxMzZCOTk5MjAwRDQwM0RGIC8qIEpTRHluYW1p
Y3NDb21wcmVzc29yTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0FGRkRGNjEzNzBBMEI4
MDBFODk1QzAgLyogU2hhcmVkQnVmZmVyQ1JMRkxpbmVSZWFkZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzc5RTM3MTYxMzczNkE2NjAwQjlFOTE5IC8qIFF1b3RlZFByaW50YWJsZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlGRDUzNzM1MjEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJRkQ1MzczNTYxMzdCNjUzQjAwMDA4RENFIC8qIER5bmFtaWNz
Q29tcHJlc3Nvcktlcm5lbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nv
ci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkR5bmFtaWNzQ29tcHJlc3Nv
ci5oIgorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJBdWRpb1V0aWxpdGllcy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBBdWRpb1V0aWxpdGll
czsKKyAgICAKK0R5bmFtaWNzQ29tcHJlc3Nvcjo6RHluYW1pY3NDb21wcmVzc29yKGJvb2wgaXNT
dGVyZW8sIGRvdWJsZSBzYW1wbGVSYXRlKQorICAgIDogbV9pc1N0ZXJlbyhpc1N0ZXJlbykKKyAg
ICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQorICAgICwgbV9jb21wcmVzc29yKHNhbXBsZVJh
dGUpCit7CisgICAgLy8gVW5pbml0aWFsaXplZCBzdGF0ZSAtIGZvciBwYXJhbWV0ZXIgcmVjYWxj
dWxhdGlvbi4KKyAgICBtX2xhc3RGaWx0ZXJTdGFnZVJhdGlvID0gLTE7CisgICAgbV9sYXN0QW5j
aG9yID0gLTE7CisgICAgbV9sYXN0RmlsdGVyU3RhZ2VHYWluID0gLTE7CisKKyAgICBpbml0aWFs
aXplUGFyYW1ldGVycygpOworfQorCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6aW5pdGlhbGl6
ZVBhcmFtZXRlcnMoKQoreworICAgIC8vIEluaXRpYWxpemVzIGNvbXByZXNzb3IgdG8gZGVmYXVs
dCB2YWx1ZXMuCisgICAgCisgICAgbV9wYXJhbWV0ZXJzW1BhcmFtVGhyZXNob2xkXSA9IC0yNDsg
Ly8gZEIKKyAgICBtX3BhcmFtZXRlcnNbUGFyYW1IZWFkcm9vbV0gPSAyMTsgLy8gZEIKKyAgICBt
X3BhcmFtZXRlcnNbUGFyYW1BdHRhY2tdID0gMC4wMDM7IC8vIHNlY29uZHMKKyAgICBtX3BhcmFt
ZXRlcnNbUGFyYW1SZWxlYXNlXSA9IDAuMjUwOyAvLyBzZWNvbmRzCisgICAgbV9wYXJhbWV0ZXJz
W1BhcmFtUHJlRGVsYXldID0gMC4wMDY7IC8vIHNlY29uZHMKKworICAgIC8vIFJlbGVhc2Ugem9u
ZSB2YWx1ZXMgMCAtPiAxLgorICAgIG1fcGFyYW1ldGVyc1tQYXJhbVJlbGVhc2Vab25lMV0gPSAw
LjA5OworICAgIG1fcGFyYW1ldGVyc1tQYXJhbVJlbGVhc2Vab25lMl0gPSAwLjE2OworICAgIG1f
cGFyYW1ldGVyc1tQYXJhbVJlbGVhc2Vab25lM10gPSAwLjQyOworICAgIG1fcGFyYW1ldGVyc1tQ
YXJhbVJlbGVhc2Vab25lNF0gPSAwLjk4OworCisgICAgbV9wYXJhbWV0ZXJzW1BhcmFtRmlsdGVy
U3RhZ2VHYWluXSA9IDQuNDsgLy8gZEIKKyAgICBtX3BhcmFtZXRlcnNbUGFyYW1GaWx0ZXJTdGFn
ZVJhdGlvXSA9IDI7CisgICAgbV9wYXJhbWV0ZXJzW1BhcmFtRmlsdGVyQW5jaG9yXSA9IDE1MDAw
IC8gbnlxdWlzdCgpOworICAgIAorICAgIG1fcGFyYW1ldGVyc1tQYXJhbVBvc3RHYWluXSA9IDA7
IC8vIGRCCisKKyAgICAvLyBMaW5lYXIgY3Jvc3NmYWRlICgwIC0+IDEpLgorICAgIG1fcGFyYW1l
dGVyc1tQYXJhbUVmZmVjdEJsZW5kXSA9IDE7Cit9CisKK2RvdWJsZSBEeW5hbWljc0NvbXByZXNz
b3I6OnBhcmFtZXRlclZhbHVlKHVuc2lnbmVkIHBhcmFtZXRlcklEKQoreworICAgIEFTU0VSVChw
YXJhbWV0ZXJJRCA8IFBhcmFtTGFzdCk7CisgICAgcmV0dXJuIG1fcGFyYW1ldGVyc1twYXJhbWV0
ZXJJRF07Cit9CisKK3ZvaWQgRHluYW1pY3NDb21wcmVzc29yOjpzZXRFbXBoYXNpc1N0YWdlUGFy
YW1ldGVycyh1bnNpZ25lZCBzdGFnZUluZGV4LCBmbG9hdCBnYWluLCBmbG9hdCBub3JtYWxpemVk
RnJlcXVlbmN5IC8qIDAgLT4gMSAqLykKK3sKKyAgICBmbG9hdCBnayA9IDEgLSBnYWluIC8gMjA7
CisgICAgZmxvYXQgZjEgPSBub3JtYWxpemVkRnJlcXVlbmN5ICogZ2s7CisgICAgZmxvYXQgZjIg
PSBub3JtYWxpemVkRnJlcXVlbmN5IC8gZ2s7CisgICAgZmxvYXQgcjEgPSBleHAoLWYxICogTV9Q
SSk7CisgICAgZmxvYXQgcjIgPSBleHAoLWYyICogTV9QSSk7CisKKyAgICAvLyBTZXQgcHJlLWZp
bHRlciB6ZXJvIGFuZCBwb2xlIHRvIGNyZWF0ZSBhbiBlbXBoYXNpcyBmaWx0ZXIuCisgICAgbV9w
cmVGaWx0ZXJbc3RhZ2VJbmRleF0uc2V0WmVybyhyMSk7CisgICAgbV9wcmVGaWx0ZXJbc3RhZ2VJ
bmRleF0uc2V0UG9sZShyMik7CisgICAgbV9wcmVGaWx0ZXJSW3N0YWdlSW5kZXhdLnNldFplcm8o
cjEpOworICAgIG1fcHJlRmlsdGVyUltzdGFnZUluZGV4XS5zZXRQb2xlKHIyKTsKKworICAgIC8v
IFNldCBwb3N0LWZpbHRlciB3aXRoIHplcm8gYW5kIHBvbGUgcmV2ZXJzZWQgdG8gY3JlYXRlIHRo
ZSBkZS1lbXBoYXNpcyBmaWx0ZXIuCisgICAgLy8gSWYgdGhlcmUgd2VyZSBubyBjb21wcmVzc29y
IGtlcm5lbCBpbiBiZXR3ZWVuLCB0aGV5IHdvdWxkIGNhbmNlbCBlYWNoIG90aGVyIG91dCAoYWxs
cGFzcyBmaWx0ZXIpLgorICAgIG1fcG9zdEZpbHRlcltzdGFnZUluZGV4XS5zZXRaZXJvKHIyKTsK
KyAgICBtX3Bvc3RGaWx0ZXJbc3RhZ2VJbmRleF0uc2V0UG9sZShyMSk7CisgICAgbV9wb3N0Rmls
dGVyUltzdGFnZUluZGV4XS5zZXRaZXJvKHIyKTsKKyAgICBtX3Bvc3RGaWx0ZXJSW3N0YWdlSW5k
ZXhdLnNldFBvbGUocjEpOworfQorCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6c2V0RW1waGFz
aXNQYXJhbWV0ZXJzKGZsb2F0IGdhaW4sIGZsb2F0IGFuY2hvckZyZXEsIGZsb2F0IGZpbHRlclN0
YWdlUmF0aW8pCit7CisgICAgc2V0RW1waGFzaXNTdGFnZVBhcmFtZXRlcnMoMCwgZ2FpbiwgYW5j
aG9yRnJlcSk7CisgICAgc2V0RW1waGFzaXNTdGFnZVBhcmFtZXRlcnMoMSwgZ2FpbiwgYW5jaG9y
RnJlcSAvIGZpbHRlclN0YWdlUmF0aW8pOworICAgIHNldEVtcGhhc2lzU3RhZ2VQYXJhbWV0ZXJz
KDIsIGdhaW4sIGFuY2hvckZyZXEgLyAoZmlsdGVyU3RhZ2VSYXRpbyAqIGZpbHRlclN0YWdlUmF0
aW8pKTsKKyAgICBzZXRFbXBoYXNpc1N0YWdlUGFyYW1ldGVycygzLCBnYWluLCBhbmNob3JGcmVx
IC8gKGZpbHRlclN0YWdlUmF0aW8gKiBmaWx0ZXJTdGFnZVJhdGlvICogZmlsdGVyU3RhZ2VSYXRp
bykpOworfQorCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6cHJvY2VzcyhBdWRpb0J1cyogc291
cmNlQnVzLCBBdWRpb0J1cyogZGVzdGluYXRpb25CdXMsIHVuc2lnbmVkIGZyYW1lc1RvUHJvY2Vz
cykKK3sKKyAgICBmbG9hdCogc291cmNlTCA9IHNvdXJjZUJ1cy0+Y2hhbm5lbCgwKS0+ZGF0YSgp
OworICAgIGZsb2F0KiBzb3VyY2VSOworCisgICAgaWYgKHNvdXJjZUJ1cy0+bnVtYmVyT2ZDaGFu
bmVscygpID4gMSkKKyAgICAgICAgc291cmNlUiA9IHNvdXJjZUJ1cy0+Y2hhbm5lbCgxKS0+ZGF0
YSgpOworICAgIGVsc2UKKyAgICAgICAgc291cmNlUiA9IHNvdXJjZUw7CisKKyAgICBBU1NFUlQo
ZGVzdGluYXRpb25CdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSAyKTsKKworICAgIGZsb2F0KiBk
ZXN0aW5hdGlvbkwgPSBkZXN0aW5hdGlvbkJ1cy0+Y2hhbm5lbCgwKS0+ZGF0YSgpOworICAgIGZs
b2F0KiBkZXN0aW5hdGlvblIgPSBkZXN0aW5hdGlvbkJ1cy0+Y2hhbm5lbCgxKS0+ZGF0YSgpOwor
CisgICAgZmxvYXQgZmlsdGVyU3RhZ2VHYWluID0gcGFyYW1ldGVyVmFsdWUoUGFyYW1GaWx0ZXJT
dGFnZUdhaW4pOworICAgIGZsb2F0IGZpbHRlclN0YWdlUmF0aW8gPSBwYXJhbWV0ZXJWYWx1ZShQ
YXJhbUZpbHRlclN0YWdlUmF0aW8pOworICAgIGZsb2F0IGFuY2hvciA9IHBhcmFtZXRlclZhbHVl
KFBhcmFtRmlsdGVyQW5jaG9yKTsKKworICAgIGlmIChmaWx0ZXJTdGFnZUdhaW4gIT0gbV9sYXN0
RmlsdGVyU3RhZ2VHYWluIHx8IGZpbHRlclN0YWdlUmF0aW8gIT0gbV9sYXN0RmlsdGVyU3RhZ2VS
YXRpbyB8fCBhbmNob3IgIT0gbV9sYXN0QW5jaG9yKSB7CisgICAgICAgIG1fbGFzdEZpbHRlclN0
YWdlR2FpbiA9IGZpbHRlclN0YWdlR2FpbjsKKyAgICAgICAgbV9sYXN0RmlsdGVyU3RhZ2VSYXRp
byA9IGZpbHRlclN0YWdlUmF0aW87CisgICAgICAgIG1fbGFzdEFuY2hvciA9IGFuY2hvcjsKKwor
ICAgICAgICBzZXRFbXBoYXNpc1BhcmFtZXRlcnMoZmlsdGVyU3RhZ2VHYWluLCBhbmNob3IsIGZp
bHRlclN0YWdlUmF0aW8pOworICAgIH0KKworICAgIC8vIEFwcGx5IHByZS1lbXBoYXNpcyBmaWx0
ZXIuCisgICAgLy8gTm90ZSB0aGF0IHRoZSBmaW5hbCB0aHJlZSBzdGFnZXMgYXJlIGNvbXB1dGVk
IGluLXBsYWNlIGluIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCisgICAgbV9wcmVGaWx0ZXJbMF0u
cHJvY2Vzcyhzb3VyY2VMLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgbV9w
cmVGaWx0ZXJbMV0ucHJvY2VzcyhkZXN0aW5hdGlvbkwsIGRlc3RpbmF0aW9uTCwgZnJhbWVzVG9Q
cm9jZXNzKTsKKyAgICBtX3ByZUZpbHRlclsyXS5wcm9jZXNzKGRlc3RpbmF0aW9uTCwgZGVzdGlu
YXRpb25MLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgIG1fcHJlRmlsdGVyWzNdLnByb2Nlc3MoZGVz
dGluYXRpb25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7CisKKyAgICBpZiAoaXNT
dGVyZW8oKSkgeworICAgICAgICBtX3ByZUZpbHRlclJbMF0ucHJvY2Vzcyhzb3VyY2VSLCBkZXN0
aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAgIG1fcHJlRmlsdGVyUlsxXS5wcm9j
ZXNzKGRlc3RpbmF0aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgICAg
ICBtX3ByZUZpbHRlclJbMl0ucHJvY2VzcyhkZXN0aW5hdGlvblIsIGRlc3RpbmF0aW9uUiwgZnJh
bWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgbV9wcmVGaWx0ZXJSWzNdLnByb2Nlc3MoZGVzdGluYXRp
b25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgfQorCisgICAgZmxvYXQg
ZGJUaHJlc2hvbGQgPSBwYXJhbWV0ZXJWYWx1ZShQYXJhbVRocmVzaG9sZCk7CisgICAgZmxvYXQg
ZGJIZWFkcm9vbSA9IHBhcmFtZXRlclZhbHVlKFBhcmFtSGVhZHJvb20pOworICAgIGZsb2F0IGF0
dGFja1RpbWUgPSBwYXJhbWV0ZXJWYWx1ZShQYXJhbUF0dGFjayk7CisgICAgZmxvYXQgcmVsZWFz
ZVRpbWUgPSBwYXJhbWV0ZXJWYWx1ZShQYXJhbVJlbGVhc2UpOworICAgIGZsb2F0IHByZURlbGF5
VGltZSA9IHBhcmFtZXRlclZhbHVlKFBhcmFtUHJlRGVsYXkpOworCisgICAgLy8gVGhpcyBpcyBl
ZmZlY3RpdmVseSBhIG1hc3RlciB2b2x1bWUgb24gdGhlIGNvbXByZXNzZWQgc2lnbmFsIChwcmUt
YmxlbmRpbmcpLgorICAgIGZsb2F0IGRiUG9zdEdhaW4gPSBwYXJhbWV0ZXJWYWx1ZShQYXJhbVBv
c3RHYWluKTsKKworICAgIC8vIExpbmVhciBibGVuZGluZyB2YWx1ZSBmcm9tIGRyeSB0byBjb21w
bGV0ZWx5IHByb2Nlc3NlZCAoMCAtPiAxKQorICAgIC8vIDAgbWVhbnMgdGhlIHNpZ25hbCBpcyBj
b21wbGV0ZWx5IHVucHJvY2Vzc2VkLgorICAgIC8vIDEgbWl4ZXMgaW4gb25seSB0aGUgY29tcHJl
c3NlZCBzaWduYWwuCisgICAgZmxvYXQgZWZmZWN0QmxlbmQgPSBwYXJhbWV0ZXJWYWx1ZShQYXJh
bUVmZmVjdEJsZW5kKTsKKworICAgIGRvdWJsZSByZWxlYXNlWm9uZTEgPSBwYXJhbWV0ZXJWYWx1
ZShQYXJhbVJlbGVhc2Vab25lMSk7CisgICAgZG91YmxlIHJlbGVhc2Vab25lMiA9IHBhcmFtZXRl
clZhbHVlKFBhcmFtUmVsZWFzZVpvbmUyKTsKKyAgICBkb3VibGUgcmVsZWFzZVpvbmUzID0gcGFy
YW1ldGVyVmFsdWUoUGFyYW1SZWxlYXNlWm9uZTMpOworICAgIGRvdWJsZSByZWxlYXNlWm9uZTQg
PSBwYXJhbWV0ZXJWYWx1ZShQYXJhbVJlbGVhc2Vab25lNCk7CisKKyAgICAvLyBBcHBseSBjb21w
cmVzc2lvbiB0byB0aGUgcHJlLWZpbHRlcmVkIHNpZ25hbC4KKyAgICAvLyBUaGUgcHJvY2Vzc2lu
ZyBpcyBwZXJmb3JtZWQgaW4gcGxhY2UuCisgICAgbV9jb21wcmVzc29yLnByb2Nlc3MoZGVzdGlu
YXRpb25MLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdGluYXRpb25SLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc1RvUHJvY2VzcywK
KworICAgICAgICAgICAgICAgICAgICAgICAgIGRiVGhyZXNob2xkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGRiSGVhZHJvb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNrVGlt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlVGltZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmVEZWxheVRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGJQb3N0
R2FpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RCbGVuZCwKKworICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbGVhc2Vab25lMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWxlYXNlWm9uZTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZVpvbmUzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2Vab25lNAorICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CisKKyAgICAvLyBBcHBseSBkZS1lbXBoYXNpcyBmaWx0ZXIuCisgICAgbV9wb3N0Rmls
dGVyWzBdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vz
cyk7CisgICAgbV9wb3N0RmlsdGVyWzFdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlv
bkwsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgbV9wb3N0RmlsdGVyWzJdLnByb2Nlc3MoZGVzdGlu
YXRpb25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgbV9wb3N0RmlsdGVy
WzNdLnByb2Nlc3MoZGVzdGluYXRpb25MLCBkZXN0aW5hdGlvbkwsIGZyYW1lc1RvUHJvY2Vzcyk7
CisKKyAgICBpZiAoaXNTdGVyZW8oKSkgeworICAgICAgICBtX3Bvc3RGaWx0ZXJSWzBdLnByb2Nl
c3MoZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgICAg
IG1fcG9zdEZpbHRlclJbMV0ucHJvY2VzcyhkZXN0aW5hdGlvblIsIGRlc3RpbmF0aW9uUiwgZnJh
bWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgbV9wb3N0RmlsdGVyUlsyXS5wcm9jZXNzKGRlc3RpbmF0
aW9uUiwgZGVzdGluYXRpb25SLCBmcmFtZXNUb1Byb2Nlc3MpOworICAgICAgICBtX3Bvc3RGaWx0
ZXJSWzNdLnByb2Nlc3MoZGVzdGluYXRpb25SLCBkZXN0aW5hdGlvblIsIGZyYW1lc1RvUHJvY2Vz
cyk7CisgICAgfQorfQorCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcjo6cmVzZXQoKQoreworICAg
IG1fbGFzdEZpbHRlclN0YWdlUmF0aW8gPSAtMTsgLy8gZm9yIHJlY2FsYworICAgIG1fbGFzdEFu
Y2hvciA9IC0xOworICAgIG1fbGFzdEZpbHRlclN0YWdlR2FpbiA9IC0xOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDQ7ICsraSkgeworICAgICAgICBtX3ByZUZpbHRlcltpXS5yZXNl
dCgpOworICAgICAgICBtX3ByZUZpbHRlclJbaV0ucmVzZXQoKTsKKyAgICAgICAgbV9wb3N0Rmls
dGVyW2ldLnJlc2V0KCk7CisgICAgICAgIG1fcG9zdEZpbHRlclJbaV0ucmVzZXQoKTsKKyAgICB9
CisKKyAgICBtX2NvbXByZXNzb3IucmVzZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvci5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEeW5hbWljc0NvbXByZXNzb3Jf
aAorI2RlZmluZSBEeW5hbWljc0NvbXByZXNzb3JfaAorCisjaW5jbHVkZSAiQXVkaW9BcnJheS5o
IgorI2luY2x1ZGUgIkR5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbC5oIgorI2luY2x1ZGUgIlplcm9Q
b2xlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9CdXM7CisKKy8vIER5
bmFtaWNzQ29tcHJlc3NvciBpbXBsZW1lbnRzIGEgZmxleGlibGUgYXVkaW8gZHluYW1pY3MgY29t
cHJlc3Npb24gZWZmZWN0IHN1Y2ggYXMKKy8vIGlzIGNvbW1vbmx5IHVzZWQgaW4gbXVzaWNhbCBw
cm9kdWN0aW9uIGFuZCBnYW1lIGF1ZGlvLiBJdCBsb3dlcnMgdGhlIHZvbHVtZQorLy8gb2YgdGhl
IGxvdWRlc3QgcGFydHMgb2YgdGhlIHNpZ25hbCBhbmQgcmFpc2VzIHRoZSB2b2x1bWUgb2YgdGhl
IHNvZnRlc3QgcGFydHMsCisvLyBtYWtpbmcgdGhlIHNvdW5kIHJpY2hlciwgZnVsbGVyLCBhbmQg
bW9yZSBjb250cm9sbGVkLgorCitjbGFzcyBEeW5hbWljc0NvbXByZXNzb3IgeworcHVibGljOgor
ICAgIGVudW0geworICAgICAgICBQYXJhbVRocmVzaG9sZCwKKyAgICAgICAgUGFyYW1IZWFkcm9v
bSwKKyAgICAgICAgUGFyYW1BdHRhY2ssCisgICAgICAgIFBhcmFtUmVsZWFzZSwKKyAgICAgICAg
UGFyYW1QcmVEZWxheSwKKyAgICAgICAgUGFyYW1SZWxlYXNlWm9uZTEsCisgICAgICAgIFBhcmFt
UmVsZWFzZVpvbmUyLAorICAgICAgICBQYXJhbVJlbGVhc2Vab25lMywKKyAgICAgICAgUGFyYW1S
ZWxlYXNlWm9uZTQsCisgICAgICAgIFBhcmFtUG9zdEdhaW4sCisgICAgICAgIFBhcmFtRmlsdGVy
U3RhZ2VHYWluLAorICAgICAgICBQYXJhbUZpbHRlclN0YWdlUmF0aW8sCisgICAgICAgIFBhcmFt
RmlsdGVyQW5jaG9yLAorICAgICAgICBQYXJhbUVmZmVjdEJsZW5kLAorICAgICAgICBQYXJhbUxh
c3QKKyAgICB9OworCisgICAgRHluYW1pY3NDb21wcmVzc29yKGJvb2wgaXNTdGVyZW8sIGRvdWJs
ZSBzYW1wbGVSYXRlKTsKKworICAgIHZvaWQgcHJvY2VzcyhBdWRpb0J1cyogc291cmNlQnVzLCBB
dWRpb0J1cyogZGVzdGluYXRpb25CdXMsIHVuc2lnbmVkIGZyYW1lc1RvUHJvY2Vzcyk7CisgICAg
dm9pZCByZXNldCgpOworCisgICAgZG91YmxlIHBhcmFtZXRlclZhbHVlKHVuc2lnbmVkIHBhcmFt
ZXRlcklEKTsKKworICAgIGJvb2wgaXNTdGVyZW8oKSBjb25zdCB7IHJldHVybiBtX2lzU3RlcmVv
OyB9CisgICAgZG91YmxlIHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7
IH0KKyAgICBkb3VibGUgbnlxdWlzdCgpIGNvbnN0IHsgcmV0dXJuIDAuNSAqIG1fc2FtcGxlUmF0
ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgLy8gbV9wYXJhbWV0ZXJzIGhvbGRzIHRoZSB0d2Vha2Fi
bGUgY29tcHJlc3NvciBwYXJhbWV0ZXJzLgorICAgIC8vIEZJWE1FOiBleHBvc2Ugc29tZSBvZiB0
aGUgbW9zdCBpbXBvcnRhbnQgb25lcyAoc3VjaCBhcyB0aHJlc2hvbGQsIGF0dGFjaywgcmVsZWFz
ZSkKKyAgICAvLyBhcyBEeW5hbWljc0NvbXByZXNzb3JOb2RlIGF0dHJpYnV0ZXMuCisgICAgZG91
YmxlIG1fcGFyYW1ldGVyc1tQYXJhbUxhc3RdOworICAgIHZvaWQgaW5pdGlhbGl6ZVBhcmFtZXRl
cnMoKTsKKworICAgIGJvb2wgbV9pc1N0ZXJlbzsKKyAgICBkb3VibGUgbV9zYW1wbGVSYXRlOwor
CisgICAgLy8gRW1waGFzaXMgZmlsdGVyIGNvbnRyb2xzLgorICAgIGZsb2F0IG1fbGFzdEZpbHRl
clN0YWdlUmF0aW87CisgICAgZmxvYXQgbV9sYXN0QW5jaG9yOworICAgIGZsb2F0IG1fbGFzdEZp
bHRlclN0YWdlR2FpbjsKKworICAgIC8vIEVtcGhhc2lzIGZpbHRlcnMuCisgICAgWmVyb1BvbGUg
bV9wcmVGaWx0ZXJbNF07CisgICAgWmVyb1BvbGUgbV9wcmVGaWx0ZXJSWzRdOworICAgIFplcm9Q
b2xlIG1fcG9zdEZpbHRlcls0XTsKKyAgICBaZXJvUG9sZSBtX3Bvc3RGaWx0ZXJSWzRdOworCisg
ICAgdm9pZCBzZXRFbXBoYXNpc1N0YWdlUGFyYW1ldGVycyh1bnNpZ25lZCBzdGFnZUluZGV4LCBm
bG9hdCBnYWluLCBmbG9hdCBub3JtYWxpemVkRnJlcXVlbmN5IC8qIDAgLT4gMSAqLyk7CisgICAg
dm9pZCBzZXRFbXBoYXNpc1BhcmFtZXRlcnMoZmxvYXQgZ2FpbiwgZmxvYXQgYW5jaG9yRnJlcSwg
ZmxvYXQgZmlsdGVyU3RhZ2VSYXRpbyk7CisKKyAgICAvLyBUaGUgY29yZSBjb21wcmVzc29yLgor
ICAgIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbCBtX2NvbXByZXNzb3I7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBEeW5hbWljc0NvbXByZXNzb3JfaApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0Nv
bXByZXNzb3JLZXJuZWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElP
KQorCisjaW5jbHVkZSAiRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmgiCisKKyNpbmNsdWRlICJB
dWRpb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKwordXNpbmcgbmFtZXNwYWNl
IHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgQXVkaW9VdGls
aXRpZXM7CisKKy8vIE1ldGVyaW5nIGhpdHMgcGVha3MgaW5zdGFudGx5LCBidXQgcmVsZWFzZXMg
dGhpcyBmYXN0IChpbiBzZWNvbmRzKS4KK2NvbnN0IGRvdWJsZSBtZXRlcmluZ1JlbGVhc2VUaW1l
Q29uc3RhbnQgPSAwLjMyNTsKKyAgICAKKy8vIEV4cG9uZW50aWFsIHNhdHVyYXRpb24gY3VydmUu
CitzdGF0aWMgZG91YmxlIHNhdHVyYXRlKGRvdWJsZSB4LCBkb3VibGUgaykKK3sKKyAgICByZXR1
cm4gMSAtIGV4cCgtayAqIHgpOworfQorCitEeW5hbWljc0NvbXByZXNzb3JLZXJuZWw6OkR5bmFt
aWNzQ29tcHJlc3Nvcktlcm5lbChkb3VibGUgc2FtcGxlUmF0ZSkKKyAgICA6IG1fc2FtcGxlUmF0
ZShzYW1wbGVSYXRlKQorICAgICwgbV9sYXN0UHJlRGVsYXlGcmFtZXMoRGVmYXVsdFByZURlbGF5
RnJhbWVzKQorICAgICwgbV9wcmVEZWxheUJ1ZmZlckwoTWF4UHJlRGVsYXlGcmFtZXMpCisgICAg
LCBtX3ByZURlbGF5QnVmZmVyUihNYXhQcmVEZWxheUZyYW1lcykKKyAgICAsIG1fcHJlRGVsYXlS
ZWFkSW5kZXgoMCkKKyAgICAsIG1fcHJlRGVsYXlXcml0ZUluZGV4KERlZmF1bHRQcmVEZWxheUZy
YW1lcykKK3sKKyAgICAvLyBJbml0aWFsaXplcyBtb3N0IG1lbWJlciB2YXJpYWJsZXMKKyAgICBy
ZXNldCgpOworICAgIAorICAgIG1fbWV0ZXJpbmdSZWxlYXNlSyA9IGRpc2NyZXRlVGltZUNvbnN0
YW50Rm9yU2FtcGxlUmF0ZShtZXRlcmluZ1JlbGVhc2VUaW1lQ29uc3RhbnQsIHNhbXBsZVJhdGUp
OworfQorCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6c2V0UHJlRGVsYXlUaW1lKGZs
b2F0IHByZURlbGF5VGltZSkKK3sKKyAgICAvLyBSZS1jb25maWd1cmUgbG9vay1haGVhZCBzZWN0
aW9uIHByZS1kZWxheSBpZiBkZWxheSB0aW1lIGhhcyBjaGFuZ2VkLgorICAgIHVuc2lnbmVkIHBy
ZURlbGF5RnJhbWVzID0gcHJlRGVsYXlUaW1lIC8gc2FtcGxlUmF0ZSgpOworICAgIGlmIChwcmVE
ZWxheUZyYW1lcyA+IE1heFByZURlbGF5RnJhbWVzIC0gMSkKKyAgICAgICAgcHJlRGVsYXlGcmFt
ZXMgPSBNYXhQcmVEZWxheUZyYW1lcyAtIDE7CisgICAgICAgIAorICAgIGlmIChtX2xhc3RQcmVE
ZWxheUZyYW1lcyAhPSBwcmVEZWxheUZyYW1lcykgeworICAgICAgICBtX2xhc3RQcmVEZWxheUZy
YW1lcyA9IHByZURlbGF5RnJhbWVzOworICAgICAgICBtX3ByZURlbGF5QnVmZmVyTC56ZXJvKCk7
CisgICAgICAgIG1fcHJlRGVsYXlCdWZmZXJSLnplcm8oKTsKKyAgICAgICAgbV9wcmVEZWxheVJl
YWRJbmRleCA9IDA7CisgICAgICAgIG1fcHJlRGVsYXlXcml0ZUluZGV4ID0gcHJlRGVsYXlGcmFt
ZXM7CisgICAgfQorfQorCit2b2lkIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbDo6cHJvY2Vzcyhm
bG9hdCogc291cmNlTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs
b2F0KiBkZXN0aW5hdGlvbkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCogc291cmNlUiwgLyogc3RlcmVvLWxpbmtlZCAqLworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uUiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZyYW1lc1RvUHJvY2VzcywKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZGJUaHJlc2hvbGQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkYkhlYWRyb29tLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYXR0YWNrVGltZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHJlbGVhc2VUaW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcHJlRGVsYXlU
aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZGJQb3N0
R2FpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGVmZmVj
dEJsZW5kLCAvKiBlcXVhbCBwb3dlciBjcm9zc2ZhZGUgKi8KKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcmVsZWFzZVpvbmUxLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcmVsZWFzZVpvbmUyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcmVsZWFzZVpvbmUzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcmVsZWFzZVpvbmU0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCit7CisgICAgYm9vbCBpc1N0ZXJlbyA9
IGRlc3RpbmF0aW9uUjsKKyAgICBmbG9hdCBzYW1wbGVSYXRlID0gdGhpcy0+c2FtcGxlUmF0ZSgp
OworCisgICAgZmxvYXQgZHJ5TWl4ID0gMSAtIGVmZmVjdEJsZW5kOworICAgIGZsb2F0IHdldE1p
eCA9IGVmZmVjdEJsZW5kOworCisgICAgLy8gVGhyZXNob2xkIGFuZCBoZWFkcm9vbS4KKyAgICBk
b3VibGUgbGluZWFyVGhyZXNob2xkID0gZGVjaWJlbHNUb0xpbmVhcihkYlRocmVzaG9sZCk7Cisg
ICAgZG91YmxlIGxpbmVhckhlYWRyb29tID0gZGVjaWJlbHNUb0xpbmVhcihkYkhlYWRyb29tKTsK
KworICAgIC8vIE1ha2V1cCBnYWluLgorICAgIGRvdWJsZSBtYXhpbXVtID0gMS4wNSAqIGxpbmVh
ckhlYWRyb29tICogbGluZWFyVGhyZXNob2xkOworICAgIGRvdWJsZSBrayA9IChtYXhpbXVtIC0g
bGluZWFyVGhyZXNob2xkKTsKKyAgICBkb3VibGUgaW52ZXJzZUtLID0gMSAvIGtrOworCisgICAg
ZG91YmxlIGZ1bGxSYW5nZUdhaW4gPSAobGluZWFyVGhyZXNob2xkICsga2sgKiBzYXR1cmF0ZSgx
IC0gbGluZWFyVGhyZXNob2xkLCAxKSk7CisgICAgZG91YmxlIGZ1bGxSYW5nZU1ha2V1cEdhaW4g
PSAxIC8gZnVsbFJhbmdlR2FpbjsKKyAgICAvLyBFbXBpcmljYWwvcGVyY2VwdHVhbCB0dW5pbmcu
CisgICAgZnVsbFJhbmdlTWFrZXVwR2FpbiA9IHBvdyhmdWxsUmFuZ2VNYWtldXBHYWluLCAwLjYp
OworCisgICAgZmxvYXQgbWFzdGVyTGluZWFyR2FpbiA9IGRlY2liZWxzVG9MaW5lYXIoZGJQb3N0
R2FpbikgKiBmdWxsUmFuZ2VNYWtldXBHYWluOworCisgICAgLy8gQXR0YWNrIHBhcmFtZXRlcnMu
CisgICAgYXR0YWNrVGltZSA9IG1heCgwLjAwMWYsIGF0dGFja1RpbWUpOworICAgIGZsb2F0IGF0
dGFja0ZyYW1lcyA9IGF0dGFja1RpbWUgKiBzYW1wbGVSYXRlOworCisgICAgLy8gUmVsZWFzZSBw
YXJhbWV0ZXJzLgorICAgIGZsb2F0IHJlbGVhc2VGcmFtZXMgPSBzYW1wbGVSYXRlICogcmVsZWFz
ZVRpbWU7CisgICAgCisgICAgLy8gRGV0ZWN0b3IgcmVsZWFzZSB0aW1lLgorICAgIGRvdWJsZSBz
YXRSZWxlYXNlVGltZSA9IDAuMDAyNTsKKyAgICBkb3VibGUgc2F0UmVsZWFzZUZyYW1lcyA9IHNh
dFJlbGVhc2VUaW1lICogc2FtcGxlUmF0ZTsKKworICAgIC8vIENyZWF0ZSBhIHNtb290aCBmdW5j
dGlvbiB3aGljaCBwYXNzZXMgdGhyb3VnaCBmb3VyIHBvaW50cy4KKworICAgIC8vIFBvbHlub21p
YWwgb2YgdGhlIGZvcm0KKyAgICAvLyB5ID0gYSArIGIqeCArIGMqeF4yICsgZCp4XjMgKyBlKnhe
NDsKKworICAgIGRvdWJsZSB5MSA9IHJlbGVhc2VGcmFtZXMgKiByZWxlYXNlWm9uZTE7CisgICAg
ZG91YmxlIHkyID0gcmVsZWFzZUZyYW1lcyAqIHJlbGVhc2Vab25lMjsKKyAgICBkb3VibGUgeTMg
PSByZWxlYXNlRnJhbWVzICogcmVsZWFzZVpvbmUzOworICAgIGRvdWJsZSB5NCA9IHJlbGVhc2VG
cmFtZXMgKiByZWxlYXNlWm9uZTQ7CisKKyAgICAvLyBBbGwgb2YgdGhlc2UgY29lZmZpY2llbnRz
IHdlcmUgZGVyaXZlZCBmb3IgNHRoIG9yZGVyIHBvbHlub21pYWwgY3VydmUgZml0dGluZyB3aGVy
ZSB0aGUgeSB2YWx1ZXMKKyAgICAvLyBtYXRjaCB0aGUgZXZlbmx5IHNwYWNlZCB4IHZhbHVlcyBh
cyBmb2xsb3dzOiAoeTEgOiB4ID09IDAsIHkyIDogeCA9PSAxLCB5MyA6IHggPT0gMiwgeTQgOiB4
ID09IDMpCisgICAgZG91YmxlIGtBID0gMC45OTk5OTk5OTk5OTk5OTk4KnkxICsgMS44NDMyMjE5
Njg0MzIzOTIzZS0xNip5MiAtIDEuOTM3MzM5NDM1MTY3NjQyM2UtMTYqeTMgKyA4LjgyNDUxNjAx
MTgxNjI0NWUtMTgqeTQ7CisgICAgZG91YmxlIGtCID0gLTEuNTc4ODMyMDM1Mjg0NTg4OCp5MSAr
IDIuMzMwNTgzNzAzMjA3NDI4Nip5MiAtIDAuOTE0MTE5NDIwNDg0MDQyOSp5MyArIDAuMTYyMzY3
NzUyNTYxMjAzMip5NDsKKyAgICBkb3VibGUga0MgPSAwLjUzMzQxNDI4NjkxMDY0MjQqeTEgLSAx
LjI3MjczNjc4OTIxMzYzMSp5MiArIDAuOTI1ODg1NjA0MjIwNzUxMip5MyAtIDAuMTg2NTYzMTAx
OTE3NzYyMjYqeTQ7CisgICAgZG91YmxlIGtEID0gMC4wODc4MzQ2MzEzODIwNzIzNCp5MSAtIDAu
MTY5NDE2Mjk2NzkyNTYyMip5MiArIDAuMDg1ODgwNTc5NTE1OTUyNzIqeTMgLSAwLjAwNDI5ODkx
NDEwNTQ2MjgzKnk0OworICAgIGRvdWJsZSBrRSA9IC0wLjA0MjQxNjg4MzAwODEyMzA3NCp5MSAr
IDAuMTExNTY5MzgyNzk4NzYwMip5MiAtIDAuMDk3NjQ2NzYzMjUyNjU4NzIqeTMgKyAwLjAyODQ5
NDI2MzQ2MjAyMTU3Nip5NDsKKworICAgIC8vIHggcmFuZ2VzIGZyb20gMCAtPiAzICAgICAgIDAg
ICAgMSAgICAyICAgMworICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgLTE1ICAtMTAg
IC01ICAgMGRiCisKKyAgICAvLyB5IGNhbGN1bGF0ZXMgYWRhcHRpdmUgcmVsZWFzZSBmcmFtZXMg
ZGVwZW5kaW5nIG9uIHRoZSBhbW91bnQgb2YgY29tcHJlc3Npb24uCisKKyAgICBzZXRQcmVEZWxh
eVRpbWUocHJlRGVsYXlUaW1lKTsKKyAgICAKKyAgICBjb25zdCBpbnQgbkRpdmlzaW9uRnJhbWVz
ID0gMzI7CisKKyAgICBjb25zdCBpbnQgbkRpdmlzaW9ucyA9IGZyYW1lc1RvUHJvY2VzcyAvIG5E
aXZpc2lvbkZyYW1lczsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkRpdmlzaW9uczsgKytp
KSB7CisgICAgICAgIC8vIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICAgICAg
ICAvLyBDYWxjdWxhdGUgZGVzaXJlZCBnYWluCisgICAgICAgIC8vIH5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fgorCisgICAgICAgIC8vIEZpeCBncmVtbGlucy4KKyAgICAgICAgaWYg
KGlzbmFuKG1fZGV0ZWN0b3JBdmVyYWdlKSkKKyAgICAgICAgICAgIG1fZGV0ZWN0b3JBdmVyYWdl
ID0gMTsKKyAgICAgICAgaWYgKGlzaW5mKG1fZGV0ZWN0b3JBdmVyYWdlKSkKKyAgICAgICAgICAg
IG1fZGV0ZWN0b3JBdmVyYWdlID0gMTsKKworICAgICAgICBmbG9hdCBkZXNpcmVkR2FpbiA9IG1f
ZGV0ZWN0b3JBdmVyYWdlOworCisgICAgICAgIC8vIFByZS13YXJwIHNvIHdlIGdldCBkZXNpcmVk
R2FpbiBhZnRlciBzaW4oKSB3YXJwIGJlbG93LgorICAgICAgICBkb3VibGUgc2NhbGVkRGVzaXJl
ZEdhaW4gPSBhc2luKGRlc2lyZWRHYWluKSAvICgwLjUgKiBNX1BJKTsKKworICAgICAgICAvLyB+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgICAgICAgLy8gRGVhbCB3aXRoIGVu
dmVsb3BlcworICAgICAgICAvLyB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwor
ICAgICAgICAvLyBlbnZlbG9wZVJhdGUgaXMgdGhlIHJhdGUgd2Ugc2xldyBmcm9tIGN1cnJlbnQg
Y29tcHJlc3NvciBsZXZlbCB0byB0aGUgZGVzaXJlZCBsZXZlbC4KKyAgICAgICAgLy8gVGhlIGV4
YWN0IHJhdGUgZGVwZW5kcyBvbiBpZiB3ZSdyZSBhdHRhY2tpbmcgb3IgcmVsZWFzaW5nIGFuZCBi
eSBob3cgbXVjaC4KKyAgICAgICAgZmxvYXQgZW52ZWxvcGVSYXRlOworCisgICAgICAgIGJvb2wg
aXNSZWxlYXNpbmcgPSBzY2FsZWREZXNpcmVkR2FpbiA+IG1fY29tcHJlc3NvckdhaW47CisKKyAg
ICAgICAgLy8gY29tcHJlc3Npb25EaWZmRGIgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBjdXJy
ZW50IGNvbXByZXNzaW9uIGxldmVsIGFuZCB0aGUgZGVzaXJlZCBsZXZlbC4KKyAgICAgICAgZG91
YmxlIGNvbXByZXNzaW9uRGlmZkRiID0gbGluZWFyVG9EZWNpYmVscyhtX2NvbXByZXNzb3JHYWlu
IC8gc2NhbGVkRGVzaXJlZEdhaW4pOworCisgICAgICAgIGlmIChpc1JlbGVhc2luZykgeworICAg
ICAgICAgICAgLy8gUmVsZWFzZSBtb2RlIC0gY29tcHJlc3Npb25EaWZmRGIgc2hvdWxkIGJlIG5l
Z2F0aXZlIGRCCisgICAgICAgICAgICBtX21heEF0dGFja0NvbXByZXNzaW9uRGlmZkRiID0gLTE7
CisKKyAgICAgICAgICAgIC8vIEZpeCBncmVtbGlucy4KKyAgICAgICAgICAgIGlmIChpc25hbihj
b21wcmVzc2lvbkRpZmZEYikpCisgICAgICAgICAgICAgICAgY29tcHJlc3Npb25EaWZmRGIgPSAt
MTsKKyAgICAgICAgICAgIGlmIChpc2luZihjb21wcmVzc2lvbkRpZmZEYikpCisgICAgICAgICAg
ICAgICAgY29tcHJlc3Npb25EaWZmRGIgPSAtMTsKKworICAgICAgICAgICAgLy8gQWRhcHRpdmUg
cmVsZWFzZSAtIGhpZ2hlciBjb21wcmVzc2lvbiAobG93ZXIgY29tcHJlc3Npb25EaWZmRGIpICBy
ZWxlYXNlcyBmYXN0ZXIuCisKKyAgICAgICAgICAgIC8vIENvbnRhaW4gd2l0aGluIHJhbmdlOiAt
MTIgLT4gMCB0aGVuIHNjYWxlIHRvIGdvIGZyb20gMCAtPiAzCisgICAgICAgICAgICBkb3VibGUg
eCA9IGNvbXByZXNzaW9uRGlmZkRiOworICAgICAgICAgICAgeCA9IG1heCgtMTIuLCB4KTsKKyAg
ICAgICAgICAgIHggPSBtaW4oMC4sIHgpOworICAgICAgICAgICAgeCA9IDAuMjUgKiAoeCArIDEy
KTsKKworICAgICAgICAgICAgLy8gQ29tcHV0ZSBhZGFwdGl2ZSByZWxlYXNlIGN1cnZlIHVzaW5n
IDR0aCBvcmRlciBwb2x5bm9taWFsLgorICAgICAgICAgICAgLy8gTm9ybWFsIHZhbHVlcyBmb3Ig
dGhlIHBvbHlub21pYWwgY29lZmZpY2llbnRzIHdvdWxkIGNyZWF0ZSBhIG1vbm90b25pY2FsbHkg
aW5jcmVhc2luZyBmdW5jdGlvbi4KKyAgICAgICAgICAgIGRvdWJsZSB4MiA9IHggKiB4OworICAg
ICAgICAgICAgZG91YmxlIHgzID0geDIgKiB4OworICAgICAgICAgICAgZG91YmxlIHg0ID0geDIg
KiB4MjsKKyAgICAgICAgICAgIGRvdWJsZSByZWxlYXNlRnJhbWVzID0ga0EgKyBrQiAqIHggKyBr
QyAqIHgyICsga0QgKiB4MyArIGtFICogeDQ7CisKKyNkZWZpbmUga1NwYWNpbmdEYiA1CisgICAg
ICAgICAgICBkb3VibGUgZGJQZXJGcmFtZSA9IGtTcGFjaW5nRGIgLyByZWxlYXNlRnJhbWVzOwor
CisgICAgICAgICAgICBlbnZlbG9wZVJhdGUgPSBkZWNpYmVsc1RvTGluZWFyKGRiUGVyRnJhbWUp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQXR0YWNrIG1vZGUgLSBjb21wcmVz
c2lvbkRpZmZEYiBzaG91bGQgYmUgcG9zaXRpdmUgZEIKKworICAgICAgICAgICAgLy8gRml4IGdy
ZW1saW5zLgorICAgICAgICAgICAgaWYgKGlzbmFuKGNvbXByZXNzaW9uRGlmZkRiKSkKKyAgICAg
ICAgICAgICAgICBjb21wcmVzc2lvbkRpZmZEYiA9IDE7CisgICAgICAgICAgICBpZiAoaXNpbmYo
Y29tcHJlc3Npb25EaWZmRGIpKQorICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uRGlmZkRiID0g
MTsKKworICAgICAgICAgICAgLy8gQXMgbG9uZyBhcyB3ZSdyZSBzdGlsbCBpbiBhdHRhY2sgbW9k
ZSwgdXNlIGEgcmF0ZSBiYXNlZCBvZmYKKyAgICAgICAgICAgIC8vIHRoZSBsYXJnZXN0IGNvbXBy
ZXNzaW9uRGlmZkRiIHdlJ3ZlIGVuY291bnRlcmVkIHNvIGZhci4KKyAgICAgICAgICAgIGlmICht
X21heEF0dGFja0NvbXByZXNzaW9uRGlmZkRiID09IC0xIHx8IG1fbWF4QXR0YWNrQ29tcHJlc3Np
b25EaWZmRGIgPCBjb21wcmVzc2lvbkRpZmZEYikKKyAgICAgICAgICAgICAgICBtX21heEF0dGFj
a0NvbXByZXNzaW9uRGlmZkRiID0gY29tcHJlc3Npb25EaWZmRGI7CisKKyAgICAgICAgICAgIGRv
dWJsZSBlZmZBdHRlbkRpZmZEYiA9IG1heCgwLjVmLCBtX21heEF0dGFja0NvbXByZXNzaW9uRGlm
ZkRiKTsKKworICAgICAgICAgICAgZG91YmxlIHggPSAwLjI1IC8gZWZmQXR0ZW5EaWZmRGI7Cisg
ICAgICAgICAgICBlbnZlbG9wZVJhdGUgPSAxIC0gcG93KHgsIGRvdWJsZSgxIC8gYXR0YWNrRnJh
bWVzKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn4KKyAgICAgICAgLy8gSW5uZXIgbG9vcCAtIGNhbGN1bGF0ZSBzaGFwZWQgcG93ZXIg
YXZlcmFnZSAtIGFwcGx5IGNvbXByZXNzaW9uLgorICAgICAgICAvLyB+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn4KKworICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCogZGVsYXlC
dWZmZXJMID0gbV9wcmVEZWxheUJ1ZmZlckwuZGF0YSgpOworICAgICAgICAgICAgZmxvYXQqIGRl
bGF5QnVmZmVyUiA9IG1fcHJlRGVsYXlCdWZmZXJSLmRhdGEoKTsKKyAgICAgICAgICAgIGludCBw
cmVEZWxheVJlYWRJbmRleCA9IG1fcHJlRGVsYXlSZWFkSW5kZXg7CisgICAgICAgICAgICBpbnQg
cHJlRGVsYXlXcml0ZUluZGV4ID0gbV9wcmVEZWxheVdyaXRlSW5kZXg7CisgICAgICAgICAgICBm
bG9hdCBkZXRlY3RvckF2ZXJhZ2UgPSBtX2RldGVjdG9yQXZlcmFnZTsKKyAgICAgICAgICAgIGZs
b2F0IGNvbXByZXNzb3JHYWluID0gbV9jb21wcmVzc29yR2FpbjsKKworICAgICAgICAgICAgaW50
IGxvb3BGcmFtZXMgPSBuRGl2aXNpb25GcmFtZXM7CisgICAgICAgICAgICB3aGlsZSAobG9vcEZy
YW1lcy0tKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgY29tcHJlc3NvcklucHV0OworICAgICAg
ICAgICAgICAgIGZsb2F0IGlucHV0TDsKKyAgICAgICAgICAgICAgICBmbG9hdCBpbnB1dFIgPSAw
OworCisgICAgICAgICAgICAgICAgLy8gUHJlZGVsYXkgc2lnbmFsLCBjb21wdXRpbmcgY29tcHJl
c3Npb24gYW1vdW50IGZyb20gdW4tZGVsYXllZCB2ZXJzaW9uLgorICAgICAgICAgICAgICAgIGlm
IChpc1N0ZXJlbykgeworICAgICAgICAgICAgICAgICAgICBmbG9hdCB1bmRlbGF5ZWRMID0gKnNv
dXJjZUwrKzsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgdW5kZWxheWVkUiA9ICpzb3VyY2VS
Kys7CisKKyAgICAgICAgICAgICAgICAgICAgY29tcHJlc3NvcklucHV0ID0gMC41ICogKHVuZGVs
YXllZEwgKyB1bmRlbGF5ZWRSKTsKKworICAgICAgICAgICAgICAgICAgICBpbnB1dEwgPSBkZWxh
eUJ1ZmZlckxbcHJlRGVsYXlSZWFkSW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpbnB1dFIg
PSBkZWxheUJ1ZmZlclJbcHJlRGVsYXlSZWFkSW5kZXhdOworCisgICAgICAgICAgICAgICAgICAg
IGRlbGF5QnVmZmVyTFtwcmVEZWxheVdyaXRlSW5kZXhdID0gdW5kZWxheWVkTDsKKyAgICAgICAg
ICAgICAgICAgICAgZGVsYXlCdWZmZXJSW3ByZURlbGF5V3JpdGVJbmRleF0gPSB1bmRlbGF5ZWRS
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXByZXNz
b3JJbnB1dCA9ICpzb3VyY2VMKys7CisKKyAgICAgICAgICAgICAgICAgICAgaW5wdXRMID0gZGVs
YXlCdWZmZXJMW3ByZURlbGF5UmVhZEluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgZGVsYXlC
dWZmZXJMW3ByZURlbGF5V3JpdGVJbmRleF0gPSBjb21wcmVzc29ySW5wdXQ7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgcHJlRGVsYXlSZWFkSW5kZXggPSAocHJlRGVsYXlS
ZWFkSW5kZXggKyAxKSAmIE1heFByZURlbGF5RnJhbWVzTWFzazsKKyAgICAgICAgICAgICAgICBw
cmVEZWxheVdyaXRlSW5kZXggPSAocHJlRGVsYXlXcml0ZUluZGV4ICsgMSkgJiBNYXhQcmVEZWxh
eUZyYW1lc01hc2s7CisKKyAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgc2hhcGVkIHBvd2Vy
IG9uIHVuZGVsYXllZCBpbnB1dC4KKworICAgICAgICAgICAgICAgIGZsb2F0IHNjYWxlZElucHV0
ID0gY29tcHJlc3NvcklucHV0OworICAgICAgICAgICAgICAgIGRvdWJsZSBhYnNJbnB1dCA9IHNj
YWxlZElucHV0ID4gMCA/IHNjYWxlZElucHV0IDogLXNjYWxlZElucHV0OworCisgICAgICAgICAg
ICAgICAgLy8gUHV0IHRocm91Z2ggc2hhcGluZyBjdXJ2ZS4KKyAgICAgICAgICAgICAgICAvLyBU
aGlzIGlzIGxpbmVhciB1cCB0byB0aGUgdGhyZXNob2xkLCB0aGVuIGV4cG9uZW50aWFsbHkgYXBw
cm9hY2hlcyB0aGUgbWF4aW11bSAoaGVhZHJvb20gYW1vdW50IGFib3ZlIHRocmVzaG9sZCkuCisg
ICAgICAgICAgICAgICAgLy8gVGhlIHRyYW5zaXRpb24gZnJvbSB0aGUgdGhyZXNob2xkIHRvIHRo
ZSBleHBvbmVudGlhbCBwb3J0aW9uIGlzIHNtb290aCAoMXN0IGRlcml2YXRpdmUgbWF0Y2hlZCku
CisgICAgICAgICAgICAgICAgZG91YmxlIHNoYXBlZElucHV0ID0gYWJzSW5wdXQgPCBsaW5lYXJU
aHJlc2hvbGQgPyBhYnNJbnB1dCA6IGxpbmVhclRocmVzaG9sZCArIGtrICogc2F0dXJhdGUoYWJz
SW5wdXQgLSBsaW5lYXJUaHJlc2hvbGQsIGludmVyc2VLSyk7CisKKyAgICAgICAgICAgICAgICBk
b3VibGUgYXR0ZW51YXRpb24gPSBhYnNJbnB1dCA8PSAwLjAwMDEgPyAxIDogc2hhcGVkSW5wdXQg
LyBhYnNJbnB1dDsKKworICAgICAgICAgICAgICAgIGRvdWJsZSBhdHRlbnVhdGlvbkRiID0gLWxp
bmVhclRvRGVjaWJlbHMoYXR0ZW51YXRpb24pOworICAgICAgICAgICAgICAgIGF0dGVudWF0aW9u
RGIgPSBtYXgoMi4sIGF0dGVudWF0aW9uRGIpOworCisgICAgICAgICAgICAgICAgZG91YmxlIGRi
UGVyRnJhbWUgPSBhdHRlbnVhdGlvbkRiIC8gc2F0UmVsZWFzZUZyYW1lczsKKworICAgICAgICAg
ICAgICAgIGRvdWJsZSBzYXRSZWxlYXNlUmF0ZSA9IGRlY2liZWxzVG9MaW5lYXIoZGJQZXJGcmFt
ZSkgLSAxOworCisgICAgICAgICAgICAgICAgYm9vbCBpc1JlbGVhc2UgPSAoYXR0ZW51YXRpb24g
PiBkZXRlY3RvckF2ZXJhZ2UpOworICAgICAgICAgICAgICAgIGRvdWJsZSByYXRlID0gaXNSZWxl
YXNlID8gc2F0UmVsZWFzZVJhdGUgOiAxOworCisgICAgICAgICAgICAgICAgZGV0ZWN0b3JBdmVy
YWdlICs9IChhdHRlbnVhdGlvbiAtIGRldGVjdG9yQXZlcmFnZSkgKiByYXRlOworICAgICAgICAg
ICAgICAgIGRldGVjdG9yQXZlcmFnZSA9IG1pbigxLjBmLCBkZXRlY3RvckF2ZXJhZ2UpOworCisg
ICAgICAgICAgICAgICAgLy8gRml4IGdyZW1saW5zLgorICAgICAgICAgICAgICAgIGlmIChpc25h
bihkZXRlY3RvckF2ZXJhZ2UpKQorICAgICAgICAgICAgICAgICAgICBkZXRlY3RvckF2ZXJhZ2Ug
PSAxOworICAgICAgICAgICAgICAgIGlmIChpc2luZihkZXRlY3RvckF2ZXJhZ2UpKQorICAgICAg
ICAgICAgICAgICAgICBkZXRlY3RvckF2ZXJhZ2UgPSAxOworCisgICAgICAgICAgICAgICAgLy8g
RXhwb25lbnRpYWwgYXBwcm9hY2ggdG8gZGVzaXJlZCBnYWluLgorICAgICAgICAgICAgICAgIGlm
IChlbnZlbG9wZVJhdGUgPCAxKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEF0dGFjayAtIHJl
ZHVjZSBnYWluIHRvIGRlc2lyZWQuCisgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb3JHYWlu
ICs9IChzY2FsZWREZXNpcmVkR2FpbiAtIGNvbXByZXNzb3JHYWluKSAqIGVudmVsb3BlUmF0ZTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBSZWxlYXNl
IC0gZXhwb25lbnRpYWxseSBpbmNyZWFzZSBnYWluIHRvIDEuMAorICAgICAgICAgICAgICAgICAg
ICBjb21wcmVzc29yR2FpbiAqPSBlbnZlbG9wZVJhdGU7CisgICAgICAgICAgICAgICAgICAgIGNv
bXByZXNzb3JHYWluID0gbWluKDEuMGYsIGNvbXByZXNzb3JHYWluKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAvLyBXYXJwIHByZS1jb21wcmVzc2lvbiBnYWluIHRvIHNt
b290aCBvdXQgc2hhcnAgZXhwb25lbnRpYWwgdHJhbnNpdGlvbiBwb2ludHMuCisgICAgICAgICAg
ICAgICAgZG91YmxlIHBvc3RXYXJwQ29tcHJlc3NvckdhaW4gPSBzaW4oMC41ICogTV9QSSAqIGNv
bXByZXNzb3JHYWluKTsKKworICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0b3RhbCBnYWlu
IHVzaW5nIG1hc3RlciBnYWluIGFuZCBlZmZlY3QgYmxlbmQuCisgICAgICAgICAgICAgICAgZG91
YmxlIHRvdGFsR2FpbiA9IGRyeU1peCArIHdldE1peCAqIG1hc3RlckxpbmVhckdhaW4gKiBwb3N0
V2FycENvbXByZXNzb3JHYWluOworCisgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIG1ldGVy
aW5nLgorICAgICAgICAgICAgICAgIGRvdWJsZSBkYlJlYWxHYWluID0gMjAgKiBsb2cxMChwb3N0
V2FycENvbXByZXNzb3JHYWluKTsKKyAgICAgICAgICAgICAgICBpZiAoZGJSZWFsR2FpbiA8IG1f
bWV0ZXJpbmdHYWluKQorICAgICAgICAgICAgICAgICAgICBtX21ldGVyaW5nR2FpbiA9IGRiUmVh
bEdhaW47CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX21ldGVy
aW5nR2FpbiArPSAoZGJSZWFsR2FpbiAtIG1fbWV0ZXJpbmdHYWluKSAqIG1fbWV0ZXJpbmdSZWxl
YXNlSzsKKworICAgICAgICAgICAgICAgIC8vIEFwcGx5IGZpbmFsIGdhaW4uCisgICAgICAgICAg
ICAgICAgaWYgKGlzU3RlcmVvKSB7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IG91dHB1dEwg
PSBpbnB1dEw7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IG91dHB1dFIgPSBpbnB1dFI7CisK
KyAgICAgICAgICAgICAgICAgICAgb3V0cHV0TCAqPSB0b3RhbEdhaW47CisgICAgICAgICAgICAg
ICAgICAgIG91dHB1dFIgKj0gdG90YWxHYWluOworCisgICAgICAgICAgICAgICAgICAgICpkZXN0
aW5hdGlvbkwrKyA9IG91dHB1dEw7CisgICAgICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblIr
KyA9IG91dHB1dFI7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICpkZXN0aW5hdGlvbkwrKyA9IGlucHV0TCAqIHRvdGFsR2FpbjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gTG9jYWxzIGJhY2sgdG8gbWVtYmVyIHZhcmlhYmxlcy4KKyAgICAgICAg
ICAgIG1fcHJlRGVsYXlSZWFkSW5kZXggPSBwcmVEZWxheVJlYWRJbmRleDsKKyAgICAgICAgICAg
IG1fcHJlRGVsYXlXcml0ZUluZGV4ID0gcHJlRGVsYXlXcml0ZUluZGV4OworICAgICAgICAgICAg
bV9kZXRlY3RvckF2ZXJhZ2UgPSBkZXRlY3RvckF2ZXJhZ2U7CisgICAgICAgICAgICBtX2NvbXBy
ZXNzb3JHYWluID0gY29tcHJlc3NvckdhaW47CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
RHluYW1pY3NDb21wcmVzc29yS2VybmVsOjpyZXNldCgpCit7CisgICAgbV9kZXRlY3RvckF2ZXJh
Z2UgPSAwOworICAgIG1fY29tcHJlc3NvckdhaW4gPSAxOworICAgIG1fbWV0ZXJpbmdHYWluID0g
MTsKKworICAgIC8vIFByZWRlbGF5IHNlY3Rpb24uCisgICAgbV9wcmVEZWxheUJ1ZmZlckwuemVy
bygpOworICAgIG1fcHJlRGVsYXlCdWZmZXJSLnplcm8oKTsKKyAgICBtX3ByZURlbGF5UmVhZElu
ZGV4ID0gMDsKKyAgICBtX3ByZURlbGF5V3JpdGVJbmRleCA9IERlZmF1bHRQcmVEZWxheUZyYW1l
czsKKworICAgIG1fbWF4QXR0YWNrQ29tcHJlc3Npb25EaWZmRGIgPSAtMTsgLy8gdW5pbml0aWFs
aXplZCBzdGF0ZQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRHluYW1p
Y3NDb21wcmVzc29yS2VybmVsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vRHluYW1pY3NDb21wcmVzc29yS2VybmVsLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EeW5hbWljc0NvbXByZXNzb3JLZXJuZWwuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRHluYW1pY3NDb21wcmVzc29yS2Vy
bmVsX2gKKyNkZWZpbmUgRHluYW1pY3NDb21wcmVzc29yS2VybmVsX2gKKworI2luY2x1ZGUgIkF1
ZGlvQXJyYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEeW5hbWljc0NvbXBy
ZXNzb3JLZXJuZWwgeworcHVibGljOgorICAgIER5bmFtaWNzQ29tcHJlc3Nvcktlcm5lbChkb3Vi
bGUgc2FtcGxlUmF0ZSk7CisKKyAgICAvLyBQZXJmb3JtcyBzdGVyZW8tbGlua2VkIGNvbXByZXNz
aW9uLgorICAgIHZvaWQgcHJvY2VzcyhmbG9hdCAqc291cmNlTCwKKyAgICAgICAgICAgICAgICAg
ZmxvYXQgKmRlc3RpbmF0aW9uTCwKKyAgICAgICAgICAgICAgICAgZmxvYXQgKnNvdXJjZVIsCisg
ICAgICAgICAgICAgICAgIGZsb2F0ICpkZXN0aW5hdGlvblIsCisgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGZyYW1lc1RvUHJvY2VzcywKKworICAgICAgICAgICAgICAgICBmbG9hdCBkYlRocmVz
aG9sZCwKKyAgICAgICAgICAgICAgICAgZmxvYXQgZGJIZWFkcm9vbSwKKyAgICAgICAgICAgICAg
ICAgZmxvYXQgYXR0YWNrVGltZSwKKyAgICAgICAgICAgICAgICAgZmxvYXQgcmVsZWFzZVRpbWUs
CisgICAgICAgICAgICAgICAgIGZsb2F0IHByZURlbGF5VGltZSwKKyAgICAgICAgICAgICAgICAg
ZmxvYXQgZGJQb3N0R2FpbiwKKyAgICAgICAgICAgICAgICAgZmxvYXQgZWZmZWN0QmxlbmQsCisK
KyAgICAgICAgICAgICAgICAgZmxvYXQgcmVsZWFzZVpvbmUxLAorICAgICAgICAgICAgICAgICBm
bG9hdCByZWxlYXNlWm9uZTIsCisgICAgICAgICAgICAgICAgIGZsb2F0IHJlbGVhc2Vab25lMywK
KyAgICAgICAgICAgICAgICAgZmxvYXQgcmVsZWFzZVpvbmU0CisgICAgICAgICAgICAgICAgICk7
CisKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICB1bnNpZ25lZCBsYXRlbmN5RnJhbWVzKCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0UHJlRGVsYXlGcmFtZXM7IH0KKworICAgIGZsb2F0IHNhbXBsZVJh
dGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KKworcHJvdGVjdGVkOgorICAgIGZs
b2F0IG1fc2FtcGxlUmF0ZTsKKyAgICAKKyAgICBmbG9hdCBtX2RldGVjdG9yQXZlcmFnZTsKKyAg
ICBmbG9hdCBtX2NvbXByZXNzb3JHYWluOworCisgICAgLy8gTWV0ZXJpbmcKKyAgICBmbG9hdCBt
X21ldGVyaW5nUmVsZWFzZUs7CisgICAgZmxvYXQgbV9tZXRlcmluZ0dhaW47CisKKyAgICAvLyBM
b29rYWhlYWQgc2VjdGlvbi4KKyAgICBlbnVtIHsgTWF4UHJlRGVsYXlGcmFtZXMgPSAxMDI0IH07
CisgICAgZW51bSB7IE1heFByZURlbGF5RnJhbWVzTWFzayA9IE1heFByZURlbGF5RnJhbWVzIC0g
MSB9OworICAgIGVudW0geyBEZWZhdWx0UHJlRGVsYXlGcmFtZXMgPSAyNTYgfTsgLy8gc2V0UHJl
RGVsYXlUaW1lKCkgd2lsbCBvdmVycmlkZSB0aGlzIGluaXRpYWwgdmFsdWUKKyAgICB1bnNpZ25l
ZCBtX2xhc3RQcmVEZWxheUZyYW1lczsKKyAgICB2b2lkIHNldFByZURlbGF5VGltZShmbG9hdCk7
CisKKyAgICBBdWRpb0Zsb2F0QXJyYXkgbV9wcmVEZWxheUJ1ZmZlckw7CisgICAgQXVkaW9GbG9h
dEFycmF5IG1fcHJlRGVsYXlCdWZmZXJSOworICAgIGludCBtX3ByZURlbGF5UmVhZEluZGV4Owor
ICAgIGludCBtX3ByZURlbGF5V3JpdGVJbmRleDsKKworICAgIGZsb2F0IG1fbWF4QXR0YWNrQ29t
cHJlc3Npb25EaWZmRGI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBEeW5hbWljc0NvbXByZXNzb3JLZXJuZWxfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vWmVyb1BvbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL1plcm9Qb2xlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL1plcm9Qb2xlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRl
ICJaZXJvUG9sZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgWmVyb1BvbGU6OnBy
b2Nlc3MoZmxvYXQgKnNvdXJjZSwgZmxvYXQgKmRlc3RpbmF0aW9uLCB1bnNpZ25lZCBmcmFtZXNU
b1Byb2Nlc3MpCit7CisgICAgZmxvYXQgemVybyA9IG1femVybzsKKyAgICBmbG9hdCBwb2xlID0g
bV9wb2xlOworCisgICAgLy8gR2FpbiBjb21wZW5zYXRpb24gdG8gbWFrZSAwZEIgQCAwSHoKKyAg
ICBjb25zdCBmbG9hdCBrMSA9IDEgLyAoMSAtIHplcm8pOworICAgIGNvbnN0IGZsb2F0IGsyID0g
MSAtIHBvbGU7CisgICAgCisgICAgLy8gTWVtYmVyIHZhcmlhYmxlcyB0byBsb2NhbHMuCisgICAg
ZmxvYXQgbGFzdFggPSBtX2xhc3RYOworICAgIGZsb2F0IGxhc3RZID0gbV9sYXN0WTsKKworICAg
IHdoaWxlIChmcmFtZXNUb1Byb2Nlc3MtLSkgeworICAgICAgICBmbG9hdCBpbnB1dCA9ICpzb3Vy
Y2UrKzsKKworICAgICAgICAvLyBaZXJvCisgICAgICAgIGZsb2F0IG91dHB1dDEgPSBrMSAqIChp
bnB1dCAtIHplcm8gKiBsYXN0WCk7CisgICAgICAgIGxhc3RYID0gaW5wdXQ7CisKKyAgICAgICAg
Ly8gUG9sZQorICAgICAgICBmbG9hdCBvdXRwdXQyID0gazIgKiBvdXRwdXQxICsgcG9sZSAqIGxh
c3RZOworICAgICAgICBsYXN0WSA9IG91dHB1dDI7CisKKyAgICAgICAgKmRlc3RpbmF0aW9uKysg
PSBvdXRwdXQyOworICAgIH0KKyAgICAKKyAgICAvLyBMb2NhbHMgdG8gbWVtYmVyIHZhcmlhYmxl
cy4KKyAgICBtX2xhc3RYID0gbGFzdFg7CisgICAgbV9sYXN0WSA9IGxhc3RZOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vWmVyb1BvbGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9aZXJvUG9sZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vWmVyb1BvbGUuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgWmVyb1BvbGVfaAorI2RlZmluZSBaZXJvUG9sZV9oCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gWmVyb1BvbGUgaXMgYSBzaW1wbGUgZmlsdGVyIHdp
dGggb25lIHplcm8gYW5kIG9uZSBwb2xlLgorCitjbGFzcyBaZXJvUG9sZSB7CitwdWJsaWM6Cisg
ICAgWmVyb1BvbGUoKQorICAgICAgICA6IG1femVybygwKQorICAgICAgICAsIG1fcG9sZSgwKQor
ICAgICAgICAsIG1fbGFzdFgoMCkKKyAgICAgICAgLCBtX2xhc3RZKDApCisgICAgeworICAgIH0K
KworICAgIHZvaWQgcHJvY2VzcyhmbG9hdCAqc291cmNlLCBmbG9hdCAqZGVzdGluYXRpb24sIHVu
c2lnbmVkIGZyYW1lc1RvUHJvY2Vzcyk7CisKKyAgICAvLyBSZXNldCBmaWx0ZXIgc3RhdGUuCisg
ICAgdm9pZCByZXNldCgpIHsgbV9sYXN0WCA9IDA7IG1fbGFzdFkgPSAwOyB9CisgICAgCisgICAg
dm9pZCBzZXRaZXJvKGZsb2F0IHplcm8pIHsgbV96ZXJvID0gemVybzsgfQorICAgIHZvaWQgc2V0
UG9sZShmbG9hdCBwb2xlKSB7IG1fcG9sZSA9IHBvbGU7IH0KKyAgICAKKyAgICBmbG9hdCB6ZXJv
KCkgY29uc3QgeyByZXR1cm4gbV96ZXJvOyB9CisgICAgZmxvYXQgcG9sZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcG9sZTsgfQorCitwcml2YXRlOgorICAgIGZsb2F0IG1femVybzsKKyAgICBmbG9hdCBt
X3BvbGU7CisgICAgZmxvYXQgbV9sYXN0WDsKKyAgICBmbG9hdCBtX2xhc3RZOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gWmVyb1BvbGVfaApJbmRleDogU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCShyZXZpc2lvbiA4NjQ3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIK
ICNpbmNsdWRlICJEZWxheU5vZGUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkR5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCIKICNpbmNsdWRlICJGRlRGcmFtZS5oIgogI2luY2x1
ZGUgIkhSVEZEYXRhYmFzZUxvYWRlci5oIgogI2luY2x1ZGUgIkhSVEZQYW5uZXIuaCIKQEAgLTI5
MSw2ICsyOTIsMTMgQEAgUGFzc1JlZlB0cjxDb252b2x2ZXJOb2RlPiBBdWRpb0NvbnRleHQ6Ogog
ICAgIHJldHVybiBDb252b2x2ZXJOb2RlOjpjcmVhdGUodGhpcywgbV9kZXN0aW5hdGlvbk5vZGUt
PnNhbXBsZVJhdGUoKSk7CiB9CiAKK1Bhc3NSZWZQdHI8RHluYW1pY3NDb21wcmVzc29yTm9kZT4g
QXVkaW9Db250ZXh0OjpjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICByZXR1cm4gRHluYW1p
Y3NDb21wcmVzc29yTm9kZTo6Y3JlYXRlKHRoaXMsIG1fZGVzdGluYXRpb25Ob2RlLT5zYW1wbGVS
YXRlKCkpOworfQorCiBQYXNzUmVmUHRyPFJlYWx0aW1lQW5hbHlzZXJOb2RlPiBBdWRpb0NvbnRl
eHQ6OmNyZWF0ZUFuYWx5c2VyKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgJKHJldmlzaW9uIDg2NDcxKQor
KysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDYgKzU1LDcgQEAgY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBMb3dQYXNzMkZpbHRlck5v
ZGU7CiBjbGFzcyBIaWdoUGFzczJGaWx0ZXJOb2RlOwogY2xhc3MgQ29udm9sdmVyTm9kZTsKK2Ns
YXNzIER5bmFtaWNzQ29tcHJlc3Nvck5vZGU7CiBjbGFzcyBSZWFsdGltZUFuYWx5c2VyTm9kZTsK
IGNsYXNzIEphdmFTY3JpcHRBdWRpb05vZGU7CiAKQEAgLTEwNCw2ICsxMDUsNyBAQCBwdWJsaWM6
CiAgICAgUGFzc1JlZlB0cjxIaWdoUGFzczJGaWx0ZXJOb2RlPiBjcmVhdGVIaWdoUGFzczJGaWx0
ZXIoKTsKICAgICBQYXNzUmVmUHRyPEF1ZGlvUGFubmVyTm9kZT4gY3JlYXRlUGFubmVyKCk7CiAg
ICAgUGFzc1JlZlB0cjxDb252b2x2ZXJOb2RlPiBjcmVhdGVDb252b2x2ZXIoKTsKKyAgICBQYXNz
UmVmUHRyPER5bmFtaWNzQ29tcHJlc3Nvck5vZGU+IGNyZWF0ZUR5bmFtaWNzQ29tcHJlc3Nvcigp
OyAgICAKICAgICBQYXNzUmVmUHRyPFJlYWx0aW1lQW5hbHlzZXJOb2RlPiBjcmVhdGVBbmFseXNl
cigpOwogICAgIFBhc3NSZWZQdHI8SmF2YVNjcmlwdEF1ZGlvTm9kZT4gY3JlYXRlSmF2YVNjcmlw
dE5vZGUoc2l6ZV90IGJ1ZmZlclNpemUpOwogICAgIFBhc3NSZWZQdHI8QXVkaW9DaGFubmVsU3Bs
aXR0ZXI+IGNyZWF0ZUNoYW5uZWxTcGxpdHRlcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9BdWRpb0NvbnRleHQuaWRsCShyZXZpc2lvbiA4NjQ3MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcg
QEAgbW9kdWxlIHdlYmF1ZGlvIHsKICAgICAgICAgSGlnaFBhc3MyRmlsdGVyTm9kZSBjcmVhdGVI
aWdoUGFzczJGaWx0ZXIoKTsKICAgICAgICAgQXVkaW9QYW5uZXJOb2RlIGNyZWF0ZVBhbm5lcigp
OwogICAgICAgICBDb252b2x2ZXJOb2RlIGNyZWF0ZUNvbnZvbHZlcigpOworICAgICAgICBEeW5h
bWljc0NvbXByZXNzb3JOb2RlIGNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvcigpOwogICAgICAgICBS
ZWFsdGltZUFuYWx5c2VyTm9kZSBjcmVhdGVBbmFseXNlcigpOwogICAgICAgICBKYXZhU2NyaXB0
QXVkaW9Ob2RlIGNyZWF0ZUphdmFTY3JpcHROb2RlKGluIHVuc2lnbmVkIGxvbmcgYnVmZmVyU2l6
ZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCShyZXZpc2lvbiA4NjQ3
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Nyw2ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgTm9kZVR5cGVDaGFubmVsU3BsaXR0
ZXIsCiAgICAgICAgIE5vZGVUeXBlQ2hhbm5lbE1lcmdlciwKICAgICAgICAgTm9kZVR5cGVBbmFs
eXNlciwKKyAgICAgICAgTm9kZVR5cGVEeW5hbWljc0NvbXByZXNzb3IsCiAgICAgICAgIE5vZGVU
eXBlRW5kCiAgICAgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1pY3ND
b21wcmVzc29yTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
RHluYW1pY3NDb21wcmVzc29yTm9kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJEeW5hbWljc0NvbXByZXNzb3JOb2RlLmgiCisKKyNp
bmNsdWRlICJBdWRpb0NvbnRleHQuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgorI2lu
Y2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgorI2luY2x1ZGUgIkR5bmFtaWNzQ29tcHJlc3Nvci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0R5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OkR5bmFt
aWNzQ29tcHJlc3Nvck5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBkb3VibGUgc2FtcGxlUmF0
ZSkKKyAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKQoreworICAgIGFkZElucHV0
KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVJbnB1dCh0aGlzKSkpOworICAgIGFkZE91dHB1dChhZG9w
dFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDIpKSk7CisgICAgCisgICAgc2V0VHlwZShO
b2RlVHlwZUR5bmFtaWNzQ29tcHJlc3Nvcik7CisgICAgCisgICAgaW5pdGlhbGl6ZSgpOworfQor
CitEeW5hbWljc0NvbXByZXNzb3JOb2RlOjp+RHluYW1pY3NDb21wcmVzc29yTm9kZSgpCit7Cisg
ICAgdW5pbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6cHJv
Y2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIEF1ZGlvQnVzKiBvdXRwdXRCdXMg
PSBvdXRwdXQoMCktPmJ1cygpOworICAgIEFTU0VSVChvdXRwdXRCdXMpOworCisgICAgbV9keW5h
bWljc0NvbXByZXNzb3ItPnByb2Nlc3MoaW5wdXQoMCktPmJ1cygpLCBvdXRwdXRCdXMsIGZyYW1l
c1RvUHJvY2Vzcyk7Cit9CisKK3ZvaWQgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6cmVzZXQoKQor
eworICAgIG1fZHluYW1pY3NDb21wcmVzc29yLT5yZXNldCgpOworfQorCit2b2lkIER5bmFtaWNz
Q29tcHJlc3Nvck5vZGU6OmluaXRpYWxpemUoKQoreworICAgIGlmIChpc0luaXRpYWxpemVkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIEF1ZGlvTm9kZTo6aW5pdGlhbGl6ZSgpOyAgICAKKyAg
ICBtX2R5bmFtaWNzQ29tcHJlc3NvciA9IGFkb3B0UHRyKG5ldyBEeW5hbWljc0NvbXByZXNzb3Io
dHJ1ZSwgc2FtcGxlUmF0ZSgpKSk7Cit9CisKK3ZvaWQgRHluYW1pY3NDb21wcmVzc29yTm9kZTo6
dW5pbml0aWFsaXplKCkKK3sKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9keW5hbWljc0NvbXByZXNzb3IuY2xlYXIoKTsKKyAgICBBdWRpb05vZGU6
OnVuaW5pdGlhbGl6ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVRElPKQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRHluYW1p
Y3NDb21wcmVzc29yTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRHluYW1pY3NDb21wcmVzc29yTm9kZV9oCisj
ZGVmaW5lIER5bmFtaWNzQ29tcHJlc3Nvck5vZGVfaAorCisjaW5jbHVkZSAiQXVkaW9Ob2RlLmgi
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IER5bmFtaWNzQ29tcHJlc3NvcjsKKyAgICAKK2NsYXNzIER5bmFtaWNzQ29tcHJlc3Nvck5vZGUg
OiBwdWJsaWMgQXVkaW9Ob2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEeW5h
bWljc0NvbXByZXNzb3JOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LCBkb3VibGUg
c2FtcGxlUmF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRHluYW1pY3ND
b21wcmVzc29yTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7ICAgICAgCisgICAgfQorICAgIAor
ICAgIHZpcnR1YWwgfkR5bmFtaWNzQ29tcHJlc3Nvck5vZGUoKTsKKyAgICAKKyAgICAvLyBBdWRp
b05vZGUKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgp
OworICAgIHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKKworcHJpdmF0ZToKKyAgICBEeW5h
bWljc0NvbXByZXNzb3JOb2RlKEF1ZGlvQ29udGV4dCosIGRvdWJsZSBzYW1wbGVSYXRlKTsKKwor
ICAgIE93blB0cjxEeW5hbWljc0NvbXByZXNzb3I+IG1fZHluYW1pY3NDb21wcmVzc29yOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRHluYW1pY3NDb21wcmVzc29y
Tm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JO
b2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EeW5hbWljc0Nv
bXByZXNzb3JOb2RlLmlkbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0R5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworbW9kdWxlIGF1ZGlvIHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBD
b25kaXRpb25hbD1XRUJfQVVESU8sCisgICAgICAgIEdlbmVyYXRlVG9KUworICAgIF0gRHluYW1p
Y3NDb21wcmVzc29yTm9kZSA6IEF1ZGlvTm9kZSB7CisgICAgfTsKK30K
</data>
<flag name="review"
          id="86700"
          type_id="1"
          status="+"
          setter="senorblanco"
    />
          </attachment>
      

    </bug>

</bugzilla>