<?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>39200</bug_id>
          
          <creation_ts>2010-05-17 00:30:51 -0700</creation_ts>
          <short_desc>Simplified handling of &apos;arguments&apos; -- 1.2% SunSpider speedup</short_desc>
          <delta_ts>2010-05-18 22:10:33 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>darin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>226640</commentid>
    <comment_count>0</comment_count>
      <attachid>56215</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-05-17 00:30:51 -0700</bug_when>
    <thetext>Created attachment 56215
patch

About a 9%-11% speedup in raw call performance.

No ChangeLog or tests yet. Feel free to leave comments, but please don&apos;t mark as reviewed until the EWS bots have cycled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226641</commentid>
    <comment_count>1</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-17 00:33:25 -0700</bug_when>
    <thetext>Attachment 56215 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
JavaScriptCore/bytecode/CodeBlock.h:390:  More than one command on the same line  [whitespace/newline] [4]
JavaScriptCore/bytecode/CodeBlock.h:391:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226904</commentid>
    <comment_count>2</comment_count>
      <attachid>56215</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-17 14:50:42 -0700</bug_when>
    <thetext>Comment on attachment 56215
patch

&gt; +        void setArgumentsRegister(int argumentsRegister) { m_argumentsRegister = argumentsRegister; ASSERT(m_argumentsRegister != -1); }

I would have the assertion assert based on the argument instead of the data member because the mistake is passing the wrong value, and having the assertion mention the argument name points to the mistake ever so slightly more directly.

&gt; +        addVar(); // Hidden reference to arguments object, used for tear-off
&gt; +        m_argumentsRegisterIndex = addVar(propertyNames().arguments, false)-&gt;index(); // User-visible arguments property

What&apos;s missing from these comments is the point that the user-visible property can change, but the tear-off must use the original value. That&apos;s obvious to you but may not be obvious to the person reading this later.

The other non-obvious thing about the code is how the tear-off finds the hidden reference. Mechanically speaking, what&apos;s the excuse for ignoring the return value from addVar.

The way to write this in the code is to have a local variable and use ASSERT_UNUSED to assert its relationship to m_argumentsRegisterIndex.

It would look something like this:

    Register* unmodifiedArgumentsRegister = addVar();
    m_argumentsRegisterIndex = addVar(xxx)-&gt;index();
    codeBlock-&gt;setArgumentsRegister(m_argumentsRegisterIndex);

    // We can save a little storage by hard-coding the knowledge that the two arguments values
    // are stored in consecutive registers, and storing only the index of the visible one.
    ASSERT_UNUSED(unmodifiedArgumentsRegister, unmodifiedArgumentsRegister-&gt;index() == codeBlock-&gt;unmodifiedArgumentsRegister());

I think that&apos;s better than the addVar with ignored result and comments in the header that aren&apos;t obviously directly connected.

I also suggest getting rid of m_argumentsRegisterIndex. I think that everywhere it&apos;s used we could instead use codeBlock-&gt;argumentsRegister().

As we discussed in person, we should add an inline function to map from an arguments register index to the unmodified arguments register&apos;s index to CodeBlock.h. Even though this is a simple &quot;- 1&quot;, it&apos;s great to have all the code that does this call a single function where the comment can indicate what&apos;s going on.

r=me -- this seems great as is and will be slightly better if you use a function do all that &quot;-1&quot;ing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226922</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-17 15:08:26 -0700</bug_when>
    <thetext>Geoff told me it was fine to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227664</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-05-18 22:10:33 -0700</bug_when>
    <thetext>Committed revision 59742.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56215</attachid>
            <date>2010-05-17 00:30:51 -0700</date>
            <delta_ts>2010-05-17 14:50:41 -0700</delta_ts>
            <desc>patch</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>43209</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gNTkzODEp
CisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OTAsMTEgKzQ5MCwxMyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4
ZWMsIGNvCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2Ny
ZWF0ZV9hcmd1bWVudHM6IHsKLSAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gY3JlYXRlX2FyZ3Vt
ZW50c1xuIiwgbG9jYXRpb24pOworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBwcmludGYoIlslNGRdIGNyZWF0ZV9hcmd1bWVudHNcdCAlc1xuIiwg
bG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfaW5pdF9hcmd1bWVudHM6IHsKLSAgICAg
ICAgICAgIHByaW50ZigiWyU0ZF0gaW5pdF9hcmd1bWVudHNcbiIsIGxvY2F0aW9uKTsKKyAgICAg
ICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRmKCJb
JTRkXSBpbml0X2FyZ3VtZW50c1x0ICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMs
IHIwKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBvcF9jb252ZXJ0X3RoaXM6IHsKQEAgLTEwNTUsMTEgKzEwNTcsMTMgQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3Bf
dGVhcl9vZmZfYWN0aXZhdGlvbjogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgICAgICBwcmludGYoIlslNGRdIHRlYXJfb2ZmX2FjdGl2YXRpb25cdCAl
c1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRmKCJbJTRk
XSB0ZWFyX29mZl9hY3RpdmF0aW9uXHQgJXMsICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1l
KGV4ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfdGVhcl9vZmZfYXJndW1l
bnRzOiB7Ci0gICAgICAgICAgICBwcmludGYoIlslNGRdIHRlYXJfb2ZmX2FyZ3VtZW50c1xuIiwg
bG9jYXRpb24pOworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBwcmludGYoIlslNGRdIHRlYXJfb2ZmX2FyZ3VtZW50c1x0ICVzXG4iLCBsb2NhdGlv
biwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9yZXQ6IHsKQEAgLTEzNDAsOSArMTM0NCw5IEBAIENv
ZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICNpZm5kZWYgTkRFQlVHCiAg
ICAgLCBtX2luc3RydWN0aW9uQ291bnQoMCkKICNlbmRpZgorICAgICwgbV9hcmd1bWVudHNSZWdp
c3RlcigtMSkKICAgICAsIG1fbmVlZHNGdWxsU2NvcGVDaGFpbihvd25lckV4ZWN1dGFibGUtPm5l
ZWRzQWN0aXZhdGlvbigpKQogICAgICwgbV91c2VzRXZhbChvd25lckV4ZWN1dGFibGUtPnVzZXNF
dmFsKCkpCi0gICAgLCBtX3VzZXNBcmd1bWVudHMoZmFsc2UpCiAgICAgLCBtX2lzTnVtZXJpY0Nv
bXBhcmVGdW5jdGlvbihmYWxzZSkKICAgICAsIG1fY29kZVR5cGUoY29kZVR5cGUpCiAgICAgLCBt
X3NvdXJjZShzb3VyY2VQcm92aWRlcikKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCShyZXZpc2lvbiA1OTM4MSkKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODMsOCArMzgzLDEzIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBib29sIG5lZWRzRnVsbFNjb3BlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX25lZWRz
RnVsbFNjb3BlQ2hhaW47IH0KICAgICAgICAgdm9pZCBzZXRVc2VzRXZhbChib29sIHVzZXNFdmFs
KSB7IG1fdXNlc0V2YWwgPSB1c2VzRXZhbDsgfQogICAgICAgICBib29sIHVzZXNFdmFsKCkgY29u
c3QgeyByZXR1cm4gbV91c2VzRXZhbDsgfQotICAgICAgICB2b2lkIHNldFVzZXNBcmd1bWVudHMo
Ym9vbCB1c2VzQXJndW1lbnRzKSB7IG1fdXNlc0FyZ3VtZW50cyA9IHVzZXNBcmd1bWVudHM7IH0K
LSAgICAgICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzQXJndW1l
bnRzOyB9CisgICAgICAgIAorICAgICAgICAvLyBhcmd1bWVudHNSZWdpc3RlcigpIGlzIHRoZSBy
ZWdpc3RlciBmb3IgdGhlIHVzZXItdmlzaWJsZSBhcmd1bWVudHMgcHJvcGVydHkuCisgICAgICAg
IC8vIGFyZ3VtZW50c1JlZ2lzdGVyKCkgLSAxIGlzIHRoZSBoaWRkZW4gcmVmZXJlbmNlIHRvIGFy
Z3VtZW50cyBvYmplY3QsCisgICAgICAgIC8vIHVzZWQgZm9yIHRlYXItb2ZmLgorICAgICAgICB2
b2lkIHNldEFyZ3VtZW50c1JlZ2lzdGVyKGludCBhcmd1bWVudHNSZWdpc3RlcikgeyBtX2FyZ3Vt
ZW50c1JlZ2lzdGVyID0gYXJndW1lbnRzUmVnaXN0ZXI7IEFTU0VSVChtX2FyZ3VtZW50c1JlZ2lz
dGVyICE9IC0xKTsgfQorICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIoKSB7IEFTU0VSVCht
X2FyZ3VtZW50c1JlZ2lzdGVyICE9IC0xKTsgcmV0dXJuIG1fYXJndW1lbnRzUmVnaXN0ZXI7IH0K
KyAgICAgICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHNS
ZWdpc3RlciAhPSAtMTsgfQogCiAgICAgICAgIENvZGVUeXBlIGNvZGVUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2RlVHlwZTsgfQogCkBAIC01MjAsMTAgKzUyNSwxMCBAQCBuYW1lc3BhY2UgSlND
IHsKICNlbmRpZgogCiAgICAgICAgIGludCBtX3RoaXNSZWdpc3RlcjsKKyAgICAgICAgaW50IG1f
YXJndW1lbnRzUmVnaXN0ZXI7CiAKICAgICAgICAgYm9vbCBtX25lZWRzRnVsbFNjb3BlQ2hhaW47
CiAgICAgICAgIGJvb2wgbV91c2VzRXZhbDsKLSAgICAgICAgYm9vbCBtX3VzZXNBcmd1bWVudHM7
CiAgICAgICAgIGJvb2wgbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb247CiAKICAgICAgICAgQ29k
ZVR5cGUgbV9jb2RlVHlwZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lv
biA1OTM4MSkKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw4ICs0MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICNkZWZpbmUgRk9SX0VB
Q0hfT1BDT0RFX0lEKG1hY3JvKSBcCiAgICAgICAgIG1hY3JvKG9wX2VudGVyLCAxKSBcCiAgICAg
ICAgIG1hY3JvKG9wX2VudGVyX3dpdGhfYWN0aXZhdGlvbiwgMikgXAotICAgICAgICBtYWNybyhv
cF9pbml0X2FyZ3VtZW50cywgMSkgXAotICAgICAgICBtYWNybyhvcF9jcmVhdGVfYXJndW1lbnRz
LCAxKSBcCisgICAgICAgIG1hY3JvKG9wX2luaXRfYXJndW1lbnRzLCAyKSBcCisgICAgICAgIG1h
Y3JvKG9wX2NyZWF0ZV9hcmd1bWVudHMsIDIpIFwKICAgICAgICAgbWFjcm8ob3BfY29udmVydF90
aGlzLCAyKSBcCiAgICAgICAgIFwKICAgICAgICAgbWFjcm8ob3BfbmV3X29iamVjdCwgMikgXApA
QCAtMTU3LDggKzE1Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBtYWNybyhvcF9jYWxs
X2V2YWwsIDUpIFwKICAgICAgICAgbWFjcm8ob3BfY2FsbF92YXJhcmdzLCA1KSBcCiAgICAgICAg
IG1hY3JvKG9wX2xvYWRfdmFyYXJncywgMykgXAotICAgICAgICBtYWNybyhvcF90ZWFyX29mZl9h
Y3RpdmF0aW9uLCAyKSBcCi0gICAgICAgIG1hY3JvKG9wX3RlYXJfb2ZmX2FyZ3VtZW50cywgMSkg
XAorICAgICAgICBtYWNybyhvcF90ZWFyX29mZl9hY3RpdmF0aW9uLCAzKSBcCisgICAgICAgIG1h
Y3JvKG9wX3RlYXJfb2ZmX2FyZ3VtZW50cywgMikgXAogICAgICAgICBtYWNybyhvcF9yZXQsIDIp
IFwKICAgICAgICAgbWFjcm8ob3BfbWV0aG9kX2NoZWNrLCAxKSBcCiAgICAgICAgIFwKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gNTkzODEpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsOCArMTc0LDcgQEAgYm9vbCBC
eXRlY29kZUdlbmVyYXRvcjo6YWRkVmFyKGNvbnN0IElkZQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgKyttX2NvZGVCbG9jay0+bV9udW1WYXJzOwotICAgIHIwID0gbmV3UmVn
aXN0ZXIoKTsKKyAgICByMCA9IGFkZFZhcigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0z
MTIsMjkgKzMxMSwzMCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVu
CiAKICAgICBjb2RlQmxvY2stPnNldEdsb2JhbERhdGEobV9nbG9iYWxEYXRhKTsKIAotICAgIGJv
b2wgdXNlc0FyZ3VtZW50cyA9IGZ1bmN0aW9uQm9keS0+dXNlc0FyZ3VtZW50cygpOwotICAgIGNv
ZGVCbG9jay0+c2V0VXNlc0FyZ3VtZW50cyh1c2VzQXJndW1lbnRzKTsKLSAgICBpZiAodXNlc0Fy
Z3VtZW50cykgewotICAgICAgICBtX2FyZ3VtZW50c1JlZ2lzdGVyLnNldEluZGV4KFJlZ2lzdGVy
RmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHMpOwotICAgICAgICBhZGRWYXIocHJvcGVydHlO
YW1lcygpLmFyZ3VtZW50cywgZmFsc2UpOwotICAgIH0KLQogICAgIGlmIChtX2NvZGVCbG9jay0+
bmVlZHNGdWxsU2NvcGVDaGFpbigpKSB7Ci0gICAgICAgICsrbV9jb2RlQmxvY2stPm1fbnVtVmFy
czsKLSAgICAgICAgbV9hY3RpdmF0aW9uUmVnaXN0ZXJJbmRleCA9IG5ld1JlZ2lzdGVyKCktPmlu
ZGV4KCk7CisgICAgICAgIG1fYWN0aXZhdGlvblJlZ2lzdGVySW5kZXggPSBhZGRWYXIoKS0+aW5k
ZXgoKTsKICAgICAgICAgZW1pdE9wY29kZShvcF9lbnRlcl93aXRoX2FjdGl2YXRpb24pOwogICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9hY3RpdmF0aW9uUmVnaXN0ZXJJbmRleCk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIGVtaXRPcGNvZGUob3BfZW50ZXIpOworICAgIAorICAgIC8vIEJv
dGggb3BfdGVhcl9vZmZfYWN0aXZhdGlvbiBhbmQgb3BfdGVhcl9vZmZfYXJndW1lbnRzIHRlYXIg
b2ZmIHRoZSAnYXJndW1lbnRzJworICAgIC8vIG9iamVjdCwgaWYgY3JlYXRlZC4KKyAgICBpZiAo
bV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSB8fCBmdW5jdGlvbkJvZHktPnVzZXNB
cmd1bWVudHMoKSkgeworICAgICAgICBhZGRWYXIoKTsgLy8gSGlkZGVuIHJlZmVyZW5jZSB0byBh
cmd1bWVudHMgb2JqZWN0LCB1c2VkIGZvciB0ZWFyLW9mZgorICAgICAgICBtX2FyZ3VtZW50c1Jl
Z2lzdGVySW5kZXggPSBhZGRWYXIocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgZmFsc2UpLT5p
bmRleCgpOyAvLyBVc2VyLXZpc2libGUgYXJndW1lbnRzIHByb3BlcnR5CisgICAgICAgIGNvZGVC
bG9jay0+c2V0QXJndW1lbnRzUmVnaXN0ZXIobV9hcmd1bWVudHNSZWdpc3RlckluZGV4KTsKIAot
ICAgIGlmICh1c2VzQXJndW1lbnRzKSB7CiAgICAgICAgIGVtaXRPcGNvZGUob3BfaW5pdF9hcmd1
bWVudHMpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9hcmd1bWVudHNSZWdpc3Rl
ckluZGV4KTsKIAogICAgICAgICAvLyBUaGUgZGVidWdnZXIgY3VycmVudGx5IHJldHJpZXZlcyB0
aGUgYXJndW1lbnRzIG9iamVjdCBmcm9tIGFuIGFjdGl2YXRpb24gcmF0aGVyIHRoYW4gcHVsbGlu
ZwogICAgICAgICAvLyBpdCBmcm9tIGEgY2FsbCBmcmFtZS4gIEluIHRoZSBsb25nLXRlcm0gaXQg
c2hvdWxkIHN0b3AgZG9pbmcgdGhhdCAoPHJkYXI6Ly9wcm9ibGVtLzY5MTE4ODY+KSwKICAgICAg
ICAgLy8gYnV0IGZvciBub3cgd2UgZm9yY2UgZWFnZXIgY3JlYXRpb24gb2YgdGhlIGFyZ3VtZW50
cyBvYmplY3Qgd2hlbiBkZWJ1Z2dpbmcuCi0gICAgICAgIGlmIChtX3Nob3VsZEVtaXREZWJ1Z0hv
b2tzKQorICAgICAgICBpZiAobV9zaG91bGRFbWl0RGVidWdIb29rcykgewogICAgICAgICAgICAg
ZW1pdE9wY29kZShvcF9jcmVhdGVfYXJndW1lbnRzKTsKKyAgICAgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChtX2FyZ3VtZW50c1JlZ2lzdGVySW5kZXgpOworICAgICAgICB9CiAgICAgfQog
CiAgICAgY29uc3QgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9uU3Rh
Y2sgPSBmdW5jdGlvbkJvZHktPmZ1bmN0aW9uU3RhY2soKTsKQEAgLTEzODUsNyArMTM4NSw2IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3UmUKICAgICByZXR1cm4gZHN0
OwogfQogCi0KIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25F
eHByZXNzaW9uKFJlZ2lzdGVySUQqIHIwLCBGdW5jRXhwck5vZGUqIG4pCiB7CiAgICAgRnVuY3Rp
b25Cb2R5Tm9kZSogZnVuY3Rpb24gPSBuLT5ib2R5KCk7CkBAIC0xNDA0LDEzICsxNDAzLDE2IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCgKIAogdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6Y3JlYXRlQXJndW1lbnRzSWZOZWNlc3NhcnkoKQogewotICAgIGlmIChtX2Nv
ZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpICYmIG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKQot
ICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9hcmd1bWVudHMpOworICAgIEFTU0VSVChtX2Nv
ZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKTsKKyAgICBpZiAobV9jb2RlVHlwZSAhPSBGdW5jdGlv
bkNvZGUpCisgICAgICAgIHJldHVybjsKKworICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2FyZ3Vt
ZW50cyk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0ZXJJbmRl
eCk7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbEV2YWwoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBSZWdpc3RlcklEKiB0aGlzUmVnaXN0ZXIs
IEFyZ3VtZW50c05vZGUqIGFyZ3VtZW50c05vZGUsIHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQogewotICAgIGNyZWF0ZUFyZ3VtZW50c0lm
TmVjZXNzYXJ5KCk7CiAgICAgcmV0dXJuIGVtaXRDYWxsKG9wX2NhbGxfZXZhbCwgZHN0LCBmdW5j
LCB0aGlzUmVnaXN0ZXIsIGFyZ3VtZW50c05vZGUsIGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0KTsKIH0KIApAQCAtMTUyNyw4ICsxNTI5LDExIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0UmV0dXIKICAgICBpZiAobV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hh
aW4oKSkgewogICAgICAgICBlbWl0T3Bjb2RlKG9wX3RlYXJfb2ZmX2FjdGl2YXRpb24pOwogICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9hY3RpdmF0aW9uUmVnaXN0ZXJJbmRleCk7Ci0g
ICAgfSBlbHNlIGlmIChtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpICYmIG1fY29kZUJsb2Nr
LT5tX251bVBhcmFtZXRlcnMgPiAxKQorICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9h
cmd1bWVudHNSZWdpc3RlckluZGV4KTsKKyAgICB9IGVsc2UgaWYgKG1fY29kZUJsb2NrLT51c2Vz
QXJndW1lbnRzKCkgJiYgbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyA+IDEpIHsgLy8gSWYg
dGhlcmUgYXJlIG5vIG5hbWVkIHBhcmFtZXRlcnMsIHRoZXJlJ3Mgbm90aGluZyB0byB0ZWFyIG9m
Ziwgc2luY2UgZXh0cmEgLyB1bm5hbWVkIHBhcmFtZXRlcnMgZ2V0IGNvcGllZCB0byB0aGUgYXJn
dW1lbnRzIG9iamVjdCBhdCBjb25zdHJ1Y3QgdGltZS4KICAgICAgICAgZW1pdE9wY29kZShvcF90
ZWFyX29mZl9hcmd1bWVudHMpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9hcmd1
bWVudHNSZWdpc3RlckluZGV4KTsKKyAgICB9CiAKICAgICByZXR1cm4gZW1pdFVuYXJ5Tm9Ec3RP
cChvcF9yZXQsIHNyYyk7CiB9CkBAIC0xNjM1LDcgKzE2NDAsNiBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdFB1c2hTCiAgICAgY29udGV4dC5pc0ZpbmFsbHlCbG9jayA9IGZh
bHNlOwogICAgIG1fc2NvcGVDb250ZXh0U3RhY2suYXBwZW5kKGNvbnRleHQpOwogICAgIG1fZHlu
YW1pY1Njb3BlRGVwdGgrKzsKLSAgICBjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgpOwogCiAg
ICAgcmV0dXJuIGVtaXRVbmFyeU5vRHN0T3Aob3BfcHVzaF9zY29wZSwgc2NvcGUpOwogfQpAQCAt
MTg5OSw4ICsxOTAzLDYgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1c2hOZXdTY29w
ZQogICAgIGNvbnRleHQuaXNGaW5hbGx5QmxvY2sgPSBmYWxzZTsKICAgICBtX3Njb3BlQ29udGV4
dFN0YWNrLmFwcGVuZChjb250ZXh0KTsKICAgICBtX2R5bmFtaWNTY29wZURlcHRoKys7Ci0gICAg
Ci0gICAgY3JlYXRlQXJndW1lbnRzSWZOZWNlc3NhcnkoKTsKIAogICAgIGVtaXRPcGNvZGUob3Bf
cHVzaF9uZXdfc2NvcGUpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkp
OwpJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgJKHJldmlzaW9uIDU5MzgxKQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwNCwxNSArNDA0LDIzIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgUmVnaXN0ZXJJRCogbmV3UmVnaXN0ZXIo
KTsKIAotICAgICAgICAvLyBSZXR1cm5zIHRoZSBSZWdpc3RlcklEIGNvcnJlc3BvbmRpbmcgdG8g
aWRlbnQuCisgICAgICAgIC8vIEFkZHMgYSB2YXIgc2xvdCBhbmQgbWFwcyBpdCB0byB0aGUgbmFt
ZSBpZGVudCBpbiBzeW1ib2xUYWJsZSgpLgogICAgICAgICBSZWdpc3RlcklEKiBhZGRWYXIoY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgaXNDb25zdGFudCkKICAgICAgICAgewogICAgICAg
ICAgICAgUmVnaXN0ZXJJRCogbG9jYWw7CiAgICAgICAgICAgICBhZGRWYXIoaWRlbnQsIGlzQ29u
c3RhbnQsIGxvY2FsKTsKICAgICAgICAgICAgIHJldHVybiBsb2NhbDsKICAgICAgICAgfQotICAg
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYSBuZXcgUmVnaXN0ZXJJRCB3YXMgYWRkZWQsIGZhbHNl
IGlmIGEgcHJlLWV4aXN0aW5nIFJlZ2lzdGVySUQgd2FzIHJlLXVzZWQuCisKKyAgICAgICAgLy8g
RGl0dG8uIFJldHVybnMgdHJ1ZSBpZiBhIG5ldyBSZWdpc3RlcklEIHdhcyBhZGRlZCwgZmFsc2Ug
aWYgYSBwcmUtZXhpc3RpbmcgUmVnaXN0ZXJJRCB3YXMgcmUtdXNlZC4KICAgICAgICAgYm9vbCBh
ZGRWYXIoY29uc3QgSWRlbnRpZmllciYsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZXJJRComKTsK
KyAgICAgICAgCisgICAgICAgIC8vIEFkZHMgYW4gYW5vbnltb3VzIHZhciBzbG90LiBUbyBnaXZl
IHRoaXMgc2xvdCBhIG5hbWUsIGFkZCBpdCB0byBzeW1ib2xUYWJsZSgpLgorICAgICAgICBSZWdp
c3RlcklEKiBhZGRWYXIoKQorICAgICAgICB7CisgICAgICAgICAgICArK21fY29kZUJsb2NrLT5t
X251bVZhcnM7CisgICAgICAgICAgICByZXR1cm4gbmV3UmVnaXN0ZXIoKTsKKyAgICAgICAgfQog
CiAgICAgICAgIC8vIFJldHVybnMgdGhlIFJlZ2lzdGVySUQgY29ycmVzcG9uZGluZyB0byBpZGVu
dC4KICAgICAgICAgUmVnaXN0ZXJJRCogYWRkR2xvYmFsVmFyKGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBib29sIGlzQ29uc3RhbnQpCkBAIC00MzMsOSArNDQxLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkKICAgICAgICAgICAgICAgICByZXR1cm4gbV9j
YWxsZWVSZWdpc3RlcnNbaW5kZXhdOwogCi0gICAgICAgICAgICBpZiAoaW5kZXggPT0gUmVnaXN0
ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50cykKLSAgICAgICAgICAgICAgICByZXR1cm4g
bV9hcmd1bWVudHNSZWdpc3RlcjsKLQogICAgICAgICAgICAgaWYgKG1fcGFyYW1ldGVycy5zaXpl
KCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoIW1fZ2xvYmFscy5zaXplKCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBtX3BhcmFtZXRlcnNbaW5kZXggKyBtX3BhcmFtZXRlcnMuc2l6ZSgp
ICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplXTsKQEAgLTQ4Miw4ICs0ODcsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGFzaFNldDxSZWZQdHI8VVN0cmluZzo6UmVwPiwg
SWRlbnRpZmllclJlcEhhc2g+IG1fZnVuY3Rpb25zOwogICAgICAgICBSZWdpc3RlcklEIG1faWdu
b3JlZFJlc3VsdFJlZ2lzdGVyOwogICAgICAgICBSZWdpc3RlcklEIG1fdGhpc1JlZ2lzdGVyOwot
ICAgICAgICBSZWdpc3RlcklEIG1fYXJndW1lbnRzUmVnaXN0ZXI7CiAgICAgICAgIGludCBtX2Fj
dGl2YXRpb25SZWdpc3RlckluZGV4OworICAgICAgICBpbnQgbV9hcmd1bWVudHNSZWdpc3Rlcklu
ZGV4OwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY29uc3RhbnRQ
b29sUmVnaXN0ZXJzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1f
Y2FsbGVlUmVnaXN0ZXJzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+
IG1fcGFyYW1ldGVyczsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFt
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5o
CShyZXZpc2lvbiA1OTM4MSkKKysrIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFt
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMTAgKzEwNyw4IEBAIG5hbWVzcGFjZSBKU0MgIHsK
ICAgICAgICAgQ2FsbEZyYW1lJiBvcGVyYXRvcj0oY29uc3QgUmVnaXN0ZXImIHIpIHsgKnN0YXRp
Y19jYXN0PFJlZ2lzdGVyKj4odGhpcykgPSByOyByZXR1cm4gKnRoaXM7IH0KIAogICAgICAgICBD
YWxsRnJhbWUqIGNhbGxlckZyYW1lKCkgY29uc3QgeyByZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6
OkNhbGxlckZyYW1lXS5jYWxsRnJhbWUoKTsgfQotICAgICAgICBBcmd1bWVudHMqIG9wdGlvbmFs
Q2FsbGVlQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gdGhpc1tSZWdpc3RlckZpbGU6Ok9wdGlv
bmFsQ2FsbGVlQXJndW1lbnRzXS5hcmd1bWVudHMoKTsgfQogICAgICAgICBJbnN0cnVjdGlvbiog
cmV0dXJuUEMoKSBjb25zdCB7IHJldHVybiB0aGlzW1JlZ2lzdGVyRmlsZTo6UmV0dXJuUENdLnZQ
QygpOyB9CiAKLSAgICAgICAgdm9pZCBzZXRDYWxsZWVBcmd1bWVudHMoSlNWYWx1ZSBhcmd1bWVu
dHMpIHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtSZWdpc3RlckZpbGU6Ok9wdGlvbmFs
Q2FsbGVlQXJndW1lbnRzXSA9IGFyZ3VtZW50czsgfQogICAgICAgICB2b2lkIHNldENhbGxlckZy
YW1lKENhbGxGcmFtZSogY2FsbGVyRnJhbWUpIHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlz
KVtSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lXSA9IGNhbGxlckZyYW1lOyB9CiAgICAgICAgIHZv
aWQgc2V0U2NvcGVDaGFpbihTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikgeyBzdGF0aWNfY2Fz
dDxSZWdpc3Rlcio+KHRoaXMpW1JlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbl0gPSBzY29wZUNoYWlu
OyB9CiAKQEAgLTEyNiw3ICsxMjQsNiBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW1JlZ2lzdGVyRmlsZTo6UmV0dXJuVmFsdWVSZWdp
c3Rlcl0gPSBSZWdpc3Rlcjo6d2l0aEludChyZXR1cm5WYWx1ZVJlZ2lzdGVyKTsKICAgICAgICAg
ICAgIHNldEFyZ3VtZW50Q291bnQoYXJnYyk7IC8vIG9yaWdpbmFsIGFyZ3VtZW50IGNvdW50IChm
b3IgdGhlIHNha2Ugb2YgdGhlICJhcmd1bWVudHMiIG9iamVjdCkKICAgICAgICAgICAgIHNldENh
bGxlZShmdW5jdGlvbik7Ci0gICAgICAgICAgICBzZXRDYWxsZWVBcmd1bWVudHMoSlNWYWx1ZSgp
KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFJlYWQgYSByZWdpc3RlciBmcm9tIHRoZSBjb2Rl
ZnJhbWUgKG9yIGNvbnN0YW50IGZyb20gdGhlIENvZGVCbG9jaykuCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVDbG9zdXJlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lQ2xvc3VyZS5oCShyZXZpc2lvbiA1OTM4MSkK
KysrIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUNsb3N1cmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsMTAgKzQ2LDEwIEBAIHN0cnVjdCBDYWxsRnJhbWVDbG9zdXJlIHsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgbmV3Q2FsbEZyYW1lW2FyZyAtIFJlZ2lzdGVyRmlsZTo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGV4cGVjdGVkUGFyYW1zIC0gcHJvdmlkZWRQYXJhbXNdID0g
dmFsdWU7CiAgICAgfQorCiAgICAgdm9pZCByZXNldENhbGxGcmFtZSgpCiAgICAgewogICAgICAg
ICBuZXdDYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oc2NvcGVDaGFpbik7Ci0gICAgICAgIG5ld0Nh
bGxGcmFtZS0+c2V0Q2FsbGVlQXJndW1lbnRzKEpTVmFsdWUoKSk7CiAgICAgICAgIGZvciAoaW50
IGkgPSBwcm92aWRlZFBhcmFtczsgaSA8IGV4cGVjdGVkUGFyYW1zOyArK2kpCiAgICAgICAgICAg
ICBuZXdDYWxsRnJhbWVbaSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGV4
cGVjdGVkUGFyYW1zXSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgfQpJbmRleDogSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gNTkzODEpCisrKyBKYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2Nyw3ICs0NjcsNiBAQCB2b2lkIEludGVycHJldGVyOjpkdW1wUmVnaXN0ZXJzKENhbGxGcmFt
CiAgICAgcHJpbnRmKCJbUmV0dXJuVmFsdWVSZWdpc3Rlcl0gICAgICB8ICUxMHAgfCAlZCBcbiIs
IGl0LCAoKml0KS5pKCkpOyArK2l0OwogICAgIHByaW50ZigiW0FyZ3VtZW50Q291bnRdICAgICAg
ICAgICAgfCAlMTBwIHwgJWQgXG4iLCBpdCwgKCppdCkuaSgpKTsgKytpdDsKICAgICBwcmludGYo
IltDYWxsZWVdICAgICAgICAgICAgICAgICAgIHwgJTEwcCB8ICVwIFxuIiwgaXQsICgqaXQpLmZ1
bmN0aW9uKCkpOyArK2l0OwotICAgIHByaW50ZigiW09wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXSAg
fCAlMTBwIHwgJXAgXG4iLCBpdCwgKCppdCkuYXJndW1lbnRzKCkpOyArK2l0OwogICAgIHByaW50
ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCiAgICAgaW50IHJlZ2lzdGVyQ291bnQgPSAw
OwpAQCAtNTQwLDEwICs1MzksMTMgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnVu
d2luZENhbAogICAgIGlmIChvbGRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
ICYmIG9sZENvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpKSB7CiAgICAgICAgIHdoaWxl
ICghc2NvcGVDaGFpbi0+b2JqZWN0LT5pbmhlcml0cygmSlNBY3RpdmF0aW9uOjppbmZvKSkKICAg
ICAgICAgICAgIHNjb3BlQ2hhaW4gPSBzY29wZUNoYWluLT5wb3AoKTsKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8SlNBY3RpdmF0aW9uKj4oc2NvcGVDaGFpbi0+b2JqZWN0KS0+Y29weVJlZ2lzdGVycyhj
YWxsRnJhbWUtPm9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzKCkpOwotICAgIH0gZWxzZSBpZiAoQXJn
dW1lbnRzKiBhcmd1bWVudHMgPSBjYWxsRnJhbWUtPm9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzKCkp
IHsKLSAgICAgICAgaWYgKCFhcmd1bWVudHMtPmlzVG9ybk9mZigpKQotICAgICAgICAgICAgYXJn
dW1lbnRzLT5jb3B5UmVnaXN0ZXJzKCk7CisgICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlv
biA9IGFzQWN0aXZhdGlvbihzY29wZUNoYWluLT5vYmplY3QpOworICAgICAgICBhY3RpdmF0aW9u
LT5jb3B5UmVnaXN0ZXJzKCk7CisgICAgICAgIGlmIChKU1ZhbHVlIHYgPSBjYWxsRnJhbWUtPnIo
b2xkQ29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpIC0gMSkuanNWYWx1ZSgpKQorICAgICAg
ICAgICAgYXNBcmd1bWVudHModiktPnNldEFjdGl2YXRpb24oYWN0aXZhdGlvbik7CisgICAgfSBl
bHNlIGlmIChvbGRDb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSkgeworICAgICAgICBpZiAoSlNW
YWx1ZSB2ID0gY2FsbEZyYW1lLT5yKG9sZENvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSAt
IDEpLmpzVmFsdWUoKSkKKyAgICAgICAgICAgIGFzQXJndW1lbnRzKHYpLT5jb3B5UmVnaXN0ZXJz
KCk7CiAgICAgfQogCiAgICAgaWYgKG9sZENvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigp
KQpAQCAtMzc3Niw0MyArMzc3OCw0NiBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICBn
b3RvIHZtX3Rocm93OwogICAgIH0KICAgICBERUZJTkVfT1BDT0RFKG9wX3RlYXJfb2ZmX2FjdGl2
YXRpb24pIHsKLSAgICAgICAgLyogdGVhcl9vZmZfYWN0aXZhdGlvbiBhY3RpdmF0aW9uKHIpCisg
ICAgICAgIC8qIHRlYXJfb2ZmX2FjdGl2YXRpb24gYWN0aXZhdGlvbihyKSBhcmd1bWVudHMocikK
IAotICAgICAgICAgICBDb3B5IGFsbCBsb2NhbHMgYW5kIHBhcmFtZXRlcnMgdG8gbmV3IG1lbW9y
eSBhbGxvY2F0ZWQgb24KLSAgICAgICAgICAgdGhlIGhlYXAsIGFuZCBtYWtlIHRoZSBwYXNzZWQg
YWN0aXZhdGlvbiB1c2UgdGhpcyBtZW1vcnkKLSAgICAgICAgICAgaW4gdGhlIGZ1dHVyZSB3aGVu
IGxvb2tpbmcgdXAgZW50cmllcyBpbiB0aGUgc3ltYm9sIHRhYmxlLgotICAgICAgICAgICBJZiB0
aGVyZSBpcyBhbiAnYXJndW1lbnRzJyBvYmplY3QsIHRoZW4gaXQgd2lsbCBhbHNvIHVzZQotICAg
ICAgICAgICB0aGlzIG1lbW9yeSBmb3Igc3RvcmluZyB0aGUgbmFtZWQgcGFyYW1ldGVycywgYnV0
IG5vdCBhbnkKLSAgICAgICAgICAgZXh0cmEgYXJndW1lbnRzLgorICAgICAgICAgICBDb3B5IGxv
Y2FscyBhbmQgbmFtZWQgcGFyYW1ldGVycyBmcm9tIHRoZSByZWdpc3RlciBmaWxlIHRvIHRoZSBo
ZWFwLgorICAgICAgICAgICBQb2ludCB0aGUgYmluZGluZ3MgaW4gJ2FjdGl2YXRpb24nIGFuZCAn
YXJndW1lbnRzJyB0byB0aGlzIG5ldyBiYWNraW5nCisgICAgICAgICAgIHN0b3JlLiAoTm90ZSB0
aGF0ICdhcmd1bWVudHMnIG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQuIElmIGNyZWF0ZWQsCisg
ICAgICAgICAgICdhcmd1bWVudHMnIGFscmVhZHkgaG9sZHMgYSBjb3B5IG9mIGFueSBleHRyYSAv
IHVubmFtZWQgcGFyYW1ldGVycy4pCiAKLSAgICAgICAgICAgVGhpcyBvcGNvZGUgc2hvdWxkIG9u
bHkgYmUgdXNlZCBpbW1lZGlhdGVseSBiZWZvcmUgb3BfcmV0LgorICAgICAgICAgICBUaGlzIG9w
Y29kZSBhcHBlYXJzIGJlZm9yZSBvcF9yZXQgaW4gZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSBmdWxs
IHNjb3BlIGNoYWlucy4KICAgICAgICAgKi8KIAotICAgICAgICBpbnQgc3JjID0gdlBDWzFdLnUu
b3BlcmFuZDsKKyAgICAgICAgaW50IHNyYzEgPSB2UENbMV0udS5vcGVyYW5kOworICAgICAgICBp
bnQgc3JjMiA9IHZQQ1syXS51Lm9wZXJhbmQ7CiAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmNv
ZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkpOwogCi0gICAgICAgIGFzQWN0aXZhdGlv
bihjYWxsRnJhbWUtPnIoc3JjKS5qc1ZhbHVlKCkpLT5jb3B5UmVnaXN0ZXJzKGNhbGxGcmFtZS0+
b3B0aW9uYWxDYWxsZWVBcmd1bWVudHMoKSk7CisgICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZh
dGlvbiA9IGFzQWN0aXZhdGlvbihjYWxsRnJhbWUtPnIoc3JjMSkuanNWYWx1ZSgpKTsKKyAgICAg
ICAgYWN0aXZhdGlvbi0+Y29weVJlZ2lzdGVycygpOworCisgICAgICAgIGlmIChKU1ZhbHVlIHYg
PSBjYWxsRnJhbWUtPnIoc3JjMiAtIDEpLmpzVmFsdWUoKSkKKyAgICAgICAgICAgIGFzQXJndW1l
bnRzKHYpLT5zZXRBY3RpdmF0aW9uKGFjdGl2YXRpb24pOwogCiAgICAgICAgIHZQQyArPSBPUENP
REVfTEVOR1RIKG9wX3RlYXJfb2ZmX2FjdGl2YXRpb24pOwogICAgICAgICBORVhUX0lOU1RSVUNU
SU9OKCk7CiAgICAgfQogICAgIERFRklORV9PUENPREUob3BfdGVhcl9vZmZfYXJndW1lbnRzKSB7
Ci0gICAgICAgIC8qIHRlYXJfb2ZmX2FyZ3VtZW50cworICAgICAgICAvKiB0ZWFyX29mZl9hcmd1
bWVudHMgYXJndW1lbnRzKHIpCiAKLSAgICAgICAgICAgQ29weSBhbGwgYXJndW1lbnRzIHRvIG5l
dyBtZW1vcnkgYWxsb2NhdGVkIG9uIHRoZSBoZWFwLAotICAgICAgICAgICBhbmQgbWFrZSB0aGUg
J2FyZ3VtZW50cycgb2JqZWN0IHVzZSB0aGlzIG1lbW9yeSBpbiB0aGUKLSAgICAgICAgICAgZnV0
dXJlIHdoZW4gbG9va2luZyB1cCBuYW1lZCBwYXJhbWV0ZXJzLCBidXQgbm90IGFueQotICAgICAg
ICAgICBleHRyYSBhcmd1bWVudHMuIElmIGFuIGFjdGl2YXRpb24gb2JqZWN0IGV4aXN0cyBmb3Ig
dGhlCi0gICAgICAgICAgIGN1cnJlbnQgZnVuY3Rpb24gY29udGV4dCwgdGhlbiB0aGUgdGVhcl9v
ZmZfYWN0aXZhdGlvbgotICAgICAgICAgICBvcGNvZGUgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4K
KyAgICAgICAgICAgQ29weSBuYW1lZCBwYXJhbWV0ZXJzIGZyb20gdGhlIHJlZ2lzdGVyIGZpbGUg
dG8gdGhlIGhlYXAuIFBvaW50IHRoZQorICAgICAgICAgICBiaW5kaW5ncyBpbiAnYXJndW1lbnRz
JyB0byB0aGlzIG5ldyBiYWNraW5nIHN0b3JlLiAoTm90ZSB0aGF0CisgICAgICAgICAgICdhcmd1
bWVudHMnIG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQuIElmIGNyZWF0ZWQsICdhcmd1bWVudHMn
IGFscmVhZHkKKyAgICAgICAgICAgaG9sZHMgYSBjb3B5IG9mIGFueSBleHRyYSAvIHVubmFtZWQg
cGFyYW1ldGVycy4pCiAKLSAgICAgICAgICAgVGhpcyBvcGNvZGUgc2hvdWxkIG9ubHkgYmUgdXNl
ZCBpbW1lZGlhdGVseSBiZWZvcmUgb3BfcmV0LgorICAgICAgICAgICBUaGlzIG9wY29kZSBhcHBl
YXJzIGJlZm9yZSBvcF9yZXQgaW4gZnVuY3Rpb25zIHRoYXQgZG9uJ3QgcmVxdWlyZSBmdWxsCisg
ICAgICAgICAgIHNjb3BlIGNoYWlucywgYnV0IGRvIHVzZSAnYXJndW1lbnRzJy4KICAgICAgICAg
Ki8KIAotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+dXNlc0FyZ3VtZW50
cygpICYmICFjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkpOwor
ICAgICAgICBpbnQgc3JjMSA9IHZQQ1sxXS51Lm9wZXJhbmQ7CisgICAgICAgIEFTU0VSVCghY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpICYmIGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPnVzZXNBcmd1bWVudHMoKSk7CiAKLSAgICAgICAgaWYgKGNhbGxGcmFtZS0+
b3B0aW9uYWxDYWxsZWVBcmd1bWVudHMoKSkKLSAgICAgICAgICAgIGNhbGxGcmFtZS0+b3B0aW9u
YWxDYWxsZWVBcmd1bWVudHMoKS0+Y29weVJlZ2lzdGVycygpOworICAgICAgICBpZiAoSlNWYWx1
ZSB2ID0gY2FsbEZyYW1lLT5yKHNyYzEgLSAxKS5qc1ZhbHVlKCkpCisgICAgICAgICAgICBhc0Fy
Z3VtZW50cyh2KS0+Y29weVJlZ2lzdGVycygpOwogCiAgICAgICAgIHZQQyArPSBPUENPREVfTEVO
R1RIKG9wX3RlYXJfb2ZmX2FyZ3VtZW50cyk7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsK
QEAgLTM4NDgsMTIgKzM4NTMsMTAgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICBERUZJTkVf
T1BDT0RFKG9wX2VudGVyKSB7CiAgICAgICAgIC8qIGVudGVyCiAKLSAgICAgICAgICAgSW5pdGlh
bGl6ZXMgbG9jYWwgdmFyaWFibGVzIHRvIHVuZGVmaW5lZCBhbmQgZmlsbHMgY29uc3RhbnQKLSAg
ICAgICAgICAgcmVnaXN0ZXJzIHdpdGggdGhlaXIgdmFsdWVzLiBJZiB0aGUgY29kZSBibG9jayBy
ZXF1aXJlcyBhbgotICAgICAgICAgICBhY3RpdmF0aW9uLCBlbnRlcl93aXRoX2FjdGl2YXRpb24g
c2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KKyAgICAgICAgICAgSW5pdGlhbGl6ZXMgbG9jYWwgdmFy
aWFibGVzIHRvIHVuZGVmaW5lZC4gSWYgdGhlIGNvZGUgYmxvY2sgcmVxdWlyZXMKKyAgICAgICAg
ICAgYW4gYWN0aXZhdGlvbiwgZW50ZXJfd2l0aF9hY3RpdmF0aW9uIGlzIHVzZWQgaW5zdGVhZC4K
IAotICAgICAgICAgICBUaGlzIG9wY29kZSBzaG91bGQgb25seSBiZSB1c2VkIGF0IHRoZSBiZWdp
bm5pbmcgb2YgYSBjb2RlCi0gICAgICAgICAgIGJsb2NrLgorICAgICAgICAgICBUaGlzIG9wY29k
ZSBhcHBlYXJzIG9ubHkgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGNvZGUgYmxvY2suCiAgICAgICAg
ICovCiAKICAgICAgICAgc2l6ZV90IGkgPSAwOwpAQCAtMzg2OCwxNCArMzg3MSwxMCBAQCBza2lw
X2lkX2N1c3RvbV9zZWxmOgogICAgIERFRklORV9PUENPREUob3BfZW50ZXJfd2l0aF9hY3RpdmF0
aW9uKSB7CiAgICAgICAgIC8qIGVudGVyX3dpdGhfYWN0aXZhdGlvbiBkc3QocikKIAotICAgICAg
ICAgICBJbml0aWFsaXplcyBsb2NhbCB2YXJpYWJsZXMgdG8gdW5kZWZpbmVkLCBmaWxscyBjb25z
dGFudAotICAgICAgICAgICByZWdpc3RlcnMgd2l0aCB0aGVpciB2YWx1ZXMsIGNyZWF0ZXMgYW4g
YWN0aXZhdGlvbiBvYmplY3QsCi0gICAgICAgICAgIGFuZCBwbGFjZXMgdGhlIG5ldyBhY3RpdmF0
aW9uIGJvdGggaW4gZHN0IGFuZCBhdCB0aGUgdG9wCi0gICAgICAgICAgIG9mIHRoZSBzY29wZSBj
aGFpbi4gSWYgdGhlIGNvZGUgYmxvY2sgZG9lcyBub3QgcmVxdWlyZSBhbgotICAgICAgICAgICBh
Y3RpdmF0aW9uLCBlbnRlciBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgorICAgICAgICAgICBJbml0
aWFsaXplcyBsb2NhbCB2YXJpYWJsZXMgdG8gdW5kZWZpbmVkLCBjcmVhdGVzIGFuIGFjdGl2YXRp
b24gb2JqZWN0LAorICAgICAgICAgICBwbGFjZXMgaXQgaW4gZHN0LCBhbmQgcHVzaGVzIGl0IG9u
dG8gdGhlIHNjb3BlIGNoYWluLgogCi0gICAgICAgICAgIFRoaXMgb3Bjb2RlIHNob3VsZCBvbmx5
IGJlIHVzZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGNvZGUKLSAgICAgICAgICAgYmxvY2suCisg
ICAgICAgICAgIFRoaXMgb3Bjb2RlIGFwcGVhcnMgb25seSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEg
Y29kZSBibG9jay4KICAgICAgICAgKi8KIAogICAgICAgICBzaXplX3QgaSA9IDA7CkBAIC0zOTEz
LDMyICszOTEyLDM0IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIE5FWFRfSU5TVFJV
Q1RJT04oKTsKICAgICB9CiAgICAgREVGSU5FX09QQ09ERShvcF9pbml0X2FyZ3VtZW50cykgewot
ICAgICAgICAvKiBjcmVhdGVfYXJndW1lbnRzCisgICAgICAgIC8qIGNyZWF0ZV9hcmd1bWVudHMg
ZHN0KHIpCiAKLSAgICAgICAgICAgSW5pdGlhbGlzZXMgdGhlIGFyZ3VtZW50cyBvYmplY3QgcmVm
ZXJlbmNlIHRvIG51bGwgdG8gZW5zdXJlCi0gICAgICAgICAgIHdlIGNhbiBjb3JyZWN0bHkgZGV0
ZWN0IHRoYXQgd2UgbmVlZCB0byBjcmVhdGUgaXQgbGF0ZXIgKG9yCi0gICAgICAgICAgIGF2b2lk
IGNyZWF0aW5nIGl0IGFsdG9nZXRoZXIpLgorICAgICAgICAgICBJbml0aWFsaXNlcyAnYXJndW1l
bnRzJyB0byBKU1ZhbHVlKCkuCiAKLSAgICAgICAgICAgVGhpcyBvcGNvZGUgc2hvdWxkIG9ubHkg
YmUgdXNlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgY29kZQotICAgICAgICAgICBibG9jay4KKyAg
ICAgICAgICAgVGhpcyBvcGNvZGUgYXBwZWFycyBvbmx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBj
b2RlIGJsb2NrLgogICAgICAgICAgKi8KLSAgICAgICAgY2FsbEZyYW1lLT5yKFJlZ2lzdGVyRmls
ZTo6QXJndW1lbnRzUmVnaXN0ZXIpID0gSlNWYWx1ZSgpOworICAgICAgICBpbnQgZHN0ID0gdlBD
WzFdLnUub3BlcmFuZDsKKworICAgICAgICBjYWxsRnJhbWUtPnIoZHN0KSA9IEpTVmFsdWUoKTsK
KyAgICAgICAgY2FsbEZyYW1lLT5yKGRzdCAtIDEpID0gSlNWYWx1ZSgpOwogICAgICAgICB2UEMg
Kz0gT1BDT0RFX0xFTkdUSChvcF9pbml0X2FyZ3VtZW50cyk7CiAgICAgICAgIE5FWFRfSU5TVFJV
Q1RJT04oKTsKICAgICB9CiAgICAgREVGSU5FX09QQ09ERShvcF9jcmVhdGVfYXJndW1lbnRzKSB7
Ci0gICAgICAgIC8qIGNyZWF0ZV9hcmd1bWVudHMKKyAgICAgICAgLyogY3JlYXRlX2FyZ3VtZW50
cyBkc3QocikKIAogICAgICAgICAgICBDcmVhdGVzIHRoZSAnYXJndW1lbnRzJyBvYmplY3QgYW5k
IHBsYWNlcyBpdCBpbiBib3RoIHRoZQogICAgICAgICAgICAnYXJndW1lbnRzJyBjYWxsIGZyYW1l
IHNsb3QgYW5kIHRoZSBsb2NhbCAnYXJndW1lbnRzJwogICAgICAgICAgICByZWdpc3RlciwgaWYg
aXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gaW5pdGlhbGlzZWQuCiAgICAgICAgICAqLwogICAgICAg
ICAKLSAgICAgICAgIGlmICghY2FsbEZyYW1lLT5yKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRzUmVn
aXN0ZXIpLmpzVmFsdWUoKSkgewotICAgICAgICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0g
bmV3IChnbG9iYWxEYXRhKSBBcmd1bWVudHMoY2FsbEZyYW1lKTsKLSAgICAgICAgICAgICBjYWxs
RnJhbWUtPnNldENhbGxlZUFyZ3VtZW50cyhhcmd1bWVudHMpOwotICAgICAgICAgICAgIGNhbGxG
cmFtZS0+cihSZWdpc3RlckZpbGU6OkFyZ3VtZW50c1JlZ2lzdGVyKSA9IEpTVmFsdWUoYXJndW1l
bnRzKTsKLSAgICAgICAgIH0KKyAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CisK
KyAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIoZHN0KS5qc1ZhbHVlKCkpIHsKKyAgICAgICAgICAg
IEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChnbG9iYWxEYXRhKSBBcmd1bWVudHMoY2FsbEZy
YW1lKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cihkc3QpID0gSlNWYWx1ZShhcmd1bWVudHMp
OworICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGRzdCAtIDEpID0gSlNWYWx1ZShhcmd1bWVudHMp
OworICAgICAgICB9CiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2NyZWF0ZV9hcmd1
bWVudHMpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQpAQCAtNDQyMiwyMCAr
NDQyMywxNSBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpyZXRyaWV2ZUFyZ3VtZW50cyhDCiAgICAg
ICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9ICpjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7
CiAgICAgICAgIGludCBhcmd1bWVudHNJbmRleCA9IHN5bWJvbFRhYmxlLmdldChmdW5jdGlvbkNh
bGxGcmFtZS0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cy51c3RyaW5nKCkucmVwKCkpLmdldElu
ZGV4KCk7CiAgICAgICAgIGlmICghZnVuY3Rpb25DYWxsRnJhbWUtPnIoYXJndW1lbnRzSW5kZXgp
LmpzVmFsdWUoKSkgewotICAgICAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKGNh
bGxGcmFtZSkgQXJndW1lbnRzKGZ1bmN0aW9uQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgIGZ1bmN0
aW9uQ2FsbEZyYW1lLT5zZXRDYWxsZWVBcmd1bWVudHMoYXJndW1lbnRzKTsKLSAgICAgICAgICAg
IGZ1bmN0aW9uQ2FsbEZyYW1lLT5yKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRzUmVnaXN0ZXIpID0g
SlNWYWx1ZShhcmd1bWVudHMpOworICAgICAgICAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1Zh
bHVlKG5ldyAoY2FsbEZyYW1lKSBBcmd1bWVudHMoZnVuY3Rpb25DYWxsRnJhbWUpKTsKKyAgICAg
ICAgICAgIGZ1bmN0aW9uQ2FsbEZyYW1lLT5yKGFyZ3VtZW50c0luZGV4KSA9IGFyZ3VtZW50czsK
KyAgICAgICAgICAgIGZ1bmN0aW9uQ2FsbEZyYW1lLT5yKGFyZ3VtZW50c0luZGV4IC0gMSkgPSBh
cmd1bWVudHM7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbEZyYW1lLT5y
KGFyZ3VtZW50c0luZGV4KS5qc1ZhbHVlKCk7CiAgICAgfQogCi0gICAgQXJndW1lbnRzKiBhcmd1
bWVudHMgPSBmdW5jdGlvbkNhbGxGcmFtZS0+b3B0aW9uYWxDYWxsZWVBcmd1bWVudHMoKTsKLSAg
ICBpZiAoIWFyZ3VtZW50cykgewotICAgICAgICBhcmd1bWVudHMgPSBuZXcgKGZ1bmN0aW9uQ2Fs
bEZyYW1lKSBBcmd1bWVudHMoZnVuY3Rpb25DYWxsRnJhbWUpOwotICAgICAgICBhcmd1bWVudHMt
PmNvcHlSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbEZyYW1lLT5zZXRDYWxsZWVBcmd1bWVudHMo
YXJndW1lbnRzKTsKLSAgICB9Ci0KKyAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoZnVu
Y3Rpb25DYWxsRnJhbWUpIEFyZ3VtZW50cyhmdW5jdGlvbkNhbGxGcmFtZSk7CisgICAgYXJndW1l
bnRzLT5jb3B5UmVnaXN0ZXJzKCk7CiAgICAgcmV0dXJuIGFyZ3VtZW50czsKIH0KIApJbmRleDog
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCShyZXZpc2lvbiA1OTM4MSkKKysrIEph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDcgKzM2LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBjbGFzcyBBcmd1bWVudHM7CiAg
ICAgY2xhc3MgQ29kZUJsb2NrOwogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBKU0Fj
dGl2YXRpb247CkBAIC02Niw3ICs2NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGlu
dDMyX3QgaSgpIGNvbnN0OwogICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24oKSBjb25z
dDsKLSAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHMoKSBjb25zdDsKICAgICAgICAgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUoKSBjb25zdDsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBj
b25zdDsKICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24oKSBjb25zdDsKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCShyZXZpc2lvbiA1OTM4MSkKKysr
IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC05NywyMCArOTcsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBKSVQ7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIENhbGxGcmFtZUhlYWRlckVudHJ5IHsK
LSAgICAgICAgICAgIENhbGxGcmFtZUhlYWRlclNpemUgPSA4LAorICAgICAgICAgICAgQ2FsbEZy
YW1lSGVhZGVyU2l6ZSA9IDcsCiAKLSAgICAgICAgICAgIENvZGVCbG9jayA9IC04LAotICAgICAg
ICAgICAgU2NvcGVDaGFpbiA9IC03LAotICAgICAgICAgICAgQ2FsbGVyRnJhbWUgPSAtNiwKLSAg
ICAgICAgICAgIFJldHVyblBDID0gLTUsIC8vIFRoaXMgaXMgZWl0aGVyIGFuIEluc3RydWN0aW9u
KiBvciBhIHBvaW50ZXIgaW50byBKSVQgZ2VuZXJhdGVkIGNvZGUgc3RvcmVkIGFzIGFuIEluc3Ry
dWN0aW9uKi4KLSAgICAgICAgICAgIFJldHVyblZhbHVlUmVnaXN0ZXIgPSAtNCwKLSAgICAgICAg
ICAgIEFyZ3VtZW50Q291bnQgPSAtMywKLSAgICAgICAgICAgIENhbGxlZSA9IC0yLAotICAgICAg
ICAgICAgT3B0aW9uYWxDYWxsZWVBcmd1bWVudHMgPSAtMSwKKyAgICAgICAgICAgIENvZGVCbG9j
ayA9IC03LAorICAgICAgICAgICAgU2NvcGVDaGFpbiA9IC02LAorICAgICAgICAgICAgQ2FsbGVy
RnJhbWUgPSAtNSwKKyAgICAgICAgICAgIFJldHVyblBDID0gLTQsIC8vIFRoaXMgaXMgZWl0aGVy
IGFuIEluc3RydWN0aW9uKiBvciBhIHBvaW50ZXIgaW50byBKSVQgZ2VuZXJhdGVkIGNvZGUgc3Rv
cmVkIGFzIGFuIEluc3RydWN0aW9uKi4KKyAgICAgICAgICAgIFJldHVyblZhbHVlUmVnaXN0ZXIg
PSAtMywKKyAgICAgICAgICAgIEFyZ3VtZW50Q291bnQgPSAtMiwKKyAgICAgICAgICAgIENhbGxl
ZSA9IC0xLAogICAgICAgICB9OwogCiAgICAgICAgIGVudW0geyBQcm9ncmFtQ29kZVRoaXNSZWdp
c3RlciA9IC1DYWxsRnJhbWVIZWFkZXJTaXplIC0gMSB9OwotICAgICAgICBlbnVtIHsgQXJndW1l
bnRzUmVnaXN0ZXIgPSAwIH07CiAKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBkZWZhdWx0
Q2FwYWNpdHkgPSA1MjQyODg7CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgZGVmYXVsdE1h
eEdsb2JhbHMgPSA4MTkyOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gNTkz
ODEpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU0LDcgKzU0LDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYQog
CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwg
bV9kYXRhKSArIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluLCBtX25vZGUpKSwgcmVnVDEpOyAv
LyBzY29wZUNoYWluCiAKLSAgICBlbWl0U3RvcmUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFJlZ2lz
dGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHMpLCBKU1ZhbHVlKCkpOwogICAgIHN0b3Jl
UHRyKHJlZ1QwLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBSZWdpc3RlckZpbGU6OkNhbGxl
ZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsgLy8gY2FsbGVlCiAgICAg
c3RvcmVQdHIocmVnVDEsIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIFJlZ2lzdGVyRmlsZTo6
U2NvcGVDaGFpbiAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsgLy8gc2Nv
cGVDaGFpbgogfQpAQCAtMzQ3LDcgKzM0Niw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9w
Y29kZUlEIG9wY29kZUkKIAogICAgIC8vIEZhc3QgdmVyc2lvbiBvZiBzdGFjayBmcmFtZSBpbml0
aWFsaXphdGlvbiwgZGlyZWN0bHkgcmVsYXRpdmUgdG8gZWRpLgogICAgIC8vIE5vdGUgdGhhdCB0
aGlzIG9taXRzIHRvIHNldCB1cCBSZWdpc3RlckZpbGU6OkNvZGVCbG9jaywgd2hpY2ggaXMgc2V0
IGluIHRoZSBjYWxsZWUKLSAgICBlbWl0U3RvcmUocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZp
bGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzLCBKU1ZhbHVlKCkpOwogICAgIGVtaXRTdG9yZShy
ZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCByZWdUMSwgcmVnVDApOwogCiAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9k
YXRhKSArIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluLCBtX25vZGUpKSwgcmVnVDEpOyAvLyBu
ZXdTY29wZUNoYWluCkBAIC00MzYsNyArNDM0LDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxJ
bml0aWFsaXplQ2FsbEZyYQogCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNGdW5jdGlvbiwgbV9kYXRhKSArIE9CSkVDVF9PRkZTRVRPRihTY29wZUNoYWluLCBt
X25vZGUpKSwgcmVnVDEpOyAvLyBuZXdTY29wZUNoYWluCiAKLSAgICBzdG9yZVB0cihJbW1QdHIo
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBS
ZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzICogc3RhdGljX2Nhc3Q8aW50Pihz
aXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBSZWdpc3RlckZpbGU6OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSkpKTsKICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdp
c3RlciwgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSkpOwogfQpAQCAtNjM5LDcgKzYzNiw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BD
YWxsKE9wY29kZUlEIG9wY29kZUkKIAogICAgIC8vIEZhc3QgdmVyc2lvbiBvZiBzdGFjayBmcmFt
ZSBpbml0aWFsaXphdGlvbiwgZGlyZWN0bHkgcmVsYXRpdmUgdG8gZWRpLgogICAgIC8vIE5vdGUg
dGhhdCB0aGlzIG9taXRzIHRvIHNldCB1cCBSZWdpc3RlckZpbGU6OkNvZGVCbG9jaywgd2hpY2gg
aXMgc2V0IGluIHRoZSBjYWxsZWUKLSAgICBzdG9yZVB0cihJbW1QdHIoSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSkpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVnaXN0ZXJPZmZzZXQg
KyBSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzKSAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKICAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhjYWxs
RnJhbWVSZWdpc3RlciwgKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZWUpICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZGF0YSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoU2NvcGVDaGFpbiwgbV9ub2RlKSksIHJlZ1QxKTsgLy8gbmV3U2NvcGVDaGFpbgogICAg
IHN0b3JlMzIoSW1tMzIoYXJnQ291bnQpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCAocmVn
aXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHJldmlzaW9uIDU5MzgxKQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwOSwxMiArNzA5LDE5IEBAIHZvaWQg
SklUOjplbWl0X29wX3RlYXJfb2ZmX2FjdGl2YXRpb24oSW4KIHsKICAgICBKSVRTdHViQ2FsbCBz
dHViQ2FsbCh0aGlzLCBjdGlfb3BfdGVhcl9vZmZfYWN0aXZhdGlvbik7CiAgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCAtIDEpOwogICAg
IHN0dWJDYWxsLmNhbGwoKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfdGVhcl9vZmZfYXJndW1l
bnRzKEluc3RydWN0aW9uKikKK3ZvaWQgSklUOjplbWl0X29wX3RlYXJfb2ZmX2FyZ3VtZW50cyhJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEpJVFN0dWJDYWxsKHRoaXMs
IGN0aV9vcF90ZWFyX29mZl9hcmd1bWVudHMpLmNhbGwoKTsKKyAgICBpbnQgZHN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKworICAgIEp1bXAgYXJnc05vdENyZWF0ZWQgPSBi
cmFuY2gzMihFcXVhbCwgdGFnRm9yKGRzdCAtIDEpLCBJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVl
VGFnKSk7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3RlYXJfb2ZmX2Fy
Z3VtZW50cyk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoZHN0IC0gMSk7CisgICAgc3R1YkNh
bGwuY2FsbCgpOworICAgIGFyZ3NOb3RDcmVhdGVkLmxpbmsodGhpcyk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX25ld19hcnJheShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MTUzMiwyMiArMTUzOSwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcl93aXRoX2FjdGl2YXRp
b24oCiAgICAgSklUU3R1YkNhbGwodGhpcywgY3RpX29wX3B1c2hfYWN0aXZhdGlvbikuY2FsbChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bf
Y3JlYXRlX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiopCit2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVf
YXJndW1lbnRzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSnVtcCBh
cmdzQ3JlYXRlZCA9IGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdGb3IoUmVnaXN0ZXJGaWxlOjpBcmd1
bWVudHNSZWdpc3RlciwgY2FsbEZyYW1lUmVnaXN0ZXIpLCBJbW0zMihKU1ZhbHVlOjpFbXB0eVZh
bHVlVGFnKSk7CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKworICAgIEp1bXAgYXJnc0NyZWF0ZWQgPSBicmFuY2gzMihOb3RFcXVhbCwgdGFnRm9y
KGRzdCksIEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKIAotICAgIC8vIElmIHdlIGdl
dCBoZXJlIHRoZSBhcmd1bWVudHMgcG9pbnRlciBpcyBhIG51bGwgY2VsbCAtIGkuZS4gYXJndW1l
bnRzIG5lZWQgbGF6eSBjcmVhdGlvbi4KICAgICBpZiAobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1l
dGVycyA9PSAxKQogICAgICAgICBKSVRTdHViQ2FsbCh0aGlzLCBjdGlfb3BfY3JlYXRlX2FyZ3Vt
ZW50c19ub19wYXJhbXMpLmNhbGwoKTsKICAgICBlbHNlCiAgICAgICAgIEpJVFN0dWJDYWxsKHRo
aXMsIGN0aV9vcF9jcmVhdGVfYXJndW1lbnRzKS5jYWxsKCk7CiAKKyAgICBlbWl0U3RvcmUoZHN0
LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRTdG9yZShkc3QgLSAxLCByZWdUMSwgcmVnVDApOwor
CiAgICAgYXJnc0NyZWF0ZWQubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaW5p
dF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qKQordm9pZCBKSVQ6OmVtaXRfb3BfaW5pdF9hcmd1bWVu
dHMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0U3RvcmUoUmVn
aXN0ZXJGaWxlOjpBcmd1bWVudHNSZWdpc3RlciwgSlNWYWx1ZSgpLCBjYWxsRnJhbWVSZWdpc3Rl
cik7CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
KworICAgIGVtaXRTdG9yZShkc3QsIEpTVmFsdWUoKSk7CisgICAgZW1pdFN0b3JlKGRzdCAtIDEs
IEpTVmFsdWUoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NvbnZlcnRfdGhpcyhJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkocmV2aXNpb24gNTkzODEpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTczOSwxMiArNzM5LDE5IEBAIHZvaWQgSklUOjplbWl0X29wX3Rl
YXJfb2ZmX2FjdGl2YXRpb24oSW4KIHsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBj
dGlfb3BfdGVhcl9vZmZfYWN0aXZhdGlvbik7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDIpOworICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQgLSAxLCByZWdUMik7CiAgICAg
c3R1YkNhbGwuY2FsbCgpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF90ZWFyX29mZl9hcmd1bWVu
dHMoSW5zdHJ1Y3Rpb24qKQordm9pZCBKSVQ6OmVtaXRfb3BfdGVhcl9vZmZfYXJndW1lbnRzKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgSklUU3R1YkNhbGwodGhpcywg
Y3RpX29wX3RlYXJfb2ZmX2FyZ3VtZW50cykuY2FsbCgpOworICAgIHVuc2lnbmVkIGRzdCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisKKyAgICBKdW1wIGFyZ3NOb3RDcmVhdGVk
ID0gYnJhbmNoVGVzdFB0cihaZXJvLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBzaXplb2Yo
UmVnaXN0ZXIpICogKGRzdCAtIDEpKSk7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywg
Y3RpX29wX3RlYXJfb2ZmX2FyZ3VtZW50cyk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoZHN0
IC0gMSwgcmVnVDIpOworICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBhcmdzTm90Q3JlYXRlZC5s
aW5rKHRoaXMpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKQEAgLTE0MDcsMTkgKzE0MTQsMjYgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW50ZXJfd2l0aF9hY3RpdmF0aW9uKAogICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXNo
X2FjdGl2YXRpb24pLmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qKQordm9pZCBK
SVQ6OmVtaXRfb3BfY3JlYXRlX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIEp1bXAgYXJnc0NyZWF0ZWQgPSBicmFuY2hUZXN0UHRyKE5vblplcm8sIEFk
ZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBSZWdpc3RlckZpbGU6
OkFyZ3VtZW50c1JlZ2lzdGVyKSk7CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKKworICAgIEp1bXAgYXJnc0NyZWF0ZWQgPSBicmFuY2hUZXN0UHRy
KE5vblplcm8sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBk
c3QpKTsKICAgICBpZiAobV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyA9PSAxKQogICAgICAg
ICBKSVRTdHViQ2FsbCh0aGlzLCBjdGlfb3BfY3JlYXRlX2FyZ3VtZW50c19ub19wYXJhbXMpLmNh
bGwoKTsKICAgICBlbHNlCiAgICAgICAgIEpJVFN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jcmVhdGVf
YXJndW1lbnRzKS5jYWxsKCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0IC0gMSk7CiAgICAgYXJnc0NyZWF0ZWQubGluayh0
aGlzKTsKIH0KLSAgICAKLXZvaWQgSklUOjplbWl0X29wX2luaXRfYXJndW1lbnRzKEluc3RydWN0
aW9uKikKKwordm9pZCBKSVQ6OmVtaXRfb3BfaW5pdF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBzdG9yZVB0cihJbW1QdHIoMCksIEFkZHJlc3MoY2Fs
bEZyYW1lUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBSZWdpc3RlckZpbGU6OkFyZ3VtZW50
c1JlZ2lzdGVyKSk7CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKKworICAgIHN0b3JlUHRyKEltbVB0cigwKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdp
c3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIGRzdCkpOworICAgIHN0b3JlUHRyKEltbVB0cigwKSwg
QWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIChkc3QgLSAxKSkp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jb252ZXJ0X3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gNTkz
ODEpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDA3LDIyICsyMDA3LDIwIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVl
LCBvcF8KICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJ
T04odm9pZCwgb3BfY3JlYXRlX2FyZ3VtZW50cykKK0RFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29k
ZWRKU1ZhbHVlLCBvcF9jcmVhdGVfYXJndW1lbnRzKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19G
UkFNRShzdGFja0ZyYW1lKTsKIAogICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChzdGFj
a0ZyYW1lLmdsb2JhbERhdGEpIEFyZ3VtZW50cyhzdGFja0ZyYW1lLmNhbGxGcmFtZSk7Ci0gICAg
c3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNldENhbGxlZUFyZ3VtZW50cyhhcmd1bWVudHMpOwotICAg
IHN0YWNrRnJhbWUuY2FsbEZyYW1lW1JlZ2lzdGVyRmlsZTo6QXJndW1lbnRzUmVnaXN0ZXJdID0g
SlNWYWx1ZShhcmd1bWVudHMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShh
cmd1bWVudHMpKTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfY3JlYXRlX2Fy
Z3VtZW50c19ub19wYXJhbXMpCitERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwg
b3BfY3JlYXRlX2FyZ3VtZW50c19ub19wYXJhbXMpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZS
QU1FKHN0YWNrRnJhbWUpOwogCiAgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKHN0YWNr
RnJhbWUuZ2xvYmFsRGF0YSkgQXJndW1lbnRzKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBBcmd1bWVu
dHM6Ok5vUGFyYW1ldGVycyk7Ci0gICAgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNldENhbGxlZUFy
Z3VtZW50cyhhcmd1bWVudHMpOwotICAgIHN0YWNrRnJhbWUuY2FsbEZyYW1lW1JlZ2lzdGVyRmls
ZTo6QXJndW1lbnRzUmVnaXN0ZXJdID0gSlNWYWx1ZShhcmd1bWVudHMpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShhcmd1bWVudHMpKTsKIH0KIAogREVGSU5FX1NUVUJfRlVO
Q1RJT04odm9pZCwgb3BfdGVhcl9vZmZfYWN0aXZhdGlvbikKQEAgLTIwMzAsNyArMjAyOCwxMCBA
QCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF90ZWFyX29mZl9hCiAgICAgU1RVQl9JTklU
X1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCiAgICAgQVNTRVJUKHN0YWNrRnJhbWUuY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+bmVlZHNGdWxsU2NvcGVDaGFpbigpKTsKLSAgICBhc0FjdGl2YXRp
b24oc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSktPmNvcHlSZWdpc3RlcnMoc3RhY2tGcmFt
ZS5jYWxsRnJhbWUtPm9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzKCkpOworICAgIEpTQWN0aXZhdGlv
biogYWN0aXZhdGlvbiA9IGFzQWN0aXZhdGlvbihzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgp
KTsKKyAgICBhY3RpdmF0aW9uLT5jb3B5UmVnaXN0ZXJzKCk7CisgICAgaWYgKEpTVmFsdWUgdiA9
IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCkpCisgICAgICAgIGFzQXJndW1lbnRzKHYpLT5z
ZXRBY3RpdmF0aW9uKGFjdGl2YXRpb24pOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
LCBvcF90ZWFyX29mZl9hcmd1bWVudHMpCkBAIC0yMDM4LDggKzIwMzksNyBAQCBERUZJTkVfU1RV
Ql9GVU5DVElPTih2b2lkLCBvcF90ZWFyX29mZl9hCiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1F
KHN0YWNrRnJhbWUpOwogCiAgICAgQVNTRVJUKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+dXNlc0FyZ3VtZW50cygpICYmICFzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSk7Ci0gICAgaWYgKHN0YWNrRnJhbWUuY2FsbEZyYW1l
LT5vcHRpb25hbENhbGxlZUFyZ3VtZW50cygpKQotICAgICAgICBzdGFja0ZyYW1lLmNhbGxGcmFt
ZS0+b3B0aW9uYWxDYWxsZWVBcmd1bWVudHMoKS0+Y29weVJlZ2lzdGVycygpOworICAgIGFzQXJn
dW1lbnRzKHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkpLT5jb3B5UmVnaXN0ZXJzKCk7CiB9
CiAKIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3Byb2ZpbGVfd2lsbF9jYWxsKQpJbmRl
eDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDU5MzgxKQorKysgSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwMSwxNSArMzAxLDE3IEBAIGV4dGVy
biAiQyIgewogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9jYWxsX2V2YWwoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3Bf
Y29uc3RydWN0X05vdEpTQ29uc3RydWN0KFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgRW5j
b2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2NvbnZlcnRfdGhpcyhTVFVCX0FSR1NfREVDTEFS
QVRJT04pOworICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9jcmVhdGVfYXJndW1l
bnRzKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CisgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIg
Y3RpX29wX2NyZWF0ZV9hcmd1bWVudHNfbm9fcGFyYW1zKFNUVUJfQVJHU19ERUNMQVJBVElPTik7
CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2RlbF9ieV9pZChTVFVCX0FSR1Nf
REVDTEFSQVRJT04pOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9kZWxfYnlf
dmFsKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIg
Y3RpX29wX2RpdihTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJ
VF9TVFVCIGN0aV9vcF9nZXRfYnlfaWQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBFbmNv
ZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwoU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfZ2V0X2J5
X2lkX2N1c3RvbV9zdHViKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgRW5jb2RlZEpTVmFs
dWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9nZW5lcmljKFNUVUJfQVJHU19ERUNMQVJBVElP
Tik7Ci0gICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9tZXRob2Rf
Y2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RV
QiBjdGlfb3BfZ2V0X2J5X2lkX2dldHRlcl9zdHViKFNUVUJfQVJHU19ERUNMQVJBVElPTik7Ci0g
ICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9jdXN0b21fc3R1YihT
VFVCX0FSR1NfREVDTEFSQVRJT04pOworICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9v
cF9nZXRfYnlfaWRfbWV0aG9kX2NoZWNrKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgRW5j
b2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9wcm90b19mYWlsKFNUVUJfQVJH
U19ERUNMQVJBVElPTik7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX2dldF9i
eV9pZF9wcm90b19saXN0KFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgRW5jb2RlZEpTVmFs
dWUgSklUX1NUVUIgY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0X2Z1bGwoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKTsKQEAgLTM1Myw4ICszNTUsOCBAQCBleHRlcm4gIkMiIHsKICAgICBFbmNvZGVk
SlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfdG9fcHJpbWl0aXZlKFNUVUJfQVJHU19ERUNMQVJBVElP
Tik7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX3R5cGVvZihTVFVCX0FSR1Nf
REVDTEFSQVRJT04pOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF91cnNoaWZ0
KFNUVUJfQVJHU19ERUNMQVJBVElPTik7Ci0gICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3Rp
X3ZtX3Rocm93KFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklU
X1NUVUIgY3RpX3RvX29iamVjdChTVFVCX0FSR1NfREVDTEFSQVRJT04pOworICAgIEVuY29kZWRK
U1ZhbHVlIEpJVF9TVFVCIGN0aV92bV90aHJvdyhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAg
IEpTT2JqZWN0KiBKSVRfU1RVQiBjdGlfb3BfY29uc3RydWN0X0pTQ29uc3RydWN0KFNUVUJfQVJH
U19ERUNMQVJBVElPTik7CiAgICAgSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9vcF9uZXdfYXJyYXko
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBKU09iamVjdCogSklUX1NUVUIgY3RpX29wX25l
d19lcnJvcihTVFVCX0FSR1NfREVDTEFSQVRJT04pOwpAQCAtMzc4LDggKzM4MCw2IEBAIGV4dGVy
biAiQyIgewogICAgIGludCBKSVRfU1RVQiBjdGlfb3BfbG9vcF9pZl9sZXNzZXEoU1RVQl9BUkdT
X0RFQ0xBUkFUSU9OKTsKICAgICBpbnQgSklUX1NUVUIgY3RpX3RpbWVvdXRfY2hlY2soU1RVQl9B
UkdTX0RFQ0xBUkFUSU9OKTsKICAgICBpbnQgSklUX1NUVUIgY3RpX2hhc19wcm9wZXJ0eShTVFVC
X0FSR1NfREVDTEFSQVRJT04pOwotICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX2NyZWF0ZV9hcmd1
bWVudHMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKLSAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9j
cmVhdGVfYXJndW1lbnRzX25vX3BhcmFtcyhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZv
aWQgSklUX1NUVUIgY3RpX29wX2RlYnVnKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9p
ZCBKSVRfU1RVQiBjdGlfb3BfZW5kKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBK
SVRfU1RVQiBjdGlfb3Bfam1wX3Njb3BlcyhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwpJbmRleDog
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiA1OTM4MSkKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw3ICsyMTYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAKICAgICAvLyBUaGlzIEpTQWN0aXZhdGlvbiBm
dW5jdGlvbiBpcyBkZWZpbmVkIGhlcmUgc28gaXQgY2FuIGdldCBhdCBBcmd1bWVudHM6OnNldFJl
Z2lzdGVycy4KLSAgICBpbmxpbmUgdm9pZCBKU0FjdGl2YXRpb246OmNvcHlSZWdpc3RlcnMoQXJn
dW1lbnRzKiBhcmd1bWVudHMpCisgICAgaW5saW5lIHZvaWQgSlNBY3RpdmF0aW9uOjpjb3B5UmVn
aXN0ZXJzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghZCgpLT5yZWdpc3RlckFycmF5KTsKIApA
QCAtMjMyLDE4ICsyMzIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBSZWdpc3Rlciog
cmVnaXN0ZXJBcnJheSA9IGNvcHlSZWdpc3RlckFycmF5KGQoKS0+cmVnaXN0ZXJzIC0gcmVnaXN0
ZXJPZmZzZXQsIHJlZ2lzdGVyQXJyYXlTaXplKTsKICAgICAgICAgc2V0UmVnaXN0ZXJzKHJlZ2lz
dGVyQXJyYXkgKyByZWdpc3Rlck9mZnNldCwgcmVnaXN0ZXJBcnJheSk7Ci0gICAgICAgIGlmIChh
cmd1bWVudHMgJiYgIWFyZ3VtZW50cy0+aXNUb3JuT2ZmKCkpCi0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDxBcmd1bWVudHMqPihhcmd1bWVudHMpLT5zZXRBY3RpdmF0aW9uKHRoaXMpOwogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgQXJndW1lbnRzKiBSZWdpc3Rlcjo6YXJndW1lbnRzKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmIChqc1ZhbHVlKCkgPT0gSlNWYWx1ZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBhc0FyZ3VtZW50cyhqc1ZhbHVlKCkpOwotICAg
IH0KLSAgICAKLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBBcmd1bWVudHNfaApJ
bmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDU5MzgxKQorKysg
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
OCw2ICsyNzgsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgdGhpcywgc2NvcGVDaGFpbik7CiAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgZWl0aGVyIGNhbGwgb3IgY29uc3Ry
dWN0IGJ5dGVjb2RlLiBUaGlzIGNhbiBiZSBhcHByb3ByaWF0ZQorICAgICAgICAvLyBmb3IgYW5z
d2VyaW5nIHF1ZXN0aW9ucyB0aGF0IHRoYXQgZG9uJ3QgdmFyeSBiZXR3ZWVuIGNhbGwgYW5kIGNv
bnN0cnVjdCAtLQorICAgICAgICAvLyBmb3IgZXhhbXBsZSwgYXJndW1lbnRzUmVnaXN0ZXIoKS4K
KyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2smIGdlbmVyYXRlZEJ5dGVDb2RlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gKm1fY29kZUJsb2NrRm9yQ2FsbDsKKyAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdCk7CisgICAgICAgICAgICByZXR1cm4gKm1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0OworICAgICAgICB9CiAKICAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2smIGJ5dGVjb2RlRm9y
Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkgCiAg
ICAgICAgIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHJl
dmlzaW9uIDU5MzgxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCwxMSBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6bWFy
a0NoaWxkcmVuKE1hcmtTdGFjCiAKIGJvb2wgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5hcmd1bWVudHMpIHsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgZ2V0QXJn
dW1lbnRzR2V0dGVyKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBpZiAo
c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKQEAgLTc4LDEyICs4Myw2IEBAIGJvb2wgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNs
b3QoRXgKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgLy8gT25seSByZXR1cm4g
dGhlIGJ1aWx0LWluIGFyZ3VtZW50cyBvYmplY3QgaWYgaXQgd2Fzbid0IG92ZXJyaWRkZW4gYWJv
dmUuCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1l
bnRzKSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIGdldEFyZ3VtZW50c0dldHRlcigp
KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCiAgICAgLy8gV2UgZG9uJ3QgY2FsbCB0
aHJvdWdoIHRvIEpTT2JqZWN0IGJlY2F1c2UgdGhlcmUncyBubyB3YXkgdG8gZ2l2ZSBhbiAKICAg
ICAvLyBhY3RpdmF0aW9uIG9iamVjdCBnZXR0ZXIgcHJvcGVydGllcyBvciBhIHByb3RvdHlwZS4K
ICAgICBBU1NFUlQoIWhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSk7CkBAIC0xNDAsMjYgKzEz
OSwxOSBAQCBib29sIEpTQWN0aXZhdGlvbjo6aXNEeW5hbWljU2NvcGUoYm9vbCYgCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1KU1ZhbHVlIEpTQWN0aXZhdGlvbjo6YXJndW1lbnRzR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCitKU1Zh
bHVlIEpTQWN0aXZhdGlvbjo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUgc2xv
dEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQogewogICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlv
biA9IGFzQWN0aXZhdGlvbihzbG90QmFzZSk7Ci0KLSAgICBpZiAoYWN0aXZhdGlvbi0+ZCgpLT5m
dW5jdGlvbkV4ZWN1dGFibGUtPnVzZXNBcmd1bWVudHMoKSkgewotICAgICAgICBQcm9wZXJ0eVNs
b3Qgc2xvdDsKLSAgICAgICAgYWN0aXZhdGlvbi0+c3ltYm9sVGFibGVHZXQoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmFyZ3VtZW50cywgc2xvdCk7Ci0gICAgICAgIHJldHVybiBzbG90LmdldFZhbHVl
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpOwotICAgIH0KLQogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUoYWN0aXZhdGlvbi0+ZCgpLT5y
ZWdpc3RlcnMpOwotICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gY2FsbEZyYW1lLT5vcHRpb25h
bENhbGxlZUFyZ3VtZW50cygpOwotICAgIGlmICghYXJndW1lbnRzKSB7Ci0gICAgICAgIGFyZ3Vt
ZW50cyA9IG5ldyAoY2FsbEZyYW1lKSBBcmd1bWVudHMoY2FsbEZyYW1lKTsKLSAgICAgICAgYXJn
dW1lbnRzLT5jb3B5UmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxGcmFtZS0+c2V0Q2FsbGVlQXJn
dW1lbnRzKGFyZ3VtZW50cyk7CisgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0gYWN0aXZhdGlv
bi0+ZCgpLT5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVDb2RlKCkuYXJndW1lbnRz
UmVnaXN0ZXIoKTsKKyAgICBpZiAoIWNhbGxGcmFtZS0+cihhcmd1bWVudHNSZWdpc3RlcikuanNW
YWx1ZSgpKSB7CisgICAgICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZShuZXcgKGNhbGxG
cmFtZSkgQXJndW1lbnRzKGNhbGxGcmFtZSkpOworICAgICAgICBjYWxsRnJhbWUtPnIoYXJndW1l
bnRzUmVnaXN0ZXIpID0gYXJndW1lbnRzOworICAgICAgICBjYWxsRnJhbWUtPnIoYXJndW1lbnRz
UmVnaXN0ZXIgLSAxKSA9IGFyZ3VtZW50czsKICAgICB9Ci0gICAgQVNTRVJUKGFyZ3VtZW50cy0+
aW5oZXJpdHMoJkFyZ3VtZW50czo6aW5mbykpOwogCi0gICAgcmV0dXJuIGFyZ3VtZW50czsKKyAg
ICBBU1NFUlQoY2FsbEZyYW1lLT5yKGFyZ3VtZW50c1JlZ2lzdGVyKS5qc1ZhbHVlKCkuaW5oZXJp
dHMoJkFyZ3VtZW50czo6aW5mbykpOworICAgIHJldHVybiBjYWxsRnJhbWUtPnIoYXJndW1lbnRz
UmVnaXN0ZXIpLmpzVmFsdWUoKTsKIH0KIAogLy8gVGhlc2UgdHdvIGZ1bmN0aW9ucyBzZXJ2ZSB0
aGUgcHVycG9zZSBvZiBpc29sYXRpbmcgdGhlIGNvbW1vbiBjYXNlIGZyb20gYQpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCShyZXZpc2lvbiA1OTM4MSkKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcg
KzYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogdG9U
aGlzT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwogCi0gICAgICAgIHZvaWQgY29weVJlZ2lzdGVy
cyhBcmd1bWVudHMqIGFyZ3VtZW50cyk7CisgICAgICAgIHZvaWQgY29weVJlZ2lzdGVycygpOwog
ICAgICAgICAKICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNv
bnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5m
bzsK
</data>
<flag name="review"
          id="40608"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="40609"
          type_id="3"
          status="-"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>