<?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>106067</bug_id>
          
          <creation_ts>2013-01-03 17:09:11 -0800</creation_ts>
          <short_desc>DFG should inline closure calls</short_desc>
          <delta_ts>2013-01-06 18:26:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>106200</blocked>
    
    <blocked>106201</blocked>
    
    <blocked>106202</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>799858</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-03 17:09:11 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799863</commentid>
    <comment_count>1</comment_count>
      <attachid>181253</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-03 17:10:40 -0800</bug_when>
    <thetext>Created attachment 181253
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>799936</commentid>
    <comment_count>2</comment_count>
      <attachid>181272</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-03 20:20:11 -0800</bug_when>
    <thetext>Created attachment 181272
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801046</commentid>
    <comment_count>3</comment_count>
      <attachid>181453</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-06 00:04:27 -0800</bug_when>
    <thetext>Created attachment 181453
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801047</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-06 00:09:17 -0800</bug_when>
    <thetext>Attachment 181453 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/bytecode/CodeBlock.h:939:  The parameter name &quot;codeOrigin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801116</commentid>
    <comment_count>5</comment_count>
      <attachid>181453</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-01-06 17:17:11 -0800</bug_when>
    <thetext>Comment on attachment 181453
the patch

Looks good, please fix the style issue, and you&apos;ve added a couple of FIXMEs - this is fine, but so the work doesn&apos;t get lost it&apos;s good to file the bugs in bugzilla, &amp; include references to them next to the fixme comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801121</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-06 17:54:07 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 181453 [details])
&gt; Looks good, please fix the style issue, and you&apos;ve added a couple of FIXMEs - this is fine, but so the work doesn&apos;t get lost it&apos;s good to file the bugs in bugzilla, &amp; include references to them next to the fixme comment.

Thanks for the review!  I will file bugs for the FIXMEs and fix style before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801129</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-01-06 18:26:45 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/138921</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181253</attachid>
            <date>2013-01-03 17:10:40 -0800</date>
            <delta_ts>2013-01-03 20:20:11 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>closures.patch</filename>
            <type>text/plain</type>
            <size>23606</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM4NzY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDEzLTAxLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBpbmxpbmUgY2xvc3VyZSBjYWxscworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2MDY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAg
ICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a1N0YXR1czo6ZHVtcCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaDoKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmlzQ2xvc3VyZUNhbGwpOgorICAgICAgICAoQ2Fs
bExpbmtTdGF0dXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Z2xvYmFsT2JqZWN0Rm9yKToKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAg
ICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgor
ICAgICAgICAoQnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZW1p
dEZ1bmN0aW9uQ2hlY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW5saW5pbmcpOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Q1NFUGhhc2U6OnB1cmVDU0UpOgorICAgICAgICAoQ1NFUGhhc2UpOgorICAgICAg
ICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRDYWxsZWVMb2FkRWxpbWluYXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OkNTRVBoYXNlOjpjaGVja0V4ZWN1dGFibGVFbGltaW5hdGlvbik6CisgICAg
ICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldE15U2NvcGVMb2FkRWxpbWluYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICogZGZn
L0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6CisgICAgICAgICog
ZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Omhhc0V4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmV4ZWN1dGFibGUpOgor
ICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBk
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisKIDIwMTMtMDEtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KIAogICAgICAgICBERkc6OkJ5dGVDb2RlQ2FjaGUgc2VydmVzIGxpdHRsZSBvciBubyBwdXJw
b3NlIGV2ZXIgc2luY2Ugd2UgZGVjaWRlZCB0byBrZWVwIGJ5dGVjb2RlIGFyb3VuZCBwZXJtYW5l
bnRseQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtTdGF0dXMuY3BwCShyZXZpc2lvbiAxMzg3NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1
LDcgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGbwogI2VuZGlmCiB9
CiAKLXZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKK3ZvaWQgQ2Fs
bExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBpZiAoIWlz
U2V0KCkpIHsKICAgICAgICAgb3V0LnByaW50KCJOb3QgU2V0Iik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTM4
NzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICAKICAgICBib29sIGNvdWxkVGFr
ZVNsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9jb3VsZFRha2VTbG93UGF0aDsgfQotICAgIGJv
b2wgaXNDbG9zdXJlQ2FsbCgpIGNvbnN0IHsgcmV0dXJuICFtX2NhbGxUYXJnZXQ7IH0KKyAgICBi
b29sIGlzQ2xvc3VyZUNhbGwoKSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGFibGUgJiYgIW1fY2Fs
bFRhcmdldDsgfQogICAgIAogICAgIEpTVmFsdWUgY2FsbFRhcmdldCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2FsbFRhcmdldDsgfQogICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uKCkgY29uc3Q7CkBAIC04
NSw3ICs4NSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzUHJvdmVkKCkgY29uc3QgeyByZXR1cm4g
bV9pc1Byb3ZlZDsgfQogICAgIGJvb2wgY2FuT3B0aW1pemUoKSBjb25zdCB7IHJldHVybiAobV9j
YWxsVGFyZ2V0IHx8IG1fZXhlY3V0YWJsZSkgJiYgIW1fY291bGRUYWtlU2xvd1BhdGg7IH0KICAg
ICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKTsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CiAgICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNv
bXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNp
b24gMTM4NzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MzMsNiArMjkzMywxMyBAQCBib29sIEZ1bmN0aW9uQ29k
ZUJsb2NrOjpqaXRDb21waWxlSW1wbChFCiB9CiAjZW5kaWYKIAorSlNHbG9iYWxPYmplY3QqIENv
ZGVCbG9jazo6Z2xvYmFsT2JqZWN0Rm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBp
ZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm4gZ2xvYmFsT2Jq
ZWN0KCk7CisgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPmdlbmVyYXRlZEJ5dGVjb2RlKCku
Z2xvYmFsT2JqZWN0KCk7Cit9CisKIHVuc2lnbmVkIENvZGVCbG9jazo6cmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIoKSBjb25zdAogewogICAgIEFTU0VSVChtX3Jlb3B0aW1pemF0aW9uUmV0cnlD
b3VudGVyIDw9IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
MTM4NzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC05MzYsMTMgKzkzNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVybiBtX2dsb2JhbE9iamVj
dC5nZXQoKTsgfQogICAgICAgICAKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dEZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgh
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdsb2Jh
bE9iamVjdCgpOwotICAgICAgICAgICAgLy8gRklYTUU6IGlmIHdlIGV2ZXIgaW5saW5lIGJhc2Vk
IG9uIGV4ZWN1dGFibGUgbm90IGZ1bmN0aW9uLCB0aGlzIGNvZGUgd2lsbCBuZWVkIHRvIGNoYW5n
ZS4KLSAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVl
LT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgfQorICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0Rm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbik7CiAKICAgICAgICAg
Ly8gSnVtcCBUYWJsZXMKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMzg3NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgyLDcg
KzEzODIsMTMgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNGdW5jdGlvbik7CiAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFNl
dENhbGxlZToKKyAgICBjYXNlIFNldE15U2NvcGU6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCisgICAgY2FzZSBHZXRTY29wZToK
ICAgICBjYXNlIEdldE15U2NvcGU6CiAgICAgY2FzZSBTa2lwVG9wU2NvcGU6CiAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CkBAIC0xNDU1LDYgKzE0NjEsMTUgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1
ZSk7IC8vIExpZXMsIGJ1dCBpdCdzIHRydWUgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBKU0FycmF5
LCBzbyBpdCdzIGdvb2QgZW5vdWdoLgogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIENoZWNrRXhlY3V0
YWJsZTogeworICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgdHJhY2sgZXhlY3V0YWJsZXMgaW4g
QWJzdHJhY3RWYWx1ZSwgd2hpY2ggd291bGQgYWxsb3cgdXMgdG8gZ2V0IHJpZCBvZiB0aGVzZSBj
aGVja3MKKyAgICAgICAgLy8gbW9yZSB0aG9yb3VnaGx5LgorICAgICAgICAvLyBGSVhNRTogV2Ug
Y291bGQgZWxpbWluYXRlIHRoZXNlIGVudGlyZWx5IGlmIHdlIGtub3cgdGhlIGV4YWN0IHZhbHVl
IHRoYXQgZmxvd3MgaW50byB0aGlzLgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjQ2VsbCk7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndh
cmRDaGVja1N0cnVjdHVyZTogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEzODc2MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTksOSArMTU5LDkgQEAgcHJpdmF0ZToKICAgICAKICAgICAvLyBIYW5kbGUgY2FsbHMuIFRoaXMg
cmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5kaW5nIGlubGluaW5nIGFuZCBpbnRyaW5zaWNzLgogICAg
IHZvaWQgaGFuZGxlQ2FsbChJbnRlcnByZXRlciosIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICB2b2lkIGVt
aXRGdW5jdGlvbkNoZWNrKEpTRnVuY3Rpb24qIGV4cGVjdGVkRnVuY3Rpb24sIE5vZGVJbmRleCBj
YWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwor
ICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgTm9kZUlu
ZGV4IGNhbGxUYXJnZXQsIGludCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCk7CiAgICAgLy8gSGFuZGxlIGlubGluaW5nLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQs
IGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgotICAgIGJvb2wgaGFuZGxlSW5saW5p
bmcoYm9vbCB1c2VzUmVzdWx0LCBOb2RlSW5kZXggY2FsbFRhcmdldE5vZGVJbmRleCwgaW50IHJl
c3VsdE9wZXJhbmQsIGJvb2wgY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbiwgSlNGdW5jdGlv
biosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1
bnNpZ25lZCBuZXh0T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICBib29sIGhh
bmRsZUlubGluaW5nKGJvb2wgdXNlc1Jlc3VsdCwgTm9kZUluZGV4IGNhbGxUYXJnZXROb2RlSW5k
ZXgsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zm
c2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAvLyBIYW5kbGUgc2V0dGluZyB0aGUg
cmVzdWx0IG9mIGFuIGludHJpbnNpYy4KICAgICB2b2lkIHNldEludHJpbnNpY1Jlc3VsdChib29s
IHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2RlSW5kZXgpOwogICAgIC8vIEhhbmRs
ZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNl
IGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgpAQCAtMTMyNSwxOSArMTMyNSw5IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoSW50ZXJwcmUKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAgICAgCi0gICAgSlNGdW5jdGlvbiogZXhwZWN0ZWRGdW5jdGlvbiA9IGNhbGxMaW5r
U3RhdHVzLmZ1bmN0aW9uKCk7Ci0gICAgaWYgKCFleHBlY3RlZEZ1bmN0aW9uKSB7Ci0gICAgICAg
IC8vIEZvciBub3cgd2UgaGF2ZSBubyB3YXkgb2YgcmVhc29uaW5nIGFib3V0IHdoYXQgaXQgbWVh
bnMgdG8gbm90IGhhdmUgYSBzcGVjaWZpYyBmdW5jdGlvbi4gVGhpcyB3aWxsCi0gICAgICAgIC8v
IGNoYW5nZSBzb29uLCB0aG91Z2guCi0gICAgICAgIAotICAgICAgICBhZGRDYWxsKGludGVycHJl
dGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAgICAgCiAgICAgSW50cmluc2ljIGludHJpbnNpYyA9IGNhbGxMaW5rU3RhdHVzLmludHJpbnNp
Y0ZvcihraW5kKTsKICAgICBpZiAoaW50cmluc2ljICE9IE5vSW50cmluc2ljKSB7Ci0gICAgICAg
IGlmICghY2FsbExpbmtTdGF0dXMuaXNQcm92ZWQoKSkKLSAgICAgICAgICAgIGVtaXRGdW5jdGlv
bkNoZWNrKGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxUYXJnZXQsIHJlZ2lzdGVyT2Zmc2V0LCBraW5k
KTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzLCBjYWxsVGFyZ2V0
LCByZWdpc3Rlck9mZnNldCwga2luZCk7CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKGhhbmRs
ZUludHJpbnNpYyh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBpbnRyaW5zaWMsIHJlZ2lzdGVy
T2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcHJlZGljdGlvbikpIHsKICAgICAg
ICAgICAgIGlmICghY2FsbExpbmtTdGF0dXMuaXNQcm92ZWQoKSkgewpAQCAtMTM0OSwzMSArMTMz
OSw0MiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEludGVycHJlCiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYg
KGhhbmRsZUlubGluaW5nKHVzZXNSZXN1bHQsIGNhbGxUYXJnZXQsIHJlc3VsdE9wZXJhbmQsIGNh
bGxMaW5rU3RhdHVzLmlzUHJvdmVkKCksIGV4cGVjdGVkRnVuY3Rpb24sIHJlZ2lzdGVyT2Zmc2V0
LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCkpCisgICAgfSBl
bHNlIGlmIChoYW5kbGVJbmxpbmluZyh1c2VzUmVzdWx0LCBjYWxsVGFyZ2V0LCByZXN1bHRPcGVy
YW5kLCBjYWxsTGlua1N0YXR1cywgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGFk
ZENhbGwoaW50ZXJwcmV0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3ApOwogfQogCi12b2lkIEJ5
dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVjayhKU0Z1bmN0aW9uKiBleHBlY3RlZEZ1bmN0
aW9uLCBOb2RlSW5kZXggY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVj
a3MoY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLCBOb2RlSW5kZXggY2FsbFRh
cmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7
Ci0gICAgTm9kZUluZGV4IHRoaXNBcmd1bWVudDsKKyAgICBpZiAoY2FsbExpbmtTdGF0dXMuaXNQ
cm92ZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEFTU0VSVChjYWxsTGlua1N0YXR1
cy5jYW5PcHRpbWl6ZSgpKTsKKyAgICAKKyAgICBpZiAoSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBj
YWxsTGlua1N0YXR1cy5mdW5jdGlvbigpKQorICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rp
b24sIE9wSW5mbyhmdW5jdGlvbiksIGNhbGxUYXJnZXQpOworICAgIGVsc2UgeworICAgICAgICBB
U1NFUlQoY2FsbExpbmtTdGF0dXMuc3RydWN0dXJlKCkpOworICAgICAgICBBU1NFUlQoY2FsbExp
bmtTdGF0dXMuZXhlY3V0YWJsZSgpKTsKKyAgICAgICAgCisgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChjYWxsTGlua1N0YXR1
cy5zdHJ1Y3R1cmUoKSkpLCBjYWxsVGFyZ2V0KTsKKyAgICAgICAgYWRkVG9HcmFwaChDaGVja0V4
ZWN1dGFibGUsIE9wSW5mbyhjYWxsTGlua1N0YXR1cy5leGVjdXRhYmxlKCkpLCBjYWxsVGFyZ2V0
KTsKKyAgICB9CisgICAgCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgIHRo
aXNBcmd1bWVudCA9IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKTsK
LSAgICBlbHNlCi0gICAgICAgIHRoaXNBcmd1bWVudCA9IE5vTm9kZTsKLSAgICBhZGRUb0dyYXBo
KENoZWNrRnVuY3Rpb24sIE9wSW5mbyhleHBlY3RlZEZ1bmN0aW9uKSwgY2FsbFRhcmdldCwgdGhp
c0FyZ3VtZW50KTsKKyAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQocmVnaXN0ZXJPZmZz
ZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSkpOwogfQogCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIE5vZGVJbmRleCBjYWxsVGFyZ2V0Tm9kZUlu
ZGV4LCBpbnQgcmVzdWx0T3BlcmFuZCwgYm9vbCBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9u
LCBKU0Z1bmN0aW9uKiBleHBlY3RlZEZ1bmN0aW9uLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmco
Ym9vbCB1c2VzUmVzdWx0LCBOb2RlSW5kZXggY2FsbFRhcmdldE5vZGVJbmRleCwgaW50IHJlc3Vs
dE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywgaW50IHJlZ2lz
dGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRP
ZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICAvLyBGaXJzdCwgdGhl
IHJlYWxseSBzaW1wbGUgY2hlY2tzOiBkbyB3ZSBoYXZlIGFuIGFjdHVhbCBKUyBmdW5jdGlvbj8K
LSAgICBpZiAoIWV4cGVjdGVkRnVuY3Rpb24pCisgICAgaWYgKCFjYWxsTGlua1N0YXR1cy5leGVj
dXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZXhwZWN0ZWRGdW5jdGlv
bi0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICBpZiAoY2FsbExpbmtTdGF0dXMuZXhlY3V0YWJsZSgp
LT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZXhwZWN0ZWRGdW5jdGlvbi0+anNFeGVjdXRh
YmxlKCk7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KGNhbGxMaW5rU3RhdHVzLmV4ZWN1dGFibGUoKSk7CiAgICAgCiAgICAg
Ly8gRG9lcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB3ZSdyZSBwYXNzaW5nIG1hdGNoIHRoZSBh
cml0eSBvZiB0aGUgdGFyZ2V0PyBXZSBjdXJyZW50bHkKICAgICAvLyBpbmxpbmUgb25seSBpZiB0
aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRv
IHRoZSBudW1iZXIKQEAgLTE0MTIsOCArMTQxMyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUlubGluaW5nKGJvb2wKICAgICAvLyBOb3cgd2Uga25vdyB3aXRob3V0IGEgZG91YnQgdGhh
dCB3ZSBhcmUgY29tbWl0dGVkIHRvIGlubGluaW5nLiBTbyBiZWdpbiB0aGUgcHJvY2VzcwogICAg
IC8vIGJ5IGNoZWNraW5nIHRoZSBjYWxsZWUgKGlmIG5lY2Vzc2FyeSkgYW5kIG1ha2luZyBzdXJl
IHRoYXQgYXJndW1lbnRzIGFuZCB0aGUgY2FsbGVlCiAgICAgLy8gYXJlIGZsdXNoZWQuCi0gICAg
aWYgKCFjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uKQotICAgICAgICBlbWl0RnVuY3Rpb25D
aGVjayhleHBlY3RlZEZ1bmN0aW9uLCBjYWxsVGFyZ2V0Tm9kZUluZGV4LCByZWdpc3Rlck9mZnNl
dCwga2luZCk7CisgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzLCBjYWxsVGFy
Z2V0Tm9kZUluZGV4LCByZWdpc3Rlck9mZnNldCwga2luZCk7CiAgICAgCiAgICAgLy8gRklYTUU6
IERvbid0IGZsdXNoIGNvbnN0YW50cyEKICAgICAKQEAgLTE0MzUsNyArMTQzNSw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wKIAogICAgIElubGluZVN0YWNrRW50
cnkgaW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgdGhpcywgY29kZUJsb2NrLCBjb2RlQmxvY2ss
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSwKLSAgICAgICAgZXhwZWN0ZWRGdW5jdGlvbiwg
KFZpcnR1YWxSZWdpc3RlciltX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoCisgICAgICAg
IGNhbGxMaW5rU3RhdHVzLmZ1bmN0aW9uKCksIChWaXJ0dWFsUmVnaXN0ZXIpbV9pbmxpbmVTdGFj
a1RvcC0+cmVtYXBPcGVyYW5kKAogICAgICAgICAgICAgdXNlc1Jlc3VsdCA/IHJlc3VsdE9wZXJh
bmQgOiBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSwKICAgICAgICAgKFZpcnR1YWxSZWdpc3Rlcilp
bmxpbmVDYWxsRnJhbWVTdGFydCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQpOwog
ICAgIApAQCAtMTQ0Niw2ICsxNDQ2LDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
bGluaW5nKGJvb2wKICAgICBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCA9IDA7CiAKICAgICBhZGRU
b0dyYXBoKElubGluZVN0YXJ0LCBPcEluZm8oYXJndW1lbnRQb3NpdGlvblN0YXJ0KSk7CisgICAg
aWYgKGNhbGxMaW5rU3RhdHVzLmlzQ2xvc3VyZUNhbGwoKSkgeworICAgICAgICBhZGRUb0dyYXBo
KFNldENhbGxlZSwgY2FsbFRhcmdldE5vZGVJbmRleCk7CisgICAgICAgIGFkZFRvR3JhcGgoU2V0
TXlTY29wZSwgYWRkVG9HcmFwaChHZXRTY29wZSwgY2FsbFRhcmdldE5vZGVJbmRleCkpOworICAg
IH0KICAgICAKICAgICBwYXJzZUNvZGVCbG9jaygpOwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDEzODc2MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
OSw5ICs4OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0g
ICAgZW51bSBJbmxpbmVDYWxsRnJhbWVSZXF1aXJlbWVudCB7IFJlcXVpcmVTYW1lSW5saW5lQ2Fs
bEZyYW1lLCBEb05vdENhcmVBYm91dElubGluZUNhbGxGcmFtZSB9OwotICAgIHRlbXBsYXRlPElu
bGluZUNhbGxGcmFtZVJlcXVpcmVtZW50IGlubGluZUNhbGxGcmFtZVJlcXVpcmVtZW50PgotICAg
IE5vZGVJbmRleCBnZW5lcmljUHVyZUNTRShOb2RlJiBub2RlKQorICAgIE5vZGVJbmRleCBwdXJl
Q1NFKE5vZGUmIG5vZGUpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gY2Fub25p
Y2FsaXplKG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gY2Fub25p
Y2FsaXplKG5vZGUuY2hpbGQyKCkpOwpAQCAtMTEyLDEwICsxMTAsNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgaWYgKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSAhPSBvdGhlck5vZGUuYXJpdGhOb2Rl
RmxhZ3MoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKGlubGluZUNhbGxGcmFtZVJlcXVpcmVtZW50ID09IFJlcXVpcmVTYW1lSW5saW5l
Q2FsbEZyYW1lCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSAhPSBvdGhlck5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGVJbmRleCBvdGhl
ckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBp
ZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwpA
QCAtMTM5LDE2ICsxMzMsNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAg
IH0KICAgICAKLSAgICBOb2RlSW5kZXggcHVyZUNTRShOb2RlJiBub2RlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGdlbmVyaWNQdXJlQ1NFPERvTm90Q2FyZUFib3V0SW5saW5lQ2FsbEZyYW1lPihu
b2RlKTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZUluZGV4IHB1cmVDU0VSZXF1aXJpbmdTYW1lSW5s
aW5lQ2FsbEZyYW1lKE5vZGUmIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gZ2VuZXJpY1B1
cmVDU0U8UmVxdWlyZVNhbWVJbmxpbmVDYWxsRnJhbWU+KG5vZGUpOwotICAgIH0KLSAgICAKICAg
ICBOb2RlSW5kZXggY29uc3RhbnRDU0UoTm9kZSYgbm9kZSkKICAgICB7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7CkBAIC0xODEsNiArMTY1
LDI3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgfQogICAgIAorICAg
IE5vZGVJbmRleCBnZXRDYWxsZWVMb2FkRWxpbWluYXRpb24oSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5C
bG9jazsgaS0tOykgeworICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50Qmxv
Y2stPmF0KGkpOworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOworICAg
ICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSAh
PSBpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRDYWxsZWU6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgY2FzZSBTZXRDYWxsZWU6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICB9CisgICAgCiAgICAgTm9kZUluZGV4IGdl
dEFycmF5TGVuZ3RoRWxpbWluYXRpb24oTm9kZUluZGV4IGFycmF5KQogICAgIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKQEAgLTQxNiw2ICs0MjEs
MjAgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQor
ICAgIAorICAgIGJvb2wgY2hlY2tFeGVjdXRhYmxlRWxpbWluYXRpb24oRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGUsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0UoKTsgaS0tOykgeworICAgICAgICAgICAgTm9kZUlu
ZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKGluZGV4
ID09IGNoaWxkMSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBDaGVj
a0V4ZWN1dGFibGUgJiYgbm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgbm9kZS5leGVjdXRhYmxl
KCkgPT0gZXhlY3V0YWJsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgYm9vbCBjaGVja1N0cnVjdHVy
ZUVsaW1pbmF0aW9uKGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBOb2RlSW5kZXgg
Y2hpbGQxKQogICAgIHsKQEAgLTgzMCw2ICs4NDksOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICBjYXNlIEdldE15U2NvcGU6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgY2FzZSBTZXRNeVNjb3BlOgorICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTE0NCwx
MSArMTE2NSwxMiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFNraXBUb3BTY29wZToKICAgICAg
ICAgY2FzZSBTa2lwU2NvcGU6CiAgICAgICAgIGNhc2UgR2V0U2NvcGVSZWdpc3RlcnM6CisgICAg
ICAgIGNhc2UgR2V0U2NvcGU6CiAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5v
ZGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0
Q2FsbGVlOgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocHVyZUNTRVJlcXVpcmluZ1NhbWVJ
bmxpbmVDYWxsRnJhbWUobm9kZSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0Q2Fs
bGVlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKQEAgLTEzNTEsNiAr
MTM3MywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRh
YmxlOgorICAgICAgICAgICAgaWYgKGNoZWNrRXhlY3V0YWJsZUVsaW1pbmF0aW9uKG5vZGUuZXhl
Y3V0YWJsZSgpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQorICAgICAgICAgICAgICAgIGVsaW1p
bmF0ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQ2hlY2tBcnJheToKICAgICAgICAgICAgIGlmIChjaGVja0FycmF5RWxpbWluYXRpb24obm9k
ZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmFycmF5TW9kZSgpKSkKICAgICAgICAgICAgICAgICBl
bGltaW5hdGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJ
KHJldmlzaW9uIDEzODc2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTMgQEAgaW5saW5lIGJvb2wgY29tcGls
ZShDb21waWxlTW9kZSBjb21waWxlTQogICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5pbnN0cnVjdGlv
bkNvdW50KCkgPCAxMDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkNvdW50KCkgPCAyMDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPCA0MDApCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZygi
REZHIGNvbXBpbGluZyAiLCAqY29kZUJsb2NrLCAiLCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zID0g
IiwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICJcbiIpOwogI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTM4NzYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwMiw2ICs3
MDIsMTYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBBU1NFUlQoSlNWYWx1ZShyZXN1bHQpLmlz
RnVuY3Rpb24oKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorICAgIAorICAgIGJv
b2wgaGFzRXhlY3V0YWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBDaGVja0V4
ZWN1dGFibGU7CisgICAgfQorICAgIAorICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBqc0Nhc3Q8RXhlY3V0YWJsZUJhc2UqPihyZWludGVycHJl
dF9jYXN0PEpTQ2VsbCo+KG1fb3BJbmZvKSk7CisgICAgfQogCiAgICAgYm9vbCBoYXNTdHJ1Y3R1
cmVUcmFuc2l0aW9uRGF0YSgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTM4NzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhDb252ZXJ0VGhpcywgTm9kZVJl
c3VsdEpTKSBcCiAgICAgbWFjcm8oQ3JlYXRlVGhpcywgTm9kZVJlc3VsdEpTKSAvKiBOb3RlIHRo
aXMgaXMgbm90IE11c3RHZW5lcmF0ZSBzaW5jZSB3ZSdyZSByZXR1cm5pbmcgaXQgYW55d2F5LiAq
LyBcCiAgICAgbWFjcm8oR2V0Q2FsbGVlLCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhTZXRD
YWxsZWUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9yIGxvY2Fs
IHZhcmlhYmxlIGFjY2Vzcy4gVGhlc2Ugbm9kZXMgYXJlIGxpbmtlZCB0b2dldGhlciB1c2luZyBQ
aGkgbm9kZXMuICovXAogICAgIC8qIEFueSB0d28gbm9kZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUg
c2FtZSBQaGkgZ3JhcGggd2lsbCBzaGFyZSB0aGUgc2FtZSAqL1wKQEAgLTEyNCw2ICsxMjUsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oUHV0QnlJZCwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oUHV0QnlJZERp
cmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8o
Q2hlY2tTdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDaGVja0V4ZWN1
dGFibGUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhGb3J3YXJkQ2hlY2tTdHJ1Y3R1
cmUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICAvKiBUcmFuc2l0aW9uIHdhdGNocG9pbnRzIGFy
ZSBhIGNvbnRyYWN0IGJldHdlZW4gdGhlIHBhcnR5IHNldHRpbmcgdGhlIHdhdGNocG9pbnQgKi9c
CiAgICAgLyogYW5kIHRoZSBydW50aW1lIHN5c3RlbSwgd2hlcmUgdGhlIHBhcnR5IHByb21pc2Vz
IHRoYXQgdGhlIGNoaWxkIG9iamVjdCBvbmNlIGhhZCAqL1wKQEAgLTE1MCw3ICsxNTIsOSBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0QnlPZmZzZXQsIE5v
ZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFB1dEJ5T2Zmc2V0LCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oR2V0QXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1hY3Jv
KEdldFNjb3BlLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhHZXRNeVNjb3BlLCBOb2RlUmVz
dWx0SlMpIFwKKyAgICBtYWNybyhTZXRNeVNjb3BlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAg
bWFjcm8oU2tpcFRvcFNjb3BlLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhTa2lwU2NvcGUs
IE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKEdldFNjb3BlUmVnaXN0ZXJzLCBOb2RlUmVzdWx0
U3RvcmFnZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDEzODc2MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NjcsNiArNzY3LDE2IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgUGhpOgogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgY2FzZSBTZXRDYWxs
ZWU6CisgICAgICAgIGNhc2UgU2V0TXlTY29wZToKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldFNjb3BlOgorICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVz
ZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQ2Vs
bE90aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAv
LyBUaGVzZSBnZXQgaWdub3JlZCBiZWNhdXNlIHRoZXkgZG9uJ3QgcmV0dXJuIGFueXRoaW5nLgog
ICAgICAgICBjYXNlIERGRzo6SnVtcDoKQEAgLTc3Nyw2ICs3ODcsNyBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAg
ICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6CiAg
ICAgICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgogICAgICAgICBjYXNlIFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICBjYXNlIEZvcndhcmRTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTM4NzYzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzkyMSw2ICszOTIxLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIFNldENhbGxl
ZTogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjYWxsZWUodGhpcywgbm9kZS5jaGls
ZDEoKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRyKGNhbGxlZS5ncHIoKSwgSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLmNvZGVPcmlnaW4u
c3RhY2tPZmZzZXQoKSArIHN0YXRpY19jYXN0PGludD4oSlNTdGFjazo6Q2FsbGVlKSkpKTsKKyAg
ICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgICAgIAorICAgIGNhc2UgR2V0U2NvcGU6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgZnVuY3Rpb24odGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgZnVuY3Rpb24pOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjpBZGRyZXNzKGZ1bmN0aW9uLmdwcigpLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4o
KSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBH
ZXRNeVNjb3BlOiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CkBAIC0zOTMwLDYgKzM5NDUsMTMgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgU2V0TXlTY29wZTogeworICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBjYWxsZWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIG1faml0
LnN0b3JlUHRyKGNhbGxlZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLmNvZGVPcmlnaW4uc3RhY2tPZmZzZXQoKSArIHN0YXRp
Y19jYXN0PGludD4oSlNTdGFjazo6U2NvcGVDaGFpbikpKSk7CisgICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNl
IFNraXBUb3BTY29wZTogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzY29w
ZSk7CkBAIC00MDgwLDYgKzQxMDIsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6IHsKKyAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZnVuY3Rpb24odGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKGZ1bmN0aW9uLmdw
cigpKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90
RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGZ1bmN0aW9uLmdwcigpLCBKU0Z1bmN0aW9uOjpv
ZmZzZXRPZkV4ZWN1dGFibGUoKSksIG5vZGUuZXhlY3V0YWJsZSgpKSk7CisgICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAg
ICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOiB7
CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181272</attachid>
            <date>2013-01-03 20:20:11 -0800</date>
            <delta_ts>2013-01-06 00:04:27 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>closures.patch</filename>
            <type>text/plain</type>
            <size>28139</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM4NzY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDEzLTAxLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBpbmxpbmUgY2xvc3VyZSBjYWxscworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2MDY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAg
ICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a1N0YXR1czo6ZHVtcCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaDoKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmlzQ2xvc3VyZUNhbGwpOgorICAgICAgICAoQ2Fs
bExpbmtTdGF0dXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Z2xvYmFsT2JqZWN0Rm9yKToKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAg
ICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgor
ICAgICAgICAoQnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZW1p
dEZ1bmN0aW9uQ2hlY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW5saW5pbmcpOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Q1NFUGhhc2U6OnB1cmVDU0UpOgorICAgICAgICAoQ1NFUGhhc2UpOgorICAgICAg
ICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRDYWxsZWVMb2FkRWxpbWluYXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OkNTRVBoYXNlOjpjaGVja0V4ZWN1dGFibGVFbGltaW5hdGlvbik6CisgICAg
ICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldE15U2NvcGVMb2FkRWxpbWluYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICogZGZn
L0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZSk6CisgICAgICAgICog
ZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Omhhc0V4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmV4ZWN1dGFibGUpOgor
ICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBk
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisKIDIwMTMtMDEtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KIAogICAgICAgICBERkc6OkJ5dGVDb2RlQ2FjaGUgc2VydmVzIGxpdHRsZSBvciBubyBwdXJw
b3NlIGV2ZXIgc2luY2Ugd2UgZGVjaWRlZCB0byBrZWVwIGJ5dGVjb2RlIGFyb3VuZCBwZXJtYW5l
bnRseQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtTdGF0dXMuY3BwCShyZXZpc2lvbiAxMzg3NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1
LDcgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGbwogI2VuZGlmCiB9
CiAKLXZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKK3ZvaWQgQ2Fs
bExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBpZiAoIWlz
U2V0KCkpIHsKICAgICAgICAgb3V0LnByaW50KCJOb3QgU2V0Iik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTM4
NzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICAKICAgICBib29sIGNvdWxkVGFr
ZVNsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9jb3VsZFRha2VTbG93UGF0aDsgfQotICAgIGJv
b2wgaXNDbG9zdXJlQ2FsbCgpIGNvbnN0IHsgcmV0dXJuICFtX2NhbGxUYXJnZXQ7IH0KKyAgICBi
b29sIGlzQ2xvc3VyZUNhbGwoKSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGFibGUgJiYgIW1fY2Fs
bFRhcmdldDsgfQogICAgIAogICAgIEpTVmFsdWUgY2FsbFRhcmdldCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2FsbFRhcmdldDsgfQogICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uKCkgY29uc3Q7CkBAIC04
NSw3ICs4NSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzUHJvdmVkKCkgY29uc3QgeyByZXR1cm4g
bV9pc1Byb3ZlZDsgfQogICAgIGJvb2wgY2FuT3B0aW1pemUoKSBjb25zdCB7IHJldHVybiAobV9j
YWxsVGFyZ2V0IHx8IG1fZXhlY3V0YWJsZSkgJiYgIW1fY291bGRUYWtlU2xvd1BhdGg7IH0KICAg
ICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKTsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CiAgICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNv
bXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNp
b24gMTM4NzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MzMsNiArMjkzMywxMyBAQCBib29sIEZ1bmN0aW9uQ29k
ZUJsb2NrOjpqaXRDb21waWxlSW1wbChFCiB9CiAjZW5kaWYKIAorSlNHbG9iYWxPYmplY3QqIENv
ZGVCbG9jazo6Z2xvYmFsT2JqZWN0Rm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBp
ZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm4gZ2xvYmFsT2Jq
ZWN0KCk7CisgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPmdlbmVyYXRlZEJ5dGVjb2RlKCku
Z2xvYmFsT2JqZWN0KCk7Cit9CisKIHVuc2lnbmVkIENvZGVCbG9jazo6cmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIoKSBjb25zdAogewogICAgIEFTU0VSVChtX3Jlb3B0aW1pemF0aW9uUmV0cnlD
b3VudGVyIDw9IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
MTM4NzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC05MzYsMTMgKzkzNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVybiBtX2dsb2JhbE9iamVj
dC5nZXQoKTsgfQogICAgICAgICAKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dEZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgh
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdsb2Jh
bE9iamVjdCgpOwotICAgICAgICAgICAgLy8gRklYTUU6IGlmIHdlIGV2ZXIgaW5saW5lIGJhc2Vk
IG9uIGV4ZWN1dGFibGUgbm90IGZ1bmN0aW9uLCB0aGlzIGNvZGUgd2lsbCBuZWVkIHRvIGNoYW5n
ZS4KLSAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVl
LT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgfQorICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0Rm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbik7CiAKICAgICAgICAg
Ly8gSnVtcCBUYWJsZXMKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTM4NzYzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw3
IEBAIHZvaWQgSW5saW5lQ2FsbEZyYW1lOjpkdW1wKFByaW50U3RyZWFtJiAKICAgICAgICAgb3V0
LnByaW50KCIsIGtub3duIGNhbGxlZTogIiwgSlNWYWx1ZShjYWxsZWUuZ2V0KCkpKTsKICAgICBl
bHNlCiAgICAgICAgIG91dC5wcmludCgiLCBjbG9zdXJlIGNhbGwiKTsKKyAgICBvdXQucHJpbnQo
Iiwgc3RhY2sgPj0gciIsIHN0YWNrT2Zmc2V0KTsKICAgICBvdXQucHJpbnQoIj4iKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3Bw
CShyZXZpc2lvbiAxMzg3NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgyLDcgKzEzODIsMTMgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNGdW5jdGlvbik7
CiAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFNldENhbGxlZToKKyAgICBjYXNl
IFNldE15U2NvcGU6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCisgICAgY2FzZSBHZXRTY29wZToKICAgICBjYXNlIEdldE15U2Nv
cGU6CiAgICAgY2FzZSBTa2lwVG9wU2NvcGU6CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxz
ZSk7CkBAIC0xNDU1LDYgKzE0NjEsMTUgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIExpZXMsIGJ1dCBp
dCdzIHRydWUgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBKU0FycmF5LCBzbyBpdCdzIGdvb2QgZW5v
dWdoLgogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIENoZWNrRXhlY3V0YWJsZTogeworICAgICAgICAv
LyBGSVhNRTogV2UgY291bGQgdHJhY2sgZXhlY3V0YWJsZXMgaW4gQWJzdHJhY3RWYWx1ZSwgd2hp
Y2ggd291bGQgYWxsb3cgdXMgdG8gZ2V0IHJpZCBvZiB0aGVzZSBjaGVja3MKKyAgICAgICAgLy8g
bW9yZSB0aG9yb3VnaGx5LgorICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgZWxpbWluYXRlIHRo
ZXNlIGVudGlyZWx5IGlmIHdlIGtub3cgdGhlIGV4YWN0IHZhbHVlIHRoYXQgZmxvd3MgaW50byB0
aGlzLgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Cisg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAg
ICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTog
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDEzODc2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksOSArMTU5LDkgQEAgcHJp
dmF0ZToKICAgICAKICAgICAvLyBIYW5kbGUgY2FsbHMuIFRoaXMgcmVzb2x2ZXMgaXNzdWVzIHN1
cnJvdW5kaW5nIGlubGluaW5nIGFuZCBpbnRyaW5zaWNzLgogICAgIHZvaWQgaGFuZGxlQ2FsbChJ
bnRlcnByZXRlciosIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIE5vZGVUeXBlIG9w
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICB2b2lkIGVtaXRGdW5jdGlvbkNoZWNrKEpT
RnVuY3Rpb24qIGV4cGVjdGVkRnVuY3Rpb24sIE5vZGVJbmRleCBjYWxsVGFyZ2V0LCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIHZvaWQgZW1pdEZ1bmN0
aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgTm9kZUluZGV4IGNhbGxUYXJnZXQsIGlu
dCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgLy8gSGFuZGxl
IGlubGluaW5nLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQg
dG8gcGxhbnQgYSBjYWxsLgotICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoYm9vbCB1c2VzUmVzdWx0
LCBOb2RlSW5kZXggY2FsbFRhcmdldE5vZGVJbmRleCwgaW50IHJlc3VsdE9wZXJhbmQsIGJvb2wg
Y2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbiwgSlNGdW5jdGlvbiosIGludCByZWdpc3Rlck9m
ZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICBib29sIGhhbmRsZUlubGluaW5nKGJvb2wg
dXNlc1Jlc3VsdCwgTm9kZUluZGV4IGNhbGxUYXJnZXROb2RlSW5kZXgsIGludCByZXN1bHRPcGVy
YW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kKTsKICAgICAvLyBIYW5kbGUgc2V0dGluZyB0aGUgcmVzdWx0IG9mIGFuIGludHJp
bnNpYy4KICAgICB2b2lkIHNldEludHJpbnNpY1Jlc3VsdChib29sIHVzZXNSZXN1bHQsIGludCBy
ZXN1bHRPcGVyYW5kLCBOb2RlSW5kZXgpOwogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rp
b25zLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxh
bnQgYSBjYWxsLgpAQCAtMTI5MSw3ICsxMjkxLDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlQ2FsbChJbnRlcnByZQogICAgIGRhdGFMb2coIkZvciBjYWxsIGF0IEAiLCBtX2dyYXBoLnNp
emUoKSwgIiBiYyMiLCBtX2N1cnJlbnRJbmRleCwgIjogIiwgY2FsbExpbmtTdGF0dXMsICJcbiIp
OwogI2VuZGlmCiAgICAgCi0gICAgaWYgKCFjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpKSB7
CisgICAgaWYgKCFjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpCisgICAgICAgIHx8ICghY2Fs
bExpbmtTdGF0dXMuaXNQcm92ZWQoKSAmJiBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxl
Lmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpKSB7CiAgICAgICAgIC8vIE9k
ZGx5LCB0aGlzIGNvbmZsYXRlcyBjYWxscyB0aGF0IGhhdmVuJ3QgZXhlY3V0ZWQgd2l0aCBjYWxs
cyB0aGF0IGJlaGF2ZWQgc3VmZmljaWVudGx5IHBvbHltb3JwaGljYWxseQogICAgICAgICAvLyB0
aGF0IHdlIGNhbm5vdCBvcHRpbWl6ZSB0aGVtLgogICAgICAgICAKQEAgLTEzMjUsMTkgKzEzMjYs
OSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEludGVycHJlCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgICAgIAotICAgIEpTRnVuY3Rpb24qIGV4cGVjdGVkRnVuY3Rpb24g
PSBjYWxsTGlua1N0YXR1cy5mdW5jdGlvbigpOwotICAgIGlmICghZXhwZWN0ZWRGdW5jdGlvbikg
ewotICAgICAgICAvLyBGb3Igbm93IHdlIGhhdmUgbm8gd2F5IG9mIHJlYXNvbmluZyBhYm91dCB3
aGF0IGl0IG1lYW5zIHRvIG5vdCBoYXZlIGEgc3BlY2lmaWMgZnVuY3Rpb24uIFRoaXMgd2lsbAot
ICAgICAgICAvLyBjaGFuZ2Ugc29vbiwgdGhvdWdoLgotICAgICAgICAKLSAgICAgICAgYWRkQ2Fs
bChpbnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBvcCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgICAgIAogICAgIEludHJpbnNpYyBpbnRyaW5zaWMgPSBjYWxsTGlua1N0YXR1
cy5pbnRyaW5zaWNGb3Ioa2luZCk7CiAgICAgaWYgKGludHJpbnNpYyAhPSBOb0ludHJpbnNpYykg
ewotICAgICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmlzUHJvdmVkKCkpCi0gICAgICAgICAgICBl
bWl0RnVuY3Rpb25DaGVjayhleHBlY3RlZEZ1bmN0aW9uLCBjYWxsVGFyZ2V0LCByZWdpc3Rlck9m
ZnNldCwga2luZCk7CisgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1cywg
Y2FsbFRhcmdldCwgcmVnaXN0ZXJPZmZzZXQsIGtpbmQpOwogICAgICAgICAgICAgCiAgICAgICAg
IGlmIChoYW5kbGVJbnRyaW5zaWModXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgaW50cmluc2lj
LCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHByZWRpY3Rpb24p
KSB7CiAgICAgICAgICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmlzUHJvdmVkKCkpIHsKQEAgLTEz
NDYsMzQgKzEzMzcsNDUgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnRlcnBy
ZQogICAgICAgICAgICAgICAgIC8vIHNtYXJ0IGVub3VnaCB0byBmaWd1cmUgdGhhdCBvdXQsIHNp
bmNlIGl0IGRvZXNuJ3QgdW5kZXJzdGFuZCBDaGVja0Z1bmN0aW9uLgogICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUGhhbnRvbSwgY2FsbFRhcmdldCk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgIH0gZWxzZSBpZiAoaGFuZGxlSW5saW5pbmcodXNlc1Jlc3VsdCwgY2FsbFRhcmdldCwgcmVz
dWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXMuaXNQcm92ZWQoKSwgZXhwZWN0ZWRGdW5jdGlvbiwg
cmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBr
aW5kKSkKKyAgICB9IGVsc2UgaWYgKGhhbmRsZUlubGluaW5nKHVzZXNSZXN1bHQsIGNhbGxUYXJn
ZXQsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtpbmQpKQogICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgYWRkQ2FsbChpbnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBvcCk7
CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrKEpTRnVuY3Rpb24q
IGV4cGVjdGVkRnVuY3Rpb24sIE5vZGVJbmRleCBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVt
aXRGdW5jdGlvbkNoZWNrcyhjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIE5v
ZGVJbmRleCBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKIHsKLSAgICBOb2RlSW5kZXggdGhpc0FyZ3VtZW50OworICAgIGlmIChjYWxs
TGlua1N0YXR1cy5pc1Byb3ZlZCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJU
KGNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkpOworICAgIAorICAgIGlmIChKU0Z1bmN0aW9u
KiBmdW5jdGlvbiA9IGNhbGxMaW5rU3RhdHVzLmZ1bmN0aW9uKCkpCisgICAgICAgIGFkZFRvR3Jh
cGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZvKGZ1bmN0aW9uKSwgY2FsbFRhcmdldCk7CisgICAgZWxz
ZSB7CisgICAgICAgIEFTU0VSVChjYWxsTGlua1N0YXR1cy5zdHJ1Y3R1cmUoKSk7CisgICAgICAg
IEFTU0VSVChjYWxsTGlua1N0YXR1cy5leGVjdXRhYmxlKCkpOworICAgICAgICAKKyAgICAgICAg
YWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0
KGNhbGxMaW5rU3RhdHVzLnN0cnVjdHVyZSgpKSksIGNhbGxUYXJnZXQpOworICAgICAgICBhZGRU
b0dyYXBoKENoZWNrRXhlY3V0YWJsZSwgT3BJbmZvKGNhbGxMaW5rU3RhdHVzLmV4ZWN1dGFibGUo
KSksIGNhbGxUYXJnZXQpOworICAgIH0KKyAgICAKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2Fs
bCkKLSAgICAgICAgdGhpc0FyZ3VtZW50ID0gZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRU
b09wZXJhbmQoMCkpOwotICAgIGVsc2UKLSAgICAgICAgdGhpc0FyZ3VtZW50ID0gTm9Ob2RlOwot
ICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZvKGV4cGVjdGVkRnVuY3Rpb24pLCBj
YWxsVGFyZ2V0LCB0aGlzQXJndW1lbnQpOworICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdl
dChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSk7CiB9CiAKLWJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wgdXNlc1Jlc3VsdCwgTm9kZUluZGV4IGNh
bGxUYXJnZXROb2RlSW5kZXgsIGludCByZXN1bHRPcGVyYW5kLCBib29sIGNlcnRhaW5BYm91dEV4
cGVjdGVkRnVuY3Rpb24sIEpTRnVuY3Rpb24qIGV4cGVjdGVkRnVuY3Rpb24sIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zm
c2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIE5vZGVJbmRleCBjYWxsVGFyZ2V0Tm9kZUlu
ZGV4LCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3Rh
dHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
dW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAg
IC8vIEZpcnN0LCB0aGUgcmVhbGx5IHNpbXBsZSBjaGVja3M6IGRvIHdlIGhhdmUgYW4gYWN0dWFs
IEpTIGZ1bmN0aW9uPwotICAgIGlmICghZXhwZWN0ZWRGdW5jdGlvbikKKyAgICBpZiAoIWNhbGxM
aW5rU3RhdHVzLmV4ZWN1dGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChl
eHBlY3RlZEZ1bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigpKQorICAgIGlmIChjYWxsTGlua1N0YXR1
cy5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBleHBlY3RlZEZ1bmN0
aW9uLT5qc0V4ZWN1dGFibGUoKTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2FsbExpbmtTdGF0dXMuZXhlY3V0YWJsZSgp
KTsKICAgICAKICAgICAvLyBEb2VzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHdlJ3JlIHBhc3Np
bmcgbWF0Y2ggdGhlIGFyaXR5IG9mIHRoZSB0YXJnZXQ/IFdlIGN1cnJlbnRseQogICAgIC8vIGlu
bGluZSBvbmx5IGlmIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCBpcyBncmVhdGVyIHRo
YW4gb3IgZXF1YWwgdG8gdGhlIG51bWJlcgpAQCAtMTQxMiw4ICsxNDE0LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbAogICAgIC8vIE5vdyB3ZSBrbm93IHdpdGhv
dXQgYSBkb3VidCB0aGF0IHdlIGFyZSBjb21taXR0ZWQgdG8gaW5saW5pbmcuIFNvIGJlZ2luIHRo
ZSBwcm9jZXNzCiAgICAgLy8gYnkgY2hlY2tpbmcgdGhlIGNhbGxlZSAoaWYgbmVjZXNzYXJ5KSBh
bmQgbWFraW5nIHN1cmUgdGhhdCBhcmd1bWVudHMgYW5kIHRoZSBjYWxsZWUKICAgICAvLyBhcmUg
Zmx1c2hlZC4KLSAgICBpZiAoIWNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24pCi0gICAgICAg
IGVtaXRGdW5jdGlvbkNoZWNrKGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxUYXJnZXROb2RlSW5kZXgs
IHJlZ2lzdGVyT2Zmc2V0LCBraW5kKTsKKyAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbExpbmtT
dGF0dXMsIGNhbGxUYXJnZXROb2RlSW5kZXgsIHJlZ2lzdGVyT2Zmc2V0LCBraW5kKTsKICAgICAK
ICAgICAvLyBGSVhNRTogRG9uJ3QgZmx1c2ggY29uc3RhbnRzIQogICAgIApAQCAtMTQzNSw3ICsx
NDM2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbAogCiAgICAg
SW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KAogICAgICAgICB0aGlzLCBjb2RlQmxv
Y2ssIGNvZGVCbG9jaywgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxLAotICAgICAgICBleHBl
Y3RlZEZ1bmN0aW9uLCAoVmlydHVhbFJlZ2lzdGVyKW1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3Bl
cmFuZCgKKyAgICAgICAgY2FsbExpbmtTdGF0dXMuZnVuY3Rpb24oKSwgKFZpcnR1YWxSZWdpc3Rl
ciltX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoCiAgICAgICAgICAgICB1c2VzUmVzdWx0
ID8gcmVzdWx0T3BlcmFuZCA6IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpLAogICAgICAgICAoVmly
dHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZVN0YXJ0LCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywga2luZCk7CiAgICAgCkBAIC0xNDQ2LDYgKzE0NDcsMTAgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbAogICAgIG1fY3VycmVudFByb2ZpbGluZ0luZGV4ID0g
MDsKIAogICAgIGFkZFRvR3JhcGgoSW5saW5lU3RhcnQsIE9wSW5mbyhhcmd1bWVudFBvc2l0aW9u
U3RhcnQpKTsKKyAgICBpZiAoY2FsbExpbmtTdGF0dXMuaXNDbG9zdXJlQ2FsbCgpKSB7CisgICAg
ICAgIGFkZFRvR3JhcGgoU2V0Q2FsbGVlLCBjYWxsVGFyZ2V0Tm9kZUluZGV4KTsKKyAgICAgICAg
YWRkVG9HcmFwaChTZXRNeVNjb3BlLCBhZGRUb0dyYXBoKEdldFNjb3BlLCBjYWxsVGFyZ2V0Tm9k
ZUluZGV4KSk7CisgICAgfQogICAgIAogICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTM4
NzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg5LDkgKzg5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKLSAgICBlbnVtIElubGluZUNhbGxGcmFtZVJlcXVpcmVtZW50IHsgUmVxdWly
ZVNhbWVJbmxpbmVDYWxsRnJhbWUsIERvTm90Q2FyZUFib3V0SW5saW5lQ2FsbEZyYW1lIH07Ci0g
ICAgdGVtcGxhdGU8SW5saW5lQ2FsbEZyYW1lUmVxdWlyZW1lbnQgaW5saW5lQ2FsbEZyYW1lUmVx
dWlyZW1lbnQ+Ci0gICAgTm9kZUluZGV4IGdlbmVyaWNQdXJlQ1NFKE5vZGUmIG5vZGUpCisgICAg
Tm9kZUluZGV4IHB1cmVDU0UoTm9kZSYgbm9kZSkKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCBj
aGlsZDEgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIE5vZGVJbmRleCBj
aGlsZDIgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSk7CkBAIC0xMTIsMTAgKzExMCw2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobm9kZS5hcml0aE5vZGVGbGFncygpICE9IG90aGVy
Tm9kZS5hcml0aE5vZGVGbGFncygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lUmVxdWlyZW1lbnQgPT0gUmVx
dWlyZVNhbWVJbmxpbmVDYWxsRnJhbWUKLSAgICAgICAgICAgICAgICAmJiBub2RlLmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lICE9IG90aGVyTm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAg
Tm9kZUluZGV4IG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIGlmIChvdGhlckNoaWxkID09IE5vTm9kZSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5kZXg7CkBAIC0xMzksMTYgKzEzMyw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVy
biBOb05vZGU7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBwdXJlQ1NFKE5vZGUmIG5vZGUp
Ci0gICAgewotICAgICAgICByZXR1cm4gZ2VuZXJpY1B1cmVDU0U8RG9Ob3RDYXJlQWJvdXRJbmxp
bmVDYWxsRnJhbWU+KG5vZGUpOwotICAgIH0KLSAgICAKLSAgICBOb2RlSW5kZXggcHVyZUNTRVJl
cXVpcmluZ1NhbWVJbmxpbmVDYWxsRnJhbWUoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBnZW5lcmljUHVyZUNTRTxSZXF1aXJlU2FtZUlubGluZUNhbGxGcmFtZT4obm9kZSk7Ci0g
ICAgfQotICAgIAogICAgIE5vZGVJbmRleCBjb25zdGFudENTRShOb2RlJiBub2RlKQogICAgIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGktLTspIHsK
QEAgLTE4MSw2ICsxNjUsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAg
ICB9CiAgICAgCisgICAgTm9kZUluZGV4IGdldENhbGxlZUxvYWRFbGltaW5hdGlvbihJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CisgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXgg
PSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFtpbmRleF07CisgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lICE9IGlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEdl
dENhbGxlZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICBjYXNl
IFNldENhbGxlZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgp
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgIH0KKyAgICAKICAg
ICBOb2RlSW5kZXggZ2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbihOb2RlSW5kZXggYXJyYXkpCiAg
ICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewpA
QCAtNDE2LDYgKzQyMSwyMCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CisgICAgCisgICAgYm9vbCBjaGVja0V4ZWN1dGFibGVFbGltaW5hdGlvbihF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTm9kZUluZGV4IGNoaWxkMSkKKyAgICB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7CisgICAg
ICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAg
ICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAgICAgICAgICBpZiAobm9k
ZS5vcCgpID09IENoZWNrRXhlY3V0YWJsZSAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBu
b2RlLmV4ZWN1dGFibGUoKSA9PSBleGVjdXRhYmxlKQorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBib29s
IGNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24oY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQsIE5vZGVJbmRleCBjaGlsZDEpCiAgICAgewpAQCAtODMwLDYgKzg0OSw4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgIGNhc2UgR2V0TXlT
Y29wZToKICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICBjYXNlIFNl
dE15U2NvcGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsK
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CkBAIC0xMTQ0LDExICsxMTY1LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU2tpcFRv
cFNjb3BlOgogICAgICAgICBjYXNlIFNraXBTY29wZToKICAgICAgICAgY2FzZSBHZXRTY29wZVJl
Z2lzdGVyczoKKyAgICAgICAgY2FzZSBHZXRTY29wZToKICAgICAgICAgICAgIHNldFJlcGxhY2Vt
ZW50KHB1cmVDU0Uobm9kZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NF
UmVxdWlyaW5nU2FtZUlubGluZUNhbGxGcmFtZShub2RlKSk7CisgICAgICAgICAgICBzZXRSZXBs
YWNlbWVudChnZXRDYWxsZWVMb2FkRWxpbWluYXRpb24obm9kZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBHZXRMb2NhbDog
ewpAQCAtMTM1MSw2ICsxMzczLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZWxpbWlu
YXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBDaGVja0V4ZWN1dGFibGU6CisgICAgICAgICAgICBpZiAoY2hlY2tFeGVjdXRhYmxlRWxpbWlu
YXRpb24obm9kZS5leGVjdXRhYmxlKCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCisgICAgICAg
ICAgICAgICAgZWxpbWluYXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICAgICAgaWYgKGNoZWNrQXJyYXlF
bGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUuYXJyYXlNb2RlKCkpKQogICAg
ICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDEzODc2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgc2V0ID0gbm9kZS5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgIHNldCA9IG5vZGUuc3RydWN0dXJlU2V0KCk7CisgICAgICAg
ICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChub2RlLnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BB
bmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CkBAIC0xMTAsOCArMTEyLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYg
c3RydWN0dXJlVmFsdWUgPSB2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlOwogICAgICAg
ICAgICAgICAgIGlmIChzdHJ1Y3R1cmVWYWx1ZS5pc1N1YnNldE9mKHNldCkKLSAgICAgICAgICAg
ICAgICAgICAgJiYgc3RydWN0dXJlVmFsdWUuaGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICAg
ICAgICAgJiYgaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKSkgeworICAgICAgICAgICAg
ICAgICAgICAmJiBzdHJ1Y3R1cmVWYWx1ZS5oYXNTaW5nbGV0b24oKSkgewogICAgICAgICAgICAg
ICAgICAgICBub2RlLmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVj
dHVyZVZhbHVlLnNpbmdsZXRvbigpKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDEzODc2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MDIsNiArNzAyLDE2IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgQVNTRVJUKEpTVmFsdWUocmVzdWx0KS5pc0Z1bmN0aW9uKCkpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KKyAgICAKKyAgICBib29sIGhhc0V4ZWN1dGFibGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG9wKCkgPT0gQ2hlY2tFeGVjdXRhYmxlOworICAgIH0KKyAgICAKKyAg
ICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4ganND
YXN0PEV4ZWN1dGFibGVCYXNlKj4ocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPihtX29wSW5mbykp
OworICAgIH0KIAogICAgIGJvb2wgaGFzU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKQogICAgIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDEz
ODc2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAgICAgbWFjcm8oQ29udmVydFRoaXMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKENyZWF0
ZVRoaXMsIE5vZGVSZXN1bHRKUykgLyogTm90ZSB0aGlzIGlzIG5vdCBNdXN0R2VuZXJhdGUgc2lu
Y2Ugd2UncmUgcmV0dXJuaW5nIGl0IGFueXdheS4gKi8gXAogICAgIG1hY3JvKEdldENhbGxlZSwg
Tm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oU2V0Q2FsbGVlLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBsb2NhbCB2YXJpYWJsZSBhY2Nlc3MuIFRoZXNlIG5v
ZGVzIGFyZSBsaW5rZWQgdG9nZXRoZXIgdXNpbmcgUGhpIG5vZGVzLiAqL1wKICAgICAvKiBBbnkg
dHdvIG5vZGVzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIHNhbWUgUGhpIGdyYXBoIHdpbGwgc2hhcmUg
dGhlIHNhbWUgKi9cCkBAIC0xMjQsNiArMTI1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogICAgIG1hY3JvKFB1dEJ5SWQsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJl
cnNXb3JsZCkgXAogICAgIG1hY3JvKFB1dEJ5SWREaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKENoZWNrU3RydWN0dXJlLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCisgICAgbWFjcm8oQ2hlY2tFeGVjdXRhYmxlLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oRm9yd2FyZENoZWNrU3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgLyogVHJhbnNpdGlvbiB3YXRjaHBvaW50cyBhcmUgYSBjb250cmFjdCBiZXR3ZWVuIHRoZSBw
YXJ0eSBzZXR0aW5nIHRoZSB3YXRjaHBvaW50ICovXAogICAgIC8qIGFuZCB0aGUgcnVudGltZSBz
eXN0ZW0sIHdoZXJlIHRoZSBwYXJ0eSBwcm9taXNlcyB0aGF0IHRoZSBjaGlsZCBvYmplY3Qgb25j
ZSBoYWQgKi9cCkBAIC0xNTAsNyArMTUyLDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogICAgIG1hY3JvKEdldEJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhQ
dXRCeU9mZnNldCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldEFycmF5TGVuZ3Ro
LCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBtYWNybyhHZXRTY29wZSwgTm9kZVJlc3VsdEpTKSBc
CiAgICAgbWFjcm8oR2V0TXlTY29wZSwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oU2V0TXlT
Y29wZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFNraXBUb3BTY29wZSwgTm9kZVJl
c3VsdEpTKSBcCiAgICAgbWFjcm8oU2tpcFNjb3BlLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNy
byhHZXRTY29wZVJlZ2lzdGVycywgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMzg3NjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzY3LDYgKzc2NywxNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgICAg
IGJyZWFrOwogCisgICAgICAgIGNhc2UgU2V0Q2FsbGVlOgorICAgICAgICBjYXNlIFNldE15U2Nv
cGU6CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VG
bGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBHZXRTY29wZToKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSk7CisgICAgICAgICAgICBj
aGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0NlbGxPdGhlcik7CisgICAgICAgICAgICBicmVh
azsKKwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLy8gVGhlc2UgZ2V0IGlnbm9yZWQgYmVjYXVz
ZSB0aGV5IGRvbid0IHJldHVybiBhbnl0aGluZy4KICAgICAgICAgY2FzZSBERkc6Okp1bXA6CkBA
IC03NzcsNiArNzg3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAg
ICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Cisg
ICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgogICAgICAgICBjYXNlIEZvcndhcmRDaGVja1N0
cnVjdHVyZToKICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAg
ICAgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHJldmlzaW9uIDEzODc2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MjEsNiArMzkyMSwyMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCisgICAgY2FzZSBTZXRDYWxsZWU6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgY2FsbGVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBtX2ppdC5zdG9y
ZVB0cihjYWxsZWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZp
cnR1YWxSZWdpc3Rlcj4obm9kZS5jb2RlT3JpZ2luLnN0YWNrT2Zmc2V0KCkgKyBzdGF0aWNfY2Fz
dDxpbnQ+KEpTU3RhY2s6OkNhbGxlZSkpKSk7CisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEdldFNjb3Bl
OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGZ1bmN0aW9uKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGZ1bmN0aW9uKTsKKyAg
ICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhmdW5jdGlvbi5ncHIoKSwg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZXN1bHQuZ3ByKCkpOworICAgICAg
ICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgR2V0TXlTY29wZTogewogICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOwpAQCAtMzkzMCw2ICszOTQ1LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNl
IFNldE15U2NvcGU6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2FsbGVlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihjYWxsZWUuZ3ByKCksIEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS5j
b2RlT3JpZ2luLnN0YWNrT2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDxpbnQ+KEpTU3RhY2s6OlNjb3Bl
Q2hhaW4pKSkpOworICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBTa2lwVG9wU2NvcGU6IHsKICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgc2NvcGUpOwpAQCAtNDA4MCw2ICs0MTAyLDE0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbm9SZXN1
bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAg
IGNhc2UgQ2hlY2tFeGVjdXRhYmxlOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGZ1
bmN0aW9uKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZENhY2hlLCBKU1ZhbHVlUmVncyhmdW5jdGlvbi5ncHIoKSksIG5vZGUuY2hpbGQxKCksIG1faml0
LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhmdW5jdGlvbi5ncHIoKSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLCBub2Rl
LmV4ZWN1dGFibGUoKSkpOworICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAg
ICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZTogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2
YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2
aXNpb24gMTM4NzYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDYgKzI4MiwxMyBAQCB2b2lkIFZh
cmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICB2YWx1ZVJlY292ZXJpZXNb
aV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaW5mby0+dS52aXJ0dWFsUmVnKSwgaW5mby0+Zm9ybWF0
KTsKICAgICB9CisgICAgCisgICAgLy8gU3RlcCA1OiBNYWtlIHN1cmUgdGhhdCBmb3IgbG9jYWxz
IHRoYXQgY29pbmNpZGUgd2l0aCB0cnVlIGNhbGwgZnJhbWUgaGVhZGVycywgdGhlIGV4aXQgY29t
cGlsZXIga25vd3MKKyAgICAvLyB0aGF0IHRob3NlIHZhbHVlcyBkb24ndCBoYXZlIHRvIGJlIHJl
Y292ZXJlZC4gU2lnbmFsIHRoaXMgYnkgdXNpbmcgVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluSlNT
dGFjaygpCisgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9
IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOyBpLS07KQorICAgICAg
ICAgICAgdmFsdWVSZWNvdmVyaWVzLnNldExvY2FsKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgLSBpIC0gMSwgVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluSlNTdGFjaygpKTsKKyAgICB9CiB9
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFRvb2xzL1NjcmlwdHMvZGlzcGxh
eS1wcm9maWxlci1vdXRwdXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9kaXNwbGF5LXBy
b2ZpbGVyLW91dHB1dAkocmV2aXNpb24gMTM4NzYzKQorKysgVG9vbHMvU2NyaXB0cy9kaXNwbGF5
LXByb2ZpbGVyLW91dHB1dAkod29ya2luZyBjb3B5KQpAQCAtNDYwLDcgKzQ2MCwxMSBAQCBkZWYg
c291cmNlT25PbmVMaW5lKHNvdXJjZSwgbGltaXQpCiBlbmQKIAogZGVmIHNjcmVlbldpZHRoCi0g
ICAgSGlnaExpbmU6OlN5c3RlbUV4dGVuc2lvbnMudGVybWluYWxfc2l6ZVswXQorICAgIGlmICRz
dGRpbi50dHk/CisgICAgICAgIEhpZ2hMaW5lOjpTeXN0ZW1FeHRlbnNpb25zLnRlcm1pbmFsX3Np
emVbMF0KKyAgICBlbHNlCisgICAgICAgIDIwMAorICAgIGVuZAogZW5kCiAKIGRlZiBzdW1tYXJ5
KG1vZGUpCkBAIC03NjMsNyArNzY3LDExIEBAIGRlZiBleGVjdXRlQ29tbWFuZCgqY29tbWFuZEFy
cmF5KQogICAgICAgICAKICAgICAgICAgY2FzZSBhcmdzLmxlbmd0aAogICAgICAgICB3aGVuIDEK
LSAgICAgICAgICAgIGhhc2ggPSBhcmdzWzBdCisgICAgICAgICAgICBpZiBhcmdzWzBdID09ICIq
IgorICAgICAgICAgICAgICAgIGhhc2ggPSBuaWwKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBoYXNoID0gYXJnc1swXQorICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBlbmdp
bmUgPSBuaWwKICAgICAgICAgd2hlbiAyCiAgICAgICAgICAgICBpZiBtYXlCZUhhc2goYXJnc1sw
XSkKQEAgLTc3OCw3ICs3ODYsNyBAQCBkZWYgZXhlY3V0ZUNvbW1hbmQoKmNvbW1hbmRBcnJheSkK
ICAgICAgICAgICAgIHJldHVybgogICAgICAgICBlbmQKICAgICAgICAgCi0gICAgICAgIGlmIGhh
c2ggPX4gLy0oWzAtOV0rKS0vCisgICAgICAgIGlmIGhhc2ggYW5kIGhhc2ggPX4gLy0oWzAtOV0r
KS0vCiAgICAgICAgICAgICBoYXNoID0gJH4ucHJlX21hdGNoCiAgICAgICAgICAgICBlbmdpbmUg
PSAkfi5wb3N0X21hdGNoCiAgICAgICAgICAgICBjb21waWxhdGlvbkluZGV4ID0gJDEudG9faQpA
QCAtODA3LDcgKzgxNSw3IEBAIGRlZiBleGVjdXRlQ29tbWFuZCgqY29tbWFuZEFycmF5KQogICAg
ICAgICBmaXJzdCA9IHRydWUKICAgICAgICAgJGNvbXBpbGF0aW9ucy5lYWNoIHsKICAgICAgICAg
ICAgIHwgY29tcGlsYXRpb24gfAotICAgICAgICAgICAgbmV4dCB1bmxlc3MgY29tcGlsYXRpb24u
Ynl0ZWNvZGUubWF0Y2hlcyhoYXNoKQorICAgICAgICAgICAgbmV4dCBpZiBoYXNoIGFuZCBub3Qg
Y29tcGlsYXRpb24uYnl0ZWNvZGUubWF0Y2hlcyhoYXNoKQogICAgICAgICAgICAgbmV4dCBpZiBl
bmdpbmUgYW5kIGNvbXBpbGF0aW9uLmVuZ2luZSAhPSBlbmdpbmUKICAgICAgICAgICAgIG5leHQg
aWYgY29tcGlsYXRpb25JbmRleCBhbmQgY29tcGlsYXRpb24uY29tcGlsYXRpb25JbmRleCAhPSBj
b21waWxhdGlvbkluZGV4CiAgICAgICAgICAgICAKQEAgLTg5OSw3ICs5MDcsOSBAQCBkZWYgZXhl
Y3V0ZUNvbW1hbmQoKmNvbW1hbmRBcnJheSkKICAgICBlbmQKIGVuZAogCi1leGVjdXRlQ29tbWFu
ZCgiZnVsbCIpCitpZiAkc3RkaW4udHR5PworICAgIGV4ZWN1dGVDb21tYW5kKCJmdWxsIikKK2Vu
ZAogCiB3aGlsZSBjb21tYW5kTGluZSA9IFJlYWRsaW5lLnJlYWRsaW5lKCI+ICIsIHRydWUpCiAg
ICAgZXhlY3V0ZUNvbW1hbmQoKmNvbW1hbmRMaW5lLnNwbGl0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181453</attachid>
            <date>2013-01-06 00:04:27 -0800</date>
            <delta_ts>2013-01-06 17:17:11 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>closures.patch</filename>
            <type>text/plain</type>
            <size>35298</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM4OTE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNSBA
QAorMjAxMy0wMS0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaW5saW5lIGNsb3N1cmUgY2FsbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjA2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIGluaXRpYWwgc3VwcG9y
dCBmb3IgaW5saW5pbmcgY2xvc3VyZSBjYWxscyB0byB0aGUgREZHLiBBIGNhbGwgaXMgY29uc2lk
ZXJlZAorICAgICAgICB0byBiZSBhIGNsb3N1cmUgY2FsbCB3aGVuIHRoZSBKU0Z1bmN0aW9uKiB2
YXJpZXMsIGJ1dCBhbHdheXMgaGFzIHRoZSBzYW1lIGV4ZWN1dGFibGUuCisgICAgICAgIFdlIGFs
cmVhZHkgaGF2ZSBjbG9zdXJlIGNhbGwgaW5saW5lIGNhY2hpbmcgaW4gYm90aCBKSVRzLCB3aGlj
aCB3b3JrcyBieSBjaGVja2luZyB0aGF0CisgICAgICAgIHRoZSBjYWxsZWUgaGFzIGFuIGV4cGVj
dGVkIHN0cnVjdHVyZSAoYXMgYSBjaGVhcCB3YXkgb2YgZGV0ZWN0aW5nIHRoYXQgaXQgaXMgaW4g
ZmFjdAorICAgICAgICBhIEpTRnVuY3Rpb24pIGFuZCBhbiBleHBlY3RlZCBleGVjdXRhYmxlLiBD
bG9zdXJlIGNhbGwgaW5saW5pbmcgdXNlcyBwcm9maWxpbmcgZGF0YQorICAgICAgICBhZ2dyZWdh
dGVkIGJ5IENhbGxMaW5rU3RhdHVzIHRvIGRlY2lkZSB3aGVuIHRvIHNwZWNpYWxpemUgdGhlIGNh
bGwgdG8gdGhlIHBhcnRpY3VsYXIKKyAgICAgICAgc3RydWN0dXJlL2V4ZWN1dGFibGUsIGFuZCBp
bmxpbmUgdGhlIGNhbGwgcmF0aGVyIHRoYW4gZW1pdHRpbmcgYSBjYWxsIHNlcXVlbmNlLiBXaGVu
CisgICAgICAgIHdlIGNob29zZSB0byBkbyBhIGNsb3N1cmUgaW5saW5lIHJhdGhlciB0aGFuIGFu
IG9yZGluYXJ5IGlubGluZSwgYSBudW1iZXIgb2YgdGhpbmdzCisgICAgICAgIGNoYW5nZSBhYm91
dCBob3cgaW5saW5pbmcgaXMgcGVyZm9ybWVkOgorICAgICAgICAKKyAgICAgICAgLSBUaGUgaW5s
aW5lIGlzIGd1YXJkZWQgYnkgYSBDaGVja1N0cnVjdHVyZS9DaGVja0V4ZWN1dGFibGUgcmF0aGVy
IHRoYW4gYQorICAgICAgICAgIENoZWNrRnVuY3Rpb24uCisgICAgICAgIAorICAgICAgICAtIElu
c3RlYWQgb2YgcHJvcGFnYXRpbmcgYSBjb25zdGFudCB2YWx1ZSBmb3IgdGhlIHNjb3BlLCB3ZSBl
bWl0IEdldE15U2NvcGUgZXZlcnkgdGltZQorICAgICAgICAgIHRoYXQgdGhlIHNjb3BlIGlzIG5l
ZWRlZCwgd2hpY2ggbG9hZHMgdGhlIHNjb3BlIGZyb20gYSBsb2NhbCB2YXJpYWJsZS4gV2UgZG8g
c2ltaWxhcgorICAgICAgICAgIHRoaW5ncyBmb3IgdGhlIGNhbGxlZS4KKyAgICAgICAgCisgICAg
ICAgIC0gVGhlIHByb2xvZ3VlIG9mIHRoZSBpbmxpbmVkIGNvZGUgaW5jbHVkZXMgU2V0TXlTY29w
ZSBhbmQgU2V0Q2FsbGVlIG5vZGVzIHRvIGVhZ2VybHkKKyAgICAgICAgICBwbGFudCB0aGUgc2Nv
cGUgYW5kIGNhbGxlZSBpbnRvIHRoZSAidHJ1ZSBjYWxsIGZyYW1lIiwgaS5lLiB0aGUgcGxhY2Ug
b24gdGhlIHN0YWNrCisgICAgICAgICAgd2hlcmUgdGhlIGNhbGwgZnJhbWUgd291bGQgaGF2ZSBi
ZWVuIGlmIHRoZSBjYWxsIGhhZCBiZWVuIGFjdHVhbGx5IHBlcmZvcm1lZC4gVGhpcworICAgICAg
ICAgIGFsbG93cyBHZXRNeVNjb3BlL0dldENhbGxlZSB0byB3b3JrIGFzIHRoZXkgd291bGQgaWYg
dGhlIGNvZGUgd2Fzbid0IGlubGluZWQuIEl0CisgICAgICAgICAgYWxzbyBhbGxvd3MgZm9yIHRy
aXZpYWwgaGFuZGxpbmcgb2Ygc2NvcGUgYW5kIGNhbGxlZSBmb3IgY2FsbCBmcmFtZSByZWNvbnN0
cnVjdGlvbgorICAgICAgICAgIHVwb24gc3RhY2sgaW50cm9zcGVjdGlvbiBhbmQgZHVyaW5nIE9T
Ui4KKyAgICAgICAgCisgICAgICAgIC0gQSBuZXcgbm9kZSBjYWxsZWQgR2V0U2NvcGUgaXMgaW50
cm9kdWNlZCwgd2hpY2gganVzdCBnZXRzIHRoZSBzY29wZSBvZiBhIGZ1bmN0aW9uLgorICAgICAg
ICAgIFRoaXMgbm9kZSBoYXMgdGhlIGV4cGVjdGVkIENTRSBzdXBwb3J0LiBUaGlzIGFsbG93cyBm
b3IgdGhlCisgICAgICAgICAgU2V0TXlTY29wZShHZXRTY29wZShAZnVuY3Rpb24pKSBzZXF1ZW5j
ZSB0byBzZXQgdXAgdGhlIHNjb3BlIGluIHRoZSB0cnVlIGNhbGwgZnJhbWUuCisgICAgICAgIAor
ICAgICAgICAtIEdldE15U2NvcGUvR2V0Q2FsbGVlIENTRSBjYW4gbWF0Y2ggYWdhaW5zdCBTZXRN
eVNjb3BlL1NldENhbGxlZSwgd2hpY2ggbWVhbnMgdGhhdAorICAgICAgICAgIHRoZSBHZXRNeVNj
b3BlL0dldENhbGxlZSBub2RlcyBlbWl0dGVkIGR1cmluZyBwYXJzaW5nIGFyZSBvZnRlbiByZW1v
dmVkIGR1cmluZyBDU0UsCisgICAgICAgICAgaWYgd2UgY2FuIHByb3ZlIHRoYXQgaXQgaXMgc2Fm
ZSB0byBkbyBzby4KKyAgICAgICAgCisgICAgICAgIC0gSW5saW5pbmcgaGV1cmlzdGljcyBhcmUg
YWRqdXN0ZWQgdG8gZ3JvayB0aGUgY29zdCBvZiBpbmxpbmluZyBhIGNsb3N1cmUuIFdlIGFyZQor
ICAgICAgICAgIGxlc3MgbGlrZWx5IHRvIGlubGluZSBhIGNsb3N1cmUgY2FsbCB0aGFuIHdlIGFy
ZSB0byBpbmxpbmUgYSBub3JtYWwgY2FsbCwgc2luY2Ugd2UKKyAgICAgICAgICBlbmQgdXAgZW1p
dHRpbmcgbW9yZSBjb2RlIGZvciBjbG9zdXJlcyBkdWUgdG8gQ2hlY2tTdHJ1Y3R1cmUsIENoZWNr
RXhlY3V0YWJsZSwKKyAgICAgICAgICBHZXRTY29wZSwgU2V0TXlTY29wZSwgYW5kIFNldENhbGxl
ZS4KKyAgICAgICAgCisgICAgICAgIEFkZGl0aW9uYWxseSwgSSd2ZSBmaXhlZCB0aGUgVmFyaWFi
bGVFdmVudFN0cmVhbSB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBhdHRlbXB0IHRvCisgICAgICAg
IHBsYW50IFVuZGVmaW5lZCBpbnRvIHRoZSB0cnVlIGNhbGwgZnJhbWVzLiBUaGlzIHdhcyBwcmV2
aW91c2x5IGEgaGFybWxlc3Mgb3ZlcnNpZ2h0LAorICAgICAgICBidXQgaXQgYmVjb21lcyBxdWl0
ZSBiYWQgaWYgT1NSIGlzIHJlbHlpbmcgb24gdGhlIHNjb3BlL2NhbGxlZSBhbHJlYWR5IGhhdmlu
ZyBiZWVuCisgICAgICAgIHNldCBhbmQgbm90IHN1YnNlcXVlbnRseSBjbG9iYmVyZWQgYnkgdGhl
IE9TUiBpdHNlbGYuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgfjYwJSBzcGVlZC11cCBv
biBwcm9ncmFtcyB0aGF0IGZyZXF1ZW50bHkgbWFrZSBjYWxscyB0byBjbG9zdXJlcy4gSXQncwor
ICAgICAgICBuZXV0cmFsIG9uIFY4djcgYW5kIG90aGVyIG1ham9yIGJlbmNobWFyayBzdWl0ZXMu
CisgICAgICAgIAorICAgICAgICBUaGUgbGFjayBvZiBhIGRlZmluaXRlIHNwZWVkLXVwIGlzIGxp
a2VseSBkdWUgdGhlIGZhY3QgdGhhdCBjbG9zdXJlIGlubGluaW5nIGN1cnJlbnRseQorICAgICAg
ICBkb2VzIG5vdCBkbyBhbnkgY2FyZGluYWxpdHkgWzFdIG9wdGltaXphdGlvbnMuIFdlIGRvbid0
IG9ic2VydmUgd2hlbiBhIGNsb3N1cmUgd2FzCisgICAgICAgIGNvbnN0cnVjdGVkIHdpdGhpbiBp
dHMgY2FsbGVyLCBhbmQgc28gdXNlZCB0aGUgc2NvcGUgZnJvbSBpdHMgY2FsbGVyOyBhbmQgZnVy
dGhlcm1vcmUKKyAgICAgICAgd2UgaGF2ZSBubyBmYWNpbGl0eSB0byBkZXRlY3Qgd2hlbiB0aGUg
c2NvcGUgaXMgc2luZ2xlLiBBbGwgc2NvcGVkIHZhcmlhYmxlIGFjY2Vzc2VzCisgICAgICAgIGFy
ZSBhc3N1bWVkIHRvIGJlIG11bHRpcGxlIGluc3RlYWQuIEEgc3Vic2VxdWVudCBzdGVwIHdpbGwg
YmUgdG8gZW5zdXJlIHRoYXQgY2xvc3VyZQorICAgICAgICBjYWxsIGlubGluaW5nIHdpbGwgYmUg
c2luZ2xlIGFuZCBsb3ZpbmcgaXQuCisgICAgICAgIAorICAgICAgICBbMV0gU2luZ2xlIGFuZCBs
b3ZpbmcgaXQ6IE11c3QtYWxpYXMgYW5hbHlzaXMgZm9yIGhpZ2hlci1vcmRlciBsYW5ndWFnZXMu
IFN1cmVzaAorICAgICAgICAgICAgSmFnYW5uYXRoYW4sIFBldGVyIFRoaWVtYW5uLCBTdGVwaGVu
IFdlZWtzLCBhbmQgQW5kcmV3IFdyaWdodC4gSW4gUE9QTCAnOTguCisKKyAgICAgICAgKiBieXRl
Y29kZS9DYWxsTGlua1N0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpk
dW1wKToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oOgorICAgICAgICAoSlND
OjpDYWxsTGlua1N0YXR1czo6aXNDbG9zdXJlQ2FsbCk6CisgICAgICAgIChDYWxsTGlua1N0YXR1
cyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpnbG9iYWxPYmplY3RGb3IpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKENvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZU9yaWdpbi5jcHA6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHA6CisgICAgICAgIChCeXRlQ29kZVBhcnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjplbWl0RnVuY3Rpb25DaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cHVyZUNTRSk6CisgICAgICAgIChDU0VQaGFzZSk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldENhbGxlZUxvYWRFbGltaW5hdGlvbik6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNoZWNrRXhlY3V0YWJsZUVsaW1pbmF0aW9u
KToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0TXlTY29wZUxvYWRFbGltaW5hdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAg
ICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjptaWdodElu
bGluZUZ1bmN0aW9uRm9yQ2xvc3VyZUNhbGwpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRp
ZXMuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5j
dGlvbkZvckNsb3N1cmVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5JbmxpbmVGdW5jdGlv
bkZvckNsb3N1cmVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5JbmxpbmVGdW5jdGlvbkZv
cik6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6Omhhc0V4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OmV4ZWN1dGFibGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAoREZH
KToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1
bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAoSlNDKToKKwogMjAxMy0wMS0wNSAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERhdGEgZmxvdyBwYXRocyB0aGF0IGNh
cnJ5IG5vbi1udW1iZXJzLCBub24tdW5kZWZpbmVkLCBub24tbnVsbCB2YWx1ZXMgc2hvdWxkIG5v
dCBjYXVzZSBzdWJ0cmFjdGlvbnMgYW5kIGFyaXRobWV0aWMgYWRkaXRpb25zIChpLmUuICsrKSB0
byBzcGVjdWxhdGUgZG91YmxlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDEzODkxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExOSw3ICsxMTksNyBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUZvCiAjZW5kaWYKIH0KIAotdm9pZCBDYWxsTGlua1N0YXR1czo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KQordm9pZCBDYWxsTGlua1N0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAog
ewogICAgIGlmICghaXNTZXQoKSkgewogICAgICAgICBvdXQucHJpbnQoIk5vdCBTZXQiKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5o
CShyZXZpc2lvbiAxMzg5MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHB1YmxpYzoK
ICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgCiAg
ICAgYm9vbCBjb3VsZFRha2VTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bGRUYWtlU2xv
d1BhdGg7IH0KLSAgICBib29sIGlzQ2xvc3VyZUNhbGwoKSBjb25zdCB7IHJldHVybiAhbV9jYWxs
VGFyZ2V0OyB9CisgICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkgY29uc3QgeyByZXR1cm4gbV9leGVj
dXRhYmxlICYmICFtX2NhbGxUYXJnZXQ7IH0KICAgICAKICAgICBKU1ZhbHVlIGNhbGxUYXJnZXQo
KSBjb25zdCB7IHJldHVybiBtX2NhbGxUYXJnZXQ7IH0KICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlv
bigpIGNvbnN0OwpAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzUHJvdmVk
KCkgY29uc3QgeyByZXR1cm4gbV9pc1Byb3ZlZDsgfQogICAgIGJvb2wgY2FuT3B0aW1pemUoKSBj
b25zdCB7IHJldHVybiAobV9jYWxsVGFyZ2V0IHx8IG1fZXhlY3V0YWJsZSkgJiYgIW1fY291bGRU
YWtlU2xvd1BhdGg7IH0KICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKTsKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CiAgICAgc3RhdGlj
IENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMTM4OTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MzMsNiArMjkzMywxMyBA
QCBib29sIEZ1bmN0aW9uQ29kZUJsb2NrOjpqaXRDb21waWxlSW1wbChFCiB9CiAjZW5kaWYKIAor
SlNHbG9iYWxPYmplY3QqIENvZGVCbG9jazo6Z2xvYmFsT2JqZWN0Rm9yKENvZGVPcmlnaW4gY29k
ZU9yaWdpbikKK3sKKyAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAg
ICByZXR1cm4gZ2xvYmFsT2JqZWN0KCk7CisgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSktPmdl
bmVyYXRlZEJ5dGVjb2RlKCkuZ2xvYmFsT2JqZWN0KCk7Cit9CisKIHVuc2lnbmVkIENvZGVCbG9j
azo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSBjb25zdAogewogICAgIEFTU0VSVChtX3Jl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyIDw9IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlD
b3VudGVyTWF4KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkocmV2aXNpb24gMTM4OTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05MzYsMTMgKzkzNiw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJl
dHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsgfQogICAgICAgICAKLSAgICAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdEZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdCgpOwotICAgICAgICAgICAgLy8gRklYTUU6IGlmIHdl
IGV2ZXIgaW5saW5lIGJhc2VkIG9uIGV4ZWN1dGFibGUgbm90IGZ1bmN0aW9uLCB0aGlzIGNvZGUg
d2lsbCBuZWVkIHRvIGNoYW5nZS4KLSAgICAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZS0+Y2FsbGVlLT5zY29wZSgpLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgfQor
ICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0Rm9yKENvZGVPcmlnaW4gY29kZU9y
aWdpbik7CiAKICAgICAgICAgLy8gSnVtcCBUYWJsZXMKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTM4OTE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Niw2ICs4Niw3IEBAIHZvaWQgSW5saW5lQ2FsbEZyYW1lOjpkdW1wKFByaW50U3Ry
ZWFtJiAKICAgICAgICAgb3V0LnByaW50KCIsIGtub3duIGNhbGxlZTogIiwgSlNWYWx1ZShjYWxs
ZWUuZ2V0KCkpKTsKICAgICBlbHNlCiAgICAgICAgIG91dC5wcmludCgiLCBjbG9zdXJlIGNhbGwi
KTsKKyAgICBvdXQucHJpbnQoIiwgc3RhY2sgPj0gciIsIHN0YWNrT2Zmc2V0KTsKICAgICBvdXQu
cHJpbnQoIj4iKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMzg5MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgyLDcg
KzEzODIsMTMgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFNwZWNGdW5jdGlvbik7CiAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFNl
dENhbGxlZToKKyAgICBjYXNlIFNldE15U2NvcGU6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCisgICAgY2FzZSBHZXRTY29wZToK
ICAgICBjYXNlIEdldE15U2NvcGU6CiAgICAgY2FzZSBTa2lwVG9wU2NvcGU6CiAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CkBAIC0xNDU1LDYgKzE0NjEsMTUgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1
ZSk7IC8vIExpZXMsIGJ1dCBpdCdzIHRydWUgZm9yIHRoZSBjb21tb24gY2FzZSBvZiBKU0FycmF5
LCBzbyBpdCdzIGdvb2QgZW5vdWdoLgogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFNw
ZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIENoZWNrRXhlY3V0
YWJsZTogeworICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgdHJhY2sgZXhlY3V0YWJsZXMgaW4g
QWJzdHJhY3RWYWx1ZSwgd2hpY2ggd291bGQgYWxsb3cgdXMgdG8gZ2V0IHJpZCBvZiB0aGVzZSBj
aGVja3MKKyAgICAgICAgLy8gbW9yZSB0aG9yb3VnaGx5LgorICAgICAgICAvLyBGSVhNRTogV2Ug
Y291bGQgZWxpbWluYXRlIHRoZXNlIGVudGlyZWx5IGlmIHdlIGtub3cgdGhlIGV4YWN0IHZhbHVl
IHRoYXQgZmxvd3MgaW50byB0aGlzLgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjQ2VsbCk7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndh
cmRDaGVja1N0cnVjdHVyZTogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEzODkxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTksOSArMTU5LDkgQEAgcHJpdmF0ZToKICAgICAKICAgICAvLyBIYW5kbGUgY2FsbHMuIFRoaXMg
cmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5kaW5nIGlubGluaW5nIGFuZCBpbnRyaW5zaWNzLgogICAg
IHZvaWQgaGFuZGxlQ2FsbChJbnRlcnByZXRlciosIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICB2b2lkIGVt
aXRGdW5jdGlvbkNoZWNrKEpTRnVuY3Rpb24qIGV4cGVjdGVkRnVuY3Rpb24sIE5vZGVJbmRleCBj
YWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwor
ICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgTm9kZUlu
ZGV4IGNhbGxUYXJnZXQsIGludCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCk7CiAgICAgLy8gSGFuZGxlIGlubGluaW5nLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQs
IGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgotICAgIGJvb2wgaGFuZGxlSW5saW5p
bmcoYm9vbCB1c2VzUmVzdWx0LCBOb2RlSW5kZXggY2FsbFRhcmdldE5vZGVJbmRleCwgaW50IHJl
c3VsdE9wZXJhbmQsIGJvb2wgY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbiwgSlNGdW5jdGlv
biosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1
bnNpZ25lZCBuZXh0T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICBib29sIGhh
bmRsZUlubGluaW5nKGJvb2wgdXNlc1Jlc3VsdCwgTm9kZUluZGV4IGNhbGxUYXJnZXROb2RlSW5k
ZXgsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zm
c2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAvLyBIYW5kbGUgc2V0dGluZyB0aGUg
cmVzdWx0IG9mIGFuIGludHJpbnNpYy4KICAgICB2b2lkIHNldEludHJpbnNpY1Jlc3VsdChib29s
IHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2RlSW5kZXgpOwogICAgIC8vIEhhbmRs
ZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNl
IGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgpAQCAtMTMyOSwxOSArMTMyOSw5IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoSW50ZXJwcmUKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAgICAgCi0gICAgSlNGdW5jdGlvbiogZXhwZWN0ZWRGdW5jdGlvbiA9IGNhbGxMaW5r
U3RhdHVzLmZ1bmN0aW9uKCk7Ci0gICAgaWYgKCFleHBlY3RlZEZ1bmN0aW9uKSB7Ci0gICAgICAg
IC8vIEZvciBub3cgd2UgaGF2ZSBubyB3YXkgb2YgcmVhc29uaW5nIGFib3V0IHdoYXQgaXQgbWVh
bnMgdG8gbm90IGhhdmUgYSBzcGVjaWZpYyBmdW5jdGlvbi4gVGhpcyB3aWxsCi0gICAgICAgIC8v
IGNoYW5nZSBzb29uLCB0aG91Z2guCi0gICAgICAgIAotICAgICAgICBhZGRDYWxsKGludGVycHJl
dGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAgICAgCiAgICAgSW50cmluc2ljIGludHJpbnNpYyA9IGNhbGxMaW5rU3RhdHVzLmludHJpbnNp
Y0ZvcihraW5kKTsKICAgICBpZiAoaW50cmluc2ljICE9IE5vSW50cmluc2ljKSB7Ci0gICAgICAg
IGlmICghY2FsbExpbmtTdGF0dXMuaXNQcm92ZWQoKSkKLSAgICAgICAgICAgIGVtaXRGdW5jdGlv
bkNoZWNrKGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxUYXJnZXQsIHJlZ2lzdGVyT2Zmc2V0LCBraW5k
KTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzLCBjYWxsVGFyZ2V0
LCByZWdpc3Rlck9mZnNldCwga2luZCk7CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKGhhbmRs
ZUludHJpbnNpYyh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBpbnRyaW5zaWMsIHJlZ2lzdGVy
T2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcHJlZGljdGlvbikpIHsKICAgICAg
ICAgICAgIGlmICghY2FsbExpbmtTdGF0dXMuaXNQcm92ZWQoKSkgewpAQCAtMTM1MCwzNCArMTM0
MCw0OCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEludGVycHJlCiAgICAgICAg
ICAgICAgICAgLy8gc21hcnQgZW5vdWdoIHRvIGZpZ3VyZSB0aGF0IG91dCwgc2luY2UgaXQgZG9l
c24ndCB1bmRlcnN0YW5kIENoZWNrRnVuY3Rpb24uCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChQaGFudG9tLCBjYWxsVGFyZ2V0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgfSBlbHNl
IGlmIChoYW5kbGVJbmxpbmluZyh1c2VzUmVzdWx0LCBjYWxsVGFyZ2V0LCByZXN1bHRPcGVyYW5k
LCBjYWxsTGlua1N0YXR1cy5pc1Byb3ZlZCgpLCBleHBlY3RlZEZ1bmN0aW9uLCByZWdpc3Rlck9m
ZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtpbmQpKQorICAg
IH0gZWxzZSBpZiAoaGFuZGxlSW5saW5pbmcodXNlc1Jlc3VsdCwgY2FsbFRhcmdldCwgcmVzdWx0
T3BlcmFuZCwgY2FsbExpbmtTdGF0dXMsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBhZGRDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wKTsKIH0KIAotdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2soSlNGdW5jdGlvbiogZXhwZWN0ZWRG
dW5jdGlvbiwgTm9kZUluZGV4IGNhbGxUYXJnZXQsIGludCByZWdpc3Rlck9mZnNldCwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9u
Q2hlY2tzKGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywgTm9kZUluZGV4IGNh
bGxUYXJnZXQsIGludCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQogeworICAgIGlmIChjYWxsTGlua1N0YXR1cy5pc1Byb3ZlZCgpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgQVNTRVJUKGNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkpOworICAgIAog
ICAgIE5vZGVJbmRleCB0aGlzQXJndW1lbnQ7CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwp
CiAgICAgICAgIHRoaXNBcmd1bWVudCA9IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9P
cGVyYW5kKDApKTsKICAgICBlbHNlCiAgICAgICAgIHRoaXNBcmd1bWVudCA9IE5vTm9kZTsKLSAg
ICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhleHBlY3RlZEZ1bmN0aW9uKSwgY2Fs
bFRhcmdldCwgdGhpc0FyZ3VtZW50KTsKKworICAgIGlmIChKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9
IGNhbGxMaW5rU3RhdHVzLmZ1bmN0aW9uKCkpCisgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5j
dGlvbiwgT3BJbmZvKGZ1bmN0aW9uKSwgY2FsbFRhcmdldCwgdGhpc0FyZ3VtZW50KTsKKyAgICBl
bHNlIHsKKyAgICAgICAgQVNTRVJUKGNhbGxMaW5rU3RhdHVzLnN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgQVNTRVJUKGNhbGxMaW5rU3RhdHVzLmV4ZWN1dGFibGUoKSk7CisgICAgICAgIAorICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQoY2FsbExpbmtTdGF0dXMuc3RydWN0dXJlKCkpKSwgY2FsbFRhcmdldCk7CisgICAgICAgIGFk
ZFRvR3JhcGgoQ2hlY2tFeGVjdXRhYmxlLCBPcEluZm8oY2FsbExpbmtTdGF0dXMuZXhlY3V0YWJs
ZSgpKSwgY2FsbFRhcmdldCwgdGhpc0FyZ3VtZW50KTsKKyAgICB9CiB9CiAKLWJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wgdXNlc1Jlc3VsdCwgTm9kZUluZGV4IGNhbGxU
YXJnZXROb2RlSW5kZXgsIGludCByZXN1bHRPcGVyYW5kLCBib29sIGNlcnRhaW5BYm91dEV4cGVj
dGVkRnVuY3Rpb24sIEpTRnVuY3Rpb24qIGV4cGVjdGVkRnVuY3Rpb24sIGludCByZWdpc3Rlck9m
ZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIE5vZGVJbmRleCBjYWxsVGFyZ2V0Tm9kZUluZGV4
LCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVz
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5z
aWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIC8v
IEZpcnN0LCB0aGUgcmVhbGx5IHNpbXBsZSBjaGVja3M6IGRvIHdlIGhhdmUgYW4gYWN0dWFsIEpT
IGZ1bmN0aW9uPwotICAgIGlmICghZXhwZWN0ZWRGdW5jdGlvbikKKyAgICBpZiAoIWNhbGxMaW5r
U3RhdHVzLmV4ZWN1dGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChleHBl
Y3RlZEZ1bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigpKQorICAgIGlmIChjYWxsTGlua1N0YXR1cy5l
eGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBleHBlY3RlZEZ1bmN0aW9u
LT5qc0V4ZWN1dGFibGUoKTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBq
c0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2FsbExpbmtTdGF0dXMuZXhlY3V0YWJsZSgpKTsK
ICAgICAKICAgICAvLyBEb2VzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHdlJ3JlIHBhc3Npbmcg
bWF0Y2ggdGhlIGFyaXR5IG9mIHRoZSB0YXJnZXQ/IFdlIGN1cnJlbnRseQogICAgIC8vIGlubGlu
ZSBvbmx5IGlmIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCBpcyBncmVhdGVyIHRoYW4g
b3IgZXF1YWwgdG8gdGhlIG51bWJlcgpAQCAtMTQwNiw3ICsxNDEwLDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
ZXhlY3V0YWJsZS0+YmFzZWxpbmVDb2RlQmxvY2tGb3Ioa2luZCk7CiAgICAgaWYgKCFjb2RlQmxv
Y2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWNhbklubGluZUZ1bmN0aW9uRm9y
KGNvZGVCbG9jaywga2luZCkpCisgICAgaWYgKCFjYW5JbmxpbmVGdW5jdGlvbkZvcihjb2RlQmxv
Y2ssIGtpbmQsIGNhbGxMaW5rU3RhdHVzLmlzQ2xvc3VyZUNhbGwoKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCkBAIC0xNDE2LDgg
KzE0MjAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAgICAg
Ly8gTm93IHdlIGtub3cgd2l0aG91dCBhIGRvdWJ0IHRoYXQgd2UgYXJlIGNvbW1pdHRlZCB0byBp
bmxpbmluZy4gU28gYmVnaW4gdGhlIHByb2Nlc3MKICAgICAvLyBieSBjaGVja2luZyB0aGUgY2Fs
bGVlIChpZiBuZWNlc3NhcnkpIGFuZCBtYWtpbmcgc3VyZSB0aGF0IGFyZ3VtZW50cyBhbmQgdGhl
IGNhbGxlZQogICAgIC8vIGFyZSBmbHVzaGVkLgotICAgIGlmICghY2VydGFpbkFib3V0RXhwZWN0
ZWRGdW5jdGlvbikKLSAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2soZXhwZWN0ZWRGdW5jdGlvbiwg
Y2FsbFRhcmdldE5vZGVJbmRleCwgcmVnaXN0ZXJPZmZzZXQsIGtpbmQpOworICAgIGVtaXRGdW5j
dGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1cywgY2FsbFRhcmdldE5vZGVJbmRleCwgcmVnaXN0ZXJP
ZmZzZXQsIGtpbmQpOwogICAgIAogICAgIC8vIEZJWE1FOiBEb24ndCBmbHVzaCBjb25zdGFudHMh
CiAgICAgCkBAIC0xNDM5LDcgKzE0NDIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZyhib29sCiAKICAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNrRW50cnkoCiAg
ICAgICAgIHRoaXMsIGNvZGVCbG9jaywgY29kZUJsb2NrLCBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KSAtIDEsCi0gICAgICAgIGV4cGVjdGVkRnVuY3Rpb24sIChWaXJ0dWFsUmVnaXN0ZXIpbV9pbmxp
bmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKAorICAgICAgICBjYWxsTGlua1N0YXR1cy5mdW5jdGlv
bigpLCAoVmlydHVhbFJlZ2lzdGVyKW1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKICAg
ICAgICAgICAgIHVzZXNSZXN1bHQgPyByZXN1bHRPcGVyYW5kIDogSW52YWxpZFZpcnR1YWxSZWdp
c3RlciksCiAgICAgICAgIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQsIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBraW5kKTsKICAgICAKQEAgLTE0NTAsNiArMTQ1Mywx
MCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAgICAgbV9jdXJy
ZW50UHJvZmlsaW5nSW5kZXggPSAwOwogCiAgICAgYWRkVG9HcmFwaChJbmxpbmVTdGFydCwgT3BJ
bmZvKGFyZ3VtZW50UG9zaXRpb25TdGFydCkpOworICAgIGlmIChjYWxsTGlua1N0YXR1cy5pc0Ns
b3N1cmVDYWxsKCkpIHsKKyAgICAgICAgYWRkVG9HcmFwaChTZXRDYWxsZWUsIGNhbGxUYXJnZXRO
b2RlSW5kZXgpOworICAgICAgICBhZGRUb0dyYXBoKFNldE15U2NvcGUsIGFkZFRvR3JhcGgoR2V0
U2NvcGUsIGNhbGxUYXJnZXROb2RlSW5kZXgpKTsKKyAgICB9CiAgICAgCiAgICAgcGFyc2VDb2Rl
QmxvY2soKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuY3BwCShyZXZpc2lvbiAxMzg5MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksOSArODksNyBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGVudW0gSW5saW5lQ2FsbEZyYW1l
UmVxdWlyZW1lbnQgeyBSZXF1aXJlU2FtZUlubGluZUNhbGxGcmFtZSwgRG9Ob3RDYXJlQWJvdXRJ
bmxpbmVDYWxsRnJhbWUgfTsKLSAgICB0ZW1wbGF0ZTxJbmxpbmVDYWxsRnJhbWVSZXF1aXJlbWVu
dCBpbmxpbmVDYWxsRnJhbWVSZXF1aXJlbWVudD4KLSAgICBOb2RlSW5kZXggZ2VuZXJpY1B1cmVD
U0UoTm9kZSYgbm9kZSkKKyAgICBOb2RlSW5kZXggcHVyZUNTRShOb2RlJiBub2RlKQogICAgIHsK
ICAgICAgICAgTm9kZUluZGV4IGNoaWxkMSA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMSgpKTsK
ICAgICAgICAgTm9kZUluZGV4IGNoaWxkMiA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKTsK
QEAgLTExMiwxMCArMTEwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChub2RlLmFyaXRo
Tm9kZUZsYWdzKCkgIT0gb3RoZXJOb2RlLmFyaXRoTm9kZUZsYWdzKCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWVSZXF1aXJlbWVudCA9PSBSZXF1aXJlU2FtZUlubGluZUNhbGxGcmFtZQotICAgICAgICAgICAg
ICAgICYmIG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgIT0gb3RoZXJOb2RlLmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgCiAgICAgICAgICAgICBOb2RlSW5kZXggb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShv
dGhlck5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9Ob2Rl
KQogICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKQEAgLTEzOSwxNiArMTMzLDYgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4
IHB1cmVDU0UoTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZW5lcmljUHVyZUNT
RTxEb05vdENhcmVBYm91dElubGluZUNhbGxGcmFtZT4obm9kZSk7Ci0gICAgfQotICAgIAotICAg
IE5vZGVJbmRleCBwdXJlQ1NFUmVxdWlyaW5nU2FtZUlubGluZUNhbGxGcmFtZShOb2RlJiBub2Rl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdlbmVyaWNQdXJlQ1NFPFJlcXVpcmVTYW1lSW5saW5l
Q2FsbEZyYW1lPihub2RlKTsKLSAgICB9Ci0gICAgCiAgICAgTm9kZUluZGV4IGNvbnN0YW50Q1NF
KE5vZGUmIG5vZGUpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZv
clB1cmVDU0UoKTsgaS0tOykgewpAQCAtMTgxLDYgKzE2NSwyNyBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gTm9Ob2RlOwogICAgIH0KICAgICAKKyAgICBOb2RlSW5kZXggZ2V0Q2FsbGVlTG9h
ZEVsaW1pbmF0aW9uKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKKyAgICAgICAg
ICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAg
IE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAgICAgIGlmICghbm9kZS5zaG91
bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYg
KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgIT0gaW5saW5lQ2FsbEZyYW1lKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgR2V0Q2FsbGVlOgorICAgICAgICAgICAgICAgIHJldHVybiBpbmRl
eDsKKyAgICAgICAgICAgIGNhc2UgU2V0Q2FsbGVlOgorICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBOb05v
ZGU7CisgICAgfQorICAgIAogICAgIE5vZGVJbmRleCBnZXRBcnJheUxlbmd0aEVsaW1pbmF0aW9u
KE5vZGVJbmRleCBhcnJheSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5k
ZXhJbkJsb2NrOyBpLS07KSB7CkBAIC00MTYsNiArNDIxLDIwIEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICAKKyAgICBib29sIGNoZWNrRXhl
Y3V0YWJsZUVsaW1pbmF0aW9uKEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlLCBOb2RlSW5kZXgg
Y2hpbGQxKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJl
Q1NFKCk7IGktLTspIHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJs
b2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsK
KyAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gQ2hlY2tFeGVjdXRhYmxlICYmIG5vZGUuY2hp
bGQxKCkgPT0gY2hpbGQxICYmIG5vZGUuZXhlY3V0YWJsZSgpID09IGV4ZWN1dGFibGUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KIAogICAgIGJvb2wgY2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbihjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgTm9kZUluZGV4IGNoaWxkMSkKICAgICB7CkBAIC04MzAs
NiArODQ5LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAg
ICAgICAgICAgY2FzZSBHZXRNeVNjb3BlOgogICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICAgICAgICAgIGNhc2UgU2V0TXlTY29wZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZS5jaGlsZDEoKS5pbmRleCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTExNDQsMTEgKzExNjUsMTIgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBTa2lwVG9wU2NvcGU6CiAgICAgICAgIGNhc2UgU2tpcFNjb3BlOgogICAg
ICAgICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOgorICAgICAgICBjYXNlIEdldFNjb3BlOgogICAg
ICAgICAgICAgc2V0UmVwbGFjZW1lbnQocHVyZUNTRShub2RlKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldENhbGxlZToKLSAgICAgICAgICAgIHNl
dFJlcGxhY2VtZW50KHB1cmVDU0VSZXF1aXJpbmdTYW1lSW5saW5lQ2FsbEZyYW1lKG5vZGUpKTsK
KyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldENhbGxlZUxvYWRFbGltaW5hdGlvbihub2Rl
LmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICBjYXNlIEdldExvY2FsOiB7CkBAIC0xMzUxLDYgKzEzNzMsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKKyAgICAgICAgICAgIGlmIChj
aGVja0V4ZWN1dGFibGVFbGltaW5hdGlvbihub2RlLmV4ZWN1dGFibGUoKSwgbm9kZS5jaGlsZDEo
KS5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgICAg
ICAgICBpZiAoY2hlY2tBcnJheUVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbm9k
ZS5hcnJheU1vZGUoKSkpCiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAx
Mzg5MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDExIEBAIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlv
bkZvckNhbGwoQ29kZUJsb2MKICAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50
KCkgPD0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3Ry
dWN0aW9uQ291bnQoKQogICAgICAgICAmJiAhY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+
bmVlZHNBY3RpdmF0aW9uKCk7CiB9Citib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDbG9zdXJl
Q2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0
cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2xvc3VyZUNhbGxJ
bmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCkKKyAgICAgICAgJiYgIWNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCktPm5lZWRzQWN0aXZhdGlvbigpOworfQogYm9vbCBtaWdodElubGlu
ZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJldHVy
biBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtRnVuY3Rp
b25Gb3JDb25zdHJ1Y3RJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gMTM4
OTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQCBib29sIG1pZ2h0Q29tcGlsZVByb2dyYW0oQ29k
ZUJsb2NrKik7CiBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqKTsK
IGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKik7CiBib29s
IG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayopOworYm9vbCBtaWdodElubGlu
ZUZ1bmN0aW9uRm9yQ2xvc3VyZUNhbGwoQ29kZUJsb2NrKik7CiBib29sIG1pZ2h0SW5saW5lRnVu
Y3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKik7CiAKIC8vIE9wY29kZSBjaGVja2luZy4KQEAg
LTI3Miw2ICsyNzMsNyBAQCBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVQcm9ncmFtKENvZGVCbG9j
CiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKikgeyBy
ZXR1cm4gZmFsc2U7IH0KIGlubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3Ry
dWN0KENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxpbmUgYm9vbCBtaWdodElubGlu
ZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJv
b2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNsb3N1cmVDYWxsKENvZGVCbG9jayopIHsgcmV0dXJu
IGZhbHNlOyB9CiBpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENv
ZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CiAKIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2Fu
Q29tcGlsZU9wY29kZShPcGNvZGVJRCwgQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb24qKSB7IHJldHVy
biBDYW5ub3RDb21waWxlOyB9CkBAIC0zMTcsNiArMzE5LDExIEBAIGlubGluZSBib29sIGNhbklu
bGluZUZ1bmN0aW9uRm9yQ2FsbChDb2QKICAgICByZXR1cm4gbWlnaHRJbmxpbmVGdW5jdGlvbkZv
ckNhbGwoY29kZUJsb2NrKSAmJiBjYW5JbmxpbmVPcGNvZGVzKGNvZGVCbG9jayk7CiB9CiAKK2lu
bGluZSBib29sIGNhbklubGluZUZ1bmN0aW9uRm9yQ2xvc3VyZUNhbGwoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCit7CisgICAgcmV0dXJuIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDbG9zdXJlQ2FsbChj
b2RlQmxvY2spICYmIGNhbklubGluZU9wY29kZXMoY29kZUJsb2NrKTsKK30KKwogaW5saW5lIGJv
b2wgY2FuSW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7
CiAgICAgcmV0dXJuIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoY29kZUJsb2NrKSAm
JiBjYW5JbmxpbmVPcGNvZGVzKGNvZGVCbG9jayk7CkBAIC0zMzAsOCArMzM3LDEyIEBAIGlubGlu
ZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3IoQ29kZUIKICAgICByZXR1cm4gbWlnaHRJbmxp
bmVGdW5jdGlvbkZvckNvbnN0cnVjdChjb2RlQmxvY2spOwogfQogCi1pbmxpbmUgYm9vbCBjYW5J
bmxpbmVGdW5jdGlvbkZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kKQoraW5saW5lIGJvb2wgY2FuSW5saW5lRnVuY3Rpb25Gb3IoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgYm9vbCBpc0Nsb3N1cmVDYWxs
KQogeworICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7CisgICAgICAgIEFTU0VSVChraW5kID09IENv
ZGVGb3JDYWxsKTsKKyAgICAgICAgcmV0dXJuIGNhbklubGluZUZ1bmN0aW9uRm9yQ2xvc3VyZUNh
bGwoY29kZUJsb2NrKTsKKyAgICB9CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCiAgICAg
ICAgIHJldHVybiBjYW5JbmxpbmVGdW5jdGlvbkZvckNhbGwoY29kZUJsb2NrKTsKICAgICBBU1NF
UlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCShyZXZpc2lvbiAxMzg5MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAyLDYgKzcwMiwxNiBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIEFTU0VSVChKU1ZhbHVlKHJlc3VsdCkuaXNGdW5jdGlvbigpKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisgICAgCisgICAgYm9vbCBoYXNFeGVjdXRhYmxlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IENoZWNrRXhlY3V0YWJsZTsKKyAgICB9Cisg
ICAgCisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGpzQ2FzdDxFeGVjdXRhYmxlQmFzZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4obV9v
cEluZm8pKTsKKyAgICB9CiAKICAgICBib29sIGhhc1N0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZp
c2lvbiAxMzg5MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogICAgIG1hY3JvKENvbnZlcnRUaGlzLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNy
byhDcmVhdGVUaGlzLCBOb2RlUmVzdWx0SlMpIC8qIE5vdGUgdGhpcyBpcyBub3QgTXVzdEdlbmVy
YXRlIHNpbmNlIHdlJ3JlIHJldHVybmluZyBpdCBhbnl3YXkuICovIFwKICAgICBtYWNybyhHZXRD
YWxsZWUsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKFNldENhbGxlZSwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIFwKICAgICAvKiBOb2RlcyBmb3IgbG9jYWwgdmFyaWFibGUgYWNjZXNzLiBU
aGVzZSBub2RlcyBhcmUgbGlua2VkIHRvZ2V0aGVyIHVzaW5nIFBoaSBub2Rlcy4gKi9cCiAgICAg
LyogQW55IHR3byBub2RlcyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBzYW1lIFBoaSBncmFwaCB3aWxs
IHNoYXJlIHRoZSBzYW1lICovXApAQCAtMTI0LDYgKzEyNSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhQdXRCeUlkLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhQdXRCeUlkRGlyZWN0LCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhDaGVja1N0cnVjdHVyZSwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENoZWNrRXhlY3V0YWJsZSwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKEZvcndhcmRDaGVja1N0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIC8qIFRyYW5zaXRpb24gd2F0Y2hwb2ludHMgYXJlIGEgY29udHJhY3QgYmV0d2Vl
biB0aGUgcGFydHkgc2V0dGluZyB0aGUgd2F0Y2hwb2ludCAqL1wKICAgICAvKiBhbmQgdGhlIHJ1
bnRpbWUgc3lzdGVtLCB3aGVyZSB0aGUgcGFydHkgcHJvbWlzZXMgdGhhdCB0aGUgY2hpbGQgb2Jq
ZWN0IG9uY2UgaGFkICovXApAQCAtMTUwLDcgKzE1Miw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpTKSBcCiAgICAg
bWFjcm8oUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRBcnJh
eUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCisgICAgbWFjcm8oR2V0U2NvcGUsIE5vZGVSZXN1
bHRKUykgXAogICAgIG1hY3JvKEdldE15U2NvcGUsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3Jv
KFNldE15U2NvcGUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhTa2lwVG9wU2NvcGUs
IE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFNraXBTY29wZSwgTm9kZVJlc3VsdEpTKSBcCiAg
ICAgbWFjcm8oR2V0U2NvcGVSZWdpc3RlcnMsIE5vZGVSZXN1bHRTdG9yYWdlKSBcCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTM4OTE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc2Nyw2ICs3NjcsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQaGk6CiAgICAg
ICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIFNldENhbGxlZToKKyAgICAgICAgY2FzZSBT
ZXRNeVNjb3BlOgorICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCld
Lm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgR2V0U2NvcGU6CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsT3RoZXIpOworICAgICAgICAg
ICAgYnJlYWs7CisKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIC8vIFRoZXNlIGdldCBpZ25vcmVk
IGJlY2F1c2UgdGhleSBkb24ndCByZXR1cm4gYW55dGhpbmcuCiAgICAgICAgIGNhc2UgREZHOjpK
dW1wOgpAQCAtNzc3LDYgKzc4Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgRm9yY2VPU1JF
eGl0OgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICBjYXNlIENoZWNrU3RydWN0
dXJlOgorICAgICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKICAgICAgICAgY2FzZSBGb3J3YXJk
Q2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQ6CiAgICAgICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCShyZXZpc2lvbiAxMzg5MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTY5LDYg
KzM5NjksMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgU2V0Q2FsbGVlOiB7CisgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNhbGxlZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgbV9qaXQuc3RvcmVQdHIoY2FsbGVlLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZv
cihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGUuY29kZU9yaWdpbi5zdGFja09mZnNl
dCgpICsgc3RhdGljX2Nhc3Q8aW50PihKU1N0YWNrOjpDYWxsZWUpKSkpOworICAgICAgICBub1Jl
c3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisg
ICAgY2FzZSBHZXRTY29wZTogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlv
bih0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCBmdW5jdGlvbik7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
ZnVuY3Rpb24uZ3ByKCksIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEdldE15U2NvcGU6
IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKQEAgLTM5NzgsNiArMzk5MywxMyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCisgICAgY2FzZSBTZXRNeVNjb3BlOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGNhbGxlZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIo
Y2FsbGVlLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KG5vZGUuY29kZU9yaWdpbi5zdGFja09mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50
PihKU1N0YWNrOjpTY29wZUNoYWluKSkpKTsKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgU2tpcFRvcFNj
b3BlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHNjb3BlKTsKQEAgLTQx
NDIsNiArNDE2NCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOiB7Cisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGZ1bmN0aW9uKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZEV4ZWN1dGFibGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKGZ1bmN0aW9uLmdwcigpKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNo
V2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGZ1bmN0
aW9uLmdwcigpLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIG5vZGUuZXhlY3V0
YWJsZSgpKSk7CisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgIGNhc2Ug
Rm9yd2FyZENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMzg5MTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOTIxLDYgKzM5MjEsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAg
IGNhc2UgU2V0Q2FsbGVlOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNhbGxlZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2FsbGVlLmdwcigp
LCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5v
ZGUuY29kZU9yaWdpbi5zdGFja09mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50PihKU1N0YWNrOjpD
YWxsZWUpKSkpOworICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBHZXRTY29wZTogeworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBmdW5jdGlvbik7CisgICAgICAgIG1faml0LmxvYWRQ
dHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZnVuY3Rpb24uZ3ByKCksIEpTRnVuY3Rpb246Om9mZnNl
dE9mU2NvcGVDaGFpbigpKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1
bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAKICAgICBjYXNlIEdldE15U2NvcGU6IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKQEAgLTM5MzAs
NiArMzk0NSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBTZXRNeVNjb3BlOiB7Cisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNhbGxlZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2FsbGVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVz
c0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGUuY29kZU9yaWdpbi5zdGFja09m
ZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50PihKU1N0YWNrOjpTY29wZUNoYWluKSkpKTsKKyAgICAg
ICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAogICAgIGNhc2UgU2tpcFRvcFNjb3BlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIHNjb3BlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIHNjb3BlKTsKQEAgLTQwODAsNiArNDEwMiwxNCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIENoZWNrRXhlY3V0
YWJsZTogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRFeGVjdXRhYmxlLCBKU1Zh
bHVlUmVncyhmdW5jdGlvbi5ncHIoKSksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFdlYWtQ
dHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhmdW5jdGlvbi5n
cHIoKSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLCBub2RlLmV4ZWN1dGFibGUo
KSkpOworICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndh
cmRDaGVja1N0cnVjdHVyZTogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMTM4OTE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDYgKzI4MiwxMyBAQCB2b2lkIFZhcmlhYmxlRXZlbnRT
dHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPQogICAgICAg
ICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHN0YXRpY19jYXN0PFZpcnR1
YWxSZWdpc3Rlcj4oaW5mby0+dS52aXJ0dWFsUmVnKSwgaW5mby0+Zm9ybWF0KTsKICAgICB9Cisg
ICAgCisgICAgLy8gU3RlcCA1OiBNYWtlIHN1cmUgdGhhdCBmb3IgbG9jYWxzIHRoYXQgY29pbmNp
ZGUgd2l0aCB0cnVlIGNhbGwgZnJhbWUgaGVhZGVycywgdGhlIGV4aXQgY29tcGlsZXIga25vd3MK
KyAgICAvLyB0aGF0IHRob3NlIHZhbHVlcyBkb24ndCBoYXZlIHRvIGJlIHJlY292ZXJlZC4gU2ln
bmFsIHRoaXMgYnkgdXNpbmcgVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluSlNTdGFjaygpCisgICAg
Zm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOyBpLS07KQorICAgICAgICAgICAgdmFsdWVS
ZWNvdmVyaWVzLnNldExvY2FsKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgLSBpIC0gMSwg
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluSlNTdGFjaygpKTsKKyAgICB9CiB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgJKHJldmlzaW9uIDEzODkxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICB2KHVuc2lnbmVkLCBtYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rp
b25Db3VudCwgMTAwMDApIFwKICAgICBcCiAgICAgdih1bnNpZ25lZCwgbWF4aW11bUZ1bmN0aW9u
Rm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIDE4MCkgXAorICAgIHYodW5z
aWduZWQsIG1heGltdW1GdW5jdGlvbkZvckNsb3N1cmVDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1
Y3Rpb25Db3VudCwgMTAwKSBcCiAgICAgdih1bnNpZ25lZCwgbWF4aW11bUZ1bmN0aW9uRm9yQ29u
c3RydWN0SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgMTAwKSBcCiAgICAgXAogICAg
IC8qIERlcHRoIG9mIGlubGluZSBzdGFjaywgc28gMSA9IG5vIGlubGluaW5nLCAyID0gb25lIGxl
dmVsLCBldGMuICovIFwK
</data>
<flag name="review"
          id="199085"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>