<?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>162587</bug_id>
          
          <creation_ts>2016-09-26 18:47:24 -0700</creation_ts>
          <short_desc>[JSC] op_negate should work with any type</short_desc>
          <delta_ts>2016-10-14 19:21:59 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1233687</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-09-26 18:47:24 -0700</bug_when>
    <thetext>[JSC] op_negate should with any type</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233689</commentid>
    <comment_count>1</comment_count>
      <attachid>289900</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-09-26 19:09:32 -0700</bug_when>
    <thetext>Created attachment 289900
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234551</commentid>
    <comment_count>2</comment_count>
      <attachid>289900</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-28 14:29:02 -0700</bug_when>
    <thetext>Comment on attachment 289900
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:215
&gt; +    case ArithNegate:

Can this be used in the IR outside of op_negate? If not, why would this ever have side effects as you mentioned its input is always a number. 

Also, with respect to naming, it&apos;s weird that ArithNegate covers all types but we break up add to ArithAdd and ValueAdd. I wonder if we should switch add to match this? Or switch this to match add? I&apos;m not sure what other nodes do in terms of naming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234599</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-09-28 16:34:56 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Can this be used in the IR outside of op_negate? If not, why would this ever
&gt; have side effects as you mentioned its input is always a number. 

If the input is a cell, there can be side effects.

&gt; Also, with respect to naming, it&apos;s weird that ArithNegate covers all types
&gt; but we break up add to ArithAdd and ValueAdd. I wonder if we should switch
&gt; add to match this? Or switch this to match add? I&apos;m not sure what other
&gt; nodes do in terms of naming.

ArithAdd and ValueAdd is a bit different.
ArithAdd is the one handling only numbers, ValueAdd can handle number and strings.

ArithNeg can only deal with number.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237914</commentid>
    <comment_count>4</comment_count>
      <attachid>289900</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-07 19:44:45 -0700</bug_when>
    <thetext>Comment on attachment 289900
Patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:977
&gt; +                    ASSERT_WITH_MESSAGE(!arithProfile-&gt;didObserveNonNumber(), &quot;op_negate starts with to_number, it should only produce numbers.&quot;);

I was confused by reading this line of code earlier. I remember thinking by reading this that we explicitly emit to_number before each negate in the bytecode generation. However, this means that we only *produce* numbers. I wonder if we can either make that more explicit through your assert message, or through the name of the various methods on ArithProfile since ArithProfile now represents both inputs and outputs.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:2519
&gt; +            DFG_ASSERT(m_graph, m_node, m_node-&gt;child1().useKind() == UntypedUse);

I wonder if it makes sense putting this assertion the compileMathIC since that may be called by other callers and we want to make sure that lowJSValue() is indeed the correct thing to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240535</commentid>
    <comment_count>5</comment_count>
      <attachid>291697</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-10-14 18:46:50 -0700</bug_when>
    <thetext>Created attachment 291697
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240543</commentid>
    <comment_count>6</comment_count>
      <attachid>291697</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-14 19:21:55 -0700</bug_when>
    <thetext>Comment on attachment 291697
Patch for landing

Clearing flags on attachment: 291697

Committed r207369: &lt;http://trac.webkit.org/changeset/207369&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240544</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-14 19:21:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289900</attachid>
            <date>2016-09-26 19:09:32 -0700</date>
            <delta_ts>2016-10-14 18:46:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162587-20160926190635.patch</filename>
            <type>text/plain</type>
            <size>53641</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2MzkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
NzhkMmNmYjRhZGRkNTMyZDg3OWYwNGIxNWRkMjcwYTQ4YjU0M2QxLi4xODI3ZDQwZGFhMjI3ZWIx
ZjEwNWMzYWE3NzhjM2FiOWVjNDYwMjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OSBAQAorMjAxNi0wOS0yNiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBvcF9uZWdhdGUgc2hvdWxkIHdpdGggYW55IHR5cGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjU4NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAg
QXJpdGhOZWdhdGUgaXMgcXVpdGUgc2ltcGxlLiBJZiB0aGUgaW5wdXQgaXMgZG91YmxlLCB0aGUg
b3V0cHV0CisgICAgICAgIGlzIGRvdWJsZS4gVGhlIG90aGVyIGNhc2VzIGFyZSBzZXQgZnJvbSB0
aGUgTExJbnQgc2xvdyBjYXNlLgorCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bWFrZVNhZmUpOgorICAgICAg
ICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6
CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmZpeHVwTm9kZSk6CisKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJhbmdlT3B0
aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICBUd2VhayBhIGJpdCB0aGUgSW50ZWdlclJhbmdl
T3B0aW1pemF0aW9uUGhhc2Ugd2hlbiBzaW1wbGlmeWluZworICAgICAgICBBcml0aEFicyB0byBB
cml0aE5lZ2F0ZS4KKyAgICAgICAgV2Ugc2hvdWxkIG5vdCBkbyB0aGUgY29udmVyc2lvbiBpZiB0
aGUgdGFyZ2V0IG5vZGVzIE9TUiBFeGl0cworICAgICAgICBvbiBkaWZmZXJlbnQgaW5wdXQgdGhh
biB0aGUgc291cmNlIG5vZGUuCisKKyAgICAgICAgSW4gcGFydGljdWxhciwgQ2hlY2tlZCBBcml0
aE5lZ2F0ZSBleGl0cyBvbiB6ZXJvIHdoaWxlCisgICAgICAgIEFyaXRoQWJzIGhhcyBub3QgcHJv
YmxlbSB3aXRoIGl0LgorICAgICAgICBVbmNoZWNrZWQgQXJpdGhBYnMoKSBkbyBub3QgT1NSIEV4
aXQgb24gSU5UX01JTiwgQXJpdGhOZWcKKyAgICAgICAgc2hvdWxkIG5vdCBlaXRoZXIuCisKKyAg
ICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVNYXRoSUMpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAg
ICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVBcml0aE5lZ2F0ZSk6CisKKyAgICAgICAgKiBqaXQvSklUTmVn
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUTmVnR2VuZXJhdG9yOjpnZW5lcmF0ZUZh
c3RQYXRoKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIEFkZCBy
ZXN1bHQgcHJvZmlsaW5nIGluIGJhc2VsaW5lIHRvIGhhdmUgdHlwZXMgd2UgY2FuIHVzZQorICAg
ICAgICBpbiBERkcgYW5kIEZUTC4KKwogMjAxNi0wOS0yNiAgQmVuamFtaW4gUG91bGFpbiAgPGJl
bmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0pTQ10gU2hyaW5rIHRoZSBNYXRoIGlubGlu
ZSBjYWNoZXMgc29tZSBtb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggOGM3NDEyNjYyNjVjODE0
ODA2ZjFmMGZiNzE0ODM3ZTIzYzUwZGM4ZC4uMjgwNGMwMDY1NTExMDcwNTBjZDU2NjU5NWQ3YzFk
MmYwYzM5NTJkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtNjU3LDcgKzY1Nyw4IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLm1fdHlwZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBl
ZFVzZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0J5dGVjb2RlTnVt
YmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCAw
NDUyMjgwZGQyNmY0MGIwYmNhNDVkMzg1MWQxMTBkZjQxNmEwZmE3Li43ZjBlMzk2ZDFjODdhMDE4
OTM3NjUxZTcyMDI4YmM5NDU2MGQxZjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtOTczLDYgKzk3MywxNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTWF5SGF2ZU5vbk51
bWJlclJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWFyaXRoUHJvZmlsZS0+ZGlkT2JzZXJ2ZU5vbk51bWJl
cigpLCAib3BfbmVnYXRlIHN0YXJ0cyB3aXRoIHRvX251bWJlciwgaXQgc2hvdWxkIG9ubHkgcHJv
ZHVjZSBudW1iZXJzLiIpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUt
Pmxoc09ic2VydmVkVHlwZSgpLnNhd051bWJlcigpIHx8IGFyaXRoUHJvZmlsZS0+ZGlkT2JzZXJ2
ZURvdWJsZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2Rl
TWF5SGF2ZURvdWJsZVJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcml0aFByb2Zp
bGUtPmRpZE9ic2VydmVOZWdaZXJvRG91YmxlKCkgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVnYXRpdmVaZXJvKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZU1heU5lZ1plcm9JbkJhc2Vs
aW5lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZS0+ZGlkT2JzZXJ2ZUlu
dDMyT3ZlcmZsb3coKSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdykpCisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlPdmVyZmxvd0ludDMySW5CYXNlbGluZSk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTk5MCwxNCArMTAwMSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VG
bGFncyhOb2RlTWF5T3ZlcmZsb3dJbnQzMkluQmFzZWxpbmUpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZToKLSAg
ICAgICAgICAgICAgICAvLyBDdXJyZW50bHkgd2UgY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZSBi
ZXR3ZWVuIGEgbmVnYXRpb24gb3ZlcmZsb3dpbmcKLSAgICAgICAgICAgICAgICAvLyAoaS5lLiAt
KDEgPDwgMzEpKSBvciBnZW5lcmF0aW5nIG5lZ2F0aXZlIHplcm8gKGkuZS4gLTApLiBJZiBpdCB0
b29rIHNsb3cKLSAgICAgICAgICAgICAgICAvLyBwYXRoIHRoZW4gd2UgYXNzdW1lIHRoYXQgaXQg
ZGlkIGJvdGggb2YgdGhvc2UgdGhpbmdzLgotICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxh
Z3MoTm9kZU1heU92ZXJmbG93SW50MzJJbkJhc2VsaW5lKTsKLSAgICAgICAgICAgICAgICBub2Rl
LT5tZXJnZUZsYWdzKE5vZGVNYXlOZWdaZXJvSW5CYXNlbGluZSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAppbmRleCBjMWMzZmRkZGI3YTdhNjBiNDY1MmExN2NhZTFhOTgzZjhjYWU5
NjExLi4yZmRiN2JkYjlkN2RmOTIyZjQ1YTc4OTkxN2U5NDg5MzEzMGMzMzFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaApAQCAtMjEyLDYgKzIxMiwxNyBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3Rv
ciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKIAorICAg
IGNhc2UgQXJpdGhOZWdhdGU6CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gSW50MzJVc2UKKyAgICAgICAgICAgIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBE
b3VibGVSZXBVc2UKKyAgICAgICAgICAgIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBJ
bnQ1MlJlcFVzZSkKKyAgICAgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSkpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUoSGVhcCk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBJc0NlbGxXaXRoVHlwZToK
ICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBub2RlLT5xdWVyaWVkVHlwZSgpKSk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTMzMSw3ICszNDIsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQog
ICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIEFyaXRoQWRkOgotICAgIGNhc2UgQXJpdGhOZWdh
dGU6CiAgICAgY2FzZSBBcml0aE1vZDoKICAgICBjYXNlIERvdWJsZUFzSW50MzI6CiAgICAgY2Fz
ZSBVSW50MzJUb051bWJlcjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCmluZGV4IDZlZTUxNDJmNzhmNjBiZjEwOTY4M2M4Yjg5YzE1ZDBlNDU4YjNmZTAuLjA3
ODQ3MGQxOThjZjMyNjFhZDIzYjRkN2M2NDE5MjQ0YzU3MTUyNzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMjA5LDcgKzIwOSw3IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7
Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC51bmFyeUFyaXRoU2hvdWxkU3BlY3VsYXRlSW50MzIo
bm9kZSwgRml4dXBQYXNzKSkgeworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVJbnQzMk9yQm9vbGVhbigpICYmIG5vZGUtPmNhblNwZWN1bGF0ZUludDMyKEZp
eHVwUGFzcykpIHsKICAgICAgICAgICAgICAgICBmaXhJbnRPckJvb2xlYW5FZGdlKG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGVDYW5UcnVuY2F0ZUludGVnZXIo
bm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFy
aXRoTW9kZShBcml0aDo6VW5jaGVja2VkKTsKQEAgLTIxNyw2ICsyMTcsOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6OkNoZWNrT3ZlcmZs
b3cpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0
QXJpdGhNb2RlKEFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVnYXRpdmVaZXJvKTsKKyAgICAgICAg
ICAgICAgICBub2RlLT5zZXRSZXN1bHQoTm9kZVJlc3VsdEludDMyKTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1fZ3JhcGgudW5hcnlBcml0aFNo
b3VsZFNwZWN1bGF0ZUFueUludChub2RlLCBGaXh1cFBhc3MpKSB7CkBAIC0yMjYsMTAgKzIyOCwx
NSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVnYXRpdmVaZXJvKTsK
ICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZXN1bHQoTm9kZVJlc3VsdEludDUyKTsKKyAgICAg
ICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZml4RG91YmxlT3JCb29s
ZWFuRWRnZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBub2RlLT5zZXRSZXN1bHQoTm9k
ZVJlc3VsdERvdWJsZSk7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZU5vdENlbGwoKSkgeworICAgICAgICAgICAgICAgIGZpeERvdWJsZU9yQm9vbGVhbkVk
Z2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlc3VsdChOb2Rl
UmVzdWx0RG91YmxlKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0
R2VuZXJhdGUpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZml4RWRnZTxV
bnR5cGVkVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwCmluZGV4IDI5YWY1YmRh
MGMzNDRlNTg2ODUyZmM0YzYyOWRmMjE0ZWNlMmI1ZmUuLjAxZTVkZGE5MTM1NmFmZDc1MTU5ZTQw
YzNmNzQ0NDkxNjUxOTJkOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwCkBAIC0xMjUy
LDkgKzEyNTIsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAobWF4VmFsdWUgPD0gMCkgeworICAgICAgICAg
ICAgICAgICAgICBib29sIGFic0lzVW5jaGVja2VkID0gIXNob3VsZENoZWNrT3ZlcmZsb3cobm9k
ZS0+YXJpdGhNb2RlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAobWF4VmFsdWUgPCAwIHx8
IChhYnNJc1VuY2hlY2tlZCAmJiBtYXhWYWx1ZSA8PSAwKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y29udmVydFRvQXJpdGhOZWdhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtaW5WYWx1ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYWJzSXNVbmNoZWNrZWQgfHwgbWluVmFsdWUgPiBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPnNldEFyaXRoTW9kZShBcml0aDo6VW5jaGVja2VkKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDA2ZGI0MGViNjc2NjcyNDZkMzQ5MDkwNTkxOWJmNWFi
ZDAwZWI5OWUuLmI3YmExMTQ4YTg2NDA4ZGViY2MwMmNiZTc3OGQ1YjcxY2ZlYWZlMDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0yNDUsMTcgKzI0NSwyMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOgotICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC51bmFyeUFyaXRoU2hvdWxkU3BlY3VsYXRlSW50MzIobm9kZSwgbV9w
YXNzKSkKKyAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZTogeworICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAg
ICAgICBpZiAocHJlZGljdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChpc0ludDMyT3JCb29s
ZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikgJiYgbm9kZS0+Y2FuU3BlY3VsYXRlSW50MzIobV9w
YXNzKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3Bl
Y0ludDMyT25seSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAobV9ncmFwaC51bmFyeUFyaXRo
U2hvdWxkU3BlY3VsYXRlQW55SW50KG5vZGUsIG1fcGFzcykpCiAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQ1Mk9ubHkpOwotICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0J5dGVjb2RlTnVtYmVyU3BlY3Vs
YXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQ
cmVkaWN0aW9uKHNwZWN1bGF0ZWREb3VibGVUeXBlRm9yUHJlZGljdGlvbihub2RlLT5jaGlsZDEo
KS0+cHJlZGljdGlvbigpKSk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOworICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+bWF5SGF2ZURvdWJsZVJlc3VsdCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0J5dGVjb2RlRG91
YmxlKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAorICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJpdGhNaW46CiAgICAg
ICAgIGNhc2UgQXJpdGhNYXg6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBu
b2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCAyZTYyOGY5ZTVhZjRjYTY1NTEzOTM0MDk0
YTdmNTU5NWM0NDM0Y2JiLi5iMzg1ZjAzZjMyZTRhZmI3ODdhYzc2M2ExMmMyNjIxMGMxZjIxZTVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cApAQCAtNDE4MSwxMSArNDE4MSwxMDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFy
aXRoTmVnYXRlKE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ZGVmYXVsdDogeworICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1faml0Lmdy
YXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJpdGhQ
cm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5k
ZXgpOworICAgICAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklU
TmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBv
cGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplOworICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdG
dW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlOworICAgICAgICBib29sIG5lZWRzU2NyYXRj
aEdQUlJlZyA9IHRydWU7CisgICAgICAgIGNvbXBpbGVNYXRoSUMobm9kZSwgbmVnSUMsIG5lZWRz
U2NyYXRjaEdQUlJlZywgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24p
OwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IEdlbmVyYXRvciwgdHlwZW5hbWUgUmVwYXRjaGluZ0Z1bmN0aW9uLCB0eXBlbmFtZSBOb25SZXBh
dGNoaW5nRnVuY3Rpb24+Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0aElDKE5vZGUq
IG5vZGUsIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgYm9vbCBuZWVkc1NjcmF0
Y2hHUFJSZWcsIFJlcGF0Y2hpbmdGdW5jdGlvbiByZXBhdGNoaW5nRnVuY3Rpb24sIE5vblJlcGF0
Y2hpbmdGdW5jdGlvbiBub25SZXBhdGNoaW5nRnVuY3Rpb24pCit7CisgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIE9wdGlvbmFsPEdQUlRlbXBvcmFyeT4gZ3ByU2Ny
YXRjaDsKKyAgICBpZiAobmVlZHNTY3JhdGNoR1BSUmVnKSB7CisgICAgICAgIGdwclNjcmF0Y2gg
PSBHUFJUZW1wb3JhcnkodGhpcyk7CisgICAgICAgIHNjcmF0Y2hHUFIgPSBncHJTY3JhdGNoLT5n
cHIoKTsKKyAgICB9CisgICAgSlNWYWx1ZU9wZXJhbmQgY2hpbGRPcGVyYW5kKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlUmVncyBjaGlsZFJlZ3MgPSBjaGlsZE9wZXJhbmQuanNW
YWx1ZVJlZ3MoKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgUmV1c2UsIGNoaWxkT3BlcmFuZCk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhy
ZXN1bHQuZ3ByKCkpOworI2Vsc2UKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOwor
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MocmVzdWx0UGF5bG9hZC5ncHIoKSwgcmVzdWx0VGFnLmdwcigpKTsKKyNlbmRpZgor
CisjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAgYXV0byBpbmxpbmVTdGFydCA9IG1faml0
LmxhYmVsKCk7CisjZW5kaWYKKworICAgIEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+IGljR2Vu
ZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgpOworICAg
IG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVzdWx0UmVncywgY2hpbGRSZWdzLCBz
Y3JhdGNoR1BSKTsKKworICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNlOworICAg
IGJvb2wgZ2VuZXJhdGVkSW5saW5lID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZShtX2ppdCwgKmlj
R2VuZXJhdGlvblN0YXRlLCBzaG91bGRFbWl0UHJvZmlsaW5nKTsKKworICAgIGlmIChnZW5lcmF0
ZWRJbmxpbmUpIHsKKyAgICAgICAgQVNTRVJUKCFpY0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhK
dW1wcy5lbXB0eSgpKTsKKworICAgICAgICBWZWN0b3I8U2lsZW50UmVnaXN0ZXJTYXZlUGxhbj4g
c2F2ZVBsYW5zOworICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVyc0ltcGwoZmFsc2UsIHNh
dmVQbGFucywgcmVzdWx0UmVncyk7CisKKyAgICAgICAgYXV0byBkb25lID0gbV9qaXQubGFiZWwo
KTsKKworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihbPSwgc2F2ZVBsYW5zID0gV1RGTW92
ZShzYXZlUGxhbnMpXSAoKSB7CisgICAgICAgICAgICBpY0dlbmVyYXRpb25TdGF0ZS0+c2xvd1Bh
dGhKdW1wcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBpY0dlbmVyYXRpb25TdGF0ZS0+c2xv
d1BhdGhTdGFydCA9IG1faml0LmxhYmVsKCk7CisjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisg
ICAgICAgICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBtX2ppdC5sYWJlbCgpOworI2VuZGlmCisK
KyAgICAgICAgICAgIHNpbGVudFNwaWxsKHNhdmVQbGFucyk7CisKKyAgICAgICAgICAgIGlmIChp
Y0dlbmVyYXRpb25TdGF0ZS0+c2hvdWxkU2xvd1BhdGhSZXBhdGNoKQorICAgICAgICAgICAgICAg
IGljR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKGJpdHdpc2Vf
Y2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocmVwYXRjaGluZ0Z1bmN0aW9uKSwgcmVzdWx0UmVn
cywgY2hpbGRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGljR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsT3Bl
cmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgcmVzdWx0UmVncywgY2hpbGRSZWdzKTsKKwor
ICAgICAgICAgICAgc2lsZW50RmlsbChzYXZlUGxhbnMpOworICAgICAgICAgICAgbV9qaXQuZXhj
ZXB0aW9uQ2hlY2soKTsKKyAgICAgICAgICAgIG1faml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJm1f
aml0KTsKKworICAgICAgICAgICAgbV9qaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgbWF0aElDLT5maW5hbGl6ZUlubGluZUNvZGUo
KmljR2VuZXJhdGlvblN0YXRlLCBsaW5rQnVmZmVyKTsKKyAgICAgICAgICAgIH0pOworCisjaWYg
RU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAgICAgICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbV9q
aXQubGFiZWwoKTsKKyAgICAgICAgICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIHNpemVfdCBzaXplID0gc3RhdGljX2Nh
c3Q8Y2hhcio+KGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aEVuZCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkgLSBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQ
YXRoU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgICAgIG1hdGhJQy0+
bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOworICAgICAgICAgICAgfSk7CisjZW5kaWYKKwor
ICAgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG5vblJlcGF0Y2hpbmdGdW5jdGlvbiwgcmVzdWx0UmVncywgY2hp
bGRSZWdzKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICB9CisKKyNpZiBF
TkFCTEUoTUFUSF9JQ19TVEFUUykKKyAgICBhdXRvIGlubGluZUVuZCA9IG1faml0LmxhYmVsKCk7
CisgICAgbV9qaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Cisg
ICAgICAgIHNpemVfdCBzaXplID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGxpbmtCdWZmZXIubG9jYXRp
b25PZihpbmxpbmVFbmQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+
KGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOworICAgIH0pOwor
I2VuZGlmCisKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgIHJldHVy
bjsKIH0KKworCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwoTm9kZSogbm9k
ZSkKIHsKICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4IGU3YTI5YjQzMzQ2YjI0
ODIzYTk5ODlmZWU5NWQ2NDA1YzMxOGRhNzMuLmM5YTdiYTBmZjhkYzg1NDhjMTMyYjg2MTdkYjgz
MDI0MWVjYTRmYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgKQEAgLTEzMjQsNiArMTMyNCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKTWljIG9wZXJh
dGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcsIFRydXN0ZWRJbW1QdHIg
bWF0aElDKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZy5ncHIoKSwgbWF0aElDKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQuZ3ByKCkpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSk1pYyBvcGVyYXRpb24sIEpTVmFsdWVSZWdz
IHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMiwgVHJ1c3RlZEltbVB0
ciBtYXRoSUMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMS5ncHIoKSwgYXJnMi5ncHIoKSwgbWF0aElDKTsKQEAgLTE3NjYsNyArMTc3MSwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBhcmcyLnBheWxvYWRHUFIoKSwgYXJnMi50YWdHUFIoKSwgYXJnMyk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0KKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKTWljIG9wZXJh
dGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcsIFRydXN0ZWRJbW1QdHIg
bWF0aElDKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZy5wYXlsb2FkR1BSKCksIGFyZy50YWdHUFIoKSwgbWF0
aElDKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQucGF5bG9hZEdQUigpLCByZXN1bHQudGFnR1BSKCkpOworICAgIH0KICAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSk1pYyBvcGVyYXRpb24sIEpT
VmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMiwgVHJ1
c3RlZEltbVB0ciBtYXRoSUMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMS5wYXlsb2FkR1BSKCksIGFyZzEu
dGFnR1BSKCksIGFyZzIucGF5bG9hZEdQUigpLCBhcmcyLnRhZ0dQUigpLCBtYXRoSUMpOwpAQCAt
MjUxNiw2ICsyNTI1LDggQEAgcHVibGljOgogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVy
YXRvciwgdHlwZW5hbWUgUmVwYXRjaGluZ0Z1bmN0aW9uLCB0eXBlbmFtZSBOb25SZXBhdGNoaW5n
RnVuY3Rpb24+CiAgICAgdm9pZCBjb21waWxlTWF0aElDKE5vZGUqLCBKSVRCaW5hcnlNYXRoSUM8
R2VuZXJhdG9yPiosIGJvb2wgbmVlZHNTY3JhdGNoR1BSUmVnLCBib29sIG5lZWRzU2NyYXRjaEZQ
UlJlZywgUmVwYXRjaGluZ0Z1bmN0aW9uLCBOb25SZXBhdGNoaW5nRnVuY3Rpb24pOworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFJlcGF0Y2hpbmdGdW5jdGlvbiwg
dHlwZW5hbWUgTm9uUmVwYXRjaGluZ0Z1bmN0aW9uPgorICAgIHZvaWQgY29tcGlsZU1hdGhJQyhO
b2RlKiwgSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGJvb2wgbmVlZHNTY3JhdGNoR1BSUmVn
LCBSZXBhdGNoaW5nRnVuY3Rpb24sIE5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CiAKICAgICB2b2lk
IGNvbXBpbGVBcml0aERvdWJsZVVuYXJ5T3AoTm9kZSosIGRvdWJsZSAoKmRvdWJsZUZ1bmN0aW9u
KShkb3VibGUpLCBkb3VibGUgKCpvcGVyYXRpb24pKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
KSk7CiAgICAgdm9pZCBjb21waWxlVmFsdWVBZGQoTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDlmODg1Yjg3MTM4MzkyMGI5YmQ0
ZjM4NWU5OTIyNDcyZjlmMjMwNmYuLjY4ZWI1MjFiMzM5Yzg4ZTkwZDVhNzViODZiZDIwNDY4ZTYw
ODFmNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKQEAgLTE1NjEsNiArMTU2MSw5MCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBHZW5lcmF0b3I+CisgICAgdm9pZCBjb21waWxlTWF0aElDKEpJVFVuYXJ5TWF0
aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgRnVuY3Rpb25QdHIgcmVwYXRjaGluZ0Z1bmN0aW9uLCBG
dW5jdGlvblB0ciBub25SZXBhdGNoaW5nRnVuY3Rpb24pCisgICAgeworICAgICAgICBOb2RlKiBu
b2RlID0gbV9ub2RlOworCisgICAgICAgIExWYWx1ZSBvcGVyYW5kID0gbG93SlNWYWx1ZShub2Rl
LT5jaGlsZDEoKSk7CisKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9v
dXQucGF0Y2hwb2ludChJbnQ2NCk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdp
c3RlcihvcGVyYW5kKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFnTWFzaywgVmFs
dWVSZXA6OmxhdGVSZWcoR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgIHBhdGNo
cG9pbnQtPmFwcGVuZChtX3RhZ1R5cGVOdW1iZXIsIFZhbHVlUmVwOjpsYXRlUmVnKEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRp
b25zKHBhdGNocG9pbnQpOworICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3Rl
cnMgPSAxOworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1Nj
cmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOwor
ICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewor
ICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0
Y2goaml0KTsKKworICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBl
eGNlcHRpb25zID0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVs
ZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworCisjaWYgRU5BQkxFKE1BVEhfSUNf
U1RBVFMpCisgICAgICAgICAgICAgICAgYXV0byBpbmxpbmVTdGFydCA9IGppdC5sYWJlbCgpOwor
I2VuZGlmCisKKyAgICAgICAgICAgICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUgPSBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7
CisgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihKU1ZhbHVl
UmVncyhwYXJhbXNbMF0uZ3ByKCkpLCBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBwYXJh
bXMuZ3BTY3JhdGNoKDApKTsKKworICAgICAgICAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2Zp
bGluZyA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lID0gbWF0
aElDLT5nZW5lcmF0ZUlubGluZShqaXQsICptYXRoSUNHZW5lcmF0aW9uU3RhdGUsIHNob3VsZEVt
aXRQcm9maWxpbmcpOworCisgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZElubGluZSkgewor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW1hdGhJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1Bh
dGhKdW1wcy5lbXB0eSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBkb25lID0gaml0Lmxh
YmVsKCk7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hZGRMYXRlUGF0aChbPV0gKENDYWxs
SGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRoSnVtcHMubGluaygmaml0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhTdGFydCA9
IGppdC5sYWJlbCgpOworI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gaml0LmxhYmVsKCk7CisjZW5kaWYKKworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS0+c2hvdWxkU2xv
d1BhdGhSZXBhdGNoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvd1BhdGhDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKCpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJz
KCksIGppdCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBleGNlcHRpb25zLmdldCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoaW5nRnVuY3Rpb24sIHBhcmFtc1swXS5n
cHIoKSwgcGFyYW1zWzFdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobWF0aElD
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLT5z
bG93UGF0aENhbGwgPSBjYWxsLmNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvd1BhdGhDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKCpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9k
ZS0+b3JpZ2luLnNlbWFudGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNl
cHRpb25zLmdldCgpLCBub25SZXBhdGNoaW5nRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIoKSwgcGFy
YW1zWzFdLmdwcigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUtPnNsb3dQYXRoQ2FsbCA9IGNhbGwuY2FsbCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwg
JmppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRo
SUMtPmZpbmFsaXplSW5saW5lQ29kZSgqbWF0aElDR2VuZXJhdGlvblN0YXRlLCBsaW5rQnVmZmVy
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworCisjaWYgRU5BQkxFKE1BVEhfSUNfU1RB
VFMpCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHNsb3dQYXRoRW5kID0gaml0LmxhYmVs
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNp
emUgPSBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoRW5k
KS5leGVjdXRhYmxlQWRkcmVzcygpKSAtIHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Yoc2xvd1BhdGhTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRlZENvZGVTaXplICs9IHNpemU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50aWMsIGV4Y2VwdGlvbnMuZ2V0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICBub25SZXBhdGNoaW5nRnVuY3Rpb24sIHBhcmFt
c1swXS5ncHIoKSwgcGFyYW1zWzFdLmdwcigpKTsKKyAgICAgICAgICAgICAgICB9CisKKyNpZiBF
TkFCTEUoTUFUSF9JQ19TVEFUUykKKyAgICAgICAgICAgICAgICBhdXRvIGlubGluZUVuZCA9IGpp
dC5sYWJlbCgpOworICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBzdGF0
aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGlubGluZUVuZCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkgLSBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5sb2NhdGlvbk9mKGlu
bGluZVN0YXJ0KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0
aElDLT5tX2dlbmVyYXRlZENvZGVTaXplICs9IHNpemU7CisgICAgICAgICAgICAgICAgfSk7Cisj
ZW5kaWYKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7
CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvcj4KICAgICB2b2lkIGNv
bXBpbGVNYXRoSUMoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgRnVuY3Rpb25Q
dHIgcmVwYXRjaGluZ0Z1bmN0aW9uLCBGdW5jdGlvblB0ciBub25SZXBhdGNoaW5nRnVuY3Rpb24p
CiAgICAgewogICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwpAQCAtMjQzMiw3ICsyNTE2LDEy
IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwor
ICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IFVudHlwZWRVc2UpOworICAgICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBtX2Z0bFN0YXRlLmdyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+
b3JpZ2luLnNlbWFudGljKS0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBKSVROZWdJQyogbmVn
SUMgPSBjb2RlQmxvY2soKS0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAg
IGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZTsK
KyAgICAgICAgICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhO
ZWdhdGU7CisgICAgICAgICAgICBjb21waWxlTWF0aElDKG5lZ0lDLCByZXBhdGNoaW5nRnVuY3Rp
b24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTmVnR2Vu
ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUTmVnR2VuZXJhdG9yLmNw
cAppbmRleCBkZjkxYzQ4ODg2OTE5ZTcwMzU2MmY5YzY0M2Q4NzE2MjhiYWY3NjZlLi45MmMyOWRk
NjMwYTk3Yzk5YTZiNGM5ODEyMDRjZjJlYjVjMmE2ZTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE5lZ0dlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVROZWdHZW5lcmF0b3IuY3BwCkBAIC04Miw3ICs4Miw3IEBAIEpJVE1hdGhJ
Q0lubGluZVJlc3VsdCBKSVROZWdHZW5lcmF0b3I6OmdlbmVyYXRlSW5saW5lKENDYWxsSGVscGVy
cyYgaml0LCBNYXRoSUNHCiAgICAgcmV0dXJuIEpJVE1hdGhJQ0lubGluZVJlc3VsdDo6R2VuZXJh
dGVGdWxsU25pcHBldDsKIH0KIAotYm9vbCBKSVROZWdHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBh
dGgoQ0NhbGxIZWxwZXJzJiBqaXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIGVuZEp1bXBMaXN0
LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93UGF0aEp1bXBMaXN0LCBjb25zdCBBcml0aFBy
b2ZpbGUqLCBib29sKQorYm9vbCBKSVROZWdHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdFBhdGgoQ0Nh
bGxIZWxwZXJzJiBqaXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QmIGVuZEp1bXBMaXN0LCBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0JiBzbG93UGF0aEp1bXBMaXN0LCBjb25zdCBBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSwgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nKQogewogICAgIEFTU0VSVCht
X3NjcmF0Y2hHUFIgIT0gbV9zcmMucGF5bG9hZEdQUigpKTsKICAgICBBU1NFUlQobV9zY3JhdGNo
R1BSICE9IG1fcmVzdWx0LnBheWxvYWRHUFIoKSk7CkBAIC0xMTUsNiArMTE1LDEwIEBAIGJvb2wg
SklUTmVnR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0CiAjZWxzZQogICAgIGppdC54b3IzMihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigxIDw8IDMxKSwgbV9yZXN1bHQudGFnR1BSKCkpOwogI2VuZGlmCisgICAgLy8g
VGhlIGZsYWdzIG9mIEFyaXRoTmVnYXRlIGFyZSBiYXNpYyBpbiBERkcuCisgICAgLy8gV2Ugb25s
eSBuZWVkIHRvIGtub3cgaWYgd2UgZXZlciBwcm9kdWNlZCBhIG51bWJlci4KKyAgICBpZiAoc2hv
dWxkRW1pdFByb2ZpbGluZyAmJiBhcml0aFByb2ZpbGUgJiYgIWFyaXRoUHJvZmlsZS0+bGhzT2Jz
ZXJ2ZWRUeXBlKCkuc2F3TnVtYmVyKCkgJiYgIWFyaXRoUHJvZmlsZS0+ZGlkT2JzZXJ2ZURvdWJs
ZSgpKQorICAgICAgICBhcml0aFByb2ZpbGUtPmVtaXRTZXREb3VibGUoaml0KTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKaW5kZXggMTg5NzMwYTM0OGQ1ZGM3Y2Y0MGRjODFlM2QxYTI3MDY2ODQ5ZWU4NC4uNTkyYTEw
N2FjNTEzMTUxZDFmM2UwZmRlMjY2MTI0MzIwNjQyYTgxZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC0yNDg4LDcgKzI0ODgsMTAgQEAgQUxXQVlT
X0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZmlsZWROZWdhdGUoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWwKICAgICBkb3VibGUgbnVtYmVyID0gb3BlcmFuZC50b051bWJlcihl
eGVjKTsKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcigtbnVtYmVyKSk7CisKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKC1u
dW1iZXIpOworICAgIGFyaXRoUHJvZmlsZS5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkFyaXRoTmVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgb3BlcmFuZCkKQEAgLTI1MjIsNyArMjUyNSw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplKEV4ZWNTdGF0ZSogZXhl
CiAgICAgZG91YmxlIG51bWJlciA9IG9wZXJhbmQudG9OdW1iZXIoZXhlYyk7CiAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLW51bWJl
cikpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoLW51bWJlcik7CisgICAgYXJpdGhQ
cm9maWxlLT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFy
aXRoTmVnYXRlT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3BlcmFuZCwgSklUTmVnSUMqIG5lZ0lDKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cg
Yi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA1ODMyZDJjYzRjMzFmNzU0NGZkYWJjODdmZGIzYjY2
Njc5OWU0YjNiLi44NTkyNWQ5MzY5N2Y0NjAyNDY1MTM5OTk3YzZiZGVmM2U4YzlhMTU0IDEwMDY0
NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE2IEBACisyMDE2LTA5LTI2ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFtKU0NdIG9wX25lZ2F0ZSBzaG91bGQgd2l0aCBhbnkgdHlwZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNTg3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvYXJp
dGgtYWJzLXRvLWFyaXRoLW5lZ2F0ZS1yYW5nZS1vcHRpbWl6YXRvbi5qczogQWRkZWQuCisgICAg
ICAgIENvdmVyIE9TUiBFeGl0cyB3aGVuIGNvbnZlcnRpbmcgTWF0aC5hYnMoKSBpbnRvIEFyaXRo
TmVnYXRlLgorCisgICAgICAgICogc3RyZXNzL2FyaXRoLW5lZ2F0ZS1vbi12YXJpb3VzLXR5cGVz
LmpzOiBBZGRlZC4KKyAgICAgICAgQ292ZXIgQXJpdGhOZWdhdGUgd2l0aCBhbGwgdHlwZXMuCisK
IDIwMTYtMDktMjYgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zemlAaW5mLnUtc3plZ2VkLmh1Pgog
CiAgICAgICAgIFNraXAgc3RyZXNzL3N0cmluZy1qb2luaW5nLWxvbmctc3RyaW5ncy1zaG91bGQt
bm90LWNyYXNoLmpzIG9uIG1lbW9yeSBsaW1pdGVkIGRldmljZXMKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvc3RyZXNzL2FyaXRoLWFicy10by1hcml0aC1uZWdhdGUtcmFuZ2Utb3B0aW1pemF0b24uanMg
Yi9KU1Rlc3RzL3N0cmVzcy9hcml0aC1hYnMtdG8tYXJpdGgtbmVnYXRlLXJhbmdlLW9wdGltaXph
dG9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjcyMTYwNWRiMGE1ZTMzOWU2ZmVhZWFkYjY0ODEzYzViMDJlOTU0
MzAKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hcml0aC1hYnMtdG8tYXJpdGgt
bmVnYXRlLXJhbmdlLW9wdGltaXphdG9uLmpzCkBAIC0wLDAgKzEsNDI2IEBACisvL0AgZGVmYXVs
dE5vRWFnZXJSdW4KKyJ1c2Ugc3RyaWN0IjsKKworLy8gQ2hlY2tlZCBpbnRfbWluIDwgdmFsdWUg
PCAwCitmdW5jdGlvbiBvcGFxdWVDaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9FeGNsdXNpdmUo
YXJnKSB7CisgICAgaWYgKGFyZyA8IDApIHsKKyAgICAgICAgaWYgKGFyZyA+ICgweDgwMDAwMDAw
fDApKSB7CisgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMoYXJnKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICB0aHJvdyAiV2Ugc2hvdWxkIG5vdCBiZSBoZXJlIjsKK30KK25vSW5saW5lKG9wYXF1
ZUNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSk7CisKK2Z1bmN0aW9uIHRlc3RD
aGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9FeGNsdXNpdmUoKQoreworICAgIGZvciAobGV0IGkg
PSAxOyBpIDwgMWU1OyArK2kpIHsKKyAgICAgICAgaWYgKG9wYXF1ZUNoZWNrZWRCZXR3ZWVuSW50
TWluQW5kWmVyb0V4Y2x1c2l2ZSgtaSkgIT09IGkpIHsKKyAgICAgICAgICAgIHRocm93ICJGYWls
ZWQgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSgpIjsKKyAgICAgICAg
fQorICAgICAgICBpZiAob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvRXhjbHVzaXZl
KC0yMTQ3NDgzNjQ3KSAhPT0gMjE0NzQ4MzY0NykgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxl
ZCB0ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvRXhjbHVzaXZlKCkgb24gLTIxNDc0ODM2
NDciOworICAgICAgICB9CisgICAgfQorICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1
ZUNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSkgPiAxKSB7CisgICAgICAgIHRo
cm93ICJGYWlsZWQgb3B0aW1pemluZyB0ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvRXhj
bHVzaXZlKCkuIE5vbmUgb2YgdGhlIHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4aXQuIjsKKyAg
ICB9Cit9Cit0ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvRXhjbHVzaXZlKCk7CisKKwor
Ly8gQ2hlY2tlZCBpbnRfbWluIDwgdmFsdWUgPD0gMAorZnVuY3Rpb24gb3BhcXVlQ2hlY2tlZEJl
dHdlZW5JbnRNaW5FeGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZlKGFyZykgeworICAgIGlmIChhcmcg
PD0gMCkgeworICAgICAgICBpZiAoYXJnID4gKDB4ODAwMDAwMDB8MCkpIHsKKyAgICAgICAgICAg
IHJldHVybiBNYXRoLmFicyhhcmcpOworICAgICAgICB9CisgICAgfQorICAgIHRocm93ICJXZSBz
aG91bGQgbm90IGJlIGhlcmUiOworfQorbm9JbmxpbmUob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRN
aW5FeGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZlKTsKKworZnVuY3Rpb24gdGVzdENoZWNrZWRCZXR3
ZWVuSW50TWluRXhjbHVzaXZlQW5kWmVyb0luY2x1c2l2ZSgpCit7CisgICAgZm9yIChsZXQgaSA9
IDE7IGkgPCAxZTU7ICsraSkgeworICAgICAgICBpZiAob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRN
aW5FeGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZlKC1pKSAhPT0gaSkgeworICAgICAgICAgICAgdGhy
b3cgIkZhaWxlZCB0ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5FeGNsdXNpdmVBbmRaZXJvSW5jbHVz
aXZlKCkiOworICAgICAgICB9CisgICAgICAgIGlmIChvcGFxdWVDaGVja2VkQmV0d2VlbkludE1p
bkV4Y2x1c2l2ZUFuZFplcm9JbmNsdXNpdmUoMCkgIT09IDApIHsKKyAgICAgICAgICAgIHRocm93
ICJGYWlsZWQgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVzaXZlQW5kWmVyb0luY2x1c2l2
ZSgpIG9uIDAiOworICAgICAgICB9CisgICAgICAgIGlmIChvcGFxdWVDaGVja2VkQmV0d2Vlbklu
dE1pbkV4Y2x1c2l2ZUFuZFplcm9JbmNsdXNpdmUoLTIxNDc0ODM2NDcpICE9PSAyMTQ3NDgzNjQ3
KSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RDaGVja2VkQmV0d2VlbkludE1pbkV4
Y2x1c2l2ZUFuZFplcm9JbmNsdXNpdmUoKSBvbiAtMjE0NzQ4MzY0NyI7CisgICAgICAgIH0KKyAg
ICB9CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRN
aW5FeGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZlKSA+IDEpIHsKKyAgICAgICAgdGhyb3cgIkZhaWxl
ZCBvcHRpbWl6aW5nIHRlc3RDaGVja2VkQmV0d2VlbkludE1pbkV4Y2x1c2l2ZUFuZFplcm9JbmNs
dXNpdmUoKS4gTm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVlZCB0byBPU1IgRXhpdC4iOworICAg
IH0KK30KK3Rlc3RDaGVja2VkQmV0d2VlbkludE1pbkV4Y2x1c2l2ZUFuZFplcm9JbmNsdXNpdmUo
KTsKKworCisvLyBDaGVja2VkIGludF9taW4gPD0gdmFsdWUgPCAwCitmdW5jdGlvbiBvcGFxdWVD
aGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNsdXNpdmUoYXJnKSB7CisgICAg
aWYgKGFyZyA8IDApIHsKKyAgICAgICAgaWYgKGFyZyA+PSAoMHg4MDAwMDAwMHwwKSkgeworICAg
ICAgICAgICAgcmV0dXJuIE1hdGguYWJzKGFyZyk7CisgICAgICAgIH0KKyAgICB9CisgICAgdGhy
b3cgIldlIHNob3VsZCBub3QgYmUgaGVyZSI7Cit9Citub0lubGluZShvcGFxdWVDaGVja2VkQmV0
d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNsdXNpdmUpOworCitmdW5jdGlvbiB0ZXN0Q2hl
Y2tlZEJldHdlZW5JbnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKCkKK3sKKyAgICBmb3Ig
KGxldCBpID0gMTsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIGlmIChvcGFxdWVDaGVja2VkQmV0
d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNsdXNpdmUoLWkpICE9PSBpKSB7CisgICAgICAg
ICAgICB0aHJvdyAiRmFpbGVkIHRlc3RDaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFpl
cm9FeGNsdXNpdmUoKSI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wYXF1ZUNoZWNrZWRCZXR3
ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgtMjE0NzQ4MzY0NykgIT09IDIxNDc0
ODM2NDcpIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENoZWNrZWRCZXR3ZWVuSW50
TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgpIG9uIC0yMTQ3NDgzNjQ3IjsKKyAgICAgICAg
fQorICAgIH0KKyAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVDaGVja2VkQmV0d2Vl
bkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNsdXNpdmUpID4gMSkgeworICAgICAgICB0aHJvdyAi
RmFpbGVkIG9wdGltaXppbmcgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVy
b0V4Y2x1c2l2ZSgpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7
CisgICAgfQorCisgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTU7ICsraSkgeworICAgICAgICBp
ZiAob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKC1p
KSAhPT0gaSkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0Q2hlY2tlZEJldHdlZW5J
bnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKCkiOworICAgICAgICB9CisgICAgICAgIGxl
dCByZXN1bHQgPSBvcGFxdWVDaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNs
dXNpdmUoLTIxNDc0ODM2NDgpOworICAgICAgICBpZiAocmVzdWx0ICE9PSAyMTQ3NDgzNjQ4KSB7
CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RDaGVja2VkQmV0d2VlbkludE1pbkluY2x1
c2l2ZUFuZFplcm9FeGNsdXNpdmUoKSBvbiAtMjE0NzQ4MzY0OCwgZ290ICIgKyByZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVDaGVj
a2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNsdXNpdmUpID4gMikgeworICAgICAg
ICB0aHJvdyAiTWF0aC5hYnMoKSBvbiBJbnRNaW4gY2FuIE9TUiBFeGl0IGJ1dCB3ZSBzaG91bGQg
cXVpY2tseSBzZXR0bGUgb24gZG91YmxlLiI7CisgICAgfQorfQordGVzdENoZWNrZWRCZXR3ZWVu
SW50TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgpOworCisKKy8vIENoZWNrZWQgaW50X21p
biA8PSB2YWx1ZSA8PSAwCitmdW5jdGlvbiBvcGFxdWVDaGVja2VkQmV0d2VlbkludE1pbkFuZFpl
cm9JbmNsdXNpdmUoYXJnKSB7CisgICAgaWYgKGFyZyA8PSAwKSB7CisgICAgICAgIGlmIChhcmcg
Pj0gKDB4ODAwMDAwMDB8MCkpIHsKKyAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyhhcmcpOwor
ICAgICAgICB9CisgICAgfQorICAgIHRocm93ICJXZSBzaG91bGQgbm90IGJlIGhlcmUiOworfQor
bm9JbmxpbmUob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKTsKKwor
ZnVuY3Rpb24gdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSgpCit7Cisg
ICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTU7ICsraSkgeworICAgICAgICBpZiAob3BhcXVlQ2hl
Y2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKC1pKSAhPT0gaSkgeworICAgICAgICAg
ICAgdGhyb3cgIkZhaWxlZCB0ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZl
KCkiOworICAgICAgICB9CisgICAgICAgIGlmIChvcGFxdWVDaGVja2VkQmV0d2VlbkludE1pbkFu
ZFplcm9JbmNsdXNpdmUoMCkgIT09IDApIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVz
dENoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSgpIjsKKyAgICAgICAgfQorICAg
ICAgICBpZiAob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKC0yMTQ3
NDgzNjQ3KSAhPT0gMjE0NzQ4MzY0NykgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0
Q2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKCkgb24gLTIxNDc0ODM2NDciOwor
ICAgICAgICB9CisgICAgfQorICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUNoZWNr
ZWRCZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSkgPiAxKSB7CisgICAgICAgIHRocm93ICJG
YWlsZWQgb3B0aW1pemluZyB0ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZl
KCkuIE5vbmUgb2YgdGhlIHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4aXQuIjsKKyAgICB9CisK
KyAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIGlmIChvcGFxdWVD
aGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9JbmNsdXNpdmUoLWkpICE9PSBpKSB7CisgICAgICAg
ICAgICB0aHJvdyAiRmFpbGVkIHRlc3RDaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9JbmNsdXNp
dmUoKSI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wYXF1ZUNoZWNrZWRCZXR3ZWVuSW50TWlu
QW5kWmVyb0luY2x1c2l2ZSgwKSAhPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0
ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKCkiOworICAgICAgICB9Cisg
ICAgICAgIGlmIChvcGFxdWVDaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9JbmNsdXNpdmUoLTIx
NDc0ODM2NDgpICE9PSAyMTQ3NDgzNjQ4KSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRl
c3RDaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9JbmNsdXNpdmUoKSBvbiAtMjE0NzQ4MzY0OCI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVD
aGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9JbmNsdXNpdmUpID4gMikgeworICAgICAgICB0aHJv
dyAiTWF0aC5hYnMoKSBvbiBJbnRNaW4gY2FuIE9TUiBFeGl0IGJ1dCB3ZSBzaG91bGQgcXVpY2ts
eSBzZXR0bGUgb24gZG91YmxlLiI7CisgICAgfQorfQordGVzdENoZWNrZWRCZXR3ZWVuSW50TWlu
QW5kWmVyb0luY2x1c2l2ZSgpOworCisKKy8vIFVuY2hlY2tlZCBpbnRfbWluIDwgdmFsdWUgPCAw
CitmdW5jdGlvbiBvcGFxdWVVbmNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZShh
cmcpIHsKKyAgICBpZiAoYXJnIDwgMCkgeworICAgICAgICBpZiAoYXJnID4gKDB4ODAwMDAwMDB8
MCkpIHsKKyAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyhhcmcpfDA7CisgICAgICAgIH0KKyAg
ICB9CisgICAgdGhyb3cgIldlIHNob3VsZCBub3QgYmUgaGVyZSI7Cit9Citub0lubGluZShvcGFx
dWVVbmNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSk7CisKK2Z1bmN0aW9uIHRl
c3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSgpCit7CisgICAgZm9yIChs
ZXQgaSA9IDE7IGkgPCAxZTU7ICsraSkgeworICAgICAgICBpZiAob3BhcXVlVW5jaGVja2VkQmV0
d2VlbkludE1pbkFuZFplcm9FeGNsdXNpdmUoLWkpICE9PSBpKSB7CisgICAgICAgICAgICB0aHJv
dyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSgpIjsK
KyAgICAgICAgfQorICAgICAgICBpZiAob3BhcXVlVW5jaGVja2VkQmV0d2VlbkludE1pbkFuZFpl
cm9FeGNsdXNpdmUoLTIxNDc0ODM2NDcpICE9PSAyMTQ3NDgzNjQ3KSB7CisgICAgICAgICAgICB0
aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSgp
IG9uIC0yMTQ3NDgzNjQ3IjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobnVtYmVyT2ZERkdD
b21waWxlcyhvcGFxdWVVbmNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSkgPiAx
KSB7CisgICAgICAgIHRocm93ICJGYWlsZWQgb3B0aW1pemluZyB0ZXN0VW5jaGVja2VkQmV0d2Vl
bkludE1pbkFuZFplcm9FeGNsdXNpdmUoKS4gTm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVlZCB0
byBPU1IgRXhpdC4iOworICAgIH0KK30KK3Rlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVy
b0V4Y2x1c2l2ZSgpOworCisKKy8vIFVuY2hlY2tlZCBpbnRfbWluIDwgdmFsdWUgPD0gMAorZnVu
Y3Rpb24gb3BhcXVlVW5jaGVja2VkQmV0d2VlbkludE1pbkV4Y2x1c2l2ZUFuZFplcm9JbmNsdXNp
dmUoYXJnKSB7CisgICAgaWYgKGFyZyA8PSAwKSB7CisgICAgICAgIGlmIChhcmcgPiAoMHg4MDAw
MDAwMHwwKSkgeworICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKGFyZyl8MDsKKyAgICAgICAg
fQorICAgIH0KKyAgICB0aHJvdyAiV2Ugc2hvdWxkIG5vdCBiZSBoZXJlIjsKK30KK25vSW5saW5l
KG9wYXF1ZVVuY2hlY2tlZEJldHdlZW5JbnRNaW5FeGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZlKTsK
KworZnVuY3Rpb24gdGVzdFVuY2hlY2tlZEJldHdlZW5JbnRNaW5FeGNsdXNpdmVBbmRaZXJvSW5j
bHVzaXZlKCkKK3sKKyAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNTsgKytpKSB7CisgICAgICAg
IGlmIChvcGFxdWVVbmNoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVzaXZlQW5kWmVyb0luY2x1c2l2
ZSgtaSkgIT09IGkpIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFVuY2hlY2tlZEJl
dHdlZW5JbnRNaW5FeGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZlKCkiOworICAgICAgICB9CisgICAg
ICAgIGlmIChvcGFxdWVVbmNoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVzaXZlQW5kWmVyb0luY2x1
c2l2ZSgwKSAhPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0VW5jaGVja2Vk
QmV0d2VlbkludE1pbkV4Y2x1c2l2ZUFuZFplcm9JbmNsdXNpdmUoKSBvbiAwIjsKKyAgICAgICAg
fQorICAgICAgICBpZiAob3BhcXVlVW5jaGVja2VkQmV0d2VlbkludE1pbkV4Y2x1c2l2ZUFuZFpl
cm9JbmNsdXNpdmUoLTIxNDc0ODM2NDcpICE9PSAyMTQ3NDgzNjQ3KSB7CisgICAgICAgICAgICB0
aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVzaXZlQW5kWmVyb0lu
Y2x1c2l2ZSgpIG9uIC0yMTQ3NDgzNjQ3IjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobnVt
YmVyT2ZERkdDb21waWxlcyhvcGFxdWVVbmNoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVzaXZlQW5k
WmVyb0luY2x1c2l2ZSkgPiAxKSB7CisgICAgICAgIHRocm93ICJGYWlsZWQgb3B0aW1pemluZyB0
ZXN0VW5jaGVja2VkQmV0d2VlbkludE1pbkV4Y2x1c2l2ZUFuZFplcm9JbmNsdXNpdmUoKS4gTm9u
ZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVlZCB0byBPU1IgRXhpdC4iOworICAgIH0KK30KK3Rlc3RV
bmNoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVzaXZlQW5kWmVyb0luY2x1c2l2ZSgpOworCisKKy8v
IFVuY2hlY2tlZCBpbnRfbWluIDw9IHZhbHVlIDwgMAorZnVuY3Rpb24gb3BhcXVlVW5jaGVja2Vk
QmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNsdXNpdmUoYXJnKSB7CisgICAgaWYgKGFy
ZyA8IDApIHsKKyAgICAgICAgaWYgKGFyZyA+PSAoMHg4MDAwMDAwMHwwKSkgeworICAgICAgICAg
ICAgcmV0dXJuIE1hdGguYWJzKGFyZyl8MDsKKyAgICAgICAgfQorICAgIH0KKyAgICB0aHJvdyAi
V2Ugc2hvdWxkIG5vdCBiZSBoZXJlIjsKK30KK25vSW5saW5lKG9wYXF1ZVVuY2hlY2tlZEJldHdl
ZW5JbnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKTsKKworZnVuY3Rpb24gdGVzdFVuY2hl
Y2tlZEJldHdlZW5JbnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKCkKK3sKKyAgICBmb3Ig
KGxldCBpID0gMTsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIGlmIChvcGFxdWVVbmNoZWNrZWRC
ZXR3ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgtaSkgIT09IGkpIHsKKyAgICAg
ICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFVuY2hlY2tlZEJldHdlZW5JbnRNaW5JbmNsdXNpdmVB
bmRaZXJvRXhjbHVzaXZlKCkiOworICAgICAgICB9CisgICAgICAgIGlmIChvcGFxdWVVbmNoZWNr
ZWRCZXR3ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgtMjE0NzQ4MzY0NykgIT09
IDIxNDc0ODM2NDcpIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFVuY2hlY2tlZEJl
dHdlZW5JbnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKCkgb24gLTIxNDc0ODM2NDciOwor
ICAgICAgICB9CisgICAgICAgIGlmIChvcGFxdWVVbmNoZWNrZWRCZXR3ZWVuSW50TWluSW5jbHVz
aXZlQW5kWmVyb0V4Y2x1c2l2ZSgtMjE0NzQ4MzY0OCkgIT09IC0yMTQ3NDgzNjQ4KSB7CisgICAg
ICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluSW5jbHVzaXZl
QW5kWmVyb0V4Y2x1c2l2ZSgpIG9uIC0yMTQ3NDgzNjQ4IjsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVVbmNoZWNrZWRCZXR3ZWVuSW50TWluSW5j
bHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSkgPiAxKSB7CisgICAgICAgIHRocm93ICJGYWlsZWQgb3B0
aW1pemluZyB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNsdXNp
dmUoKS4gTm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVlZCB0byBPU1IgRXhpdC4iOworICAgIH0K
K30KK3Rlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgp
OworCisKKy8vIFVuY2hlY2tlZCBpbnRfbWluIDw9IHZhbHVlIDw9IDAKK2Z1bmN0aW9uIG9wYXF1
ZVVuY2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKGFyZykgeworICAgIGlmIChh
cmcgPD0gMCkgeworICAgICAgICBpZiAoYXJnID49ICgweDgwMDAwMDAwfDApKSB7CisgICAgICAg
ICAgICByZXR1cm4gTWF0aC5hYnMoYXJnKXwwOworICAgICAgICB9CisgICAgfQorICAgIHRocm93
ICJXZSBzaG91bGQgbm90IGJlIGhlcmUiOworfQorbm9JbmxpbmUob3BhcXVlVW5jaGVja2VkQmV0
d2VlbkludE1pbkFuZFplcm9JbmNsdXNpdmUpOworCitmdW5jdGlvbiB0ZXN0VW5jaGVja2VkQmV0
d2VlbkludE1pbkFuZFplcm9JbmNsdXNpdmUoKQoreworICAgIGZvciAobGV0IGkgPSAxOyBpIDwg
MWU1OyArK2kpIHsKKyAgICAgICAgaWYgKG9wYXF1ZVVuY2hlY2tlZEJldHdlZW5JbnRNaW5BbmRa
ZXJvSW5jbHVzaXZlKC1pKSAhPT0gaSkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0
VW5jaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9JbmNsdXNpdmUoKSI7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKG9wYXF1ZVVuY2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKDAp
ICE9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRCZXR3ZWVu
SW50TWluQW5kWmVyb0luY2x1c2l2ZSgpIjsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BhcXVl
VW5jaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9JbmNsdXNpdmUoLTIxNDc0ODM2NDcpICE9PSAy
MTQ3NDgzNjQ3KSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRCZXR3
ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSgpIG9uIC0yMTQ3NDgzNjQ3IjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAob3BhcXVlVW5jaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9F
eGNsdXNpdmUoLTIxNDc0ODM2NDgpICE9PSAtMjE0NzQ4MzY0OCkgeworICAgICAgICAgICAgdGhy
b3cgIkZhaWxlZCB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNs
dXNpdmUoKSBvbiAtMjE0NzQ4MzY0OCI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG51bWJl
ck9mREZHQ29tcGlsZXMob3BhcXVlVW5jaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9JbmNsdXNp
dmUpID4gMSkgeworICAgICAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcgdGVzdFVuY2hlY2tl
ZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKCkuIE5vbmUgb2YgdGhlIHRlc3RlZCBjYXNl
IG5lZWQgdG8gT1NSIEV4aXQuIjsKKyAgICB9Cit9Cit0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1p
bkFuZFplcm9JbmNsdXNpdmUoKTsKKworCisvLyBDaGVja2VkIHZhbHVlIDwgMAorZnVuY3Rpb24g
b3BhcXVlQ2hlY2tlZExlc3NUaGFuWmVybyhhcmcpIHsKKyAgICBpZiAoYXJnIDwgMCkgeworICAg
ICAgICByZXR1cm4gTWF0aC5hYnMoYXJnKTsKKyAgICB9CisgICAgdGhyb3cgIldlIHNob3VsZCBu
b3QgYmUgaGVyZSI7Cit9Citub0lubGluZShvcGFxdWVDaGVja2VkTGVzc1RoYW5aZXJvKTsKKwor
ZnVuY3Rpb24gdGVzdENoZWNrZWRMZXNzVGhhblplcm8oKQoreworICAgIGZvciAobGV0IGkgPSAx
OyBpIDwgMWU1OyArK2kpIHsKKyAgICAgICAgaWYgKG9wYXF1ZUNoZWNrZWRMZXNzVGhhblplcm8o
LWkpICE9PSBpKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RDaGVja2VkTGVzc1Ro
YW5aZXJvKCkiOworICAgICAgICB9CisgICAgICAgIGlmIChvcGFxdWVDaGVja2VkTGVzc1RoYW5a
ZXJvKC0yMTQ3NDgzNjQ3KSAhPT0gMjE0NzQ4MzY0NykgeworICAgICAgICAgICAgdGhyb3cgIkZh
aWxlZCB0ZXN0Q2hlY2tlZExlc3NUaGFuWmVybygpIG9uIC0yMTQ3NDgzNjQ3IjsKKyAgICAgICAg
fQorICAgIH0KKyAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVDaGVja2VkTGVzc1Ro
YW5aZXJvKSA+IDEpIHsKKyAgICAgICAgdGhyb3cgIkZhaWxlZCBvcHRpbWl6aW5nIHRlc3RDaGVj
a2VkTGVzc1RoYW5aZXJvKCkuIE5vbmUgb2YgdGhlIHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4
aXQuIjsKKyAgICB9CisKKyAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNTsgKytpKSB7CisgICAg
ICAgIGlmIChvcGFxdWVDaGVja2VkTGVzc1RoYW5aZXJvKC1pKSAhPT0gaSkgeworICAgICAgICAg
ICAgdGhyb3cgIkZhaWxlZCB0ZXN0Q2hlY2tlZExlc3NUaGFuWmVybygpIjsKKyAgICAgICAgfQor
ICAgICAgICBsZXQgcmVzdWx0ID0gb3BhcXVlQ2hlY2tlZExlc3NUaGFuWmVybygtMjE0NzQ4MzY0
OCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDIxNDc0ODM2NDgpIHsKKyAgICAgICAgICAgIHRo
cm93ICJGYWlsZWQgdGVzdENoZWNrZWRMZXNzVGhhblplcm8oKSBvbiAtMjE0NzQ4MzY0OCwgZ290
ICIgKyByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG51bWJlck9mREZHQ29tcGls
ZXMob3BhcXVlQ2hlY2tlZExlc3NUaGFuWmVybykgPiAyKSB7CisgICAgICAgIHRocm93ICJNYXRo
LmFicygpIG9uIEludE1pbiBjYW4gT1NSIEV4aXQgYnV0IHdlIHNob3VsZCBxdWlja2x5IHNldHRs
ZSBvbiBkb3VibGUuIjsKKyAgICB9Cit9Cit0ZXN0Q2hlY2tlZExlc3NUaGFuWmVybygpOworCisK
Ky8vIENoZWNrZWQgdmFsdWUgPD0gMAorZnVuY3Rpb24gb3BhcXVlQ2hlY2tlZExlc3NUaGFuT3JF
cXVhbFplcm8oYXJnKSB7CisgICAgaWYgKGFyZyA8PSAwKSB7CisgICAgICAgIHJldHVybiBNYXRo
LmFicyhhcmcpOworICAgIH0KKyAgICB0aHJvdyAiV2Ugc2hvdWxkIG5vdCBiZSBoZXJlIjsKK30K
K25vSW5saW5lKG9wYXF1ZUNoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKTsKKworZnVuY3Rpb24g
dGVzdENoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKCkKK3sKKyAgICBmb3IgKGxldCBpID0gMTsg
aSA8IDFlNTsgKytpKSB7CisgICAgICAgIGlmIChvcGFxdWVDaGVja2VkTGVzc1RoYW5PckVxdWFs
WmVybygtaSkgIT09IGkpIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENoZWNrZWRM
ZXNzVGhhbk9yRXF1YWxaZXJvKCkiOworICAgICAgICB9CisgICAgICAgIGlmIChvcGFxdWVDaGVj
a2VkTGVzc1RoYW5PckVxdWFsWmVybygwKSAhPT0gMCkgeworICAgICAgICAgICAgdGhyb3cgIkZh
aWxlZCB0ZXN0Q2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8oKSBvbiAwIjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAob3BhcXVlQ2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8oLTIxNDc0ODM2NDcp
ICE9PSAyMTQ3NDgzNjQ3KSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RDaGVja2Vk
TGVzc1RoYW5PckVxdWFsWmVybygpIG9uIC0yMTQ3NDgzNjQ3IjsKKyAgICAgICAgfQorICAgIH0K
KyAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVDaGVja2VkTGVzc1RoYW5PckVxdWFs
WmVybykgPiAxKSB7CisgICAgICAgIHRocm93ICJGYWlsZWQgb3B0aW1pemluZyB0ZXN0Q2hlY2tl
ZExlc3NUaGFuT3JFcXVhbFplcm8oKS4gTm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVlZCB0byBP
U1IgRXhpdC4iOworICAgIH0KKworICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMWU1OyArK2kpIHsK
KyAgICAgICAgaWYgKG9wYXF1ZUNoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKC1pKSAhPT0gaSkg
eworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0Q2hlY2tlZExlc3NUaGFuT3JFcXVhbFpl
cm8oKSI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wYXF1ZUNoZWNrZWRMZXNzVGhhbk9yRXF1
YWxaZXJvKC0yMTQ3NDgzNjQ4KSAhPT0gMjE0NzQ4MzY0OCkgeworICAgICAgICAgICAgdGhyb3cg
IkZhaWxlZCB0ZXN0Q2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8oKSBvbiAtMjE0NzQ4MzY0OCI7
CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2hl
Y2tlZExlc3NUaGFuT3JFcXVhbFplcm8pID4gMikgeworICAgICAgICB0aHJvdyAiTWF0aC5hYnMo
KSBvbiBJbnRNaW4gY2FuIE9TUiBFeGl0IGJ1dCB3ZSBzaG91bGQgcXVpY2tseSBzZXR0bGUgb24g
ZG91YmxlLiI7CisgICAgfQorfQordGVzdENoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKCk7CisK
KworLy8gVW5jaGVja2VkIHZhbHVlIDwgMAorZnVuY3Rpb24gb3BhcXVlVW5jaGVja2VkTGVzc1Ro
YW5aZXJvKGFyZykgeworICAgIGlmIChhcmcgPCAwKSB7CisgICAgICAgIHJldHVybiBNYXRoLmFi
cyhhcmcpfDA7CisgICAgfQorICAgIHRocm93ICJXZSBzaG91bGQgbm90IGJlIGhlcmUiOworfQor
bm9JbmxpbmUob3BhcXVlVW5jaGVja2VkTGVzc1RoYW5aZXJvKTsKKworZnVuY3Rpb24gdGVzdFVu
Y2hlY2tlZExlc3NUaGFuWmVybygpCit7CisgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTU7ICsr
aSkgeworICAgICAgICBpZiAob3BhcXVlVW5jaGVja2VkTGVzc1RoYW5aZXJvKC1pKSAhPT0gaSkg
eworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0VW5jaGVja2VkTGVzc1RoYW5aZXJvKCki
OworICAgICAgICB9CisgICAgICAgIGlmIChvcGFxdWVVbmNoZWNrZWRMZXNzVGhhblplcm8oLTIx
NDc0ODM2NDcpICE9PSAyMTQ3NDgzNjQ3KSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRl
c3RVbmNoZWNrZWRMZXNzVGhhblplcm8oKSBvbiAtMjE0NzQ4MzY0NyI7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKG9wYXF1ZVVuY2hlY2tlZExlc3NUaGFuWmVybygtMjE0NzQ4MzY0OCkgIT09IC0y
MTQ3NDgzNjQ4KSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRMZXNz
VGhhbk9yRXF1YWxaZXJvKCkgb24gLTIxNDc0ODM2NDgiOworICAgICAgICB9CisgICAgfQorICAg
IGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZVVuY2hlY2tlZExlc3NUaGFuWmVybykgPiAx
KSB7CisgICAgICAgIHRocm93ICJGYWlsZWQgb3B0aW1pemluZyB0ZXN0VW5jaGVja2VkTGVzc1Ro
YW5aZXJvKCkuIE5vbmUgb2YgdGhlIHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4aXQuIjsKKyAg
ICB9CisKKyAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIGlmIChv
cGFxdWVVbmNoZWNrZWRMZXNzVGhhblplcm8oLWkpICE9PSBpKSB7CisgICAgICAgICAgICB0aHJv
dyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRMZXNzVGhhblplcm8oKSI7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG9wYXF1ZVVuY2hlY2tlZExlc3NUaGFuWmVybygtMjE0NzQ4MzY0OCkgIT09IC0yMTQ3
NDgzNjQ4KSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRMZXNzVGhh
blplcm8oKSBvbiAtMjE0NzQ4MzY0OCI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG51bWJl
ck9mREZHQ29tcGlsZXMob3BhcXVlVW5jaGVja2VkTGVzc1RoYW5aZXJvKSA+IDIpIHsKKyAgICAg
ICAgdGhyb3cgIk1hdGguYWJzKCkgb24gSW50TWluIGNhbiBPU1IgRXhpdCBidXQgd2Ugc2hvdWxk
IHF1aWNrbHkgc2V0dGxlIG9uIGRvdWJsZS4iOworICAgIH0KK30KK3Rlc3RVbmNoZWNrZWRMZXNz
VGhhblplcm8oKTsKKworCisvLyBVbmNoZWNrZWQgdmFsdWUgPD0gMAorZnVuY3Rpb24gb3BhcXVl
VW5jaGVja2VkTGVzc1RoYW5PckVxdWFsWmVybyhhcmcpIHsKKyAgICBpZiAoYXJnIDw9IDApIHsK
KyAgICAgICAgcmV0dXJuIE1hdGguYWJzKGFyZyl8MDsKKyAgICB9CisgICAgdGhyb3cgIldlIHNo
b3VsZCBub3QgYmUgaGVyZSI7Cit9Citub0lubGluZShvcGFxdWVVbmNoZWNrZWRMZXNzVGhhbk9y
RXF1YWxaZXJvKTsKKworZnVuY3Rpb24gdGVzdFVuY2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8o
KQoreworICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMWU1OyArK2kpIHsKKyAgICAgICAgaWYgKG9w
YXF1ZVVuY2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8oLWkpICE9PSBpKSB7CisgICAgICAgICAg
ICB0aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKCkiOworICAg
ICAgICB9CisgICAgICAgIGlmIChvcGFxdWVVbmNoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKDAp
ICE9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRMZXNzVGhh
bk9yRXF1YWxaZXJvKCkgb24gMCI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wYXF1ZVVuY2hl
Y2tlZExlc3NUaGFuT3JFcXVhbFplcm8oLTIxNDc0ODM2NDcpICE9PSAyMTQ3NDgzNjQ3KSB7Cisg
ICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJv
KCkgb24gLTIxNDc0ODM2NDciOworICAgICAgICB9CisgICAgICAgIGlmIChvcGFxdWVVbmNoZWNr
ZWRMZXNzVGhhbk9yRXF1YWxaZXJvKC0yMTQ3NDgzNjQ4KSAhPT0gLTIxNDc0ODM2NDgpIHsKKyAg
ICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFVuY2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8o
KSBvbiAtMjE0NzQ4MzY0OCI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG51bWJlck9mREZH
Q29tcGlsZXMob3BhcXVlVW5jaGVja2VkTGVzc1RoYW5PckVxdWFsWmVybykgPiAxKSB7CisgICAg
ICAgIHRocm93ICJGYWlsZWQgb3B0aW1pemluZyB0ZXN0VW5jaGVja2VkTGVzc1RoYW5PckVxdWFs
WmVybygpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7CisgICAg
fQorfQordGVzdFVuY2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8oKTsKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvc3RyZXNzL2FyaXRoLW5lZ2F0ZS1vbi12YXJpb3VzLXR5cGVzLmpzIGIvSlNUZXN0cy9z
dHJlc3MvYXJpdGgtbmVnYXRlLW9uLXZhcmlvdXMtdHlwZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjYwN2Yz
MmRlZTAzZGI1NWExZmU0Y2VjNGM2M2ZkOTQ4YTU0ZTVhYgotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvc3RyZXNzL2FyaXRoLW5lZ2F0ZS1vbi12YXJpb3VzLXR5cGVzLmpzCkBAIC0wLDAgKzEs
MjgzIEBACisvL0AgZGVmYXVsdE5vRWFnZXJSdW4KKyJ1c2Ugc3RyaWN0IjsKKworbGV0IHZhbGlk
SW5wdXRUZXN0Q2FzZXMgPSBbCisgICAgLy8gaW5wdXQgYXMgc3RyaW5nLCBleHBlY3RlZCByZXN1
bHQgYXMgc3RyaW5nLgorICAgIFsidW5kZWZpbmVkIiwgIk5hTiJdLAorICAgIFsibnVsbCIsICIt
MCJdLAorICAgIFsiMCIsICItMCJdLAorICAgIFsiLTAuIiwgIjAiXSwKKyAgICBbIjAuNSIsICIt
MC41Il0sCisgICAgWyItMC41IiwgIjAuNSJdLAorICAgIFsiNCIsICItNCJdLAorICAgIFsiNDIu
MSIsICItNDIuMSJdLAorICAgIFsiNDIuNSIsICItNDIuNSJdLAorICAgIFsiNDIuOSIsICItNDIu
OSJdLAorICAgIFsiLTQyLjEiLCAiNDIuMSJdLAorICAgIFsiLTQyLjUiLCAiNDIuNSJdLAorICAg
IFsiLTQyLjkiLCAiNDIuOSJdLAorICAgIFsiTWF0aC5QSSIsICItTWF0aC5QSSJdLAorICAgIFsi
SW5maW5pdHkiLCAiLUluZmluaXR5Il0sCisgICAgWyItSW5maW5pdHkiLCAiSW5maW5pdHkiXSwK
KyAgICBbIk5hTiIsICJOYU4iXSwKKyAgICBbIlwiV2ViS2l0XCIiLCAiTmFOIl0sCisgICAgWyJc
IjRcIiIsICItNCJdLAorICAgIFsiXCI0Mi41XCIiLCAiLTQyLjUiXSwKKyAgICBbInsgdmFsdWVP
ZjogKCkgPT4geyByZXR1cm4gNDsgfSB9IiwgIi00Il0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+
IHsgcmV0dXJuIDA7IH0gfSIsICItMCJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVy
biAtMDsgfSB9IiwgIjAiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4gMC41OyB9
IH0iLCAiLTAuNSJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiAtMC41OyB9IH0i
LCAiMC41Il0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuIE51bWJlci5NSU5fU0FG
RV9JTlRFR0VSOyB9IH0iLCAiOTAwNzE5OTI1NDc0MDk5MSJdLAorICAgIFsieyB2YWx1ZU9mOiAo
KSA9PiB7IHJldHVybiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjsgfSB9IiwgIi05MDA3MTk5MjU0
NzQwOTkxIl0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuIDB4ODAwMDAwMDB8MDsg
fSB9IiwgIjIxNDc0ODM2NDgiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4gMHg3
ZmZmZmZmZnwwOyB9IH0iLCAiLTIxNDc0ODM2NDciXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4g
eyByZXR1cm4gKDB4ODAwMDAwMDB8MCkgLSAwLjU7IH0gfSIsICIyMTQ3NDgzNjQ4LjUiXSwKKyAg
ICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4gKDB4N2ZmZmZmZmZ8MCkgKyAwLjU7IH0gfSIs
ICItMjE0NzQ4MzY0Ny41Il0sCitdOworCitsZXQgdmFsaWRJbnB1dFR5cGVkVGVzdENhc2VzID0g
dmFsaWRJbnB1dFRlc3RDYXNlcy5tYXAoKGVsZW1lbnQpID0+IHsgcmV0dXJuIFtldmFsKCIoIiAr
IGVsZW1lbnRbMF0gKyAiKSIpLCBldmFsKGVsZW1lbnRbMV0pXSB9KTsKKworZnVuY3Rpb24gaXNJ
ZGVudGljYWwocmVzdWx0LCBleHBlY3RlZCkKK3sKKyAgICBpZiAoZXhwZWN0ZWQgPT09IGV4cGVj
dGVkKSB7CisgICAgICAgIGlmIChyZXN1bHQgIT09IGV4cGVjdGVkKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAoIWV4cGVjdGVkICYmICgxIC8gZXhwZWN0ZWQpICE9PSAo
MSAvIHJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiByZXN1bHQgIT09IHJlc3VsdDsKK30KKworCisvLyBU
ZXN0IG5lZ2F0ZSB3aXRoIGEgdmVyeSBwb2x5bW9ycGhpYyBpbnB1dC4gQWxsIHRlc3QgY2FzZXMg
YXJlIHNlZW4gYXQgZWFjaCBpdGVyYXRpb24uCitmdW5jdGlvbiBvcGFxdWVBbGxUeXBlc05lZ2F0
ZShhcmd1bWVudCkgeworICAgIHJldHVybiAtKGFyZ3VtZW50KTsKK30KK25vSW5saW5lKG9wYXF1
ZUFsbFR5cGVzTmVnYXRlKTsKK25vT1NSRXhpdEZ1enppbmcob3BhcXVlQWxsVHlwZXNOZWdhdGUp
OworCitmdW5jdGlvbiB0ZXN0QWxsVHlwZXNDYWxsKCkgeworICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgMWUzOyArK2kpIHsKKyAgICAgICAgZm9yIChsZXQgdGVzdENhc2VJbnB1dCBvZiB2YWxpZElu
cHV0VHlwZWRUZXN0Q2FzZXMpIHsKKyAgICAgICAgICAgIGxldCBvdXRwdXQgPSBvcGFxdWVBbGxU
eXBlc05lZ2F0ZSh0ZXN0Q2FzZUlucHV0WzBdKTsKKyAgICAgICAgICAgIGlmICghaXNJZGVudGlj
YWwob3V0cHV0LCB0ZXN0Q2FzZUlucHV0WzFdKSkKKyAgICAgICAgICAgICAgICB0aHJvdyAiRmFp
bGVkIHRlc3RBbGxUeXBlc0NhbGwgZm9yIGlucHV0ICIgKyB0ZXN0Q2FzZUlucHV0WzBdICsgIiBl
eHBlY3RlZCAiICsgdGVzdENhc2VJbnB1dFsxXSArICIgZ290ICIgKyBvdXRwdXQ7CisgICAgICAg
IH0KKyAgICB9CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQWxsVHlwZXNOZWdh
dGUpID4gMykKKyAgICAgICAgdGhyb3cgIldlIHNob3VsZCBoYXZlIGRldGVjdGVkIG5lZ2F0ZSB3
YXMgcG9seW1vcnBoaWMgYW5kIGdlbmVyYXRlZCBhIGdlbmVyaWMgdmVyc2lvbi4iOworfQordGVz
dEFsbFR5cGVzQ2FsbCgpOworCisKKy8vIFBvbHltb3JwaGljIGlucHV0IGJ1dCBuZWdhdGl2ZSB6
ZXJvIGlzIG5vdCBvYnNlcnZhYmxlLgorZnVuY3Rpb24gb3BhcXVlQWxsVHlwZXNOZWdhdGVXaXRo
b3V0TmVnYXRpdmVaZXJvKGFyZ3VtZW50KSB7CisgICAgcmV0dXJuIC0oYXJndW1lbnQpICsgMDsK
K30KK25vSW5saW5lKG9wYXF1ZUFsbFR5cGVzTmVnYXRlV2l0aG91dE5lZ2F0aXZlWmVybyk7Citu
b09TUkV4aXRGdXp6aW5nKG9wYXF1ZUFsbFR5cGVzTmVnYXRlV2l0aG91dE5lZ2F0aXZlWmVybyk7
CisKK2Z1bmN0aW9uIHRlc3RBbGxUeXBlc1dpdGhvdXROZWdhdGl2ZVplcm9DYWxsKCkgeworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgMWUzOyArK2kpIHsKKyAgICAgICAgZm9yIChsZXQgdGVzdENh
c2VJbnB1dCBvZiB2YWxpZElucHV0VHlwZWRUZXN0Q2FzZXMpIHsKKyAgICAgICAgICAgIGxldCBv
dXRwdXQgPSBvcGFxdWVBbGxUeXBlc05lZ2F0ZVdpdGhvdXROZWdhdGl2ZVplcm8odGVzdENhc2VJ
bnB1dFswXSk7CisgICAgICAgICAgICBpZiAoIWlzSWRlbnRpY2FsKG91dHB1dCwgdGVzdENhc2VJ
bnB1dFsxXSArIDApKQorICAgICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdEFsbFR5cGVz
V2l0aG91dE5lZ2F0aXZlWmVyb0NhbGwgZm9yIGlucHV0ICIgKyB0ZXN0Q2FzZUlucHV0WzBdICsg
IiBleHBlY3RlZCAiICsgdGVzdENhc2VJbnB1dFsxXSArICIgZ290ICIgKyBvdXRwdXQ7CisgICAg
ICAgIH0KKyAgICB9CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQWxsVHlwZXNO
ZWdhdGUpID4gMykKKyAgICAgICAgdGhyb3cgIldlIHNob3VsZCBoYXZlIGRldGVjdGVkIG5lZ2F0
ZSB3YXMgcG9seW1vcnBoaWMgYW5kIGdlbmVyYXRlZCBhIGdlbmVyaWMgdmVyc2lvbi4iOworfQor
dGVzdEFsbFR5cGVzV2l0aG91dE5lZ2F0aXZlWmVyb0NhbGwoKTsKKworCisvLyBUZXN0IG5lZ2F0
ZSBvbiBhIGNvbXBsZXRlbHkgdHlwZWQgaW5wdXQuIEV2ZXJ5IGNhbGwgc2VlIG9ubHkgb25lIHR5
cGUuCitmdW5jdGlvbiB0ZXN0U2luZ2xlVHlwZUNhbGwoKSB7CisgICAgZm9yIChsZXQgdGVzdENh
c2VJbnB1dCBvZiB2YWxpZElucHV0VGVzdENhc2VzKSB7CisgICAgICAgIGV2YWwoYAorICAgICAg
ICAgICAgZnVuY3Rpb24gb3BhcXVlTmVnYXRlKGFyZ3VtZW50KSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIC0oYXJndW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm9JbmxpbmUo
b3BhcXVlTmVnYXRlKTsKKyAgICAgICAgICAgIG5vT1NSRXhpdEZ1enppbmcob3BhcXVlTmVnYXRl
KTsKKworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAg
ICAgICAgICAgIGlmICghaXNJZGVudGljYWwob3BhcXVlTmVnYXRlKCR7dGVzdENhc2VJbnB1dFsw
XX0pLCAke3Rlc3RDYXNlSW5wdXRbMV19KSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyAi
RmFpbGVkIHRlc3RTaW5nbGVUeXBlQ2FsbCgpIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVOZWdhdGUp
ID4gMSkKKyAgICAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RTaW5nbGVUeXBlQ2FsbCgp
LiBXZSBzaG91bGQgaGF2ZSBjb21waWxlZCBhIHNpbmdsZSBuZWdhdGUgZm9yIHRoZSBleHBlY3Rl
ZCB0eXBlLiI7CisgICAgICAgIGApOworICAgIH0KK30KK3Rlc3RTaW5nbGVUeXBlQ2FsbCgpOwor
CisKK2Z1bmN0aW9uIGNoZWNrQ29tcGlsZUNvdW50Rm9yVXNlbGVzc05lZ2F0aXZlWmVybyh0ZXN0
RnVuY3Rpb24pCit7CisgICAgaWYgKGpzY09wdGlvbnMoKS51c2VNYXhpbWFsRmx1c2hJbnNlcnRp
b25QaGFzZSkgeworICAgICAgICAvLyBJZiB3ZSBmb3JjZWQgYSBmbHVzaCBhZnRlciB0aGUgb3Bl
cmF0aW9uLCB0aGUgbmVnYXRpdmUgemVybyBiZWNvbWVzCisgICAgICAgIC8vIG9ic2VydmFibGUg
YW5kIHdlIG1heSBiZSBvdmVybHkgb3B0aW1pc3RpYy4KKyAgICAgICAgcmV0dXJuIG51bWJlck9m
REZHQ29tcGlsZXModGVzdEZ1bmN0aW9uKSA8PSAyOworICAgIH0KKyAgICByZXR1cm4gbnVtYmVy
T2ZERkdDb21waWxlcyh0ZXN0RnVuY3Rpb24pIDw9IDE7Cit9CisKKworLy8gVGVzdCBuZWdhdGUg
b24gYSBjb21wbGV0ZWx5IHR5cGVkIGlucHV0LCBidXQgd2l0aG91dCBuZWdhdGl2ZSB6ZXJvLgor
ZnVuY3Rpb24gdGVzdFNpbmdsZVR5cGVXaXRob3V0TmVnYXRpdmVaZXJvQ2FsbCgpIHsKKyAgICBm
b3IgKGxldCB0ZXN0Q2FzZUlucHV0IG9mIHZhbGlkSW5wdXRUZXN0Q2FzZXMpIHsKKyAgICAgICAg
ZXZhbChgCisgICAgICAgICAgICBmdW5jdGlvbiBvcGFxdWVOZWdhdGUoYXJndW1lbnQpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gLShhcmd1bWVudCkgKyAwOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbm9JbmxpbmUob3BhcXVlTmVnYXRlKTsKKyAgICAgICAgICAgIG5vT1NSRXhpdEZ1
enppbmcob3BhcXVlTmVnYXRlKTsKKworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx
ZTQ7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICghaXNJZGVudGljYWwob3BhcXVlTmVnYXRl
KCR7dGVzdENhc2VJbnB1dFswXX0pLCAke3Rlc3RDYXNlSW5wdXRbMV19ICsgMCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0U2luZ2xlVHlwZVdpdGhvdXROZWdhdGl2
ZVplcm9DYWxsKCkiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICghY2hlY2tDb21waWxlQ291bnRGb3JVc2VsZXNzTmVnYXRpdmVaZXJvKG9wYXF1ZU5l
Z2F0ZSkpCisgICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0U2luZ2xlVHlwZVdpdGhv
dXROZWdhdGl2ZVplcm9DYWxsKCkuIFdlIHNob3VsZCBoYXZlIGNvbXBpbGVkIGEgc2luZ2xlIG5l
Z2F0ZSBmb3IgdGhlIGV4cGVjdGVkIHR5cGUuIjsKKyAgICAgICAgYCk7CisgICAgfQorfQordGVz
dFNpbmdsZVR5cGVXaXRob3V0TmVnYXRpdmVaZXJvQ2FsbCgpOworCisKKy8vIFRlc3QgbmVnYXRl
IG9uIGNvbnN0YW50cworZnVuY3Rpb24gdGVzdENvbnN0YW50KCkgeworICAgIGZvciAobGV0IHRl
c3RDYXNlSW5wdXQgb2YgdmFsaWRJbnB1dFRlc3RDYXNlcykgeworICAgICAgICBldmFsKGAKKyAg
ICAgICAgICAgIGZ1bmN0aW9uIG9wYXF1ZU5lZ2F0ZU9uQ29uc3RhbnQoKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIC0oJHt0ZXN0Q2FzZUlucHV0WzBdfSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBub0lubGluZShvcGFxdWVOZWdhdGVPbkNvbnN0YW50KTsKKyAgICAgICAgICAgIG5v
T1NSRXhpdEZ1enppbmcob3BhcXVlTmVnYXRlT25Db25zdGFudCk7CisKKyAgICAgICAgICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzSWRl
bnRpY2FsKG9wYXF1ZU5lZ2F0ZU9uQ29uc3RhbnQoKSwgJHt0ZXN0Q2FzZUlucHV0WzFdfSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0Q29uc3RhbnQoKSI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG51bWJlck9mREZH
Q29tcGlsZXMob3BhcXVlTmVnYXRlT25Db25zdGFudCkgPiAxKQorICAgICAgICAgICAgICAgIHRo
cm93ICJGYWlsZWQgdGVzdENvbnN0YW50KCkuIFdlIHNob3VsZCBoYXZlIGNvbXBpbGVkIGEgc2lu
Z2xlIG5lZ2F0ZSBmb3IgdGhlIGV4cGVjdGVkIHR5cGUuIjsKKyAgICAgICAgYCk7CisgICAgfQor
fQordGVzdENvbnN0YW50KCk7CisKKworLy8gVmVyaWZ5IHdlIGNhbGwgdmFsdWVPZigpIGV4YWN0
bHkgb25jZSBwZXIgY2FsbC4KK2Z1bmN0aW9uIG9wYXF1ZU5lZ2F0ZUZvclNpZGVFZmZlY3RzKGFy
Z3VtZW50KSB7CisgICAgcmV0dXJuIC0oYXJndW1lbnQpOworfQorbm9JbmxpbmUob3BhcXVlTmVn
YXRlRm9yU2lkZUVmZmVjdHMpOworbm9PU1JFeGl0RnV6emluZyhvcGFxdWVOZWdhdGVGb3JTaWRl
RWZmZWN0cyk7CisKK2Z1bmN0aW9uIHRlc3RTaWRlRWZmZWN0KCkgeworICAgIGxldCB0ZXN0T2Jq
ZWN0ID0geworICAgICAgICBjb3VudGVyOiAwLAorICAgICAgICB2YWx1ZU9mOiBmdW5jdGlvbigp
IHsgKyt0aGlzLmNvdW50ZXI7IHJldHVybiAxNjsgfQorICAgIH07CisgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBpZiAob3BhcXVlTmVnYXRlRm9yU2lkZUVmZmVj
dHModGVzdE9iamVjdCkgIT09IC0xNikKKyAgICAgICAgICAgIHRocm93ICJJbmNvcnJlY3QgcmVz
dWx0IGluIHRlc3RTaWRlRWZmZWN0KCkiOworICAgIH0KKyAgICBpZiAodGVzdE9iamVjdC5jb3Vu
dGVyICE9PSAxZTQpCisgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFNpZGVFZmZlY3QoKSI7Cisg
ICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlTmVnYXRlRm9yU2lkZUVmZmVjdHMpID4g
MSkKKyAgICAgICAgdGhyb3cgIm9wYXF1ZU5lZ2F0ZUZvclNpZGVFZmZlY3RzKCkgaXMgcHJlZGlj
dGFibGUsIGl0IHNob3VsZCBvbmx5IGJlIGNvbXBpbGVkIG9uY2UuIjsKK30KK3Rlc3RTaWRlRWZm
ZWN0KCk7CisKKworLy8gVmVyaWZ5IG5lZ2F0ZSBpcyBub3Qgc3ViamVjdCB0byBDU0UgaWYgdGhl
IGFyZ3VtZW50IGhhcyBzaWRlIGVmZmVjdHMuCitmdW5jdGlvbiBvcGFxdWVOZWdhdGVGb3JDU0Uo
YXJndW1lbnQpIHsKKyAgICByZXR1cm4gLShhcmd1bWVudCkgKyAtKGFyZ3VtZW50KSArIC0oYXJn
dW1lbnQpOworfQorbm9JbmxpbmUob3BhcXVlTmVnYXRlRm9yQ1NFKTsKK25vT1NSRXhpdEZ1enpp
bmcob3BhcXVlTmVnYXRlRm9yQ1NFKTsKKworZnVuY3Rpb24gdGVzdENTRSgpIHsKKyAgICBsZXQg
dGVzdE9iamVjdCA9IHsKKyAgICAgICAgY291bnRlcjogMCwKKyAgICAgICAgdmFsdWVPZjogZnVu
Y3Rpb24oKSB7ICsrdGhpcy5jb3VudGVyOyByZXR1cm4gMTY7IH0KKyAgICB9OworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYgKG9wYXF1ZU5lZ2F0ZUZvckNT
RSh0ZXN0T2JqZWN0KSAhPT0gLTQ4KQorICAgICAgICAgICAgdGhyb3cgIkluY29ycmVjdCByZXN1
bHQgaW4gdGVzdENTRSgpIjsKKyAgICB9CisgICAgaWYgKHRlc3RPYmplY3QuY291bnRlciAhPT0g
M2U0KQorICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RDU0UoKSI7CisgICAgaWYgKG51bWJlck9m
REZHQ29tcGlsZXMob3BhcXVlTmVnYXRlRm9yQ1NFKSA+IDEpCisgICAgICAgIHRocm93ICJvcGFx
dWVOZWdhdGVGb3JDU0UoKSBpcyBwcmVkaWN0YWJsZSwgaXQgc2hvdWxkIG9ubHkgYmUgY29tcGls
ZWQgb25jZS4iOworfQordGVzdENTRSgpOworCisKKy8vIFZlcmlmeSBuZWdhdGUgaXMgbm90IHN1
YmplY3QgdG8gRENFIGlmIHRoZSBhcmd1bWVudCBoYXMgc2lkZSBlZmZlY3RzLgorZnVuY3Rpb24g
b3BhcXVlTmVnYXRlRm9yRENFKGFyZ3VtZW50KSB7CisgICAgLShhcmd1bWVudCk7Cit9Citub0lu
bGluZShvcGFxdWVOZWdhdGVGb3JEQ0UpOworbm9PU1JFeGl0RnV6emluZyhvcGFxdWVOZWdhdGVG
b3JEQ0UpOworCitmdW5jdGlvbiB0ZXN0RENFKCkgeworICAgIGxldCB0ZXN0T2JqZWN0ID0gewor
ICAgICAgICBjb3VudGVyOiAwLAorICAgICAgICB2YWx1ZU9mOiBmdW5jdGlvbigpIHsgKyt0aGlz
LmNvdW50ZXI7IHJldHVybiAxNjsgfQorICAgIH07CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx
ZTQ7ICsraSkgeworICAgICAgICBvcGFxdWVOZWdhdGVGb3JEQ0UodGVzdE9iamVjdCk7CisgICAg
fQorICAgIGlmICh0ZXN0T2JqZWN0LmNvdW50ZXIgIT09IDFlNCkKKyAgICAgICAgdGhyb3cgIkZh
aWxlZCB0ZXN0RENFKCkiOworICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZU5lZ2F0
ZUZvckRDRSkgPiAxKQorICAgICAgICB0aHJvdyAib3BhcXVlTmVnYXRlRm9yRENFKCkgaXMgcHJl
ZGljdGFibGUsIGl0IHNob3VsZCBvbmx5IGJlIGNvbXBpbGVkIG9uY2UuIjsKK30KK3Rlc3REQ0Uo
KTsKKworCisvLyBUZXN0IGV4Y2VwdGlvbnMgaW4gdGhlIGFyZ3VtZW50LgorZnVuY3Rpb24gdGVz
dEV4Y2VwdGlvbigpIHsKKyAgICBsZXQgY291bnRlciA9IDA7CisgICAgZnVuY3Rpb24gb3BhcXVl
TmVnYXRlV2l0aEV4Y2VwdGlvbihhcmd1bWVudCkgeworICAgICAgICBsZXQgcmVzdWx0ID0gLShh
cmd1bWVudCk7CisgICAgICAgICsrY291bnRlcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgbm9JbmxpbmUob3BhcXVlTmVnYXRlV2l0aEV4Y2VwdGlvbik7CisKKyAgICBsZXQg
dGVzdE9iamVjdCA9IHsgdmFsdWVPZjogKCkgPT4geyAgcmV0dXJuIDY0OyB9IH07CisKKyAgICAv
LyBXYXJtIHVwIHdpdGhvdXQgZXhjZXB0aW9uLgorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWUz
OyArK2kpIHsKKyAgICAgICAgaWYgKG9wYXF1ZU5lZ2F0ZVdpdGhFeGNlcHRpb24odGVzdE9iamVj
dCkgIT09IC02NCkKKyAgICAgICAgICAgIHRocm93ICJJbmNvcnJlY3QgcmVzdWx0IGluIG9wYXF1
ZU5lZ2F0ZVdpdGhFeGNlcHRpb24oKSI7CisgICAgfQorCisgICAgbGV0IHRlc3RUaHJvd09iamVj
dCA9IHsgdmFsdWVPZjogKCkgPT4geyB0aHJvdyB0ZXN0T2JqZWN0OyByZXR1cm4gNjQ7IH0gfTsK
KworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWUyOyArK2kpIHsKKyAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgIGlmIChvcGFxdWVOZWdhdGVXaXRoRXhjZXB0aW9uKHRlc3RUaHJvd09iamVjdCkg
IT09IDgpCisgICAgICAgICAgICAgICAgdGhyb3cgIlRoaXMgY29kZSBzaG91bGQgbm90IGJlIHJl
YWNoZWQhISI7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmIChlICE9PSB0
ZXN0T2JqZWN0KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgIldyb25nIG9iamVjdCB0aHJvd24g
ZnJvbSBvcGFxdWVOZWdhdGVXaXRoRXhjZXB0aW9uLiIKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChjb3VudGVyICE9PSAxZTMpIHsKKyAgICAgICAgdGhyb3cgIklu
dmFsaWQgY291bnQgaW4gdGVzdEV4Y2VwdGlvbigpIjsKKyAgICB9Cit9Cit0ZXN0RXhjZXB0aW9u
KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291697</attachid>
            <date>2016-10-14 18:46:50 -0700</date>
            <delta_ts>2016-10-14 19:21:55 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-162587-20161014184322.patch</filename>
            <type>text/plain</type>
            <size>53576</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3MzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZjM5MDExMzMxYTYyNDczMjBhNDA3YzlmZDgxMzhhMGNmMjgyZmUyLi43MGRiZGFjY2I5OThkYWM0
ZjNmNzk2ZDlmZDA0NzI1MGNmYmNkYWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OSBAQAorMjAxNi0xMC0xNCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBvcF9uZWdhdGUgc2hvdWxkIHdpdGggYW55IHR5cGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjU4NworCisg
ICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgQXJp
dGhOZWdhdGUgaXMgcXVpdGUgc2ltcGxlLiBJZiB0aGUgaW5wdXQgaXMgZG91YmxlLCB0aGUgb3V0
cHV0CisgICAgICAgIGlzIGRvdWJsZS4gVGhlIG90aGVyIGNhc2VzIGFyZSBzZXQgZnJvbSB0aGUg
TExJbnQgc2xvdyBjYXNlLgorCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bWFrZVNhZmUpOgorICAgICAgICAq
IGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6Cisg
ICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVw
UGhhc2U6OmZpeHVwTm9kZSk6CisKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJhbmdlT3B0aW1p
emF0aW9uUGhhc2UuY3BwOgorICAgICAgICBUd2VhayBhIGJpdCB0aGUgSW50ZWdlclJhbmdlT3B0
aW1pemF0aW9uUGhhc2Ugd2hlbiBzaW1wbGlmeWluZworICAgICAgICBBcml0aEFicyB0byBBcml0
aE5lZ2F0ZS4KKyAgICAgICAgV2Ugc2hvdWxkIG5vdCBkbyB0aGUgY29udmVyc2lvbiBpZiB0aGUg
dGFyZ2V0IG5vZGVzIE9TUiBFeGl0cworICAgICAgICBvbiBkaWZmZXJlbnQgaW5wdXQgdGhhbiB0
aGUgc291cmNlIG5vZGUuCisKKyAgICAgICAgSW4gcGFydGljdWxhciwgQ2hlY2tlZCBBcml0aE5l
Z2F0ZSBleGl0cyBvbiB6ZXJvIHdoaWxlCisgICAgICAgIEFyaXRoQWJzIGhhcyBub3QgcHJvYmxl
bSB3aXRoIGl0LgorICAgICAgICBVbmNoZWNrZWQgQXJpdGhBYnMoKSBkbyBub3QgT1NSIEV4aXQg
b24gSU5UX01JTiwgQXJpdGhOZWcKKyAgICAgICAgc2hvdWxkIG5vdCBlaXRoZXIuCisKKyAgICAg
ICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVNYXRoSUMpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAg
ICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZU1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVBcml0aE5lZ2F0ZSk6CisKKyAgICAgICAgKiBqaXQvSklUTmVnR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SklUTmVnR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQ
YXRoKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIEFkZCByZXN1
bHQgcHJvZmlsaW5nIGluIGJhc2VsaW5lIHRvIGhhdmUgdHlwZXMgd2UgY2FuIHVzZQorICAgICAg
ICBpbiBERkcgYW5kIEZUTC4KKwogMjAxNi0xMC0xNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWls
bGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBCMyBuZWVkcyBhIHNwZWNpYWwgV2FzbUFkZHJlc3Mg
T3Bjb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggMGJiZWUzNGVhYmEzYjdhYmU3MTBjMmM2OTk1
Y2UyNDlkOWQyYzk3NS4uMTFhMjhhYTZiMzFkOTQ0OWMzY2JlZGI3MTk2N2MzMzE1NGQ4ODI5MiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaApAQCAtNjU3LDcgKzY1Nyw4IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2Ji
ZXJMaW1pCiAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CisgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0J5dGVjb2RlTnVtYmVyKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCBiZThkM2YwMjc2ZjQ1
Mjg3MWI3NTU0OGEwYjM3YjVlYzhjM2I5MGI5Li4zMjhiNTZhYjYzZjJmMjg3MjdhMTVmZTQ2MGRl
NDlmZGQ1Njk5MzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcApAQCAtOTc0LDYgKzk3NCwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTWF5SGF2ZU5vbk51bWJlclJlc3VsdCk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOiB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UoIWFyaXRoUHJvZmlsZS0+ZGlkT2JzZXJ2ZU5vbk51bWJlcigpLCAib3BfbmVn
YXRlIHN0YXJ0cyB3aXRoIGEgdG9OdW1iZXIoKSBvbiB0aGUgYXJndW1lbnQsIGl0IHNob3VsZCBv
bmx5IHByb2R1Y2UgbnVtYmVycy4iKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoYXJpdGhQ
cm9maWxlLT5saHNPYnNlcnZlZFR5cGUoKS5zYXdOdW1iZXIoKSB8fCBhcml0aFByb2ZpbGUtPmRp
ZE9ic2VydmVEb3VibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxh
Z3MoTm9kZU1heUhhdmVEb3VibGVSZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJp
dGhQcm9maWxlLT5kaWRPYnNlcnZlTmVnWmVyb0RvdWJsZSgpIHx8IG1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVybykp
CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlOZWdaZXJv
SW5CYXNlbGluZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcml0aFByb2ZpbGUtPmRpZE9i
c2VydmVJbnQzMk92ZXJmbG93KCkgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5o
YXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTWF5T3ZlcmZsb3dJbnQzMkluQmFzZWxpbmUpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC05OTEsMTQgKzEwMDIsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG5vZGUt
Pm1lcmdlRmxhZ3MoTm9kZU1heU92ZXJmbG93SW50MzJJbkJhc2VsaW5lKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJpdGhOZWdh
dGU6Ci0gICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5IHdlIGNhbid0IHRlbGwgdGhlIGRpZmZl
cmVuY2UgYmV0d2VlbiBhIG5lZ2F0aW9uIG92ZXJmbG93aW5nCi0gICAgICAgICAgICAgICAgLy8g
KGkuZS4gLSgxIDw8IDMxKSkgb3IgZ2VuZXJhdGluZyBuZWdhdGl2ZSB6ZXJvIChpLmUuIC0wKS4g
SWYgaXQgdG9vayBzbG93Ci0gICAgICAgICAgICAgICAgLy8gcGF0aCB0aGVuIHdlIGFzc3VtZSB0
aGF0IGl0IGRpZCBib3RoIG9mIHRob3NlIHRoaW5ncy4KLSAgICAgICAgICAgICAgICBub2RlLT5t
ZXJnZUZsYWdzKE5vZGVNYXlPdmVyZmxvd0ludDMySW5CYXNlbGluZSk7Ci0gICAgICAgICAgICAg
ICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTWF5TmVnWmVyb0luQmFzZWxpbmUpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggYmNjZjU1MWVhZjhiNDEzYjlmMDg2N2MxNmFjZWUy
ZmE4OWQ4YjlkNS4uM2I1MGI1ODMyYjViNWU0OGQ3ZDJhNmNhZGNjZGExZDY4MWE5YzZiZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTIxMSw2ICsyMTEs
MTcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVh
ZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgfQogICAgICAgICByZXR1cm47
CiAKKyAgICBjYXNlIEFyaXRoTmVnYXRlOgorICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IEludDMyVXNlCisgICAgICAgICAgICB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gRG91YmxlUmVwVXNlCisgICAgICAgICAgICB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gSW50NTJSZXBVc2UpCisgICAgICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRl
KEhlYXApOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKwogICAgIGNhc2UgSXNDZWxsV2l0
aFR5cGU6CiAgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSwgbm9kZS0+cXVlcmllZFR5cGUoKSkp
OwogICAgICAgICByZXR1cm47CkBAIC0zMzQsNyArMzQ1LDYgQEAgdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdy
aXRlRnUKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBBcml0aEFkZDoKLSAgICBjYXNlIEFy
aXRoTmVnYXRlOgogICAgIGNhc2UgQXJpdGhNb2Q6CiAgICAgY2FzZSBEb3VibGVBc0ludDMyOgog
ICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAppbmRleCA1NmNiNTdhODcxZjQwMzZhZWYyMTI5ZWRkNWE3MDZlNTVjODA3
YmMwLi42MzQ3Yzc5ZDZhODIyZGQ0MWUyN2Y3ZmY5OGQyY2VkMTQwYmI5NjI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAgLTIwOSw3ICsyMDksNyBA
QCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aE5l
Z2F0ZTogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGgudW5hcnlBcml0aFNob3VsZFNwZWN1bGF0
ZUludDMyKG5vZGUsIEZpeHVwUGFzcykpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlSW50MzJPckJvb2xlYW4oKSAmJiBub2RlLT5jYW5TcGVjdWxhdGVJ
bnQzMihGaXh1cFBhc3MpKSB7CiAgICAgICAgICAgICAgICAgZml4SW50T3JCb29sZWFuRWRnZShu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKG5vZGUtPmFyaXRoTm9kZUZsYWdzKCkpKQogICAgICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRBcml0aE1vZGUoQXJpdGg6OlVuY2hlY2tlZCk7CkBAIC0yMTcsNiArMjE3LDggQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhNb2RlKEFyaXRoOjpDaGVj
a092ZXJmbG93KTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnNldEFyaXRoTW9kZShBcml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0aXZlWmVybyk7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVzdWx0KE5vZGVSZXN1bHRJbnQzMik7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVuYXJ5
QXJpdGhTaG91bGRTcGVjdWxhdGVBbnlJbnQobm9kZSwgRml4dXBQYXNzKSkgewpAQCAtMjI2LDEw
ICsyMjgsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnNldEFyaXRoTW9kZShBcml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0aXZl
WmVybyk7CiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVzdWx0KE5vZGVSZXN1bHRJbnQ1Mik7
CisgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpeERvdWJs
ZU9yQm9vbGVhbkVkZ2Uobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgbm9kZS0+c2V0UmVz
dWx0KE5vZGVSZXN1bHREb3VibGUpOworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5z
aG91bGRTcGVjdWxhdGVOb3RDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBmaXhEb3VibGVPckJv
b2xlYW5FZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRSZXN1
bHQoTm9kZVJlc3VsdERvdWJsZSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhO
b2RlTXVzdEdlbmVyYXRlKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGZp
eEVkZ2U8VW50eXBlZFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAppbmRleCAy
OWFmNWJkYTBjMzQ0ZTU4Njg1MmZjNGM2MjlkZjIxNGVjZTJiNWZlLi4wMWU1ZGRhOTEzNTZhZmQ3
NTE1OWU0MGMzZjc0NDQ5MTY1MTkyZDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcApA
QCAtMTI1Miw5ICsxMjUyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1heFZhbHVlIDw9IDApIHsKKyAg
ICAgICAgICAgICAgICAgICAgYm9vbCBhYnNJc1VuY2hlY2tlZCA9ICFzaG91bGRDaGVja092ZXJm
bG93KG5vZGUtPmFyaXRoTW9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1heFZhbHVl
IDwgMCB8fCAoYWJzSXNVbmNoZWNrZWQgJiYgbWF4VmFsdWUgPD0gMCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0FyaXRoTmVnYXRlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobWluVmFsdWUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigp
KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFic0lzVW5jaGVja2VkIHx8IG1pblZhbHVl
ID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRBcml0aE1vZGUoQXJpdGg6OlVuY2hlY2tlZCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCA0ZjA0MzhhM2JkMTUwMjRkNzk4NTQzYWQy
NGRiN2FmNDE2ZmNhMThkLi5hYmQ5NTYzMWFhYjJkMjFlOTFkYjc1NzFjZjNhZjNiODU1OWVhZjQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtMjQ1LDE3ICsyNDUsMjMgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBBcml0aE5lZ2F0
ZToKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgudW5hcnlBcml0aFNob3VsZFNwZWN1bGF0ZUludDMyKG5v
ZGUsIG1fcGFzcykpCisgICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6IHsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwor
ICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNJbnQz
Mk9yQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pICYmIG5vZGUtPmNhblNwZWN1bGF0ZUlu
dDMyKG1fcGFzcykpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1fZ3JhcGgudW5h
cnlBcml0aFNob3VsZFNwZWN1bGF0ZUFueUludChub2RlLCBtX3Bhc3MpKQogICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50NTJPbmx5KTsKLSAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNCeXRlY29kZU51bWJl
clNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihzcGVjdWxhdGVkRG91YmxlVHlwZUZvclByZWRpY3Rpb24obm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzJPbmx5KTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm1heUhhdmVEb3VibGVSZXN1bHQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNCeXRl
Y29kZURvdWJsZSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKKyAgICAgICAgfQogICAgICAgICBjYXNlIEFyaXRoTWlu
OgogICAgICAgICBjYXNlIEFyaXRoTWF4OiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBs
ZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggNWRkODY4YTU2MThiMmEzYmI1
NjM2ZmYzZTZjMDUxMzE0MTE5NDcwMi4uYWU4NDU2MzlkNmNjZmY0NjBkMjhkMWNlNGQ4Yzk2ZjI1
ZDU3YWE0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKQEAgLTQyMzcsMTEgKzQyMzcsMTA2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBcml0aE5lZ2F0ZShOb2RlKiBub2RlKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
ICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBt
X2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykt
PmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRl
Y29kZUluZGV4KTsKKyAgICAgICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuY29kZUJsb2NrKCkt
PmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAgICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0
aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZTsKKyAgICAgICAgYXV0byBub25SZXBh
dGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZTsKKyAgICAgICAgYm9vbCBuZWVk
c1NjcmF0Y2hHUFJSZWcgPSB0cnVlOworICAgICAgICBjb21waWxlTWF0aElDKG5vZGUsIG5lZ0lD
LCBuZWVkc1NjcmF0Y2hHUFJSZWcsIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1
bmN0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFJlcGF0Y2hpbmdGdW5jdGlvbiwgdHlwZW5hbWUg
Tm9uUmVwYXRjaGluZ0Z1bmN0aW9uPgordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hdGhJ
QyhOb2RlKiBub2RlLCBKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGJvb2wgbmVl
ZHNTY3JhdGNoR1BSUmVnLCBSZXBhdGNoaW5nRnVuY3Rpb24gcmVwYXRjaGluZ0Z1bmN0aW9uLCBO
b25SZXBhdGNoaW5nRnVuY3Rpb24gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKQoreworICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBPcHRpb25hbDxHUFJUZW1wb3Jhcnk+
IGdwclNjcmF0Y2g7CisgICAgaWYgKG5lZWRzU2NyYXRjaEdQUlJlZykgeworICAgICAgICBncHJT
Y3JhdGNoID0gR1BSVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICBzY3JhdGNoR1BSID0gZ3ByU2Ny
YXRjaC0+Z3ByKCk7CisgICAgfQorICAgIEpTVmFsdWVPcGVyYW5kIGNoaWxkT3BlcmFuZCh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3MgY2hpbGRSZWdzID0gY2hpbGRPcGVy
YW5kLmpzVmFsdWVSZWdzKCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIFJldXNlLCBjaGlsZE9wZXJhbmQpOworICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MocmVzdWx0LmdwcigpKTsKKyNlbHNlCisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0
aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzKHJlc3VsdFBheWxvYWQuZ3ByKCksIHJlc3VsdFRhZy5ncHIoKSk7Cisj
ZW5kaWYKKworI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQorICAgIGF1dG8gaW5saW5lU3RhcnQg
PSBtX2ppdC5sYWJlbCgpOworI2VuZGlmCisKKyAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRl
PiBpY0dlbmVyYXRpb25TdGF0ZSA9IEJveDxNYXRoSUNHZW5lcmF0aW9uU3RhdGU+OjpjcmVhdGUo
KTsKKyAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJhdG9yKHJlc3VsdFJlZ3MsIGNoaWxk
UmVncywgc2NyYXRjaEdQUik7CisKKyAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxz
ZTsKKyAgICBib29sIGdlbmVyYXRlZElubGluZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUobV9q
aXQsICppY0dlbmVyYXRpb25TdGF0ZSwgc2hvdWxkRW1pdFByb2ZpbGluZyk7CisKKyAgICBpZiAo
Z2VuZXJhdGVkSW5saW5lKSB7CisgICAgICAgIEFTU0VSVCghaWNHZW5lcmF0aW9uU3RhdGUtPnNs
b3dQYXRoSnVtcHMuZW1wdHkoKSk7CisKKyAgICAgICAgVmVjdG9yPFNpbGVudFJlZ2lzdGVyU2F2
ZVBsYW4+IHNhdmVQbGFuczsKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJbXBsKGZh
bHNlLCBzYXZlUGxhbnMsIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGF1dG8gZG9uZSA9IG1faml0
LmxhYmVsKCk7CisKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoWz0sIHNhdmVQbGFucyA9
IFdURk1vdmUoc2F2ZVBsYW5zKV0gKCkgeworICAgICAgICAgICAgaWNHZW5lcmF0aW9uU3RhdGUt
PnNsb3dQYXRoSnVtcHMubGluaygmbV9qaXQpOworICAgICAgICAgICAgaWNHZW5lcmF0aW9uU3Rh
dGUtPnNsb3dQYXRoU3RhcnQgPSBtX2ppdC5sYWJlbCgpOworI2lmIEVOQUJMRShNQVRIX0lDX1NU
QVRTKQorICAgICAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gbV9qaXQubGFiZWwoKTsKKyNl
bmRpZgorCisgICAgICAgICAgICBzaWxlbnRTcGlsbChzYXZlUGxhbnMpOworCisgICAgICAgICAg
ICBpZiAoaWNHZW5lcmF0aW9uU3RhdGUtPnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKKyAgICAgICAg
ICAgICAgICBpY0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbihi
aXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHJlcGF0Y2hpbmdGdW5jdGlvbiksIHJl
c3VsdFJlZ3MsIGNoaWxkUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBpY0dlbmVyYXRpb25TdGF0ZS0+c2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGNoaWxkUmVn
cyk7CisKKyAgICAgICAgICAgIHNpbGVudEZpbGwoc2F2ZVBsYW5zKTsKKyAgICAgICAgICAgIG1f
aml0LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAgICAgICAgICBtX2ppdC5qdW1wKCkubGlua1RvKGRv
bmUsICZtX2ppdCk7CisKKyAgICAgICAgICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIG1hdGhJQy0+ZmluYWxpemVJbmxp
bmVDb2RlKCppY0dlbmVyYXRpb25TdGF0ZSwgbGlua0J1ZmZlcik7CisgICAgICAgICAgICB9KTsK
KworI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQorICAgICAgICAgICAgYXV0byBzbG93UGF0aEVu
ZCA9IG1faml0LmxhYmVsKCk7CisgICAgICAgICAgICBtX2ppdC5hZGRMaW5rVGFzayhbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0
YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhFbmQpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KGxpbmtCdWZmZXIubG9jYXRpb25P
ZihzbG93UGF0aFN0YXJ0KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgICAgICBt
YXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0gc2l6ZTsKKyAgICAgICAgICAgIH0pOworI2Vu
ZGlmCisKKyAgICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihub25SZXBhdGNoaW5nRnVuY3Rpb24sIHJlc3VsdFJl
Z3MsIGNoaWxkUmVncyk7CisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAgfQor
CisjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAgYXV0byBpbmxpbmVFbmQgPSBtX2ppdC5s
YWJlbCgpOworICAgIG1faml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoaW5saW5lRW5kKS5leGVjdXRhYmxlQWRkcmVzcygpKSAtIHN0YXRpY19jYXN0
PGNoYXIqPihsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lU3RhcnQpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOworICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0gc2l6ZTsKKyAg
ICB9KTsKKyNlbmRpZgorCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAg
ICByZXR1cm47CiB9CisKKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5v
ZGUqIG5vZGUpCiB7CiAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCA2Mzg3ODdm
MWFjNzEyYmJjZTkzZWJjMjM4NGVkODgxOTI3NWQ0Y2UwLi44YWZlZmE5Nzc4MWIyYzk2ZmU3MDBh
YjFmYjY4MWM4Mzk5ODJlZWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCkBAIC0xMzEyLDYgKzEzMTIsMTEgQEAgcHVibGljOgogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSk1p
YyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnLCBUcnVzdGVk
SW1tUHRyIG1hdGhJQykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcuZ3ByKCksIG1hdGhJQyk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0LmdwcigpKTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpNaWMgb3BlcmF0aW9uLCBKU1Zh
bHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIsIFRydXN0
ZWRJbW1QdHIgbWF0aElDKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEuZ3ByKCksIGFyZzIuZ3ByKCksIG1hdGhJQyk7CkBAIC0xNzk5LDcgKzE4
MDQsMTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMSwgYXJnMi5wYXlsb2FkR1BSKCksIGFyZzIudGFnR1BSKCksIGFyZzMpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQot
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSk1p
YyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnLCBUcnVzdGVk
SW1tUHRyIG1hdGhJQykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcucGF5bG9hZEdQUigpLCBhcmcudGFnR1BS
KCksIG1hdGhJQyk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0LnBheWxvYWRHUFIoKSwgcmVzdWx0LnRhZ0dQUigpKTsKKyAgICB9CiAgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpNaWMgb3BlcmF0
aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFy
ZzIsIFRydXN0ZWRJbW1QdHIgbWF0aElDKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzEucGF5bG9hZEdQUigp
LCBhcmcxLnRhZ0dQUigpLCBhcmcyLnBheWxvYWRHUFIoKSwgYXJnMi50YWdHUFIoKSwgbWF0aElD
KTsKQEAgLTI1OTUsNiArMjYwNCw4IEBAIHB1YmxpYzoKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFJlcGF0Y2hpbmdGdW5jdGlvbiwgdHlwZW5hbWUgTm9uUmVw
YXRjaGluZ0Z1bmN0aW9uPgogICAgIHZvaWQgY29tcGlsZU1hdGhJQyhOb2RlKiwgSklUQmluYXJ5
TWF0aElDPEdlbmVyYXRvcj4qLCBib29sIG5lZWRzU2NyYXRjaEdQUlJlZywgYm9vbCBuZWVkc1Nj
cmF0Y2hGUFJSZWcsIFJlcGF0Y2hpbmdGdW5jdGlvbiwgTm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBSZXBhdGNoaW5nRnVu
Y3Rpb24sIHR5cGVuYW1lIE5vblJlcGF0Y2hpbmdGdW5jdGlvbj4KKyAgICB2b2lkIGNvbXBpbGVN
YXRoSUMoTm9kZSosIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qLCBib29sIG5lZWRzU2NyYXRj
aEdQUlJlZywgUmVwYXRjaGluZ0Z1bmN0aW9uLCBOb25SZXBhdGNoaW5nRnVuY3Rpb24pOwogCiAg
ICAgdm9pZCBjb21waWxlQXJpdGhEb3VibGVVbmFyeU9wKE5vZGUqLCBkb3VibGUgKCpkb3VibGVG
dW5jdGlvbikoZG91YmxlKSwgZG91YmxlICgqb3BlcmF0aW9uKShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSkpOwogICAgIHZvaWQgY29tcGlsZVZhbHVlQWRkKE5vZGUqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCAwMTk5N2RiOTE3OTg5
ZDU3OTE1NmE4NjRjMTZjMjQwYWE0ODEzMThkLi44ZjM1NTBkYzg2MzI1ZTBhY2ZiNWI3OTQ2Y2E4
MmMwMjg0MDNjZDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCkBAIC0xNTgwLDYgKzE1ODAsOTAgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yPgorICAgIHZvaWQgY29tcGlsZU1hdGhJQyhKSVRV
bmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIEZ1bmN0aW9uUHRyIHJlcGF0Y2hpbmdGdW5j
dGlvbiwgRnVuY3Rpb25QdHIgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKQorICAgIHsKKyAgICAgICAg
Tm9kZSogbm9kZSA9IG1fbm9kZTsKKworICAgICAgICBMVmFsdWUgb3BlcmFuZCA9IGxvd0pTVmFs
dWUobm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRT
b21lUmVnaXN0ZXIob3BlcmFuZCk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX3RhZ01h
c2ssIFZhbHVlUmVwOjpsYXRlUmVnKEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAg
ICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdUeXBlTnVtYmVyLCBWYWx1ZVJlcDo6bGF0ZVJlZyhH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgUmVmUHRyPFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9IHByZXBhcmVQYXRjaHBvaW50Rm9y
RXhjZXB0aW9ucyhwYXRjaHBvaW50KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNo
UmVnaXN0ZXJzID0gMTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6
bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxT
dGF0ZTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICAgICAgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1w
TGlzdD4gZXhjZXB0aW9ucyA9CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+
c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFyYW1zKS0+anVtcHMoaml0KTsKKworI2lmIEVOQUJMRShN
QVRIX0lDX1NUQVRTKQorICAgICAgICAgICAgICAgIGF1dG8gaW5saW5lU3RhcnQgPSBqaXQubGFi
ZWwoKTsKKyNlbmRpZgorCisgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0
ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNy
ZWF0ZSgpOworICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3Io
SlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigp
KSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CisKKyAgICAgICAgICAgICAgICBib29sIHNob3VsZEVt
aXRQcm9maWxpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZElubGlu
ZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoaml0LCAqbWF0aElDR2VuZXJhdGlvblN0YXRlLCBz
aG91bGRFbWl0UHJvZmlsaW5nKTsKKworICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRJbmxp
bmUpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtYXRoSUNHZW5lcmF0aW9uU3RhdGUt
PnNsb3dQYXRoSnVtcHMuZW1wdHkoKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9
IGppdC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aEp1bXBzLmxpbmsoJmppdCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUtPnNsb3dQYXRo
U3RhcnQgPSBqaXQubGFiZWwoKTsKKyNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGppdC5sYWJlbCgpOworI2VuZGlm
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUtPnNo
b3VsZFNsb3dQYXRoUmVwYXRjaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb3dQ
YXRoQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJl
Z2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgZXhjZXB0aW9ucy5nZXQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaGluZ0Z1bmN0aW9uLCBwYXJh
bXNbMF0uZ3ByKCksIHBhcmFtc1sxXS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KG1hdGhJQykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZS0+c2xvd1BhdGhDYWxsID0gY2FsbC5jYWxsKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb3dQYXRoQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbigqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBq
aXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXhjZXB0aW9ucy5nZXQoKSwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uLCBwYXJhbXNbMF0uZ3By
KCksIHBhcmFtc1sxXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLT5zbG93UGF0aENhbGwgPSBjYWxsLmNhbGwoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1Rv
KGRvbmUsICZqaXQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0aElDLT5maW5hbGl6ZUlubGluZUNvZGUoKm1hdGhJQ0dlbmVyYXRpb25TdGF0ZSwgbGlu
a0J1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKworI2lmIEVOQUJMRShNQVRI
X0lDX1NUQVRTKQorICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBzbG93UGF0aEVuZCA9IGpp
dC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBzaXplID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93
UGF0aEVuZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkgLSBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1
ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBz
aXplOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisjZW5kaWYKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBleGNlcHRp
b25zLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgbm9uUmVwYXRjaGluZ0Z1bmN0aW9u
LCBwYXJhbXNbMF0uZ3ByKCksIHBhcmFtc1sxXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgfQor
CisjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAgICAgICAgICAgICAgYXV0byBpbmxpbmVF
bmQgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXpl
ID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVFbmQpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KGxpbmtCdWZmZXIubG9jYXRp
b25PZihpbmxpbmVTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICAgICAg
ICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOworICAgICAgICAgICAgICAg
IH0pOworI2VuZGlmCisgICAgICAgICAgICB9KTsKKworICAgICAgICBzZXRKU1ZhbHVlKHBhdGNo
cG9pbnQpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3I+CiAgICAg
dm9pZCBjb21waWxlTWF0aElDKEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIEZ1
bmN0aW9uUHRyIHJlcGF0Y2hpbmdGdW5jdGlvbiwgRnVuY3Rpb25QdHIgbm9uUmVwYXRjaGluZ0Z1
bmN0aW9uKQogICAgIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKQEAgLTI0NTEsNyAr
MjUzNSwxMiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtp
bmQiKTsKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX25vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKKyAgICAgICAgICAgIEFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbV9mdGxTdGF0ZS5ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvciht
X25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgSklUTmVn
SUMqIG5lZ0lDID0gY29kZUJsb2NrKCktPmFkZEpJVE5lZ0lDKGFyaXRoUHJvZmlsZSk7CisgICAg
ICAgICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0
aW1pemU7CisgICAgICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlv
bkFyaXRoTmVnYXRlOworICAgICAgICAgICAgY29tcGlsZU1hdGhJQyhuZWdJQywgcmVwYXRjaGlu
Z0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE5lZ0dlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE5lZ0dlbmVy
YXRvci5jcHAKaW5kZXggZGY5MWM0ODg4NjkxOWU3MDM1NjJmOWM2NDNkODcxNjI4YmFmNzY2ZS4u
OTJjMjlkZDYzMGE5N2M5OWE2YjRjOTgxMjA0Y2YyZWI1YzJhNmUzNiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVROZWdHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUTmVnR2VuZXJhdG9yLmNwcApAQCAtODIsNyArODIsNyBAQCBK
SVRNYXRoSUNJbmxpbmVSZXN1bHQgSklUTmVnR2VuZXJhdG9yOjpnZW5lcmF0ZUlubGluZShDQ2Fs
bEhlbHBlcnMmIGppdCwgTWF0aElDRwogICAgIHJldHVybiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQ6
OkdlbmVyYXRlRnVsbFNuaXBwZXQ7CiB9CiAKLWJvb2wgSklUTmVnR2VuZXJhdG9yOjpnZW5lcmF0
ZUZhc3RQYXRoKENDYWxsSGVscGVycyYgaml0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBlbmRK
dW1wTGlzdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd1BhdGhKdW1wTGlzdCwgY29uc3Qg
QXJpdGhQcm9maWxlKiwgYm9vbCkKK2Jvb2wgSklUTmVnR2VuZXJhdG9yOjpnZW5lcmF0ZUZhc3RQ
YXRoKENDYWxsSGVscGVycyYgaml0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0JiBlbmRKdW1wTGlz
dCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgc2xvd1BhdGhKdW1wTGlzdCwgY29uc3QgQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUsIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZykKIHsKICAgICBB
U1NFUlQobV9zY3JhdGNoR1BSICE9IG1fc3JjLnBheWxvYWRHUFIoKSk7CiAgICAgQVNTRVJUKG1f
c2NyYXRjaEdQUiAhPSBtX3Jlc3VsdC5wYXlsb2FkR1BSKCkpOwpAQCAtMTE1LDYgKzExNSwxMCBA
QCBib29sIEpJVE5lZ0dlbmVyYXRvcjo6Z2VuZXJhdGVGYXN0UGF0aChDQ2FsbEhlbHBlcnMmIGpp
dCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdAogI2Vsc2UKICAgICBqaXQueG9yMzIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMSA8PCAzMSksIG1fcmVzdWx0LnRhZ0dQUigpKTsKICNlbmRpZgor
ICAgIC8vIFRoZSBmbGFncyBvZiBBcml0aE5lZ2F0ZSBhcmUgYmFzaWMgaW4gREZHLgorICAgIC8v
IFdlIG9ubHkgbmVlZCB0byBrbm93IGlmIHdlIGV2ZXIgcHJvZHVjZWQgYSBudW1iZXIuCisgICAg
aWYgKHNob3VsZEVtaXRQcm9maWxpbmcgJiYgYXJpdGhQcm9maWxlICYmICFhcml0aFByb2ZpbGUt
Pmxoc09ic2VydmVkVHlwZSgpLnNhd051bWJlcigpICYmICFhcml0aFByb2ZpbGUtPmRpZE9ic2Vy
dmVEb3VibGUoKSkKKyAgICAgICAgYXJpdGhQcm9maWxlLT5lbWl0U2V0RG91YmxlKGppdCk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCmluZGV4IDM3ZWQ5YjY5ZTg4ZjE1ZTc5Y2YyYTYwNGFjMWJlYzJiMmM1NmE2Y2Yu
Ljg4Y2M0ZDhiYTYyMGM0MThjMjYyODFkZDQ4YzA2NjFlOTNkNTNmZWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtMjQ3MCw3ICsyNDcwLDEwIEBA
IEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHByb2ZpbGVkTmVnYXRlKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsCiAgICAgZG91YmxlIG51bWJlciA9IG9wZXJhbmQudG9O
dW1iZXIoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoLW51bWJlcikpOworCisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcigtbnVtYmVyKTsKKyAgICBhcml0aFByb2ZpbGUub2JzZXJ2ZVJlc3VsdChyZXN1bHQpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIG9wZXJhbmQpCkBAIC0yNTA0LDcgKzI1MDcsOSBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRPcHRpbWl6ZShFeGVjU3Rh
dGUqIGV4ZQogICAgIGRvdWJsZSBudW1iZXIgPSBvcGVyYW5kLnRvTnVtYmVyKGV4ZWMpOwogICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KC1udW1iZXIpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKC1udW1iZXIpOworICAg
IGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZVJlc3VsdChyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wZXJhbmQsIEpJVE5lZ0lDKiBuZWdJQykKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hh
bmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMGJmYjU1YTZkM2NhYzBhZjkwMWFmMmRl
NzAxNmZjYWJhYzgxNWI4My4uZmM3ZjkyNzk0Y2M2M2M4NGIzM2IwNThjMTNiYmRhOTRmNWRiYjQ1
NCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNiBAQAorMjAxNi0xMC0xNCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWlu
QGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBvcF9uZWdhdGUgc2hvdWxkIHdpdGggYW55IHR5
cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjU4
NworCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorCisgICAgICAgICogc3RyZXNz
L2FyaXRoLWFicy10by1hcml0aC1uZWdhdGUtcmFuZ2Utb3B0aW1pemF0b24uanM6IEFkZGVkLgor
ICAgICAgICBDb3ZlciBPU1IgRXhpdHMgd2hlbiBjb252ZXJ0aW5nIE1hdGguYWJzKCkgaW50byBB
cml0aE5lZ2F0ZS4KKworICAgICAgICAqIHN0cmVzcy9hcml0aC1uZWdhdGUtb24tdmFyaW91cy10
eXBlcy5qczogQWRkZWQuCisgICAgICAgIENvdmVyIEFyaXRoTmVnYXRlIHdpdGggYWxsIHR5cGVz
LgorCiAyMDE2LTEwLTE0ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBCYXNpYyBXZWJBc3NlbWJseSB0ZXN0aW5nCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVz
cy9hcml0aC1hYnMtdG8tYXJpdGgtbmVnYXRlLXJhbmdlLW9wdGltaXphdG9uLmpzIGIvSlNUZXN0
cy9zdHJlc3MvYXJpdGgtYWJzLXRvLWFyaXRoLW5lZ2F0ZS1yYW5nZS1vcHRpbWl6YXRvbi5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43MjE2MDVkYjBhNWUzMzllNmZlYWVhZGI2NDgxM2M1YjAyZTk1NDMwCi0tLSAv
ZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvYXJpdGgtYWJzLXRvLWFyaXRoLW5lZ2F0ZS1y
YW5nZS1vcHRpbWl6YXRvbi5qcwpAQCAtMCwwICsxLDQyNiBAQAorLy9AIGRlZmF1bHROb0VhZ2Vy
UnVuCisidXNlIHN0cmljdCI7CisKKy8vIENoZWNrZWQgaW50X21pbiA8IHZhbHVlIDwgMAorZnVu
Y3Rpb24gb3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvRXhjbHVzaXZlKGFyZykgewor
ICAgIGlmIChhcmcgPCAwKSB7CisgICAgICAgIGlmIChhcmcgPiAoMHg4MDAwMDAwMHwwKSkgewor
ICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKGFyZyk7CisgICAgICAgIH0KKyAgICB9CisgICAg
dGhyb3cgIldlIHNob3VsZCBub3QgYmUgaGVyZSI7Cit9Citub0lubGluZShvcGFxdWVDaGVja2Vk
QmV0d2VlbkludE1pbkFuZFplcm9FeGNsdXNpdmUpOworCitmdW5jdGlvbiB0ZXN0Q2hlY2tlZEJl
dHdlZW5JbnRNaW5BbmRaZXJvRXhjbHVzaXZlKCkKK3sKKyAgICBmb3IgKGxldCBpID0gMTsgaSA8
IDFlNTsgKytpKSB7CisgICAgICAgIGlmIChvcGFxdWVDaGVja2VkQmV0d2VlbkludE1pbkFuZFpl
cm9FeGNsdXNpdmUoLWkpICE9PSBpKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RD
aGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9FeGNsdXNpdmUoKSI7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG9wYXF1ZUNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSgtMjE0NzQ4
MzY0NykgIT09IDIxNDc0ODM2NDcpIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENo
ZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSgpIG9uIC0yMTQ3NDgzNjQ3IjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVDaGVja2Vk
QmV0d2VlbkludE1pbkFuZFplcm9FeGNsdXNpdmUpID4gMSkgeworICAgICAgICB0aHJvdyAiRmFp
bGVkIG9wdGltaXppbmcgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSgp
LiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7CisgICAgfQorfQor
dGVzdENoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0V4Y2x1c2l2ZSgpOworCisKKy8vIENoZWNr
ZWQgaW50X21pbiA8IHZhbHVlIDw9IDAKK2Z1bmN0aW9uIG9wYXF1ZUNoZWNrZWRCZXR3ZWVuSW50
TWluRXhjbHVzaXZlQW5kWmVyb0luY2x1c2l2ZShhcmcpIHsKKyAgICBpZiAoYXJnIDw9IDApIHsK
KyAgICAgICAgaWYgKGFyZyA+ICgweDgwMDAwMDAwfDApKSB7CisgICAgICAgICAgICByZXR1cm4g
TWF0aC5hYnMoYXJnKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB0aHJvdyAiV2Ugc2hvdWxkIG5v
dCBiZSBoZXJlIjsKK30KK25vSW5saW5lKG9wYXF1ZUNoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVz
aXZlQW5kWmVyb0luY2x1c2l2ZSk7CisKK2Z1bmN0aW9uIHRlc3RDaGVja2VkQmV0d2VlbkludE1p
bkV4Y2x1c2l2ZUFuZFplcm9JbmNsdXNpdmUoKQoreworICAgIGZvciAobGV0IGkgPSAxOyBpIDwg
MWU1OyArK2kpIHsKKyAgICAgICAgaWYgKG9wYXF1ZUNoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVz
aXZlQW5kWmVyb0luY2x1c2l2ZSgtaSkgIT09IGkpIHsKKyAgICAgICAgICAgIHRocm93ICJGYWls
ZWQgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVzaXZlQW5kWmVyb0luY2x1c2l2ZSgpIjsK
KyAgICAgICAgfQorICAgICAgICBpZiAob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRNaW5FeGNsdXNp
dmVBbmRaZXJvSW5jbHVzaXZlKDApICE9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVk
IHRlc3RDaGVja2VkQmV0d2VlbkludE1pbkV4Y2x1c2l2ZUFuZFplcm9JbmNsdXNpdmUoKSBvbiAw
IjsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRNaW5FeGNs
dXNpdmVBbmRaZXJvSW5jbHVzaXZlKC0yMTQ3NDgzNjQ3KSAhPT0gMjE0NzQ4MzY0NykgeworICAg
ICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5FeGNsdXNpdmVB
bmRaZXJvSW5jbHVzaXZlKCkgb24gLTIxNDc0ODM2NDciOworICAgICAgICB9CisgICAgfQorICAg
IGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUNoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVz
aXZlQW5kWmVyb0luY2x1c2l2ZSkgPiAxKSB7CisgICAgICAgIHRocm93ICJGYWlsZWQgb3B0aW1p
emluZyB0ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5FeGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZlKCku
IE5vbmUgb2YgdGhlIHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4aXQuIjsKKyAgICB9Cit9Cit0
ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5FeGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZlKCk7CisKKwor
Ly8gQ2hlY2tlZCBpbnRfbWluIDw9IHZhbHVlIDwgMAorZnVuY3Rpb24gb3BhcXVlQ2hlY2tlZEJl
dHdlZW5JbnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKGFyZykgeworICAgIGlmIChhcmcg
PCAwKSB7CisgICAgICAgIGlmIChhcmcgPj0gKDB4ODAwMDAwMDB8MCkpIHsKKyAgICAgICAgICAg
IHJldHVybiBNYXRoLmFicyhhcmcpOworICAgICAgICB9CisgICAgfQorICAgIHRocm93ICJXZSBz
aG91bGQgbm90IGJlIGhlcmUiOworfQorbm9JbmxpbmUob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRN
aW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKTsKKworZnVuY3Rpb24gdGVzdENoZWNrZWRCZXR3
ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgpCit7CisgICAgZm9yIChsZXQgaSA9
IDE7IGkgPCAxZTU7ICsraSkgeworICAgICAgICBpZiAob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRN
aW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKC1pKSAhPT0gaSkgeworICAgICAgICAgICAgdGhy
b3cgIkZhaWxlZCB0ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVz
aXZlKCkiOworICAgICAgICB9CisgICAgICAgIGlmIChvcGFxdWVDaGVja2VkQmV0d2VlbkludE1p
bkluY2x1c2l2ZUFuZFplcm9FeGNsdXNpdmUoLTIxNDc0ODM2NDcpICE9PSAyMTQ3NDgzNjQ3KSB7
CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RDaGVja2VkQmV0d2VlbkludE1pbkluY2x1
c2l2ZUFuZFplcm9FeGNsdXNpdmUoKSBvbiAtMjE0NzQ4MzY0NyI7CisgICAgICAgIH0KKyAgICB9
CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRNaW5J
bmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKSA+IDEpIHsKKyAgICAgICAgdGhyb3cgIkZhaWxlZCBv
cHRpbWl6aW5nIHRlc3RDaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNsdXNp
dmUoKS4gTm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVlZCB0byBPU1IgRXhpdC4iOworICAgIH0K
KworICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMWU1OyArK2kpIHsKKyAgICAgICAgaWYgKG9wYXF1
ZUNoZWNrZWRCZXR3ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgtaSkgIT09IGkp
IHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluSW5j
bHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgpIjsKKyAgICAgICAgfQorICAgICAgICBsZXQgcmVzdWx0
ID0gb3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKC0y
MTQ3NDgzNjQ4KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gMjE0NzQ4MzY0OCkgeworICAgICAg
ICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5JbmNsdXNpdmVBbmRa
ZXJvRXhjbHVzaXZlKCkgb24gLTIxNDc0ODM2NDgsIGdvdCAiICsgcmVzdWx0OworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2hlY2tlZEJldHdl
ZW5JbnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKSA+IDIpIHsKKyAgICAgICAgdGhyb3cg
Ik1hdGguYWJzKCkgb24gSW50TWluIGNhbiBPU1IgRXhpdCBidXQgd2Ugc2hvdWxkIHF1aWNrbHkg
c2V0dGxlIG9uIGRvdWJsZS4iOworICAgIH0KK30KK3Rlc3RDaGVja2VkQmV0d2VlbkludE1pbklu
Y2x1c2l2ZUFuZFplcm9FeGNsdXNpdmUoKTsKKworCisvLyBDaGVja2VkIGludF9taW4gPD0gdmFs
dWUgPD0gMAorZnVuY3Rpb24gb3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVz
aXZlKGFyZykgeworICAgIGlmIChhcmcgPD0gMCkgeworICAgICAgICBpZiAoYXJnID49ICgweDgw
MDAwMDAwfDApKSB7CisgICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMoYXJnKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICB0aHJvdyAiV2Ugc2hvdWxkIG5vdCBiZSBoZXJlIjsKK30KK25vSW5saW5l
KG9wYXF1ZUNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSk7CisKK2Z1bmN0aW9u
IHRlc3RDaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9JbmNsdXNpdmUoKQoreworICAgIGZvciAo
bGV0IGkgPSAxOyBpIDwgMWU1OyArK2kpIHsKKyAgICAgICAgaWYgKG9wYXF1ZUNoZWNrZWRCZXR3
ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSgtaSkgIT09IGkpIHsKKyAgICAgICAgICAgIHRocm93
ICJGYWlsZWQgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSgpIjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5j
bHVzaXZlKDApICE9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RDaGVja2Vk
QmV0d2VlbkludE1pbkFuZFplcm9JbmNsdXNpdmUoKSI7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KG9wYXF1ZUNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSgtMjE0NzQ4MzY0Nykg
IT09IDIxNDc0ODM2NDcpIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENoZWNrZWRC
ZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSgpIG9uIC0yMTQ3NDgzNjQ3IjsKKyAgICAgICAg
fQorICAgIH0KKyAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVDaGVja2VkQmV0d2Vl
bkludE1pbkFuZFplcm9JbmNsdXNpdmUpID4gMSkgeworICAgICAgICB0aHJvdyAiRmFpbGVkIG9w
dGltaXppbmcgdGVzdENoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSgpLiBOb25l
IG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7CisgICAgfQorCisgICAgZm9y
IChsZXQgaSA9IDE7IGkgPCAxZTU7ICsraSkgeworICAgICAgICBpZiAob3BhcXVlQ2hlY2tlZEJl
dHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKC1pKSAhPT0gaSkgeworICAgICAgICAgICAgdGhy
b3cgIkZhaWxlZCB0ZXN0Q2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKCkiOwor
ICAgICAgICB9CisgICAgICAgIGlmIChvcGFxdWVDaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9J
bmNsdXNpdmUoMCkgIT09IDApIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENoZWNr
ZWRCZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSgpIjsKKyAgICAgICAgfQorICAgICAgICBp
ZiAob3BhcXVlQ2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKC0yMTQ3NDgzNjQ4
KSAhPT0gMjE0NzQ4MzY0OCkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0Q2hlY2tl
ZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKCkgb24gLTIxNDc0ODM2NDgiOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2hlY2tlZEJl
dHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKSA+IDIpIHsKKyAgICAgICAgdGhyb3cgIk1hdGgu
YWJzKCkgb24gSW50TWluIGNhbiBPU1IgRXhpdCBidXQgd2Ugc2hvdWxkIHF1aWNrbHkgc2V0dGxl
IG9uIGRvdWJsZS4iOworICAgIH0KK30KK3Rlc3RDaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9J
bmNsdXNpdmUoKTsKKworCisvLyBVbmNoZWNrZWQgaW50X21pbiA8IHZhbHVlIDwgMAorZnVuY3Rp
b24gb3BhcXVlVW5jaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9FeGNsdXNpdmUoYXJnKSB7Cisg
ICAgaWYgKGFyZyA8IDApIHsKKyAgICAgICAgaWYgKGFyZyA+ICgweDgwMDAwMDAwfDApKSB7Cisg
ICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMoYXJnKXwwOworICAgICAgICB9CisgICAgfQorICAg
IHRocm93ICJXZSBzaG91bGQgbm90IGJlIGhlcmUiOworfQorbm9JbmxpbmUob3BhcXVlVW5jaGVj
a2VkQmV0d2VlbkludE1pbkFuZFplcm9FeGNsdXNpdmUpOworCitmdW5jdGlvbiB0ZXN0VW5jaGVj
a2VkQmV0d2VlbkludE1pbkFuZFplcm9FeGNsdXNpdmUoKQoreworICAgIGZvciAobGV0IGkgPSAx
OyBpIDwgMWU1OyArK2kpIHsKKyAgICAgICAgaWYgKG9wYXF1ZVVuY2hlY2tlZEJldHdlZW5JbnRN
aW5BbmRaZXJvRXhjbHVzaXZlKC1pKSAhPT0gaSkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxl
ZCB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9FeGNsdXNpdmUoKSI7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG9wYXF1ZVVuY2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvRXhjbHVz
aXZlKC0yMTQ3NDgzNjQ3KSAhPT0gMjE0NzQ4MzY0NykgeworICAgICAgICAgICAgdGhyb3cgIkZh
aWxlZCB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9FeGNsdXNpdmUoKSBvbiAtMjE0
NzQ4MzY0NyI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMo
b3BhcXVlVW5jaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9FeGNsdXNpdmUpID4gMSkgeworICAg
ICAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcgdGVzdFVuY2hlY2tlZEJldHdlZW5JbnRNaW5B
bmRaZXJvRXhjbHVzaXZlKCkuIE5vbmUgb2YgdGhlIHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4
aXQuIjsKKyAgICB9Cit9Cit0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1pbkFuZFplcm9FeGNsdXNp
dmUoKTsKKworCisvLyBVbmNoZWNrZWQgaW50X21pbiA8IHZhbHVlIDw9IDAKK2Z1bmN0aW9uIG9w
YXF1ZVVuY2hlY2tlZEJldHdlZW5JbnRNaW5FeGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZlKGFyZykg
eworICAgIGlmIChhcmcgPD0gMCkgeworICAgICAgICBpZiAoYXJnID4gKDB4ODAwMDAwMDB8MCkp
IHsKKyAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyhhcmcpfDA7CisgICAgICAgIH0KKyAgICB9
CisgICAgdGhyb3cgIldlIHNob3VsZCBub3QgYmUgaGVyZSI7Cit9Citub0lubGluZShvcGFxdWVV
bmNoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVzaXZlQW5kWmVyb0luY2x1c2l2ZSk7CisKK2Z1bmN0
aW9uIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluRXhjbHVzaXZlQW5kWmVyb0luY2x1c2l2ZSgp
Cit7CisgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTU7ICsraSkgeworICAgICAgICBpZiAob3Bh
cXVlVW5jaGVja2VkQmV0d2VlbkludE1pbkV4Y2x1c2l2ZUFuZFplcm9JbmNsdXNpdmUoLWkpICE9
PSBpKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50
TWluRXhjbHVzaXZlQW5kWmVyb0luY2x1c2l2ZSgpIjsKKyAgICAgICAgfQorICAgICAgICBpZiAo
b3BhcXVlVW5jaGVja2VkQmV0d2VlbkludE1pbkV4Y2x1c2l2ZUFuZFplcm9JbmNsdXNpdmUoMCkg
IT09IDApIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFVuY2hlY2tlZEJldHdlZW5J
bnRNaW5FeGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZlKCkgb24gMCI7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG9wYXF1ZVVuY2hlY2tlZEJldHdlZW5JbnRNaW5FeGNsdXNpdmVBbmRaZXJvSW5jbHVz
aXZlKC0yMTQ3NDgzNjQ3KSAhPT0gMjE0NzQ4MzY0NykgeworICAgICAgICAgICAgdGhyb3cgIkZh
aWxlZCB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1pbkV4Y2x1c2l2ZUFuZFplcm9JbmNsdXNpdmUo
KSBvbiAtMjE0NzQ4MzY0NyI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG51bWJlck9mREZH
Q29tcGlsZXMob3BhcXVlVW5jaGVja2VkQmV0d2VlbkludE1pbkV4Y2x1c2l2ZUFuZFplcm9JbmNs
dXNpdmUpID4gMSkgeworICAgICAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcgdGVzdFVuY2hl
Y2tlZEJldHdlZW5JbnRNaW5FeGNsdXNpdmVBbmRaZXJvSW5jbHVzaXZlKCkuIE5vbmUgb2YgdGhl
IHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4aXQuIjsKKyAgICB9Cit9Cit0ZXN0VW5jaGVja2Vk
QmV0d2VlbkludE1pbkV4Y2x1c2l2ZUFuZFplcm9JbmNsdXNpdmUoKTsKKworCisvLyBVbmNoZWNr
ZWQgaW50X21pbiA8PSB2YWx1ZSA8IDAKK2Z1bmN0aW9uIG9wYXF1ZVVuY2hlY2tlZEJldHdlZW5J
bnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKGFyZykgeworICAgIGlmIChhcmcgPCAwKSB7
CisgICAgICAgIGlmIChhcmcgPj0gKDB4ODAwMDAwMDB8MCkpIHsKKyAgICAgICAgICAgIHJldHVy
biBNYXRoLmFicyhhcmcpfDA7CisgICAgICAgIH0KKyAgICB9CisgICAgdGhyb3cgIldlIHNob3Vs
ZCBub3QgYmUgaGVyZSI7Cit9Citub0lubGluZShvcGFxdWVVbmNoZWNrZWRCZXR3ZWVuSW50TWlu
SW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSk7CisKK2Z1bmN0aW9uIHRlc3RVbmNoZWNrZWRCZXR3
ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgpCit7CisgICAgZm9yIChsZXQgaSA9
IDE7IGkgPCAxZTU7ICsraSkgeworICAgICAgICBpZiAob3BhcXVlVW5jaGVja2VkQmV0d2Vlbklu
dE1pbkluY2x1c2l2ZUFuZFplcm9FeGNsdXNpdmUoLWkpICE9PSBpKSB7CisgICAgICAgICAgICB0
aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50TWluSW5jbHVzaXZlQW5kWmVyb0V4
Y2x1c2l2ZSgpIjsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BhcXVlVW5jaGVja2VkQmV0d2Vl
bkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNsdXNpdmUoLTIxNDc0ODM2NDcpICE9PSAyMTQ3NDgz
NjQ3KSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRCZXR3ZWVuSW50
TWluSW5jbHVzaXZlQW5kWmVyb0V4Y2x1c2l2ZSgpIG9uIC0yMTQ3NDgzNjQ3IjsKKyAgICAgICAg
fQorICAgICAgICBpZiAob3BhcXVlVW5jaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFpl
cm9FeGNsdXNpdmUoLTIxNDc0ODM2NDgpICE9PSAtMjE0NzQ4MzY0OCkgeworICAgICAgICAgICAg
dGhyb3cgIkZhaWxlZCB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9F
eGNsdXNpdmUoKSBvbiAtMjE0NzQ4MzY0OCI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG51
bWJlck9mREZHQ29tcGlsZXMob3BhcXVlVW5jaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFu
ZFplcm9FeGNsdXNpdmUpID4gMSkgeworICAgICAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcg
dGVzdFVuY2hlY2tlZEJldHdlZW5JbnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKCkuIE5v
bmUgb2YgdGhlIHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4aXQuIjsKKyAgICB9Cit9Cit0ZXN0
VW5jaGVja2VkQmV0d2VlbkludE1pbkluY2x1c2l2ZUFuZFplcm9FeGNsdXNpdmUoKTsKKworCisv
LyBVbmNoZWNrZWQgaW50X21pbiA8PSB2YWx1ZSA8PSAwCitmdW5jdGlvbiBvcGFxdWVVbmNoZWNr
ZWRCZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZShhcmcpIHsKKyAgICBpZiAoYXJnIDw9IDAp
IHsKKyAgICAgICAgaWYgKGFyZyA+PSAoMHg4MDAwMDAwMHwwKSkgeworICAgICAgICAgICAgcmV0
dXJuIE1hdGguYWJzKGFyZyl8MDsKKyAgICAgICAgfQorICAgIH0KKyAgICB0aHJvdyAiV2Ugc2hv
dWxkIG5vdCBiZSBoZXJlIjsKK30KK25vSW5saW5lKG9wYXF1ZVVuY2hlY2tlZEJldHdlZW5JbnRN
aW5BbmRaZXJvSW5jbHVzaXZlKTsKKworZnVuY3Rpb24gdGVzdFVuY2hlY2tlZEJldHdlZW5JbnRN
aW5BbmRaZXJvSW5jbHVzaXZlKCkKK3sKKyAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNTsgKytp
KSB7CisgICAgICAgIGlmIChvcGFxdWVVbmNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1
c2l2ZSgtaSkgIT09IGkpIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFVuY2hlY2tl
ZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKCkiOworICAgICAgICB9CisgICAgICAgIGlm
IChvcGFxdWVVbmNoZWNrZWRCZXR3ZWVuSW50TWluQW5kWmVyb0luY2x1c2l2ZSgwKSAhPT0gMCkg
eworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1pbkFu
ZFplcm9JbmNsdXNpdmUoKSI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9wYXF1ZVVuY2hlY2tl
ZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKC0yMTQ3NDgzNjQ3KSAhPT0gMjE0NzQ4MzY0
NykgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0VW5jaGVja2VkQmV0d2VlbkludE1p
bkFuZFplcm9JbmNsdXNpdmUoKSBvbiAtMjE0NzQ4MzY0NyI7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKG9wYXF1ZVVuY2hlY2tlZEJldHdlZW5JbnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZl
KC0yMTQ3NDgzNjQ4KSAhPT0gLTIxNDc0ODM2NDgpIHsKKyAgICAgICAgICAgIHRocm93ICJGYWls
ZWQgdGVzdFVuY2hlY2tlZEJldHdlZW5JbnRNaW5JbmNsdXNpdmVBbmRaZXJvRXhjbHVzaXZlKCkg
b24gLTIxNDc0ODM2NDgiOworICAgICAgICB9CisgICAgfQorICAgIGlmIChudW1iZXJPZkRGR0Nv
bXBpbGVzKG9wYXF1ZVVuY2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJvSW5jbHVzaXZlKSA+IDEp
IHsKKyAgICAgICAgdGhyb3cgIkZhaWxlZCBvcHRpbWl6aW5nIHRlc3RVbmNoZWNrZWRCZXR3ZWVu
SW50TWluQW5kWmVyb0luY2x1c2l2ZSgpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRv
IE9TUiBFeGl0LiI7CisgICAgfQorfQordGVzdFVuY2hlY2tlZEJldHdlZW5JbnRNaW5BbmRaZXJv
SW5jbHVzaXZlKCk7CisKKworLy8gQ2hlY2tlZCB2YWx1ZSA8IDAKK2Z1bmN0aW9uIG9wYXF1ZUNo
ZWNrZWRMZXNzVGhhblplcm8oYXJnKSB7CisgICAgaWYgKGFyZyA8IDApIHsKKyAgICAgICAgcmV0
dXJuIE1hdGguYWJzKGFyZyk7CisgICAgfQorICAgIHRocm93ICJXZSBzaG91bGQgbm90IGJlIGhl
cmUiOworfQorbm9JbmxpbmUob3BhcXVlQ2hlY2tlZExlc3NUaGFuWmVybyk7CisKK2Z1bmN0aW9u
IHRlc3RDaGVja2VkTGVzc1RoYW5aZXJvKCkKK3sKKyAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFl
NTsgKytpKSB7CisgICAgICAgIGlmIChvcGFxdWVDaGVja2VkTGVzc1RoYW5aZXJvKC1pKSAhPT0g
aSkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0Q2hlY2tlZExlc3NUaGFuWmVybygp
IjsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BhcXVlQ2hlY2tlZExlc3NUaGFuWmVybygtMjE0
NzQ4MzY0NykgIT09IDIxNDc0ODM2NDcpIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVz
dENoZWNrZWRMZXNzVGhhblplcm8oKSBvbiAtMjE0NzQ4MzY0NyI7CisgICAgICAgIH0KKyAgICB9
CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2hlY2tlZExlc3NUaGFuWmVybykg
PiAxKSB7CisgICAgICAgIHRocm93ICJGYWlsZWQgb3B0aW1pemluZyB0ZXN0Q2hlY2tlZExlc3NU
aGFuWmVybygpLiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7Cisg
ICAgfQorCisgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTU7ICsraSkgeworICAgICAgICBpZiAo
b3BhcXVlQ2hlY2tlZExlc3NUaGFuWmVybygtaSkgIT09IGkpIHsKKyAgICAgICAgICAgIHRocm93
ICJGYWlsZWQgdGVzdENoZWNrZWRMZXNzVGhhblplcm8oKSI7CisgICAgICAgIH0KKyAgICAgICAg
bGV0IHJlc3VsdCA9IG9wYXF1ZUNoZWNrZWRMZXNzVGhhblplcm8oLTIxNDc0ODM2NDgpOworICAg
ICAgICBpZiAocmVzdWx0ICE9PSAyMTQ3NDgzNjQ4KSB7CisgICAgICAgICAgICB0aHJvdyAiRmFp
bGVkIHRlc3RDaGVja2VkTGVzc1RoYW5aZXJvKCkgb24gLTIxNDc0ODM2NDgsIGdvdCAiICsgcmVz
dWx0OworICAgICAgICB9CisgICAgfQorICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1
ZUNoZWNrZWRMZXNzVGhhblplcm8pID4gMikgeworICAgICAgICB0aHJvdyAiTWF0aC5hYnMoKSBv
biBJbnRNaW4gY2FuIE9TUiBFeGl0IGJ1dCB3ZSBzaG91bGQgcXVpY2tseSBzZXR0bGUgb24gZG91
YmxlLiI7CisgICAgfQorfQordGVzdENoZWNrZWRMZXNzVGhhblplcm8oKTsKKworCisvLyBDaGVj
a2VkIHZhbHVlIDw9IDAKK2Z1bmN0aW9uIG9wYXF1ZUNoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJv
KGFyZykgeworICAgIGlmIChhcmcgPD0gMCkgeworICAgICAgICByZXR1cm4gTWF0aC5hYnMoYXJn
KTsKKyAgICB9CisgICAgdGhyb3cgIldlIHNob3VsZCBub3QgYmUgaGVyZSI7Cit9Citub0lubGlu
ZShvcGFxdWVDaGVja2VkTGVzc1RoYW5PckVxdWFsWmVybyk7CisKK2Z1bmN0aW9uIHRlc3RDaGVj
a2VkTGVzc1RoYW5PckVxdWFsWmVybygpCit7CisgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTU7
ICsraSkgeworICAgICAgICBpZiAob3BhcXVlQ2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8oLWkp
ICE9PSBpKSB7CisgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RDaGVja2VkTGVzc1RoYW5P
ckVxdWFsWmVybygpIjsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BhcXVlQ2hlY2tlZExlc3NU
aGFuT3JFcXVhbFplcm8oMCkgIT09IDApIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVz
dENoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKCkgb24gMCI7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKG9wYXF1ZUNoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKC0yMTQ3NDgzNjQ3KSAhPT0gMjE0
NzQ4MzY0NykgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0Q2hlY2tlZExlc3NUaGFu
T3JFcXVhbFplcm8oKSBvbiAtMjE0NzQ4MzY0NyI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg
KG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8pID4g
MSkgeworICAgICAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcgdGVzdENoZWNrZWRMZXNzVGhh
bk9yRXF1YWxaZXJvKCkuIE5vbmUgb2YgdGhlIHRlc3RlZCBjYXNlIG5lZWQgdG8gT1NSIEV4aXQu
IjsKKyAgICB9CisKKyAgICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNTsgKytpKSB7CisgICAgICAg
IGlmIChvcGFxdWVDaGVja2VkTGVzc1RoYW5PckVxdWFsWmVybygtaSkgIT09IGkpIHsKKyAgICAg
ICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKCkiOwor
ICAgICAgICB9CisgICAgICAgIGlmIChvcGFxdWVDaGVja2VkTGVzc1RoYW5PckVxdWFsWmVybygt
MjE0NzQ4MzY0OCkgIT09IDIxNDc0ODM2NDgpIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQg
dGVzdENoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKCkgb24gLTIxNDc0ODM2NDgiOworICAgICAg
ICB9CisgICAgfQorICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUNoZWNrZWRMZXNz
VGhhbk9yRXF1YWxaZXJvKSA+IDIpIHsKKyAgICAgICAgdGhyb3cgIk1hdGguYWJzKCkgb24gSW50
TWluIGNhbiBPU1IgRXhpdCBidXQgd2Ugc2hvdWxkIHF1aWNrbHkgc2V0dGxlIG9uIGRvdWJsZS4i
OworICAgIH0KK30KK3Rlc3RDaGVja2VkTGVzc1RoYW5PckVxdWFsWmVybygpOworCisKKy8vIFVu
Y2hlY2tlZCB2YWx1ZSA8IDAKK2Z1bmN0aW9uIG9wYXF1ZVVuY2hlY2tlZExlc3NUaGFuWmVybyhh
cmcpIHsKKyAgICBpZiAoYXJnIDwgMCkgeworICAgICAgICByZXR1cm4gTWF0aC5hYnMoYXJnKXww
OworICAgIH0KKyAgICB0aHJvdyAiV2Ugc2hvdWxkIG5vdCBiZSBoZXJlIjsKK30KK25vSW5saW5l
KG9wYXF1ZVVuY2hlY2tlZExlc3NUaGFuWmVybyk7CisKK2Z1bmN0aW9uIHRlc3RVbmNoZWNrZWRM
ZXNzVGhhblplcm8oKQoreworICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMWU1OyArK2kpIHsKKyAg
ICAgICAgaWYgKG9wYXF1ZVVuY2hlY2tlZExlc3NUaGFuWmVybygtaSkgIT09IGkpIHsKKyAgICAg
ICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFVuY2hlY2tlZExlc3NUaGFuWmVybygpIjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAob3BhcXVlVW5jaGVja2VkTGVzc1RoYW5aZXJvKC0yMTQ3NDgzNjQ3
KSAhPT0gMjE0NzQ4MzY0NykgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0VW5jaGVj
a2VkTGVzc1RoYW5aZXJvKCkgb24gLTIxNDc0ODM2NDciOworICAgICAgICB9CisgICAgICAgIGlm
IChvcGFxdWVVbmNoZWNrZWRMZXNzVGhhblplcm8oLTIxNDc0ODM2NDgpICE9PSAtMjE0NzQ4MzY0
OCkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0VW5jaGVja2VkTGVzc1RoYW5PckVx
dWFsWmVybygpIG9uIC0yMTQ3NDgzNjQ4IjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobnVt
YmVyT2ZERkdDb21waWxlcyhvcGFxdWVVbmNoZWNrZWRMZXNzVGhhblplcm8pID4gMSkgeworICAg
ICAgICB0aHJvdyAiRmFpbGVkIG9wdGltaXppbmcgdGVzdFVuY2hlY2tlZExlc3NUaGFuWmVybygp
LiBOb25lIG9mIHRoZSB0ZXN0ZWQgY2FzZSBuZWVkIHRvIE9TUiBFeGl0LiI7CisgICAgfQorCisg
ICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxZTU7ICsraSkgeworICAgICAgICBpZiAob3BhcXVlVW5j
aGVja2VkTGVzc1RoYW5aZXJvKC1pKSAhPT0gaSkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxl
ZCB0ZXN0VW5jaGVja2VkTGVzc1RoYW5aZXJvKCkiOworICAgICAgICB9CisgICAgICAgIGlmIChv
cGFxdWVVbmNoZWNrZWRMZXNzVGhhblplcm8oLTIxNDc0ODM2NDgpICE9PSAtMjE0NzQ4MzY0OCkg
eworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0VW5jaGVja2VkTGVzc1RoYW5aZXJvKCkg
b24gLTIxNDc0ODM2NDgiOworICAgICAgICB9CisgICAgfQorICAgIGlmIChudW1iZXJPZkRGR0Nv
bXBpbGVzKG9wYXF1ZVVuY2hlY2tlZExlc3NUaGFuWmVybykgPiAyKSB7CisgICAgICAgIHRocm93
ICJNYXRoLmFicygpIG9uIEludE1pbiBjYW4gT1NSIEV4aXQgYnV0IHdlIHNob3VsZCBxdWlja2x5
IHNldHRsZSBvbiBkb3VibGUuIjsKKyAgICB9Cit9Cit0ZXN0VW5jaGVja2VkTGVzc1RoYW5aZXJv
KCk7CisKKworLy8gVW5jaGVja2VkIHZhbHVlIDw9IDAKK2Z1bmN0aW9uIG9wYXF1ZVVuY2hlY2tl
ZExlc3NUaGFuT3JFcXVhbFplcm8oYXJnKSB7CisgICAgaWYgKGFyZyA8PSAwKSB7CisgICAgICAg
IHJldHVybiBNYXRoLmFicyhhcmcpfDA7CisgICAgfQorICAgIHRocm93ICJXZSBzaG91bGQgbm90
IGJlIGhlcmUiOworfQorbm9JbmxpbmUob3BhcXVlVW5jaGVja2VkTGVzc1RoYW5PckVxdWFsWmVy
byk7CisKK2Z1bmN0aW9uIHRlc3RVbmNoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKCkKK3sKKyAg
ICBmb3IgKGxldCBpID0gMTsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIGlmIChvcGFxdWVVbmNo
ZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKC1pKSAhPT0gaSkgeworICAgICAgICAgICAgdGhyb3cg
IkZhaWxlZCB0ZXN0VW5jaGVja2VkTGVzc1RoYW5PckVxdWFsWmVybygpIjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAob3BhcXVlVW5jaGVja2VkTGVzc1RoYW5PckVxdWFsWmVybygwKSAhPT0gMCkg
eworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0VW5jaGVja2VkTGVzc1RoYW5PckVxdWFs
WmVybygpIG9uIDAiOworICAgICAgICB9CisgICAgICAgIGlmIChvcGFxdWVVbmNoZWNrZWRMZXNz
VGhhbk9yRXF1YWxaZXJvKC0yMTQ3NDgzNjQ3KSAhPT0gMjE0NzQ4MzY0NykgeworICAgICAgICAg
ICAgdGhyb3cgIkZhaWxlZCB0ZXN0VW5jaGVja2VkTGVzc1RoYW5PckVxdWFsWmVybygpIG9uIC0y
MTQ3NDgzNjQ3IjsKKyAgICAgICAgfQorICAgICAgICBpZiAob3BhcXVlVW5jaGVja2VkTGVzc1Ro
YW5PckVxdWFsWmVybygtMjE0NzQ4MzY0OCkgIT09IC0yMTQ3NDgzNjQ4KSB7CisgICAgICAgICAg
ICB0aHJvdyAiRmFpbGVkIHRlc3RVbmNoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKCkgb24gLTIx
NDc0ODM2NDgiOworICAgICAgICB9CisgICAgfQorICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVz
KG9wYXF1ZVVuY2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8pID4gMSkgeworICAgICAgICB0aHJv
dyAiRmFpbGVkIG9wdGltaXppbmcgdGVzdFVuY2hlY2tlZExlc3NUaGFuT3JFcXVhbFplcm8oKS4g
Tm9uZSBvZiB0aGUgdGVzdGVkIGNhc2UgbmVlZCB0byBPU1IgRXhpdC4iOworICAgIH0KK30KK3Rl
c3RVbmNoZWNrZWRMZXNzVGhhbk9yRXF1YWxaZXJvKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0
cmVzcy9hcml0aC1uZWdhdGUtb24tdmFyaW91cy10eXBlcy5qcyBiL0pTVGVzdHMvc3RyZXNzL2Fy
aXRoLW5lZ2F0ZS1vbi12YXJpb3VzLXR5cGVzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2MDdmMzJkZWUwM2Ri
NTVhMWZlNGNlYzRjNjNmZDk0OGE1NGU1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0
cmVzcy9hcml0aC1uZWdhdGUtb24tdmFyaW91cy10eXBlcy5qcwpAQCAtMCwwICsxLDI4MyBAQAor
Ly9AIGRlZmF1bHROb0VhZ2VyUnVuCisidXNlIHN0cmljdCI7CisKK2xldCB2YWxpZElucHV0VGVz
dENhc2VzID0gWworICAgIC8vIGlucHV0IGFzIHN0cmluZywgZXhwZWN0ZWQgcmVzdWx0IGFzIHN0
cmluZy4KKyAgICBbInVuZGVmaW5lZCIsICJOYU4iXSwKKyAgICBbIm51bGwiLCAiLTAiXSwKKyAg
ICBbIjAiLCAiLTAiXSwKKyAgICBbIi0wLiIsICIwIl0sCisgICAgWyIwLjUiLCAiLTAuNSJdLAor
ICAgIFsiLTAuNSIsICIwLjUiXSwKKyAgICBbIjQiLCAiLTQiXSwKKyAgICBbIjQyLjEiLCAiLTQy
LjEiXSwKKyAgICBbIjQyLjUiLCAiLTQyLjUiXSwKKyAgICBbIjQyLjkiLCAiLTQyLjkiXSwKKyAg
ICBbIi00Mi4xIiwgIjQyLjEiXSwKKyAgICBbIi00Mi41IiwgIjQyLjUiXSwKKyAgICBbIi00Mi45
IiwgIjQyLjkiXSwKKyAgICBbIk1hdGguUEkiLCAiLU1hdGguUEkiXSwKKyAgICBbIkluZmluaXR5
IiwgIi1JbmZpbml0eSJdLAorICAgIFsiLUluZmluaXR5IiwgIkluZmluaXR5Il0sCisgICAgWyJO
YU4iLCAiTmFOIl0sCisgICAgWyJcIldlYktpdFwiIiwgIk5hTiJdLAorICAgIFsiXCI0XCIiLCAi
LTQiXSwKKyAgICBbIlwiNDIuNVwiIiwgIi00Mi41Il0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+
IHsgcmV0dXJuIDQ7IH0gfSIsICItNCJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVy
biAwOyB9IH0iLCAiLTAiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4gLTA7IH0g
fSIsICIwIl0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuIDAuNTsgfSB9IiwgIi0w
LjUiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4gLTAuNTsgfSB9IiwgIjAuNSJd
LAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiBOdW1iZXIuTUlOX1NBRkVfSU5URUdF
UjsgfSB9IiwgIjkwMDcxOTkyNTQ3NDA5OTEiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4geyBy
ZXR1cm4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7IH0gfSIsICItOTAwNzE5OTI1NDc0MDk5MSJd
LAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiAweDgwMDAwMDAwfDA7IH0gfSIsICIy
MTQ3NDgzNjQ4Il0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuIDB4N2ZmZmZmZmZ8
MDsgfSB9IiwgIi0yMTQ3NDgzNjQ3Il0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJu
ICgweDgwMDAwMDAwfDApIC0gMC41OyB9IH0iLCAiMjE0NzQ4MzY0OC41Il0sCisgICAgWyJ7IHZh
bHVlT2Y6ICgpID0+IHsgcmV0dXJuICgweDdmZmZmZmZmfDApICsgMC41OyB9IH0iLCAiLTIxNDc0
ODM2NDcuNSJdLAorXTsKKworbGV0IHZhbGlkSW5wdXRUeXBlZFRlc3RDYXNlcyA9IHZhbGlkSW5w
dXRUZXN0Q2FzZXMubWFwKChlbGVtZW50KSA9PiB7IHJldHVybiBbZXZhbCgiKCIgKyBlbGVtZW50
WzBdICsgIikiKSwgZXZhbChlbGVtZW50WzFdKV0gfSk7CisKK2Z1bmN0aW9uIGlzSWRlbnRpY2Fs
KHJlc3VsdCwgZXhwZWN0ZWQpCit7CisgICAgaWYgKGV4cGVjdGVkID09PSBleHBlY3RlZCkgewor
ICAgICAgICBpZiAocmVzdWx0ICE9PSBleHBlY3RlZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKCFleHBlY3RlZCAmJiAoMSAvIGV4cGVjdGVkKSAhPT0gKDEgLyByZXN1
bHQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0ICE9PSByZXN1bHQ7Cit9CisKKworLy8gVGVzdCBuZWdh
dGUgd2l0aCBhIHZlcnkgcG9seW1vcnBoaWMgaW5wdXQuIEFsbCB0ZXN0IGNhc2VzIGFyZSBzZWVu
IGF0IGVhY2ggaXRlcmF0aW9uLgorZnVuY3Rpb24gb3BhcXVlQWxsVHlwZXNOZWdhdGUoYXJndW1l
bnQpIHsKKyAgICByZXR1cm4gLShhcmd1bWVudCk7Cit9Citub0lubGluZShvcGFxdWVBbGxUeXBl
c05lZ2F0ZSk7Citub09TUkV4aXRGdXp6aW5nKG9wYXF1ZUFsbFR5cGVzTmVnYXRlKTsKKworZnVu
Y3Rpb24gdGVzdEFsbFR5cGVzQ2FsbCgpIHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlMzsg
KytpKSB7CisgICAgICAgIGZvciAobGV0IHRlc3RDYXNlSW5wdXQgb2YgdmFsaWRJbnB1dFR5cGVk
VGVzdENhc2VzKSB7CisgICAgICAgICAgICBsZXQgb3V0cHV0ID0gb3BhcXVlQWxsVHlwZXNOZWdh
dGUodGVzdENhc2VJbnB1dFswXSk7CisgICAgICAgICAgICBpZiAoIWlzSWRlbnRpY2FsKG91dHB1
dCwgdGVzdENhc2VJbnB1dFsxXSkpCisgICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0
QWxsVHlwZXNDYWxsIGZvciBpbnB1dCAiICsgdGVzdENhc2VJbnB1dFswXSArICIgZXhwZWN0ZWQg
IiArIHRlc3RDYXNlSW5wdXRbMV0gKyAiIGdvdCAiICsgb3V0cHV0OworICAgICAgICB9CisgICAg
fQorICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUFsbFR5cGVzTmVnYXRlKSA+IDMp
CisgICAgICAgIHRocm93ICJXZSBzaG91bGQgaGF2ZSBkZXRlY3RlZCBuZWdhdGUgd2FzIHBvbHlt
b3JwaGljIGFuZCBnZW5lcmF0ZWQgYSBnZW5lcmljIHZlcnNpb24uIjsKK30KK3Rlc3RBbGxUeXBl
c0NhbGwoKTsKKworCisvLyBQb2x5bW9ycGhpYyBpbnB1dCBidXQgbmVnYXRpdmUgemVybyBpcyBu
b3Qgb2JzZXJ2YWJsZS4KK2Z1bmN0aW9uIG9wYXF1ZUFsbFR5cGVzTmVnYXRlV2l0aG91dE5lZ2F0
aXZlWmVybyhhcmd1bWVudCkgeworICAgIHJldHVybiAtKGFyZ3VtZW50KSArIDA7Cit9Citub0lu
bGluZShvcGFxdWVBbGxUeXBlc05lZ2F0ZVdpdGhvdXROZWdhdGl2ZVplcm8pOworbm9PU1JFeGl0
RnV6emluZyhvcGFxdWVBbGxUeXBlc05lZ2F0ZVdpdGhvdXROZWdhdGl2ZVplcm8pOworCitmdW5j
dGlvbiB0ZXN0QWxsVHlwZXNXaXRob3V0TmVnYXRpdmVaZXJvQ2FsbCgpIHsKKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDFlMzsgKytpKSB7CisgICAgICAgIGZvciAobGV0IHRlc3RDYXNlSW5wdXQg
b2YgdmFsaWRJbnB1dFR5cGVkVGVzdENhc2VzKSB7CisgICAgICAgICAgICBsZXQgb3V0cHV0ID0g
b3BhcXVlQWxsVHlwZXNOZWdhdGVXaXRob3V0TmVnYXRpdmVaZXJvKHRlc3RDYXNlSW5wdXRbMF0p
OworICAgICAgICAgICAgaWYgKCFpc0lkZW50aWNhbChvdXRwdXQsIHRlc3RDYXNlSW5wdXRbMV0g
KyAwKSkKKyAgICAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RBbGxUeXBlc1dpdGhvdXRO
ZWdhdGl2ZVplcm9DYWxsIGZvciBpbnB1dCAiICsgdGVzdENhc2VJbnB1dFswXSArICIgZXhwZWN0
ZWQgIiArIHRlc3RDYXNlSW5wdXRbMV0gKyAiIGdvdCAiICsgb3V0cHV0OworICAgICAgICB9Cisg
ICAgfQorICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUFsbFR5cGVzTmVnYXRlKSA+
IDMpCisgICAgICAgIHRocm93ICJXZSBzaG91bGQgaGF2ZSBkZXRlY3RlZCBuZWdhdGUgd2FzIHBv
bHltb3JwaGljIGFuZCBnZW5lcmF0ZWQgYSBnZW5lcmljIHZlcnNpb24uIjsKK30KK3Rlc3RBbGxU
eXBlc1dpdGhvdXROZWdhdGl2ZVplcm9DYWxsKCk7CisKKworLy8gVGVzdCBuZWdhdGUgb24gYSBj
b21wbGV0ZWx5IHR5cGVkIGlucHV0LiBFdmVyeSBjYWxsIHNlZSBvbmx5IG9uZSB0eXBlLgorZnVu
Y3Rpb24gdGVzdFNpbmdsZVR5cGVDYWxsKCkgeworICAgIGZvciAobGV0IHRlc3RDYXNlSW5wdXQg
b2YgdmFsaWRJbnB1dFRlc3RDYXNlcykgeworICAgICAgICBldmFsKGAKKyAgICAgICAgICAgIGZ1
bmN0aW9uIG9wYXF1ZU5lZ2F0ZShhcmd1bWVudCkgeworICAgICAgICAgICAgICAgIHJldHVybiAt
KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vSW5saW5lKG9wYXF1ZU5l
Z2F0ZSk7CisgICAgICAgICAgICBub09TUkV4aXRGdXp6aW5nKG9wYXF1ZU5lZ2F0ZSk7CisKKyAg
ICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIWlzSWRlbnRpY2FsKG9wYXF1ZU5lZ2F0ZSgke3Rlc3RDYXNlSW5wdXRbMF19KSwgJHt0
ZXN0Q2FzZUlucHV0WzFdfSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0
ZXN0U2luZ2xlVHlwZUNhbGwoKSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlTmVnYXRlKSA+IDEpCisg
ICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0U2luZ2xlVHlwZUNhbGwoKS4gV2Ugc2hv
dWxkIGhhdmUgY29tcGlsZWQgYSBzaW5nbGUgbmVnYXRlIGZvciB0aGUgZXhwZWN0ZWQgdHlwZS4i
OworICAgICAgICBgKTsKKyAgICB9Cit9Cit0ZXN0U2luZ2xlVHlwZUNhbGwoKTsKKworCitmdW5j
dGlvbiBjaGVja0NvbXBpbGVDb3VudEZvclVzZWxlc3NOZWdhdGl2ZVplcm8odGVzdEZ1bmN0aW9u
KQoreworICAgIGlmIChqc2NPcHRpb25zKCkudXNlTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2Up
IHsKKyAgICAgICAgLy8gSWYgd2UgZm9yY2VkIGEgZmx1c2ggYWZ0ZXIgdGhlIG9wZXJhdGlvbiwg
dGhlIG5lZ2F0aXZlIHplcm8gYmVjb21lcworICAgICAgICAvLyBvYnNlcnZhYmxlIGFuZCB3ZSBt
YXkgYmUgb3Zlcmx5IG9wdGltaXN0aWMuCisgICAgICAgIHJldHVybiBudW1iZXJPZkRGR0NvbXBp
bGVzKHRlc3RGdW5jdGlvbikgPD0gMjsKKyAgICB9CisgICAgcmV0dXJuIG51bWJlck9mREZHQ29t
cGlsZXModGVzdEZ1bmN0aW9uKSA8PSAxOworfQorCisKKy8vIFRlc3QgbmVnYXRlIG9uIGEgY29t
cGxldGVseSB0eXBlZCBpbnB1dCwgYnV0IHdpdGhvdXQgbmVnYXRpdmUgemVyby4KK2Z1bmN0aW9u
IHRlc3RTaW5nbGVUeXBlV2l0aG91dE5lZ2F0aXZlWmVyb0NhbGwoKSB7CisgICAgZm9yIChsZXQg
dGVzdENhc2VJbnB1dCBvZiB2YWxpZElucHV0VGVzdENhc2VzKSB7CisgICAgICAgIGV2YWwoYAor
ICAgICAgICAgICAgZnVuY3Rpb24gb3BhcXVlTmVnYXRlKGFyZ3VtZW50KSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIC0oYXJndW1lbnQpICsgMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG5vSW5saW5lKG9wYXF1ZU5lZ2F0ZSk7CisgICAgICAgICAgICBub09TUkV4aXRGdXp6aW5nKG9w
YXF1ZU5lZ2F0ZSk7CisKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzSWRlbnRpY2FsKG9wYXF1ZU5lZ2F0ZSgke3Rlc3RD
YXNlSW5wdXRbMF19KSwgJHt0ZXN0Q2FzZUlucHV0WzFdfSArIDApKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFNpbmdsZVR5cGVXaXRob3V0TmVnYXRpdmVaZXJvQ2Fs
bCgpIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
IWNoZWNrQ29tcGlsZUNvdW50Rm9yVXNlbGVzc05lZ2F0aXZlWmVybyhvcGFxdWVOZWdhdGUpKQor
ICAgICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFNpbmdsZVR5cGVXaXRob3V0TmVnYXRp
dmVaZXJvQ2FsbCgpLiBXZSBzaG91bGQgaGF2ZSBjb21waWxlZCBhIHNpbmdsZSBuZWdhdGUgZm9y
IHRoZSBleHBlY3RlZCB0eXBlLiI7CisgICAgICAgIGApOworICAgIH0KK30KK3Rlc3RTaW5nbGVU
eXBlV2l0aG91dE5lZ2F0aXZlWmVyb0NhbGwoKTsKKworCisvLyBUZXN0IG5lZ2F0ZSBvbiBjb25z
dGFudHMKK2Z1bmN0aW9uIHRlc3RDb25zdGFudCgpIHsKKyAgICBmb3IgKGxldCB0ZXN0Q2FzZUlu
cHV0IG9mIHZhbGlkSW5wdXRUZXN0Q2FzZXMpIHsKKyAgICAgICAgZXZhbChgCisgICAgICAgICAg
ICBmdW5jdGlvbiBvcGFxdWVOZWdhdGVPbkNvbnN0YW50KCkgeworICAgICAgICAgICAgICAgIHJl
dHVybiAtKCR7dGVzdENhc2VJbnB1dFswXX0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bm9JbmxpbmUob3BhcXVlTmVnYXRlT25Db25zdGFudCk7CisgICAgICAgICAgICBub09TUkV4aXRG
dXp6aW5nKG9wYXF1ZU5lZ2F0ZU9uQ29uc3RhbnQpOworCisgICAgICAgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0lkZW50aWNhbChv
cGFxdWVOZWdhdGVPbkNvbnN0YW50KCksICR7dGVzdENhc2VJbnB1dFsxXX0pKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENvbnN0YW50KCkiOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVz
KG9wYXF1ZU5lZ2F0ZU9uQ29uc3RhbnQpID4gMSkKKyAgICAgICAgICAgICAgICB0aHJvdyAiRmFp
bGVkIHRlc3RDb25zdGFudCgpLiBXZSBzaG91bGQgaGF2ZSBjb21waWxlZCBhIHNpbmdsZSBuZWdh
dGUgZm9yIHRoZSBleHBlY3RlZCB0eXBlLiI7CisgICAgICAgIGApOworICAgIH0KK30KK3Rlc3RD
b25zdGFudCgpOworCisKKy8vIFZlcmlmeSB3ZSBjYWxsIHZhbHVlT2YoKSBleGFjdGx5IG9uY2Ug
cGVyIGNhbGwuCitmdW5jdGlvbiBvcGFxdWVOZWdhdGVGb3JTaWRlRWZmZWN0cyhhcmd1bWVudCkg
eworICAgIHJldHVybiAtKGFyZ3VtZW50KTsKK30KK25vSW5saW5lKG9wYXF1ZU5lZ2F0ZUZvclNp
ZGVFZmZlY3RzKTsKK25vT1NSRXhpdEZ1enppbmcob3BhcXVlTmVnYXRlRm9yU2lkZUVmZmVjdHMp
OworCitmdW5jdGlvbiB0ZXN0U2lkZUVmZmVjdCgpIHsKKyAgICBsZXQgdGVzdE9iamVjdCA9IHsK
KyAgICAgICAgY291bnRlcjogMCwKKyAgICAgICAgdmFsdWVPZjogZnVuY3Rpb24oKSB7ICsrdGhp
cy5jb3VudGVyOyByZXR1cm4gMTY7IH0KKyAgICB9OworICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
MWU0OyArK2kpIHsKKyAgICAgICAgaWYgKG9wYXF1ZU5lZ2F0ZUZvclNpZGVFZmZlY3RzKHRlc3RP
YmplY3QpICE9PSAtMTYpCisgICAgICAgICAgICB0aHJvdyAiSW5jb3JyZWN0IHJlc3VsdCBpbiB0
ZXN0U2lkZUVmZmVjdCgpIjsKKyAgICB9CisgICAgaWYgKHRlc3RPYmplY3QuY291bnRlciAhPT0g
MWU0KQorICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RTaWRlRWZmZWN0KCkiOworICAgIGlmIChu
dW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZU5lZ2F0ZUZvclNpZGVFZmZlY3RzKSA+IDEpCisgICAg
ICAgIHRocm93ICJvcGFxdWVOZWdhdGVGb3JTaWRlRWZmZWN0cygpIGlzIHByZWRpY3RhYmxlLCBp
dCBzaG91bGQgb25seSBiZSBjb21waWxlZCBvbmNlLiI7Cit9Cit0ZXN0U2lkZUVmZmVjdCgpOwor
CisKKy8vIFZlcmlmeSBuZWdhdGUgaXMgbm90IHN1YmplY3QgdG8gQ1NFIGlmIHRoZSBhcmd1bWVu
dCBoYXMgc2lkZSBlZmZlY3RzLgorZnVuY3Rpb24gb3BhcXVlTmVnYXRlRm9yQ1NFKGFyZ3VtZW50
KSB7CisgICAgcmV0dXJuIC0oYXJndW1lbnQpICsgLShhcmd1bWVudCkgKyAtKGFyZ3VtZW50KTsK
K30KK25vSW5saW5lKG9wYXF1ZU5lZ2F0ZUZvckNTRSk7Citub09TUkV4aXRGdXp6aW5nKG9wYXF1
ZU5lZ2F0ZUZvckNTRSk7CisKK2Z1bmN0aW9uIHRlc3RDU0UoKSB7CisgICAgbGV0IHRlc3RPYmpl
Y3QgPSB7CisgICAgICAgIGNvdW50ZXI6IDAsCisgICAgICAgIHZhbHVlT2Y6IGZ1bmN0aW9uKCkg
eyArK3RoaXMuY291bnRlcjsgcmV0dXJuIDE2OyB9CisgICAgfTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIGlmIChvcGFxdWVOZWdhdGVGb3JDU0UodGVzdE9i
amVjdCkgIT09IC00OCkKKyAgICAgICAgICAgIHRocm93ICJJbmNvcnJlY3QgcmVzdWx0IGluIHRl
c3RDU0UoKSI7CisgICAgfQorICAgIGlmICh0ZXN0T2JqZWN0LmNvdW50ZXIgIT09IDNlNCkKKyAg
ICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0Q1NFKCkiOworICAgIGlmIChudW1iZXJPZkRGR0NvbXBp
bGVzKG9wYXF1ZU5lZ2F0ZUZvckNTRSkgPiAxKQorICAgICAgICB0aHJvdyAib3BhcXVlTmVnYXRl
Rm9yQ1NFKCkgaXMgcHJlZGljdGFibGUsIGl0IHNob3VsZCBvbmx5IGJlIGNvbXBpbGVkIG9uY2Uu
IjsKK30KK3Rlc3RDU0UoKTsKKworCisvLyBWZXJpZnkgbmVnYXRlIGlzIG5vdCBzdWJqZWN0IHRv
IERDRSBpZiB0aGUgYXJndW1lbnQgaGFzIHNpZGUgZWZmZWN0cy4KK2Z1bmN0aW9uIG9wYXF1ZU5l
Z2F0ZUZvckRDRShhcmd1bWVudCkgeworICAgIC0oYXJndW1lbnQpOworfQorbm9JbmxpbmUob3Bh
cXVlTmVnYXRlRm9yRENFKTsKK25vT1NSRXhpdEZ1enppbmcob3BhcXVlTmVnYXRlRm9yRENFKTsK
KworZnVuY3Rpb24gdGVzdERDRSgpIHsKKyAgICBsZXQgdGVzdE9iamVjdCA9IHsKKyAgICAgICAg
Y291bnRlcjogMCwKKyAgICAgICAgdmFsdWVPZjogZnVuY3Rpb24oKSB7ICsrdGhpcy5jb3VudGVy
OyByZXR1cm4gMTY7IH0KKyAgICB9OworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kp
IHsKKyAgICAgICAgb3BhcXVlTmVnYXRlRm9yRENFKHRlc3RPYmplY3QpOworICAgIH0KKyAgICBp
ZiAodGVzdE9iamVjdC5jb3VudGVyICE9PSAxZTQpCisgICAgICAgIHRocm93ICJGYWlsZWQgdGVz
dERDRSgpIjsKKyAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVOZWdhdGVGb3JEQ0Up
ID4gMSkKKyAgICAgICAgdGhyb3cgIm9wYXF1ZU5lZ2F0ZUZvckRDRSgpIGlzIHByZWRpY3RhYmxl
LCBpdCBzaG91bGQgb25seSBiZSBjb21waWxlZCBvbmNlLiI7Cit9Cit0ZXN0RENFKCk7CisKKwor
Ly8gVGVzdCBleGNlcHRpb25zIGluIHRoZSBhcmd1bWVudC4KK2Z1bmN0aW9uIHRlc3RFeGNlcHRp
b24oKSB7CisgICAgbGV0IGNvdW50ZXIgPSAwOworICAgIGZ1bmN0aW9uIG9wYXF1ZU5lZ2F0ZVdp
dGhFeGNlcHRpb24oYXJndW1lbnQpIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IC0oYXJndW1lbnQp
OworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IG5vSW5saW5lKG9wYXF1ZU5lZ2F0ZVdpdGhFeGNlcHRpb24pOworCisgICAgbGV0IHRlc3RPYmpl
Y3QgPSB7IHZhbHVlT2Y6ICgpID0+IHsgIHJldHVybiA2NDsgfSB9OworCisgICAgLy8gV2FybSB1
cCB3aXRob3V0IGV4Y2VwdGlvbi4KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlMzsgKytpKSB7
CisgICAgICAgIGlmIChvcGFxdWVOZWdhdGVXaXRoRXhjZXB0aW9uKHRlc3RPYmplY3QpICE9PSAt
NjQpCisgICAgICAgICAgICB0aHJvdyAiSW5jb3JyZWN0IHJlc3VsdCBpbiBvcGFxdWVOZWdhdGVX
aXRoRXhjZXB0aW9uKCkiOworICAgIH0KKworICAgIGxldCB0ZXN0VGhyb3dPYmplY3QgPSB7IHZh
bHVlT2Y6ICgpID0+IHsgdGhyb3cgdGVzdE9iamVjdDsgcmV0dXJuIDY0OyB9IH07CisKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDFlMjsgKytpKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICBpZiAob3BhcXVlTmVnYXRlV2l0aEV4Y2VwdGlvbih0ZXN0VGhyb3dPYmplY3QpICE9PSA4KQor
ICAgICAgICAgICAgICAgIHRocm93ICJUaGlzIGNvZGUgc2hvdWxkIG5vdCBiZSByZWFjaGVkISEi
OworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoZSAhPT0gdGVzdE9iamVj
dCkgeworICAgICAgICAgICAgICAgIHRocm93ICJXcm9uZyBvYmplY3QgdGhyb3duIGZyb20gb3Bh
cXVlTmVnYXRlV2l0aEV4Y2VwdGlvbi4iCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoY291bnRlciAhPT0gMWUzKSB7CisgICAgICAgIHRocm93ICJJbnZhbGlkIGNv
dW50IGluIHRlc3RFeGNlcHRpb24oKSI7CisgICAgfQorfQordGVzdEV4Y2VwdGlvbigpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>