<?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>83524</bug_id>
          
          <creation_ts>2012-04-09 16:40:11 -0700</creation_ts>
          <short_desc>AudioParam must support connections from audio-rate signals</short_desc>
          <delta_ts>2012-04-10 14:32:49 -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>1</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Chris Rogers">crogers</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>kbr</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>598742</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-04-09 16:40:11 -0700</bug_when>
    <thetext>AudioParam must support connections from audio-rate signals</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598752</commentid>
    <comment_count>1</comment_count>
      <attachid>136342</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-04-09 16:47:39 -0700</bug_when>
    <thetext>Created attachment 136342
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599324</commentid>
    <comment_count>2</comment_count>
      <attachid>136342</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-04-10 09:12:12 -0700</bug_when>
    <thetext>Comment on attachment 136342
Patch

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

&gt; Source/WebCore/Modules/webaudio/AudioNode.cpp:163
&gt; +    // Sanity check input and output indices.
&gt; +    if (outputIndex &gt;= numberOfOutputs()) {

Nit: Input index? In any case, I am not sure that this comment adds much value.

&gt; Source/WebCore/Modules/webaudio/AudioNodeOutput.cpp:143
&gt; +    ASSERT(context()-&gt;isGraphOwner());
&gt; +    return m_inputs.size();

The header comment notes that this must be called with the context&apos;s graph lock. Is it possible to ASSERT that this is true?

&gt; Source/WebCore/Modules/webaudio/AudioNodeOutput.cpp:201
&gt; +    ASSERT(context()-&gt;isGraphOwner());
&gt; +
&gt; +    ASSERT(param);
&gt; +    if (!param)
&gt; +        return;

Can an AudioParam have a different context from the AudioNodeOutput?

&gt; Source/WebCore/Modules/webaudio/AudioNodeOutput.cpp:210
&gt; +    ASSERT(context()-&gt;isGraphOwner());
&gt; +
&gt; +    ASSERT(param);

Ditto.

&gt; Source/WebCore/Modules/webaudio/AudioParam.cpp:112
&gt; +    // FIXME: support fan-in (multiple audio connections to this parameter with unity-gain summing).

Nit: Is there a bug for this FIXME?

&gt; Source/WebCore/Modules/webaudio/AudioParam.cpp:169
&gt; +    // FIXME: support fan-in (multiple audio connections to this parameter with unity-gain summing).

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599578</commentid>
    <comment_count>3</comment_count>
      <attachid>136342</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-04-10 13:35:04 -0700</bug_when>
    <thetext>Comment on attachment 136342
Patch

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

Eric, thanks for having a look.  I think I&apos;ve addressed your comments and have also added some details in the ChangeLog.

&gt;&gt; Source/WebCore/Modules/webaudio/AudioNode.cpp:163
&gt;&gt; +    if (outputIndex &gt;= numberOfOutputs()) {
&gt; 
&gt; Nit: Input index? In any case, I am not sure that this comment adds much value.

Fixed: removed comment

&gt;&gt; Source/WebCore/Modules/webaudio/AudioNodeOutput.cpp:143
&gt;&gt; +    return m_inputs.size();
&gt; 
&gt; The header comment notes that this must be called with the context&apos;s graph lock. Is it possible to ASSERT that this is true?

Already have it on line 142

&gt;&gt; Source/WebCore/Modules/webaudio/AudioNodeOutput.cpp:201
&gt;&gt; +        return;
&gt; 
&gt; Can an AudioParam have a different context from the AudioNodeOutput?

Yes, it&apos;s possible if there are several AudioContexts which have been created.  We have a sanity check in the newer AudioNode::connect(AudioParam*) method which nips this in the bud very early on:

    if (context() != param-&gt;context()) {
        ec = SYNTAX_ERR;
        return;
    }

By the way, we already have a similar sanity check for AudioNode::connect(AudioNode*)   (connecting an AudioNode -&gt; AudioNode) since the contexts may be different.

&gt;&gt; Source/WebCore/Modules/webaudio/AudioNodeOutput.cpp:210
&gt;&gt; +    ASSERT(param);
&gt; 
&gt; Ditto.

See response  for addParam() above

&gt;&gt; Source/WebCore/Modules/webaudio/AudioParam.cpp:112
&gt;&gt; +    // FIXME: support fan-in (multiple audio connections to this parameter with unity-gain summing).
&gt; 
&gt; Nit: Is there a bug for this FIXME?

Created bug and added link in the comment.

&gt;&gt; Source/WebCore/Modules/webaudio/AudioParam.cpp:169
&gt;&gt; +    // FIXME: support fan-in (multiple audio connections to this parameter with unity-gain summing).
&gt; 
&gt; Ditto.

Added bug link.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599582</commentid>
    <comment_count>4</comment_count>
      <attachid>136527</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-04-10 13:37:44 -0700</bug_when>
    <thetext>Created attachment 136527
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599606</commentid>
    <comment_count>5</comment_count>
      <attachid>136342</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-04-10 14:01:55 -0700</bug_when>
    <thetext>Comment on attachment 136342
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/webaudio/AudioNodeOutput.cpp:143
&gt;&gt;&gt; +    return m_inputs.size();
&gt;&gt; 
&gt;&gt; The header comment notes that this must be called with the context&apos;s graph lock. Is it possible to ASSERT that this is true?
&gt; 
&gt; Already have it on line 142

Oops, so *that* is what &quot;isGraphOwner&quot; checks :-)

&gt;&gt;&gt; Source/WebCore/Modules/webaudio/AudioNodeOutput.cpp:201
&gt;&gt;&gt; +        return;
&gt;&gt; 
&gt;&gt; Can an AudioParam have a different context from the AudioNodeOutput?
&gt; 
&gt; Yes, it&apos;s possible if there are several AudioContexts which have been created.  We have a sanity check in the newer AudioNode::connect(AudioParam*) method which nips this in the bud very early on:
&gt; 
&gt;     if (context() != param-&gt;context()) {
&gt;         ec = SYNTAX_ERR;
&gt;         return;
&gt;     }
&gt; 
&gt; By the way, we already have a similar sanity check for AudioNode::connect(AudioNode*)   (connecting an AudioNode -&gt; AudioNode) since the contexts may be different.

I saw that, which is why I wondered about this. So you are saying that an AudioParam will always be connected to an AudioNode before it is added to a node output?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599645</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-04-10 14:29:09 -0700</bug_when>
    <thetext>Committed r113769: &lt;http://trac.webkit.org/changeset/113769&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599648</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-04-10 14:32:49 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 136342 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=136342&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/Modules/webaudio/AudioNodeOutput.cpp:143
&gt; &gt;&gt;&gt; +    return m_inputs.size();
&gt; &gt;&gt; 
&gt; &gt;&gt; The header comment notes that this must be called with the context&apos;s graph lock. Is it possible to ASSERT that this is true?
&gt; &gt; 
&gt; &gt; Already have it on line 142
&gt; 
&gt; Oops, so *that* is what &quot;isGraphOwner&quot; checks :-)
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/Modules/webaudio/AudioNodeOutput.cpp:201
&gt; &gt;&gt;&gt; +        return;
&gt; &gt;&gt; 
&gt; &gt;&gt; Can an AudioParam have a different context from the AudioNodeOutput?
&gt; &gt; 
&gt; &gt; Yes, it&apos;s possible if there are several AudioContexts which have been created.  We have a sanity check in the newer AudioNode::connect(AudioParam*) method which nips this in the bud very early on:
&gt; &gt; 
&gt; &gt;     if (context() != param-&gt;context()) {
&gt; &gt;         ec = SYNTAX_ERR;
&gt; &gt;         return;
&gt; &gt;     }
&gt; &gt; 
&gt; &gt; By the way, we already have a similar sanity check for AudioNode::connect(AudioNode*)   (connecting an AudioNode -&gt; AudioNode) since the contexts may be different.
&gt; 
&gt; I saw that, which is why I wondered about this. So you are saying that an AudioParam will always be connected to an AudioNode before it is added to a node output?

Eric, thanks for the review!  Yes, the whole process is started with a JavaScript call to connect() which is implemented in the AudioNode::connect() method, so we&apos;re catching mis-matching contexts very early before any other of this lower-level code gets executed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136342</attachid>
            <date>2012-04-09 16:47:39 -0700</date>
            <delta_ts>2012-04-10 14:01:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83524-20120409164738.patch</filename>
            <type>text/plain</type>
            <size>29969</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGNlZDg3NzIxZDlmZmFl
NTRlNDg1OTlhNjRlZjc5Nzk5YmM1M2Q1OS4uMjdkNDRhNjUzZGY3YzEwMWQyMTkyN2YwYjE2OGZh
YThhNGQwNmJiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA0LTA5ICBDaHJp
cyBSb2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+CisKKyAgICAgICAgQXVkaW9QYXJhbSBtdXN0
IHN1cHBvcnQgY29ubmVjdGlvbnMgZnJvbSBhdWRpby1yYXRlIHNpZ25hbHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzNTI0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogd2ViYXVkaW8vYXVkaW9w
YXJhbS1jb25uZWN0LWF1ZGlvcmF0ZXNpZ25hbC5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9HYWluTm9k
ZTo6cHJvY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlOjpjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlOjpkaXNjb25uZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvTm9kZTo6ZmluaXNoRGVyZWYpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVk
aW8vQXVkaW9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEF1ZGlvTm9kZSk6
CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaWRsOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvTm9kZU91dHB1dDo6QXVkaW9Ob2RlT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
Tm9kZU91dHB1dDo6dXBkYXRlUmVuZGVyaW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9Ob2RlT3V0cHV0OjpwdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZU91dHB1dDo6
ZmFuT3V0Q291bnQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b05vZGVPdXRwdXQ6OnBhcmFtRmFuT3V0Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9O
b2RlT3V0cHV0OjpyZW5kZXJpbmdQYXJhbUZhbk91dENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvTm9kZU91dHB1dDo6YWRkUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2Rl
T3V0cHV0OjpyZW1vdmVQYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGVPdXRwdXQ6
OmRpc2Nvbm5lY3RBbGxQYXJhbXMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlT3V0cHV0
OjpkaXNjb25uZWN0QWxsKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91
dHB1dC5oOgorICAgICAgICAoQXVkaW9Ob2RlT3V0cHV0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvUGFyYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbTo6Y2Fs
Y3VsYXRlU2FtcGxlQWNjdXJhdGVWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb1BhcmFtOjpjYWxjdWxhdGVBdWRpb1JhdGVTaWduYWxWYWx1ZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbTo6Y2FsY3VsYXRlVGltZWxpbmVWYWx1ZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbTo6Y29ubmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1BhcmFtOjpkaXNjb25uZWN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvUGFyYW0uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Q
YXJhbTo6QXVkaW9QYXJhbSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1BhcmFtOjpoYXNTYW1w
bGVBY2N1cmF0ZVZhbHVlcyk6CisgICAgICAgIChBdWRpb1BhcmFtKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T3NjaWxsYXRv
cjo6Y2FsY3VsYXRlU2FtcGxlQWNjdXJhdGVQaGFzZUluY3JlbWVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6T3NjaWxsYXRvcjo6cHJvY2Vzcyk6CisKIDIwMTItMDQtMDkgIEFiaGlzaGVrIEFyeWEg
IDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBDcmFzaCBkdWUgdG8gZmxvYXRzIG5v
dCBjbGVhcmVkIGJlZm9yZSBzdGFydGluZyBTVkcgPHRleHQ+IGxheW91dC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuY3BwCmluZGV4IDMwNzI2
YTk5ZjJkYmE0Y2E3MDc4MjM4ZTRkZTE1YzRkOGMxNWNkNmIuLjdjNjE0MzJlYjdhNWRhZDg0Mzg2
OTIyZDk1MmY4NDgxNjY0NTlkYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9HYWluTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmNwcApAQCAtNjQsNyArNjQsNyBAQCB2b2lkIEF1ZGlvR2Fp
bk5vZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICBlbHNlIHsKICAgICAg
ICAgQXVkaW9CdXMqIGlucHV0QnVzID0gaW5wdXQoMCktPmJ1cygpOwogCi0gICAgICAgIGlmIChn
YWluKCktPmhhc1RpbWVsaW5lVmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKGdhaW4oKS0+aGFzU2Ft
cGxlQWNjdXJhdGVWYWx1ZXMoKSkgewogICAgICAgICAgICAgLy8gQXBwbHkgc2FtcGxlLWFjY3Vy
YXRlIGdhaW4gc2NhbGluZyBmb3IgcHJlY2lzZSBlbnZlbG9wZXMsIGdyYWluIHdpbmRvd3MsIGV0
Yy4KICAgICAgICAgICAgIEFTU0VSVChmcmFtZXNUb1Byb2Nlc3MgPD0gbV9zYW1wbGVBY2N1cmF0
ZUdhaW5WYWx1ZXMuc2l6ZSgpKTsKICAgICAgICAgICAgIGlmIChmcmFtZXNUb1Byb2Nlc3MgPD0g
bV9zYW1wbGVBY2N1cmF0ZUdhaW5WYWx1ZXMuc2l6ZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKaW5kZXggY2I1NmU2YzMzYjZmYzYzMjVhNTdj
Njg3YTRiOTcwYmIwOTU2ZDU4Mi4uMmEwOGNmNGNlNjJkYzRhMWRhZTA1ZDM2NjJjYmQ4YWExZGQ3
NDE5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05v
ZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNw
cApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUg
IkF1ZGlvTm9kZUlucHV0LmgiCiAjaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCisjaW5jbHVk
ZSAiQXVkaW9QYXJhbS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlIDx3
dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC0xNDgsNiArMTQ5
LDMxIEBAIHZvaWQgQXVkaW9Ob2RlOjpjb25uZWN0KEF1ZGlvTm9kZSogZGVzdGluYXRpb24sIHVu
c2lnbmVkIG91dHB1dEluZGV4LCB1bnNpZ25lZCBpCiAgICAgY29udGV4dCgpLT5pbmNyZW1lbnRD
b25uZWN0aW9uQ291bnQoKTsKIH0KIAordm9pZCBBdWRpb05vZGU6OmNvbm5lY3QoQXVkaW9QYXJh
bSogcGFyYW0sIHVuc2lnbmVkIG91dHB1dEluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEF1ZGlvQ29udGV4dDo6QXV0b0xvY2tlciBs
b2NrZXIoY29udGV4dCgpKTsKKworICAgIGlmICghcGFyYW0pIHsKKyAgICAgICAgZWMgPSBTWU5U
QVhfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU2FuaXR5IGNoZWNrIGlu
cHV0IGFuZCBvdXRwdXQgaW5kaWNlcy4KKyAgICBpZiAob3V0cHV0SW5kZXggPj0gbnVtYmVyT2ZP
dXRwdXRzKCkpIHsKKyAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChjb250ZXh0KCkgIT0gcGFyYW0tPmNvbnRleHQoKSkgeworICAg
ICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBdWRp
b05vZGVPdXRwdXQqIG91dHB1dCA9IHRoaXMtPm91dHB1dChvdXRwdXRJbmRleCk7CisgICAgcGFy
YW0tPmNvbm5lY3Qob3V0cHV0KTsKK30KKwogdm9pZCBBdWRpb05vZGU6OmRpc2Nvbm5lY3QodW5z
aWduZWQgb3V0cHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CkBAIC0xNjAsNyArMTg2LDcgQEAgdm9pZCBBdWRpb05vZGU6OmRpc2Nvbm5l
Y3QodW5zaWduZWQgb3V0cHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIH0KIAogICAg
IEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0ID0gdGhpcy0+b3V0cHV0KG91dHB1dEluZGV4KTsKLSAg
ICBvdXRwdXQtPmRpc2Nvbm5lY3RBbGxJbnB1dHMoKTsKKyAgICBvdXRwdXQtPmRpc2Nvbm5lY3RB
bGwoKTsKIH0KIAogdm9pZCBBdWRpb05vZGU6OnByb2Nlc3NJZk5lY2Vzc2FyeShzaXplX3QgZnJh
bWVzVG9Qcm9jZXNzKQpAQCAtMjk5LDcgKzMyNSw3IEBAIHZvaWQgQXVkaW9Ob2RlOjpmaW5pc2hE
ZXJlZihSZWZUeXBlIHJlZlR5cGUpCiAgICAgICAgICAgICBpZiAoIW1faXNNYXJrZWRGb3JEZWxl
dGlvbikgewogICAgICAgICAgICAgICAgIC8vIEFsbCByZWZlcmVuY2VzIGFyZSBnb25lIC0gd2Ug
bmVlZCB0byBnbyBhd2F5LgogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX291dHB1dHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIG91dHB1dChpKS0+
ZGlzY29ubmVjdEFsbElucHV0cygpOyAvLyB0aGlzIHdpbGwgZGVyZWYoKSBub2RlcyB3ZSdyZSBj
b25uZWN0ZWQgdG8uLi4KKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0KGkpLT5kaXNjb25uZWN0
QWxsKCk7IC8vIFRoaXMgd2lsbCBkZXJlZigpIG5vZGVzIHdlJ3JlIGNvbm5lY3RlZCB0by4KIAog
ICAgICAgICAgICAgICAgIC8vIE1hcmsgZm9yIGRlbGV0aW9uIGF0IGVuZCBvZiBlYWNoIHJlbmRl
ciBxdWFudHVtIG9yIHdoZW4gY29udGV4dCBzaHV0cyBkb3duLgogICAgICAgICAgICAgICAgIGNv
bnRleHQoKS0+bWFya0ZvckRlbGV0aW9uKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Ob2RlLmgKaW5kZXggNTZiODQ3YmRmN2Y0ZWU0OGE1YjM2MzZlNmEwZjY4
YWU2NTNlNGI4Ny4uN2FjMTgwZDg1YTk1ZmVhNTExMTk5MjY5NzI3OWNiMTljYzgwNTNmNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCkBAIC0zNyw2ICsz
Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEF1ZGlvQ29udGV4dDsKIGNsYXNzIEF1
ZGlvTm9kZUlucHV0OwogY2xhc3MgQXVkaW9Ob2RlT3V0cHV0OworY2xhc3MgQXVkaW9QYXJhbTsK
IAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIApAQCAtMTE1LDYgKzExNiw3IEBAIHB1Ymxp
YzoKIAogICAgIC8vIENhbGxlZCBmcm9tIG1haW4gdGhyZWFkIGJ5IGNvcnJlc3BvbmRpbmcgSmF2
YVNjcmlwdCBtZXRob2RzLgogICAgIHZvaWQgY29ubmVjdChBdWRpb05vZGUqLCB1bnNpZ25lZCBv
dXRwdXRJbmRleCwgdW5zaWduZWQgaW5wdXRJbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgY29ubmVjdChBdWRpb1BhcmFtKiwgdW5zaWduZWQgb3V0cHV0SW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICB2b2lkIGRpc2Nvbm5lY3QodW5zaWduZWQgb3V0cHV0SW5kZXgsIEV4Y2VwdGlv
bkNvZGUmKTsKIAogICAgIHZpcnR1YWwgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2FtcGxlUmF0ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb05vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b05vZGUuaWRsCmluZGV4IGNmYWE3M2IyYzVmZmIwZTNiYzBlNzFiYWYxMTBkNzczYzNmMWJkNzku
LjEzYmRjNzU2MmM1ODViODQxMDAyN2RiMTU4ZDUyMjJmZGUxNDU5YjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwKQEAgLTMzLDYgKzMzLDkgQEAg
bW9kdWxlIGF1ZGlvIHsKICAgICAgICAgdm9pZCBjb25uZWN0KGluIEF1ZGlvTm9kZSBkZXN0aW5h
dGlvbiwgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVmaW5lZF0gdW5zaWduZWQgbG9uZyBvdXRw
dXQsIGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIHVuc2lnbmVkIGxvbmcgaW5wdXQp
CiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAorICAgICAgICB2b2lkIGNvbm5l
Y3QoaW4gQXVkaW9QYXJhbSBkZXN0aW5hdGlvbiwgaW4gW09wdGlvbmFsPURlZmF1bHRJc1VuZGVm
aW5lZF0gdW5zaWduZWQgbG9uZyBvdXRwdXQpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0
aW9uKTsKKwogICAgICAgICB2b2lkIGRpc2Nvbm5lY3QoaW4gW09wdGlvbmFsPURlZmF1bHRJc1Vu
ZGVmaW5lZF0gdW5zaWduZWQgbG9uZyBvdXRwdXQpCiAgICAgICAgICAgICByYWlzZXMoRE9NRXhj
ZXB0aW9uKTsKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb05vZGVPdXRwdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb05vZGVPdXRwdXQuY3BwCmluZGV4IDc3OTI3Yjk4OGU5MDNkNjk0MzBmNDRhOGMxYjZh
MjZkYTE4MzJhZWYuLjkxNTI0OTJiZWUzN2JjNzc0NjRhMDNmZmNhYWNlMTk5NzJhNWZjZGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1
dC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBdWRpb0J1cy5oIgogI2luY2x1ZGUg
IkF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCisjaW5jbHVkZSAi
QXVkaW9QYXJhbS5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDIsNiArNDMsNyBAQCBBdWRpb05vZGVPdXRwdXQ6OkF1ZGlvTm9kZU91dHB1
dChBdWRpb05vZGUqIG5vZGUsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMpCiAgICAgLCBtX2Fj
dHVhbERlc3RpbmF0aW9uQnVzKDApCiAgICAgLCBtX2lzRW5hYmxlZCh0cnVlKQogICAgICwgbV9y
ZW5kZXJpbmdGYW5PdXRDb3VudCgwKQorICAgICwgbV9yZW5kZXJpbmdQYXJhbUZhbk91dENvdW50
KDApCiB7CiAgICAgQVNTRVJUKG51bWJlck9mQ2hhbm5lbHMgPD0gQXVkaW9Db250ZXh0OjptYXhO
dW1iZXJPZkNoYW5uZWxzKCkpOwogCkBAIC04MCw2ICs4Miw3IEBAIHZvaWQgQXVkaW9Ob2RlT3V0
cHV0Ojp1cGRhdGVSZW5kZXJpbmdTdGF0ZSgpCiB7CiAgICAgdXBkYXRlTnVtYmVyT2ZDaGFubmVs
cygpOwogICAgIG1fcmVuZGVyaW5nRmFuT3V0Q291bnQgPSBmYW5PdXRDb3VudCgpOworICAgIG1f
cmVuZGVyaW5nUGFyYW1GYW5PdXRDb3VudCA9IHBhcmFtRmFuT3V0Q291bnQoKTsKIH0KIAogdm9p
ZCBBdWRpb05vZGVPdXRwdXQ6OnVwZGF0ZU51bWJlck9mQ2hhbm5lbHMoKQpAQCAtMTEwLDcgKzEx
Myw3IEBAIHZvaWQgQXVkaW9Ob2RlT3V0cHV0Ojpwcm9wYWdhdGVDaGFubmVsQ291bnQoKQogQXVk
aW9CdXMqIEF1ZGlvTm9kZU91dHB1dDo6cHVsbChBdWRpb0J1cyogaW5QbGFjZUJ1cywgc2l6ZV90
IGZyYW1lc1RvUHJvY2VzcykKIHsKICAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFk
KCkpOwotICAgIEFTU0VSVChtX3JlbmRlcmluZ0Zhbk91dENvdW50ID4gMCk7CisgICAgQVNTRVJU
KG1fcmVuZGVyaW5nRmFuT3V0Q291bnQgPiAwIHx8IG1fcmVuZGVyaW5nUGFyYW1GYW5PdXRDb3Vu
dCA+IDApOwogICAgIAogICAgIC8vIENhdXNlcyBvdXIgQXVkaW9Ob2RlIHRvIHByb2Nlc3MgaWYg
aXQgaGFzbid0IGFscmVhZHkgZm9yIHRoaXMgcmVuZGVyIHF1YW50dW0uCiAgICAgLy8gV2UgdHJ5
IHRvIGRvIGluLXBsYWNlIHByb2Nlc3NpbmcgKHVzaW5nIGluUGxhY2VCdXMpIGlmIGF0IGFsbCBw
b3NzaWJsZSwKQEAgLTExOCw3ICsxMjEsNyBAQCBBdWRpb0J1cyogQXVkaW9Ob2RlT3V0cHV0Ojpw
dWxsKEF1ZGlvQnVzKiBpblBsYWNlQnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQogICAgIC8v
IEluIHRoaXMgY2FzZSBwdWxsKCkgaXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHBlciByZW5kZXJp
bmcgcXVhbnR1bSwgYW5kIHRoZSBwcm9jZXNzSWZOZWNlc3NhcnkoKSBjYWxsIGJlbG93IHdpbGwK
ICAgICAvLyBjYXVzZSBvdXIgbm9kZSB0byBwcm9jZXNzKCkgb25seSB0aGUgZmlyc3QgdGltZSwg
Y2FjaGluZyB0aGUgb3V0cHV0IGluIG1faW50ZXJuYWxPdXRwdXRCdXMgZm9yIHN1YnNlcXVlbnQg
Y2FsbHMuICAgIAogICAgIAotICAgIGJvb2wgaXNJblBsYWNlID0gaW5QbGFjZUJ1cyAmJiBpblBs
YWNlQnVzLT5udW1iZXJPZkNoYW5uZWxzKCkgPT0gbnVtYmVyT2ZDaGFubmVscygpICYmIG1fcmVu
ZGVyaW5nRmFuT3V0Q291bnQgPT0gMTsKKyAgICBib29sIGlzSW5QbGFjZSA9IGluUGxhY2VCdXMg
JiYgaW5QbGFjZUJ1cy0+bnVtYmVyT2ZDaGFubmVscygpID09IG51bWJlck9mQ2hhbm5lbHMoKSAm
JiAobV9yZW5kZXJpbmdGYW5PdXRDb3VudCArIG1fcmVuZGVyaW5nUGFyYW1GYW5PdXRDb3VudCkg
PT0gMTsKIAogICAgIC8vIFNldHVwIHRoZSBhY3R1YWwgZGVzdGluYXRpb24gYnVzIGZvciBwcm9j
ZXNzaW5nIHdoZW4gb3VyIG5vZGUncyBwcm9jZXNzKCkgbWV0aG9kIGdldHMgY2FsbGVkIGluIHBy
b2Nlc3NJZk5lY2Vzc2FyeSgpIGJlbG93LgogICAgIG1fYWN0dWFsRGVzdGluYXRpb25CdXMgPSBp
c0luUGxhY2UgPyBpblBsYWNlQnVzIDogbV9pbnRlcm5hbEJ1cy5nZXQoKTsKQEAgLTEzNCwxNSAr
MTM3LDI2IEBAIEF1ZGlvQnVzKiBBdWRpb05vZGVPdXRwdXQ6OmJ1cygpIGNvbnN0CiAgICAgcmV0
dXJuIG1fYWN0dWFsRGVzdGluYXRpb25CdXM7CiB9CiAKK3Vuc2lnbmVkIEF1ZGlvTm9kZU91dHB1
dDo6ZmFuT3V0Q291bnQoKQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigp
KTsKKyAgICByZXR1cm4gbV9pbnB1dHMuc2l6ZSgpOworfQorCit1bnNpZ25lZCBBdWRpb05vZGVP
dXRwdXQ6OnBhcmFtRmFuT3V0Q291bnQoKQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3Jh
cGhPd25lcigpKTsKKyAgICByZXR1cm4gbV9wYXJhbXMuc2l6ZSgpOworfQorCiB1bnNpZ25lZCBB
dWRpb05vZGVPdXRwdXQ6OnJlbmRlcmluZ0Zhbk91dENvdW50KCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9yZW5kZXJpbmdGYW5PdXRDb3VudDsKIH0KIAotdW5zaWduZWQgQXVkaW9Ob2RlT3V0cHV0
OjpmYW5PdXRDb3VudCgpCit1bnNpZ25lZCBBdWRpb05vZGVPdXRwdXQ6OnJlbmRlcmluZ1BhcmFt
RmFuT3V0Q291bnQoKSBjb25zdAogewotICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25l
cigpKTsKLSAgICByZXR1cm4gbV9pbnB1dHMuc2l6ZSgpOworICAgIHJldHVybiBtX3JlbmRlcmlu
Z1BhcmFtRmFuT3V0Q291bnQ7CiB9CiAKIHZvaWQgQXVkaW9Ob2RlT3V0cHV0OjphZGRJbnB1dChB
dWRpb05vZGVJbnB1dCogaW5wdXQpCkBAIC0xNzgsNiArMTkyLDQ2IEBAIHZvaWQgQXVkaW9Ob2Rl
T3V0cHV0OjpkaXNjb25uZWN0QWxsSW5wdXRzKCkKICAgICB9CiB9CiAKK3ZvaWQgQXVkaW9Ob2Rl
T3V0cHV0OjphZGRQYXJhbShBdWRpb1BhcmFtKiBwYXJhbSkKK3sKKyAgICBBU1NFUlQoY29udGV4
dCgpLT5pc0dyYXBoT3duZXIoKSk7CisKKyAgICBBU1NFUlQocGFyYW0pOworICAgIGlmICghcGFy
YW0pCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFyYW1zLmFkZChwYXJhbSk7Cit9CisKK3Zv
aWQgQXVkaW9Ob2RlT3V0cHV0OjpyZW1vdmVQYXJhbShBdWRpb1BhcmFtKiBwYXJhbSkKK3sKKyAg
ICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7CisKKyAgICBBU1NFUlQocGFyYW0p
OworICAgIGlmICghcGFyYW0pCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFyYW1zLnJlbW92
ZShwYXJhbSk7Cit9CisKK3ZvaWQgQXVkaW9Ob2RlT3V0cHV0OjpkaXNjb25uZWN0QWxsUGFyYW1z
KCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7CisKKyAgICBmb3Ig
KFBhcmFtc0l0ZXJhdG9yIGkgPSBtX3BhcmFtcy5iZWdpbigpOyBpICE9IG1fcGFyYW1zLmVuZCgp
OyArK2kpIHsKKyAgICAgICAgQXVkaW9QYXJhbSogcGFyYW0gPSAqaTsKKyAgICAgICAgcGFyYW0t
PmRpc2Nvbm5lY3QodGhpcyk7CisgICAgfQorCisgICAgbV9wYXJhbXMuY2xlYXIoKTsKK30KKwor
dm9pZCBBdWRpb05vZGVPdXRwdXQ6OmRpc2Nvbm5lY3RBbGwoKQoreworICAgIGRpc2Nvbm5lY3RB
bGxJbnB1dHMoKTsKKyAgICBkaXNjb25uZWN0QWxsUGFyYW1zKCk7Cit9CisKIHZvaWQgQXVkaW9O
b2RlT3V0cHV0OjpkaXNhYmxlKCkKIHsKICAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3du
ZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
Tm9kZU91dHB1dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVP
dXRwdXQuaAppbmRleCA3MjE2NGM3NDlhOTViYTllNWJkNWIzNGI3ZTkwNzEyNDE3MmVlNTg4Li44
MmJmMjlmNWE0NzU0OGY0NDExNGMwMDc3NWMzMGRmOWUyYTMyNzM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmgKQEAgLTU3LDE3ICs1
NywxNiBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIGZyb20gY29udGV4dCdzIGF1ZGlvIHRocmVh
ZC4KICAgICBBdWRpb0J1cyogYnVzKCkgY29uc3Q7CiAKLSAgICAvLyBmYW5PdXRDb3VudCgpIGlz
IHRoZSBudW1iZXIgb2YgQXVkaW9Ob2RlSW5wdXRzIHRoYXQgd2UncmUgY29ubmVjdGVkIHRvLgot
ICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gYXVkaW8gdGhyZWFk
IHJlbmRlcmluZyBjb2RlLCBpbnN0ZWFkIHJlbmRlcmluZ0Zhbk91dENvdW50KCkgc2hvdWxkIGJl
IHVzZWQuCi0gICAgLy8gSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgY29udGV4dCdzIGdyYXBo
IGxvY2suCi0gICAgdW5zaWduZWQgZmFuT3V0Q291bnQoKTsKLQogICAgIC8vIHJlbmRlcmluZ0Zh
bk91dENvdW50KCkgaXMgdGhlIG51bWJlciBvZiBBdWRpb05vZGVJbnB1dHMgdGhhdCB3ZSdyZSBj
b25uZWN0ZWQgdG8gZHVyaW5nIHJlbmRlcmluZy4KICAgICAvLyBVbmxpa2UgZmFuT3V0Q291bnQo
KSBpdCB3aWxsIG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBjb3Vyc2Ugb2YgYSByZW5kZXIgcXVhbnR1
bS4KICAgICB1bnNpZ25lZCByZW5kZXJpbmdGYW5PdXRDb3VudCgpIGNvbnN0OwogCi0gICAgLy8g
SXQgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2suCi0gICAgdm9p
ZCBkaXNjb25uZWN0QWxsSW5wdXRzKCk7CisgICAgLy8gcmVuZGVyaW5nUGFyYW1GYW5PdXRDb3Vu
dCgpIGlzIHRoZSBudW1iZXIgb2YgQXVkaW9QYXJhbXMgdGhhdCB3ZSdyZSBjb25uZWN0ZWQgdG8g
ZHVyaW5nIHJlbmRlcmluZy4KKyAgICAvLyBVbmxpa2UgcGFyYW1GYW5PdXRDb3VudCgpIGl0IHdp
bGwgbm90IGNoYW5nZSBkdXJpbmcgdGhlIGNvdXJzZSBvZiBhIHJlbmRlciBxdWFudHVtLgorICAg
IHVuc2lnbmVkIHJlbmRlcmluZ1BhcmFtRmFuT3V0Q291bnQoKSBjb25zdDsKKworICAgIC8vIE11
c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBsb2NrLgorICAgIHZvaWQgZGlz
Y29ubmVjdEFsbCgpOwogCiAgICAgdm9pZCBzZXROdW1iZXJPZkNoYW5uZWxzKHVuc2lnbmVkKTsK
ICAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJP
ZkNoYW5uZWxzOyB9CkBAIC04NywxMSArODYsMjggQEAgcHJpdmF0ZToKICAgICBBdWRpb05vZGUq
IG1fbm9kZTsKIAogICAgIGZyaWVuZCBjbGFzcyBBdWRpb05vZGVJbnB1dDsKKyAgICBmcmllbmQg
Y2xhc3MgQXVkaW9QYXJhbTsKICAgICAKICAgICAvLyBUaGVzZSBhcmUgY2FsbGVkIGZyb20gQXVk
aW9Ob2RlSW5wdXQuCiAgICAgLy8gVGhleSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0
J3MgZ3JhcGggbG9jay4KICAgICB2b2lkIGFkZElucHV0KEF1ZGlvTm9kZUlucHV0Kik7CiAgICAg
dm9pZCByZW1vdmVJbnB1dChBdWRpb05vZGVJbnB1dCopOworICAgIHZvaWQgYWRkUGFyYW0oQXVk
aW9QYXJhbSopOworICAgIHZvaWQgcmVtb3ZlUGFyYW0oQXVkaW9QYXJhbSopOworCisgICAgLy8g
ZmFuT3V0Q291bnQoKSBpcyB0aGUgbnVtYmVyIG9mIEF1ZGlvTm9kZUlucHV0cyB0aGF0IHdlJ3Jl
IGNvbm5lY3RlZCB0by4KKyAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBp
biBhdWRpbyB0aHJlYWQgcmVuZGVyaW5nIGNvZGUsIGluc3RlYWQgcmVuZGVyaW5nRmFuT3V0Q291
bnQoKSBzaG91bGQgYmUgdXNlZC4KKyAgICAvLyBJdCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBj
b250ZXh0J3MgZ3JhcGggbG9jay4KKyAgICB1bnNpZ25lZCBmYW5PdXRDb3VudCgpOworCisgICAg
Ly8gU2ltaWxhciB0byBmYW5PdXRDb3VudCgpLCBwYXJhbUZhbk91dENvdW50KCkgaXMgdGhlIG51
bWJlciBvZiBBdWRpb1BhcmFtcyB0aGF0IHdlJ3JlIGNvbm5lY3RlZCB0by4KKyAgICAvLyBUaGlz
IG1ldGhvZCBzaG91bGQgbm90IGJlIGNhbGxlZCBpbiBhdWRpbyB0aHJlYWQgcmVuZGVyaW5nIGNv
ZGUsIGluc3RlYWQgcmVuZGVyaW5nUGFyYW1GYW5PdXRDb3VudCgpIHNob3VsZCBiZSB1c2VkLgor
ICAgIC8vIEl0IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBsb2NrLgor
ICAgIHVuc2lnbmVkIHBhcmFtRmFuT3V0Q291bnQoKTsKKworICAgIC8vIE11c3QgYmUgY2FsbGVk
IHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBsb2NrLgorICAgIHZvaWQgZGlzY29ubmVjdEFsbElu
cHV0cygpOworICAgIHZvaWQgZGlzY29ubmVjdEFsbFBhcmFtcygpOwogCiAgICAgLy8gdXBkYXRl
SW50ZXJuYWxCdXMoKSB1cGRhdGVzIG1faW50ZXJuYWxCdXMgYXBwcm9wcmlhdGVseSBmb3IgdGhl
IG51bWJlciBvZiBjaGFubmVscy4KICAgICAvLyBJdCBpcyBjYWxsZWQgaW4gdGhlIGNvbnN0cnVj
dG9yIG9yIGluIHRoZSBhdWRpbyB0aHJlYWQgd2l0aCB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2su
CkBAIC0xMjAsMTAgKzEzNiwxNCBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8QXVkaW9Ob2RlSW5w
dXQqPiBtX2lucHV0czsKICAgICB0eXBlZGVmIEhhc2hTZXQ8QXVkaW9Ob2RlSW5wdXQqPjo6aXRl
cmF0b3IgSW5wdXRzSXRlcmF0b3I7CiAgICAgYm9vbCBtX2lzRW5hYmxlZDsKLSAgICAKLSAgICAv
LyBGb3IgdGhlIHB1cnBvc2VzIG9mIHJlbmRlcmluZywga2VlcHMgdHJhY2sgb2YgdGhlIG51bWJl
ciBvZiBpbnB1dHMgd2UncmUgY29ubmVjdGVkIHRvLgotICAgIC8vIFRoaXMgdmFsdWUgc2hvdWxk
IG9ubHkgYmUgY2hhbmdlZCBhdCB0aGUgdmVyeSBzdGFydCBvciBlbmQgb2YgdGhlIHJlbmRlcmlu
ZyBxdWFudHVtLgorCisgICAgLy8gRm9yIHRoZSBwdXJwb3NlcyBvZiByZW5kZXJpbmcsIGtlZXBz
IHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgaW5wdXRzIGFuZCBBdWRpb1BhcmFtcyB3ZSdyZSBjb25u
ZWN0ZWQgdG8uCisgICAgLy8gVGhlc2UgdmFsdWUgc2hvdWxkIG9ubHkgYmUgY2hhbmdlZCBhdCB0
aGUgdmVyeSBzdGFydCBvciBlbmQgb2YgdGhlIHJlbmRlcmluZyBxdWFudHVtLgogICAgIHVuc2ln
bmVkIG1fcmVuZGVyaW5nRmFuT3V0Q291bnQ7CisgICAgdW5zaWduZWQgbV9yZW5kZXJpbmdQYXJh
bUZhbk91dENvdW50OworCisgICAgSGFzaFNldDxBdWRpb1BhcmFtKj4gbV9wYXJhbXM7CisgICAg
dHlwZWRlZiBIYXNoU2V0PEF1ZGlvUGFyYW0qPjo6aXRlcmF0b3IgUGFyYW1zSXRlcmF0b3I7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb1BhcmFtLmNwcAppbmRleCBiZTkyNzlmZGYxODBhZDA0YTYyNGJkMjUwMTQ5
OWU1MjM3NDg5M2Y4Li4wNzNiNzM0YjJkMjVjMzNhMDgxZjQ0ZjJmN2MyNzJkZGFkYzM2ZGYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAKQEAg
LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJBdWRpb1BhcmFtLmgiCiAKICNpbmNsdWRlICJBdWRp
b05vZGUuaCIKKyNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKICNpbmNsdWRlICJBdWRpb1V0
aWxpdGllcy5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CkBAIC05NSwxMSArOTYsNDIgQEAgYm9vbCBBdWRpb1BhcmFtOjpzbW9vdGgo
KQogCiB2b2lkIEF1ZGlvUGFyYW06OmNhbGN1bGF0ZVNhbXBsZUFjY3VyYXRlVmFsdWVzKGZsb2F0
KiB2YWx1ZXMsIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzKQogewotICAgIGJvb2wgaXNTYWZlID0g
Y29udGV4dCgpICYmIGNvbnRleHQoKS0+aXNBdWRpb1RocmVhZCgpICYmIHZhbHVlczsKKyAgICBi
b29sIGlzU2FmZSA9IGNvbnRleHQoKSAmJiBjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSAmJiB2
YWx1ZXMgJiYgbnVtYmVyT2ZWYWx1ZXM7CiAgICAgQVNTRVJUKGlzU2FmZSk7CiAgICAgaWYgKCFp
c1NhZmUpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChtX2F1ZGlvUmF0ZVNpZ25hbCkKKyAg
ICAgICAgY2FsY3VsYXRlQXVkaW9SYXRlU2lnbmFsVmFsdWVzKHZhbHVlcywgbnVtYmVyT2ZWYWx1
ZXMpOworICAgIGVsc2UKKyAgICAgICAgY2FsY3VsYXRlVGltZWxpbmVWYWx1ZXModmFsdWVzLCBu
dW1iZXJPZlZhbHVlcyk7Cit9CisKK3ZvaWQgQXVkaW9QYXJhbTo6Y2FsY3VsYXRlQXVkaW9SYXRl
U2lnbmFsVmFsdWVzKGZsb2F0KiB2YWx1ZXMsIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzKQorewor
ICAgIC8vIEZJWE1FOiBzdXBwb3J0IGZhbi1pbiAobXVsdGlwbGUgYXVkaW8gY29ubmVjdGlvbnMg
dG8gdGhpcyBwYXJhbWV0ZXIgd2l0aCB1bml0eS1nYWluIHN1bW1pbmcpLgorICAgIEFTU0VSVCht
X2F1ZGlvUmF0ZVNpZ25hbCk7CisKKyAgICBBdWRpb0J1cyogYnVzID0gbV9hdWRpb1JhdGVTaWdu
YWwtPnB1bGwoMCwgbnVtYmVyT2ZWYWx1ZXMpOworICAgIGJvb2wgaXNCdXNHb29kID0gYnVzICYm
IGJ1cy0+bnVtYmVyT2ZDaGFubmVscygpICYmIGJ1cy0+bGVuZ3RoKCkgPj0gbnVtYmVyT2ZWYWx1
ZXM7CisgICAgQVNTRVJUKGlzQnVzR29vZCk7CisgICAgaWYgKCFpc0J1c0dvb2QpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChidXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSAxKSB7CisgICAg
ICAgIC8vIFRoZSBub3JtYWwgY2FzZSBpcyB0byBkZWFsIHdpdGggYSBtb25vIGF1ZGlvLXJhdGUg
c2lnbmFsLgorICAgICAgICBtZW1jcHkodmFsdWVzLCBidXMtPmNoYW5uZWwoMCktPmRhdGEoKSwg
c2l6ZW9mKGZsb2F0KSAqIG51bWJlck9mVmFsdWVzKTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBEbyBhIHN0YW5kYXJkIG1peGRvd24gdG8gb25lIGNoYW5uZWwgaWYgbmVjZXNzYXJ5LgorICAg
ICAgICBBdWRpb0J1cyB3cmFwcGVyQnVzKDEsIG51bWJlck9mVmFsdWVzLCBmYWxzZSk7CisgICAg
ICAgIHdyYXBwZXJCdXMuc2V0Q2hhbm5lbE1lbW9yeSgwLCB2YWx1ZXMsIG51bWJlck9mVmFsdWVz
KTsKKyAgICAgICAgd3JhcHBlckJ1cy5jb3B5RnJvbSgqYnVzKTsgLy8gTWl4ZG93bi4KKyAgICB9
CisgICAgbV92YWx1ZSA9IHZhbHVlc1swXTsgLy8gVXBkYXRlIHRvIGZpcnN0IHZhbHVlLgorfQor
Cit2b2lkIEF1ZGlvUGFyYW06OmNhbGN1bGF0ZVRpbWVsaW5lVmFsdWVzKGZsb2F0KiB2YWx1ZXMs
IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzKQorewogICAgIC8vIENhbGN1bGF0ZSB2YWx1ZXMgZm9y
IHRoaXMgcmVuZGVyIHF1YW50dW0uCiAgICAgLy8gTm9ybWFsbHkgbnVtYmVyT2ZWYWx1ZXMgd2ls
bCBlcXVhbCBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMgKHRoZSByZW5kZXIgcXVh
bnR1bSBzaXplKS4KICAgICBmbG9hdCBzYW1wbGVSYXRlID0gY29udGV4dCgpLT5zYW1wbGVSYXRl
KCk7CkBAIC0xMTEsNiArMTQzLDM0IEBAIHZvaWQgQXVkaW9QYXJhbTo6Y2FsY3VsYXRlU2FtcGxl
QWNjdXJhdGVWYWx1ZXMoZmxvYXQqIHZhbHVlcywgdW5zaWduZWQgbnVtYmVyT2ZWCiAgICAgbV92
YWx1ZSA9IG1fdGltZWxpbmUudmFsdWVzRm9yVGltZVJhbmdlKHN0YXJ0VGltZSwgZW5kVGltZSwg
bmFycm93UHJlY2lzaW9uVG9GbG9hdChtX3ZhbHVlKSwgdmFsdWVzLCBudW1iZXJPZlZhbHVlcywg
c2FtcGxlUmF0ZSwgc2FtcGxlUmF0ZSk7CiB9CiAKK3ZvaWQgQXVkaW9QYXJhbTo6Y29ubmVjdChB
dWRpb05vZGVPdXRwdXQqIGF1ZGlvUmF0ZVNpZ25hbCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgp
LT5pc0dyYXBoT3duZXIoKSk7CisgICAgQVNTRVJUKGF1ZGlvUmF0ZVNpZ25hbCk7CisgICAgaWYg
KCFhdWRpb1JhdGVTaWduYWwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2F1ZGlvUmF0
ZVNpZ25hbCAmJiBtX2F1ZGlvUmF0ZVNpZ25hbCAhPSBhdWRpb1JhdGVTaWduYWwpIHsKKyAgICAg
ICAgLy8gQmVjYXVzZSB3ZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBmYW4taW4gd2UgbXVzdCBl
eHBsaWNpdGx5IGRpc2Nvbm5lY3QgZnJvbSBhbiBvbGQgb3V0cHV0LgorICAgICAgICBtX2F1ZGlv
UmF0ZVNpZ25hbC0+cmVtb3ZlUGFyYW0odGhpcyk7CisgICAgfQorCisgICAgYXVkaW9SYXRlU2ln
bmFsLT5hZGRQYXJhbSh0aGlzKTsKKyAgICBtX2F1ZGlvUmF0ZVNpZ25hbCA9IGF1ZGlvUmF0ZVNp
Z25hbDsKK30KKwordm9pZCBBdWRpb1BhcmFtOjpkaXNjb25uZWN0KEF1ZGlvTm9kZU91dHB1dCog
YXVkaW9SYXRlU2lnbmFsKQoreworICAgIEFTU0VSVChjb250ZXh0KCktPmlzR3JhcGhPd25lcigp
KTsKKyAgICBBU1NFUlQoYXVkaW9SYXRlU2lnbmFsKTsKKyAgICBpZiAoIWF1ZGlvUmF0ZVNpZ25h
bCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IHN1cHBvcnQgZmFuLWluIChtdWx0
aXBsZSBhdWRpbyBjb25uZWN0aW9ucyB0byB0aGlzIHBhcmFtZXRlciB3aXRoIHVuaXR5LWdhaW4g
c3VtbWluZykuCisgICAgaWYgKG1fYXVkaW9SYXRlU2lnbmFsID09IGF1ZGlvUmF0ZVNpZ25hbCkK
KyAgICAgICAgbV9hdWRpb1JhdGVTaWduYWwgPSAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaAppbmRleCAyNzU4NDg3ZGFhMTE3YTdjNDk1MzNlNGU2
MWRlZmQ3YTFmN2JhZjEyLi5hYTc2M2NiNWQxYzY1ZDY2Y2I0N2Y5YWJjNDcxNDc0MGIyNmY3ZmYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uaApAQCAt
MzksNiArMzksOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEF1ZGlvTm9kZU91
dHB1dDsKKwogY2xhc3MgQXVkaW9QYXJhbSA6IHB1YmxpYyBSZWZDb3VudGVkPEF1ZGlvUGFyYW0+
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIERlZmF1bHRTbW9vdGhpbmdDb25z
dGFudDsKQEAgLTU4LDYgKzYwLDcgQEAgcHVibGljOgogICAgICAgICAsIG1fdW5pdHModW5pdHMp
CiAgICAgICAgICwgbV9zbW9vdGhlZFZhbHVlKGRlZmF1bHRWYWx1ZSkKICAgICAgICAgLCBtX3Nt
b290aGluZ0NvbnN0YW50KERlZmF1bHRTbW9vdGhpbmdDb25zdGFudCkKKyAgICAgICAgLCBtX2F1
ZGlvUmF0ZVNpZ25hbCgwKQogICAgIHsKICAgICB9CiAgICAgCkBAIC05NiwxMyArOTksMjAgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0VmFsdWVDdXJ2ZUF0VGltZShGbG9hdDMyQXJyYXkqIGN1cnZl
LCBmbG9hdCB0aW1lLCBmbG9hdCBkdXJhdGlvbikgeyBtX3RpbWVsaW5lLnNldFZhbHVlQ3VydmVB
dFRpbWUoY3VydmUsIHRpbWUsIGR1cmF0aW9uKTsgfQogICAgIHZvaWQgY2FuY2VsU2NoZWR1bGVk
VmFsdWVzKGZsb2F0IHN0YXJ0VGltZSkgeyBtX3RpbWVsaW5lLmNhbmNlbFNjaGVkdWxlZFZhbHVl
cyhzdGFydFRpbWUpOyB9CiAKLSAgICBib29sIGhhc1RpbWVsaW5lVmFsdWVzKCkgeyByZXR1cm4g
bV90aW1lbGluZS5oYXNWYWx1ZXMoKTsgfQorICAgIGJvb2wgaGFzU2FtcGxlQWNjdXJhdGVWYWx1
ZXMoKSB7IHJldHVybiBtX3RpbWVsaW5lLmhhc1ZhbHVlcygpIHx8IG1fYXVkaW9SYXRlU2lnbmFs
OyB9CiAgICAgCiAgICAgLy8gQ2FsY3VsYXRlcyBudW1iZXJPZlZhbHVlcyBwYXJhbWV0ZXIgdmFs
dWVzIHN0YXJ0aW5nIGF0IHRoZSBjb250ZXh0J3MgY3VycmVudCB0aW1lLgogICAgIC8vIE11c3Qg
YmUgY2FsbGVkIGluIHRoZSBjb250ZXh0J3MgcmVuZGVyIHRocmVhZC4KICAgICB2b2lkIGNhbGN1
bGF0ZVNhbXBsZUFjY3VyYXRlVmFsdWVzKGZsb2F0KiB2YWx1ZXMsIHVuc2lnbmVkIG51bWJlck9m
VmFsdWVzKTsKIAorICAgIC8vIENvbm5lY3QgYW4gYXVkaW8tcmF0ZSBzaWduYWwgdG8gY29udHJv
bCB0aGlzIHBhcmFtZXRlci4KKyAgICB2b2lkIGNvbm5lY3QoQXVkaW9Ob2RlT3V0cHV0Kik7Cisg
ICAgdm9pZCBkaXNjb25uZWN0KEF1ZGlvTm9kZU91dHB1dCopOworCiBwcml2YXRlOgorICAgIHZv
aWQgY2FsY3VsYXRlQXVkaW9SYXRlU2lnbmFsVmFsdWVzKGZsb2F0KiB2YWx1ZXMsIHVuc2lnbmVk
IG51bWJlck9mVmFsdWVzKTsKKyAgICB2b2lkIGNhbGN1bGF0ZVRpbWVsaW5lVmFsdWVzKGZsb2F0
KiB2YWx1ZXMsIHVuc2lnbmVkIG51bWJlck9mVmFsdWVzKTsKKwogICAgIFJlZlB0cjxBdWRpb0Nv
bnRleHQ+IG1fY29udGV4dDsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIGRvdWJsZSBtX3ZhbHVl
OwpAQCAtMTE2LDYgKzEyNiwxMCBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBtX3Ntb290aGluZ0Nv
bnN0YW50OwogICAgIAogICAgIEF1ZGlvUGFyYW1UaW1lbGluZSBtX3RpbWVsaW5lOworCisgICAg
Ly8gQW4gYXVkaW8tcmF0ZSBzaWduYWwgZGlyZWN0bHkgcHJvdmlkaW5nIHBhcmFtZXRlciB2YWx1
ZXMuCisgICAgLy8gRklYTUU6IHN1cHBvcnQgZmFuLWluIChtdWx0aXBsZSBhdWRpbyBjb25uZWN0
aW9ucyB0byB0aGlzIHBhcmFtZXRlciB3aXRoIHVuaXR5LWdhaW4gc3VtbWluZykuCisgICAgQXVk
aW9Ob2RlT3V0cHV0KiBtX2F1ZGlvUmF0ZVNpZ25hbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT3NjaWxs
YXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3IuY3Bw
CmluZGV4IDFmYWI0ZDgxNjkxNDI3YmZmMjBlZjNhNzVhNDAwZjU1M2MxMDI5NjkuLjM5OGQzNTkz
ZDZiYWZlNjI2YjBmYzJlMmYxMjcyY2NkODE2NTRkZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yLmNwcApAQCAtMTEyLDE0ICsxMTIsMTQgQEAgYm9v
bCBPc2NpbGxhdG9yOjpjYWxjdWxhdGVTYW1wbGVBY2N1cmF0ZVBoYXNlSW5jcmVtZW50cyhzaXpl
X3QgZnJhbWVzVG9Qcm9jZXNzKQogICAgIGlmICghaXNHb29kKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBib29sIGhhc1RpbWVsaW5lVmFsdWVzID0gZmFsc2U7CisgICAgYm9vbCBoYXNT
YW1wbGVBY2N1cmF0ZVZhbHVlcyA9IGZhbHNlOwogICAgIGJvb2wgaGFzRnJlcXVlbmN5Q2hhbmdl
cyA9IGZhbHNlOwogICAgIGZsb2F0KiBwaGFzZUluY3JlbWVudHMgPSBtX3BoYXNlSW5jcmVtZW50
cy5kYXRhKCk7CiAKICAgICBmbG9hdCBmaW5hbFNjYWxlID0gbV93YXZlVGFibGUtPnJhdGVTY2Fs
ZSgpOwogCi0gICAgaWYgKG1fZnJlcXVlbmN5LT5oYXNUaW1lbGluZVZhbHVlcygpKSB7Ci0gICAg
ICAgIGhhc1RpbWVsaW5lVmFsdWVzID0gdHJ1ZTsKKyAgICBpZiAobV9mcmVxdWVuY3ktPmhhc1Nh
bXBsZUFjY3VyYXRlVmFsdWVzKCkpIHsKKyAgICAgICAgaGFzU2FtcGxlQWNjdXJhdGVWYWx1ZXMg
PSB0cnVlOwogICAgICAgICBoYXNGcmVxdWVuY3lDaGFuZ2VzID0gdHJ1ZTsKIAogICAgICAgICAv
LyBHZXQgdGhlIHNhbXBsZS1hY2N1cmF0ZSBmcmVxdWVuY3kgdmFsdWVzIGFuZCBjb252ZXJ0IHRv
IHBoYXNlIGluY3JlbWVudHMuCkBAIC0xMzIsOCArMTMyLDggQEAgYm9vbCBPc2NpbGxhdG9yOjpj
YWxjdWxhdGVTYW1wbGVBY2N1cmF0ZVBoYXNlSW5jcmVtZW50cyhzaXplX3QgZnJhbWVzVG9Qcm9j
ZXNzKQogICAgICAgICBmaW5hbFNjYWxlICo9IGZyZXF1ZW5jeTsKICAgICB9CiAKLSAgICBpZiAo
bV9kZXR1bmUtPmhhc1RpbWVsaW5lVmFsdWVzKCkpIHsKLSAgICAgICAgaGFzVGltZWxpbmVWYWx1
ZXMgPSB0cnVlOworICAgIGlmIChtX2RldHVuZS0+aGFzU2FtcGxlQWNjdXJhdGVWYWx1ZXMoKSkg
eworICAgICAgICBoYXNTYW1wbGVBY2N1cmF0ZVZhbHVlcyA9IHRydWU7CiAKICAgICAgICAgLy8g
R2V0IHRoZSBzYW1wbGUtYWNjdXJhdGUgZGV0dW5lIHZhbHVlcy4KICAgICAgICAgZmxvYXQqIGRl
dHVuZVZhbHVlcyA9IGhhc0ZyZXF1ZW5jeUNoYW5nZXMgPyBtX2RldHVuZVZhbHVlcy5kYXRhKCkg
OiBwaGFzZUluY3JlbWVudHM7CkBAIC0xNTcsMjAgKzE1NywxOCBAQCBib29sIE9zY2lsbGF0b3I6
OmNhbGN1bGF0ZVNhbXBsZUFjY3VyYXRlUGhhc2VJbmNyZW1lbnRzKHNpemVfdCBmcmFtZXNUb1By
b2Nlc3MpCiAgICAgICAgIGZpbmFsU2NhbGUgKj0gZGV0dW5lU2NhbGU7CiAgICAgfQogCi0gICAg
aWYgKGhhc1RpbWVsaW5lVmFsdWVzKSB7CisgICAgaWYgKGhhc1NhbXBsZUFjY3VyYXRlVmFsdWVz
KSB7CiAgICAgICAgIC8vIENvbnZlcnQgZnJvbSBmcmVxdWVuY3kgdG8gd2F2ZXRhYmxlIGluY3Jl
bWVudC4KICAgICAgICAgdnNtdWwocGhhc2VJbmNyZW1lbnRzLCAxLCAmZmluYWxTY2FsZSwgcGhh
c2VJbmNyZW1lbnRzLCAxLCBmcmFtZXNUb1Byb2Nlc3MpOwogICAgIH0KIAotICAgIHJldHVybiBo
YXNUaW1lbGluZVZhbHVlczsKKyAgICByZXR1cm4gaGFzU2FtcGxlQWNjdXJhdGVWYWx1ZXM7CiB9
CiAKIHZvaWQgT3NjaWxsYXRvcjo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQogewog
ICAgIEF1ZGlvQnVzKiBvdXRwdXRCdXMgPSBvdXRwdXQoMCktPmJ1cygpOwogCi0gICAgb3V0cHV0
QnVzLT56ZXJvKCk7Ci0KICAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSB8fCAhb3V0cHV0QnVzLT5u
dW1iZXJPZkNoYW5uZWxzKCkpIHsKICAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CiAgICAgICAg
IHJldHVybjsKQEAgLTIwNiwxNCArMjA0LDE0IEBAIHZvaWQgT3NjaWxsYXRvcjo6cHJvY2Vzcyhz
aXplX3QgZnJhbWVzVG9Qcm9jZXNzKQogCiAgICAgZmxvYXQgcmF0ZVNjYWxlID0gbV93YXZlVGFi
bGUtPnJhdGVTY2FsZSgpOwogICAgIGZsb2F0IGludlJhdGVTY2FsZSA9IDEgLyByYXRlU2NhbGU7
Ci0gICAgYm9vbCBoYXNUaW1lbGluZVZhbHVlcyA9IGNhbGN1bGF0ZVNhbXBsZUFjY3VyYXRlUGhh
c2VJbmNyZW1lbnRzKGZyYW1lc1RvUHJvY2Vzcyk7CisgICAgYm9vbCBoYXNTYW1wbGVBY2N1cmF0
ZVZhbHVlcyA9IGNhbGN1bGF0ZVNhbXBsZUFjY3VyYXRlUGhhc2VJbmNyZW1lbnRzKGZyYW1lc1Rv
UHJvY2Vzcyk7CiAKICAgICBmbG9hdCBmcmVxdWVuY3kgPSAwOwogICAgIGZsb2F0KiBoaWdoZXJX
YXZlRGF0YSA9IDA7CiAgICAgZmxvYXQqIGxvd2VyV2F2ZURhdGEgPSAwOwogICAgIGZsb2F0IHRh
YmxlSW50ZXJwb2xhdGlvbkZhY3RvcjsKIAotICAgIGlmICghaGFzVGltZWxpbmVWYWx1ZXMpIHsK
KyAgICBpZiAoIWhhc1NhbXBsZUFjY3VyYXRlVmFsdWVzKSB7CiAgICAgICAgIGZyZXF1ZW5jeSA9
IG1fZnJlcXVlbmN5LT5zbW9vdGhlZFZhbHVlKCk7CiAgICAgICAgIGZsb2F0IGRldHVuZSA9IG1f
ZGV0dW5lLT5zbW9vdGhlZFZhbHVlKCk7CiAgICAgICAgIGZsb2F0IGRldHVuZVNjYWxlID0gcG93
ZigyLCBkZXR1bmUgLyAxMjAwKTsKQEAgLTIzNCw3ICsyMzIsNyBAQCB2b2lkIE9zY2lsbGF0b3I6
OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICAgICAgcmVhZEluZGV4ID0gcmVh
ZEluZGV4ICYgcmVhZEluZGV4TWFzazsKICAgICAgICAgcmVhZEluZGV4MiA9IHJlYWRJbmRleDIg
JiByZWFkSW5kZXhNYXNrOwogCi0gICAgICAgIGlmIChoYXNUaW1lbGluZVZhbHVlcykgeworICAg
ICAgICBpZiAoaGFzU2FtcGxlQWNjdXJhdGVWYWx1ZXMpIHsKICAgICAgICAgICAgIGluY3IgPSAq
cGhhc2VJbmNyZW1lbnRzKys7CiAKICAgICAgICAgICAgIGZyZXF1ZW5jeSA9IGludlJhdGVTY2Fs
ZSAqIGluY3I7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggNTZjMTFlZDgyMTE1M2Y1NmNlYmE1YmVlYjcwNzgzY2VhNDllYTI4
Ny4uM2I4YTBlZmIzMWE4MTcyZjQzNDAxNzQwZmMwOWRlMzhjYTMzNWJkZCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE2IEBACisyMDEyLTA0LTA5ICBDaHJpcyBSb2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+
CisKKyAgICAgICAgQXVkaW9QYXJhbSBtdXN0IHN1cHBvcnQgY29ubmVjdGlvbnMgZnJvbSBhdWRp
by1yYXRlIHNpZ25hbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTgzNTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB3ZWJhdWRpby9hdWRpb3BhcmFtLWNvbm5lY3QtYXVkaW9yYXRlc2lnbmFsLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vYXVkaW9wYXJhbS1jb25uZWN0LWF1
ZGlvcmF0ZXNpZ25hbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9yZXNvdXJjZXMv
YXVkaW8tdGVzdGluZy5qczoKKyAgICAgICAgKGNyZWF0ZUxpbmVhclJhbXBCdWZmZXIpOgorICAg
ICAgICAoY3JlYXRlQ29uc3RhbnRCdWZmZXIpOgorCiAyMDEyLTA0LTA5ICBSb2JlcnQgSG9nYW4g
IDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBTa2lwIGZhc3QvY3NzL2FsaWduLXBvc2l0
aW9uZWQtb2JqZWN0LW9uLXJlc2l6ZS5odG1sIG9uIE1hYyBwbGF0Zm9ybXMuCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLWNvbm5lY3QtYXVkaW9yYXRlc2lnbmFs
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tY29ubmVjdC1h
dWRpb3JhdGVzaWduYWwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjZTA2NGQwZDRhMjRlNmM4
ZWY0MjM5NGJlMjgxNzJhMWFlYTEyZTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJhdWRpby9hdWRpb3BhcmFtLWNvbm5lY3QtYXVkaW9yYXRlc2lnbmFsLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDYgQEAKK1BBU1MgUmVuZGVyZWQgc2lnbmFsIGlzIG9mIGNvcnJlY3QgbGVuZ3Ro
LgorUEFTUyBSZW5kZXJlZCBzaWduYWwgZXhhY3RseSBtYXRjaGVzIHRoZSBhdWRpby1yYXRlIGdh
aW4gY2hhbmdpbmcgc2lnbmFsLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFy
YW0tY29ubmVjdC1hdWRpb3JhdGVzaWduYWwuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1
ZGlvcGFyYW0tY29ubmVjdC1hdWRpb3JhdGVzaWduYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDZlYjcw
M2Y4YjA5Y2IyZjg3MThiZjlkMjdiNjVmMWZhNDY4YmY1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1jb25uZWN0LWF1ZGlvcmF0ZXNpZ25hbC5odG1s
CkBAIC0wLDAgKzEsMTEyIEBACis8IURPQ1RZUEUgaHRtbD4KKworPCEtLQorVGVzdHMgdGhhdCBh
biBhdWRpby1yYXRlIHNpZ25hbCAoQXVkaW9Ob2RlIG91dHB1dCkgY2FuIGJlIGNvbm5lY3RlZCB0
byBhbiBBdWRpb1BhcmFtLgorU3BlY2lmaWNhbGx5LCB0aGlzIHRlc3RzIHRoYXQgYW4gYXVkaW8t
cmF0ZSBzaWduYWwgY29taW5nIGZyb20gYW4gQXVkaW9CdWZmZXJTb3VyY2VOb2RlCitwbGF5aW5n
IGFuIEF1ZGlvQnVmZmVyIGNvbnRhaW5pbmcgYSBzcGVjaWZpYyBjdXJ2ZSBjYW4gYmUgY29ubmVj
dGVkIHRvIGFuIEF1ZGlvR2Fpbk5vZGUncworLmdhaW4gYXR0cmlidXRlIChhbiBBdWRpb1BhcmFt
KS4gIEFub3RoZXIgQXVkaW9CdWZmZXJTb3VyY2VOb2RlIHdpbGwgYmUgdGhlIGF1ZGlvIHNvdXJj
ZQoraGF2aW5nIGl0cyBnYWluIGNoYW5nZWQuICBXZSBsb2FkIHRoaXMgb25lIHdpdGggYW4gQXVk
aW9CdWZmZXIgY29udGFpbmluZyBhIGNvbnN0YW50IHZhbHVlIG9mIDEuCitUaHVzIGl0J3MgZWFz
eSB0byBjaGVjayB0aGF0IHRoZSByZXN1bHRhbnQgc2lnbmFsIHNob3VsZCBiZSBlcXVhbCB0byB0
aGUgZ2Fpbi1zY2FsaW5nIGN1cnZlLgorLS0+CisKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ii8+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKworPC9oZWFkPgorPGJvZHk+CisKKzxzY3JpcHQ+CisKK3ZhciBzYW1wbGVSYXRlID0gNDQx
MDAuMDsKK3ZhciBsZW5ndGhJblNlY29uZHMgPSAxOworCit2YXIgY29udGV4dCA9IDA7Cit2YXIg
Y29uc3RhbnRPbmVCdWZmZXIgPSAwOwordmFyIGxpbmVhclJhbXBCdWZmZXIgPSAwOworCitmdW5j
dGlvbiBjaGVja1Jlc3VsdChldmVudCkgeworICAgIHZhciByZW5kZXJlZEJ1ZmZlciA9IGV2ZW50
LnJlbmRlcmVkQnVmZmVyOworICAgIHZhciByZW5kZXJlZERhdGEgPSByZW5kZXJlZEJ1ZmZlci5n
ZXRDaGFubmVsRGF0YSgwKTsKKyAgICB2YXIgZXhwZWN0ZWREYXRhID0gbGluZWFyUmFtcEJ1ZmZl
ci5nZXRDaGFubmVsRGF0YSgwKTsKKyAgICB2YXIgbiA9IHJlbmRlcmVkQnVmZmVyLmxlbmd0aDsK
KworICAgIGlmIChuID09IGxpbmVhclJhbXBCdWZmZXIubGVuZ3RoKSB7CisgICAgICAgIHRlc3RQ
YXNzZWQoIlJlbmRlcmVkIHNpZ25hbCBpcyBvZiBjb3JyZWN0IGxlbmd0aC4iKTsKKyAgICB9IGVs
c2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJSZW5kZXJlZCBzaWduYWwgaXMgbm90IG9mIGNvcnJl
Y3QgbGVuZ3RoLiIpOworICAgIH0KKworICAgIC8vIENoZWNrIHRoYXQgdGhlIHJlbmRlcmVkIHJl
c3VsdCBleGFjdGx5IG1hdGNoZXMgdGhlIGJ1ZmZlciB1c2VkIHRvIGNvbnRyb2wgZ2Fpbi4KKyAg
ICAvLyBUaGlzIGlzIGJlY2F1c2Ugd2UncmUgY2hhbmdpbmcgdGhlIGdhaW4gb2YgYSBzaWduYWwg
aGF2aW5nIGNvbnN0YW50IHZhbHVlIDEuCisgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIGlmIChyZW5kZXJlZERhdGFbaV0g
IT0gZXhwZWN0ZWREYXRhW2ldKSB7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzdWNjZXNzKSB7Cisg
ICAgICAgIHRlc3RQYXNzZWQoIlJlbmRlcmVkIHNpZ25hbCBleGFjdGx5IG1hdGNoZXMgdGhlIGF1
ZGlvLXJhdGUgZ2FpbiBjaGFuZ2luZyBzaWduYWwuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
dGVzdEZhaWxlZCgiUmVuZGVyZWQgc2lnbmFsIGRpZmZlcnMgZnJvbSB0aGUgYXVkaW8tcmF0ZSBn
YWluIGNoYW5naW5nIHNpZ25hbC4iKTsKKyAgICB9CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30K
KworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIHdp
bmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAgIHZhciBzYW1wbGVGcmFtZUxlbmd0aCA9
IHNhbXBsZVJhdGUgKiBsZW5ndGhJblNlY29uZHM7CisKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBh
dWRpbyBjb250ZXh0LgorICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDEsIHNh
bXBsZUZyYW1lTGVuZ3RoLCBzYW1wbGVSYXRlKTsKKworICAgIC8vIENyZWF0ZSBidWZmZXIgdXNl
ZCBieSB0aGUgc291cmNlIHdoaWNoIHdpbGwgaGF2ZSBpdHMgZ2FpbiBjb250cm9sbGVkLgorICAg
IGNvbnN0YW50T25lQnVmZmVyID0gY3JlYXRlQ29uc3RhbnRCdWZmZXIoY29udGV4dCwgc2FtcGxl
RnJhbWVMZW5ndGgsIDEpOworCisgICAgLy8gQ3JlYXRlIGJ1ZmZlciB1c2VkIHRvIGNvbnRyb2wg
Z2Fpbi4KKyAgICBsaW5lYXJSYW1wQnVmZmVyID0gY3JlYXRlTGluZWFyUmFtcEJ1ZmZlcihjb250
ZXh0LCBzYW1wbGVGcmFtZUxlbmd0aCk7CisKKyAgICAvLyBDcmVhdGUgdGhlIHR3byBzb3VyY2Vz
LgorCisgICAgdmFyIGNvbnN0YW50U291cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2Uo
KTsKKyAgICBjb25zdGFudFNvdXJjZS5idWZmZXIgPSBjb25zdGFudE9uZUJ1ZmZlcjsKKworICAg
IHZhciBnYWluQ2hhbmdpbmdTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOwor
ICAgIGdhaW5DaGFuZ2luZ1NvdXJjZS5idWZmZXIgPSBsaW5lYXJSYW1wQnVmZmVyOworCisgICAg
Ly8gQ3JlYXRlIGEgZ2FpbiBub2RlIGNvbnRyb2xsaW5nIHRoZSBnYWluIG9mIGNvbnN0YW50U291
cmNlIGFuZCBtYWtlIHRoZSBjb25uZWN0aW9ucy4KKyAgICB2YXIgZ2Fpbk5vZGUgPSBjb250ZXh0
LmNyZWF0ZUdhaW5Ob2RlKCk7CisgICAgY29uc3RhbnRTb3VyY2UuY29ubmVjdChnYWluTm9kZSk7
CisgICAgZ2Fpbk5vZGUuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKworICAgIC8vIENv
bm5lY3QgYW4gYXVkaW8tcmF0ZSBzaWduYWwgdG8gY29udHJvbCB0aGUgLmdhaW4gQXVkaW9QYXJh
bS4KKyAgICAvLyBUaGlzIGlzIHRoZSBoZWFydCBvZiB3aGF0IGlzIGJlaW5nIHRlc3RlZC4KKyAg
ICBnYWluQ2hhbmdpbmdTb3VyY2UuY29ubmVjdChnYWluTm9kZS5nYWluKTsKKworICAgIC8vIFN0
YXJ0IGJvdGggc291cmNlcyBhdCB0aW1lIDAuCisgICAgY29uc3RhbnRTb3VyY2Uubm90ZU9uKDAp
OworICAgIGdhaW5DaGFuZ2luZ1NvdXJjZS5ub3RlT24oMCk7CisKKyAgICBjb250ZXh0Lm9uY29t
cGxldGUgPSBjaGVja1Jlc3VsdDsKKyAgICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7Cit9CisK
K3J1blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jl
c291cmNlcy9hdWRpby10ZXN0aW5nLmpzIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2Vz
L2F1ZGlvLXRlc3RpbmcuanMKaW5kZXggYWYwYWQyN2EyMzJlMjU5Y2Q4MWZlNTMzZDU3NGE3ZTI5
NWNjZGY4Ny4uZWM0ODkwMzhhY2ZmMWUwYjA0MDE5ODkyYWQzYjA1MTQ1YjMwNjJjZSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMKKysr
IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMKQEAgLTEx
NSw2ICsxMTUsMzAgQEAgZnVuY3Rpb24gY3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCBzYW1w
bGVGcmFtZUxlbmd0aCkgewogICAgIHJldHVybiBhdWRpb0J1ZmZlcjsKIH0KIAorLy8gQ3JlYXRl
IGEgYnVmZmVyIG9mIHRoZSBnaXZlbiBsZW5ndGggd2l0aCBhIGxpbmVhciByYW1wIGhhdmluZyB2
YWx1ZXMgMCA8PSB4IDwgMS4KK2Z1bmN0aW9uIGNyZWF0ZUxpbmVhclJhbXBCdWZmZXIoY29udGV4
dCwgc2FtcGxlRnJhbWVMZW5ndGgpIHsKKyAgICB2YXIgYXVkaW9CdWZmZXIgPSBjb250ZXh0LmNy
ZWF0ZUJ1ZmZlcigxLCBzYW1wbGVGcmFtZUxlbmd0aCwgY29udGV4dC5zYW1wbGVSYXRlKTsKKyAg
ICB2YXIgbiA9IGF1ZGlvQnVmZmVyLmxlbmd0aDsKKyAgICB2YXIgZGF0YUwgPSBhdWRpb0J1ZmZl
ci5nZXRDaGFubmVsRGF0YSgwKTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKQor
ICAgICAgICBkYXRhTFtpXSA9IGkgLyBuOworCisgICAgcmV0dXJuIGF1ZGlvQnVmZmVyOworfQor
CisvLyBDcmVhdGUgYSBidWZmZXIgb2YgdGhlIGdpdmVuIGxlbmd0aCBoYXZpbmcgYSBjb25zdGFu
dCB2YWx1ZS4KK2Z1bmN0aW9uIGNyZWF0ZUNvbnN0YW50QnVmZmVyKGNvbnRleHQsIHNhbXBsZUZy
YW1lTGVuZ3RoLCBjb25zdGFudFZhbHVlKSB7CisgICAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4
dC5jcmVhdGVCdWZmZXIoMSwgc2FtcGxlRnJhbWVMZW5ndGgsIGNvbnRleHQuc2FtcGxlUmF0ZSk7
CisgICAgdmFyIG4gPSBhdWRpb0J1ZmZlci5sZW5ndGg7CisgICAgdmFyIGRhdGFMID0gYXVkaW9C
dWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsr
aSkKKyAgICAgICAgZGF0YUxbaV0gPSBjb25zdGFudFZhbHVlOworCisgICAgcmV0dXJuIGF1ZGlv
QnVmZmVyOworfQorCiAvLyBDb252ZXJ0IHRpbWUgKGluIHNlY29uZHMpIHRvIHNhbXBsZSBmcmFt
ZXMuCiBmdW5jdGlvbiB0aW1lVG9TYW1wbGVGcmFtZSh0aW1lLCBzYW1wbGVSYXRlKSB7CiAgICAg
cmV0dXJuIE1hdGguZmxvb3IoMC41ICsgdGltZSAqIHNhbXBsZVJhdGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136527</attachid>
            <date>2012-04-10 13:37:44 -0700</date>
            <delta_ts>2012-04-10 14:03:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83524-20120410133743.patch</filename>
            <type>text/plain</type>
            <size>31958</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWMzZmU2ZWUzY2U3MGE0
MDVkNWYzYTAxMGE3ZTI5YWIyMDhjMDBmYi4uMjM0NGIwN2ExODY2N2E2MDk5NmU2YjFmYzUyNmIx
NzdhNjJkZTE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTA0LTEwICBDaHJp
cyBSb2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+CisKKyAgICAgICAgQXVkaW9QYXJhbSBtdXN0
IHN1cHBvcnQgY29ubmVjdGlvbnMgZnJvbSBhdWRpby1yYXRlIHNpZ25hbHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzNTI0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJbiB0aGUgV2ViIEF1
ZGlvIEFQSSwgaXQncyBwb3NzaWJsZSB0byBjb25uZWN0IG9uZSBBdWRpb05vZGUgdG8gYW5vdGhl
ciBBdWRpb05vZGUuCisgICAgICAgIFNpbWlsYXJ5IHdlIHNob3VsZCBhbGxvdyBhbiBBdWRpb05v
ZGUgdG8gY29ubmVjdCB0byBhbiBBdWRpb1BhcmFtLCB0aHVzIGNvbnRyb2xsaW5nCisgICAgICAg
IGEgcGFyYW1ldGVyIHdpdGggYW4gYXVkaW8tcmF0ZSBzaWduYWwuICBUaGlzIGlzIGltcG9ydGFu
dCBpbiBtYW55IGF1ZGlvIHByb2Nlc3NpbmcKKyAgICAgICAgYXBwbGljYXRpb25zLgorCisgICAg
ICAgIFRlc3Q6IHdlYmF1ZGlvL2F1ZGlvcGFyYW0tY29ubmVjdC1hdWRpb3JhdGVzaWduYWwuaHRt
bAorCisgICAgICAgIFNpbXBsZSBtZXRob2QgbmFtZSBjaGFuZ2Ugb2YgQXVkaW9QYXJhbTo6aGFz
VGltZWxpbmVWYWx1ZXMoKSB0byBBdWRpb1BhcmFtOjpoYXNTYW1wbGVBY2N1cmF0ZVZhbHVlcygp
LgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0dhaW5Ob2RlOjpwcm9jZXNzKToKKworICAgICAgICAqIE1vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6Y29u
bmVjdCk6IEFkZCBjb25uZWN0KCkgbWV0aG9kIGZyb20gQXVkaW9Ob2RlIC0+IEF1ZGlvUGFyYW0u
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6ZGlzY29u
bmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGU6OmZpbmlzaERlcmVmKToKKyAgICAg
ICAgVXNlIEF1ZGlvTm9kZU91dHB1dDo6ZGlzY29ubmVjdEFsbCgpIGluc3RlYWQgb2YgQXVkaW9O
b2RlT3V0cHV0OjpkaXNjb25uZWN0QWxsSW5wdXRzKCkuCisgICAgICAgICogTW9kdWxlcy93ZWJh
dWRpby9BdWRpb05vZGUuaDogQWRkIGNvbm5lY3QoKSBtZXRob2QgZnJvbSBBdWRpb05vZGUgLT4g
QXVkaW9QYXJhbS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQXVkaW9Ob2RlKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGw6IEFkZCBjb25uZWN0KCkgbWV0
aG9kIGZyb20gQXVkaW9Ob2RlIC0+IEF1ZGlvUGFyYW0uCisKKyAgICAgICAgSW1wbGVtZW50IHN1
cHBvcnQgZm9yIGFuIEF1ZGlvTm9kZU91dHB1dCB0byBmYW5vdXQgdG8gbXVsdGlwbGUgQXVkaW9Q
YXJhbXMuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlT3V0cHV0OjpBdWRpb05vZGVPdXRwdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlT3V0cHV0Ojp1cGRhdGVSZW5kZXJpbmdTdGF0ZSk6IFVw
ZGF0ZSByZW5kZXJpbmcgc3RhdGUgcmVsYXRlZCB0byBBdWRpb1BhcmFtcy4KKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvTm9kZU91dHB1dDo6cHVsbCk6IHB1bGwoKSBtdXN0IG5vdyB0YWtlIGludG8g
YWNjb3VudCBmYW5vdXQgdG8gQXVkaW9QYXJhbXMgZm9yIGluLXBsYWNlIHByb2Nlc3NpbmcuCisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGVPdXRwdXQ6OmZhbk91dENvdW50KToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlT3V0cHV0OjpwYXJhbUZhbk91
dENvdW50KTogTmV3IG1ldGhvZCBrZWVwaW5nIHRyYWNrIG9mIG51bWJlciBvZiBjb25uZWN0aW9u
cyB0byBBdWRpb1BhcmFtcy4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZU91dHB1dDo6cmVu
ZGVyaW5nUGFyYW1GYW5PdXRDb3VudCk6IE5ldyBtZXRob2Qga2VlcGluZyB0cmFjayBvZiBudW1i
ZXIgb2YgY29ubmVjdGlvbnMgdG8gQXVkaW9QYXJhbXMgZm9yIHJlbmRlcmluZy4KKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvTm9kZU91dHB1dDo6YWRkUGFyYW0pOiBBZGQgYSBjb25uZWN0aW9uIHRv
IGFuIEF1ZGlvUGFyYW0uCisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGVPdXRwdXQ6OnJlbW92
ZVBhcmFtKTogUmVtb3ZlIGEgY29ubmVjdGlvbiB0byBhbiBBdWRpb1BhcmFtLgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9Ob2RlT3V0cHV0OjpkaXNjb25uZWN0QWxsUGFyYW1zKTogUmVtb3ZlIGFs
bCBjb25uZWN0aW9ucyB0byBBdWRpb1BhcmFtcy4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9k
ZU91dHB1dDo6ZGlzY29ubmVjdEFsbCk6IE5ldyBtZXRob2QgdG8gZGlzY29ubmVjdCBhbGwgQXVk
aW9Ob2RlSW5wdXRzIGFuZCBBdWRpb1BhcmFtcy4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvTm9kZU91dHB1dC5oOgorICAgICAgICAoQXVkaW9Ob2RlT3V0cHV0KToKKworICAgICAg
ICBBbGxvdyBhbiBBdWRpb1BhcmFtIHRvIGFjY2VwdCBhIGNvbm5lY3Rpb24gZnJvbSBhbiBBdWRp
b05vZGVPdXRwdXQsIHRodXMgYmVpbmcgY29udHJvbGxlZAorICAgICAgICBieSBhbiBhdWRpby1y
YXRlIHNpZ25hbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbTo6Y2FsY3VsYXRlU2FtcGxlQWNjdXJhdGVWYWx1
ZXMpOiBDYWxjdWxhdGVzIHNhbXBsZS1hY2N1cmF0ZSB2YWx1ZXMgZnJvbSB0aW1lbGluZSBvciBh
biBBdWRpb05vZGUuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
UGFyYW06OmNhbGN1bGF0ZUF1ZGlvUmF0ZVNpZ25hbFZhbHVlcyk6IENhbGN1bGF0ZXMgc2FtcGxl
LWFjY3VyYXRlIHZhbHVlcyBmcm9tIGFuIEF1ZGlvTm9kZS4KKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvUGFyYW06OmNhbGN1bGF0ZVRpbWVsaW5lVmFsdWVzKTogQ2FsY3VsYXRlcyBzYW1wbGUtYWNj
dXJhdGUgdmFsdWVzIHNjaGVkdWxlZCBvbiB0aGUgdGltZWxpbmUuCisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1BhcmFtOjpjb25uZWN0KTogQ29ubmVjdCBmcm9tIGFuIEF1ZGlvTm9kZU91dHB1dCBm
b3IgY29udHJvbCBmcm9tIGFuIGF1ZGlvLXJhdGUgc2lnbmFsLgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9QYXJhbTo6ZGlzY29ubmVjdCk6IERpc2Nvbm5lY3QgZnJvbSBhbiBBdWRpb05vZGVPdXRw
dXQuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvUGFyYW06OkF1ZGlvUGFyYW0pOgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9QYXJhbTo6aGFzU2FtcGxlQWNjdXJhdGVWYWx1ZXMpOiBDaGFu
Z2UgbmFtZSBmcm9tIGhhc1RpbWVsaW5lVmFsdWVzKCkgYW5kIHJldHVybiB0cnVlCisgICAgICAg
IGVpdGhlciBpZiB3ZSBoYXZlIHRpbWVsaW5lIHZhbHVlcyBvciBpZiB3ZSd2ZSBiZWVuIGNvbm5l
Y3RlZCBmcm9tIGFuIEF1ZGlvTm9kZS4KKyAgICAgICAgKEF1ZGlvUGFyYW0pOgorCisgICAgICAg
IFNpbXBsZSBtZXRob2QgbmFtZSBjaGFuZ2Ugb2YgQXVkaW9QYXJhbTo6aGFzVGltZWxpbmVWYWx1
ZXMoKSB0byBBdWRpb1BhcmFtOjpoYXNTYW1wbGVBY2N1cmF0ZVZhbHVlcygpLgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPc2Np
bGxhdG9yOjpjYWxjdWxhdGVTYW1wbGVBY2N1cmF0ZVBoYXNlSW5jcmVtZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpPc2NpbGxhdG9yOjpwcm9jZXNzKToKKwogMjAxMi0wNC0xMCAgQWxlamFuZHJv
IEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBCdWlsZCBmaXgg
VGV4dHVyZU1hcHBlciBjb21waWxhdGlvbiBhbmQgc29sdmUgd2FybmluZy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9HYWluTm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvR2Fpbk5vZGUuY3BwCmluZGV4IDMwNzI2
YTk5ZjJkYmE0Y2E3MDc4MjM4ZTRkZTE1YzRkOGMxNWNkNmIuLjdjNjE0MzJlYjdhNWRhZDg0Mzg2
OTIyZDk1MmY4NDgxNjY0NTlkYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9HYWluTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0dhaW5Ob2RlLmNwcApAQCAtNjQsNyArNjQsNyBAQCB2b2lkIEF1ZGlvR2Fp
bk5vZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICBlbHNlIHsKICAgICAg
ICAgQXVkaW9CdXMqIGlucHV0QnVzID0gaW5wdXQoMCktPmJ1cygpOwogCi0gICAgICAgIGlmIChn
YWluKCktPmhhc1RpbWVsaW5lVmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKGdhaW4oKS0+aGFzU2Ft
cGxlQWNjdXJhdGVWYWx1ZXMoKSkgewogICAgICAgICAgICAgLy8gQXBwbHkgc2FtcGxlLWFjY3Vy
YXRlIGdhaW4gc2NhbGluZyBmb3IgcHJlY2lzZSBlbnZlbG9wZXMsIGdyYWluIHdpbmRvd3MsIGV0
Yy4KICAgICAgICAgICAgIEFTU0VSVChmcmFtZXNUb1Byb2Nlc3MgPD0gbV9zYW1wbGVBY2N1cmF0
ZUdhaW5WYWx1ZXMuc2l6ZSgpKTsKICAgICAgICAgICAgIGlmIChmcmFtZXNUb1Byb2Nlc3MgPD0g
bV9zYW1wbGVBY2N1cmF0ZUdhaW5WYWx1ZXMuc2l6ZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKaW5kZXggZGZhMmE2MDI0OTE2MzQ3ZjA2OWYy
MWY5MmEzNTkzMjIyOWRlMWY0OC4uOGFmOWZjNzM0NDEwOTM4ZjJkMzFjMTY4NTJkZTk5ZGM0ZmE0
NmYzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05v
ZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNw
cApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUg
IkF1ZGlvTm9kZUlucHV0LmgiCiAjaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCisjaW5jbHVk
ZSAiQXVkaW9QYXJhbS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlIDx3
dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC0xNDksNiArMTUw
LDMwIEBAIHZvaWQgQXVkaW9Ob2RlOjpjb25uZWN0KEF1ZGlvTm9kZSogZGVzdGluYXRpb24sIHVu
c2lnbmVkIG91dHB1dEluZGV4LCB1bnNpZ25lZCBpCiAgICAgY29udGV4dCgpLT5pbmNyZW1lbnRD
b25uZWN0aW9uQ291bnQoKTsKIH0KIAordm9pZCBBdWRpb05vZGU6OmNvbm5lY3QoQXVkaW9QYXJh
bSogcGFyYW0sIHVuc2lnbmVkIG91dHB1dEluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEF1ZGlvQ29udGV4dDo6QXV0b0xvY2tlciBs
b2NrZXIoY29udGV4dCgpKTsKKworICAgIGlmICghcGFyYW0pIHsKKyAgICAgICAgZWMgPSBTWU5U
QVhfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG91dHB1dEluZGV4ID49
IG51bWJlck9mT3V0cHV0cygpKSB7CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY29udGV4dCgpICE9IHBhcmFtLT5jb250ZXh0
KCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQgPSB0aGlzLT5vdXRwdXQob3V0cHV0SW5kZXgp
OworICAgIHBhcmFtLT5jb25uZWN0KG91dHB1dCk7Cit9CisKIHZvaWQgQXVkaW9Ob2RlOjpkaXNj
b25uZWN0KHVuc2lnbmVkIG91dHB1dEluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMTYxLDcgKzE4Niw3IEBAIHZvaWQgQXVkaW9Ob2Rl
OjpkaXNjb25uZWN0KHVuc2lnbmVkIG91dHB1dEluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKICAg
ICB9CiAKICAgICBBdWRpb05vZGVPdXRwdXQqIG91dHB1dCA9IHRoaXMtPm91dHB1dChvdXRwdXRJ
bmRleCk7Ci0gICAgb3V0cHV0LT5kaXNjb25uZWN0QWxsSW5wdXRzKCk7CisgICAgb3V0cHV0LT5k
aXNjb25uZWN0QWxsKCk7CiB9CiAKIHZvaWQgQXVkaW9Ob2RlOjpwcm9jZXNzSWZOZWNlc3Nhcnko
c2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKQEAgLTMzNyw3ICszNjIsNyBAQCB2b2lkIEF1ZGlvTm9k
ZTo6ZmluaXNoRGVyZWYoUmVmVHlwZSByZWZUeXBlKQogICAgICAgICAgICAgaWYgKCFtX2lzTWFy
a2VkRm9yRGVsZXRpb24pIHsKICAgICAgICAgICAgICAgICAvLyBBbGwgcmVmZXJlbmNlcyBhcmUg
Z29uZSAtIHdlIG5lZWQgdG8gZ28gYXdheS4KICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9vdXRwdXRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgICAgICBv
dXRwdXQoaSktPmRpc2Nvbm5lY3RBbGxJbnB1dHMoKTsgLy8gdGhpcyB3aWxsIGRlcmVmKCkgbm9k
ZXMgd2UncmUgY29ubmVjdGVkIHRvLi4uCisgICAgICAgICAgICAgICAgICAgIG91dHB1dChpKS0+
ZGlzY29ubmVjdEFsbCgpOyAvLyBUaGlzIHdpbGwgZGVyZWYoKSBub2RlcyB3ZSdyZSBjb25uZWN0
ZWQgdG8uCiAKICAgICAgICAgICAgICAgICAvLyBNYXJrIGZvciBkZWxldGlvbiBhdCBlbmQgb2Yg
ZWFjaCByZW5kZXIgcXVhbnR1bSBvciB3aGVuIGNvbnRleHQgc2h1dHMgZG93bi4KICAgICAgICAg
ICAgICAgICBjb250ZXh0KCktPm1hcmtGb3JEZWxldGlvbih0aGlzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCmluZGV4IDYzZGQzZDE1M2VkNzRhNGFlNDJk
NThkMjk1Y2U5ZDQ4ODk3OWYzYmYuLmMyNjE0Y2IzYjEyZDZkMTU1MGZkZjc0Zjg0ODhlNDFmNDVm
OWNkYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9O
b2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaApA
QCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdWRpb0NvbnRleHQ7
CiBjbGFzcyBBdWRpb05vZGVJbnB1dDsKIGNsYXNzIEF1ZGlvTm9kZU91dHB1dDsKK2NsYXNzIEF1
ZGlvUGFyYW07CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKQEAgLTExNiw2ICsxMTcs
NyBAQCBwdWJsaWM6CiAKICAgICAvLyBDYWxsZWQgZnJvbSBtYWluIHRocmVhZCBieSBjb3JyZXNw
b25kaW5nIEphdmFTY3JpcHQgbWV0aG9kcy4KICAgICB2b2lkIGNvbm5lY3QoQXVkaW9Ob2RlKiwg
dW5zaWduZWQgb3V0cHV0SW5kZXgsIHVuc2lnbmVkIGlucHV0SW5kZXgsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2b2lkIGNvbm5lY3QoQXVkaW9QYXJhbSosIHVuc2lnbmVkIG91dHB1dEluZGV4LCBF
eGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBkaXNjb25uZWN0KHVuc2lnbmVkIG91dHB1dEluZGV4
LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0dWFsIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25z
dCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Ob2RlLmlkbAppbmRleCBjZmFhNzNiMmM1ZmZiMGUzYmMwZTcxYmFmMTEwZDc3
M2MzZjFiZDc5Li4xM2JkYzc1NjJjNTg1Yjg0MTAwMjdkYjE1OGQ1MjIyZmRlMTQ1OWIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuaWRsCkBAIC0zMyw2
ICszMyw5IEBAIG1vZHVsZSBhdWRpbyB7CiAgICAgICAgIHZvaWQgY29ubmVjdChpbiBBdWRpb05v
ZGUgZGVzdGluYXRpb24sIGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIHVuc2lnbmVk
IGxvbmcgb3V0cHV0LCBpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1bnNpZ25lZCBs
b25nIGlucHV0KQogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKKyAgICAgICAg
dm9pZCBjb25uZWN0KGluIEF1ZGlvUGFyYW0gZGVzdGluYXRpb24sIGluIFtPcHRpb25hbD1EZWZh
dWx0SXNVbmRlZmluZWRdIHVuc2lnbmVkIGxvbmcgb3V0cHV0KQorICAgICAgICAgICAgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CisKICAgICAgICAgdm9pZCBkaXNjb25uZWN0KGluIFtPcHRpb25hbD1E
ZWZhdWx0SXNVbmRlZmluZWRdIHVuc2lnbmVkIGxvbmcgb3V0cHV0KQogICAgICAgICAgICAgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcAppbmRleCA3NzkyN2I5ODhlOTAzZDY5NDMw
ZjQ0YThjMWI2YTI2ZGExODMyYWVmLi45MTUyNDkyYmVlMzdiYzc3NDY0YTAzZmZjYWFjZTE5OTcy
YTVmY2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
Tm9kZU91dHB1dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b05vZGVPdXRwdXQuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXVkaW9CdXMuaCIK
ICNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKICNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgor
I2luY2x1ZGUgIkF1ZGlvUGFyYW0uaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQyLDYgKzQzLDcgQEAgQXVkaW9Ob2RlT3V0cHV0OjpBdWRp
b05vZGVPdXRwdXQoQXVkaW9Ob2RlKiBub2RlLCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzKQog
ICAgICwgbV9hY3R1YWxEZXN0aW5hdGlvbkJ1cygwKQogICAgICwgbV9pc0VuYWJsZWQodHJ1ZSkK
ICAgICAsIG1fcmVuZGVyaW5nRmFuT3V0Q291bnQoMCkKKyAgICAsIG1fcmVuZGVyaW5nUGFyYW1G
YW5PdXRDb3VudCgwKQogewogICAgIEFTU0VSVChudW1iZXJPZkNoYW5uZWxzIDw9IEF1ZGlvQ29u
dGV4dDo6bWF4TnVtYmVyT2ZDaGFubmVscygpKTsKIApAQCAtODAsNiArODIsNyBAQCB2b2lkIEF1
ZGlvTm9kZU91dHB1dDo6dXBkYXRlUmVuZGVyaW5nU3RhdGUoKQogewogICAgIHVwZGF0ZU51bWJl
ck9mQ2hhbm5lbHMoKTsKICAgICBtX3JlbmRlcmluZ0Zhbk91dENvdW50ID0gZmFuT3V0Q291bnQo
KTsKKyAgICBtX3JlbmRlcmluZ1BhcmFtRmFuT3V0Q291bnQgPSBwYXJhbUZhbk91dENvdW50KCk7
CiB9CiAKIHZvaWQgQXVkaW9Ob2RlT3V0cHV0Ojp1cGRhdGVOdW1iZXJPZkNoYW5uZWxzKCkKQEAg
LTExMCw3ICsxMTMsNyBAQCB2b2lkIEF1ZGlvTm9kZU91dHB1dDo6cHJvcGFnYXRlQ2hhbm5lbENv
dW50KCkKIEF1ZGlvQnVzKiBBdWRpb05vZGVPdXRwdXQ6OnB1bGwoQXVkaW9CdXMqIGluUGxhY2VC
dXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNB
dWRpb1RocmVhZCgpKTsKLSAgICBBU1NFUlQobV9yZW5kZXJpbmdGYW5PdXRDb3VudCA+IDApOwor
ICAgIEFTU0VSVChtX3JlbmRlcmluZ0Zhbk91dENvdW50ID4gMCB8fCBtX3JlbmRlcmluZ1BhcmFt
RmFuT3V0Q291bnQgPiAwKTsKICAgICAKICAgICAvLyBDYXVzZXMgb3VyIEF1ZGlvTm9kZSB0byBw
cm9jZXNzIGlmIGl0IGhhc24ndCBhbHJlYWR5IGZvciB0aGlzIHJlbmRlciBxdWFudHVtLgogICAg
IC8vIFdlIHRyeSB0byBkbyBpbi1wbGFjZSBwcm9jZXNzaW5nICh1c2luZyBpblBsYWNlQnVzKSBp
ZiBhdCBhbGwgcG9zc2libGUsCkBAIC0xMTgsNyArMTIxLDcgQEAgQXVkaW9CdXMqIEF1ZGlvTm9k
ZU91dHB1dDo6cHVsbChBdWRpb0J1cyogaW5QbGFjZUJ1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2Vz
cykKICAgICAvLyBJbiB0aGlzIGNhc2UgcHVsbCgpIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBw
ZXIgcmVuZGVyaW5nIHF1YW50dW0sIGFuZCB0aGUgcHJvY2Vzc0lmTmVjZXNzYXJ5KCkgY2FsbCBi
ZWxvdyB3aWxsCiAgICAgLy8gY2F1c2Ugb3VyIG5vZGUgdG8gcHJvY2VzcygpIG9ubHkgdGhlIGZp
cnN0IHRpbWUsIGNhY2hpbmcgdGhlIG91dHB1dCBpbiBtX2ludGVybmFsT3V0cHV0QnVzIGZvciBz
dWJzZXF1ZW50IGNhbGxzLiAgICAKICAgICAKLSAgICBib29sIGlzSW5QbGFjZSA9IGluUGxhY2VC
dXMgJiYgaW5QbGFjZUJ1cy0+bnVtYmVyT2ZDaGFubmVscygpID09IG51bWJlck9mQ2hhbm5lbHMo
KSAmJiBtX3JlbmRlcmluZ0Zhbk91dENvdW50ID09IDE7CisgICAgYm9vbCBpc0luUGxhY2UgPSBp
blBsYWNlQnVzICYmIGluUGxhY2VCdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSBudW1iZXJPZkNo
YW5uZWxzKCkgJiYgKG1fcmVuZGVyaW5nRmFuT3V0Q291bnQgKyBtX3JlbmRlcmluZ1BhcmFtRmFu
T3V0Q291bnQpID09IDE7CiAKICAgICAvLyBTZXR1cCB0aGUgYWN0dWFsIGRlc3RpbmF0aW9uIGJ1
cyBmb3IgcHJvY2Vzc2luZyB3aGVuIG91ciBub2RlJ3MgcHJvY2VzcygpIG1ldGhvZCBnZXRzIGNh
bGxlZCBpbiBwcm9jZXNzSWZOZWNlc3NhcnkoKSBiZWxvdy4KICAgICBtX2FjdHVhbERlc3RpbmF0
aW9uQnVzID0gaXNJblBsYWNlID8gaW5QbGFjZUJ1cyA6IG1faW50ZXJuYWxCdXMuZ2V0KCk7CkBA
IC0xMzQsMTUgKzEzNywyNiBAQCBBdWRpb0J1cyogQXVkaW9Ob2RlT3V0cHV0OjpidXMoKSBjb25z
dAogICAgIHJldHVybiBtX2FjdHVhbERlc3RpbmF0aW9uQnVzOwogfQogCit1bnNpZ25lZCBBdWRp
b05vZGVPdXRwdXQ6OmZhbk91dENvdW50KCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dy
YXBoT3duZXIoKSk7CisgICAgcmV0dXJuIG1faW5wdXRzLnNpemUoKTsKK30KKwordW5zaWduZWQg
QXVkaW9Ob2RlT3V0cHV0OjpwYXJhbUZhbk91dENvdW50KCkKK3sKKyAgICBBU1NFUlQoY29udGV4
dCgpLT5pc0dyYXBoT3duZXIoKSk7CisgICAgcmV0dXJuIG1fcGFyYW1zLnNpemUoKTsKK30KKwog
dW5zaWduZWQgQXVkaW9Ob2RlT3V0cHV0OjpyZW5kZXJpbmdGYW5PdXRDb3VudCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1fcmVuZGVyaW5nRmFuT3V0Q291bnQ7CiB9CiAKLXVuc2lnbmVkIEF1ZGlv
Tm9kZU91dHB1dDo6ZmFuT3V0Q291bnQoKQordW5zaWduZWQgQXVkaW9Ob2RlT3V0cHV0OjpyZW5k
ZXJpbmdQYXJhbUZhbk91dENvdW50KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoY29udGV4dCgpLT5p
c0dyYXBoT3duZXIoKSk7Ci0gICAgcmV0dXJuIG1faW5wdXRzLnNpemUoKTsKKyAgICByZXR1cm4g
bV9yZW5kZXJpbmdQYXJhbUZhbk91dENvdW50OwogfQogCiB2b2lkIEF1ZGlvTm9kZU91dHB1dDo6
YWRkSW5wdXQoQXVkaW9Ob2RlSW5wdXQqIGlucHV0KQpAQCAtMTc4LDYgKzE5Miw0NiBAQCB2b2lk
IEF1ZGlvTm9kZU91dHB1dDo6ZGlzY29ubmVjdEFsbElucHV0cygpCiAgICAgfQogfQogCit2b2lk
IEF1ZGlvTm9kZU91dHB1dDo6YWRkUGFyYW0oQXVkaW9QYXJhbSogcGFyYW0pCit7CisgICAgQVNT
RVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOworCisgICAgQVNTRVJUKHBhcmFtKTsKKyAg
ICBpZiAoIXBhcmFtKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhcmFtcy5hZGQocGFyYW0p
OworfQorCit2b2lkIEF1ZGlvTm9kZU91dHB1dDo6cmVtb3ZlUGFyYW0oQXVkaW9QYXJhbSogcGFy
YW0pCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOworCisgICAgQVNT
RVJUKHBhcmFtKTsKKyAgICBpZiAoIXBhcmFtKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Bh
cmFtcy5yZW1vdmUocGFyYW0pOworfQorCit2b2lkIEF1ZGlvTm9kZU91dHB1dDo6ZGlzY29ubmVj
dEFsbFBhcmFtcygpCit7CisgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOwor
CisgICAgZm9yIChQYXJhbXNJdGVyYXRvciBpID0gbV9wYXJhbXMuYmVnaW4oKTsgaSAhPSBtX3Bh
cmFtcy5lbmQoKTsgKytpKSB7CisgICAgICAgIEF1ZGlvUGFyYW0qIHBhcmFtID0gKmk7CisgICAg
ICAgIHBhcmFtLT5kaXNjb25uZWN0KHRoaXMpOworICAgIH0KKworICAgIG1fcGFyYW1zLmNsZWFy
KCk7Cit9CisKK3ZvaWQgQXVkaW9Ob2RlT3V0cHV0OjpkaXNjb25uZWN0QWxsKCkKK3sKKyAgICBk
aXNjb25uZWN0QWxsSW5wdXRzKCk7CisgICAgZGlzY29ubmVjdEFsbFBhcmFtcygpOworfQorCiB2
b2lkIEF1ZGlvTm9kZU91dHB1dDo6ZGlzYWJsZSgpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQoKS0+
aXNHcmFwaE93bmVyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb05vZGVPdXRwdXQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Ob2RlT3V0cHV0LmgKaW5kZXggNzIxNjRjNzQ5YTk1YmE5ZTViZDViMzRiN2U5MDcxMjQx
NzJlZTU4OC4uODJiZjI5ZjVhNDc1NDhmNDQxMTRjMDA3NzVjMzBkZjllMmEzMjczOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5oCkBA
IC01NywxNyArNTcsMTYgQEAgcHVibGljOgogICAgIC8vIENhbGxlZCBmcm9tIGNvbnRleHQncyBh
dWRpbyB0aHJlYWQuCiAgICAgQXVkaW9CdXMqIGJ1cygpIGNvbnN0OwogCi0gICAgLy8gZmFuT3V0
Q291bnQoKSBpcyB0aGUgbnVtYmVyIG9mIEF1ZGlvTm9kZUlucHV0cyB0aGF0IHdlJ3JlIGNvbm5l
Y3RlZCB0by4KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIGluIGF1
ZGlvIHRocmVhZCByZW5kZXJpbmcgY29kZSwgaW5zdGVhZCByZW5kZXJpbmdGYW5PdXRDb3VudCgp
IHNob3VsZCBiZSB1c2VkLgotICAgIC8vIEl0IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNvbnRl
eHQncyBncmFwaCBsb2NrLgotICAgIHVuc2lnbmVkIGZhbk91dENvdW50KCk7Ci0KICAgICAvLyBy
ZW5kZXJpbmdGYW5PdXRDb3VudCgpIGlzIHRoZSBudW1iZXIgb2YgQXVkaW9Ob2RlSW5wdXRzIHRo
YXQgd2UncmUgY29ubmVjdGVkIHRvIGR1cmluZyByZW5kZXJpbmcuCiAgICAgLy8gVW5saWtlIGZh
bk91dENvdW50KCkgaXQgd2lsbCBub3QgY2hhbmdlIGR1cmluZyB0aGUgY291cnNlIG9mIGEgcmVu
ZGVyIHF1YW50dW0uCiAgICAgdW5zaWduZWQgcmVuZGVyaW5nRmFuT3V0Q291bnQoKSBjb25zdDsK
IAotICAgIC8vIEl0IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGNvbnRleHQncyBncmFwaCBsb2Nr
LgotICAgIHZvaWQgZGlzY29ubmVjdEFsbElucHV0cygpOworICAgIC8vIHJlbmRlcmluZ1BhcmFt
RmFuT3V0Q291bnQoKSBpcyB0aGUgbnVtYmVyIG9mIEF1ZGlvUGFyYW1zIHRoYXQgd2UncmUgY29u
bmVjdGVkIHRvIGR1cmluZyByZW5kZXJpbmcuCisgICAgLy8gVW5saWtlIHBhcmFtRmFuT3V0Q291
bnQoKSBpdCB3aWxsIG5vdCBjaGFuZ2UgZHVyaW5nIHRoZSBjb3Vyc2Ugb2YgYSByZW5kZXIgcXVh
bnR1bS4KKyAgICB1bnNpZ25lZCByZW5kZXJpbmdQYXJhbUZhbk91dENvdW50KCkgY29uc3Q7CisK
KyAgICAvLyBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KKyAg
ICB2b2lkIGRpc2Nvbm5lY3RBbGwoKTsKIAogICAgIHZvaWQgc2V0TnVtYmVyT2ZDaGFubmVscyh1
bnNpZ25lZCk7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0IHsgcmV0dXJu
IG1fbnVtYmVyT2ZDaGFubmVsczsgfQpAQCAtODcsMTEgKzg2LDI4IEBAIHByaXZhdGU6CiAgICAg
QXVkaW9Ob2RlKiBtX25vZGU7CiAKICAgICBmcmllbmQgY2xhc3MgQXVkaW9Ob2RlSW5wdXQ7Cisg
ICAgZnJpZW5kIGNsYXNzIEF1ZGlvUGFyYW07CiAgICAgCiAgICAgLy8gVGhlc2UgYXJlIGNhbGxl
ZCBmcm9tIEF1ZGlvTm9kZUlucHV0LgogICAgIC8vIFRoZXkgbXVzdCBiZSBjYWxsZWQgd2l0aCB0
aGUgY29udGV4dCdzIGdyYXBoIGxvY2suCiAgICAgdm9pZCBhZGRJbnB1dChBdWRpb05vZGVJbnB1
dCopOwogICAgIHZvaWQgcmVtb3ZlSW5wdXQoQXVkaW9Ob2RlSW5wdXQqKTsKKyAgICB2b2lkIGFk
ZFBhcmFtKEF1ZGlvUGFyYW0qKTsKKyAgICB2b2lkIHJlbW92ZVBhcmFtKEF1ZGlvUGFyYW0qKTsK
KworICAgIC8vIGZhbk91dENvdW50KCkgaXMgdGhlIG51bWJlciBvZiBBdWRpb05vZGVJbnB1dHMg
dGhhdCB3ZSdyZSBjb25uZWN0ZWQgdG8uCisgICAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBi
ZSBjYWxsZWQgaW4gYXVkaW8gdGhyZWFkIHJlbmRlcmluZyBjb2RlLCBpbnN0ZWFkIHJlbmRlcmlu
Z0Zhbk91dENvdW50KCkgc2hvdWxkIGJlIHVzZWQuCisgICAgLy8gSXQgbXVzdCBiZSBjYWxsZWQg
d2l0aCB0aGUgY29udGV4dCdzIGdyYXBoIGxvY2suCisgICAgdW5zaWduZWQgZmFuT3V0Q291bnQo
KTsKKworICAgIC8vIFNpbWlsYXIgdG8gZmFuT3V0Q291bnQoKSwgcGFyYW1GYW5PdXRDb3VudCgp
IGlzIHRoZSBudW1iZXIgb2YgQXVkaW9QYXJhbXMgdGhhdCB3ZSdyZSBjb25uZWN0ZWQgdG8uCisg
ICAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gYXVkaW8gdGhyZWFkIHJl
bmRlcmluZyBjb2RlLCBpbnN0ZWFkIHJlbmRlcmluZ1BhcmFtRmFuT3V0Q291bnQoKSBzaG91bGQg
YmUgdXNlZC4KKyAgICAvLyBJdCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3Jh
cGggbG9jay4KKyAgICB1bnNpZ25lZCBwYXJhbUZhbk91dENvdW50KCk7CisKKyAgICAvLyBNdXN0
IGJlIGNhbGxlZCB3aXRoIHRoZSBjb250ZXh0J3MgZ3JhcGggbG9jay4KKyAgICB2b2lkIGRpc2Nv
bm5lY3RBbGxJbnB1dHMoKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RBbGxQYXJhbXMoKTsKIAogICAg
IC8vIHVwZGF0ZUludGVybmFsQnVzKCkgdXBkYXRlcyBtX2ludGVybmFsQnVzIGFwcHJvcHJpYXRl
bHkgZm9yIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMuCiAgICAgLy8gSXQgaXMgY2FsbGVkIGluIHRo
ZSBjb25zdHJ1Y3RvciBvciBpbiB0aGUgYXVkaW8gdGhyZWFkIHdpdGggdGhlIGNvbnRleHQncyBn
cmFwaCBsb2NrLgpAQCAtMTIwLDEwICsxMzYsMTQgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PEF1
ZGlvTm9kZUlucHV0Kj4gbV9pbnB1dHM7CiAgICAgdHlwZWRlZiBIYXNoU2V0PEF1ZGlvTm9kZUlu
cHV0Kj46Oml0ZXJhdG9yIElucHV0c0l0ZXJhdG9yOwogICAgIGJvb2wgbV9pc0VuYWJsZWQ7Ci0g
ICAgCi0gICAgLy8gRm9yIHRoZSBwdXJwb3NlcyBvZiByZW5kZXJpbmcsIGtlZXBzIHRyYWNrIG9m
IHRoZSBudW1iZXIgb2YgaW5wdXRzIHdlJ3JlIGNvbm5lY3RlZCB0by4KLSAgICAvLyBUaGlzIHZh
bHVlIHNob3VsZCBvbmx5IGJlIGNoYW5nZWQgYXQgdGhlIHZlcnkgc3RhcnQgb3IgZW5kIG9mIHRo
ZSByZW5kZXJpbmcgcXVhbnR1bS4KKworICAgIC8vIEZvciB0aGUgcHVycG9zZXMgb2YgcmVuZGVy
aW5nLCBrZWVwcyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGlucHV0cyBhbmQgQXVkaW9QYXJhbXMg
d2UncmUgY29ubmVjdGVkIHRvLgorICAgIC8vIFRoZXNlIHZhbHVlIHNob3VsZCBvbmx5IGJlIGNo
YW5nZWQgYXQgdGhlIHZlcnkgc3RhcnQgb3IgZW5kIG9mIHRoZSByZW5kZXJpbmcgcXVhbnR1bS4K
ICAgICB1bnNpZ25lZCBtX3JlbmRlcmluZ0Zhbk91dENvdW50OworICAgIHVuc2lnbmVkIG1fcmVu
ZGVyaW5nUGFyYW1GYW5PdXRDb3VudDsKKworICAgIEhhc2hTZXQ8QXVkaW9QYXJhbSo+IG1fcGFy
YW1zOworICAgIHR5cGVkZWYgSGFzaFNldDxBdWRpb1BhcmFtKj46Oml0ZXJhdG9yIFBhcmFtc0l0
ZXJhdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAKaW5kZXggYmU5Mjc5ZmRmMTgwYWQwNGE2
MjRiZDI1MDE0OTllNTIzNzQ4OTNmOC4uZGVjNzA4NzgyNWUxYThhZTQ5YTdiZTE5MTdkNDZhMzVi
ZjNlZjA1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b1BhcmFtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFy
YW0uY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQXVkaW9QYXJhbS5oIgogCiAjaW5j
bHVkZSAiQXVkaW9Ob2RlLmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCiAjaW5jbHVk
ZSAiQXVkaW9VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtOTUsMTEgKzk2LDQzIEBAIGJvb2wgQXVkaW9QYXJh
bTo6c21vb3RoKCkKIAogdm9pZCBBdWRpb1BhcmFtOjpjYWxjdWxhdGVTYW1wbGVBY2N1cmF0ZVZh
bHVlcyhmbG9hdCogdmFsdWVzLCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcykKIHsKLSAgICBib29s
IGlzU2FmZSA9IGNvbnRleHQoKSAmJiBjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSAmJiB2YWx1
ZXM7CisgICAgYm9vbCBpc1NhZmUgPSBjb250ZXh0KCkgJiYgY29udGV4dCgpLT5pc0F1ZGlvVGhy
ZWFkKCkgJiYgdmFsdWVzICYmIG51bWJlck9mVmFsdWVzOwogICAgIEFTU0VSVChpc1NhZmUpOwog
ICAgIGlmICghaXNTYWZlKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAobV9hdWRpb1JhdGVT
aWduYWwpCisgICAgICAgIGNhbGN1bGF0ZUF1ZGlvUmF0ZVNpZ25hbFZhbHVlcyh2YWx1ZXMsIG51
bWJlck9mVmFsdWVzKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGN1bGF0ZVRpbWVsaW5lVmFsdWVz
KHZhbHVlcywgbnVtYmVyT2ZWYWx1ZXMpOworfQorCit2b2lkIEF1ZGlvUGFyYW06OmNhbGN1bGF0
ZUF1ZGlvUmF0ZVNpZ25hbFZhbHVlcyhmbG9hdCogdmFsdWVzLCB1bnNpZ25lZCBudW1iZXJPZlZh
bHVlcykKK3sKKyAgICAvLyBGSVhNRTogc3VwcG9ydCBmYW4taW4gKG11bHRpcGxlIGF1ZGlvIGNv
bm5lY3Rpb25zIHRvIHRoaXMgcGFyYW1ldGVyIHdpdGggdW5pdHktZ2FpbiBzdW1taW5nKS4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM2MTAKKyAgICBB
U1NFUlQobV9hdWRpb1JhdGVTaWduYWwpOworCisgICAgQXVkaW9CdXMqIGJ1cyA9IG1fYXVkaW9S
YXRlU2lnbmFsLT5wdWxsKDAsIG51bWJlck9mVmFsdWVzKTsKKyAgICBib29sIGlzQnVzR29vZCA9
IGJ1cyAmJiBidXMtPm51bWJlck9mQ2hhbm5lbHMoKSAmJiBidXMtPmxlbmd0aCgpID49IG51bWJl
ck9mVmFsdWVzOworICAgIEFTU0VSVChpc0J1c0dvb2QpOworICAgIGlmICghaXNCdXNHb29kKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYnVzLT5udW1iZXJPZkNoYW5uZWxzKCkgPT0gMSkg
eworICAgICAgICAvLyBUaGUgbm9ybWFsIGNhc2UgaXMgdG8gZGVhbCB3aXRoIGEgbW9ubyBhdWRp
by1yYXRlIHNpZ25hbC4KKyAgICAgICAgbWVtY3B5KHZhbHVlcywgYnVzLT5jaGFubmVsKDApLT5k
YXRhKCksIHNpemVvZihmbG9hdCkgKiBudW1iZXJPZlZhbHVlcyk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gRG8gYSBzdGFuZGFyZCBtaXhkb3duIHRvIG9uZSBjaGFubmVsIGlmIG5lY2Vzc2Fy
eS4KKyAgICAgICAgQXVkaW9CdXMgd3JhcHBlckJ1cygxLCBudW1iZXJPZlZhbHVlcywgZmFsc2Up
OworICAgICAgICB3cmFwcGVyQnVzLnNldENoYW5uZWxNZW1vcnkoMCwgdmFsdWVzLCBudW1iZXJP
ZlZhbHVlcyk7CisgICAgICAgIHdyYXBwZXJCdXMuY29weUZyb20oKmJ1cyk7IC8vIE1peGRvd24u
CisgICAgfQorICAgIG1fdmFsdWUgPSB2YWx1ZXNbMF07IC8vIFVwZGF0ZSB0byBmaXJzdCB2YWx1
ZS4KK30KKwordm9pZCBBdWRpb1BhcmFtOjpjYWxjdWxhdGVUaW1lbGluZVZhbHVlcyhmbG9hdCog
dmFsdWVzLCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcykKK3sKICAgICAvLyBDYWxjdWxhdGUgdmFs
dWVzIGZvciB0aGlzIHJlbmRlciBxdWFudHVtLgogICAgIC8vIE5vcm1hbGx5IG51bWJlck9mVmFs
dWVzIHdpbGwgZXF1YWwgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzICh0aGUgcmVu
ZGVyIHF1YW50dW0gc2l6ZSkuCiAgICAgZmxvYXQgc2FtcGxlUmF0ZSA9IGNvbnRleHQoKS0+c2Ft
cGxlUmF0ZSgpOwpAQCAtMTExLDYgKzE0NCwzNSBAQCB2b2lkIEF1ZGlvUGFyYW06OmNhbGN1bGF0
ZVNhbXBsZUFjY3VyYXRlVmFsdWVzKGZsb2F0KiB2YWx1ZXMsIHVuc2lnbmVkIG51bWJlck9mVgog
ICAgIG1fdmFsdWUgPSBtX3RpbWVsaW5lLnZhbHVlc0ZvclRpbWVSYW5nZShzdGFydFRpbWUsIGVu
ZFRpbWUsIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV92YWx1ZSksIHZhbHVlcywgbnVtYmVyT2ZW
YWx1ZXMsIHNhbXBsZVJhdGUsIHNhbXBsZVJhdGUpOwogfQogCit2b2lkIEF1ZGlvUGFyYW06OmNv
bm5lY3QoQXVkaW9Ob2RlT3V0cHV0KiBhdWRpb1JhdGVTaWduYWwpCit7CisgICAgQVNTRVJUKGNv
bnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOworICAgIEFTU0VSVChhdWRpb1JhdGVTaWduYWwpOwor
ICAgIGlmICghYXVkaW9SYXRlU2lnbmFsKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9h
dWRpb1JhdGVTaWduYWwgJiYgbV9hdWRpb1JhdGVTaWduYWwgIT0gYXVkaW9SYXRlU2lnbmFsKSB7
CisgICAgICAgIC8vIEJlY2F1c2Ugd2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgZmFuLWluIHdl
IG11c3QgZXhwbGljaXRseSBkaXNjb25uZWN0IGZyb20gYW4gb2xkIG91dHB1dC4KKyAgICAgICAg
bV9hdWRpb1JhdGVTaWduYWwtPnJlbW92ZVBhcmFtKHRoaXMpOworICAgIH0KKworICAgIGF1ZGlv
UmF0ZVNpZ25hbC0+YWRkUGFyYW0odGhpcyk7CisgICAgbV9hdWRpb1JhdGVTaWduYWwgPSBhdWRp
b1JhdGVTaWduYWw7Cit9CisKK3ZvaWQgQXVkaW9QYXJhbTo6ZGlzY29ubmVjdChBdWRpb05vZGVP
dXRwdXQqIGF1ZGlvUmF0ZVNpZ25hbCkKK3sKKyAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBo
T3duZXIoKSk7CisgICAgQVNTRVJUKGF1ZGlvUmF0ZVNpZ25hbCk7CisgICAgaWYgKCFhdWRpb1Jh
dGVTaWduYWwpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBzdXBwb3J0IGZhbi1p
biAobXVsdGlwbGUgYXVkaW8gY29ubmVjdGlvbnMgdG8gdGhpcyBwYXJhbWV0ZXIgd2l0aCB1bml0
eS1nYWluIHN1bW1pbmcpLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04MzYxMAorICAgIGlmIChtX2F1ZGlvUmF0ZVNpZ25hbCA9PSBhdWRpb1JhdGVTaWdu
YWwpCisgICAgICAgIG1fYXVkaW9SYXRlU2lnbmFsID0gMDsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmgKaW5kZXggMjc1ODQ4N2RhYTExN2E3YzQ5NTMz
ZTRlNjFkZWZkN2ExZjdiYWYxMi4uYzM4NzUzYzQ3MTU1NDUwYWQ5NzM4NjYwYzFhMTE4NjYxZTcw
NzRhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1Bh
cmFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmgK
QEAgLTM5LDYgKzM5LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBdWRpb05v
ZGVPdXRwdXQ7CisKIGNsYXNzIEF1ZGlvUGFyYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxBdWRpb1Bh
cmFtPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBEZWZhdWx0U21vb3RoaW5n
Q29uc3RhbnQ7CkBAIC01OCw2ICs2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3VuaXRzKHVu
aXRzKQogICAgICAgICAsIG1fc21vb3RoZWRWYWx1ZShkZWZhdWx0VmFsdWUpCiAgICAgICAgICwg
bV9zbW9vdGhpbmdDb25zdGFudChEZWZhdWx0U21vb3RoaW5nQ29uc3RhbnQpCisgICAgICAgICwg
bV9hdWRpb1JhdGVTaWduYWwoMCkKICAgICB7CiAgICAgfQogICAgIApAQCAtOTYsMTMgKzk5LDIw
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZhbHVlQ3VydmVBdFRpbWUoRmxvYXQzMkFycmF5KiBj
dXJ2ZSwgZmxvYXQgdGltZSwgZmxvYXQgZHVyYXRpb24pIHsgbV90aW1lbGluZS5zZXRWYWx1ZUN1
cnZlQXRUaW1lKGN1cnZlLCB0aW1lLCBkdXJhdGlvbik7IH0KICAgICB2b2lkIGNhbmNlbFNjaGVk
dWxlZFZhbHVlcyhmbG9hdCBzdGFydFRpbWUpIHsgbV90aW1lbGluZS5jYW5jZWxTY2hlZHVsZWRW
YWx1ZXMoc3RhcnRUaW1lKTsgfQogCi0gICAgYm9vbCBoYXNUaW1lbGluZVZhbHVlcygpIHsgcmV0
dXJuIG1fdGltZWxpbmUuaGFzVmFsdWVzKCk7IH0KKyAgICBib29sIGhhc1NhbXBsZUFjY3VyYXRl
VmFsdWVzKCkgeyByZXR1cm4gbV90aW1lbGluZS5oYXNWYWx1ZXMoKSB8fCBtX2F1ZGlvUmF0ZVNp
Z25hbDsgfQogICAgIAogICAgIC8vIENhbGN1bGF0ZXMgbnVtYmVyT2ZWYWx1ZXMgcGFyYW1ldGVy
IHZhbHVlcyBzdGFydGluZyBhdCB0aGUgY29udGV4dCdzIGN1cnJlbnQgdGltZS4KICAgICAvLyBN
dXN0IGJlIGNhbGxlZCBpbiB0aGUgY29udGV4dCdzIHJlbmRlciB0aHJlYWQuCiAgICAgdm9pZCBj
YWxjdWxhdGVTYW1wbGVBY2N1cmF0ZVZhbHVlcyhmbG9hdCogdmFsdWVzLCB1bnNpZ25lZCBudW1i
ZXJPZlZhbHVlcyk7CiAKKyAgICAvLyBDb25uZWN0IGFuIGF1ZGlvLXJhdGUgc2lnbmFsIHRvIGNv
bnRyb2wgdGhpcyBwYXJhbWV0ZXIuCisgICAgdm9pZCBjb25uZWN0KEF1ZGlvTm9kZU91dHB1dCop
OworICAgIHZvaWQgZGlzY29ubmVjdChBdWRpb05vZGVPdXRwdXQqKTsKKwogcHJpdmF0ZToKKyAg
ICB2b2lkIGNhbGN1bGF0ZUF1ZGlvUmF0ZVNpZ25hbFZhbHVlcyhmbG9hdCogdmFsdWVzLCB1bnNp
Z25lZCBudW1iZXJPZlZhbHVlcyk7CisgICAgdm9pZCBjYWxjdWxhdGVUaW1lbGluZVZhbHVlcyhm
bG9hdCogdmFsdWVzLCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyk7CisKICAgICBSZWZQdHI8QXVk
aW9Db250ZXh0PiBtX2NvbnRleHQ7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBkb3VibGUgbV92
YWx1ZTsKQEAgLTExNiw2ICsxMjYsMTEgQEAgcHJpdmF0ZToKICAgICBkb3VibGUgbV9zbW9vdGhp
bmdDb25zdGFudDsKICAgICAKICAgICBBdWRpb1BhcmFtVGltZWxpbmUgbV90aW1lbGluZTsKKwor
ICAgIC8vIEFuIGF1ZGlvLXJhdGUgc2lnbmFsIGRpcmVjdGx5IHByb3ZpZGluZyBwYXJhbWV0ZXIg
dmFsdWVzLgorICAgIC8vIEZJWE1FOiBzdXBwb3J0IGZhbi1pbiAobXVsdGlwbGUgYXVkaW8gY29u
bmVjdGlvbnMgdG8gdGhpcyBwYXJhbWV0ZXIgd2l0aCB1bml0eS1nYWluIHN1bW1pbmcpLgorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzYxMAorICAgIEF1
ZGlvTm9kZU91dHB1dCogbV9hdWRpb1JhdGVTaWduYWw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2ls
bGF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9Pc2NpbGxhdG9yLmNw
cAppbmRleCAxZmFiNGQ4MTY5MTQyN2JmZjIwZWYzYTc1YTQwMGY1NTNjMTAyOTY5Li4zOThkMzU5
M2Q2YmFmZTYyNmIwZmMyZTJmMTI3MmNjZDgxNjU0ZGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09zY2lsbGF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vT3NjaWxsYXRvci5jcHAKQEAgLTExMiwxNCArMTEyLDE0IEBAIGJv
b2wgT3NjaWxsYXRvcjo6Y2FsY3VsYXRlU2FtcGxlQWNjdXJhdGVQaGFzZUluY3JlbWVudHMoc2l6
ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICBpZiAoIWlzR29vZCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgYm9vbCBoYXNUaW1lbGluZVZhbHVlcyA9IGZhbHNlOworICAgIGJvb2wgaGFz
U2FtcGxlQWNjdXJhdGVWYWx1ZXMgPSBmYWxzZTsKICAgICBib29sIGhhc0ZyZXF1ZW5jeUNoYW5n
ZXMgPSBmYWxzZTsKICAgICBmbG9hdCogcGhhc2VJbmNyZW1lbnRzID0gbV9waGFzZUluY3JlbWVu
dHMuZGF0YSgpOwogCiAgICAgZmxvYXQgZmluYWxTY2FsZSA9IG1fd2F2ZVRhYmxlLT5yYXRlU2Nh
bGUoKTsKIAotICAgIGlmIChtX2ZyZXF1ZW5jeS0+aGFzVGltZWxpbmVWYWx1ZXMoKSkgewotICAg
ICAgICBoYXNUaW1lbGluZVZhbHVlcyA9IHRydWU7CisgICAgaWYgKG1fZnJlcXVlbmN5LT5oYXNT
YW1wbGVBY2N1cmF0ZVZhbHVlcygpKSB7CisgICAgICAgIGhhc1NhbXBsZUFjY3VyYXRlVmFsdWVz
ID0gdHJ1ZTsKICAgICAgICAgaGFzRnJlcXVlbmN5Q2hhbmdlcyA9IHRydWU7CiAKICAgICAgICAg
Ly8gR2V0IHRoZSBzYW1wbGUtYWNjdXJhdGUgZnJlcXVlbmN5IHZhbHVlcyBhbmQgY29udmVydCB0
byBwaGFzZSBpbmNyZW1lbnRzLgpAQCAtMTMyLDggKzEzMiw4IEBAIGJvb2wgT3NjaWxsYXRvcjo6
Y2FsY3VsYXRlU2FtcGxlQWNjdXJhdGVQaGFzZUluY3JlbWVudHMoc2l6ZV90IGZyYW1lc1RvUHJv
Y2VzcykKICAgICAgICAgZmluYWxTY2FsZSAqPSBmcmVxdWVuY3k7CiAgICAgfQogCi0gICAgaWYg
KG1fZGV0dW5lLT5oYXNUaW1lbGluZVZhbHVlcygpKSB7Ci0gICAgICAgIGhhc1RpbWVsaW5lVmFs
dWVzID0gdHJ1ZTsKKyAgICBpZiAobV9kZXR1bmUtPmhhc1NhbXBsZUFjY3VyYXRlVmFsdWVzKCkp
IHsKKyAgICAgICAgaGFzU2FtcGxlQWNjdXJhdGVWYWx1ZXMgPSB0cnVlOwogCiAgICAgICAgIC8v
IEdldCB0aGUgc2FtcGxlLWFjY3VyYXRlIGRldHVuZSB2YWx1ZXMuCiAgICAgICAgIGZsb2F0KiBk
ZXR1bmVWYWx1ZXMgPSBoYXNGcmVxdWVuY3lDaGFuZ2VzID8gbV9kZXR1bmVWYWx1ZXMuZGF0YSgp
IDogcGhhc2VJbmNyZW1lbnRzOwpAQCAtMTU3LDIwICsxNTcsMTggQEAgYm9vbCBPc2NpbGxhdG9y
OjpjYWxjdWxhdGVTYW1wbGVBY2N1cmF0ZVBoYXNlSW5jcmVtZW50cyhzaXplX3QgZnJhbWVzVG9Q
cm9jZXNzKQogICAgICAgICBmaW5hbFNjYWxlICo9IGRldHVuZVNjYWxlOwogICAgIH0KIAotICAg
IGlmIChoYXNUaW1lbGluZVZhbHVlcykgeworICAgIGlmIChoYXNTYW1wbGVBY2N1cmF0ZVZhbHVl
cykgewogICAgICAgICAvLyBDb252ZXJ0IGZyb20gZnJlcXVlbmN5IHRvIHdhdmV0YWJsZSBpbmNy
ZW1lbnQuCiAgICAgICAgIHZzbXVsKHBoYXNlSW5jcmVtZW50cywgMSwgJmZpbmFsU2NhbGUsIHBo
YXNlSW5jcmVtZW50cywgMSwgZnJhbWVzVG9Qcm9jZXNzKTsKICAgICB9CiAKLSAgICByZXR1cm4g
aGFzVGltZWxpbmVWYWx1ZXM7CisgICAgcmV0dXJuIGhhc1NhbXBsZUFjY3VyYXRlVmFsdWVzOwog
fQogCiB2b2lkIE9zY2lsbGF0b3I6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKIHsK
ICAgICBBdWRpb0J1cyogb3V0cHV0QnVzID0gb3V0cHV0KDApLT5idXMoKTsKIAotICAgIG91dHB1
dEJ1cy0+emVybygpOwotCiAgICAgaWYgKCFpc0luaXRpYWxpemVkKCkgfHwgIW91dHB1dEJ1cy0+
bnVtYmVyT2ZDaGFubmVscygpKSB7CiAgICAgICAgIG91dHB1dEJ1cy0+emVybygpOwogICAgICAg
ICByZXR1cm47CkBAIC0yMDYsMTQgKzIwNCwxNCBAQCB2b2lkIE9zY2lsbGF0b3I6OnByb2Nlc3Mo
c2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKIAogICAgIGZsb2F0IHJhdGVTY2FsZSA9IG1fd2F2ZVRh
YmxlLT5yYXRlU2NhbGUoKTsKICAgICBmbG9hdCBpbnZSYXRlU2NhbGUgPSAxIC8gcmF0ZVNjYWxl
OwotICAgIGJvb2wgaGFzVGltZWxpbmVWYWx1ZXMgPSBjYWxjdWxhdGVTYW1wbGVBY2N1cmF0ZVBo
YXNlSW5jcmVtZW50cyhmcmFtZXNUb1Byb2Nlc3MpOworICAgIGJvb2wgaGFzU2FtcGxlQWNjdXJh
dGVWYWx1ZXMgPSBjYWxjdWxhdGVTYW1wbGVBY2N1cmF0ZVBoYXNlSW5jcmVtZW50cyhmcmFtZXNU
b1Byb2Nlc3MpOwogCiAgICAgZmxvYXQgZnJlcXVlbmN5ID0gMDsKICAgICBmbG9hdCogaGlnaGVy
V2F2ZURhdGEgPSAwOwogICAgIGZsb2F0KiBsb3dlcldhdmVEYXRhID0gMDsKICAgICBmbG9hdCB0
YWJsZUludGVycG9sYXRpb25GYWN0b3I7CiAKLSAgICBpZiAoIWhhc1RpbWVsaW5lVmFsdWVzKSB7
CisgICAgaWYgKCFoYXNTYW1wbGVBY2N1cmF0ZVZhbHVlcykgewogICAgICAgICBmcmVxdWVuY3kg
PSBtX2ZyZXF1ZW5jeS0+c21vb3RoZWRWYWx1ZSgpOwogICAgICAgICBmbG9hdCBkZXR1bmUgPSBt
X2RldHVuZS0+c21vb3RoZWRWYWx1ZSgpOwogICAgICAgICBmbG9hdCBkZXR1bmVTY2FsZSA9IHBv
d2YoMiwgZGV0dW5lIC8gMTIwMCk7CkBAIC0yMzQsNyArMjMyLDcgQEAgdm9pZCBPc2NpbGxhdG9y
Ojpwcm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiAgICAgICAgIHJlYWRJbmRleCA9IHJl
YWRJbmRleCAmIHJlYWRJbmRleE1hc2s7CiAgICAgICAgIHJlYWRJbmRleDIgPSByZWFkSW5kZXgy
ICYgcmVhZEluZGV4TWFzazsKIAotICAgICAgICBpZiAoaGFzVGltZWxpbmVWYWx1ZXMpIHsKKyAg
ICAgICAgaWYgKGhhc1NhbXBsZUFjY3VyYXRlVmFsdWVzKSB7CiAgICAgICAgICAgICBpbmNyID0g
KnBoYXNlSW5jcmVtZW50cysrOwogCiAgICAgICAgICAgICBmcmVxdWVuY3kgPSBpbnZSYXRlU2Nh
bGUgKiBpbmNyOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDA4M2Y3YzFkY2ZjNDBjYjVkMjRhOTQwMzcxMDFkM2EyMmZkOGI4
MzEuLjFiNjQ1ZGMwYWJmNmE1YWFlNGVlYzA3YmVkMGUyZGZiZmFiMTE1NWYgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxMi0wNC0xMCAgQ2hyaXMgUm9nZXJzICA8Y3JvZ2Vyc0Bnb29nbGUuY29t
PgorCisgICAgICAgIEF1ZGlvUGFyYW0gbXVzdCBzdXBwb3J0IGNvbm5lY3Rpb25zIGZyb20gYXVk
aW8tcmF0ZSBzaWduYWxzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04MzUyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogd2ViYXVkaW8vYXVkaW9wYXJhbS1jb25uZWN0LWF1ZGlvcmF0ZXNpZ25hbC1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL2F1ZGlvcGFyYW0tY29ubmVjdC1h
dWRpb3JhdGVzaWduYWwuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vcmVzb3VyY2Vz
L2F1ZGlvLXRlc3RpbmcuanM6CisgICAgICAgIChjcmVhdGVMaW5lYXJSYW1wQnVmZmVyKToKKyAg
ICAgICAgKGNyZWF0ZUNvbnN0YW50QnVmZmVyKToKKwogMjAxMi0wNC0xMCAgQW5kZXJzIENhcmxz
c29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBmYXN0L2V2ZW50cy9kcm9w
LWhhbmRsZXItc2hvdWxkLW5vdC1zdG9wLW5hdmlnYXRlLmh0bWwuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJhdWRpby9hdWRpb3BhcmFtLWNvbm5lY3QtYXVkaW9yYXRlc2lnbmFsLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tY29ubmVjdC1hdWRpb3Jh
dGVzaWduYWwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjZTA2NGQwZDRhMjRlNmM4ZWY0MjM5
NGJlMjgxNzJhMWFlYTEyZTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9hdWRpb3BhcmFtLWNvbm5lY3QtYXVkaW9yYXRlc2lnbmFsLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDYgQEAKK1BBU1MgUmVuZGVyZWQgc2lnbmFsIGlzIG9mIGNvcnJlY3QgbGVuZ3RoLgorUEFT
UyBSZW5kZXJlZCBzaWduYWwgZXhhY3RseSBtYXRjaGVzIHRoZSBhdWRpby1yYXRlIGdhaW4gY2hh
bmdpbmcgc2lnbmFsLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFyYW0tY29u
bmVjdC1hdWRpb3JhdGVzaWduYWwuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2F1ZGlvcGFy
YW0tY29ubmVjdC1hdWRpb3JhdGVzaWduYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDZlYjcwM2Y4YjA5
Y2IyZjg3MThiZjlkMjdiNjVmMWZhNDY4YmY1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vYXVkaW9wYXJhbS1jb25uZWN0LWF1ZGlvcmF0ZXNpZ25hbC5odG1sCkBAIC0w
LDAgKzEsMTEyIEBACis8IURPQ1RZUEUgaHRtbD4KKworPCEtLQorVGVzdHMgdGhhdCBhbiBhdWRp
by1yYXRlIHNpZ25hbCAoQXVkaW9Ob2RlIG91dHB1dCkgY2FuIGJlIGNvbm5lY3RlZCB0byBhbiBB
dWRpb1BhcmFtLgorU3BlY2lmaWNhbGx5LCB0aGlzIHRlc3RzIHRoYXQgYW4gYXVkaW8tcmF0ZSBz
aWduYWwgY29taW5nIGZyb20gYW4gQXVkaW9CdWZmZXJTb3VyY2VOb2RlCitwbGF5aW5nIGFuIEF1
ZGlvQnVmZmVyIGNvbnRhaW5pbmcgYSBzcGVjaWZpYyBjdXJ2ZSBjYW4gYmUgY29ubmVjdGVkIHRv
IGFuIEF1ZGlvR2Fpbk5vZGUncworLmdhaW4gYXR0cmlidXRlIChhbiBBdWRpb1BhcmFtKS4gIEFu
b3RoZXIgQXVkaW9CdWZmZXJTb3VyY2VOb2RlIHdpbGwgYmUgdGhlIGF1ZGlvIHNvdXJjZQoraGF2
aW5nIGl0cyBnYWluIGNoYW5nZWQuICBXZSBsb2FkIHRoaXMgb25lIHdpdGggYW4gQXVkaW9CdWZm
ZXIgY29udGFpbmluZyBhIGNvbnN0YW50IHZhbHVlIG9mIDEuCitUaHVzIGl0J3MgZWFzeSB0byBj
aGVjayB0aGF0IHRoZSByZXN1bHRhbnQgc2lnbmFsIHNob3VsZCBiZSBlcXVhbCB0byB0aGUgZ2Fp
bi1zY2FsaW5nIGN1cnZlLgorLS0+CisKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKwor
PC9oZWFkPgorPGJvZHk+CisKKzxzY3JpcHQ+CisKK3ZhciBzYW1wbGVSYXRlID0gNDQxMDAuMDsK
K3ZhciBsZW5ndGhJblNlY29uZHMgPSAxOworCit2YXIgY29udGV4dCA9IDA7Cit2YXIgY29uc3Rh
bnRPbmVCdWZmZXIgPSAwOwordmFyIGxpbmVhclJhbXBCdWZmZXIgPSAwOworCitmdW5jdGlvbiBj
aGVja1Jlc3VsdChldmVudCkgeworICAgIHZhciByZW5kZXJlZEJ1ZmZlciA9IGV2ZW50LnJlbmRl
cmVkQnVmZmVyOworICAgIHZhciByZW5kZXJlZERhdGEgPSByZW5kZXJlZEJ1ZmZlci5nZXRDaGFu
bmVsRGF0YSgwKTsKKyAgICB2YXIgZXhwZWN0ZWREYXRhID0gbGluZWFyUmFtcEJ1ZmZlci5nZXRD
aGFubmVsRGF0YSgwKTsKKyAgICB2YXIgbiA9IHJlbmRlcmVkQnVmZmVyLmxlbmd0aDsKKworICAg
IGlmIChuID09IGxpbmVhclJhbXBCdWZmZXIubGVuZ3RoKSB7CisgICAgICAgIHRlc3RQYXNzZWQo
IlJlbmRlcmVkIHNpZ25hbCBpcyBvZiBjb3JyZWN0IGxlbmd0aC4iKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICB0ZXN0RmFpbGVkKCJSZW5kZXJlZCBzaWduYWwgaXMgbm90IG9mIGNvcnJlY3QgbGVu
Z3RoLiIpOworICAgIH0KKworICAgIC8vIENoZWNrIHRoYXQgdGhlIHJlbmRlcmVkIHJlc3VsdCBl
eGFjdGx5IG1hdGNoZXMgdGhlIGJ1ZmZlciB1c2VkIHRvIGNvbnRyb2wgZ2Fpbi4KKyAgICAvLyBU
aGlzIGlzIGJlY2F1c2Ugd2UncmUgY2hhbmdpbmcgdGhlIGdhaW4gb2YgYSBzaWduYWwgaGF2aW5n
IGNvbnN0YW50IHZhbHVlIDEuCisgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIGlmIChyZW5kZXJlZERhdGFbaV0gIT0gZXhw
ZWN0ZWREYXRhW2ldKSB7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAg
IHRlc3RQYXNzZWQoIlJlbmRlcmVkIHNpZ25hbCBleGFjdGx5IG1hdGNoZXMgdGhlIGF1ZGlvLXJh
dGUgZ2FpbiBjaGFuZ2luZyBzaWduYWwuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZh
aWxlZCgiUmVuZGVyZWQgc2lnbmFsIGRpZmZlcnMgZnJvbSB0aGUgYXVkaW8tcmF0ZSBnYWluIGNo
YW5naW5nIHNpZ25hbC4iKTsKKyAgICB9CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZnVu
Y3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKworICAgIHdpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAgIHZhciBzYW1wbGVGcmFtZUxlbmd0aCA9IHNhbXBs
ZVJhdGUgKiBsZW5ndGhJblNlY29uZHM7CisKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBj
b250ZXh0LgorICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDEsIHNhbXBsZUZy
YW1lTGVuZ3RoLCBzYW1wbGVSYXRlKTsKKworICAgIC8vIENyZWF0ZSBidWZmZXIgdXNlZCBieSB0
aGUgc291cmNlIHdoaWNoIHdpbGwgaGF2ZSBpdHMgZ2FpbiBjb250cm9sbGVkLgorICAgIGNvbnN0
YW50T25lQnVmZmVyID0gY3JlYXRlQ29uc3RhbnRCdWZmZXIoY29udGV4dCwgc2FtcGxlRnJhbWVM
ZW5ndGgsIDEpOworCisgICAgLy8gQ3JlYXRlIGJ1ZmZlciB1c2VkIHRvIGNvbnRyb2wgZ2Fpbi4K
KyAgICBsaW5lYXJSYW1wQnVmZmVyID0gY3JlYXRlTGluZWFyUmFtcEJ1ZmZlcihjb250ZXh0LCBz
YW1wbGVGcmFtZUxlbmd0aCk7CisKKyAgICAvLyBDcmVhdGUgdGhlIHR3byBzb3VyY2VzLgorCisg
ICAgdmFyIGNvbnN0YW50U291cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAg
ICBjb25zdGFudFNvdXJjZS5idWZmZXIgPSBjb25zdGFudE9uZUJ1ZmZlcjsKKworICAgIHZhciBn
YWluQ2hhbmdpbmdTb3VyY2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAgIGdh
aW5DaGFuZ2luZ1NvdXJjZS5idWZmZXIgPSBsaW5lYXJSYW1wQnVmZmVyOworCisgICAgLy8gQ3Jl
YXRlIGEgZ2FpbiBub2RlIGNvbnRyb2xsaW5nIHRoZSBnYWluIG9mIGNvbnN0YW50U291cmNlIGFu
ZCBtYWtlIHRoZSBjb25uZWN0aW9ucy4KKyAgICB2YXIgZ2Fpbk5vZGUgPSBjb250ZXh0LmNyZWF0
ZUdhaW5Ob2RlKCk7CisgICAgY29uc3RhbnRTb3VyY2UuY29ubmVjdChnYWluTm9kZSk7CisgICAg
Z2Fpbk5vZGUuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKworICAgIC8vIENvbm5lY3Qg
YW4gYXVkaW8tcmF0ZSBzaWduYWwgdG8gY29udHJvbCB0aGUgLmdhaW4gQXVkaW9QYXJhbS4KKyAg
ICAvLyBUaGlzIGlzIHRoZSBoZWFydCBvZiB3aGF0IGlzIGJlaW5nIHRlc3RlZC4KKyAgICBnYWlu
Q2hhbmdpbmdTb3VyY2UuY29ubmVjdChnYWluTm9kZS5nYWluKTsKKworICAgIC8vIFN0YXJ0IGJv
dGggc291cmNlcyBhdCB0aW1lIDAuCisgICAgY29uc3RhbnRTb3VyY2Uubm90ZU9uKDApOworICAg
IGdhaW5DaGFuZ2luZ1NvdXJjZS5ub3RlT24oMCk7CisKKyAgICBjb250ZXh0Lm9uY29tcGxldGUg
PSBjaGVja1Jlc3VsdDsKKyAgICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7Cit9CisKK3J1blRl
c3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisKKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNl
cy9hdWRpby10ZXN0aW5nLmpzIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlv
LXRlc3RpbmcuanMKaW5kZXggYWYwYWQyN2EyMzJlMjU5Y2Q4MWZlNTMzZDU3NGE3ZTI5NWNjZGY4
Ny4uZWM0ODkwMzhhY2ZmMWUwYjA0MDE5ODkyYWQzYjA1MTQ1YjMwNjJjZSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMKKysrIGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMKQEAgLTExNSw2ICsx
MTUsMzAgQEAgZnVuY3Rpb24gY3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCBzYW1wbGVGcmFt
ZUxlbmd0aCkgewogICAgIHJldHVybiBhdWRpb0J1ZmZlcjsKIH0KIAorLy8gQ3JlYXRlIGEgYnVm
ZmVyIG9mIHRoZSBnaXZlbiBsZW5ndGggd2l0aCBhIGxpbmVhciByYW1wIGhhdmluZyB2YWx1ZXMg
MCA8PSB4IDwgMS4KK2Z1bmN0aW9uIGNyZWF0ZUxpbmVhclJhbXBCdWZmZXIoY29udGV4dCwgc2Ft
cGxlRnJhbWVMZW5ndGgpIHsKKyAgICB2YXIgYXVkaW9CdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1
ZmZlcigxLCBzYW1wbGVGcmFtZUxlbmd0aCwgY29udGV4dC5zYW1wbGVSYXRlKTsKKyAgICB2YXIg
biA9IGF1ZGlvQnVmZmVyLmxlbmd0aDsKKyAgICB2YXIgZGF0YUwgPSBhdWRpb0J1ZmZlci5nZXRD
aGFubmVsRGF0YSgwKTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKQorICAgICAg
ICBkYXRhTFtpXSA9IGkgLyBuOworCisgICAgcmV0dXJuIGF1ZGlvQnVmZmVyOworfQorCisvLyBD
cmVhdGUgYSBidWZmZXIgb2YgdGhlIGdpdmVuIGxlbmd0aCBoYXZpbmcgYSBjb25zdGFudCB2YWx1
ZS4KK2Z1bmN0aW9uIGNyZWF0ZUNvbnN0YW50QnVmZmVyKGNvbnRleHQsIHNhbXBsZUZyYW1lTGVu
Z3RoLCBjb25zdGFudFZhbHVlKSB7CisgICAgdmFyIGF1ZGlvQnVmZmVyID0gY29udGV4dC5jcmVh
dGVCdWZmZXIoMSwgc2FtcGxlRnJhbWVMZW5ndGgsIGNvbnRleHQuc2FtcGxlUmF0ZSk7CisgICAg
dmFyIG4gPSBhdWRpb0J1ZmZlci5sZW5ndGg7CisgICAgdmFyIGRhdGFMID0gYXVkaW9CdWZmZXIu
Z2V0Q2hhbm5lbERhdGEoMCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkKKyAg
ICAgICAgZGF0YUxbaV0gPSBjb25zdGFudFZhbHVlOworCisgICAgcmV0dXJuIGF1ZGlvQnVmZmVy
OworfQorCiAvLyBDb252ZXJ0IHRpbWUgKGluIHNlY29uZHMpIHRvIHNhbXBsZSBmcmFtZXMuCiBm
dW5jdGlvbiB0aW1lVG9TYW1wbGVGcmFtZSh0aW1lLCBzYW1wbGVSYXRlKSB7CiAgICAgcmV0dXJu
IE1hdGguZmxvb3IoMC41ICsgdGltZSAqIHNhbXBsZVJhdGUpOwo=
</data>
<flag name="review"
          id="141350"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>