<?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>124094</bug_id>
          
          <creation_ts>2013-11-08 18:42:29 -0800</creation_ts>
          <short_desc>Switch FTL GetById/PutById IC&apos;s over to using AnyRegCC</short_desc>
          <delta_ts>2013-11-10 23:29:07 -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>112840</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>atrick</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>948979</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-08 18:42:29 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>948980</commentid>
    <comment_count>1</comment_count>
      <attachid>216475</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-08 18:43:23 -0800</bug_when>
    <thetext>Created attachment 216475
just the beginning</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949013</commentid>
    <comment_count>2</comment_count>
      <attachid>216483</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-08 22:44:33 -0800</bug_when>
    <thetext>Created attachment 216483
work in progress

Starting to get there.  But still crashing in a bunch of tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949054</commentid>
    <comment_count>3</comment_count>
      <attachid>216495</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-09 13:09:58 -0800</bug_when>
    <thetext>Created attachment 216495
crashes later than before</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949058</commentid>
    <comment_count>4</comment_count>
      <attachid>216497</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-09 13:56:59 -0800</bug_when>
    <thetext>Created attachment 216497
slowly making it work and stuff

More stuff still needs to be done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949061</commentid>
    <comment_count>5</comment_count>
      <attachid>216499</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-09 16:44:43 -0800</bug_when>
    <thetext>Created attachment 216499
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949062</commentid>
    <comment_count>6</comment_count>
      <attachid>216500</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-09 16:57:01 -0800</bug_when>
    <thetext>Created attachment 216500
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949063</commentid>
    <comment_count>7</comment_count>
      <attachid>216501</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-09 17:03:20 -0800</bug_when>
    <thetext>Created attachment 216501
the patch

Just rebasing and refining the changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949065</commentid>
    <comment_count>8</comment_count>
      <attachid>216501</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-09 17:29:21 -0800</bug_when>
    <thetext>Comment on attachment 216501
the patch

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

&gt; Source/JavaScriptCore/ChangeLog:18
&gt; +        JIT (like the DFG) will not pin IC operands to any registers a prior but will allow

&quot;a prior&quot; -&gt; &quot;a priori&quot;.

&gt; Source/JavaScriptCore/ChangeLog:47
&gt; +          and eclectic SIB encodings. I changed that to have magic constants, for now.

SIB? What is the long term plan to replace the magic constants?

&gt; Source/JavaScriptCore/ChangeLog:57
&gt; +        - We assumed that r10 is callee-saved. It&apos;s not. That one dude&apos;s PPT about x86-64
&gt; +          cdecl that I found on the intertubes was not a trustworthy source of information,
&gt; +          apparently.

LOL.

&gt; Source/JavaScriptCore/ftl/FTLInlineCacheSize.cpp:38
&gt; +    return 29;

This (and its friends) deserve a comment.

&gt; Source/JavaScriptCore/ftl/FTLStackMaps.cpp:71
&gt; +    return FTL::Location::forStackmaps(0, *this).directGPR();

You should use nullptr rather than 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949066</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-09 17:32:03 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 216501 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=216501&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:18
&gt; &gt; +        JIT (like the DFG) will not pin IC operands to any registers a prior but will allow
&gt; 
&gt; &quot;a prior&quot; -&gt; &quot;a priori&quot;.
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:47
&gt; &gt; +          and eclectic SIB encodings. I changed that to have magic constants, for now.
&gt; 
&gt; SIB?

Scaled index byte.

It&apos;s an intel thing.

&gt; What is the long term plan to replace the magic constants?

I haven&apos;t decided yet, if I think that it&apos;s bad to have these constants. Ideally you&apos;d loop over all possible combinations of registers and such, and find the max size.  Or you&apos;d find the size for some representative combo of registers, and force out-lining (i.e. jump to a stub) in cases where you used the bad register combinations.  I&apos;m not convinced that either of these is better than the magical constants.

&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:57
&gt; &gt; +        - We assumed that r10 is callee-saved. It&apos;s not. That one dude&apos;s PPT about x86-64
&gt; &gt; +          cdecl that I found on the intertubes was not a trustworthy source of information,
&gt; &gt; +          apparently.
&gt; 
&gt; LOL.
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLInlineCacheSize.cpp:38
&gt; &gt; +    return 29;
&gt; 
&gt; This (and its friends) deserve a comment.

OK.  But the comment will be: I tried random numbers until tests passed.

Fortunately we really do have enough test coverage at this point that this isn&apos;t a totally embarrassing thing to do.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLStackMaps.cpp:71
&gt; &gt; +    return FTL::Location::forStackmaps(0, *this).directGPR();
&gt; 
&gt; You should use nullptr rather than 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949067</commentid>
    <comment_count>10</comment_count>
      <attachid>216502</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-09 17:38:32 -0800</bug_when>
    <thetext>Created attachment 216502
the patch

Addressed Sam&apos;s comments and fixed some architectures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949221</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-10 23:29:07 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/159039</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216475</attachid>
            <date>2013-11-08 18:43:23 -0800</date>
            <delta_ts>2013-11-08 22:44:33 -0800</delta_ts>
            <desc>just the beginning</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>4872</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCShy
ZXZpc2lvbiAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlh
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDYgKzI3MSw3IEBAIHN0YXRpYyBpbmxpbmUg
TFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciAKIH0KIGVudW0gVGFpbENhbGxNb2RlIHsgSXNOb3RU
YWlsQ2FsbCwgSXNUYWlsQ2FsbCB9Owogc3RhdGljIGlubGluZSB2b2lkIHNldFRhaWxDYWxsKExW
YWx1ZSBjYWxsLCBUYWlsQ2FsbE1vZGUgbW9kZSkgeyBsbHZtLT5TZXRUYWlsQ2FsbChjYWxsLCBt
b2RlID09IElzVGFpbENhbGwpOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0SW5zdHJ1Y3Rpb25D
YWxsaW5nQ29udmVudGlvbihMVmFsdWUgaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxpbmdDb252
ZW50aW9uKSB7IGxsdm0tPlNldEluc3RydWN0aW9uQ2FsbENvbnYoaW5zdHJ1Y3Rpb24sIGNhbGxp
bmdDb252ZW50aW9uKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRFeHRyYWN0VmFsdWUo
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJu
IGxsdm0tPkJ1aWxkRXh0cmFjdFZhbHVlKGJ1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgsICIiKTsgfQog
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRTZWxlY3QoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVl
IGNvbmRpdGlvbiwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGxsdm0t
PkJ1aWxkU2VsZWN0KGJ1aWxkZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5vdFRha2VuLCAiIik7IH0K
IHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQnIoTEJ1aWxkZXIgYnVpbGRlciwgTEJhc2ljQmxv
Y2sgZGVzdGluYXRpb24pIHsgcmV0dXJuIGxsdm0tPkJ1aWxkQnIoYnVpbGRlciwgZGVzdGluYXRp
b24pOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhbGxpbmdDb252ZW50
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FsbGlu
Z0NvbnZlbnRpb25zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhbGxpbmdDb252ZW50aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBG
VExDYWxsaW5nQ29udmVudGlvbnNfaAorI2RlZmluZSBGVExDYWxsaW5nQ29udmVudGlvbnNfaAor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7IG5hbWVzcGFjZSBDYWxsaW5nQ29udmVu
dGlvbnMgeworCitpbmxpbmUgdW5zaWduZWQgd2ViS2l0SlMoKSB7IHJldHVybiAxMjsgfQoraW5s
aW5lIHVuc2lnbmVkIGFueVJlZygpIHsgcmV0dXJuIDEzOyB9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEw6OkNhbGxpbmdDb252ZW50aW9ucworCisjZW5kaWYgLy8gRlRMQ2FsbGluZ0NvbnZl
bnRpb25zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCIKICNpbmNsdWRl
ICJERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaCIKKyNpbmNsdWRlICJGVExDYWxsaW5nQ29udmVudGlvbnMuaCIKICNpbmNsdWRl
ICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKICNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5o
IgogI2luY2x1ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgpAQCAtMTI3NSwxMCArMTI3NiwxMiBA
QCBwcml2YXRlOgogCiAgICAgICAgIC8vIEFyZ3VtZW50czogaWQsIGJ5dGVzLCB0YXJnZXQsIG51
bUFyZ3MsIGFyZ3MuLi4KICAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJ
RHMrKzsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5jYWxsKAorICAgICAgICBMVmFsdWUgY2Fs
bCA9IG1fb3V0LmNhbGwoCiAgICAgICAgICAgICBtX291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5z
aWMoKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RhY2ttYXBJRCksIG1fb3V0LmNv
bnN0SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSwKLSAgICAgICAgICAgIGNvbnN0TnVsbChtX291dC5y
ZWY4KSwgbV9vdXQuY29uc3RJbnQzMigyKSwgbV9jYWxsRnJhbWUsIGJhc2UpKTsKKyAgICAgICAg
ICAgIGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigyKSwgbV9jYWxsRnJh
bWUsIGJhc2UpOworICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGws
IENhbGxpbmdDb252ZW50aW9uczo6YW55UmVnKCkpOworICAgICAgICBzZXRKU1ZhbHVlKGNhbGwp
OwogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5nZXRCeUlkcy5hcHBlbmQoR2V0QnlJZERl
c2NyaXB0b3Ioc3RhY2ttYXBJRCwgbV9ub2RlLT5jb2RlT3JpZ2luLCB1aWQpKTsKICAgICB9CkBA
IC0xMjk0LDEwICsxMjk3LDExIEBAIHByaXZhdGU6CiAKICAgICAgICAgLy8gQXJndW1lbnRzOiBp
ZCwgYnl0ZXMsIHRhcmdldCwgbnVtQXJncywgYXJncy4uLgogICAgICAgICB1bnNpZ25lZCBzdGFj
a21hcElEID0gbV9zdGFja21hcElEcysrOwotICAgICAgICBtX291dC5jYWxsKAorICAgICAgICBM
VmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCiAgICAgICAgICAgICBtX291dC5wYXRjaHBvaW50Vm9p
ZEludHJpbnNpYygpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihzdGFja21hcElEKSwg
bV9vdXQuY29uc3RJbnQzMihzaXplT2ZQdXRCeUlkKCkpLAogICAgICAgICAgICAgY29uc3ROdWxs
KG1fb3V0LnJlZjgpLCBtX291dC5jb25zdEludDMyKDMpLCBtX2NhbGxGcmFtZSwgYmFzZSwgdmFs
dWUpOworICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIENhbGxp
bmdDb252ZW50aW9uczo6YW55UmVnKCkpOwogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5w
dXRCeUlkcy5hcHBlbmQoUHV0QnlJZERlc2NyaXB0b3IoCiAgICAgICAgICAgICBzdGFja21hcElE
LCBtX25vZGUtPmNvZGVPcmlnaW4sIHVpZCwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216483</attachid>
            <date>2013-11-08 22:44:33 -0800</date>
            <delta_ts>2013-11-09 13:09:58 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19190</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCShy
ZXZpc2lvbiAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlh
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDYgKzI3MSw3IEBAIHN0YXRpYyBpbmxpbmUg
TFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciAKIH0KIGVudW0gVGFpbENhbGxNb2RlIHsgSXNOb3RU
YWlsQ2FsbCwgSXNUYWlsQ2FsbCB9Owogc3RhdGljIGlubGluZSB2b2lkIHNldFRhaWxDYWxsKExW
YWx1ZSBjYWxsLCBUYWlsQ2FsbE1vZGUgbW9kZSkgeyBsbHZtLT5TZXRUYWlsQ2FsbChjYWxsLCBt
b2RlID09IElzVGFpbENhbGwpOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0SW5zdHJ1Y3Rpb25D
YWxsaW5nQ29udmVudGlvbihMVmFsdWUgaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxpbmdDb252
ZW50aW9uKSB7IGxsdm0tPlNldEluc3RydWN0aW9uQ2FsbENvbnYoaW5zdHJ1Y3Rpb24sIGNhbGxp
bmdDb252ZW50aW9uKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRFeHRyYWN0VmFsdWUo
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJu
IGxsdm0tPkJ1aWxkRXh0cmFjdFZhbHVlKGJ1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgsICIiKTsgfQog
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRTZWxlY3QoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVl
IGNvbmRpdGlvbiwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGxsdm0t
PkJ1aWxkU2VsZWN0KGJ1aWxkZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5vdFRha2VuLCAiIik7IH0K
IHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQnIoTEJ1aWxkZXIgYnVpbGRlciwgTEJhc2ljQmxv
Y2sgZGVzdGluYXRpb24pIHsgcmV0dXJuIGxsdm0tPkJ1aWxkQnIoYnVpbGRlciwgZGVzdGluYXRp
b24pOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhbGxpbmdDb252ZW50
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FsbGlu
Z0NvbnZlbnRpb25zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhbGxpbmdDb252ZW50aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBG
VExDYWxsaW5nQ29udmVudGlvbnNfaAorI2RlZmluZSBGVExDYWxsaW5nQ29udmVudGlvbnNfaAor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7IG5hbWVzcGFjZSBDYWxsaW5nQ29udmVu
dGlvbnMgeworCitpbmxpbmUgdW5zaWduZWQgd2ViS2l0SlMoKSB7IHJldHVybiAxMjsgfQoraW5s
aW5lIHVuc2lnbmVkIGFueVJlZygpIHsgcmV0dXJuIDEzOyB9CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTDo6Q2FsbGluZ0NvbnZlbnRpb25zCisKKyNlbmRpZiAvLyBGVExDYWxsaW5nQ29u
dmVudGlvbnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5j
cHAJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29t
cGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCwxNCArMTg4LDEyIEBAIHN0YXRpYyB2b2lk
IGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgIAogICAgICAgICAgICAg
U3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBVTlVTRURfUEFSQU0ocmVjb3JkKTsgLy8gRklYTUU6IHVzZSBBbnlSZWdzLgot
CiAgICAgICAgICAgICAvLyBGSVhNRTogTExWTSBzaG91bGQgdGVsbCB1cyB3aGljaCByZWdpc3Rl
cnMgYXJlIGxpdmUuCiAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gUmVn
aXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJS
ZWcgY2FsbEZyYW1lUmVnaXN0ZXIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7Ci0gICAgICAgICAg
ICBHUFJSZWcgYmFzZSA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKLSAgICAgICAgICAgIEdQUlJl
ZyByZXN1bHQgPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyBy
ZXN1bHQgPSByZWNvcmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUigpOworICAgICAgICAgICAgR1BS
UmVnIGNhbGxGcmFtZVJlZ2lzdGVyID0gcmVjb3JkLmxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVjb3JkLmxvY2F0aW9uc1syXS5kaXJlY3RHUFIo
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCiAg
ICAgICAgICAgICAgICAgY29kZUJsb2NrLCBnZXRCeUlkLmNvZGVPcmlnaW4oKSwgdXNlZFJlZ2lz
dGVycywgY2FsbEZyYW1lUmVnaXN0ZXIsCkBAIC0yMjQsMTQgKzIyMiwxMiBAQCBzdGF0aWMgdm9p
ZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAKICAgICAgICAgICAg
IFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHJlY29yZCk7IC8vIEZJWE1FOiB1c2UgQW55UmVncy4K
LQogICAgICAgICAgICAgLy8gRklYTUU6IExMVk0gc2hvdWxkIHRlbGwgdXMgd2hpY2ggcmVnaXN0
ZXJzIGFyZSBsaXZlLgogICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IFJl
Z2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgR1BS
UmVnIGNhbGxGcmFtZVJlZ2lzdGVyID0gR1BSSW5mbzo6YXJndW1lbnRHUFIwOwotICAgICAgICAg
ICAgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7Ci0gICAgICAgICAgICBHUFJS
ZWcgdmFsdWUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgICAgICAgICBHUFJSZWcgY2Fs
bEZyYW1lUmVnaXN0ZXIgPSByZWNvcmQubG9jYXRpb25zWzBdLmRpcmVjdEdQUigpOworICAgICAg
ICAgICAgR1BSUmVnIGJhc2UgPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOworICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVjb3JkLmxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAg
ICAgICAgICAgICAgY29kZUJsb2NrLCBwdXRCeUlkLmNvZGVPcmlnaW4oKSwgdXNlZFJlZ2lzdGVy
cywgY2FsbEZyYW1lUmVnaXN0ZXIsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TElubGluZUNhY2hlU2l6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCShyZXZpc2lvbiAxNTg5ODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDM4ICszMywxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAK
LXN0YXRpYyBzaXplX3Qgc19zaXplT2ZHZXRCeUlkOwotc3RhdGljIHNpemVfdCBzX3NpemVPZlB1
dEJ5SWQ7Ci0KIHNpemVfdCBzaXplT2ZHZXRCeUlkKCkKIHsKLSAgICBpZiAoc19zaXplT2ZHZXRC
eUlkKQotICAgICAgICByZXR1cm4gc19zaXplT2ZHZXRCeUlkOwotICAgIAotICAgIE1hY3JvQXNz
ZW1ibGVyIGppdDsKLSAgICAKLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbmVyYXRvcigKLSAg
ICAgICAgMCwgQ29kZU9yaWdpbigpLCBSZWdpc3RlclNldCgpLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDYpLCBKU1ZhbHVlUmVn
cyhHUFJJbmZvOjpyZWdUNyksIGZhbHNlKTsKLSAgICBnZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0
aChqaXQpOwotICAgIAotICAgIHJldHVybiBzX3NpemVPZkdldEJ5SWQgPSBqaXQubV9hc3NlbWJs
ZXIuY29kZVNpemUoKTsKKyAgICByZXR1cm4gMjg7CiB9CiAKIHNpemVfdCBzaXplT2ZQdXRCeUlk
KCkKIHsKLSAgICBpZiAoc19zaXplT2ZQdXRCeUlkKQotICAgICAgICByZXR1cm4gc19zaXplT2ZQ
dXRCeUlkOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKLSAgICAKLSAgICBKSVRQdXRC
eUlkR2VuZXJhdG9yIGdlbmVyYXRvcigKLSAgICAgICAgMCwgQ29kZU9yaWdpbigpLCBSZWdpc3Rl
clNldCgpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgSlNWYWx1ZVJlZ3Mo
R1BSSW5mbzo6cmVnVDYpLCBKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNyksIEdQUkluZm86OnJl
Z1Q4LCBmYWxzZSwKLSAgICAgICAgTm90U3RyaWN0TW9kZSwgTm90RGlyZWN0KTsKLSAgICBnZW5l
cmF0b3IuZ2VuZXJhdGVGYXN0UGF0aChqaXQpOwotICAgIAotICAgIHJldHVybiBzX3NpemVPZlB1
dEJ5SWQgPSBqaXQubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKKyAgICByZXR1cm4gMzI7CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzUsNyArNzUsNyBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAg
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoCiAgICAgICAgICAgICAgICAgICAgIG1fcGxh
bi52bS5mdGxUaHVua3MtPmdldE9TUkV4aXRHZW5lcmF0aW9uVGh1bmsoCiAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3BsYW4udm0sIExvY2F0aW9uOjpmb3JTdGFja21hcHMoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaml0Q29kZS0+c3RhY2ttYXBzLCBpdGVyLT52YWx1ZS5sb2NhdGlv
bnNbMF0pKS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaml0Q29kZS0+
c3RhY2ttYXBzLCBpdGVyLT52YWx1ZS5sb2NhdGlvbnNbMF0pKS5jb2RlKCkpKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaml0Q29kZS0+aW5pdGlhbGl6ZUV4aXRUaHVua3MoCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmNwcAkocmV2aXNpb24gMTU4
OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgewogCi1Mb2NhdGlvbiBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKGNvbnN0IFN0YWNrTWFwcyYg
c3RhY2ttYXBzLCBjb25zdCBTdGFja01hcHM6OkxvY2F0aW9uJiBsb2NhdGlvbikKK0xvY2F0aW9u
IExvY2F0aW9uOjpmb3JTdGFja21hcHMoY29uc3QgU3RhY2tNYXBzKiBzdGFja21hcHMsIGNvbnN0
IFN0YWNrTWFwczo6TG9jYXRpb24mIGxvY2F0aW9uKQogewogICAgIHN3aXRjaCAobG9jYXRpb24u
a2luZCkgewogICAgIGNhc2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6VW5wcm9jZXNzZWQ6CkBAIC01
Myw3ICs1Myw4IEBAIExvY2F0aW9uIExvY2F0aW9uOjpmb3JTdGFja21hcHMoY29uc3QgU3QKICAg
ICAgICAgcmV0dXJuIGZvckNvbnN0YW50KGxvY2F0aW9uLm9mZnNldCk7CiAgICAgICAgIAogICAg
IGNhc2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6Q29uc3RhbnRJbmRleDoKLSAgICAgICAgcmV0dXJu
IGZvckNvbnN0YW50KHN0YWNrbWFwcy5jb25zdGFudHNbbG9jYXRpb24ub2Zmc2V0XS5pbnRlZ2Vy
KTsKKyAgICAgICAgQVNTRVJUKHN0YWNrbWFwcyk7CisgICAgICAgIHJldHVybiBmb3JDb25zdGFu
dChzdGFja21hcHMtPmNvbnN0YW50c1tsb2NhdGlvbi5vZmZzZXRdLmludGVnZXIpOwogICAgIH0K
ICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uaAkocmV2aXNpb24gMTU4OTg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3
ICs4NCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBz
dGF0aWMgTG9jYXRpb24gZm9yU3RhY2ttYXBzKGNvbnN0IFN0YWNrTWFwcyYsIGNvbnN0IFN0YWNr
TWFwczo6TG9jYXRpb24mKTsKKyAgICAvLyBZb3UgY2FuIHBhc3MgYSBudWxsIFN0YWNrTWFwcyBp
ZiB5b3UgYXJlIGNvbmZpZGVudCB0aGF0IHRoZSBsb2NhdGlvbiBkb2Vzbid0CisgICAgLy8gaW52
b2x2ZSBhIHdpZGUgY29uc3RhbnQuCisgICAgc3RhdGljIExvY2F0aW9uIGZvclN0YWNrbWFwcyhj
b25zdCBTdGFja01hcHMqLCBjb25zdCBTdGFja01hcHM6OkxvY2F0aW9uJik7CiAgICAgCiAgICAg
S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24g
MTU4OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0luUGxhY2VBYnN0cmFjdFN0YXRl
LmgiCiAjaW5jbHVkZSAiRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgIkZU
TENhbGxpbmdDb252ZW50aW9ucy5oIgogI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5o
IgogI2luY2x1ZGUgIkZUTEZvcm1hdHRlZFZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMSW5saW5lQ2Fj
aGVTaXplLmgiCkBAIC0xMjc1LDEwICsxMjc2LDEyIEBAIHByaXZhdGU6CiAKICAgICAgICAgLy8g
QXJndW1lbnRzOiBpZCwgYnl0ZXMsIHRhcmdldCwgbnVtQXJncywgYXJncy4uLgogICAgICAgICB1
bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21hcElEcysrOwotICAgICAgICBzZXRKU1ZhbHVl
KG1fb3V0LmNhbGwoCisgICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbCgKICAgICAgICAg
ICAgIG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLAogICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQzMihzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZHZXRCeUlkKCkp
LAotICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJlZjgpLCBtX291dC5jb25zdEludDMyKDIp
LCBtX2NhbGxGcmFtZSwgYmFzZSkpOworICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJlZjgp
LCBtX291dC5jb25zdEludDMyKDIpLCBtX2NhbGxGcmFtZSwgYmFzZSk7CisgICAgICAgIHNldElu
c3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgQ2FsbGluZ0NvbnZlbnRpb25zOjphbnlS
ZWcoKSk7CisgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7CiAgICAgICAgIAogICAgICAgICBtX2Z0
bFN0YXRlLmdldEJ5SWRzLmFwcGVuZChHZXRCeUlkRGVzY3JpcHRvcihzdGFja21hcElELCBtX25v
ZGUtPmNvZGVPcmlnaW4sIHVpZCkpOwogICAgIH0KQEAgLTEyOTQsMTAgKzEyOTcsMTEgQEAgcHJp
dmF0ZToKIAogICAgICAgICAvLyBBcmd1bWVudHM6IGlkLCBieXRlcywgdGFyZ2V0LCBudW1Bcmdz
LCBhcmdzLi4uCiAgICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7
Ci0gICAgICAgIG1fb3V0LmNhbGwoCisgICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbCgK
ICAgICAgICAgICAgIG1fb3V0LnBhdGNocG9pbnRWb2lkSW50cmluc2ljKCksCiAgICAgICAgICAg
ICBtX291dC5jb25zdEludDMyKHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZlB1
dEJ5SWQoKSksCiAgICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0
SW50MzIoMyksIG1fY2FsbEZyYW1lLCBiYXNlLCB2YWx1ZSk7CisgICAgICAgIHNldEluc3RydWN0
aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgQ2FsbGluZ0NvbnZlbnRpb25zOjphbnlSZWcoKSk7
CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLnB1dEJ5SWRzLmFwcGVuZChQdXRCeUlkRGVz
Y3JpcHRvcigKICAgICAgICAgICAgIHN0YWNrbWFwSUQsIG1fbm9kZS0+Y29kZU9yaWdpbiwgdWlk
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNw
cAkocmV2aXNpb24gMTU4OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93
UGF0aENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwyMCArNjQsMjMgQEAgcHVibGljOgog
ICAgICAgICBtX29mZnNldFRvU2F2aW5nQXJlYSA9CiAgICAgICAgICAgICAoc3RkOjptYXgobV9u
dW1BcmdzLCBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTKSAtIE5VTUJFUl9PRl9BUkdVTUVO
VF9SRUdJU1RFUlMpICogd29yZFNpemU7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1B
cmd1bWVudFJlZ2lzdGVyc1RoYXROZWVkU2F2aW5nID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gc3RkOjptaW4oTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUywgbnVtQXJncyk7IGkt
LTspIHsKLSAgICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0KEdQUkluZm86OnRvQXJn
dW1lbnRSZWdpc3RlcihpKSkpCi0gICAgICAgICAgICAgICAgbnVtQXJndW1lbnRSZWdpc3RlcnNU
aGF0TmVlZFNhdmluZysrOwotICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0
ZDo6bWluKE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMsIG51bUFyZ3MpOyBpLS07KQorICAg
ICAgICAgICAgbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6dG9Bcmd1
bWVudFJlZ2lzdGVyKGkpKTsKKyAgICAgICAgaWYgKHJldHVyblJlZ2lzdGVyICE9IEludmFsaWRH
UFJSZWcpCisgICAgICAgICAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLnNldChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3Rl
cnMuZmlsdGVyKG1fdXNlZFJlZ2lzdGVycyk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzID0KKyAgICAgICAgICAgIG1fY2FsbGlu
Z0NvbnZlbnRpb25SZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsKICAgICAgICAgCiAg
ICAgICAgIHNpemVfdCBvZmZzZXRUb1RodW5rU2F2aW5nQXJlYSA9CiAgICAgICAgICAgICBtX29m
ZnNldFRvU2F2aW5nQXJlYSArCi0gICAgICAgICAgICBudW1Bcmd1bWVudFJlZ2lzdGVyc1RoYXRO
ZWVkU2F2aW5nICogd29yZFNpemU7CisgICAgICAgICAgICBudW1iZXJPZkNhbGxpbmdDb252ZW50
aW9uUmVnaXN0ZXJzICogd29yZFNpemU7CiAgICAgICAgIAogICAgICAgICBtX3N0YWNrQnl0ZXNO
ZWVkZWQgPQogICAgICAgICAgICAgb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWEgKwogICAgICAgICAg
ICAgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3MgKwotICAgICAgICAgICAgKG1fdXNl
ZFJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpIC0gbnVtQXJndW1lbnRSZWdpc3RlcnNU
aGF0TmVlZFNhdmluZykgKiB3b3JkU2l6ZTsKKyAgICAgICAgICAgIChtX3VzZWRSZWdpc3RlcnMu
bnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSAtIG51bWJlck9mQ2FsbGluZ0NvbnZlbnRpb25SZWdpc3Rl
cnMpICogd29yZFNpemU7CiAgICAgICAgIAogICAgICAgICBzaXplX3Qgc3RhY2tBbGlnbm1lbnQg
PSAxNjsKICAgICAgICAgCkBAIC04NywxMSArOTAsMTMgQEAgcHVibGljOgogICAgICAgICAKICAg
ICAgICAgbV90aHVua1NhdmVTZXQgPSBtX3VzZWRSZWdpc3RlcnM7CiAgICAgICAgIAotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJT
LCBudW1BcmdzKTsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFtX3VzZWRSZWdpc3RlcnMuZ2V0
KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSkpCisgICAgICAgIC8vIFRoaXMgcmVsaWVz
IG9uIGFsbCBjYWxsaW5nIGNvbnZlbnRpb24gcmVnaXN0ZXJzIGFsc28gYmVpbmcgdGVtcCByZWdp
c3RlcnMuCisgICAgICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSAwOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICAg
ICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgICAgICBpZiAo
IW1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZ2V0KHJlZykpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9Bcmd1bWVudFJl
Z2lzdGVyKGkpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1Nh
dmluZ0FyZWEgKyBpICogd29yZFNpemUpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJl
ZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIsIG1fb2Zmc2V0VG9TYXZpbmdBcmVhICsgKHN0YWNrSW5kZXgrKykgKiB3b3JkU2l6ZSkpOwog
ICAgICAgICAgICAgbV90aHVua1NhdmVTZXQuY2xlYXIocmVnKTsKICAgICAgICAgfQogICAgICAg
ICAKQEAgLTEwMywxMSArMTA4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG1fcmV0dXJuUmVn
aXN0ZXIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIG1fcmV0dXJuUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gc3RkOjptaW4oTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUywgbV9u
dW1BcmdzKTsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFtX3VzZWRSZWdpc3RlcnMuZ2V0KEdQ
UkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSkpCisgICAgICAgIHVuc2lnbmVkIHN0YWNrSW5k
ZXggPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVyczsgaS0tOykgeworICAgICAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvUmVnaXN0
ZXIoaSk7CisgICAgICAgICAgICBpZiAoIW1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZ2V0
KHJlZykpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBHUFJSZWcgcmVn
ID0gR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpOwotICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyBpICogd29yZFNpemUpLCByZWcpOworICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyAoc3RhY2tJbmRleCsr
KSAqIHdvcmRTaXplKSwgcmVnKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9qaXQu
YWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRlc05lZWRlZCksIEND
YWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTM5LDYgKzE0NSw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgU3RhdGUmIG1fc3RhdGU7CiAgICAgUmVnaXN0ZXJTZXQgbV91
c2VkUmVnaXN0ZXJzOworICAgIFJlZ2lzdGVyU2V0IG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3Rl
cnM7CiAgICAgQ0NhbGxIZWxwZXJzJiBtX2ppdDsKICAgICB1bnNpZ25lZCBtX251bUFyZ3M7CiAg
ICAgR1BSUmVnIG1fcmV0dXJuUmVnaXN0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YWNrTWFwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGFja01hcHMuY3BwCShyZXZpc2lvbiAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDE1ICs2
NiwxNSBAQCB2b2lkIFN0YWNrTWFwczo6TG9jYXRpb246OmR1bXAoUHJpbnRTdHJlCiAgICAgb3V0
LnByaW50KCIoIiwga2luZCwgIiwgcmVnIiwgZHdhcmZSZWdOdW0sICIsICIsIG9mZnNldCwgIiki
KTsKIH0KIAotR1BSUmVnIFN0YWNrTWFwczo6TG9jYXRpb246OmRpcmVjdEdQUihTdGFja01hcHMm
IHN0YWNrbWFwcykgY29uc3QKK0dQUlJlZyBTdGFja01hcHM6OkxvY2F0aW9uOjpkaXJlY3RHUFIo
KSBjb25zdAogewotICAgIHJldHVybiBGVEw6OkxvY2F0aW9uOjpmb3JTdGFja21hcHMoc3RhY2tt
YXBzLCAqdGhpcykuZGlyZWN0R1BSKCk7CisgICAgcmV0dXJuIEZUTDo6TG9jYXRpb246OmZvclN0
YWNrbWFwcygwLCAqdGhpcykuZGlyZWN0R1BSKCk7CiB9CiAKIHZvaWQgU3RhY2tNYXBzOjpMb2Nh
dGlvbjo6cmVzdG9yZUludG8oCiAgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgU3RhY2tNYXBzJiBz
dGFja21hcHMsIGNoYXIqIHNhdmVkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0KSBjb25zdAogewot
ICAgIEZUTDo6TG9jYXRpb246OmZvclN0YWNrbWFwcyhzdGFja21hcHMsICp0aGlzKS5yZXN0b3Jl
SW50byhqaXQsIHNhdmVkUmVnaXN0ZXJzLCByZXN1bHQpOworICAgIEZUTDo6TG9jYXRpb246OmZv
clN0YWNrbWFwcygmc3RhY2ttYXBzLCAqdGhpcykucmVzdG9yZUludG8oaml0LCBzYXZlZFJlZ2lz
dGVycywgcmVzdWx0KTsKIH0KIAogYm9vbCBTdGFja01hcHM6OlJlY29yZDo6cGFyc2UoRGF0YVZp
ZXcqIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YWNrTWFwcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU3RhY2tNYXBzLmgJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAg
c3RydWN0IFN0YWNrTWFwcyB7CiAgICAgICAgIHZvaWQgcGFyc2UoRGF0YVZpZXcqLCB1bnNpZ25l
ZCYgb2Zmc2V0KTsKICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owog
ICAgICAgICAKLSAgICAgICAgR1BSUmVnIGRpcmVjdEdQUihTdGFja01hcHMmKSBjb25zdDsKKyAg
ICAgICAgR1BSUmVnIGRpcmVjdEdQUigpIGNvbnN0OwogICAgICAgICB2b2lkIHJlc3RvcmVJbnRv
KE1hY3JvQXNzZW1ibGVyJiwgU3RhY2tNYXBzJiwgY2hhciogc2F2ZWRSZWdpc3RlcnMsIEdQUlJl
ZyByZXN1bHQpIGNvbnN0OwogICAgIH07CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0ZQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0ZQUkluZm8uaAkocmV2aXNpb24gMTU4OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9GUFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDEwIEBAIHB1YmxpYzoKICAg
ICB9CiAgICAgc3RhdGljIHVuc2lnbmVkIHRvSW5kZXgoRlBSUmVnIHJlZykKICAgICB7Ci0gICAg
ICAgIHJldHVybiAodW5zaWduZWQpcmVnOworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAodW5z
aWduZWQpcmVnOworICAgICAgICBpZiAocmVzdWx0ID49IG51bWJlck9mUmVnaXN0ZXJzKQorICAg
ICAgICAgICAgcmV0dXJuIEludmFsaWRJbmRleDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAgICAgCiAgICAgc3RhdGljIEZQUlJlZyB0b0FyZ3VtZW50UmVnaXN0ZXIodW5zaWduZWQg
aW5kZXgpCkBAIC0xMDIsNiArMTA1LDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIHJldHVy
biBuYW1lRm9yUmVnaXN0ZXJbcmVnXTsKICAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIEludmFsaWRJbmRleCA9IDB4ZmZmZmZmZmY7CiB9OwogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCShyZXZpc2lvbiAxNTg5ODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDIxLDkgKzQy
MSw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHJlZyAhPSBJbnZhbGlkR1BSUmVnKTsKICAg
ICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ocmVnKSA8IDE2KTsKICAgICAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGluZGV4Rm9yUmVnaXN0ZXJbMTZdID0geyAwLCAyLCAxLCAzLCBJbnZh
bGlkSW5kZXgsIEludmFsaWRJbmRleCwgNSwgNCwgNiwgNywgOCwgSW52YWxpZEluZGV4LCBJbnZh
bGlkSW5kZXgsIDksIEludmFsaWRJbmRleCwgSW52YWxpZEluZGV4IH07Ci0gICAgICAgIHVuc2ln
bmVkIHJlc3VsdCA9IGluZGV4Rm9yUmVnaXN0ZXJbcmVnXTsKLSAgICAgICAgQVNTRVJUKHJlc3Vs
dCAhPSBJbnZhbGlkSW5kZXgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1
cm4gaW5kZXhGb3JSZWdpc3RlcltyZWddOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBkZWJ1Z05hbWUoR1BSUmVnIHJlZykKQEAgLTQzOCw3ICs0MzYsNiBAQCBwdWJsaWM6CiAgICAg
ICAgIH07CiAgICAgICAgIHJldHVybiBuYW1lRm9yUmVnaXN0ZXJbcmVnXTsKICAgICB9Ci1wcml2
YXRlOgogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEludmFsaWRJbmRleCA9IDB4ZmZmZmZm
ZmY7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2
aXNpb24gMTU4OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC04MSw2ICs4MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGdldChG
UFJSZWcgcmVnKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5nZXQoTWFjcm9Bc3NlbWJsZXI6OnJl
Z2lzdGVySW5kZXgocmVnKSk7IH0KICAgICAKICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ2lzdGVy
U2V0JiBvdGhlcikgeyBtX3ZlY3Rvci5tZXJnZShvdGhlci5tX3ZlY3Rvcik7IH0KKyAgICB2b2lk
IGZpbHRlcihjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsgbV92ZWN0b3IuZmlsdGVyKG90aGVy
Lm1fdmVjdG9yKTsgfQogICAgIHZvaWQgZXhjbHVkZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIp
IHsgbV92ZWN0b3IuZXhjbHVkZShvdGhlci5tX3ZlY3Rvcik7IH0KICAgICAKICAgICBzaXplX3Qg
bnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5iaXRDb3VudCgp
OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDkgKzQ0LDIxIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2RpZFJldXNlUmVnaXN0ZXJzKGZhbHNl
KQogICAgIHsKICAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lk
IGxvY2soVCByZWcpIHsgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KHJlZyk7IH0KKworICAgIHZvaWQg
bG9jayhHUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBHUFJJbmZv
Ojp0b0luZGV4KHJlZyk7CisgICAgICAgIGlmIChpbmRleCA9PSBHUFJJbmZvOjpJbnZhbGlkSW5k
ZXgpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldEdQ
UkJ5SW5kZXgoaW5kZXgpOworICAgIH0KKyAgICB2b2lkIGxvY2soRlBSUmVnIHJlZykKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gRlBSSW5mbzo6dG9JbmRleChyZWcpOworICAgICAg
ICBpZiAoaW5kZXggPT0gRlBSSW5mbzo6SW52YWxpZEluZGV4KQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBtX2xvY2tlZFJlZ2lzdGVycy5zZXRGUFJCeUluZGV4KGluZGV4KTsKKyAgICB9
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CiAgICAgdHlwZW5hbWUgQmFu
a0luZm86OlJlZ2lzdGVyVHlwZSBhbGxvY2F0ZVNjcmF0Y2goKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216495</attachid>
            <date>2013-11-09 13:09:58 -0800</date>
            <delta_ts>2013-11-09 13:56:59 -0800</delta_ts>
            <desc>crashes later than before</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23873</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsMTEgKzM0LDEyIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgTWFjcm9B
c3NlbWJsZXJYODZDb21tb24gOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxYODZBc3Nl
bWJsZXI+IHsKLXByb3RlY3RlZDoKK3B1YmxpYzoKICNpZiBDUFUoWDg2XzY0KQogICAgIHN0YXRp
YyBjb25zdCBYODZSZWdpc3RlcnM6OlJlZ2lzdGVySUQgc2NyYXRjaFJlZ2lzdGVyID0gWDg2UmVn
aXN0ZXJzOjpyMTE7CiAjZW5kaWYKIAorcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCBpbnQg
RG91YmxlQ29uZGl0aW9uQml0SW52ZXJ0ID0gMHgxMDsKICAgICBzdGF0aWMgY29uc3QgaW50IERv
dWJsZUNvbmRpdGlvbkJpdFNwZWNpYWwgPSAweDIwOwogICAgIHN0YXRpYyBjb25zdCBpbnQgRG91
YmxlQ29uZGl0aW9uQml0cyA9IERvdWJsZUNvbmRpdGlvbkJpdEludmVydCB8IERvdWJsZUNvbmRp
dGlvbkJpdFNwZWNpYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJl
dmlhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
YnJldmlhdGlvbnMuaAkocmV2aXNpb24gMTU4OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3MSw2ICsyNzEsNyBA
QCBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgCiB9CiBlbnVtIFRhaWxD
YWxsTW9kZSB7IElzTm90VGFpbENhbGwsIElzVGFpbENhbGwgfTsKIHN0YXRpYyBpbmxpbmUgdm9p
ZCBzZXRUYWlsQ2FsbChMVmFsdWUgY2FsbCwgVGFpbENhbGxNb2RlIG1vZGUpIHsgbGx2bS0+U2V0
VGFpbENhbGwoY2FsbCwgbW9kZSA9PSBJc1RhaWxDYWxsKTsgfQorc3RhdGljIGlubGluZSB2b2lk
IHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oTFZhbHVlIGluc3RydWN0aW9uLCB1bnNp
Z25lZCBjYWxsaW5nQ29udmVudGlvbikgeyBsbHZtLT5TZXRJbnN0cnVjdGlvbkNhbGxDb252KGlu
c3RydWN0aW9uLCBjYWxsaW5nQ29udmVudGlvbik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1
aWxkRXh0cmFjdFZhbHVlKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBhZ2dWYWwsIHVuc2lnbmVk
IGluZGV4KSB7IHJldHVybiBsbHZtLT5CdWlsZEV4dHJhY3RWYWx1ZShidWlsZGVyLCBhZ2dWYWws
IGluZGV4LCAiIik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkU2VsZWN0KExCdWlsZGVy
IGJ1aWxkZXIsIExWYWx1ZSBjb25kaXRpb24sIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2Vu
KSB7IHJldHVybiBsbHZtLT5CdWlsZFNlbGVjdChidWlsZGVyLCBjb25kaXRpb24sIHRha2VuLCBu
b3RUYWtlbiwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEJyKExCdWlsZGVyIGJ1
aWxkZXIsIExCYXNpY0Jsb2NrIGRlc3RpbmF0aW9uKSB7IHJldHVybiBsbHZtLT5CdWlsZEJyKGJ1
aWxkZXIsIGRlc3RpbmF0aW9uKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYWxsaW5nQ29udmVudGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhbGxpbmdDb252ZW50aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYWxsaW5nQ29udmVudGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRlRMQ2FsbGluZ0NvbnZlbnRpb25zX2gKKyNkZWZpbmUgRlRMQ2FsbGlu
Z0NvbnZlbnRpb25zX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeyBuYW1lc3Bh
Y2UgQ2FsbGluZ0NvbnZlbnRpb25zIHsKKworaW5saW5lIHVuc2lnbmVkIHdlYktpdEpTKCkgeyBy
ZXR1cm4gMTI7IH0KK2lubGluZSB1bnNpZ25lZCBhbnlSZWcoKSB7IHJldHVybiAxMzsgfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEw6OkNhbGxpbmdDb252ZW50aW9ucworCisjZW5kaWYg
Ly8gRlRMQ2FsbGluZ0NvbnZlbnRpb25zX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsMTQgKzE4OCwx
MiBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHJlY29yZCk7IC8vIEZJWE1F
OiB1c2UgQW55UmVncy4KLQogICAgICAgICAgICAgLy8gRklYTUU6IExMVk0gc2hvdWxkIHRlbGwg
dXMgd2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLgogICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgR1BSUmVnIGNhbGxGcmFtZVJlZ2lzdGVyID0gR1BSSW5mbzo6YXJndW1lbnRH
UFIwOwotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7Ci0g
ICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFI7CisgICAg
ICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVjb3JkLmxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBjYWxsRnJhbWVSZWdpc3RlciA9IHJlY29yZC5sb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlY29yZC5sb2NhdGlv
bnNbMl0uZGlyZWN0R1BSKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuKAogICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgZ2V0QnlJZC5jb2RlT3Jp
Z2luKCksIHVzZWRSZWdpc3RlcnMsIGNhbGxGcmFtZVJlZ2lzdGVyLApAQCAtMjI0LDE5ICsyMjIs
MTcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWU7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFVOVVNFRF9QQVJBTShyZWNvcmQpOyAvLyBGSVhN
RTogdXNlIEFueVJlZ3MuCi0KICAgICAgICAgICAgIC8vIEZJWE1FOiBMTFZNIHNob3VsZCB0ZWxs
IHVzIHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4KICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVz
ZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIEdQUlJlZyBjYWxsRnJhbWVSZWdpc3RlciA9IEdQUkluZm86OmFyZ3VtZW50
R1BSMDsKLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOwot
ICAgICAgICAgICAgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6YXJndW1lbnRHUFIyOworICAgICAg
ICAgICAgR1BSUmVnIGNhbGxGcmFtZVJlZ2lzdGVyID0gcmVjb3JkLmxvY2F0aW9uc1swXS5kaXJl
Y3RHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVjb3JkLmxvY2F0aW9uc1sxXS5k
aXJlY3RHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlY29yZC5sb2NhdGlvbnNb
Ml0uZGlyZWN0R1BSKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgZ2VuKAogICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgcHV0QnlJZC5jb2RlT3JpZ2lu
KCksIHVzZWRSZWdpc3RlcnMsIGNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgICAgIEpT
VmFsdWVSZWdzKGJhc2UpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIEdQUkluZm86OmFyZ3VtZW50R1BS
MywgZmFsc2UsCi0gICAgICAgICAgICAgICAgcHV0QnlJZC5lY21hTW9kZSgpLCBwdXRCeUlkLnB1
dEtpbmQoKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZSksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgTWFjcm9Bc3NlbWJsZXI6OnNjcmF0Y2hSZWdpc3RlciwKKyAgICAgICAgICAgICAg
ICBmYWxzZSwgcHV0QnlJZC5lY21hTW9kZSgpLCBwdXRCeUlkLnB1dEtpbmQoKSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBiZWdpbiA9IHNsb3dQYXRo
SklULmxhYmVsKCk7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsMzggKzMzLDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKIAotc3RhdGljIHNpemVfdCBzX3NpemVPZkdldEJ5SWQ7Ci1zdGF0aWMgc2l6ZV90IHNfc2l6
ZU9mUHV0QnlJZDsKLQogc2l6ZV90IHNpemVPZkdldEJ5SWQoKQogewotICAgIGlmIChzX3NpemVP
ZkdldEJ5SWQpCi0gICAgICAgIHJldHVybiBzX3NpemVPZkdldEJ5SWQ7Ci0gICAgCi0gICAgTWFj
cm9Bc3NlbWJsZXIgaml0OwotICAgIAotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuZXJhdG9y
KAotICAgICAgICAwLCBDb2RlT3JpZ2luKCksIFJlZ2lzdGVyU2V0KCksIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLAotICAgICAgICBKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNiksIEpTVmFs
dWVSZWdzKEdQUkluZm86OnJlZ1Q3KSwgZmFsc2UpOwotICAgIGdlbmVyYXRvci5nZW5lcmF0ZUZh
c3RQYXRoKGppdCk7Ci0gICAgCi0gICAgcmV0dXJuIHNfc2l6ZU9mR2V0QnlJZCA9IGppdC5tX2Fz
c2VtYmxlci5jb2RlU2l6ZSgpOworICAgIHJldHVybiAyODsKIH0KIAogc2l6ZV90IHNpemVPZlB1
dEJ5SWQoKQogewotICAgIGlmIChzX3NpemVPZlB1dEJ5SWQpCi0gICAgICAgIHJldHVybiBzX3Np
emVPZlB1dEJ5SWQ7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXIgaml0OwotICAgIAotICAgIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IgZ2VuZXJhdG9yKAotICAgICAgICAwLCBDb2RlT3JpZ2luKCksIFJl
Z2lzdGVyU2V0KCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICBKU1ZhbHVl
UmVncyhHUFJJbmZvOjpyZWdUNiksIEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q3KSwgR1BSSW5m
bzo6cmVnVDgsIGZhbHNlLAotICAgICAgICBOb3RTdHJpY3RNb2RlLCBOb3REaXJlY3QpOwotICAg
IGdlbmVyYXRvci5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7Ci0gICAgCi0gICAgcmV0dXJuIHNfc2l6
ZU9mUHV0QnlJZCA9IGppdC5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOworICAgIHJldHVybiAzMjsK
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMTU4OTg0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03NSw3ICs3NSw3IEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkK
ICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCgKICAgICAgICAgICAgICAgICAgICAg
bV9wbGFuLnZtLmZ0bFRodW5rcy0+Z2V0T1NSRXhpdEdlbmVyYXRpb25UaHVuaygKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fcGxhbi52bSwgTG9jYXRpb246OmZvclN0YWNrbWFwcygKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXRDb2RlLT5zdGFja21hcHMsIGl0ZXItPnZhbHVlLmxv
Y2F0aW9uc1swXSkpLmNvZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICZqaXRD
b2RlLT5zdGFja21hcHMsIGl0ZXItPnZhbHVlLmxvY2F0aW9uc1swXSkpLmNvZGUoKSkpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBqaXRDb2RlLT5pbml0aWFsaXplRXhpdFRodW5rcygK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uY3BwCShyZXZpc2lv
biAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CiAKLUxvY2F0aW9uIExvY2F0aW9uOjpmb3JTdGFja21hcHMoY29uc3QgU3RhY2tN
YXBzJiBzdGFja21hcHMsIGNvbnN0IFN0YWNrTWFwczo6TG9jYXRpb24mIGxvY2F0aW9uKQorTG9j
YXRpb24gTG9jYXRpb246OmZvclN0YWNrbWFwcyhjb25zdCBTdGFja01hcHMqIHN0YWNrbWFwcywg
Y29uc3QgU3RhY2tNYXBzOjpMb2NhdGlvbiYgbG9jYXRpb24pCiB7CiAgICAgc3dpdGNoIChsb2Nh
dGlvbi5raW5kKSB7CiAgICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpVbnByb2Nlc3NlZDoK
QEAgLTUzLDcgKzUzLDggQEAgTG9jYXRpb24gTG9jYXRpb246OmZvclN0YWNrbWFwcyhjb25zdCBT
dAogICAgICAgICByZXR1cm4gZm9yQ29uc3RhbnQobG9jYXRpb24ub2Zmc2V0KTsKICAgICAgICAg
CiAgICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpDb25zdGFudEluZGV4OgotICAgICAgICBy
ZXR1cm4gZm9yQ29uc3RhbnQoc3RhY2ttYXBzLmNvbnN0YW50c1tsb2NhdGlvbi5vZmZzZXRdLmlu
dGVnZXIpOworICAgICAgICBBU1NFUlQoc3RhY2ttYXBzKTsKKyAgICAgICAgcmV0dXJuIGZvckNv
bnN0YW50KHN0YWNrbWFwcy0+Y29uc3RhbnRzW2xvY2F0aW9uLm9mZnNldF0uaW50ZWdlcik7CiAg
ICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5oCShyZXZpc2lvbiAxNTg5ODQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg0LDcgKzg0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAot
ICAgIHN0YXRpYyBMb2NhdGlvbiBmb3JTdGFja21hcHMoY29uc3QgU3RhY2tNYXBzJiwgY29uc3Qg
U3RhY2tNYXBzOjpMb2NhdGlvbiYpOworICAgIC8vIFlvdSBjYW4gcGFzcyBhIG51bGwgU3RhY2tN
YXBzIGlmIHlvdSBhcmUgY29uZmlkZW50IHRoYXQgdGhlIGxvY2F0aW9uIGRvZXNuJ3QKKyAgICAv
LyBpbnZvbHZlIGEgd2lkZSBjb25zdGFudC4KKyAgICBzdGF0aWMgTG9jYXRpb24gZm9yU3RhY2tt
YXBzKGNvbnN0IFN0YWNrTWFwcyosIGNvbnN0IFN0YWNrTWFwczo6TG9jYXRpb24mKTsKICAgICAK
ICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZp
c2lvbiAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuaCIKICNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCisjaW5jbHVk
ZSAiRlRMQ2FsbGluZ0NvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRD
b2RlLmgiCiAjaW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKICNpbmNsdWRlICJGVExJbmxp
bmVDYWNoZVNpemUuaCIKQEAgLTEyNzUsMTAgKzEyNzYsMTIgQEAgcHJpdmF0ZToKIAogICAgICAg
ICAvLyBBcmd1bWVudHM6IGlkLCBieXRlcywgdGFyZ2V0LCBudW1BcmdzLCBhcmdzLi4uCiAgICAg
ICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7Ci0gICAgICAgIHNldEpT
VmFsdWUobV9vdXQuY2FsbCgKKyAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAogICAg
ICAgICAgICAgbV9vdXQucGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksCiAgICAgICAgICAgICBt
X291dC5jb25zdEludDMyKHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkdldEJ5
SWQoKSksCi0gICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50
MzIoMiksIG1fY2FsbEZyYW1lLCBiYXNlKSk7CisgICAgICAgICAgICBjb25zdE51bGwobV9vdXQu
cmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMiksIG1fY2FsbEZyYW1lLCBiYXNlKTsKKyAgICAgICAg
c2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBDYWxsaW5nQ29udmVudGlvbnM6
OmFueVJlZygpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKICAgICAgICAgCiAgICAgICAg
IG1fZnRsU3RhdGUuZ2V0QnlJZHMuYXBwZW5kKEdldEJ5SWREZXNjcmlwdG9yKHN0YWNrbWFwSUQs
IG1fbm9kZS0+Y29kZU9yaWdpbiwgdWlkKSk7CiAgICAgfQpAQCAtMTI5NCwxMCArMTI5NywxMSBA
QCBwcml2YXRlOgogCiAgICAgICAgIC8vIEFyZ3VtZW50czogaWQsIGJ5dGVzLCB0YXJnZXQsIG51
bUFyZ3MsIGFyZ3MuLi4KICAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJ
RHMrKzsKLSAgICAgICAgbV9vdXQuY2FsbCgKKyAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5j
YWxsKAogICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludFZvaWRJbnRyaW5zaWMoKSwKICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50MzIoc2l6
ZU9mUHV0QnlJZCgpKSwKICAgICAgICAgICAgIGNvbnN0TnVsbChtX291dC5yZWY4KSwgbV9vdXQu
Y29uc3RJbnQzMigzKSwgbV9jYWxsRnJhbWUsIGJhc2UsIHZhbHVlKTsKKyAgICAgICAgc2V0SW5z
dHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBDYWxsaW5nQ29udmVudGlvbnM6OmFueVJl
ZygpKTsKICAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUucHV0QnlJZHMuYXBwZW5kKFB1dEJ5
SWREZXNjcmlwdG9yKAogICAgICAgICAgICAgc3RhY2ttYXBJRCwgbV9ub2RlLT5jb2RlT3JpZ2lu
LCB1aWQsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw4ICsxNzcs
OCBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICBleGl0Lm1fY29kZSA9IEZJTkFMSVpF
X0NPREVfSUYoCiAgICAgICAgIHNob3VsZFNob3dEaXNhc3NlbWJseSgpLAogICAgICAgICBwYXRj
aEJ1ZmZlciwKLSAgICAgICAgKCJGVEwgT1NSIGV4aXQgIyV1IChiYyMldSwgJXMpIGZyb20gJXMs
IHdpdGggb3BlcmFuZHMgPSAlcywgYW5kIHJlY29yZCA9ICVzIiwKLSAgICAgICAgICAgIGV4aXRJ
RCwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgKCJGVEwgT1NSIGV4
aXQgIyV1ICglcywgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMgPSAlcywgYW5kIHJlY29yZCA9
ICVzIiwKKyAgICAgICAgICAgIGV4aXRJRCwgdG9DU3RyaW5nKGV4aXQubV9jb2RlT3JpZ2luKS5k
YXRhKCksCiAgICAgICAgICAgICBleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3Ry
aW5nKCpjb2RlQmxvY2spLmRhdGEoKSwKICAgICAgICAgICAgIHRvQ1N0cmluZyhpZ25vcmluZ0Nv
bnRleHQ8RHVtcENvbnRleHQ+KGV4aXQubV92YWx1ZXMpKS5kYXRhKCksCiAgICAgICAgICAgICB0
b0NTdHJpbmcoKnJlY29yZCkuZGF0YSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCShyZXZpc2lvbiAxNTg5ODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDIwICs2NCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fb2Zmc2V0VG9TYXZpbmdBcmVhID0K
ICAgICAgICAgICAgIChzdGQ6Om1heChtX251bUFyZ3MsIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJ
U1RFUlMpIC0gTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUykgKiB3b3JkU2l6ZTsKICAgICAg
ICAgCi0gICAgICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50UmVnaXN0ZXJzVGhhdE5lZWRTYXZpbmcg
PSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihOVU1CRVJfT0ZfQVJHVU1F
TlRfUkVHSVNURVJTLCBudW1BcmdzKTsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fdXNlZFJl
Z2lzdGVycy5nZXQoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKSkKLSAgICAgICAgICAg
ICAgICBudW1Bcmd1bWVudFJlZ2lzdGVyc1RoYXROZWVkU2F2aW5nKys7Ci0gICAgICAgIH0KKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4oTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lT
VEVSUywgbnVtQXJncyk7IGktLTspCisgICAgICAgICAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVn
aXN0ZXJzLnNldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkpOworICAgICAgICBpZiAo
cmV0dXJuUmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1fY2FsbGluZ0Nv
bnZlbnRpb25SZWdpc3RlcnMuc2V0KEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
bV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5maWx0ZXIobV91c2VkUmVnaXN0ZXJzKTsKKyAg
ICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ2FsbGluZ0NvbnZlbnRpb25SZWdpc3Rl
cnMgPQorICAgICAgICAgICAgbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5udW1iZXJPZlNl
dFJlZ2lzdGVycygpOwogICAgICAgICAKICAgICAgICAgc2l6ZV90IG9mZnNldFRvVGh1bmtTYXZp
bmdBcmVhID0KICAgICAgICAgICAgIG1fb2Zmc2V0VG9TYXZpbmdBcmVhICsKLSAgICAgICAgICAg
IG51bUFyZ3VtZW50UmVnaXN0ZXJzVGhhdE5lZWRTYXZpbmcgKiB3b3JkU2l6ZTsKKyAgICAgICAg
ICAgIG51bWJlck9mQ2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMgKiB3b3JkU2l6ZTsKICAgICAg
ICAgCiAgICAgICAgIG1fc3RhY2tCeXRlc05lZWRlZCA9CiAgICAgICAgICAgICBvZmZzZXRUb1Ro
dW5rU2F2aW5nQXJlYSArCiAgICAgICAgICAgICBzdGFja0J5dGVzTmVlZGVkRm9yUmV0dXJuQWRk
cmVzcyArCi0gICAgICAgICAgICAobV91c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJz
KCkgLSBudW1Bcmd1bWVudFJlZ2lzdGVyc1RoYXROZWVkU2F2aW5nKSAqIHdvcmRTaXplOworICAg
ICAgICAgICAgKG1fdXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpIC0gbnVtYmVy
T2ZDYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycykgKiB3b3JkU2l6ZTsKICAgICAgICAgCiAgICAg
ICAgIHNpemVfdCBzdGFja0FsaWdubWVudCA9IDE2OwogICAgICAgICAKQEAgLTg3LDExICs5MCwx
MyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBtX3RodW5rU2F2ZVNldCA9IG1fdXNlZFJl
Z2lzdGVyczsKICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKE5V
TUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMsIG51bUFyZ3MpOyBpLS07KSB7Ci0gICAgICAgICAg
ICBpZiAoIW1fdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkp
KSkKKyAgICAgICAgLy8gVGhpcyByZWxpZXMgb24gYWxsIGNhbGxpbmcgY29udmVudGlvbiByZWdp
c3RlcnMgYWxzbyBiZWluZyB0ZW1wIHJlZ2lzdGVycy4KKyAgICAgICAgdW5zaWduZWQgc3RhY2tJ
bmRleCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9SZWdp
c3RlcihpKTsKKyAgICAgICAgICAgIGlmICghbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5n
ZXQocmVnKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEdQUlJlZyBy
ZWcgPSBHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSk7Ci0gICAgICAgICAgICBtX2ppdC5z
dG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBtX29mZnNldFRvU2F2aW5nQXJlYSArIGkgKiB3b3JkU2l6ZSkpOworICAg
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxI
ZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyAoc3Rh
Y2tJbmRleCsrKSAqIHdvcmRTaXplKSk7CiAgICAgICAgICAgICBtX3RodW5rU2F2ZVNldC5jbGVh
cihyZWcpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTAzLDExICsxMDgsMTIgQEAgcHVibGlj
OgogICAgICAgICBpZiAobV9yZXR1cm5SZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQogICAgICAg
ICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgbV9yZXR1cm5SZWdpc3Rl
cik7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihOVU1CRVJf
T0ZfQVJHVU1FTlRfUkVHSVNURVJTLCBtX251bUFyZ3MpOyBpLS07KSB7Ci0gICAgICAgICAgICBp
ZiAoIW1fdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKSkK
KyAgICAgICAgdW5zaWduZWQgc3RhY2tJbmRleCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBHUFJS
ZWcgcmVnID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgICAgIGlmICghbV9jYWxs
aW5nQ29udmVudGlvblJlZ2lzdGVycy5nZXQocmVnKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIo
aSk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRvU2F2aW5nQXJlYSArIGkg
KiB3b3JkU2l6ZSksIHJlZyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRv
U2F2aW5nQXJlYSArIChzdGFja0luZGV4KyspICogd29yZFNpemUpLCByZWcpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBtX2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIobV9zdGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CkBAIC0xMzksNiArMTQ1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTdGF0ZSYgbV9z
dGF0ZTsKICAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CisgICAgUmVnaXN0ZXJTZXQg
bV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVyczsKICAgICBDQ2FsbEhlbHBlcnMmIG1faml0Owog
ICAgIHVuc2lnbmVkIG1fbnVtQXJnczsKICAgICBHUFJSZWcgbV9yZXR1cm5SZWdpc3RlcjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHJldmlzaW9u
IDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjYsMTUgKzY2LDE1IEBAIHZvaWQgU3RhY2tNYXBzOjpMb2NhdGlv
bjo6ZHVtcChQcmludFN0cmUKICAgICBvdXQucHJpbnQoIigiLCBraW5kLCAiLCByZWciLCBkd2Fy
ZlJlZ051bSwgIiwgIiwgb2Zmc2V0LCAiKSIpOwogfQogCi1HUFJSZWcgU3RhY2tNYXBzOjpMb2Nh
dGlvbjo6ZGlyZWN0R1BSKFN0YWNrTWFwcyYgc3RhY2ttYXBzKSBjb25zdAorR1BSUmVnIFN0YWNr
TWFwczo6TG9jYXRpb246OmRpcmVjdEdQUigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEZUTDo6TG9j
YXRpb246OmZvclN0YWNrbWFwcyhzdGFja21hcHMsICp0aGlzKS5kaXJlY3RHUFIoKTsKKyAgICBy
ZXR1cm4gRlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKDAsICp0aGlzKS5kaXJlY3RHUFIoKTsK
IH0KIAogdm9pZCBTdGFja01hcHM6OkxvY2F0aW9uOjpyZXN0b3JlSW50bygKICAgICBNYWNyb0Fz
c2VtYmxlciYgaml0LCBTdGFja01hcHMmIHN0YWNrbWFwcywgY2hhciogc2F2ZWRSZWdpc3RlcnMs
IEdQUlJlZyByZXN1bHQpIGNvbnN0CiB7Ci0gICAgRlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2ttYXBz
KHN0YWNrbWFwcywgKnRoaXMpLnJlc3RvcmVJbnRvKGppdCwgc2F2ZWRSZWdpc3RlcnMsIHJlc3Vs
dCk7CisgICAgRlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKCZzdGFja21hcHMsICp0aGlzKS5y
ZXN0b3JlSW50byhqaXQsIHNhdmVkUmVnaXN0ZXJzLCByZXN1bHQpOwogfQogCiBib29sIFN0YWNr
TWFwczo6UmVjb3JkOjpwYXJzZShEYXRhVmlldyogdmlldywgdW5zaWduZWQmIG9mZnNldCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAkocmV2aXNpb24gMTU4
OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBzdHJ1Y3QgU3RhY2tNYXBzIHsKICAgICAgICAgdm9p
ZCBwYXJzZShEYXRhVmlldyosIHVuc2lnbmVkJiBvZmZzZXQpOwogICAgICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgICAgIAotICAgICAgICBHUFJSZWcgZGlyZWN0
R1BSKFN0YWNrTWFwcyYpIGNvbnN0OworICAgICAgICBHUFJSZWcgZGlyZWN0R1BSKCkgY29uc3Q7
CiAgICAgICAgIHZvaWQgcmVzdG9yZUludG8oTWFjcm9Bc3NlbWJsZXImLCBTdGFja01hcHMmLCBj
aGFyKiBzYXZlZFJlZ2lzdGVycywgR1BSUmVnIHJlc3VsdCkgY29uc3Q7CiAgICAgfTsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRlBSSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRlBSSW5mby5oCShyZXZpc2lvbiAxNTg5ODQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ZQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
NzQsNyArNzQsMTAgQEAgcHVibGljOgogICAgIH0KICAgICBzdGF0aWMgdW5zaWduZWQgdG9JbmRl
eChGUFJSZWcgcmVnKQogICAgIHsKLSAgICAgICAgcmV0dXJuICh1bnNpZ25lZClyZWc7CisgICAg
ICAgIHVuc2lnbmVkIHJlc3VsdCA9ICh1bnNpZ25lZClyZWc7CisgICAgICAgIGlmIChyZXN1bHQg
Pj0gbnVtYmVyT2ZSZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1cm4gSW52YWxpZEluZGV4Owor
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICBzdGF0aWMgRlBSUmVnIHRv
QXJndW1lbnRSZWdpc3Rlcih1bnNpZ25lZCBpbmRleCkKQEAgLTEwMiw2ICsxMDUsOCBAQCBwdWJs
aWM6CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIG5hbWVGb3JSZWdpc3RlcltyZWddOwogICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSW52YWxpZEluZGV4ID0gMHhmZmZmZmZm
ZjsKIH07CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHJl
dmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MjEsOSArNDIxLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQo
cmVnICE9IEludmFsaWRHUFJSZWcpOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50Pihy
ZWcpIDwgMTYpOwogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5kZXhGb3JSZWdpc3Rl
clsxNl0gPSB7IDAsIDIsIDEsIDMsIEludmFsaWRJbmRleCwgSW52YWxpZEluZGV4LCA1LCA0LCA2
LCA3LCA4LCBJbnZhbGlkSW5kZXgsIEludmFsaWRJbmRleCwgOSwgSW52YWxpZEluZGV4LCBJbnZh
bGlkSW5kZXggfTsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gaW5kZXhGb3JSZWdpc3Rlclty
ZWddOwotICAgICAgICBBU1NFUlQocmVzdWx0ICE9IEludmFsaWRJbmRleCk7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBpbmRleEZvclJlZ2lzdGVyW3JlZ107CiAgICAg
fQogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlYnVnTmFtZShHUFJSZWcgcmVnKQpAQCAtNDM4
LDcgKzQzNiw2IEBAIHB1YmxpYzoKICAgICAgICAgfTsKICAgICAgICAgcmV0dXJuIG5hbWVGb3JS
ZWdpc3RlcltyZWddOwogICAgIH0KLXByaXZhdGU6CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgSW52YWxpZEluZGV4ID0gMHhmZmZmZmZmZjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAkocmV2aXNpb24gMTU4OTg0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcg
KzU5LDYgQEAgUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpcwogI2lmIENQ
VShYODZfNjQpCiAgICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6OmVieCk7CiAgICAgcmVzdWx0
LnNldChYODZSZWdpc3RlcnM6OmVicCk7Ci0gICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6OnIx
MCk7CiAgICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6OnIxMik7CiAgICAgcmVzdWx0LnNldChY
ODZSZWdpc3RlcnM6OnIxMyk7CiAgICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6OnIxNCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAxNTg5
ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgxLDYgKzgxLDcgQEAgcHVibGljOgogICAgIGJvb2wgZ2V0KEZQUlJlZyByZWcp
IGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmdldChNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRl
eChyZWcpKTsgfQogICAgIAogICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVy
KSB7IG1fdmVjdG9yLm1lcmdlKG90aGVyLm1fdmVjdG9yKTsgfQorICAgIHZvaWQgZmlsdGVyKGNv
bnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX3ZlY3Rvci5maWx0ZXIob3RoZXIubV92ZWN0b3Ip
OyB9CiAgICAgdm9pZCBleGNsdWRlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX3ZlY3Rv
ci5leGNsdWRlKG90aGVyLm1fdmVjdG9yKTsgfQogICAgIAogICAgIHNpemVfdCBudW1iZXJPZlNl
dFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmJpdENvdW50KCk7IH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuaAkocmV2aXNpb24gMTU4OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9T
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsMjEg
QEAgcHVibGljOgogICAgICAgICAsIG1fZGlkUmV1c2VSZWdpc3RlcnMoZmFsc2UpCiAgICAgewog
ICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgbG9jayhUIHJl
ZykgeyBtX2xvY2tlZFJlZ2lzdGVycy5zZXQocmVnKTsgfQorCisgICAgdm9pZCBsb2NrKEdQUlJl
ZyByZWcpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IEdQUkluZm86OnRvSW5kZXgo
cmVnKTsKKyAgICAgICAgaWYgKGluZGV4ID09IEdQUkluZm86OkludmFsaWRJbmRleCkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0R1BSQnlJbmRleChp
bmRleCk7CisgICAgfQorICAgIHZvaWQgbG9jayhGUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAg
dW5zaWduZWQgaW5kZXggPSBGUFJJbmZvOjp0b0luZGV4KHJlZyk7CisgICAgICAgIGlmIChpbmRl
eCA9PSBGUFJJbmZvOjpJbnZhbGlkSW5kZXgpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IG1fbG9ja2VkUmVnaXN0ZXJzLnNldEZQUkJ5SW5kZXgoaW5kZXgpOworICAgIH0KICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4KICAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVn
aXN0ZXJUeXBlIGFsbG9jYXRlU2NyYXRjaCgpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAJKHJldmlz
aW9uIDE1ODk4NCkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNCw2ICsxMjQsMzEgQEAgdm9pZCBCaXRWZWN0b3I6Om1lcmdlU2xvdyhjb25zdCBC
aXRWZWN0bwogICAgICAgICBhLT5iaXRzKClbaV0gfD0gYi0+Yml0cygpW2ldOwogfQogCit2b2lk
IEJpdFZlY3Rvcjo6ZmlsdGVyU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKQoreworICAgIGlm
IChvdGhlci5pc0lubGluZSgpKSB7CisgICAgICAgIEFTU0VSVCghaXNJbmxpbmUoKSk7CisgICAg
ICAgICpiaXRzKCkgJj0gY2xlYW5zZUlubGluZUJpdHMob3RoZXIubV9iaXRzT3JQb2ludGVyKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoaXNJbmxpbmUoKSkgeworICAg
ICAgICBBU1NFUlQoIW90aGVyLmlzSW5saW5lKCkpOworICAgICAgICBtX2JpdHNPclBvaW50ZXIg
Jj0gKm90aGVyLm91dE9mTGluZUJpdHMoKS0+Yml0cygpOworICAgICAgICBtX2JpdHNPclBvaW50
ZXIgfD0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0cygpKTsKKyAg
ICAgICAgQVNTRVJUKGlzSW5saW5lKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIE91dE9mTGluZUJpdHMqIGEgPSBvdXRPZkxpbmVCaXRzKCk7CisgICAgY29uc3QgT3V0T2ZM
aW5lQml0cyogYiA9IG90aGVyLm91dE9mTGluZUJpdHMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBzdGQ6Om1pbihhLT5udW1Xb3JkcygpLCBiLT5udW1Xb3JkcygpKTsgaS0tOykKKyAgICAgICAg
YS0+Yml0cygpW2ldICY9IGItPmJpdHMoKVtpXTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBiLT5udW1Xb3JkcygpOyBpIDwgYS0+bnVtV29yZHMoKTsgKytpKQorICAgICAgICBhLT5iaXRz
KClbaV0gPSAwOworfQorCiB2b2lkIEJpdFZlY3Rvcjo6ZXhjbHVkZVNsb3coY29uc3QgQml0VmVj
dG9yJiBvdGhlcikKIHsKICAgICBpZiAob3RoZXIuaXNJbmxpbmUoKSkgewpJbmRleDogU291cmNl
L1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0VmVj
dG9yLmgJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODEsNiArMTgxLDE2IEBAIHB1YmxpYzogCiAgICAgICAgIEFTU0VS
VChpc0lubGluZSgpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBmaWx0ZXIoY29uc3QgQml0VmVj
dG9yJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghaXNJbmxpbmUoKSB8fCAhb3RoZXIuaXNJ
bmxpbmUoKSkgeworICAgICAgICAgICAgZmlsdGVyU2xvdyhvdGhlcik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9iaXRzT3JQb2ludGVyICY9IG90aGVyLm1fYml0
c09yUG9pbnRlcjsKKyAgICAgICAgQVNTRVJUKGlzSW5saW5lKCkpOworICAgIH0KKyAgICAKICAg
ICB2b2lkIGV4Y2x1ZGUoY29uc3QgQml0VmVjdG9yJiBvdGhlcikKICAgICB7CiAgICAgICAgIGlm
ICghaXNJbmxpbmUoKSB8fCAhb3RoZXIuaXNJbmxpbmUoKSkgewpAQCAtMzAyLDYgKzMxMiw3IEBA
IHByaXZhdGU6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0U2xvdyhjb25zdCBCaXRW
ZWN0b3ImIG90aGVyKTsKICAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZVNs
b3coY29uc3QgQml0VmVjdG9yJiBvdGhlcik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZmlsdGVyU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKTsKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBleGNsdWRlU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKTsKICAgICAKICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGJpdENvdW50U2xvdygpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216497</attachid>
            <date>2013-11-09 13:56:59 -0800</date>
            <delta_ts>2013-11-09 16:44:43 -0800</delta_ts>
            <desc>slowly making it work and stuff</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>29201</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMTU4OTg0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpA
QCAtMzM0LDExICszMzQsNDEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgZHVtcFdpdGhOYW1l
KCJDb2RlUHRyIiwgb3V0KTsKICAgICB9CisgICAgCisgICAgZW51bSBFbXB0eVZhbHVlVGFnIHsg
RW1wdHlWYWx1ZSB9OworICAgIGVudW0gRGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07
CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKEVtcHR5VmFsdWVUYWcpCisgICAgICAg
IDogbV92YWx1ZShlbXB0eVZhbHVlKCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIoRGVsZXRlZFZhbHVlVGFnKQorICAgICAgICA6IG1fdmFsdWUoZGVsZXRl
ZFZhbHVlKCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWUgPSBlbXB0eVZhbHVlKCk7IH0KKyAgICBib29sIGlzRGVsZXRl
ZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA9IGRlbGV0ZWRWYWx1ZSgpOyB9CisgICAg
CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIFB0ckhhc2g8dm9pZCo+OjpoYXNo
KG1fdmFsdWUpOyB9CiAKIHByaXZhdGU6CisgICAgc3RhdGljIHZvaWQqIGVtcHR5VmFsdWUoKSB7
IHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PigxKSk7IH0K
KyAgICBzdGF0aWMgdm9pZCogZGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PHZv
aWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMikpOyB9CisgICAgCiAgICAgdm9pZCogbV92YWx1
ZTsKIH07CiAKK3N0cnVjdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNoIHsKKyAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHB0cikgeyByZXR1cm4g
cHRyLmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciYgYSwgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBiKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGEgPT0gYjsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwogLy8gTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOgogLy8KIC8vIEEgcmVmZXJlbmNlIHRvIGEgc2VjdGlvbiBvZiBKSVQgZ2VuZXJhdGVkIGNv
ZGUuICBBIENvZGVSZWYgY29uc2lzdHMgb2YgYQpAQCAtNDIwLDQgKzQ1MCwxNiBAQCBwcml2YXRl
OgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRI
YXNoPEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPiB7CisgICAgdHlwZWRlZiBKU0M6Ok1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6TWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPEpTQzo6TWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDE1ODk4
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDEyIEBACiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgTWFjcm9Bc3NlbWJsZXJYODZDb21tb24gOiBwdWJsaWMgQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlcjxYODZBc3NlbWJsZXI+IHsKLXByb3RlY3RlZDoKK3B1YmxpYzoKICNpZiBDUFUo
WDg2XzY0KQogICAgIHN0YXRpYyBjb25zdCBYODZSZWdpc3RlcnM6OlJlZ2lzdGVySUQgc2NyYXRj
aFJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjpyMTE7CiAjZW5kaWYKIAorcHJvdGVjdGVkOgogICAg
IHN0YXRpYyBjb25zdCBpbnQgRG91YmxlQ29uZGl0aW9uQml0SW52ZXJ0ID0gMHgxMDsKICAgICBz
dGF0aWMgY29uc3QgaW50IERvdWJsZUNvbmRpdGlvbkJpdFNwZWNpYWwgPSAweDIwOwogICAgIHN0
YXRpYyBjb25zdCBpbnQgRG91YmxlQ29uZGl0aW9uQml0cyA9IERvdWJsZUNvbmRpdGlvbkJpdElu
dmVydCB8IERvdWJsZUNvbmRpdGlvbkJpdFNwZWNpYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAkocmV2aXNpb24gMTU4OTg0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3MSw2ICsyNzEsNyBAQCBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxk
ZXIgCiB9CiBlbnVtIFRhaWxDYWxsTW9kZSB7IElzTm90VGFpbENhbGwsIElzVGFpbENhbGwgfTsK
IHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRUYWlsQ2FsbChMVmFsdWUgY2FsbCwgVGFpbENhbGxNb2Rl
IG1vZGUpIHsgbGx2bS0+U2V0VGFpbENhbGwoY2FsbCwgbW9kZSA9PSBJc1RhaWxDYWxsKTsgfQor
c3RhdGljIGlubGluZSB2b2lkIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oTFZhbHVl
IGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsaW5nQ29udmVudGlvbikgeyBsbHZtLT5TZXRJbnN0
cnVjdGlvbkNhbGxDb252KGluc3RydWN0aW9uLCBjYWxsaW5nQ29udmVudGlvbik7IH0KIHN0YXRp
YyBpbmxpbmUgTFZhbHVlIGJ1aWxkRXh0cmFjdFZhbHVlKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1
ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBsbHZtLT5CdWlsZEV4dHJhY3RWYWx1
ZShidWlsZGVyLCBhZ2dWYWwsIGluZGV4LCAiIik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1
aWxkU2VsZWN0KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBjb25kaXRpb24sIExWYWx1ZSB0YWtl
biwgTFZhbHVlIG5vdFRha2VuKSB7IHJldHVybiBsbHZtLT5CdWlsZFNlbGVjdChidWlsZGVyLCBj
b25kaXRpb24sIHRha2VuLCBub3RUYWtlbiwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBi
dWlsZEJyKExCdWlsZGVyIGJ1aWxkZXIsIExCYXNpY0Jsb2NrIGRlc3RpbmF0aW9uKSB7IHJldHVy
biBsbHZtLT5CdWlsZEJyKGJ1aWxkZXIsIGRlc3RpbmF0aW9uKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYWxsaW5nQ29udmVudGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhbGxpbmdDb252ZW50aW9ucy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYWxsaW5nQ29udmVudGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMQ2FsbGluZ0NvbnZlbnRpb25zX2gK
KyNkZWZpbmUgRlRMQ2FsbGluZ0NvbnZlbnRpb25zX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgeyBuYW1lc3BhY2UgQ2FsbGluZ0NvbnZlbnRpb25zIHsKKworaW5saW5lIHVuc2ln
bmVkIHdlYktpdEpTKCkgeyByZXR1cm4gMTI7IH0KK2lubGluZSB1bnNpZ25lZCBhbnlSZWcoKSB7
IHJldHVybiAxMzsgfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEw6OkNhbGxpbmdDb252
ZW50aW9ucworCisjZW5kaWYgLy8gRlRMQ2FsbGluZ0NvbnZlbnRpb25zX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxNTg5ODQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODgsMTQgKzE4OCwxMiBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFj
a01hcHMoCiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNv
cmQgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgVU5VU0VEX1BBUkFN
KHJlY29yZCk7IC8vIEZJWE1FOiB1c2UgQW55UmVncy4KLQogICAgICAgICAgICAgLy8gRklYTUU6
IExMVk0gc2hvdWxkIHRlbGwgdXMgd2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLgogICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMo
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGNhbGxGcmFtZVJlZ2lzdGVyID0g
R1BSSW5mbzo6YXJndW1lbnRHUFIwOwotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjE7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFI7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVjb3JkLmxvY2F0aW9u
c1swXS5kaXJlY3RHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBjYWxsRnJhbWVSZWdpc3RlciA9
IHJlY29yZC5sb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgYmFz
ZSA9IHJlY29yZC5sb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICAgICAgICAgIGNvZGVCbG9j
aywgZ2V0QnlJZC5jb2RlT3JpZ2luKCksIHVzZWRSZWdpc3RlcnMsIGNhbGxGcmFtZVJlZ2lzdGVy
LApAQCAtMjI0LDE5ICsyMjIsMTcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3Rh
Y2tNYXBzKAogICAgICAgICAgICAgCiAgICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVj
b3JkID0gaXRlci0+dmFsdWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFVOVVNFRF9QQVJB
TShyZWNvcmQpOyAvLyBGSVhNRTogdXNlIEFueVJlZ3MuCi0KICAgICAgICAgICAgIC8vIEZJWE1F
OiBMTFZNIHNob3VsZCB0ZWxsIHVzIHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4KICAgICAgICAg
ICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJz
KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBjYWxsRnJhbWVSZWdpc3RlciA9
IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gR1BSSW5m
bzo6YXJndW1lbnRHUFIxOwotICAgICAgICAgICAgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6YXJn
dW1lbnRHUFIyOworICAgICAgICAgICAgR1BSUmVnIGNhbGxGcmFtZVJlZ2lzdGVyID0gcmVjb3Jk
LmxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVj
b3JkLmxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZSA9
IHJlY29yZC5sb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICAgICAgICAgIGNvZGVCbG9jaywg
cHV0QnlJZC5jb2RlT3JpZ2luKCksIHVzZWRSZWdpc3RlcnMsIGNhbGxGcmFtZVJlZ2lzdGVyLAot
ICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2UpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMywgZmFsc2UsCi0gICAgICAgICAgICAgICAgcHV0QnlJZC5lY21h
TW9kZSgpLCBwdXRCeUlkLnB1dEtpbmQoKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
YmFzZSksIEpTVmFsdWVSZWdzKHZhbHVlKSwgTWFjcm9Bc3NlbWJsZXI6OnNjcmF0Y2hSZWdpc3Rl
ciwKKyAgICAgICAgICAgICAgICBmYWxzZSwgcHV0QnlJZC5lY21hTW9kZSgpLCBwdXRCeUlkLnB1
dEtpbmQoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBiZWdpbiA9IHNsb3dQYXRoSklULmxhYmVsKCk7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHJldmlz
aW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVT
aXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMzggKzMzLDE0IEBACiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKIAotc3RhdGljIHNpemVfdCBzX3NpemVPZkdldEJ5SWQ7Ci1z
dGF0aWMgc2l6ZV90IHNfc2l6ZU9mUHV0QnlJZDsKLQogc2l6ZV90IHNpemVPZkdldEJ5SWQoKQog
ewotICAgIGlmIChzX3NpemVPZkdldEJ5SWQpCi0gICAgICAgIHJldHVybiBzX3NpemVPZkdldEJ5
SWQ7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXIgaml0OwotICAgIAotICAgIEpJVEdldEJ5SWRH
ZW5lcmF0b3IgZ2VuZXJhdG9yKAotICAgICAgICAwLCBDb2RlT3JpZ2luKCksIFJlZ2lzdGVyU2V0
KCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICBKU1ZhbHVlUmVncyhHUFJJ
bmZvOjpyZWdUNiksIEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q3KSwgZmFsc2UpOwotICAgIGdl
bmVyYXRvci5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7Ci0gICAgCi0gICAgcmV0dXJuIHNfc2l6ZU9m
R2V0QnlJZCA9IGppdC5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOworICAgIHJldHVybiAyOTsKIH0K
IAogc2l6ZV90IHNpemVPZlB1dEJ5SWQoKQogewotICAgIGlmIChzX3NpemVPZlB1dEJ5SWQpCi0g
ICAgICAgIHJldHVybiBzX3NpemVPZlB1dEJ5SWQ7Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXIg
aml0OwotICAgIAotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuZXJhdG9yKAotICAgICAgICAw
LCBDb2RlT3JpZ2luKCksIFJlZ2lzdGVyU2V0KCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LAotICAgICAgICBKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNiksIEpTVmFsdWVSZWdzKEdQUklu
Zm86OnJlZ1Q3KSwgR1BSSW5mbzo6cmVnVDgsIGZhbHNlLAotICAgICAgICBOb3RTdHJpY3RNb2Rl
LCBOb3REaXJlY3QpOwotICAgIGdlbmVyYXRvci5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7Ci0gICAg
Ci0gICAgcmV0dXJuIHNfc2l6ZU9mUHV0QnlJZCA9IGppdC5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgp
OworICAgIHJldHVybiAzMjsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkocmV2aXNp
b24gMTU4OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIGJvb2wgSklURmluYWxpemVyOjpm
aW5hbGl6ZUZ1bmN0aW9uKCkKICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCgKICAg
ICAgICAgICAgICAgICAgICAgbV9wbGFuLnZtLmZ0bFRodW5rcy0+Z2V0T1NSRXhpdEdlbmVyYXRp
b25UaHVuaygKICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGxhbi52bSwgTG9jYXRpb246OmZv
clN0YWNrbWFwcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXRDb2RlLT5zdGFja21h
cHMsIGl0ZXItPnZhbHVlLmxvY2F0aW9uc1swXSkpLmNvZGUoKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZqaXRDb2RlLT5zdGFja21hcHMsIGl0ZXItPnZhbHVlLmxvY2F0aW9uc1sw
XSkpLmNvZGUoKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBqaXRDb2RlLT5pbml0
aWFsaXplRXhpdFRodW5rcygKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9j
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9j
YXRpb24uY3BwCShyZXZpc2lvbiAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKLUxvY2F0aW9uIExvY2F0aW9uOjpmb3JTdGFj
a21hcHMoY29uc3QgU3RhY2tNYXBzJiBzdGFja21hcHMsIGNvbnN0IFN0YWNrTWFwczo6TG9jYXRp
b24mIGxvY2F0aW9uKQorTG9jYXRpb24gTG9jYXRpb246OmZvclN0YWNrbWFwcyhjb25zdCBTdGFj
a01hcHMqIHN0YWNrbWFwcywgY29uc3QgU3RhY2tNYXBzOjpMb2NhdGlvbiYgbG9jYXRpb24pCiB7
CiAgICAgc3dpdGNoIChsb2NhdGlvbi5raW5kKSB7CiAgICAgY2FzZSBTdGFja01hcHM6OkxvY2F0
aW9uOjpVbnByb2Nlc3NlZDoKQEAgLTUzLDcgKzUzLDggQEAgTG9jYXRpb24gTG9jYXRpb246OmZv
clN0YWNrbWFwcyhjb25zdCBTdAogICAgICAgICByZXR1cm4gZm9yQ29uc3RhbnQobG9jYXRpb24u
b2Zmc2V0KTsKICAgICAgICAgCiAgICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpDb25zdGFu
dEluZGV4OgotICAgICAgICByZXR1cm4gZm9yQ29uc3RhbnQoc3RhY2ttYXBzLmNvbnN0YW50c1ts
b2NhdGlvbi5vZmZzZXRdLmludGVnZXIpOworICAgICAgICBBU1NFUlQoc3RhY2ttYXBzKTsKKyAg
ICAgICAgcmV0dXJuIGZvckNvbnN0YW50KHN0YWNrbWFwcy0+Y29uc3RhbnRzW2xvY2F0aW9uLm9m
ZnNldF0uaW50ZWdlcik7CiAgICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5oCShyZXZp
c2lvbiAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAotICAgIHN0YXRpYyBMb2NhdGlvbiBmb3JTdGFja21hcHMoY29uc3Qg
U3RhY2tNYXBzJiwgY29uc3QgU3RhY2tNYXBzOjpMb2NhdGlvbiYpOworICAgIC8vIFlvdSBjYW4g
cGFzcyBhIG51bGwgU3RhY2tNYXBzIGlmIHlvdSBhcmUgY29uZmlkZW50IHRoYXQgdGhlIGxvY2F0
aW9uIGRvZXNuJ3QKKyAgICAvLyBpbnZvbHZlIGEgd2lkZSBjb25zdGFudC4KKyAgICBzdGF0aWMg
TG9jYXRpb24gZm9yU3RhY2ttYXBzKGNvbnN0IFN0YWNrTWFwcyosIGNvbnN0IFN0YWNrTWFwczo6
TG9jYXRpb24mKTsKICAgICAKICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7
IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
REZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCIKICNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBv
c2l0b3J5LmgiCisjaW5jbHVkZSAiRlRMQ2FsbGluZ0NvbnZlbnRpb25zLmgiCiAjaW5jbHVkZSAi
RlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIK
ICNpbmNsdWRlICJGVExJbmxpbmVDYWNoZVNpemUuaCIKQEAgLTEyNzUsMTAgKzEyNzYsMTIgQEAg
cHJpdmF0ZToKIAogICAgICAgICAvLyBBcmd1bWVudHM6IGlkLCBieXRlcywgdGFyZ2V0LCBudW1B
cmdzLCBhcmdzLi4uCiAgICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURz
Kys7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQuY2FsbCgKKyAgICAgICAgTFZhbHVlIGNhbGwg
PSBtX291dC5jYWxsKAogICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludEludDY0SW50cmluc2lj
KCksCiAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKHN0YWNrbWFwSUQpLCBtX291dC5jb25z
dEludDMyKHNpemVPZkdldEJ5SWQoKSksCi0gICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVm
OCksIG1fb3V0LmNvbnN0SW50MzIoMiksIG1fY2FsbEZyYW1lLCBiYXNlKSk7CisgICAgICAgICAg
ICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMiksIG1fY2FsbEZyYW1l
LCBiYXNlKTsKKyAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBD
YWxsaW5nQ29udmVudGlvbnM6OmFueVJlZygpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsK
ICAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUuZ2V0QnlJZHMuYXBwZW5kKEdldEJ5SWREZXNj
cmlwdG9yKHN0YWNrbWFwSUQsIG1fbm9kZS0+Y29kZU9yaWdpbiwgdWlkKSk7CiAgICAgfQpAQCAt
MTI5NCwxMCArMTI5NywxMSBAQCBwcml2YXRlOgogCiAgICAgICAgIC8vIEFyZ3VtZW50czogaWQs
IGJ5dGVzLCB0YXJnZXQsIG51bUFyZ3MsIGFyZ3MuLi4KICAgICAgICAgdW5zaWduZWQgc3RhY2tt
YXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKLSAgICAgICAgbV9vdXQuY2FsbCgKKyAgICAgICAgTFZh
bHVlIGNhbGwgPSBtX291dC5jYWxsKAogICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludFZvaWRJ
bnRyaW5zaWMoKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RhY2ttYXBJRCksIG1f
b3V0LmNvbnN0SW50MzIoc2l6ZU9mUHV0QnlJZCgpKSwKICAgICAgICAgICAgIGNvbnN0TnVsbCht
X291dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigzKSwgbV9jYWxsRnJhbWUsIGJhc2UsIHZhbHVl
KTsKKyAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBDYWxsaW5n
Q29udmVudGlvbnM6OmFueVJlZygpKTsKICAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUucHV0
QnlJZHMuYXBwZW5kKFB1dEJ5SWREZXNjcmlwdG9yKAogICAgICAgICAgICAgc3RhY2ttYXBJRCwg
bV9ub2RlLT5jb2RlT3JpZ2luLCB1aWQsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNTg5ODQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3Nyw4ICsxNzcsOCBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICBleGl0
Lm1fY29kZSA9IEZJTkFMSVpFX0NPREVfSUYoCiAgICAgICAgIHNob3VsZFNob3dEaXNhc3NlbWJs
eSgpLAogICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJGVEwgT1NSIGV4aXQgIyV1IChi
YyMldSwgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMgPSAlcywgYW5kIHJlY29yZCA9ICVzIiwK
LSAgICAgICAgICAgIGV4aXRJRCwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwKKyAg
ICAgICAgKCJGVEwgT1NSIGV4aXQgIyV1ICglcywgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMg
PSAlcywgYW5kIHJlY29yZCA9ICVzIiwKKyAgICAgICAgICAgIGV4aXRJRCwgdG9DU3RyaW5nKGV4
aXQubV9jb2RlT3JpZ2luKS5kYXRhKCksCiAgICAgICAgICAgICBleGl0S2luZFRvU3RyaW5nKGV4
aXQubV9raW5kKSwgdG9DU3RyaW5nKCpjb2RlQmxvY2spLmRhdGEoKSwKICAgICAgICAgICAgIHRv
Q1N0cmluZyhpZ25vcmluZ0NvbnRleHQ8RHVtcENvbnRleHQ+KGV4aXQubV92YWx1ZXMpKS5kYXRh
KCksCiAgICAgICAgICAgICB0b0NTdHJpbmcoKnJlY29yZCkuZGF0YSgpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCShyZXZpc2lvbiAx
NTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDIwICs2NCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fb2Zm
c2V0VG9TYXZpbmdBcmVhID0KICAgICAgICAgICAgIChzdGQ6Om1heChtX251bUFyZ3MsIE5VTUJF
Ul9PRl9BUkdVTUVOVF9SRUdJU1RFUlMpIC0gTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUykg
KiB3b3JkU2l6ZTsKICAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50UmVnaXN0
ZXJzVGhhdE5lZWRTYXZpbmcgPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1p
bihOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTLCBudW1BcmdzKTsgaS0tOykgewotICAgICAg
ICAgICAgaWYgKG1fdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVy
KGkpKSkKLSAgICAgICAgICAgICAgICBudW1Bcmd1bWVudFJlZ2lzdGVyc1RoYXROZWVkU2F2aW5n
Kys7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4oTlVNQkVS
X09GX0FSR1VNRU5UX1JFR0lTVEVSUywgbnVtQXJncyk7IGktLTspCisgICAgICAgICAgICBtX2Nh
bGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLnNldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIo
aSkpOworICAgICAgICBpZiAocmV0dXJuUmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAg
ICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuc2V0KEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5maWx0ZXIobV91
c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ2FsbGlu
Z0NvbnZlbnRpb25SZWdpc3RlcnMgPQorICAgICAgICAgICAgbV9jYWxsaW5nQ29udmVudGlvblJl
Z2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpOwogICAgICAgICAKICAgICAgICAgc2l6ZV90
IG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhID0KICAgICAgICAgICAgIG1fb2Zmc2V0VG9TYXZpbmdB
cmVhICsKLSAgICAgICAgICAgIG51bUFyZ3VtZW50UmVnaXN0ZXJzVGhhdE5lZWRTYXZpbmcgKiB3
b3JkU2l6ZTsKKyAgICAgICAgICAgIG51bWJlck9mQ2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMg
KiB3b3JkU2l6ZTsKICAgICAgICAgCiAgICAgICAgIG1fc3RhY2tCeXRlc05lZWRlZCA9CiAgICAg
ICAgICAgICBvZmZzZXRUb1RodW5rU2F2aW5nQXJlYSArCiAgICAgICAgICAgICBzdGFja0J5dGVz
TmVlZGVkRm9yUmV0dXJuQWRkcmVzcyArCi0gICAgICAgICAgICAobV91c2VkUmVnaXN0ZXJzLm51
bWJlck9mU2V0UmVnaXN0ZXJzKCkgLSBudW1Bcmd1bWVudFJlZ2lzdGVyc1RoYXROZWVkU2F2aW5n
KSAqIHdvcmRTaXplOworICAgICAgICAgICAgKG1fdXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldFJl
Z2lzdGVycygpIC0gbnVtYmVyT2ZDYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycykgKiB3b3JkU2l6
ZTsKICAgICAgICAgCiAgICAgICAgIHNpemVfdCBzdGFja0FsaWdubWVudCA9IDE2OwogICAgICAg
ICAKQEAgLTg3LDExICs5MCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBtX3RodW5r
U2F2ZVNldCA9IG1fdXNlZFJlZ2lzdGVyczsKICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IHN0ZDo6bWluKE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMsIG51bUFyZ3MpOyBp
LS07KSB7Ci0gICAgICAgICAgICBpZiAoIW1fdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6dG9B
cmd1bWVudFJlZ2lzdGVyKGkpKSkKKyAgICAgICAgLy8gVGhpcyByZWxpZXMgb24gYWxsIGNhbGxp
bmcgY29udmVudGlvbiByZWdpc3RlcnMgYWxzbyBiZWluZyB0ZW1wIHJlZ2lzdGVycy4KKyAgICAg
ICAgdW5zaWduZWQgc3RhY2tJbmRleCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgICAgICBHUFJSZWcgcmVn
ID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgICAgIGlmICghbV9jYWxsaW5nQ29u
dmVudGlvblJlZ2lzdGVycy5nZXQocmVnKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSk7Ci0g
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRvU2F2aW5nQXJlYSArIGkg
KiB3b3JkU2l6ZSkpOworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRU
b1NhdmluZ0FyZWEgKyAoc3RhY2tJbmRleCsrKSAqIHdvcmRTaXplKSk7CiAgICAgICAgICAgICBt
X3RodW5rU2F2ZVNldC5jbGVhcihyZWcpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTAzLDEx
ICsxMDgsMTIgQEAgcHVibGljOgogICAgICAgICBpZiAobV9yZXR1cm5SZWdpc3RlciAhPSBJbnZh
bGlkR1BSUmVnKQogICAgICAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgbV9yZXR1cm5SZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBzdGQ6Om1pbihOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTLCBtX251bUFyZ3MpOyBpLS07
KSB7Ci0gICAgICAgICAgICBpZiAoIW1fdXNlZFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6dG9Bcmd1
bWVudFJlZ2lzdGVyKGkpKSkKKyAgICAgICAgdW5zaWduZWQgc3RhY2tJbmRleCA9IDA7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7
CisgICAgICAgICAgICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAg
ICAgICAgIGlmICghbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5nZXQocmVnKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0
b0FyZ3VtZW50UmVnaXN0ZXIoaSk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNl
dFRvU2F2aW5nQXJlYSArIGkgKiB3b3JkU2l6ZSksIHJlZyk7CisgICAgICAgICAgICBtX2ppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBtX29mZnNldFRvU2F2aW5nQXJlYSArIChzdGFja0luZGV4KyspICogd29yZFNpemUp
LCByZWcpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2ppdC5hZGRQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9zdGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMzksNiArMTQ1LDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBTdGF0ZSYgbV9zdGF0ZTsKICAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7
CisgICAgUmVnaXN0ZXJTZXQgbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVyczsKICAgICBDQ2Fs
bEhlbHBlcnMmIG1faml0OwogICAgIHVuc2lnbmVkIG1fbnVtQXJnczsKICAgICBHUFJSZWcgbV9y
ZXR1cm5SZWdpc3RlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1Bh
dGhDYWxsS2V5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
bG93UGF0aENhbGxLZXkuaAkocmV2aXNpb24gMTU4OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEs
MTEgQEAgcHVibGljOgogICAgIHZvaWQqIGNhbGxUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2Nh
bGxUYXJnZXQ7IH0KICAgICBwdHJkaWZmX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZz
ZXQ7IH0KICAgICAKKyAgICBTbG93UGF0aENhbGxLZXkgd2l0aENhbGxUYXJnZXQodm9pZCogY2Fs
bFRhcmdldCkKKyAgICB7CisgICAgICAgIHJldHVybiBTbG93UGF0aENhbGxLZXkodXNlZFJlZ2lz
dGVycygpLCBjYWxsVGFyZ2V0LCBvZmZzZXQoKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAogICAgIGVudW0gRW1wdHlWYWx1ZVRhZyB7IEVt
cHR5VmFsdWUgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFw
cy5jcHAJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U3RhY2tNYXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTUgKzY2LDE1IEBAIHZvaWQgU3Rh
Y2tNYXBzOjpMb2NhdGlvbjo6ZHVtcChQcmludFN0cmUKICAgICBvdXQucHJpbnQoIigiLCBraW5k
LCAiLCByZWciLCBkd2FyZlJlZ051bSwgIiwgIiwgb2Zmc2V0LCAiKSIpOwogfQogCi1HUFJSZWcg
U3RhY2tNYXBzOjpMb2NhdGlvbjo6ZGlyZWN0R1BSKFN0YWNrTWFwcyYgc3RhY2ttYXBzKSBjb25z
dAorR1BSUmVnIFN0YWNrTWFwczo6TG9jYXRpb246OmRpcmVjdEdQUigpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIEZUTDo6TG9jYXRpb246OmZvclN0YWNrbWFwcyhzdGFja21hcHMsICp0aGlzKS5kaXJl
Y3RHUFIoKTsKKyAgICByZXR1cm4gRlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKDAsICp0aGlz
KS5kaXJlY3RHUFIoKTsKIH0KIAogdm9pZCBTdGFja01hcHM6OkxvY2F0aW9uOjpyZXN0b3JlSW50
bygKICAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBTdGFja01hcHMmIHN0YWNrbWFwcywgY2hhciog
c2F2ZWRSZWdpc3RlcnMsIEdQUlJlZyByZXN1bHQpIGNvbnN0CiB7Ci0gICAgRlRMOjpMb2NhdGlv
bjo6Zm9yU3RhY2ttYXBzKHN0YWNrbWFwcywgKnRoaXMpLnJlc3RvcmVJbnRvKGppdCwgc2F2ZWRS
ZWdpc3RlcnMsIHJlc3VsdCk7CisgICAgRlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKCZzdGFj
a21hcHMsICp0aGlzKS5yZXN0b3JlSW50byhqaXQsIHNhdmVkUmVnaXN0ZXJzLCByZXN1bHQpOwog
fQogCiBib29sIFN0YWNrTWFwczo6UmVjb3JkOjpwYXJzZShEYXRhVmlldyogdmlldywgdW5zaWdu
ZWQmIG9mZnNldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMu
aAkocmV2aXNpb24gMTU4OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFj
a01hcHMuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBzdHJ1Y3QgU3RhY2tNYXBz
IHsKICAgICAgICAgdm9pZCBwYXJzZShEYXRhVmlldyosIHVuc2lnbmVkJiBvZmZzZXQpOwogICAg
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgICAgIAotICAgICAg
ICBHUFJSZWcgZGlyZWN0R1BSKFN0YWNrTWFwcyYpIGNvbnN0OworICAgICAgICBHUFJSZWcgZGly
ZWN0R1BSKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgcmVzdG9yZUludG8oTWFjcm9Bc3NlbWJsZXIm
LCBTdGFja01hcHMmLCBjaGFyKiBzYXZlZFJlZ2lzdGVycywgR1BSUmVnIHJlc3VsdCkgY29uc3Q7
CiAgICAgfTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAko
cmV2aXNpb24gMTU4OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTYgKzQ0LDIzIEBAIG5hbWVzcGFjZSBGVEwgewogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0mLCBj
b25zdCBMb2NhdGlvbiYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNsb3dQYXRoQ2FsbFRodW5r
R2VuZXJhdG9yKFZNJiwgY29uc3QgU2xvd1BhdGhDYWxsS2V5Jik7CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIEtleVR5cGU+CitzdHJ1Y3QgVGh1bmtNYXAgeworICAgIEhhc2hNYXA8S2V5VHlwZSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3RvVGh1bms7CisgICAgSGFzaE1hcDxNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIsIEtleVR5cGU+IG1fZnJvbVRodW5rOworfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUg
TWFwVHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgR2VuZXJhdG9yVHlwZT4KIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZUlmTmVjZXNzYXJ5KAogICAgIFZNJiB2bSwgTWFwVHlw
ZSYgbWFwLCBjb25zdCBLZXlUeXBlJiBrZXksIEdlbmVyYXRvclR5cGUgZ2VuZXJhdG9yKQogewot
ICAgIHR5cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9yIGl0ZXIgPSBtYXAuZmluZChrZXkpOworICAg
IHR5cGVuYW1lIE1hcFR5cGU6Oml0ZXJhdG9yIGl0ZXIgPSBtYXAubV90b1RodW5rLmZpbmQoa2V5
KTsKICAgICBpZiAoaXRlciAhPSBtYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBpdGVyLT52YWx1
ZTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcmVzdWx0ID0gZ2VuZXJhdG9yKHZt
LCBrZXkpOwotICAgIG1hcC5hZGQoa2V5LCByZXN1bHQpOworICAgIG1hcC5tX3RvVGh1bmsuYWRk
KGtleSwgcmVzdWx0KTsKKyAgICBtYXAubV9mcm9tVGh1bmsuYWRkKHJlc3VsdC5jb2RlKCksIGtl
eSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNzEsOSArNzgsMTQgQEAgcHVibGljOgog
ICAgICAgICAgICAgdm0sIG1fc2xvd1BhdGhDYWxsVGh1bmtzLCBrZXksIHNsb3dQYXRoQ2FsbFRo
dW5rR2VuZXJhdG9yKTsKICAgICB9CiAgICAgCisgICAgU2xvd1BhdGhDYWxsS2V5IGtleUZvclNs
b3dQYXRoQ2FsbFRodW5rKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBwdHIpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9zbG93UGF0aENhbGxUaHVua3MubV9mcm9tVGh1bmsuZ2V0KHB0cik7CisgICAg
fQorICAgIAogcHJpdmF0ZToKLSAgICBIYXNoTWFwPExvY2F0aW9uLCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY+IG1fb3NyRXhpdFRodW5rczsKLSAgICBIYXNoTWFwPFNsb3dQYXRoQ2FsbEtleSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPiBtX3Nsb3dQYXRoQ2FsbFRodW5rczsKKyAgICBUaHVua01hcDxM
b2NhdGlvbj4gbV9vc3JFeGl0VGh1bmtzOworICAgIFRodW5rTWFwPFNsb3dQYXRoQ2FsbEtleT4g
bV9zbG93UGF0aENhbGxUaHVua3M7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ZQUkluZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ZQUkluZm8uaAkocmV2aXNpb24gMTU4OTg0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9GUFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0
LDcgKzc0LDEwIEBAIHB1YmxpYzoKICAgICB9CiAgICAgc3RhdGljIHVuc2lnbmVkIHRvSW5kZXgo
RlBSUmVnIHJlZykKICAgICB7Ci0gICAgICAgIHJldHVybiAodW5zaWduZWQpcmVnOworICAgICAg
ICB1bnNpZ25lZCByZXN1bHQgPSAodW5zaWduZWQpcmVnOworICAgICAgICBpZiAocmVzdWx0ID49
IG51bWJlck9mUmVnaXN0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIEludmFsaWRJbmRleDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIEZQUlJlZyB0b0Fy
Z3VtZW50UmVnaXN0ZXIodW5zaWduZWQgaW5kZXgpCkBAIC0xMDIsNiArMTA1LDggQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgICAgIHJldHVybiBuYW1lRm9yUmVnaXN0ZXJbcmVnXTsKICAgICB9Cisg
ICAgCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEludmFsaWRJbmRleCA9IDB4ZmZmZmZmZmY7
CiB9OwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCShyZXZp
c2lvbiAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtNDIxLDkgKzQyMSw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHJl
ZyAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ocmVn
KSA8IDE2KTsKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGluZGV4Rm9yUmVnaXN0ZXJb
MTZdID0geyAwLCAyLCAxLCAzLCBJbnZhbGlkSW5kZXgsIEludmFsaWRJbmRleCwgNSwgNCwgNiwg
NywgOCwgSW52YWxpZEluZGV4LCBJbnZhbGlkSW5kZXgsIDksIEludmFsaWRJbmRleCwgSW52YWxp
ZEluZGV4IH07Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IGluZGV4Rm9yUmVnaXN0ZXJbcmVn
XTsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCAhPSBJbnZhbGlkSW5kZXgpOwotICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gaW5kZXhGb3JSZWdpc3RlcltyZWddOwogICAgIH0K
IAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWJ1Z05hbWUoR1BSUmVnIHJlZykKQEAgLTQzOCw3
ICs0MzYsNiBAQCBwdWJsaWM6CiAgICAgICAgIH07CiAgICAgICAgIHJldHVybiBuYW1lRm9yUmVn
aXN0ZXJbcmVnXTsKICAgICB9Ci1wcml2YXRlOgogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IEludmFsaWRJbmRleCA9IDB4ZmZmZmZmZmY7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3RlclNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3RlclNldC5jcHAJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1
OSw2IEBAIFJlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXMKICNpZiBDUFUo
WDg2XzY0KQogICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjplYngpOwogICAgIHJlc3VsdC5z
ZXQoWDg2UmVnaXN0ZXJzOjplYnApOwotICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjpyMTAp
OwogICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjpyMTIpOwogICAgIHJlc3VsdC5zZXQoWDg2
UmVnaXN0ZXJzOjpyMTMpOwogICAgIHJlc3VsdC5zZXQoWDg2UmVnaXN0ZXJzOjpyMTQpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMTU4OTg0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MSw2ICs4MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGdldChGUFJSZWcgcmVnKSBj
b25zdCB7IHJldHVybiBtX3ZlY3Rvci5nZXQoTWFjcm9Bc3NlbWJsZXI6OnJlZ2lzdGVySW5kZXgo
cmVnKSk7IH0KICAgICAKICAgICB2b2lkIG1lcmdlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikg
eyBtX3ZlY3Rvci5tZXJnZShvdGhlci5tX3ZlY3Rvcik7IH0KKyAgICB2b2lkIGZpbHRlcihjb25z
dCBSZWdpc3RlclNldCYgb3RoZXIpIHsgbV92ZWN0b3IuZmlsdGVyKG90aGVyLm1fdmVjdG9yKTsg
fQogICAgIHZvaWQgZXhjbHVkZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsgbV92ZWN0b3Iu
ZXhjbHVkZShvdGhlci5tX3ZlY3Rvcik7IH0KICAgICAKICAgICBzaXplX3QgbnVtYmVyT2ZTZXRS
ZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5iaXRDb3VudCgpOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDEwICs1MiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKIC8vIGdpdmUgdGhlIEZUTCBjbG9zdXJlIGNh
bGwgcGF0Y2hpbmcgc3VwcG9ydCB1bnRpbCB3ZSBzd2l0Y2ggdG8gdGhlIEMgc3RhY2sgLSBidXQg
d2hlbiB3ZSBkbyB0aGF0LAogLy8gY2FsbEZyYW1lUmVnaXN0ZXIgd2lsbCBkaXNhcHBlYXIuCiAK
K3N0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBDb2RlTG9jYWl0b25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIG5l
d0NhbGxlZUZ1bmN0aW9uKQoreworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGwsIG5ld0Nh
bGxlZUZ1bmN0aW9uKTsKK30KKwogc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBj
b2RlYmxvY2ssIENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgbmV3Q2FsbGVlRnVu
Y3Rpb24pCiB7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVibG9jayk7Ci0g
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24pOworICAgIHJl
cGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIGNvZGVCbG9jaywgY2FsbCwgbmV3Q2FsbGVlRnVuY3Rp
b24pOwogfQogCiBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVu
Y3Rpb24sIGJvb2wgY29tcGFjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkocmV2aXNpb24gMTU4OTg0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNDQsOSArNDQsMjEgQEAgcHVibGljOgogICAgICAgICAsIG1fZGlkUmV1
c2VSZWdpc3RlcnMoZmFsc2UpCiAgICAgewogICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgIHZvaWQgbG9jayhUIHJlZykgeyBtX2xvY2tlZFJlZ2lzdGVycy5zZXQocmVn
KTsgfQorCisgICAgdm9pZCBsb2NrKEdQUlJlZyByZWcpCisgICAgeworICAgICAgICB1bnNpZ25l
ZCBpbmRleCA9IEdQUkluZm86OnRvSW5kZXgocmVnKTsKKyAgICAgICAgaWYgKGluZGV4ID09IEdQ
UkluZm86OkludmFsaWRJbmRleCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9sb2Nr
ZWRSZWdpc3RlcnMuc2V0R1BSQnlJbmRleChpbmRleCk7CisgICAgfQorICAgIHZvaWQgbG9jayhG
UFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBGUFJJbmZvOjp0b0lu
ZGV4KHJlZyk7CisgICAgICAgIGlmIChpbmRleCA9PSBGUFJJbmZvOjpJbnZhbGlkSW5kZXgpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldEZQUkJ5SW5k
ZXgoaW5kZXgpOworICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rSW5mbz4K
ICAgICB0eXBlbmFtZSBCYW5rSW5mbzo6UmVnaXN0ZXJUeXBlIGFsbG9jYXRlU2NyYXRjaCgpCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0JpdFZlY3Rvci5jcHAJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0JpdFZlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsMzEgQEAgdm9pZCBC
aXRWZWN0b3I6Om1lcmdlU2xvdyhjb25zdCBCaXRWZWN0bwogICAgICAgICBhLT5iaXRzKClbaV0g
fD0gYi0+Yml0cygpW2ldOwogfQogCit2b2lkIEJpdFZlY3Rvcjo6ZmlsdGVyU2xvdyhjb25zdCBC
aXRWZWN0b3ImIG90aGVyKQoreworICAgIGlmIChvdGhlci5pc0lubGluZSgpKSB7CisgICAgICAg
IEFTU0VSVCghaXNJbmxpbmUoKSk7CisgICAgICAgICpiaXRzKCkgJj0gY2xlYW5zZUlubGluZUJp
dHMob3RoZXIubV9iaXRzT3JQb2ludGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBpZiAoaXNJbmxpbmUoKSkgeworICAgICAgICBBU1NFUlQoIW90aGVyLmlzSW5saW5lKCkp
OworICAgICAgICBtX2JpdHNPclBvaW50ZXIgJj0gKm90aGVyLm91dE9mTGluZUJpdHMoKS0+Yml0
cygpOworICAgICAgICBtX2JpdHNPclBvaW50ZXIgfD0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
MSkgPDwgbWF4SW5saW5lQml0cygpKTsKKyAgICAgICAgQVNTRVJUKGlzSW5saW5lKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIE91dE9mTGluZUJpdHMqIGEgPSBvdXRPZkxp
bmVCaXRzKCk7CisgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogYiA9IG90aGVyLm91dE9mTGluZUJp
dHMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihhLT5udW1Xb3JkcygpLCBiLT5u
dW1Xb3JkcygpKTsgaS0tOykKKyAgICAgICAgYS0+Yml0cygpW2ldICY9IGItPmJpdHMoKVtpXTsK
KyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBiLT5udW1Xb3JkcygpOyBpIDwgYS0+bnVtV29y
ZHMoKTsgKytpKQorICAgICAgICBhLT5iaXRzKClbaV0gPSAwOworfQorCiB2b2lkIEJpdFZlY3Rv
cjo6ZXhjbHVkZVNsb3coY29uc3QgQml0VmVjdG9yJiBvdGhlcikKIHsKICAgICBpZiAob3RoZXIu
aXNJbmxpbmUoKSkgewpJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNv
dXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNiArMTgxLDE2
IEBAIHB1YmxpYzogCiAgICAgICAgIEFTU0VSVChpc0lubGluZSgpKTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBmaWx0ZXIoY29uc3QgQml0VmVjdG9yJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlm
ICghaXNJbmxpbmUoKSB8fCAhb3RoZXIuaXNJbmxpbmUoKSkgeworICAgICAgICAgICAgZmlsdGVy
U2xvdyhvdGhlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9i
aXRzT3JQb2ludGVyICY9IG90aGVyLm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgQVNTRVJUKGlz
SW5saW5lKCkpOworICAgIH0KKyAgICAKICAgICB2b2lkIGV4Y2x1ZGUoY29uc3QgQml0VmVjdG9y
JiBvdGhlcikKICAgICB7CiAgICAgICAgIGlmICghaXNJbmxpbmUoKSB8fCAhb3RoZXIuaXNJbmxp
bmUoKSkgewpAQCAtMzAyLDYgKzMxMiw3IEBAIHByaXZhdGU6CiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgc2V0U2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKTsKICAgICAKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZVNsb3coY29uc3QgQml0VmVjdG9yJiBvdGhlcik7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsdGVyU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90
aGVyKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBleGNsdWRlU2xvdyhjb25zdCBCaXRW
ZWN0b3ImIG90aGVyKTsKICAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGJpdENv
dW50U2xvdygpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216499</attachid>
            <date>2013-11-09 16:44:43 -0800</date>
            <delta_ts>2013-11-09 16:57:01 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>40211</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5MDAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBA
QAorMjAxMy0xMS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFN3aXRjaCBGVEwgR2V0QnlJZC9QdXRCeUlkIElDJ3Mgb3ZlciB0byB1c2luZyBBbnlSZWdDQwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MDk0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3YXMg
aGFyZGVyIHRoYW4geW91J2QgZXhwZWN0LgorICAgICAgICAKKyAgICAgICAgRmlyc3QgdGhlIG9i
dmlvdXMgYml0czoKKyAgICAgICAgCisgICAgICAgIC0gSUMgcGF0Y2hwb2ludHMgbm93IHVzZSBB
bnlSZWdDQyBpbnN0ZWFkIG9mIHRoZSBDIENDLiAoQ0MgPSBjYWxsaW5nIGNvbnZlbnRpb24uKQor
ICAgICAgICAKKyAgICAgICAgLSBGVEw6OmZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygpIG5v
dyBjb3JyZWN0bHkgZmlndXJlcyBvdXQgd2hpY2ggcmVnaXN0ZXJzIHRoZQorICAgICAgICAgIElD
IGlzIHN1cHBvc2VkIHRvIHVzZSBpbnN0ZWFkIG9mIGFzc3VtaW5nIEMgQ0MgYXJndW1lbnQgcmVn
aXN0ZXJzLgorICAgICAgICAKKyAgICAgICAgQW5kIHRoZW4gYWxsIG9mIHRoZSBzdHVmZiB0aGF0
IGJyb2tlIGFuZCB0aGF0IHRoaXMgcGF0Y2ggZml4ZXM6CisgICAgICAgIAorICAgICAgICAtIElD
IHNpemluZyBiYXNlZCBvbiBnZW5lcmF0aW5nIGEgZHVtbXkgSUMgKHdoYXQgRlRMSW5saW5lQ2Fj
aGVTaXplIGRpZCkgaXMgdG90YWxseQorICAgICAgICAgIGJhZCBvbiB4ODYtNjQsIHdoZXIgdmFy
aW91cyByZWdpc3RlciBwZXJtdXRhdGlvbnMgbGVhZCB0byBiaXphcnJlIGhlYWRlciBieXRlcyBh
bmQKKyAgICAgICAgICBlY2xlY3RpYyBTSUIgZW5jb2RpbmdzLiBJIGNoYW5nZWQgdGhhdCB0byBo
YXZlIG1hZ2ljIGNvbnN0YW50cywgZm9yIG5vdy4KKyAgICAgICAgCisgICAgICAgIC0gU2xvdyBw
YXRoIGNhbGxzIGRpZG4ndCBwcmVzZXJ2ZSB0aGUgQ0MgcmV0dXJuIHJlZ2lzdGVyLgorICAgICAg
ICAKKyAgICAgICAgLSBSZXBhdGNoJ3Mgc2NyYXRjaCByZWdpc3RlciBhbGxvY2F0aW9uIHdvdWxk
IGdldCB0b3RhbGx5IGNvbmZ1c2VkIGlmIHRoZSBvcGVyYW5kCisgICAgICAgICAgcmVnaXN0ZXJz
IHdlcmVuJ3Qgb25lIG9mIHRoZSBERkctc3R5bGUgInRlbXAiIHJlZ2lzdGVycy4gQW5kIGJ5ICJ0
b3RhbGx5IGNvbmZ1c2VkIgorICAgICAgICAgIEkgbWVhbiB0aGF0IGl0IHdvdWxkIGNyYXNoLgor
ICAgICAgICAKKyAgICAgICAgLSBXZSBhc3N1bWVkIHRoYXQgcjEwIGlzIGNhbGxlZS1zYXZlZC4g
SXQncyBub3QuIFRoYXQgb25lIGR1ZGUncyBQUFQgYWJvdXQgeDg2LTY0CisgICAgICAgICAgY2Rl
Y2wgdGhhdCBJIGZvdW5kIG9uIHRoZSBpbnRlcnR1YmVzIHdhcyBub3QgYSB0cnVzdHdvcnRoeSBz
b3VyY2Ugb2YgaW5mb3JtYXRpb24sCisgICAgICAgICAgYXBwYXJlbnRseS4KKyAgICAgICAgCisg
ICAgICAgIC0gQ2FsbCByZXBhdGNoaW5nIGRpZG4ndCBrbm93IHRoYXQgdGhlIEZUTCBkb2VzIGl0
cyBJQyBzbG93IGNhbGxzIHZpYSBzcGVjaWFsbHkKKyAgICAgICAgICBnZW5lcmF0ZWQgdGh1bmtz
LiBUaGlzIHdhcyBwYXJ0aWN1bGFybHkgZnVuIHRvIGZpeDogYmFzaWNhbGx5LCBub3cgd2hlbiB3
ZSByZWxpbmsKKyAgICAgICAgICBhbiBJQyBjYWxsIGluIHRoZSBGVEwsIHdlIHVzZSB0aGUgb2xk
IGNhbGwgdGFyZ2V0IHRvIGZpbmQgdGhlIFNsb3dQYXRoQ2FsbEtleSwKKyAgICAgICAgICB3aGlj
aCB0ZWxscyB1cyBldmVyeXRoaW5nIHdlIG5lZWQgdG8ga25vdyB0byBnZW5lcmF0ZSAob3IgbG9v
ayB1cCkgYSBuZXcgdGh1bmsgZm9yCisgICAgICAgICAgdGhlIG5ldyBmdW5jdGlvbiB3ZSB3YW50
IHRvIGNhbGwuCisgICAgICAgIAorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmlzRW1w
dHlWYWx1ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6aXNEZWxldGVk
VmFsdWUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6Omhhc2gpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmVtcHR5VmFsdWUpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmRlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQ29kZVB0ckhhc2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlckNvZGVQdHJIYXNoOjplcXVhbCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgICogYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaDoK
KyAgICAgICAgKEpTQzo6UmVwYXRjaEJ1ZmZlcjo6UmVwYXRjaEJ1ZmZlcik6CisgICAgICAgIChK
U0M6OlJlcGF0Y2hCdWZmZXI6OmNvZGVCbG9jayk6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlh
dGlvbnMuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50
aW9uKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
Zml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKToKKyAgICAgICAgKiBmdGwvRlRMSW5saW5lQ2Fj
aGVTaXplLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpzaXplT2ZHZXRCeUlkKToKKyAgICAgICAg
KEpTQzo6RlRMOjpzaXplT2ZQdXRCeUlkKToKKyAgICAgICAgKiBmdGwvRlRMSklURmluYWxpemVy
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24p
OgorICAgICAgICAqIGZ0bC9GVExMb2NhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG9j
YXRpb246OmZvclN0YWNrbWFwcyk6CisgICAgICAgICogZnRsL0ZUTExvY2F0aW9uLmg6CisgICAg
ICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUdldEJ5SWQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlUHV0QnlJZCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxl
ci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAqIGZ0bC9G
VExTbG93UGF0aENhbGwuY3BwOgorICAgICAgICAqIGZ0bC9GVExTbG93UGF0aENhbGxLZXkuaDoK
KyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk6OndpdGhDYWxsVGFyZ2V0KToKKyAg
ICAgICAgKiBmdGwvRlRMU3RhY2tNYXBzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01h
cHM6OkxvY2F0aW9uOjpkaXJlY3RHUFIpOgorICAgICAgICAoSlNDOjpGVEw6OlN0YWNrTWFwczo6
TG9jYXRpb246OnJlc3RvcmVJbnRvKToKKyAgICAgICAgKiBmdGwvRlRMU3RhY2tNYXBzLmg6Cisg
ICAgICAgICogZnRsL0ZUTFRodW5rcy5oOgorICAgICAgICAoSlNDOjpGVEw6OmdlbmVyYXRlSWZO
ZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpGVEw6OmtleUZvclRodW5rKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpUaHVua3M6OmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKToKKyAgICAgICAgKiBqaXQv
RlBSSW5mby5oOgorICAgICAgICAoSlNDOjpGUFJJbmZvOjp0b0luZGV4KToKKyAgICAgICAgKiBq
aXQvR1BSSW5mby5oOgorICAgICAgICAoSlNDOjpHUFJJbmZvOjp0b0luZGV4KToKKyAgICAgICAg
KEpTQzo6R1BSSW5mbzo6ZGVidWdOYW1lKToKKyAgICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuY3Bw
OgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycyk6CisgICAg
ICAgICogaml0L1JlZ2lzdGVyU2V0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpmaWx0
ZXIpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6cmVhZENhbGxU
YXJnZXQpOgorICAgICAgICAoSlNDOjpyZXBhdGNoQ2FsbCk6CisgICAgICAgIChKU0M6OnJlcGF0
Y2hCeUlkU2VsZkFjY2Vzcyk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnlJRCk6CisgICAg
ICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeUJ1aWxkUHV0QnlJ
ZExpc3QpOgorICAgICAgICAoSlNDOjpyZXNldEdldEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXNl
dFB1dEJ5SUQpOgorICAgICAgICAqIGppdC9TY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaDoKKyAg
ICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpsb2NrKToKKwogMjAxMy0xMS0w
OCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCBHVEsgYnVpbGQgZml4LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCShyZXZpc2lvbiAxNTg5ODQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzQsMTEgKzMzNCw0MSBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICBkdW1wV2l0aE5hbWUoIkNvZGVQdHIiLCBvdXQpOwogICAgIH0KKyAgICAKKyAgICBl
bnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CisgICAgZW51bSBEZWxldGVkVmFsdWVU
YWcgeyBEZWxldGVkVmFsdWUgfTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoRW1w
dHlWYWx1ZVRhZykKKyAgICAgICAgOiBtX3ZhbHVlKGVtcHR5VmFsdWUoKSkKKyAgICB7CisgICAg
fQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cihEZWxldGVkVmFsdWVUYWcpCisgICAg
ICAgIDogbV92YWx1ZShkZWxldGVkVmFsdWUoKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJv
b2wgaXNFbXB0eVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA9PSBlbXB0eVZhbHVlKCk7
IH0KKyAgICBib29sIGlzRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA9PSBk
ZWxldGVkVmFsdWUoKTsgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVy
biBQdHJIYXNoPHZvaWQqPjo6aGFzaChtX3ZhbHVlKTsgfQogCiBwcml2YXRlOgorICAgIHN0YXRp
YyB2b2lkKiBlbXB0eVZhbHVlKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4oMSkpOyB9CisgICAgc3RhdGljIHZvaWQqIGRlbGV0ZWRWYWx1ZSgpIHsg
cmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDIpKTsgfQor
ICAgIAogICAgIHZvaWQqIG1fdmFsdWU7CiB9OwogCitzdHJ1Y3QgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRySGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJiBwdHIpIHsgcmV0dXJuIHB0ci5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGEsIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRp
YyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisK
IC8vIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjoKIC8vCiAvLyBBIHJlZmVyZW5jZSB0byBhIHNlY3Rp
b24gb2YgSklUIGdlbmVyYXRlZCBjb2RlLiAgQSBDb2RlUmVmIGNvbnNpc3RzIG9mIGEKQEAgLTQy
MCw0ICs0NTAsMTYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKK25hbWVzcGFj
ZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cj4gewor
ICAgIHR5cGVkZWYgSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNoIEhhc2g7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0
IEhhc2hUcmFpdHM8SlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI+IDogcHVibGljIEN1c3RvbUhh
c2hUcmFpdHM8SlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI+IHsgfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKICNlbmRpZiAvLyBNYWNyb0Fzc2VtYmxlckNvZGVSZWZfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODZDb21tb24uaAkocmV2aXNpb24gMTU4OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwx
MSArMzQsMTIgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBNYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbiA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPFg4NkFzc2VtYmxlcj4gewotcHJv
dGVjdGVkOgorcHVibGljOgogI2lmIENQVShYODZfNjQpCiAgICAgc3RhdGljIGNvbnN0IFg4NlJl
Z2lzdGVyczo6UmVnaXN0ZXJJRCBzY3JhdGNoUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OnIxMTsK
ICNlbmRpZgogCitwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IGludCBEb3VibGVDb25kaXRp
b25CaXRJbnZlcnQgPSAweDEwOwogICAgIHN0YXRpYyBjb25zdCBpbnQgRG91YmxlQ29uZGl0aW9u
Qml0U3BlY2lhbCA9IDB4MjA7CiAgICAgc3RhdGljIGNvbnN0IGludCBEb3VibGVDb25kaXRpb25C
aXRzID0gRG91YmxlQ29uZGl0aW9uQml0SW52ZXJ0IHwgRG91YmxlQ29uZGl0aW9uQml0U3BlY2lh
bDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1
ZmZlci5oCShyZXZpc2lvbiAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1JlcGF0Y2hCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBjbGFz
cyBSZXBhdGNoQnVmZmVyIHsKIAogcHVibGljOgogICAgIFJlcGF0Y2hCdWZmZXIoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCisgICAgICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgIHsKICNp
ZiBFTkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKICAgICAgICAgUmVmUHRyPEpJVENvZGU+
IGNvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKTsKQEAgLTUyLDggKzUzLDYgQEAgcHVibGljOgog
ICAgICAgICBtX3NpemUgPSBjb2RlLT5zaXplKCk7CiAKICAgICAgICAgRXhlY3V0YWJsZUFsbG9j
YXRvcjo6bWFrZVdyaXRhYmxlKG1fc3RhcnQsIG1fc2l6ZSk7Ci0jZWxzZQotICAgICAgICBVTlVT
RURfUEFSQU0oY29kZUJsb2NrKTsKICNlbmRpZgogICAgIH0KIApAQCAtNjMsNiArNjIsOCBAQCBw
dWJsaWM6CiAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1ha2VFeGVjdXRhYmxlKG1fc3Rh
cnQsIG1fc2l6ZSk7CiAjZW5kaWYKICAgICB9CisgICAgCisgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQogCiAgICAgdm9pZCByZWxpbmsoQ29k
ZUxvY2F0aW9uSnVtcCBqdW1wLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlvbikKICAgICB7
CkBAIC0xNzYsNiArMTc3LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBDb2Rl
QmxvY2sqIG1fY29kZUJsb2NrOwogI2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQog
ICAgIHZvaWQqIG1fc3RhcnQ7CiAgICAgc2l6ZV90IG1fc2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCShyZXZpc2lvbiAxNTg5ODQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcxLDYgKzI3MSw3IEBAIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChM
QnVpbGRlciAKIH0KIGVudW0gVGFpbENhbGxNb2RlIHsgSXNOb3RUYWlsQ2FsbCwgSXNUYWlsQ2Fs
bCB9Owogc3RhdGljIGlubGluZSB2b2lkIHNldFRhaWxDYWxsKExWYWx1ZSBjYWxsLCBUYWlsQ2Fs
bE1vZGUgbW9kZSkgeyBsbHZtLT5TZXRUYWlsQ2FsbChjYWxsLCBtb2RlID09IElzVGFpbENhbGwp
OyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihM
VmFsdWUgaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxpbmdDb252ZW50aW9uKSB7IGxsdm0tPlNl
dEluc3RydWN0aW9uQ2FsbENvbnYoaW5zdHJ1Y3Rpb24sIGNhbGxpbmdDb252ZW50aW9uKTsgfQog
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRFeHRyYWN0VmFsdWUoTEJ1aWxkZXIgYnVpbGRlciwg
TFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkRXh0cmFj
dFZhbHVlKGJ1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgsICIiKTsgfQogc3RhdGljIGlubGluZSBMVmFs
dWUgYnVpbGRTZWxlY3QoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGNvbmRpdGlvbiwgTFZhbHVl
IHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGxsdm0tPkJ1aWxkU2VsZWN0KGJ1aWxk
ZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5vdFRha2VuLCAiIik7IH0KIHN0YXRpYyBpbmxpbmUgTFZh
bHVlIGJ1aWxkQnIoTEJ1aWxkZXIgYnVpbGRlciwgTEJhc2ljQmxvY2sgZGVzdGluYXRpb24pIHsg
cmV0dXJuIGxsdm0tPkJ1aWxkQnIoYnVpbGRlciwgZGVzdGluYXRpb24pOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE1ODk4NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4OCwxNCArMTg4LDEyIEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNr
TWFwcygKICAgICAgICAgICAgIAogICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29y
ZCA9IGl0ZXItPnZhbHVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBVTlVTRURfUEFSQU0o
cmVjb3JkKTsgLy8gRklYTUU6IHVzZSBBbnlSZWdzLgotCiAgICAgICAgICAgICAvLyBGSVhNRTog
TExWTSBzaG91bGQgdGVsbCB1cyB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuCiAgICAgICAgICAg
ICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgY2FsbEZyYW1lUmVnaXN0ZXIgPSBH
UFJJbmZvOjphcmd1bWVudEdQUjA7Ci0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IEdQUkluZm86
OmFyZ3VtZW50R1BSMTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWNvcmQubG9jYXRpb25z
WzBdLmRpcmVjdEdQUigpOworICAgICAgICAgICAgR1BSUmVnIGNhbGxGcmFtZVJlZ2lzdGVyID0g
cmVjb3JkLmxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNl
ID0gcmVjb3JkLmxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgICAgICAgICAgY29kZUJsb2Nr
LCBnZXRCeUlkLmNvZGVPcmlnaW4oKSwgdXNlZFJlZ2lzdGVycywgY2FsbEZyYW1lUmVnaXN0ZXIs
CkBAIC0yMjQsMTkgKzIyMiwxNyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFj
a01hcHMoCiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNv
cmQgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgVU5VU0VEX1BBUkFN
KHJlY29yZCk7IC8vIEZJWE1FOiB1c2UgQW55UmVncy4KLQogICAgICAgICAgICAgLy8gRklYTUU6
IExMVk0gc2hvdWxkIHRlbGwgdXMgd2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLgogICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMo
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGNhbGxGcmFtZVJlZ2lzdGVyID0g
R1BSSW5mbzo6YXJndW1lbnRHUFIwOwotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSBHUFJJbmZv
Ojphcmd1bWVudEdQUjE7Ci0gICAgICAgICAgICBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjphcmd1
bWVudEdQUjI7CisgICAgICAgICAgICBHUFJSZWcgY2FsbEZyYW1lUmVnaXN0ZXIgPSByZWNvcmQu
bG9jYXRpb25zWzBdLmRpcmVjdEdQUigpOworICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWNv
cmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlID0g
cmVjb3JkLmxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBw
dXRCeUlkLmNvZGVPcmlnaW4oKSwgdXNlZFJlZ2lzdGVycywgY2FsbEZyYW1lUmVnaXN0ZXIsCi0g
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZSksIEpTVmFsdWVSZWdzKHZhbHVlKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIzLCBmYWxzZSwKLSAgICAgICAgICAgICAgICBwdXRCeUlkLmVjbWFN
b2RlKCksIHB1dEJ5SWQucHV0S2luZCgpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBNYWNyb0Fzc2VtYmxlcjo6c2NyYXRjaFJlZ2lzdGVy
LAorICAgICAgICAgICAgICAgIGZhbHNlLCBwdXRCeUlkLmVjbWFNb2RlKCksIHB1dEJ5SWQucHV0
S2luZCgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwoKTsKICAgICAgICAgICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkocmV2aXNp
b24gMTU4OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNp
emUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywzOCArMzMsMTQgQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewogCi1zdGF0aWMgc2l6ZV90IHNfc2l6ZU9mR2V0QnlJZDsKLXN0
YXRpYyBzaXplX3Qgc19zaXplT2ZQdXRCeUlkOwotCiBzaXplX3Qgc2l6ZU9mR2V0QnlJZCgpCiB7
Ci0gICAgaWYgKHNfc2l6ZU9mR2V0QnlJZCkKLSAgICAgICAgcmV0dXJuIHNfc2l6ZU9mR2V0QnlJ
ZDsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7Ci0gICAgCi0gICAgSklUR2V0QnlJZEdl
bmVyYXRvciBnZW5lcmF0b3IoCi0gICAgICAgIDAsIENvZGVPcmlnaW4oKSwgUmVnaXN0ZXJTZXQo
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgIEpTVmFsdWVSZWdzKEdQUklu
Zm86OnJlZ1Q2KSwgSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDcpLCBmYWxzZSk7Ci0gICAgZ2Vu
ZXJhdG9yLmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKLSAgICAKLSAgICByZXR1cm4gc19zaXplT2ZH
ZXRCeUlkID0gaml0Lm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7CisgICAgcmV0dXJuIDI5OwogfQog
CiBzaXplX3Qgc2l6ZU9mUHV0QnlJZCgpCiB7Ci0gICAgaWYgKHNfc2l6ZU9mUHV0QnlJZCkKLSAg
ICAgICAgcmV0dXJuIHNfc2l6ZU9mUHV0QnlJZDsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlciBq
aXQ7Ci0gICAgCi0gICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW5lcmF0b3IoCi0gICAgICAgIDAs
IENvZGVPcmlnaW4oKSwgUmVnaXN0ZXJTZXQoKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
Ci0gICAgICAgIEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q2KSwgSlNWYWx1ZVJlZ3MoR1BSSW5m
bzo6cmVnVDcpLCBHUFJJbmZvOjpyZWdUOCwgZmFsc2UsCi0gICAgICAgIE5vdFN0cmljdE1vZGUs
IE5vdERpcmVjdCk7Ci0gICAgZ2VuZXJhdG9yLmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKLSAgICAK
LSAgICByZXR1cm4gc19zaXplT2ZQdXRCeUlkID0gaml0Lm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7
CisgICAgcmV0dXJuIDMyOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lv
biAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZp
bmFsaXplRnVuY3Rpb24oKQogICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKAogICAg
ICAgICAgICAgICAgICAgICBtX3BsYW4udm0uZnRsVGh1bmtzLT5nZXRPU1JFeGl0R2VuZXJhdGlv
blRodW5rKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9wbGFuLnZtLCBMb2NhdGlvbjo6Zm9y
U3RhY2ttYXBzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdENvZGUtPnN0YWNrbWFw
cywgaXRlci0+dmFsdWUubG9jYXRpb25zWzBdKSkuY29kZSgpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJmppdENvZGUtPnN0YWNrbWFwcywgaXRlci0+dmFsdWUubG9jYXRpb25zWzBd
KSkuY29kZSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGppdENvZGUtPmluaXRp
YWxpemVFeGl0VGh1bmtzKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2Nh
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2Nh
dGlvbi5jcHAJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAotTG9jYXRpb24gTG9jYXRpb246OmZvclN0YWNr
bWFwcyhjb25zdCBTdGFja01hcHMmIHN0YWNrbWFwcywgY29uc3QgU3RhY2tNYXBzOjpMb2NhdGlv
biYgbG9jYXRpb24pCitMb2NhdGlvbiBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKGNvbnN0IFN0YWNr
TWFwcyogc3RhY2ttYXBzLCBjb25zdCBTdGFja01hcHM6OkxvY2F0aW9uJiBsb2NhdGlvbikKIHsK
ICAgICBzd2l0Y2ggKGxvY2F0aW9uLmtpbmQpIHsKICAgICBjYXNlIFN0YWNrTWFwczo6TG9jYXRp
b246OlVucHJvY2Vzc2VkOgpAQCAtNTMsNyArNTMsOCBAQCBMb2NhdGlvbiBMb2NhdGlvbjo6Zm9y
U3RhY2ttYXBzKGNvbnN0IFN0CiAgICAgICAgIHJldHVybiBmb3JDb25zdGFudChsb2NhdGlvbi5v
ZmZzZXQpOwogICAgICAgICAKICAgICBjYXNlIFN0YWNrTWFwczo6TG9jYXRpb246OkNvbnN0YW50
SW5kZXg6Ci0gICAgICAgIHJldHVybiBmb3JDb25zdGFudChzdGFja21hcHMuY29uc3RhbnRzW2xv
Y2F0aW9uLm9mZnNldF0uaW50ZWdlcik7CisgICAgICAgIEFTU0VSVChzdGFja21hcHMpOworICAg
ICAgICByZXR1cm4gZm9yQ29uc3RhbnQoc3RhY2ttYXBzLT5jb25zdGFudHNbbG9jYXRpb24ub2Zm
c2V0XS5pbnRlZ2VyKTsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmgJKHJldmlz
aW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogCi0gICAgc3RhdGljIExvY2F0aW9uIGZvclN0YWNrbWFwcyhjb25zdCBT
dGFja01hcHMmLCBjb25zdCBTdGFja01hcHM6OkxvY2F0aW9uJik7CisgICAgLy8gWW91IGNhbiBw
YXNzIGEgbnVsbCBTdGFja01hcHMgaWYgeW91IGFyZSBjb25maWRlbnQgdGhhdCB0aGUgbG9jYXRp
b24gZG9lc24ndAorICAgIC8vIGludm9sdmUgYSB3aWRlIGNvbnN0YW50LgorICAgIHN0YXRpYyBM
b2NhdGlvbiBmb3JTdGFja21hcHMoY29uc3QgU3RhY2tNYXBzKiwgY29uc3QgU3RhY2tNYXBzOjpM
b2NhdGlvbiYpOwogICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsg
fQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjc1LDEwICsxMjc1
LDEyIEBAIHByaXZhdGU6CiAKICAgICAgICAgLy8gQXJndW1lbnRzOiBpZCwgYnl0ZXMsIHRhcmdl
dCwgbnVtQXJncywgYXJncy4uLgogICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFj
a21hcElEcysrOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNhbGwoCisgICAgICAgIExWYWx1
ZSBjYWxsID0gbV9vdXQuY2FsbCgKICAgICAgICAgICAgIG1fb3V0LnBhdGNocG9pbnRJbnQ2NElu
dHJpbnNpYygpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihzdGFja21hcElEKSwgbV9v
dXQuY29uc3RJbnQzMihzaXplT2ZHZXRCeUlkKCkpLAotICAgICAgICAgICAgY29uc3ROdWxsKG1f
b3V0LnJlZjgpLCBtX291dC5jb25zdEludDMyKDIpLCBtX2NhbGxGcmFtZSwgYmFzZSkpOworICAg
ICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJlZjgpLCBtX291dC5jb25zdEludDMyKDIpLCBtX2Nh
bGxGcmFtZSwgYmFzZSk7CisgICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24o
Y2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsKKyAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKICAg
ICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUuZ2V0QnlJZHMuYXBwZW5kKEdldEJ5SWREZXNjcmlw
dG9yKHN0YWNrbWFwSUQsIG1fbm9kZS0+Y29kZU9yaWdpbiwgdWlkKSk7CiAgICAgfQpAQCAtMTI5
NCwxMCArMTI5NiwxMSBAQCBwcml2YXRlOgogCiAgICAgICAgIC8vIEFyZ3VtZW50czogaWQsIGJ5
dGVzLCB0YXJnZXQsIG51bUFyZ3MsIGFyZ3MuLi4KICAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJ
RCA9IG1fc3RhY2ttYXBJRHMrKzsKLSAgICAgICAgbV9vdXQuY2FsbCgKKyAgICAgICAgTFZhbHVl
IGNhbGwgPSBtX291dC5jYWxsKAogICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludFZvaWRJbnRy
aW5zaWMoKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RhY2ttYXBJRCksIG1fb3V0
LmNvbnN0SW50MzIoc2l6ZU9mUHV0QnlJZCgpKSwKICAgICAgICAgICAgIGNvbnN0TnVsbChtX291
dC5yZWY4KSwgbV9vdXQuY29uc3RJbnQzMigzKSwgbV9jYWxsRnJhbWUsIGJhc2UsIHZhbHVlKTsK
KyAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVn
Q2FsbENvbnYpOwogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5wdXRCeUlkcy5hcHBlbmQo
UHV0QnlJZERlc2NyaXB0b3IoCiAgICAgICAgICAgICBzdGFja21hcElELCBtX25vZGUtPmNvZGVP
cmlnaW4sIHVpZCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENv
bXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDgg
KzE3Nyw4IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIGV4aXQubV9jb2RlID0gRklO
QUxJWkVfQ09ERV9JRigKICAgICAgICAgc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCksCiAgICAgICAg
IHBhdGNoQnVmZmVyLAotICAgICAgICAoIkZUTCBPU1IgZXhpdCAjJXUgKGJjIyV1LCAlcykgZnJv
bSAlcywgd2l0aCBvcGVyYW5kcyA9ICVzLCBhbmQgcmVjb3JkID0gJXMiLAotICAgICAgICAgICAg
ZXhpdElELCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LAorICAgICAgICAoIkZUTCBP
U1IgZXhpdCAjJXUgKCVzLCAlcykgZnJvbSAlcywgd2l0aCBvcGVyYW5kcyA9ICVzLCBhbmQgcmVj
b3JkID0gJXMiLAorICAgICAgICAgICAgZXhpdElELCB0b0NTdHJpbmcoZXhpdC5tX2NvZGVPcmln
aW4pLmRhdGEoKSwKICAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCB0
b0NTdHJpbmcoKmNvZGVCbG9jaykuZGF0YSgpLAogICAgICAgICAgICAgdG9DU3RyaW5nKGlnbm9y
aW5nQ29udGV4dDxEdW1wQ29udGV4dD4oZXhpdC5tX3ZhbHVlcykpLmRhdGEoKSwKICAgICAgICAg
ICAgIHRvQ1N0cmluZygqcmVjb3JkKS5kYXRhKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjQsMjAgKzY0LDIzIEBAIHB1YmxpYzoKICAgICAgICAgbV9vZmZzZXRUb1NhdmluZ0Fy
ZWEgPQogICAgICAgICAgICAgKHN0ZDo6bWF4KG1fbnVtQXJncywgTlVNQkVSX09GX0FSR1VNRU5U
X1JFR0lTVEVSUykgLSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTKSAqIHdvcmRTaXplOwog
ICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtQXJndW1lbnRSZWdpc3RlcnNUaGF0TmVlZFNh
dmluZyA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKE5VTUJFUl9PRl9B
UkdVTUVOVF9SRUdJU1RFUlMsIG51bUFyZ3MpOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV91
c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkpKQotICAgICAg
ICAgICAgICAgIG51bUFyZ3VtZW50UmVnaXN0ZXJzVGhhdE5lZWRTYXZpbmcrKzsKLSAgICAgICAg
fQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihOVU1CRVJfT0ZfQVJHVU1FTlRf
UkVHSVNURVJTLCBudW1BcmdzKTsgaS0tOykKKyAgICAgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRp
b25SZWdpc3RlcnMuc2V0KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSk7CisgICAgICAg
IGlmIChyZXR1cm5SZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgbV9jYWxs
aW5nQ29udmVudGlvblJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLmZpbHRlcihtX3VzZWRSZWdpc3RlcnMp
OworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDYWxsaW5nQ29udmVudGlvblJl
Z2lzdGVycyA9CisgICAgICAgICAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLm51bWJl
ck9mU2V0UmVnaXN0ZXJzKCk7CiAgICAgICAgIAogICAgICAgICBzaXplX3Qgb2Zmc2V0VG9UaHVu
a1NhdmluZ0FyZWEgPQogICAgICAgICAgICAgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKwotICAgICAg
ICAgICAgbnVtQXJndW1lbnRSZWdpc3RlcnNUaGF0TmVlZFNhdmluZyAqIHdvcmRTaXplOworICAg
ICAgICAgICAgbnVtYmVyT2ZDYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycyAqIHdvcmRTaXplOwog
ICAgICAgICAKICAgICAgICAgbV9zdGFja0J5dGVzTmVlZGVkID0KICAgICAgICAgICAgIG9mZnNl
dFRvVGh1bmtTYXZpbmdBcmVhICsKICAgICAgICAgICAgIHN0YWNrQnl0ZXNOZWVkZWRGb3JSZXR1
cm5BZGRyZXNzICsKLSAgICAgICAgICAgIChtX3VzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdp
c3RlcnMoKSAtIG51bUFyZ3VtZW50UmVnaXN0ZXJzVGhhdE5lZWRTYXZpbmcpICogd29yZFNpemU7
CisgICAgICAgICAgICAobV91c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgLSBu
dW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzKSAqIHdvcmRTaXplOwogICAgICAgICAK
ICAgICAgICAgc2l6ZV90IHN0YWNrQWxpZ25tZW50ID0gMTY7CiAgICAgICAgIApAQCAtODcsMTEg
KzkwLDEzIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG1fdGh1bmtTYXZlU2V0ID0gbV91
c2VkUmVnaXN0ZXJzOwogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjpt
aW4oTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUywgbnVtQXJncyk7IGktLTspIHsKLSAgICAg
ICAgICAgIGlmICghbV91c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0
ZXIoaSkpKQorICAgICAgICAvLyBUaGlzIHJlbGllcyBvbiBhbGwgY2FsbGluZyBjb252ZW50aW9u
IHJlZ2lzdGVycyBhbHNvIGJlaW5nIHRlbXAgcmVnaXN0ZXJzLgorICAgICAgICB1bnNpZ25lZCBz
dGFja0luZGV4ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0
b1JlZ2lzdGVyKGkpOworICAgICAgICAgICAgaWYgKCFtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0
ZXJzLmdldChyZWcpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgR1BS
UmVnIHJlZyA9IEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKTsKLSAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKHJlZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVscGVyczo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIG1fb2Zmc2V0VG9TYXZpbmdBcmVhICsgaSAqIHdvcmRTaXplKSk7
CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRvU2F2aW5nQXJlYSAr
IChzdGFja0luZGV4KyspICogd29yZFNpemUpKTsKICAgICAgICAgICAgIG1fdGh1bmtTYXZlU2V0
LmNsZWFyKHJlZyk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMDMsMTEgKzEwOCwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIGlmIChtX3JldHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCiAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBtX3JldHVyblJl
Z2lzdGVyKTsKICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKE5V
TUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMsIG1fbnVtQXJncyk7IGktLTspIHsKLSAgICAgICAg
ICAgIGlmICghbV91c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIo
aSkpKQorICAgICAgICB1bnNpZ25lZCBzdGFja0luZGV4ID0gMDsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgICAg
IEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICAgICAgaWYgKCFt
X2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLmdldChyZWcpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvQXJndW1lbnRSZWdp
c3RlcihpKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG1fb2Zmc2V0VG9TYXZpbmdBcmVh
ICsgaSAqIHdvcmRTaXplKSwgcmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG1fb2Zm
c2V0VG9TYXZpbmdBcmVhICsgKHN0YWNrSW5kZXgrKykgKiB3b3JkU2l6ZSksIHJlZyk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIG1faml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihtX3N0YWNrQnl0ZXNOZWVkZWQpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKQEAgLTEzOSw2ICsxNDUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFN0YXRl
JiBtX3N0YXRlOwogICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKKyAgICBSZWdpc3Rl
clNldCBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzOwogICAgIENDYWxsSGVscGVycyYgbV9q
aXQ7CiAgICAgdW5zaWduZWQgbV9udW1BcmdzOwogICAgIEdQUlJlZyBtX3JldHVyblJlZ2lzdGVy
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtl
eS5oCShyZXZpc2lvbiAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNs
b3dQYXRoQ2FsbEtleS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMSBAQCBwdWJsaWM6
CiAgICAgdm9pZCogY2FsbFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbFRhcmdldDsgfQog
ICAgIHB0cmRpZmZfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQogICAgIAor
ICAgIFNsb3dQYXRoQ2FsbEtleSB3aXRoQ2FsbFRhcmdldCh2b2lkKiBjYWxsVGFyZ2V0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleSh1c2VkUmVnaXN0ZXJzKCksIGNhbGxU
YXJnZXQsIG9mZnNldCgpKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CiAgICAgCiAgICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAkocmV2aXNp
b24gMTU4OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NiwxNSArNjYsMTUgQEAgdm9pZCBTdGFja01hcHM6OkxvY2F0
aW9uOjpkdW1wKFByaW50U3RyZQogICAgIG91dC5wcmludCgiKCIsIGtpbmQsICIsIHJlZyIsIGR3
YXJmUmVnTnVtLCAiLCAiLCBvZmZzZXQsICIpIik7CiB9CiAKLUdQUlJlZyBTdGFja01hcHM6Okxv
Y2F0aW9uOjpkaXJlY3RHUFIoU3RhY2tNYXBzJiBzdGFja21hcHMpIGNvbnN0CitHUFJSZWcgU3Rh
Y2tNYXBzOjpMb2NhdGlvbjo6ZGlyZWN0R1BSKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRlRMOjpM
b2NhdGlvbjo6Zm9yU3RhY2ttYXBzKHN0YWNrbWFwcywgKnRoaXMpLmRpcmVjdEdQUigpOworICAg
IHJldHVybiBGVEw6OkxvY2F0aW9uOjpmb3JTdGFja21hcHMoMCwgKnRoaXMpLmRpcmVjdEdQUigp
OwogfQogCiB2b2lkIFN0YWNrTWFwczo6TG9jYXRpb246OnJlc3RvcmVJbnRvKAogICAgIE1hY3Jv
QXNzZW1ibGVyJiBqaXQsIFN0YWNrTWFwcyYgc3RhY2ttYXBzLCBjaGFyKiBzYXZlZFJlZ2lzdGVy
cywgR1BSUmVnIHJlc3VsdCkgY29uc3QKIHsKLSAgICBGVEw6OkxvY2F0aW9uOjpmb3JTdGFja21h
cHMoc3RhY2ttYXBzLCAqdGhpcykucmVzdG9yZUludG8oaml0LCBzYXZlZFJlZ2lzdGVycywgcmVz
dWx0KTsKKyAgICBGVEw6OkxvY2F0aW9uOjpmb3JTdGFja21hcHMoJnN0YWNrbWFwcywgKnRoaXMp
LnJlc3RvcmVJbnRvKGppdCwgc2F2ZWRSZWdpc3RlcnMsIHJlc3VsdCk7CiB9CiAKIGJvb2wgU3Rh
Y2tNYXBzOjpSZWNvcmQ6OnBhcnNlKERhdGFWaWV3KiB2aWV3LCB1bnNpZ25lZCYgb2Zmc2V0KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5oCShyZXZpc2lvbiAx
NTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHN0cnVjdCBTdGFja01hcHMgewogICAgICAgICB2
b2lkIHBhcnNlKERhdGFWaWV3KiwgdW5zaWduZWQmIG9mZnNldCk7CiAgICAgICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIEdQUlJlZyBkaXJl
Y3RHUFIoU3RhY2tNYXBzJikgY29uc3Q7CisgICAgICAgIEdQUlJlZyBkaXJlY3RHUFIoKSBjb25z
dDsKICAgICAgICAgdm9pZCByZXN0b3JlSW50byhNYWNyb0Fzc2VtYmxlciYsIFN0YWNrTWFwcyYs
IGNoYXIqIHNhdmVkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0KSBjb25zdDsKICAgICB9OwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCShyZXZpc2lvbiAxNTg5
ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCwxOSArNDQsMzggQEAgbmFtZXNwYWNlIEZUTCB7CiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYsIGNvbnN0IExvY2F0aW9u
Jik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoVk0m
LCBjb25zdCBTbG93UGF0aENhbGxLZXkmKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZSwg
dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgR2VuZXJhdG9yVHlwZT4KK3RlbXBsYXRlPHR5cGVu
YW1lIEtleVR5cGVBcmd1bWVudD4KK3N0cnVjdCBUaHVua01hcCB7CisgICAgdHlwZWRlZiBLZXlU
eXBlQXJndW1lbnQgS2V5VHlwZTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8S2V5VHlwZSwgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPiBUb1RodW5rTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxNYWNyb0Fz
c2VtYmxlckNvZGVQdHIsIEtleVR5cGU+IEZyb21UaHVua01hcDsKKyAgICAKKyAgICBUb1RodW5r
TWFwIG1fdG9UaHVuazsKKyAgICBGcm9tVGh1bmtNYXAgbV9mcm9tVGh1bms7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBNYXBUeXBlLCB0eXBlbmFtZSBHZW5lcmF0b3JUeXBlPgogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGdlbmVyYXRlSWZOZWNlc3NhcnkoCi0gICAgVk0mIHZtLCBNYXBUeXBlJiBt
YXAsIGNvbnN0IEtleVR5cGUmIGtleSwgR2VuZXJhdG9yVHlwZSBnZW5lcmF0b3IpCisgICAgVk0m
IHZtLCBNYXBUeXBlJiBtYXAsIGNvbnN0IHR5cGVuYW1lIE1hcFR5cGU6OktleVR5cGUmIGtleSwg
R2VuZXJhdG9yVHlwZSBnZW5lcmF0b3IpCiB7Ci0gICAgdHlwZW5hbWUgTWFwVHlwZTo6aXRlcmF0
b3IgaXRlciA9IG1hcC5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXIgIT0gbWFwLmVuZCgpKQorICAg
IHR5cGVuYW1lIE1hcFR5cGU6OlRvVGh1bmtNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtYXAubV90b1Ro
dW5rLmZpbmQoa2V5KTsKKyAgICBpZiAoaXRlciAhPSBtYXAubV90b1RodW5rLmVuZCgpKQogICAg
ICAgICByZXR1cm4gaXRlci0+dmFsdWU7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHJlc3VsdCA9IGdlbmVyYXRvcih2bSwga2V5KTsKLSAgICBtYXAuYWRkKGtleSwgcmVzdWx0KTsK
KyAgICBtYXAubV90b1RodW5rLmFkZChrZXksIHJlc3VsdCk7CisgICAgbWFwLm1fZnJvbVRodW5r
LmFkZChyZXN1bHQuY29kZSgpLCBrZXkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIE1hcFR5cGU+Cit0eXBlbmFtZSBNYXBUeXBlOjpLZXlUeXBlIGtleUZvclRo
dW5rKE1hcFR5cGUmIG1hcCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHB0cikKK3sKKyAgICB0eXBl
bmFtZSBNYXBUeXBlOjpGcm9tVGh1bmtNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtYXAubV9mcm9tVGh1
bmsuZmluZChwdHIpOworICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gbWFwLm1fZnJvbVRodW5r
LmVuZCgpKTsKKyAgICByZXR1cm4gaXRlci0+dmFsdWU7Cit9CisKIGNsYXNzIFRodW5rcyB7CiBw
dWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdldE9TUkV4aXRHZW5lcmF0aW9uVGh1
bmsoVk0mIHZtLCBjb25zdCBMb2NhdGlvbiYgbG9jYXRpb24pCkBAIC03MSw5ICs5MCwxNCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICB2bSwgbV9zbG93UGF0aENhbGxUaHVua3MsIGtleSwgc2xvd1Bh
dGhDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgIH0KICAgICAKKyAgICBTbG93UGF0aENhbGxLZXkg
a2V5Rm9yU2xvd1BhdGhDYWxsVGh1bmsoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHB0cikKKyAgICB7
CisgICAgICAgIHJldHVybiBrZXlGb3JUaHVuayhtX3Nsb3dQYXRoQ2FsbFRodW5rcywgcHRyKTsK
KyAgICB9CisgICAgCiBwcml2YXRlOgotICAgIEhhc2hNYXA8TG9jYXRpb24sIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZj4gbV9vc3JFeGl0VGh1bmtzOwotICAgIEhhc2hNYXA8U2xvd1BhdGhDYWxsS2V5
LCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IG1fc2xvd1BhdGhDYWxsVGh1bmtzOworICAgIFRodW5r
TWFwPExvY2F0aW9uPiBtX29zckV4aXRUaHVua3M7CisgICAgVGh1bmtNYXA8U2xvd1BhdGhDYWxs
S2V5PiBtX3Nsb3dQYXRoQ2FsbFRodW5rczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRlBSSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRlBSSW5mby5oCShyZXZpc2lvbiAxNTg5ODQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0ZQUkluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtNzQsNyArNzQsMTAgQEAgcHVibGljOgogICAgIH0KICAgICBzdGF0aWMgdW5zaWduZWQgdG9J
bmRleChGUFJSZWcgcmVnKQogICAgIHsKLSAgICAgICAgcmV0dXJuICh1bnNpZ25lZClyZWc7Cisg
ICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9ICh1bnNpZ25lZClyZWc7CisgICAgICAgIGlmIChyZXN1
bHQgPj0gbnVtYmVyT2ZSZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1cm4gSW52YWxpZEluZGV4
OworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICBzdGF0aWMgRlBSUmVn
IHRvQXJndW1lbnRSZWdpc3Rlcih1bnNpZ25lZCBpbmRleCkKQEAgLTEwMiw2ICsxMDUsOCBAQCBw
dWJsaWM6CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIG5hbWVGb3JSZWdpc3RlcltyZWddOwogICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSW52YWxpZEluZGV4ID0gMHhmZmZm
ZmZmZjsKIH07CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJ
KHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MjEsOSArNDIxLDcgQEAgcHVibGljOgogICAgICAgICBBU1NF
UlQocmVnICE9IEludmFsaWRHUFJSZWcpOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50
PihyZWcpIDwgMTYpOwogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5kZXhGb3JSZWdp
c3RlclsxNl0gPSB7IDAsIDIsIDEsIDMsIEludmFsaWRJbmRleCwgSW52YWxpZEluZGV4LCA1LCA0
LCA2LCA3LCA4LCBJbnZhbGlkSW5kZXgsIEludmFsaWRJbmRleCwgOSwgSW52YWxpZEluZGV4LCBJ
bnZhbGlkSW5kZXggfTsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gaW5kZXhGb3JSZWdpc3Rl
cltyZWddOwotICAgICAgICBBU1NFUlQocmVzdWx0ICE9IEludmFsaWRJbmRleCk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBpbmRleEZvclJlZ2lzdGVyW3JlZ107CiAg
ICAgfQogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlYnVnTmFtZShHUFJSZWcgcmVnKQpAQCAt
NDM4LDcgKzQzNiw2IEBAIHB1YmxpYzoKICAgICAgICAgfTsKICAgICAgICAgcmV0dXJuIG5hbWVG
b3JSZWdpc3RlcltyZWddOwogICAgIH0KLXByaXZhdGU6CiAKICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgSW52YWxpZEluZGV4ID0gMHhmZmZmZmZmZjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAkocmV2aXNpb24gMTU4OTg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDcgKzU5LDYgQEAgUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpcwogI2lm
IENQVShYODZfNjQpCiAgICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6OmVieCk7CiAgICAgcmVz
dWx0LnNldChYODZSZWdpc3RlcnM6OmVicCk7Ci0gICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6
OnIxMCk7CiAgICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6OnIxMik7CiAgICAgcmVzdWx0LnNl
dChYODZSZWdpc3RlcnM6OnIxMyk7CiAgICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6OnIxNCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAx
NTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTgxLDYgKzgxLDcgQEAgcHVibGljOgogICAgIGJvb2wgZ2V0KEZQUlJlZyBy
ZWcpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmdldChNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJ
bmRleChyZWcpKTsgfQogICAgIAogICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnaXN0ZXJTZXQmIG90
aGVyKSB7IG1fdmVjdG9yLm1lcmdlKG90aGVyLm1fdmVjdG9yKTsgfQorICAgIHZvaWQgZmlsdGVy
KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX3ZlY3Rvci5maWx0ZXIob3RoZXIubV92ZWN0
b3IpOyB9CiAgICAgdm9pZCBleGNsdWRlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX3Zl
Y3Rvci5leGNsdWRlKG90aGVyLm1fdmVjdG9yKTsgfQogICAgIAogICAgIHNpemVfdCBudW1iZXJP
ZlNldFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmJpdENvdW50KCk7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTU4OTg0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAi
Q2FsbEZyYW1lSW5saW5lcy5oIgorI2luY2x1ZGUgIkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIkdD
QXdhcmVKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRl
ICJPcGVyYXRpb25zLmgiCkBAIC01MiwxMCArNTMsNDQgQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyBn
aXZlIHRoZSBGVEwgY2xvc3VyZSBjYWxsIHBhdGNoaW5nIHN1cHBvcnQgdW50aWwgd2Ugc3dpdGNo
IHRvIHRoZSBDIHN0YWNrIC0gYnV0IHdoZW4gd2UgZG8gdGhhdCwKIC8vIGNhbGxGcmFtZVJlZ2lz
dGVyIHdpbGwgZGlzYXBwZWFyLgogCitzdGF0aWMgRnVuY3Rpb25QdHIgcmVhZENhbGxUYXJnZXQo
UmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsKQorewor
ICAgIEZ1bmN0aW9uUHRyIHJlc3VsdCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChj
YWxsKTsKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHJl
cGF0Y2hCdWZmZXIuY29kZUJsb2NrKCk7CisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09
IEpJVENvZGU6OkZUTEpJVCkgeworICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIoY29kZUJsb2Nr
LT52bSgpLT5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MoCisgICAg
ICAgICAgICAgICAgcmVzdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCkpKS5jYWxsVGFyZ2V0KCkpOwor
ICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHJlcGF0Y2hCdWZmZXIpOworI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHJl
cGF0Y2hDYWxsKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIENvZGVMb2NhdGlvbkNhbGwg
Y2FsbCwgRnVuY3Rpb25QdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCit7CisjaWYgRU5BQkxFKEZUTF9K
SVQpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSByZXBhdGNoQnVmZmVyLmNvZGVCbG9jaygp
OworICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKKyAg
ICAgICAgVk0mIHZtID0gKmNvZGVCbG9jay0+dm0oKTsKKyAgICAgICAgRlRMOjpUaHVua3MmIHRo
dW5rcyA9ICp2bS5mdGxUaHVua3M7CisgICAgICAgIEZUTDo6U2xvd1BhdGhDYWxsS2V5IGtleSA9
IHRodW5rcy5rZXlGb3JTbG93UGF0aENhbGxUaHVuaygKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsKS5leGVjdXRhYmxlQWRkcmVzcygp
KSk7CisgICAgICAgIGtleSA9IGtleS53aXRoQ2FsbFRhcmdldChuZXdDYWxsZWVGdW5jdGlvbi5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24gPSBGdW5jdGlv
blB0cigKKyAgICAgICAgICAgIHRodW5rcy5nZXRTbG93UGF0aENhbGxUaHVuayh2bSwga2V5KS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQorICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uKTsK
K30KKwogc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlYmxvY2ssIENvZGVM
b2NhdGlvbkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVibG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24pOworICAgIHJlcGF0Y2hDYWxsKHJlcGF0
Y2hCdWZmZXIsIGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uKTsKIH0KIAogc3RhdGljIHZvaWQgcmVw
YXRjaEJ5SWRTZWxmQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IGNvbnN0IEZ1bmN0aW9uUHRyICZzbG93UGF0aEZ1bmN0aW9uLCBib29sIGNvbXBhY3QpCkBAIC02
Myw3ICs5OCw3IEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcyhDb2RlQmwKICAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKIAogICAgIC8vIE9ubHkg
b3B0aW1pemUgb25jZSEKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIHNsb3dQYXRoRnVuY3Rpb24pOworICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hC
dWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlvbik7CiAK
ICAgICAvLyBQYXRjaCB0aGUgc3RydWN0dXJlIGNoZWNrICYgdGhlIG9mZnNldCBvZiB0aGUgbG9h
ZC4KICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVj
a0ltbVRvQ2FsbCksIHN0cnVjdHVyZSk7CkBAIC0zMTQsNyArMzQ5LDcgQEAgc3RhdGljIGJvb2wg
dHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAKICAgICAgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgIHJlcGxhY2VXaXRoSnVtcChy
ZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOworICAgICAgICByZXBhdGNoQ2FsbChyZXBhdGNoQnVm
ZmVyLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwogICAg
ICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzYyLDcgKzM5Nyw3IEBAIHN0
YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAKICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICByZXBsYWNlV2l0aEp1bXAocmVw
YXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpOworICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZm
ZXIsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlz
dCk7CiAgICAgCiAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCB0cnVl
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwMDAsNyArMTAzNSw3IEBAIHN0YXRpYyBib29sIHRy
eUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICBzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwKICAgICAgICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBh
cHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7Cisg
ICAgICAgICAgICByZXBhdGNoQ2FsbChyZXBhdGNoQnVmZmVyLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1
dEtpbmQpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRU
cmFuc2l0aW9uKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJl
LCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBwdXRLaW5kID09IERpcmVjdCk7CiAgICAgICAg
ICAgICAKQEAgLTExMDUsNyArMTE0MCw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExp
c3QoRXhlY1N0YXQKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1N0cnVj
dENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKLSAgICAgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVH
ZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAgICAgIHJlcGF0
Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9w
cmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKICAgICAgICAgCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTEzODAsNyArMTQxNSw3IEBAIHZvaWQgbGlu
a0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2EKIAogdm9pZCByZXNldEdldEJ5SUQoUmVw
YXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQog
ewotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwg
b3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKKyAgICByZXBhdGNoQ2FsbChyZXBhdGNoQnVmZmVy
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7
CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1Yklu
Zm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCk7CiAgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpj
YW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7CiAgICAgICAgIHJl
cGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRo
UGF0Y2goCkBAIC0xNDAyLDcgKzE0MzcsNyBAQCB2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNoQnVm
ZmVyJiByZXBhdGNoCiAKIHZvaWQgcmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hC
dWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKLSAgICBWX0pJVE9wZXJhdGlv
bl9FU3NpSkpJIHVub3B0aW1pemVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRp
b25fRVNzaUpKST4oTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgVl9KSVRPcGVyYXRpb25f
RVNzaUpKSSB1bm9wdGltaXplZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PFZfSklUT3BlcmF0aW9u
X0VTc2lKSkk+KHJlYWRDYWxsVGFyZ2V0KHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgVl9KSVRPcGVyYXRpb25fRVNz
aUpKSSBvcHRpbWl6ZWRGdW5jdGlvbjsKICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9u
UHV0QnlJZFN0cmljdEJ1aWxkTGlzdCkKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVy
YXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CkBAIC0xNDE0LDcgKzE0NDksNyBAQCB2b2lkIHJl
c2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNoCiAgICAgICAgIEFTU0VSVCh1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0
KTsKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemU7CiAgICAgfQotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVuY3Rpb24pOworICAgIHJlcGF0Y2hDYWxs
KHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVu
Y3Rpb24pOwogICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVMYWJlbCA9IHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90
KXN0dWJJbmZvLnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOwogICAgIGlmIChNYWNyb0Fzc2Vt
Ymxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSkgewogICAg
ICAgICByZXBhdGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNo
UHRyV2l0aFBhdGNoKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCShyZXZpc2lvbiAxNTg5ODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw5ICs0NCwyMSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9kaWRSZXVzZVJlZ2lz
dGVycyhmYWxzZSkKICAgICB7CiAgICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci0gICAgdm9pZCBsb2NrKFQgcmVnKSB7IG1fbG9ja2VkUmVnaXN0ZXJzLnNldChyZWcpOyB9CisK
KyAgICB2b2lkIGxvY2soR1BSUmVnIHJlZykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gR1BSSW5mbzo6dG9JbmRleChyZWcpOworICAgICAgICBpZiAoaW5kZXggPT0gR1BSSW5mbzo6
SW52YWxpZEluZGV4KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2xvY2tlZFJlZ2lz
dGVycy5zZXRHUFJCeUluZGV4KGluZGV4KTsKKyAgICB9CisgICAgdm9pZCBsb2NrKEZQUlJlZyBy
ZWcpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IEZQUkluZm86OnRvSW5kZXgocmVn
KTsKKyAgICAgICAgaWYgKGluZGV4ID09IEZQUkluZm86OkludmFsaWRJbmRleCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0RlBSQnlJbmRleChpbmRl
eCk7CisgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgogICAgIHR5
cGVuYW1lIEJhbmtJbmZvOjpSZWdpc3RlclR5cGUgYWxsb2NhdGVTY3JhdGNoKCkKSW5kZXg6IFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxNTkwMDMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDEzLTExLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgU3dpdGNoIEZUTCBHZXRCeUlkL1B1dEJ5SWQgSUMncyBvdmVyIHRvIHVz
aW5nIEFueVJlZ0NDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjQwOTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIEkgbmVlZGVkIHRvIGFkZCBhbm90aGVyIHNldCBvcGVyYXRpb24sIG5hbWVs
eSBmaWx0ZXIoKSwgd2hpY2ggaXMgYW4gaW4tcGxhY2Ugc2V0CisgICAgICAgIGludGVyc2VjdGlv
bi4KKworICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuY3BwOgorICAgICAgICAoV1RGOjpCaXRWZWN0
b3I6OmZpbHRlclNsb3cpOgorICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoKKyAgICAgICAgKFdU
Rjo6Qml0VmVjdG9yOjpmaWx0ZXIpOgorCiAyMDEzLTExLTA5ICBQYXRyaWNrIEdhbnN0ZXJlciAg
PHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIE1vdmUgUnVuTG9vcCBmcm9tIFdlYkNvcmUg
dG8gV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJj
ZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsMzEg
QEAgdm9pZCBCaXRWZWN0b3I6Om1lcmdlU2xvdyhjb25zdCBCaXRWZWN0bwogICAgICAgICBhLT5i
aXRzKClbaV0gfD0gYi0+Yml0cygpW2ldOwogfQogCit2b2lkIEJpdFZlY3Rvcjo6ZmlsdGVyU2xv
dyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKQoreworICAgIGlmIChvdGhlci5pc0lubGluZSgpKSB7
CisgICAgICAgIEFTU0VSVCghaXNJbmxpbmUoKSk7CisgICAgICAgICpiaXRzKCkgJj0gY2xlYW5z
ZUlubGluZUJpdHMob3RoZXIubV9iaXRzT3JQb2ludGVyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpZiAoaXNJbmxpbmUoKSkgeworICAgICAgICBBU1NFUlQoIW90aGVyLmlz
SW5saW5lKCkpOworICAgICAgICBtX2JpdHNPclBvaW50ZXIgJj0gKm90aGVyLm91dE9mTGluZUJp
dHMoKS0+Yml0cygpOworICAgICAgICBtX2JpdHNPclBvaW50ZXIgfD0gKHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0cygpKTsKKyAgICAgICAgQVNTRVJUKGlzSW5saW5l
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIE91dE9mTGluZUJpdHMqIGEg
PSBvdXRPZkxpbmVCaXRzKCk7CisgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogYiA9IG90aGVyLm91
dE9mTGluZUJpdHMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihhLT5udW1Xb3Jk
cygpLCBiLT5udW1Xb3JkcygpKTsgaS0tOykKKyAgICAgICAgYS0+Yml0cygpW2ldICY9IGItPmJp
dHMoKVtpXTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBiLT5udW1Xb3JkcygpOyBpIDwg
YS0+bnVtV29yZHMoKTsgKytpKQorICAgICAgICBhLT5iaXRzKClbaV0gPSAwOworfQorCiB2b2lk
IEJpdFZlY3Rvcjo6ZXhjbHVkZVNsb3coY29uc3QgQml0VmVjdG9yJiBvdGhlcikKIHsKICAgICBp
ZiAob3RoZXIuaXNJbmxpbmUoKSkgewpJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDE1ODk4
NCkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODEs
NiArMTgxLDE2IEBAIHB1YmxpYzogCiAgICAgICAgIEFTU0VSVChpc0lubGluZSgpKTsKICAgICB9
CiAgICAgCisgICAgdm9pZCBmaWx0ZXIoY29uc3QgQml0VmVjdG9yJiBvdGhlcikKKyAgICB7Cisg
ICAgICAgIGlmICghaXNJbmxpbmUoKSB8fCAhb3RoZXIuaXNJbmxpbmUoKSkgeworICAgICAgICAg
ICAgZmlsdGVyU2xvdyhvdGhlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgbV9iaXRzT3JQb2ludGVyICY9IG90aGVyLm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAg
QVNTRVJUKGlzSW5saW5lKCkpOworICAgIH0KKyAgICAKICAgICB2b2lkIGV4Y2x1ZGUoY29uc3Qg
Qml0VmVjdG9yJiBvdGhlcikKICAgICB7CiAgICAgICAgIGlmICghaXNJbmxpbmUoKSB8fCAhb3Ro
ZXIuaXNJbmxpbmUoKSkgewpAQCAtMzAyLDYgKzMxMiw3IEBAIHByaXZhdGU6CiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgc2V0U2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKTsKICAgICAK
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZVNsb3coY29uc3QgQml0VmVjdG9yJiBv
dGhlcik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsdGVyU2xvdyhjb25zdCBCaXRW
ZWN0b3ImIG90aGVyKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBleGNsdWRlU2xvdyhj
b25zdCBCaXRWZWN0b3ImIG90aGVyKTsKICAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6
ZV90IGJpdENvdW50U2xvdygpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216500</attachid>
            <date>2013-11-09 16:57:01 -0800</date>
            <delta_ts>2013-11-09 17:03:20 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>42463</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5MDAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyOSBA
QAorMjAxMy0xMS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFN3aXRjaCBGVEwgR2V0QnlJZC9QdXRCeUlkIElDJ3Mgb3ZlciB0byB1c2luZyBBbnlSZWdDQwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MDk0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBU
aGlzIGNsb3NlcyB0aGUgbG9vcCBvbiBpbmxpbmUgY2FjaGVzIChJQydzKSBpbiB0aGUgRlRMLiBU
aGUgZ29hbCBpcyB0byBoYXZlIElDJ3MKKyAgICAgICAgaW4gTExWTS1nZW5lcmF0ZWQgY29kZSB0
aGF0IGFyZSBqdXN0IGFzIGVmZmljaWVudCAoaWYgbm90IG1vcmUgc28pIHRoYW4gd2hhdCBhCisg
ICAgICAgIGN1c3RvbSBKSVQgY291bGQgZG8uIEFzIGluIHplcm8gc291cmNlcyBvZiBvdmVyaGVh
ZC4gTm90IGEgc2luZ2xlIGV4dHJhIGluc3RydWN0aW9uCisgICAgICAgIG9yIGV2ZW4gcmVnaXN0
ZXIgYWxsb2NhdGlvbiBwYXRob2xvZ3kuIFdlIGFjY29tcGxpc2ggdGhpcyBieSBoYXZpbmcgdHdv
IHRoaW5naWVzIGluCisgICAgICAgIExMVk0uIEZpcnN0IGlzIHRoZSBsbHZtLmV4cGVyaW1lbnRh
bC5wYXRjaHBvaW50IGludHJpbnNpYywgd2hpY2ggaXMgc29ydCBvZiBhbgorICAgICAgICBpbmxp
bmUgbWFjaGluZSBjb2RlIHNuaXBwZXQgdGhhdCB3ZSBjYW4gZmlsbCBpbiB3aXRoIHdoYXRldmVy
IHdlIHdhbnQgYW5kIHRoZW4KKyAgICAgICAgbW9kaWZ5IHN1YnNlcXVlbnRseS4gQnV0IHlvdSBo
YXZlIG9ubHkgdHdvIGNob2ljZXMgb2YgaG93IHRvIHBhc3MgdmFsdWVzIHRvIGEKKyAgICAgICAg
cGF0Y2hwb2ludDogKDEpIHZpYSB0aGUgY2FsbGluZyBjb252ZW50aW9uIG9yICgyKSB2aWEgdGhl
IHN0YWNrbWFwLiBOZWl0aGVyIGFyZSBnb29kCisgICAgICAgIGZvciBvcGVyYW5kcyB0byBhbiBJ
QyAobGlrZSB0aGUgYmFzZSBwb2ludGVyIGZvciBhIEdldEJ5SWQsIGZvciBleGFtcGxlKS4gKDEp
IGlzIGJhZAorICAgICAgICBiZWNhdXNlIGl0IHJlc3VsdHMgaW4gdGhpbmdzIGJlaW5nIHBpbm5l
ZCB0byBjZXJ0YWluIHJlZ2lzdGVycyBhIHByaW9yaTsgYSBjdXN0b20KKyAgICAgICAgSklUIChs
aWtlIHRoZSBERkcpIHdpbGwgbm90IHBpbiBJQyBvcGVyYW5kcyB0byBhbnkgcmVnaXN0ZXJzIGEg
cHJpb3IgYnV0IHdpbGwgYWxsb3cKKyAgICAgICAgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciB0byBk
byB3aGF0ZXZlciBpdCB3YW50cy4gKDIpIGlzIGJhZCBiZWNhdXNlIHRoZSBvcGVyYW5kcyBtYXkK
KyAgICAgICAgYmUgc3BpbGxlZCBvciBtYXkgYmUgcmVwcmVzZW50ZWQgaW4gb3RoZXIgY3Jhenkg
d2F5cy4gWW91IGdlbmVyYWxseSB3YW50IGFuIElDIHRvCisgICAgICAgIGhhdmUgaXRzIG9wZXJh
bmRzIGluIHJlZ2lzdGVycy4gQWxzbywgcGF0Y2hwb2ludHMgb25seSByZXR1cm4gdmFsdWVzIHVz
aW5nIHRoZQorICAgICAgICBjYWxsaW5nIGNvbnZlbnRpb24sIHdoaWNoIGlzIHVuZm9ydHVuYXRl
IHNpbmNlIGl0IHBpbnMgdGhlIHJldHVybiB2YWx1ZSB0byBhCisgICAgICAgIHJlZ2lzdGVyIGEg
cHJpb3JpLiBUaGlzIGlzIHdoZXJlIHRoZSBzZWNvbmQgdGhpbmd5IGNvbWVzIGluOiB0aGUgQW55
UmVnQ0MuIFRoaXMgaXMKKyAgICAgICAgYSBzcGVjaWFsIGNhbGxpbmcgY29udmVudGlvbiBvbmx5
IGZvciB1c2Ugd2l0aCBwYXRjaHBvaW50cy4gSXQgbWVhbnMgdGhhdCBhcmd1bWVudHMKKyAgICAg
ICAgcGFzc2VkICJieSBDQyIgaW4gdGhlIHBhdGNocG9pbnQgY2FuIGJlIHBsYWNlZCBpbiBhbnkg
cmVnaXN0ZXIsIGFuZCB0aGUgcmVnaXN0ZXIKKyAgICAgICAgdGhhdCBnZXRzIHVzZWQgaXMgcmVw
b3J0ZWQgYXMgcGFydCBvZiB0aGUgc3RhY2ttYXAuIEl0IGFsc28gbWVhbnMgdGhhdCB0aGUgcmV0
dXJuCisgICAgICAgIHZhbHVlIChpZiB0aGVyZSBpcyBvbmUpIGNhbiBiZSBwbGFjZWQgaW4gYW55
IHJlZ2lzdGVyLCBhbmQgdGhlIHN0YWNrbWFwIHdpbGwgdGVsbAorICAgICAgICB5b3Ugd2hpY2gg
b25lIGl0IHdhcy4gVGh1cywgcGF0Y2hwb2ludHMgY29tYmluZWQgd2l0aCBBbnlSZWdDQyBtZWFu
IHRoYXQgeW91IG5vdAorICAgICAgICBvbmx5IGdldCB0aGUga2luZCBvZiBzZWxmLW1vZGlmeWlu
ZyBjb2RlIHRoYXQgeW91IHdhbnQgZm9yIElDJ3MsIGJ1dCB5b3UgYWxzbyBnZXQKKyAgICAgICAg
YWxsIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0aW9uIGdvb2RuZXNzIHRoYXQgYSBjdXN0b20gSklU
IHdvdWxkIGhhdmUgZ2l2ZW4geW91LgorICAgICAgICBFeGNlcHQgdGhhdCB5b3UncmUgZ2V0dGlu
ZyBpdCBmcm9tIExMVk0gYW5kIG5vdCBhIGN1c3RvbSBKSVQuIEF3ZXNvbWUuCisgICAgICAgIAor
ICAgICAgICBFdmVuIHRob3VnaCBhbGwgb2YgdGhlIGZ1biBzdHVmZiBpcyBvbiB0aGUgTExWTSBz
aWRlLCB0aGlzIHBhdGNoIHdhcyBoYXJkZXIgdGhhbgorICAgICAgICB5b3UnZCBleHBlY3QuCisg
ICAgICAgIAorICAgICAgICBGaXJzdCB0aGUgb2J2aW91cyBiaXRzOgorICAgICAgICAKKyAgICAg
ICAgLSBJQyBwYXRjaHBvaW50cyBub3cgdXNlIEFueVJlZ0NDIGluc3RlYWQgb2YgdGhlIEMgQ0Mu
IChDQyA9IGNhbGxpbmcgY29udmVudGlvbi4pCisgICAgICAgIAorICAgICAgICAtIEZUTDo6Zml4
RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKCkgbm93IGNvcnJlY3RseSBmaWd1cmVzIG91dCB3aGlj
aCByZWdpc3RlcnMgdGhlCisgICAgICAgICAgSUMgaXMgc3VwcG9zZWQgdG8gdXNlIGluc3RlYWQg
b2YgYXNzdW1pbmcgQyBDQyBhcmd1bWVudCByZWdpc3RlcnMuCisgICAgICAgIAorICAgICAgICBB
bmQgdGhlbiBhbGwgb2YgdGhlIHN0dWZmIHRoYXQgYnJva2UgYW5kIHRoYXQgdGhpcyBwYXRjaCBm
aXhlczoKKyAgICAgICAgCisgICAgICAgIC0gSUMgc2l6aW5nIGJhc2VkIG9uIGdlbmVyYXRpbmcg
YSBkdW1teSBJQyAod2hhdCBGVExJbmxpbmVDYWNoZVNpemUgZGlkKSBpcyB0b3RhbGx5CisgICAg
ICAgICAgYmFkIG9uIHg4Ni02NCwgd2hlciB2YXJpb3VzIHJlZ2lzdGVyIHBlcm11dGF0aW9ucyBs
ZWFkIHRvIGJpemFycmUgaGVhZGVyIGJ5dGVzIGFuZAorICAgICAgICAgIGVjbGVjdGljIFNJQiBl
bmNvZGluZ3MuIEkgY2hhbmdlZCB0aGF0IHRvIGhhdmUgbWFnaWMgY29uc3RhbnRzLCBmb3Igbm93
LgorICAgICAgICAKKyAgICAgICAgLSBTbG93IHBhdGggY2FsbHMgZGlkbid0IHByZXNlcnZlIHRo
ZSBDQyByZXR1cm4gcmVnaXN0ZXIuCisgICAgICAgIAorICAgICAgICAtIFJlcGF0Y2gncyBzY3Jh
dGNoIHJlZ2lzdGVyIGFsbG9jYXRpb24gd291bGQgZ2V0IHRvdGFsbHkgY29uZnVzZWQgaWYgdGhl
IG9wZXJhbmQKKyAgICAgICAgICByZWdpc3RlcnMgd2VyZW4ndCBvbmUgb2YgdGhlIERGRy1zdHls
ZSAidGVtcCIgcmVnaXN0ZXJzLiBBbmQgYnkgInRvdGFsbHkgY29uZnVzZWQiCisgICAgICAgICAg
SSBtZWFuIHRoYXQgaXQgd291bGQgY3Jhc2guCisgICAgICAgIAorICAgICAgICAtIFdlIGFzc3Vt
ZWQgdGhhdCByMTAgaXMgY2FsbGVlLXNhdmVkLiBJdCdzIG5vdC4gVGhhdCBvbmUgZHVkZSdzIFBQ
VCBhYm91dCB4ODYtNjQKKyAgICAgICAgICBjZGVjbCB0aGF0IEkgZm91bmQgb24gdGhlIGludGVy
dHViZXMgd2FzIG5vdCBhIHRydXN0d29ydGh5IHNvdXJjZSBvZiBpbmZvcm1hdGlvbiwKKyAgICAg
ICAgICBhcHBhcmVudGx5LgorICAgICAgICAKKyAgICAgICAgLSBDYWxsIHJlcGF0Y2hpbmcgZGlk
bid0IGtub3cgdGhhdCB0aGUgRlRMIGRvZXMgaXRzIElDIHNsb3cgY2FsbHMgdmlhIHNwZWNpYWxs
eQorICAgICAgICAgIGdlbmVyYXRlZCB0aHVua3MuIFRoaXMgd2FzIHBhcnRpY3VsYXJseSBmdW4g
dG8gZml4OiBiYXNpY2FsbHksIG5vdyB3aGVuIHdlIHJlbGluaworICAgICAgICAgIGFuIElDIGNh
bGwgaW4gdGhlIEZUTCwgd2UgdXNlIHRoZSBvbGQgY2FsbCB0YXJnZXQgdG8gZmluZCB0aGUgU2xv
d1BhdGhDYWxsS2V5LAorICAgICAgICAgIHdoaWNoIHRlbGxzIHVzIGV2ZXJ5dGhpbmcgd2UgbmVl
ZCB0byBrbm93IHRvIGdlbmVyYXRlIChvciBsb29rIHVwKSBhIG5ldyB0aHVuayBmb3IKKyAgICAg
ICAgICB0aGUgbmV3IGZ1bmN0aW9uIHdlIHdhbnQgdG8gY2FsbC4KKyAgICAgICAgCisgICAgICAg
ICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6aXNFbXB0eVZhbHVlKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJDb2RlUHRyOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjo6aGFzaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjo6ZW1wdHlWYWx1ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
ZGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRySGFzaDo6
aGFzaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0ckhhc2g6OmVxdWFsKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAg
KiBhc3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpSZXBhdGNoQnVmZmVy
OjpSZXBhdGNoQnVmZmVyKToKKyAgICAgICAgKEpTQzo6UmVwYXRjaEJ1ZmZlcjo6Y29kZUJsb2Nr
KToKKyAgICAgICAgKiBmdGwvRlRMQWJicmV2aWF0aW9ucy5oOgorICAgICAgICAoSlNDOjpGVEw6
OnNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24pOgorICAgICAgICAqIGZ0bC9GVExDb21w
aWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMp
OgorICAgICAgICAqIGZ0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OnNpemVPZkdldEJ5SWQpOgorICAgICAgICAoSlNDOjpGVEw6OnNpemVPZlB1dEJ5SWQpOgor
ICAgICAgICAqIGZ0bC9GVExKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJ
VEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAgICogZnRsL0ZUTExvY2F0aW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKToKKyAgICAg
ICAgKiBmdGwvRlRMTG9jYXRpb24uaDoKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0QnlJZCk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVQdXRCeUlkKToKKyAg
ICAgICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
b21waWxlU3R1Yik6CisgICAgICAgICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHA6CisgICAgICAg
ICogZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oOgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRo
Q2FsbEtleTo6d2l0aENhbGxUYXJnZXQpOgorICAgICAgICAqIGZ0bC9GVExTdGFja01hcHMuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OlN0YWNrTWFwczo6TG9jYXRpb246OmRpcmVjdEdQUik6Cisg
ICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpMb2NhdGlvbjo6cmVzdG9yZUludG8pOgorICAg
ICAgICAqIGZ0bC9GVExTdGFja01hcHMuaDoKKyAgICAgICAgKiBmdGwvRlRMVGh1bmtzLmg6Cisg
ICAgICAgIChKU0M6OkZUTDo6Z2VuZXJhdGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkZU
TDo6a2V5Rm9yVGh1bmspOgorICAgICAgICAoSlNDOjpGVEw6OlRodW5rczo6a2V5Rm9yU2xvd1Bh
dGhDYWxsVGh1bmspOgorICAgICAgICAqIGppdC9GUFJJbmZvLmg6CisgICAgICAgIChKU0M6OkZQ
UkluZm86OnRvSW5kZXgpOgorICAgICAgICAqIGppdC9HUFJJbmZvLmg6CisgICAgICAgIChKU0M6
OkdQUkluZm86OnRvSW5kZXgpOgorICAgICAgICAoSlNDOjpHUFJJbmZvOjpkZWJ1Z05hbWUpOgor
ICAgICAgICAqIGppdC9SZWdpc3RlclNldC5jcHA6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKToKKyAgICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuaDoKKyAg
ICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OmZpbHRlcik6CisgICAgICAgICogaml0L1JlcGF0Y2gu
Y3BwOgorICAgICAgICAoSlNDOjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6OnJlcGF0
Y2hDYWxsKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEJ5SWRTZWxmQWNjZXNzKToKKyAgICAgICAg
KEpTQzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToK
KyAgICAgICAgKEpTQzo6dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAgIChKU0M6OnJlc2V0
R2V0QnlJRCk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJRCk6CisgICAgICAgICogaml0L1Nj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3I6OmxvY2spOgorCiAyMDEzLTExLTA4ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtA
aWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEdUSyBidWlsZCBmaXguCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzNCwx
MSArMzM0LDQxIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGR1bXBXaXRoTmFtZSgiQ29kZVB0
ciIsIG91dCk7CiAgICAgfQorICAgIAorICAgIGVudW0gRW1wdHlWYWx1ZVRhZyB7IEVtcHR5VmFs
dWUgfTsKKyAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7IERlbGV0ZWRWYWx1ZSB9OworICAgIAor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cihFbXB0eVZhbHVlVGFnKQorICAgICAgICA6IG1fdmFs
dWUoZW1wdHlWYWx1ZSgpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKERlbGV0ZWRWYWx1ZVRhZykKKyAgICAgICAgOiBtX3ZhbHVlKGRlbGV0ZWRWYWx1ZSgp
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlID09IGVtcHR5VmFsdWUoKTsgfQorICAgIGJvb2wgaXNEZWxldGVkVmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID09IGRlbGV0ZWRWYWx1ZSgpOyB9CisgICAgCisgICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIFB0ckhhc2g8dm9pZCo+OjpoYXNoKG1fdmFs
dWUpOyB9CiAKIHByaXZhdGU6CisgICAgc3RhdGljIHZvaWQqIGVtcHR5VmFsdWUoKSB7IHJldHVy
biBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PigxKSk7IH0KKyAgICBz
dGF0aWMgdm9pZCogZGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihz
dGF0aWNfY2FzdDxpbnRwdHJfdD4oMikpOyB9CisgICAgCiAgICAgdm9pZCogbV92YWx1ZTsKIH07
CiAKK3N0cnVjdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHB0cikgeyByZXR1cm4gcHRyLmhh
c2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciYgYSwgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBiKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGEgPT0gYjsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwogLy8gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOgog
Ly8KIC8vIEEgcmVmZXJlbmNlIHRvIGEgc2VjdGlvbiBvZiBKSVQgZ2VuZXJhdGVkIGNvZGUuICBB
IENvZGVSZWYgY29uc2lzdHMgb2YgYQpAQCAtNDIwLDQgKzQ1MCwxNiBAQCBwcml2YXRlOgogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpT
Qzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPiB7CisgICAgdHlwZWRlZiBKU0M6Ok1hY3JvQXNzZW1i
bGVyQ29kZVB0ckhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBI
YXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6Ok1hY3JvQXNzZW1i
bGVyQ29kZVB0cj4gOiBwdWJsaWMgQ3VzdG9tSGFzaFRyYWl0czxKU0M6Ok1hY3JvQXNzZW1ibGVy
Q29kZVB0cj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAxNTg5ODQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxMiBAQAogbmFtZXNwYWNlIEpTQyB7
CiAKIGNsYXNzIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uIDogcHVibGljIEFic3RyYWN0TWFjcm9B
c3NlbWJsZXI8WDg2QXNzZW1ibGVyPiB7Ci1wcm90ZWN0ZWQ6CitwdWJsaWM6CiAjaWYgQ1BVKFg4
Nl82NCkKICAgICBzdGF0aWMgY29uc3QgWDg2UmVnaXN0ZXJzOjpSZWdpc3RlcklEIHNjcmF0Y2hS
ZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjExOwogI2VuZGlmCiAKK3Byb3RlY3RlZDoKICAgICBz
dGF0aWMgY29uc3QgaW50IERvdWJsZUNvbmRpdGlvbkJpdEludmVydCA9IDB4MTA7CiAgICAgc3Rh
dGljIGNvbnN0IGludCBEb3VibGVDb25kaXRpb25CaXRTcGVjaWFsID0gMHgyMDsKICAgICBzdGF0
aWMgY29uc3QgaW50IERvdWJsZUNvbmRpdGlvbkJpdHMgPSBEb3VibGVDb25kaXRpb25CaXRJbnZl
cnQgfCBEb3VibGVDb25kaXRpb25CaXRTcGVjaWFsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmgJKHJldmlzaW9uIDE1ODk4NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIGNsYXNzIFJlcGF0Y2hCdWZmZXIgewogCiBwdWJsaWM6
CiAgICAgUmVwYXRjaEJ1ZmZlcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICAgICAgOiBtX2Nv
ZGVCbG9jayhjb2RlQmxvY2spCiAgICAgewogI2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVT
SVZFKQogICAgICAgICBSZWZQdHI8SklUQ29kZT4gY29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgp
OwpAQCAtNTIsOCArNTMsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fc2l6ZSA9IGNvZGUtPnNpemUo
KTsKIAogICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlV3JpdGFibGUobV9zdGFydCwg
bV9zaXplKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOwogI2VuZGlm
CiAgICAgfQogCkBAIC02Myw2ICs2Miw4IEBAIHB1YmxpYzoKICAgICAgICAgRXhlY3V0YWJsZUFs
bG9jYXRvcjo6bWFrZUV4ZWN1dGFibGUobV9zdGFydCwgbV9zaXplKTsKICNlbmRpZgogICAgIH0K
KyAgICAKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJs
b2NrOyB9CiAKICAgICB2b2lkIHJlbGluayhDb2RlTG9jYXRpb25KdW1wIGp1bXAsIENvZGVMb2Nh
dGlvbkxhYmVsIGRlc3RpbmF0aW9uKQogICAgIHsKQEAgLTE3Niw2ICsxNzcsNyBAQCBwdWJsaWM6
CiAgICAgfQogCiBwcml2YXRlOgorICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAjaWYgRU5B
QkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCiAgICAgdm9pZCogbV9zdGFydDsKICAgICBzaXpl
X3QgbV9zaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZp
YXRpb25zLmgJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQWJicmV2aWF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsNiArMjcxLDcgQEAgc3Rh
dGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIAogfQogZW51bSBUYWlsQ2FsbE1v
ZGUgeyBJc05vdFRhaWxDYWxsLCBJc1RhaWxDYWxsIH07CiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0
VGFpbENhbGwoTFZhbHVlIGNhbGwsIFRhaWxDYWxsTW9kZSBtb2RlKSB7IGxsdm0tPlNldFRhaWxD
YWxsKGNhbGwsIG1vZGUgPT0gSXNUYWlsQ2FsbCk7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRJ
bnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKExWYWx1ZSBpbnN0cnVjdGlvbiwgdW5zaWduZWQg
Y2FsbGluZ0NvbnZlbnRpb24pIHsgbGx2bS0+U2V0SW5zdHJ1Y3Rpb25DYWxsQ29udihpbnN0cnVj
dGlvbiwgY2FsbGluZ0NvbnZlbnRpb24pOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEV4
dHJhY3RWYWx1ZShMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgYWdnVmFsLCB1bnNpZ25lZCBpbmRl
eCkgeyByZXR1cm4gbGx2bS0+QnVpbGRFeHRyYWN0VmFsdWUoYnVpbGRlciwgYWdnVmFsLCBpbmRl
eCwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFNlbGVjdChMQnVpbGRlciBidWls
ZGVyLCBMVmFsdWUgY29uZGl0aW9uLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbikgeyBy
ZXR1cm4gbGx2bS0+QnVpbGRTZWxlY3QoYnVpbGRlciwgY29uZGl0aW9uLCB0YWtlbiwgbm90VGFr
ZW4sICIiKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRCcihMQnVpbGRlciBidWlsZGVy
LCBMQmFzaWNCbG9jayBkZXN0aW5hdGlvbikgeyByZXR1cm4gbGx2bS0+QnVpbGRCcihidWlsZGVy
LCBkZXN0aW5hdGlvbik7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29t
cGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21w
aWxlLmNwcAkocmV2aXNpb24gMTU4OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDE0ICsxODgsMTIgQEAgc3RhdGlj
IHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWU7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIFVOVVNFRF9QQVJBTShyZWNvcmQpOyAvLyBGSVhNRTogdXNlIEFueVJl
Z3MuCi0KICAgICAgICAgICAgIC8vIEZJWE1FOiBMTFZNIHNob3VsZCB0ZWxsIHVzIHdoaWNoIHJl
Z2lzdGVycyBhcmUgbGl2ZS4KICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMg
PSBSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IEdQUlJlZyBjYWxsRnJhbWVSZWdpc3RlciA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKLSAgICAg
ICAgICAgIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOwotICAgICAgICAgICAg
R1BSUmVnIHJlc3VsdCA9IEdQUkluZm86OnJldHVyblZhbHVlR1BSOworICAgICAgICAgICAgR1BS
UmVnIHJlc3VsdCA9IHJlY29yZC5sb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCk7CisgICAgICAgICAg
ICBHUFJSZWcgY2FsbEZyYW1lUmVnaXN0ZXIgPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpOworICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWNvcmQubG9jYXRpb25zWzJdLmRpcmVj
dEdQUigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGdldEJ5SWQuY29kZU9yaWdpbigpLCB1c2Vk
UmVnaXN0ZXJzLCBjYWxsRnJhbWVSZWdpc3RlciwKQEAgLTIyNCwxOSArMjIyLDE3IEBAIHN0YXRp
YyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBVTlVTRURfUEFSQU0ocmVjb3JkKTsgLy8gRklYTUU6IHVzZSBBbnlS
ZWdzLgotCiAgICAgICAgICAgICAvLyBGSVhNRTogTExWTSBzaG91bGQgdGVsbCB1cyB3aGljaCBy
ZWdpc3RlcnMgYXJlIGxpdmUuCiAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
ID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBHUFJSZWcgY2FsbEZyYW1lUmVnaXN0ZXIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjA7Ci0gICAg
ICAgICAgICBHUFJSZWcgYmFzZSA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKLSAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZSA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICAgICAgICAgIEdQUlJl
ZyBjYWxsRnJhbWVSZWdpc3RlciA9IHJlY29yZC5sb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlY29yZC5sb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7
CisgICAgICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWNvcmQubG9jYXRpb25zWzJdLmRpcmVjdEdQ
UigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigK
ICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIHB1dEJ5SWQuY29kZU9yaWdpbigpLCB1c2VkUmVn
aXN0ZXJzLCBjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCBHUFJJbmZvOjphcmd1bWVudEdQUjMsIGZhbHNlLAot
ICAgICAgICAgICAgICAgIHB1dEJ5SWQuZWNtYU1vZGUoKSwgcHV0QnlJZC5wdXRLaW5kKCkpOwor
ICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2UpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIE1h
Y3JvQXNzZW1ibGVyOjpzY3JhdGNoUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgZmFsc2UsIHB1
dEJ5SWQuZWNtYU1vZGUoKSwgcHV0QnlJZC5wdXRLaW5kKCkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgYmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgp
OwogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGlu
ZUNhY2hlU2l6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExJbmxpbmVDYWNoZVNpemUuY3BwCShyZXZpc2lvbiAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDM4ICszMywxNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKLXN0YXRp
YyBzaXplX3Qgc19zaXplT2ZHZXRCeUlkOwotc3RhdGljIHNpemVfdCBzX3NpemVPZlB1dEJ5SWQ7
Ci0KIHNpemVfdCBzaXplT2ZHZXRCeUlkKCkKIHsKLSAgICBpZiAoc19zaXplT2ZHZXRCeUlkKQot
ICAgICAgICByZXR1cm4gc19zaXplT2ZHZXRCeUlkOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVy
IGppdDsKLSAgICAKLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbmVyYXRvcigKLSAgICAgICAg
MCwgQ29kZU9yaWdpbigpLCBSZWdpc3RlclNldCgpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDYpLCBKU1ZhbHVlUmVncyhHUFJJ
bmZvOjpyZWdUNyksIGZhbHNlKTsKLSAgICBnZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0aChqaXQp
OwotICAgIAotICAgIHJldHVybiBzX3NpemVPZkdldEJ5SWQgPSBqaXQubV9hc3NlbWJsZXIuY29k
ZVNpemUoKTsKKyAgICByZXR1cm4gMjk7CiB9CiAKIHNpemVfdCBzaXplT2ZQdXRCeUlkKCkKIHsK
LSAgICBpZiAoc19zaXplT2ZQdXRCeUlkKQotICAgICAgICByZXR1cm4gc19zaXplT2ZQdXRCeUlk
OwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKLSAgICAKLSAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIGdlbmVyYXRvcigKLSAgICAgICAgMCwgQ29kZU9yaWdpbigpLCBSZWdpc3RlclNldCgp
LCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoR1BSSW5m
bzo6cmVnVDYpLCBKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNyksIEdQUkluZm86OnJlZ1Q4LCBm
YWxzZSwKLSAgICAgICAgTm90U3RyaWN0TW9kZSwgTm90RGlyZWN0KTsKLSAgICBnZW5lcmF0b3Iu
Z2VuZXJhdGVGYXN0UGF0aChqaXQpOwotICAgIAotICAgIHJldHVybiBzX3NpemVPZlB1dEJ5SWQg
PSBqaXQubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKKyAgICByZXR1cm4gMzI7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyAr
NzUsNyBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoCiAgICAgICAgICAgICAgICAgICAgIG1fcGxhbi52bS5m
dGxUaHVua3MtPmdldE9TUkV4aXRHZW5lcmF0aW9uVGh1bmsoCiAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3BsYW4udm0sIExvY2F0aW9uOjpmb3JTdGFja21hcHMoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaml0Q29kZS0+c3RhY2ttYXBzLCBpdGVyLT52YWx1ZS5sb2NhdGlvbnNbMF0p
KS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaml0Q29kZS0+c3RhY2tt
YXBzLCBpdGVyLT52YWx1ZS5sb2NhdGlvbnNbMF0pKS5jb2RlKCkpKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaml0Q29kZS0+aW5pdGlhbGl6ZUV4aXRUaHVua3MoCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmNwcAkocmV2aXNpb24gMTU4OTg0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewog
Ci1Mb2NhdGlvbiBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKGNvbnN0IFN0YWNrTWFwcyYgc3RhY2tt
YXBzLCBjb25zdCBTdGFja01hcHM6OkxvY2F0aW9uJiBsb2NhdGlvbikKK0xvY2F0aW9uIExvY2F0
aW9uOjpmb3JTdGFja21hcHMoY29uc3QgU3RhY2tNYXBzKiBzdGFja21hcHMsIGNvbnN0IFN0YWNr
TWFwczo6TG9jYXRpb24mIGxvY2F0aW9uKQogewogICAgIHN3aXRjaCAobG9jYXRpb24ua2luZCkg
ewogICAgIGNhc2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6VW5wcm9jZXNzZWQ6CkBAIC01Myw3ICs1
Myw4IEBAIExvY2F0aW9uIExvY2F0aW9uOjpmb3JTdGFja21hcHMoY29uc3QgU3QKICAgICAgICAg
cmV0dXJuIGZvckNvbnN0YW50KGxvY2F0aW9uLm9mZnNldCk7CiAgICAgICAgIAogICAgIGNhc2Ug
U3RhY2tNYXBzOjpMb2NhdGlvbjo6Q29uc3RhbnRJbmRleDoKLSAgICAgICAgcmV0dXJuIGZvckNv
bnN0YW50KHN0YWNrbWFwcy5jb25zdGFudHNbbG9jYXRpb24ub2Zmc2V0XS5pbnRlZ2VyKTsKKyAg
ICAgICAgQVNTRVJUKHN0YWNrbWFwcyk7CisgICAgICAgIHJldHVybiBmb3JDb25zdGFudChzdGFj
a21hcHMtPmNvbnN0YW50c1tsb2NhdGlvbi5vZmZzZXRdLmludGVnZXIpOwogICAgIH0KICAgICAK
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG9jYXRpb24uaAkocmV2aXNpb24gMTU4OTg0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw5
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBzdGF0aWMg
TG9jYXRpb24gZm9yU3RhY2ttYXBzKGNvbnN0IFN0YWNrTWFwcyYsIGNvbnN0IFN0YWNrTWFwczo6
TG9jYXRpb24mKTsKKyAgICAvLyBZb3UgY2FuIHBhc3MgYSBudWxsIFN0YWNrTWFwcyBpZiB5b3Ug
YXJlIGNvbmZpZGVudCB0aGF0IHRoZSBsb2NhdGlvbiBkb2Vzbid0CisgICAgLy8gaW52b2x2ZSBh
IHdpZGUgY29uc3RhbnQuCisgICAgc3RhdGljIExvY2F0aW9uIGZvclN0YWNrbWFwcyhjb25zdCBT
dGFja01hcHMqLCBjb25zdCBTdGFja01hcHM6OkxvY2F0aW9uJik7CiAgICAgCiAgICAgS2luZCBr
aW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTU4OTg0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNzUsMTAgKzEyNzUsMTIgQEAgcHJpdmF0ZToKIAogICAgICAgICAv
LyBBcmd1bWVudHM6IGlkLCBieXRlcywgdGFyZ2V0LCBudW1BcmdzLCBhcmdzLi4uCiAgICAgICAg
IHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7Ci0gICAgICAgIHNldEpTVmFs
dWUobV9vdXQuY2FsbCgKKyAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAogICAgICAg
ICAgICAgbV9vdXQucGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksCiAgICAgICAgICAgICBtX291
dC5jb25zdEludDMyKHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkdldEJ5SWQo
KSksCi0gICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIo
MiksIG1fY2FsbEZyYW1lLCBiYXNlKSk7CisgICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVm
OCksIG1fb3V0LmNvbnN0SW50MzIoMiksIG1fY2FsbEZyYW1lLCBiYXNlKTsKKyAgICAgICAgc2V0
SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVnQ2FsbENvbnYpOwor
ICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5n
ZXRCeUlkcy5hcHBlbmQoR2V0QnlJZERlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgbV9ub2RlLT5jb2Rl
T3JpZ2luLCB1aWQpKTsKICAgICB9CkBAIC0xMjk0LDEwICsxMjk2LDExIEBAIHByaXZhdGU6CiAK
ICAgICAgICAgLy8gQXJndW1lbnRzOiBpZCwgYnl0ZXMsIHRhcmdldCwgbnVtQXJncywgYXJncy4u
LgogICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21hcElEcysrOwotICAgICAg
ICBtX291dC5jYWxsKAorICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCiAgICAgICAg
ICAgICBtX291dC5wYXRjaHBvaW50Vm9pZEludHJpbnNpYygpLAogICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQzMihzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZQdXRCeUlkKCkp
LAogICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJlZjgpLCBtX291dC5jb25zdEludDMyKDMp
LCBtX2NhbGxGcmFtZSwgYmFzZSwgdmFsdWUpOworICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxp
bmdDb252ZW50aW9uKGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7CiAgICAgICAgIAogICAgICAg
ICBtX2Z0bFN0YXRlLnB1dEJ5SWRzLmFwcGVuZChQdXRCeUlkRGVzY3JpcHRvcigKICAgICAgICAg
ICAgIHN0YWNrbWFwSUQsIG1fbm9kZS0+Y29kZU9yaWdpbiwgdWlkLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24g
MTU4OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsOCArMTc3LDggQEAgc3RhdGljIHZvaWQgY29tcGls
ZVN0dWIoCiAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RFX0lGKAogICAgICAgICBzaG91
bGRTaG93RGlzYXNzZW1ibHkoKSwKICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiRlRM
IE9TUiBleGl0ICMldSAoYmMjJXUsICVzKSBmcm9tICVzLCB3aXRoIG9wZXJhbmRzID0gJXMsIGFu
ZCByZWNvcmQgPSAlcyIsCi0gICAgICAgICAgICBleGl0SUQsIGV4aXQubV9jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgsCisgICAgICAgICgiRlRMIE9TUiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVz
LCB3aXRoIG9wZXJhbmRzID0gJXMsIGFuZCByZWNvcmQgPSAlcyIsCisgICAgICAgICAgICBleGl0
SUQsIHRvQ1N0cmluZyhleGl0Lm1fY29kZU9yaWdpbikuZGF0YSgpLAogICAgICAgICAgICAgZXhp
dEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCks
CiAgICAgICAgICAgICB0b0NTdHJpbmcoaWdub3JpbmdDb250ZXh0PER1bXBDb250ZXh0PihleGl0
Lm1fdmFsdWVzKSkuZGF0YSgpLAogICAgICAgICAgICAgdG9DU3RyaW5nKCpyZWNvcmQpLmRhdGEo
KSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxs
LmNwcAkocmV2aXNpb24gMTU4OTg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
bG93UGF0aENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwyMCArNjQsMjMgQEAgcHVibGlj
OgogICAgICAgICBtX29mZnNldFRvU2F2aW5nQXJlYSA9CiAgICAgICAgICAgICAoc3RkOjptYXgo
bV9udW1BcmdzLCBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTKSAtIE5VTUJFUl9PRl9BUkdV
TUVOVF9SRUdJU1RFUlMpICogd29yZFNpemU7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBu
dW1Bcmd1bWVudFJlZ2lzdGVyc1RoYXROZWVkU2F2aW5nID0gMDsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gc3RkOjptaW4oTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUywgbnVtQXJncyk7
IGktLTspIHsKLSAgICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0KEdQUkluZm86OnRv
QXJndW1lbnRSZWdpc3RlcihpKSkpCi0gICAgICAgICAgICAgICAgbnVtQXJndW1lbnRSZWdpc3Rl
cnNUaGF0TmVlZFNhdmluZysrOwotICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHN0ZDo6bWluKE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMsIG51bUFyZ3MpOyBpLS07KQor
ICAgICAgICAgICAgbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6dG9B
cmd1bWVudFJlZ2lzdGVyKGkpKTsKKyAgICAgICAgaWYgKHJldHVyblJlZ2lzdGVyICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgICAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLnNldChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdp
c3RlcnMuZmlsdGVyKG1fdXNlZFJlZ2lzdGVycyk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzID0KKyAgICAgICAgICAgIG1fY2Fs
bGluZ0NvbnZlbnRpb25SZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsKICAgICAgICAg
CiAgICAgICAgIHNpemVfdCBvZmZzZXRUb1RodW5rU2F2aW5nQXJlYSA9CiAgICAgICAgICAgICBt
X29mZnNldFRvU2F2aW5nQXJlYSArCi0gICAgICAgICAgICBudW1Bcmd1bWVudFJlZ2lzdGVyc1Ro
YXROZWVkU2F2aW5nICogd29yZFNpemU7CisgICAgICAgICAgICBudW1iZXJPZkNhbGxpbmdDb252
ZW50aW9uUmVnaXN0ZXJzICogd29yZFNpemU7CiAgICAgICAgIAogICAgICAgICBtX3N0YWNrQnl0
ZXNOZWVkZWQgPQogICAgICAgICAgICAgb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWEgKwogICAgICAg
ICAgICAgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3MgKwotICAgICAgICAgICAgKG1f
dXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpIC0gbnVtQXJndW1lbnRSZWdpc3Rl
cnNUaGF0TmVlZFNhdmluZykgKiB3b3JkU2l6ZTsKKyAgICAgICAgICAgIChtX3VzZWRSZWdpc3Rl
cnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSAtIG51bWJlck9mQ2FsbGluZ0NvbnZlbnRpb25SZWdp
c3RlcnMpICogd29yZFNpemU7CiAgICAgICAgIAogICAgICAgICBzaXplX3Qgc3RhY2tBbGlnbm1l
bnQgPSAxNjsKICAgICAgICAgCkBAIC04NywxMSArOTAsMTMgQEAgcHVibGljOgogICAgICAgICAK
ICAgICAgICAgbV90aHVua1NhdmVTZXQgPSBtX3VzZWRSZWdpc3RlcnM7CiAgICAgICAgIAotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNU
RVJTLCBudW1BcmdzKTsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFtX3VzZWRSZWdpc3RlcnMu
Z2V0KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSkpCisgICAgICAgIC8vIFRoaXMgcmVs
aWVzIG9uIGFsbCBjYWxsaW5nIGNvbnZlbnRpb24gcmVnaXN0ZXJzIGFsc28gYmVpbmcgdGVtcCBy
ZWdpc3RlcnMuCisgICAgICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSAwOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAg
ICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgICAgICBp
ZiAoIW1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZ2V0KHJlZykpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9Bcmd1bWVu
dFJlZ2lzdGVyKGkpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRU
b1NhdmluZ0FyZWEgKyBpICogd29yZFNpemUpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRy
KHJlZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsIG1fb2Zmc2V0VG9TYXZpbmdBcmVhICsgKHN0YWNrSW5kZXgrKykgKiB3b3JkU2l6ZSkp
OwogICAgICAgICAgICAgbV90aHVua1NhdmVTZXQuY2xlYXIocmVnKTsKICAgICAgICAgfQogICAg
ICAgICAKQEAgLTEwMywxMSArMTA4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG1fcmV0dXJu
UmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIG1faml0Lm1vdmUoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIG1fcmV0dXJuUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4oTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUywg
bV9udW1BcmdzKTsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFtX3VzZWRSZWdpc3RlcnMuZ2V0
KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSkpCisgICAgICAgIHVuc2lnbmVkIHN0YWNr
SW5kZXggPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvUmVn
aXN0ZXIoaSk7CisgICAgICAgICAgICBpZiAoIW1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMu
Z2V0KHJlZykpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBHUFJSZWcg
cmVnID0gR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpOwotICAgICAgICAgICAgbV9qaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyBpICogd29yZFNpemUpLCByZWcpOworICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyAoc3RhY2tJbmRl
eCsrKSAqIHdvcmRTaXplKSwgcmVnKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9q
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRlc05lZWRlZCks
IENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTM5LDYgKzE0NSw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU3RhdGUmIG1fc3RhdGU7CiAgICAgUmVnaXN0ZXJTZXQg
bV91c2VkUmVnaXN0ZXJzOworICAgIFJlZ2lzdGVyU2V0IG1fY2FsbGluZ0NvbnZlbnRpb25SZWdp
c3RlcnM7CiAgICAgQ0NhbGxIZWxwZXJzJiBtX2ppdDsKICAgICB1bnNpZ25lZCBtX251bUFyZ3M7
CiAgICAgR1BSUmVnIG1fcmV0dXJuUmVnaXN0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDYgKzYxLDExIEBAIHB1YmxpYzoKICAgICB2b2lkKiBjYWxsVGFyZ2V0KCkgY29u
c3QgeyByZXR1cm4gbV9jYWxsVGFyZ2V0OyB9CiAgICAgcHRyZGlmZl90IG9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CiAgICAgCisgICAgU2xvd1BhdGhDYWxsS2V5IHdpdGhDYWxs
VGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpCisgICAgeworICAgICAgICByZXR1cm4gU2xvd1BhdGhD
YWxsS2V5KHVzZWRSZWdpc3RlcnMoKSwgY2FsbFRhcmdldCwgb2Zmc2V0KCkpOworICAgIH0KKyAg
ICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKICAgICBlbnVtIEVt
cHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YWNrTWFwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGFja01hcHMuY3BwCShyZXZpc2lvbiAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDE1ICs2
NiwxNSBAQCB2b2lkIFN0YWNrTWFwczo6TG9jYXRpb246OmR1bXAoUHJpbnRTdHJlCiAgICAgb3V0
LnByaW50KCIoIiwga2luZCwgIiwgcmVnIiwgZHdhcmZSZWdOdW0sICIsICIsIG9mZnNldCwgIiki
KTsKIH0KIAotR1BSUmVnIFN0YWNrTWFwczo6TG9jYXRpb246OmRpcmVjdEdQUihTdGFja01hcHMm
IHN0YWNrbWFwcykgY29uc3QKK0dQUlJlZyBTdGFja01hcHM6OkxvY2F0aW9uOjpkaXJlY3RHUFIo
KSBjb25zdAogewotICAgIHJldHVybiBGVEw6OkxvY2F0aW9uOjpmb3JTdGFja21hcHMoc3RhY2tt
YXBzLCAqdGhpcykuZGlyZWN0R1BSKCk7CisgICAgcmV0dXJuIEZUTDo6TG9jYXRpb246OmZvclN0
YWNrbWFwcygwLCAqdGhpcykuZGlyZWN0R1BSKCk7CiB9CiAKIHZvaWQgU3RhY2tNYXBzOjpMb2Nh
dGlvbjo6cmVzdG9yZUludG8oCiAgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgU3RhY2tNYXBzJiBz
dGFja21hcHMsIGNoYXIqIHNhdmVkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0KSBjb25zdAogewot
ICAgIEZUTDo6TG9jYXRpb246OmZvclN0YWNrbWFwcyhzdGFja21hcHMsICp0aGlzKS5yZXN0b3Jl
SW50byhqaXQsIHNhdmVkUmVnaXN0ZXJzLCByZXN1bHQpOworICAgIEZUTDo6TG9jYXRpb246OmZv
clN0YWNrbWFwcygmc3RhY2ttYXBzLCAqdGhpcykucmVzdG9yZUludG8oaml0LCBzYXZlZFJlZ2lz
dGVycywgcmVzdWx0KTsKIH0KIAogYm9vbCBTdGFja01hcHM6OlJlY29yZDo6cGFyc2UoRGF0YVZp
ZXcqIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YWNrTWFwcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU3RhY2tNYXBzLmgJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAg
c3RydWN0IFN0YWNrTWFwcyB7CiAgICAgICAgIHZvaWQgcGFyc2UoRGF0YVZpZXcqLCB1bnNpZ25l
ZCYgb2Zmc2V0KTsKICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owog
ICAgICAgICAKLSAgICAgICAgR1BSUmVnIGRpcmVjdEdQUihTdGFja01hcHMmKSBjb25zdDsKKyAg
ICAgICAgR1BSUmVnIGRpcmVjdEdQUigpIGNvbnN0OwogICAgICAgICB2b2lkIHJlc3RvcmVJbnRv
KE1hY3JvQXNzZW1ibGVyJiwgU3RhY2tNYXBzJiwgY2hhciogc2F2ZWRSZWdpc3RlcnMsIEdQUlJl
ZyByZXN1bHQpIGNvbnN0OwogICAgIH07CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFRodW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMVGh1bmtzLmgJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE5ICs0NCwzOCBAQCBuYW1l
c3BhY2UgRlRMIHsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5r
R2VuZXJhdG9yKFZNJiwgY29uc3QgTG9jYXRpb24mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBz
bG93UGF0aENhbGxUaHVua0dlbmVyYXRvcihWTSYsIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYpOwog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBH
ZW5lcmF0b3JUeXBlPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFyZ3VtZW50Pgorc3RydWN0
IFRodW5rTWFwIHsKKyAgICB0eXBlZGVmIEtleVR5cGVBcmd1bWVudCBLZXlUeXBlOworICAgIHR5
cGVkZWYgSGFzaE1hcDxLZXlUeXBlLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IFRvVGh1bmtNYXA7
CisgICAgdHlwZWRlZiBIYXNoTWFwPE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgS2V5VHlwZT4gRnJv
bVRodW5rTWFwOworICAgIAorICAgIFRvVGh1bmtNYXAgbV90b1RodW5rOworICAgIEZyb21UaHVu
a01hcCBtX2Zyb21UaHVuazsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGUsIHR5cGVu
YW1lIEdlbmVyYXRvclR5cGU+CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJhdGVJZk5lY2Vz
c2FyeSgKLSAgICBWTSYgdm0sIE1hcFR5cGUmIG1hcCwgY29uc3QgS2V5VHlwZSYga2V5LCBHZW5l
cmF0b3JUeXBlIGdlbmVyYXRvcikKKyAgICBWTSYgdm0sIE1hcFR5cGUmIG1hcCwgY29uc3QgdHlw
ZW5hbWUgTWFwVHlwZTo6S2V5VHlwZSYga2V5LCBHZW5lcmF0b3JUeXBlIGdlbmVyYXRvcikKIHsK
LSAgICB0eXBlbmFtZSBNYXBUeXBlOjppdGVyYXRvciBpdGVyID0gbWFwLmZpbmQoa2V5KTsKLSAg
ICBpZiAoaXRlciAhPSBtYXAuZW5kKCkpCisgICAgdHlwZW5hbWUgTWFwVHlwZTo6VG9UaHVua01h
cDo6aXRlcmF0b3IgaXRlciA9IG1hcC5tX3RvVGh1bmsuZmluZChrZXkpOworICAgIGlmIChpdGVy
ICE9IG1hcC5tX3RvVGh1bmsuZW5kKCkpCiAgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKICAg
ICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcmVzdWx0ID0gZ2VuZXJhdG9yKHZtLCBrZXkp
OwotICAgIG1hcC5hZGQoa2V5LCByZXN1bHQpOworICAgIG1hcC5tX3RvVGh1bmsuYWRkKGtleSwg
cmVzdWx0KTsKKyAgICBtYXAubV9mcm9tVGh1bmsuYWRkKHJlc3VsdC5jb2RlKCksIGtleSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4KK3R5cGVu
YW1lIE1hcFR5cGU6OktleVR5cGUga2V5Rm9yVGh1bmsoTWFwVHlwZSYgbWFwLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgcHRyKQoreworICAgIHR5cGVuYW1lIE1hcFR5cGU6OkZyb21UaHVua01hcDo6
aXRlcmF0b3IgaXRlciA9IG1hcC5tX2Zyb21UaHVuay5maW5kKHB0cik7CisgICAgUkVMRUFTRV9B
U1NFUlQoaXRlciAhPSBtYXAubV9mcm9tVGh1bmsuZW5kKCkpOworICAgIHJldHVybiBpdGVyLT52
YWx1ZTsKK30KKwogY2xhc3MgVGh1bmtzIHsKIHB1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgZ2V0T1NSRXhpdEdlbmVyYXRpb25UaHVuayhWTSYgdm0sIGNvbnN0IExvY2F0aW9uJiBs
b2NhdGlvbikKQEAgLTcxLDkgKzkwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHZtLCBtX3Ns
b3dQYXRoQ2FsbFRodW5rcywga2V5LCBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcik7CiAgICAg
fQogICAgIAorICAgIFNsb3dQYXRoQ2FsbEtleSBrZXlGb3JTbG93UGF0aENhbGxUaHVuayhNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgcHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtleUZvclRodW5r
KG1fc2xvd1BhdGhDYWxsVGh1bmtzLCBwdHIpOworICAgIH0KKyAgICAKIHByaXZhdGU6Ci0gICAg
SGFzaE1hcDxMb2NhdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX29zckV4aXRUaHVua3M7
Ci0gICAgSGFzaE1hcDxTbG93UGF0aENhbGxLZXksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZj4gbV9z
bG93UGF0aENhbGxUaHVua3M7CisgICAgVGh1bmtNYXA8TG9jYXRpb24+IG1fb3NyRXhpdFRodW5r
czsKKyAgICBUaHVua01hcDxTbG93UGF0aENhbGxLZXk+IG1fc2xvd1BhdGhDYWxsVGh1bmtzOwog
fTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9GUFJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9GUFJJbmZvLmgJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvRlBSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCwxMCBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIHN0YXRpYyB1bnNpZ25lZCB0b0luZGV4KEZQUlJlZyByZWcpCiAgICAgewotICAg
ICAgICByZXR1cm4gKHVuc2lnbmVkKXJlZzsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gKHVu
c2lnbmVkKXJlZzsKKyAgICAgICAgaWYgKHJlc3VsdCA+PSBudW1iZXJPZlJlZ2lzdGVycykKKyAg
ICAgICAgICAgIHJldHVybiBJbnZhbGlkSW5kZXg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIAogICAgIHN0YXRpYyBGUFJSZWcgdG9Bcmd1bWVudFJlZ2lzdGVyKHVuc2lnbmVk
IGluZGV4KQpAQCAtMTAyLDYgKzEwNSw4IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICByZXR1
cm4gbmFtZUZvclJlZ2lzdGVyW3JlZ107CiAgICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBJbnZhbGlkSW5kZXggPSAweGZmZmZmZmZmOwogfTsKIAogI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkocmV2aXNpb24gMTU4OTg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyMSw5ICs0
MjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChyZWcgIT0gSW52YWxpZEdQUlJlZyk7CiAg
ICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHJlZykgPCAxNik7CiAgICAgICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBpbmRleEZvclJlZ2lzdGVyWzE2XSA9IHsgMCwgMiwgMSwgMywgSW52
YWxpZEluZGV4LCBJbnZhbGlkSW5kZXgsIDUsIDQsIDYsIDcsIDgsIEludmFsaWRJbmRleCwgSW52
YWxpZEluZGV4LCA5LCBJbnZhbGlkSW5kZXgsIEludmFsaWRJbmRleCB9OwotICAgICAgICB1bnNp
Z25lZCByZXN1bHQgPSBpbmRleEZvclJlZ2lzdGVyW3JlZ107Ci0gICAgICAgIEFTU0VSVChyZXN1
bHQgIT0gSW52YWxpZEluZGV4KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0
dXJuIGluZGV4Rm9yUmVnaXN0ZXJbcmVnXTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgY2hh
ciogZGVidWdOYW1lKEdQUlJlZyByZWcpCkBAIC00MzgsNyArNDM2LDYgQEAgcHVibGljOgogICAg
ICAgICB9OwogICAgICAgICByZXR1cm4gbmFtZUZvclJlZ2lzdGVyW3JlZ107CiAgICAgfQotcHJp
dmF0ZToKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJbnZhbGlkSW5kZXggPSAweGZmZmZm
ZmZmOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3Bw
CShyZXZpc2lvbiAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNiBAQCBSZWdpc3RlclNldCBSZWdp
c3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzCiAjaWYgQ1BVKFg4Nl82NCkKICAgICByZXN1bHQuc2V0
KFg4NlJlZ2lzdGVyczo6ZWJ4KTsKICAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6ZWJwKTsK
LSAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjEwKTsKICAgICByZXN1bHQuc2V0KFg4NlJl
Z2lzdGVyczo6cjEyKTsKICAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjEzKTsKICAgICBy
ZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjE0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBnZXQoRlBSUmVnIHJlZykgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iu
Z2V0KE1hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KHJlZykpOyB9CiAgICAgCiAgICAgdm9p
ZCBtZXJnZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsgbV92ZWN0b3IubWVyZ2Uob3RoZXIu
bV92ZWN0b3IpOyB9CisgICAgdm9pZCBmaWx0ZXIoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7
IG1fdmVjdG9yLmZpbHRlcihvdGhlci5tX3ZlY3Rvcik7IH0KICAgICB2b2lkIGV4Y2x1ZGUoY29u
c3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1fdmVjdG9yLmV4Y2x1ZGUob3RoZXIubV92ZWN0b3Ip
OyB9CiAgICAgCiAgICAgc2l6ZV90IG51bWJlck9mU2V0UmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1
cm4gbV92ZWN0b3IuYml0Q291bnQoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCShyZXZpc2lvbiAxNTg5ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRl
ICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCiAjaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKQEAgLTUyLDEwICs1
Myw0NCBAQCBuYW1lc3BhY2UgSlNDIHsKIC8vIGdpdmUgdGhlIEZUTCBjbG9zdXJlIGNhbGwgcGF0
Y2hpbmcgc3VwcG9ydCB1bnRpbCB3ZSBzd2l0Y2ggdG8gdGhlIEMgc3RhY2sgLSBidXQgd2hlbiB3
ZSBkbyB0aGF0LAogLy8gY2FsbEZyYW1lUmVnaXN0ZXIgd2lsbCBkaXNhcHBlYXIuCiAKK3N0YXRp
YyBGdW5jdGlvblB0ciByZWFkQ2FsbFRhcmdldChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVy
LCBDb2RlTG9jYXRpb25DYWxsIGNhbGwpCit7CisgICAgRnVuY3Rpb25QdHIgcmVzdWx0ID0gTWFj
cm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwpOworI2lmIEVOQUJMRShGVExfSklUKQor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gcmVwYXRjaEJ1ZmZlci5jb2RlQmxvY2soKTsKKyAg
ICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6RlRMSklUKSB7CisgICAgICAg
IHJldHVybiBGdW5jdGlvblB0cihjb2RlQmxvY2stPnZtKCktPmZ0bFRodW5rcy0+a2V5Rm9yU2xv
d1BhdGhDYWxsVGh1bmsoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcygKKyAgICAgICAgICAgICAgICByZXN1bHQuZXhlY3V0YWJs
ZUFkZHJlc3MoKSkpLmNhbGxUYXJnZXQoKSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0ocmVwYXRjaEJ1ZmZlcik7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoUmVwYXRjaEJ1ZmZlciYgcmVw
YXRjaEJ1ZmZlciwgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBuZXdDYWxsZWVG
dW5jdGlvbikKK3sKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IHJlcGF0Y2hCdWZmZXIuY29kZUJsb2NrKCk7CisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlw
ZSgpID09IEpJVENvZGU6OkZUTEpJVCkgeworICAgICAgICBWTSYgdm0gPSAqY29kZUJsb2NrLT52
bSgpOworICAgICAgICBGVEw6OlRodW5rcyYgdGh1bmtzID0gKnZtLmZ0bFRodW5rczsKKyAgICAg
ICAgRlRMOjpTbG93UGF0aENhbGxLZXkga2V5ID0gdGh1bmtzLmtleUZvclNsb3dQYXRoQ2FsbFRo
dW5rKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0
YWJsZUFkZHJlc3MoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFy
Z2V0KGNhbGwpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAga2V5ID0ga2V5LndpdGhD
YWxsVGFyZ2V0KG5ld0NhbGxlZUZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAg
ICBuZXdDYWxsZWVGdW5jdGlvbiA9IEZ1bmN0aW9uUHRyKAorICAgICAgICAgICAgdGh1bmtzLmdl
dFNsb3dQYXRoQ2FsbFRodW5rKHZtLCBrZXkpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsK
KyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24pOworfQorCiBzdGF0aWMgdm9pZCByZXBhdGNoQ2Fs
bChDb2RlQmxvY2sqIGNvZGVibG9jaywgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0
ciBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIo
Y29kZWJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsLCBuZXdDYWxsZWVGdW5j
dGlvbik7CisgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgY2FsbCwgbmV3Q2FsbGVlRnVu
Y3Rpb24pOwogfQogCiBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRo
RnVuY3Rpb24sIGJvb2wgY29tcGFjdCkKQEAgLTYzLDcgKzk4LDcgQEAgc3RhdGljIHZvaWQgcmVw
YXRjaEJ5SWRTZWxmQWNjZXNzKENvZGVCbAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOwogCiAgICAgLy8gT25seSBvcHRpbWl6ZSBvbmNlIQotICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlv
bik7CisgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLCBzbG93UGF0aEZ1bmN0aW9uKTsKIAogICAgIC8vIFBhdGNoIHRoZSBzdHJ1Y3R1cmUg
Y2hlY2sgJiB0aGUgb2Zmc2V0IG9mIHRoZSBsb2FkLgogICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRj
aChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRw
dHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsKSwgc3RydWN0dXJlKTsKQEAg
LTMxNCw3ICszNDksNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBl
CiAgICAgICAgIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2Nr
KTsKICAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHVi
SW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7Cisg
ICAgICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CkBAIC0zNjIsNyArMzk3LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4
ZWNTdGF0ZSogZQogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxv
Y2spOwogICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1Yklu
Zm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7
CisgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKICAgICAKICAgICBzdHViSW5mby5pbml0
R2V0QnlJZENoYWluKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJl
LCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHRydWUpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTAw
MCw3ICsxMDM1LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZQog
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQo
CiAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU3RydWN0Q2hl
Y2spLAogICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0
aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJ
ZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hDYWxsKHJlcGF0
Y2hCdWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVp
bGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24oKnZtLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4s
IHB1dEtpbmQgPT0gRGlyZWN0KTsKICAgICAgICAgICAgIApAQCAtMTEwNSw3ICsxMTQwLDcgQEAg
c3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAogICAgICAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAKICAgICAgICAgaWYgKGxpc3Qt
PmlzRnVsbCgpKQotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwg
cHV0S2luZCkpOworICAgICAgICAgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24o
c2xvdCwgcHV0S2luZCkpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpA
QCAtMTM4MCw3ICsxNDE1LDcgQEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVj
LCBDYQogCiB2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpOwor
ICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQ
dHIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVs
UHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxs
KTsKICAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNo
UHRyV2l0aFBhdGNoKCkpIHsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXZlcnRKdW1wUmVwbGFj
ZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKQEAgLTE0MDIsNyArMTQzNyw3IEBA
IHZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2gKIAogdm9pZCByZXNldFB1
dEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvKQogewotICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgdW5vcHRpbWl6ZWRGdW5jdGlv
biA9IGJpdHdpc2VfY2FzdDxWX0pJVE9wZXJhdGlvbl9FU3NpSkpJPihNYWNyb0Fzc2VtYmxlcjo6
cmVhZENhbGxUYXJnZXQoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uKS5leGVjdXRhYmxlQWRk
cmVzcygpKTsKKyAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIHVub3B0aW1pemVkRnVuY3Rpb24g
PSBiaXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRpb25fRVNzaUpKST4ocmVhZENhbGxUYXJnZXQocmVw
YXRjaEJ1ZmZlciwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uKS5leGVjdXRhYmxlQWRkcmVz
cygpKTsKICAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIG9wdGltaXplZEZ1bmN0aW9uOwogICAg
IGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QgfHwgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KQogICAg
ICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsK
QEAgLTE0MTQsNyArMTQ0OSw3IEBAIHZvaWQgcmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJl
cGF0Y2gKICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QpOwogICAgICAgICBvcHRpbWl6ZWRGdW5jdGlv
biA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKICAgICB9Ci0gICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcHRpbWl6
ZWRGdW5jdGlvbik7CisgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLCBvcHRpbWl6ZWRGdW5jdGlvbik7CiAgICAgQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRh
dGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0lt
bVRvQ2FsbCk7CiAgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJs
ZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVt
cFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJ
KHJldmlzaW9uIDE1ODk4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0LDIxIEBAIHB1Ymxp
YzoKICAgICAgICAgLCBtX2RpZFJldXNlUmVnaXN0ZXJzKGZhbHNlKQogICAgIHsKICAgICB9Ci0g
ICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIGxvY2soVCByZWcpIHsgbV9s
b2NrZWRSZWdpc3RlcnMuc2V0KHJlZyk7IH0KKworICAgIHZvaWQgbG9jayhHUFJSZWcgcmVnKQor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBHUFJJbmZvOjp0b0luZGV4KHJlZyk7Cisg
ICAgICAgIGlmIChpbmRleCA9PSBHUFJJbmZvOjpJbnZhbGlkSW5kZXgpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldEdQUkJ5SW5kZXgoaW5kZXgpOwor
ICAgIH0KKyAgICB2b2lkIGxvY2soRlBSUmVnIHJlZykKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gRlBSSW5mbzo6dG9JbmRleChyZWcpOworICAgICAgICBpZiAoaW5kZXggPT0gRlBS
SW5mbzo6SW52YWxpZEluZGV4KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2xvY2tl
ZFJlZ2lzdGVycy5zZXRGUFJCeUluZGV4KGluZGV4KTsKKyAgICB9CiAgICAgCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQmFua0luZm8+CiAgICAgdHlwZW5hbWUgQmFua0luZm86OlJlZ2lzdGVyVHlw
ZSBhbGxvY2F0ZVNjcmF0Y2goKQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTAwMykKKysrIFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTMtMTEtMDkg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBTd2l0Y2ggRlRMIEdl
dEJ5SWQvUHV0QnlJZCBJQydzIG92ZXIgdG8gdXNpbmcgQW55UmVnQ0MKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDA5NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSSBuZWVkZWQgdG8gYWRk
IGFub3RoZXIgc2V0IG9wZXJhdGlvbiwgbmFtZWx5IGZpbHRlcigpLCB3aGljaCBpcyBhbiBpbi1w
bGFjZSBzZXQKKyAgICAgICAgaW50ZXJzZWN0aW9uLgorCisgICAgICAgICogd3RmL0JpdFZlY3Rv
ci5jcHA6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6ZmlsdGVyU2xvdyk6CisgICAgICAgICog
d3RmL0JpdFZlY3Rvci5oOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmZpbHRlcik6CisKIDIw
MTMtMTEtMDkgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgTW92ZSBSdW5Mb29wIGZyb20gV2ViQ29yZSB0byBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0JpdFZlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmNw
cAkocmV2aXNpb24gMTU4OTg0KQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI0LDYgKzEyNCwzMSBAQCB2b2lkIEJpdFZlY3Rvcjo6bWVyZ2VTbG93
KGNvbnN0IEJpdFZlY3RvCiAgICAgICAgIGEtPmJpdHMoKVtpXSB8PSBiLT5iaXRzKClbaV07CiB9
CiAKK3ZvaWQgQml0VmVjdG9yOjpmaWx0ZXJTbG93KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpCit7
CisgICAgaWYgKG90aGVyLmlzSW5saW5lKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0lubGluZSgp
KTsKKyAgICAgICAgKmJpdHMoKSAmPSBjbGVhbnNlSW5saW5lQml0cyhvdGhlci5tX2JpdHNPclBv
aW50ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChpc0lubGluZSgp
KSB7CisgICAgICAgIEFTU0VSVCghb3RoZXIuaXNJbmxpbmUoKSk7CisgICAgICAgIG1fYml0c09y
UG9pbnRlciAmPSAqb3RoZXIub3V0T2ZMaW5lQml0cygpLT5iaXRzKCk7CisgICAgICAgIG1fYml0
c09yUG9pbnRlciB8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBtYXhJbmxpbmVCaXRz
KCkpOworICAgICAgICBBU1NFUlQoaXNJbmxpbmUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgT3V0T2ZMaW5lQml0cyogYSA9IG91dE9mTGluZUJpdHMoKTsKKyAgICBjb25z
dCBPdXRPZkxpbmVCaXRzKiBiID0gb3RoZXIub3V0T2ZMaW5lQml0cygpOworICAgIGZvciAodW5z
aWduZWQgaSA9IHN0ZDo6bWluKGEtPm51bVdvcmRzKCksIGItPm51bVdvcmRzKCkpOyBpLS07KQor
ICAgICAgICBhLT5iaXRzKClbaV0gJj0gYi0+Yml0cygpW2ldOworICAgIAorICAgIGZvciAodW5z
aWduZWQgaSA9IGItPm51bVdvcmRzKCk7IGkgPCBhLT5udW1Xb3JkcygpOyArK2kpCisgICAgICAg
IGEtPmJpdHMoKVtpXSA9IDA7Cit9CisKIHZvaWQgQml0VmVjdG9yOjpleGNsdWRlU2xvdyhjb25z
dCBCaXRWZWN0b3ImIG90aGVyKQogewogICAgIGlmIChvdGhlci5pc0lubGluZSgpKSB7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMTU4OTg0KQorKysgU291cmNlL1dURi93dGYvQml0VmVj
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw2ICsxODEsMTYgQEAgcHVibGljOiAKICAgICAg
ICAgQVNTRVJUKGlzSW5saW5lKCkpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGZpbHRlcihjb25z
dCBCaXRWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0lubGluZSgpIHx8ICFv
dGhlci5pc0lubGluZSgpKSB7CisgICAgICAgICAgICBmaWx0ZXJTbG93KG90aGVyKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2JpdHNPclBvaW50ZXIgJj0gb3Ro
ZXIubV9iaXRzT3JQb2ludGVyOworICAgICAgICBBU1NFUlQoaXNJbmxpbmUoKSk7CisgICAgfQor
ICAgIAogICAgIHZvaWQgZXhjbHVkZShjb25zdCBCaXRWZWN0b3ImIG90aGVyKQogICAgIHsKICAg
ICAgICAgaWYgKCFpc0lubGluZSgpIHx8ICFvdGhlci5pc0lubGluZSgpKSB7CkBAIC0zMDIsNiAr
MzEyLDcgQEAgcHJpdmF0ZToKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRTbG93KGNv
bnN0IEJpdFZlY3RvciYgb3RoZXIpOwogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IG1lcmdlU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBmaWx0ZXJTbG93KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpOwogICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGV4Y2x1ZGVTbG93KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpOwogICAg
IAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgYml0Q291bnRTbG93KCkgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216501</attachid>
            <date>2013-11-09 17:03:20 -0800</date>
            <delta_ts>2013-11-09 17:38:32 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>42425</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5MDAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyOSBA
QAorMjAxMy0xMS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFN3aXRjaCBGVEwgR2V0QnlJZC9QdXRCeUlkIElDJ3Mgb3ZlciB0byB1c2luZyBBbnlSZWdDQwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MDk0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBU
aGlzIGNsb3NlcyB0aGUgbG9vcCBvbiBpbmxpbmUgY2FjaGVzIChJQydzKSBpbiB0aGUgRlRMLiBU
aGUgZ29hbCBpcyB0byBoYXZlIElDJ3MKKyAgICAgICAgaW4gTExWTS1nZW5lcmF0ZWQgY29kZSB0
aGF0IGFyZSBqdXN0IGFzIGVmZmljaWVudCAoaWYgbm90IG1vcmUgc28pIHRoYW4gd2hhdCBhCisg
ICAgICAgIGN1c3RvbSBKSVQgY291bGQgZG8uIEFzIGluIHplcm8gc291cmNlcyBvZiBvdmVyaGVh
ZC4gTm90IGEgc2luZ2xlIGV4dHJhIGluc3RydWN0aW9uCisgICAgICAgIG9yIGV2ZW4gcmVnaXN0
ZXIgYWxsb2NhdGlvbiBwYXRob2xvZ3kuIFdlIGFjY29tcGxpc2ggdGhpcyBieSBoYXZpbmcgdHdv
IHRoaW5naWVzIGluCisgICAgICAgIExMVk0uIEZpcnN0IGlzIHRoZSBsbHZtLmV4cGVyaW1lbnRh
bC5wYXRjaHBvaW50IGludHJpbnNpYywgd2hpY2ggaXMgc29ydCBvZiBhbgorICAgICAgICBpbmxp
bmUgbWFjaGluZSBjb2RlIHNuaXBwZXQgdGhhdCB3ZSBjYW4gZmlsbCBpbiB3aXRoIHdoYXRldmVy
IHdlIHdhbnQgYW5kIHRoZW4KKyAgICAgICAgbW9kaWZ5IHN1YnNlcXVlbnRseS4gQnV0IHlvdSBo
YXZlIG9ubHkgdHdvIGNob2ljZXMgb2YgaG93IHRvIHBhc3MgdmFsdWVzIHRvIGEKKyAgICAgICAg
cGF0Y2hwb2ludDogKDEpIHZpYSB0aGUgY2FsbGluZyBjb252ZW50aW9uIG9yICgyKSB2aWEgdGhl
IHN0YWNrbWFwLiBOZWl0aGVyIGFyZSBnb29kCisgICAgICAgIGZvciBvcGVyYW5kcyB0byBhbiBJ
QyAobGlrZSB0aGUgYmFzZSBwb2ludGVyIGZvciBhIEdldEJ5SWQsIGZvciBleGFtcGxlKS4gKDEp
IGlzIGJhZAorICAgICAgICBiZWNhdXNlIGl0IHJlc3VsdHMgaW4gdGhpbmdzIGJlaW5nIHBpbm5l
ZCB0byBjZXJ0YWluIHJlZ2lzdGVycyBhIHByaW9yaTsgYSBjdXN0b20KKyAgICAgICAgSklUIChs
aWtlIHRoZSBERkcpIHdpbGwgbm90IHBpbiBJQyBvcGVyYW5kcyB0byBhbnkgcmVnaXN0ZXJzIGEg
cHJpb3IgYnV0IHdpbGwgYWxsb3cKKyAgICAgICAgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciB0byBk
byB3aGF0ZXZlciBpdCB3YW50cy4gKDIpIGlzIGJhZCBiZWNhdXNlIHRoZSBvcGVyYW5kcyBtYXkK
KyAgICAgICAgYmUgc3BpbGxlZCBvciBtYXkgYmUgcmVwcmVzZW50ZWQgaW4gb3RoZXIgY3Jhenkg
d2F5cy4gWW91IGdlbmVyYWxseSB3YW50IGFuIElDIHRvCisgICAgICAgIGhhdmUgaXRzIG9wZXJh
bmRzIGluIHJlZ2lzdGVycy4gQWxzbywgcGF0Y2hwb2ludHMgb25seSByZXR1cm4gdmFsdWVzIHVz
aW5nIHRoZQorICAgICAgICBjYWxsaW5nIGNvbnZlbnRpb24sIHdoaWNoIGlzIHVuZm9ydHVuYXRl
IHNpbmNlIGl0IHBpbnMgdGhlIHJldHVybiB2YWx1ZSB0byBhCisgICAgICAgIHJlZ2lzdGVyIGEg
cHJpb3JpLiBUaGlzIGlzIHdoZXJlIHRoZSBzZWNvbmQgdGhpbmd5IGNvbWVzIGluOiB0aGUgQW55
UmVnQ0MuIFRoaXMgaXMKKyAgICAgICAgYSBzcGVjaWFsIGNhbGxpbmcgY29udmVudGlvbiBvbmx5
IGZvciB1c2Ugd2l0aCBwYXRjaHBvaW50cy4gSXQgbWVhbnMgdGhhdCBhcmd1bWVudHMKKyAgICAg
ICAgcGFzc2VkICJieSBDQyIgaW4gdGhlIHBhdGNocG9pbnQgY2FuIGJlIHBsYWNlZCBpbiBhbnkg
cmVnaXN0ZXIsIGFuZCB0aGUgcmVnaXN0ZXIKKyAgICAgICAgdGhhdCBnZXRzIHVzZWQgaXMgcmVw
b3J0ZWQgYXMgcGFydCBvZiB0aGUgc3RhY2ttYXAuIEl0IGFsc28gbWVhbnMgdGhhdCB0aGUgcmV0
dXJuCisgICAgICAgIHZhbHVlIChpZiB0aGVyZSBpcyBvbmUpIGNhbiBiZSBwbGFjZWQgaW4gYW55
IHJlZ2lzdGVyLCBhbmQgdGhlIHN0YWNrbWFwIHdpbGwgdGVsbAorICAgICAgICB5b3Ugd2hpY2gg
b25lIGl0IHdhcy4gVGh1cywgcGF0Y2hwb2ludHMgY29tYmluZWQgd2l0aCBBbnlSZWdDQyBtZWFu
IHRoYXQgeW91IG5vdAorICAgICAgICBvbmx5IGdldCB0aGUga2luZCBvZiBzZWxmLW1vZGlmeWlu
ZyBjb2RlIHRoYXQgeW91IHdhbnQgZm9yIElDJ3MsIGJ1dCB5b3UgYWxzbyBnZXQKKyAgICAgICAg
YWxsIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0aW9uIGdvb2RuZXNzIHRoYXQgYSBjdXN0b20gSklU
IHdvdWxkIGhhdmUgZ2l2ZW4geW91LgorICAgICAgICBFeGNlcHQgdGhhdCB5b3UncmUgZ2V0dGlu
ZyBpdCBmcm9tIExMVk0gYW5kIG5vdCBhIGN1c3RvbSBKSVQuIEF3ZXNvbWUuCisgICAgICAgIAor
ICAgICAgICBFdmVuIHRob3VnaCBhbGwgb2YgdGhlIGZ1biBzdHVmZiBpcyBvbiB0aGUgTExWTSBz
aWRlLCB0aGlzIHBhdGNoIHdhcyBoYXJkZXIgdGhhbgorICAgICAgICB5b3UnZCBleHBlY3QuCisg
ICAgICAgIAorICAgICAgICBGaXJzdCB0aGUgb2J2aW91cyBiaXRzOgorICAgICAgICAKKyAgICAg
ICAgLSBJQyBwYXRjaHBvaW50cyBub3cgdXNlIEFueVJlZ0NDIGluc3RlYWQgb2YgdGhlIEMgQ0Mu
IChDQyA9IGNhbGxpbmcgY29udmVudGlvbi4pCisgICAgICAgIAorICAgICAgICAtIEZUTDo6Zml4
RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKCkgbm93IGNvcnJlY3RseSBmaWd1cmVzIG91dCB3aGlj
aCByZWdpc3RlcnMgdGhlCisgICAgICAgICAgSUMgaXMgc3VwcG9zZWQgdG8gdXNlIGluc3RlYWQg
b2YgYXNzdW1pbmcgQyBDQyBhcmd1bWVudCByZWdpc3RlcnMuCisgICAgICAgIAorICAgICAgICBB
bmQgdGhlbiBhbGwgb2YgdGhlIHN0dWZmIHRoYXQgYnJva2UgYW5kIHRoYXQgdGhpcyBwYXRjaCBm
aXhlczoKKyAgICAgICAgCisgICAgICAgIC0gSUMgc2l6aW5nIGJhc2VkIG9uIGdlbmVyYXRpbmcg
YSBkdW1teSBJQyAod2hhdCBGVExJbmxpbmVDYWNoZVNpemUgZGlkKSBpcyB0b3RhbGx5CisgICAg
ICAgICAgYmFkIG9uIHg4Ni02NCwgd2hlcmUgdmFyaW91cyByZWdpc3RlciBwZXJtdXRhdGlvbnMg
bGVhZCB0byBiaXphcnJlIGhlYWRlciBieXRlcworICAgICAgICAgIGFuZCBlY2xlY3RpYyBTSUIg
ZW5jb2RpbmdzLiBJIGNoYW5nZWQgdGhhdCB0byBoYXZlIG1hZ2ljIGNvbnN0YW50cywgZm9yIG5v
dy4KKyAgICAgICAgCisgICAgICAgIC0gU2xvdyBwYXRoIGNhbGxzIGRpZG4ndCBwcmVzZXJ2ZSB0
aGUgQ0MgcmV0dXJuIHJlZ2lzdGVyLgorICAgICAgICAKKyAgICAgICAgLSBSZXBhdGNoJ3Mgc2Ny
YXRjaCByZWdpc3RlciBhbGxvY2F0aW9uIHdvdWxkIGdldCB0b3RhbGx5IGNvbmZ1c2VkIGlmIHRo
ZSBvcGVyYW5kCisgICAgICAgICAgcmVnaXN0ZXJzIHdlcmVuJ3Qgb25lIG9mIHRoZSBERkctc3R5
bGUgInRlbXAiIHJlZ2lzdGVycy4gQW5kIGJ5ICJ0b3RhbGx5IGNvbmZ1c2VkIgorICAgICAgICAg
IEkgbWVhbiB0aGF0IGl0IHdvdWxkIGNyYXNoLgorICAgICAgICAKKyAgICAgICAgLSBXZSBhc3N1
bWVkIHRoYXQgcjEwIGlzIGNhbGxlZS1zYXZlZC4gSXQncyBub3QuIFRoYXQgb25lIGR1ZGUncyBQ
UFQgYWJvdXQgeDg2LTY0CisgICAgICAgICAgY2RlY2wgdGhhdCBJIGZvdW5kIG9uIHRoZSBpbnRl
cnR1YmVzIHdhcyBub3QgYSB0cnVzdHdvcnRoeSBzb3VyY2Ugb2YgaW5mb3JtYXRpb24sCisgICAg
ICAgICAgYXBwYXJlbnRseS4KKyAgICAgICAgCisgICAgICAgIC0gQ2FsbCByZXBhdGNoaW5nIGRp
ZG4ndCBrbm93IHRoYXQgdGhlIEZUTCBkb2VzIGl0cyBJQyBzbG93IGNhbGxzIHZpYSBzcGVjaWFs
bHkKKyAgICAgICAgICBnZW5lcmF0ZWQgdGh1bmtzLiBUaGlzIHdhcyBwYXJ0aWN1bGFybHkgZnVu
IHRvIGZpeDogYmFzaWNhbGx5LCBub3cgd2hlbiB3ZSByZWxpbmsKKyAgICAgICAgICBhbiBJQyBj
YWxsIGluIHRoZSBGVEwsIHdlIHVzZSB0aGUgb2xkIGNhbGwgdGFyZ2V0IHRvIGZpbmQgdGhlIFNs
b3dQYXRoQ2FsbEtleSwKKyAgICAgICAgICB3aGljaCB0ZWxscyB1cyBldmVyeXRoaW5nIHdlIG5l
ZWQgdG8ga25vdyB0byBnZW5lcmF0ZSAob3IgbG9vayB1cCkgYSBuZXcgdGh1bmsgZm9yCisgICAg
ICAgICAgdGhlIG5ldyBmdW5jdGlvbiB3ZSB3YW50IHRvIGNhbGwuCisgICAgICAgIAorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJDb2RlUHRyOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHIpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6Omhhc2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI6OmVtcHR5VmFsdWUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI6
OmRlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0ckhhc2g6
Omhhc2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNoOjplcXVhbCk6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAg
ICogYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6UmVwYXRjaEJ1ZmZl
cjo6UmVwYXRjaEJ1ZmZlcik6CisgICAgICAgIChKU0M6OlJlcGF0Y2hCdWZmZXI6OmNvZGVCbG9j
ayk6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6RlRM
OjpzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKToKKyAgICAgICAgKiBmdGwvRlRMQ29t
cGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Zml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBz
KToKKyAgICAgICAgKiBmdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcDoKKyAgICAgICAgKEpTQzo6
RlRMOjpzaXplT2ZHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6RlRMOjpzaXplT2ZQdXRCeUlkKToK
KyAgICAgICAgKiBmdGwvRlRMSklURmluYWxpemVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpK
SVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24pOgorICAgICAgICAqIGZ0bC9GVExMb2NhdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG9jYXRpb246OmZvclN0YWNrbWFwcyk6CisgICAg
ICAgICogZnRsL0ZUTExvY2F0aW9uLmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEJ5SWQp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUHV0QnlJZCk6Cisg
ICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
Y29tcGlsZVN0dWIpOgorICAgICAgICAqIGZ0bC9GVExTbG93UGF0aENhbGwuY3BwOgorICAgICAg
ICAqIGZ0bC9GVExTbG93UGF0aENhbGxLZXkuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0
aENhbGxLZXk6OndpdGhDYWxsVGFyZ2V0KToKKyAgICAgICAgKiBmdGwvRlRMU3RhY2tNYXBzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OkxvY2F0aW9uOjpkaXJlY3RHUFIpOgor
ICAgICAgICAoSlNDOjpGVEw6OlN0YWNrTWFwczo6TG9jYXRpb246OnJlc3RvcmVJbnRvKToKKyAg
ICAgICAgKiBmdGwvRlRMU3RhY2tNYXBzLmg6CisgICAgICAgICogZnRsL0ZUTFRodW5rcy5oOgor
ICAgICAgICAoSlNDOjpGVEw6OmdlbmVyYXRlSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpG
VEw6OmtleUZvclRodW5rKToKKyAgICAgICAgKEpTQzo6RlRMOjpUaHVua3M6OmtleUZvclNsb3dQ
YXRoQ2FsbFRodW5rKToKKyAgICAgICAgKiBqaXQvRlBSSW5mby5oOgorICAgICAgICAoSlNDOjpG
UFJJbmZvOjp0b0luZGV4KToKKyAgICAgICAgKiBqaXQvR1BSSW5mby5oOgorICAgICAgICAoSlND
OjpHUFJJbmZvOjp0b0luZGV4KToKKyAgICAgICAgKEpTQzo6R1BSSW5mbzo6ZGVidWdOYW1lKToK
KyAgICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNl
dDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycyk6CisgICAgICAgICogaml0L1JlZ2lzdGVyU2V0Lmg6Cisg
ICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpmaWx0ZXIpOgorICAgICAgICAqIGppdC9SZXBhdGNo
LmNwcDoKKyAgICAgICAgKEpTQzo6cmVhZENhbGxUYXJnZXQpOgorICAgICAgICAoSlNDOjpyZXBh
dGNoQ2FsbCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hCeUlkU2VsZkFjY2Vzcyk6CisgICAgICAg
IChKU0M6OnRyeUNhY2hlR2V0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6
CisgICAgICAgIChKU0M6OnRyeUJ1aWxkUHV0QnlJZExpc3QpOgorICAgICAgICAoSlNDOjpyZXNl
dEdldEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXNldFB1dEJ5SUQpOgorICAgICAgICAqIGppdC9T
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6U2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpsb2NrKToKKwogMjAxMy0xMS0wOCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2Vr
QGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBHVEsgYnVpbGQgZml4LgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQ29kZVJlZi5oCShyZXZpc2lvbiAxNTkwMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzQs
MTEgKzMzNCw0MSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBkdW1wV2l0aE5hbWUoIkNvZGVQ
dHIiLCBvdXQpOwogICAgIH0KKyAgICAKKyAgICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZh
bHVlIH07CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAgICAK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoRW1wdHlWYWx1ZVRhZykKKyAgICAgICAgOiBtX3Zh
bHVlKGVtcHR5VmFsdWUoKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cihEZWxldGVkVmFsdWVUYWcpCisgICAgICAgIDogbV92YWx1ZShkZWxldGVkVmFsdWUo
KSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNFbXB0eVZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZSA9PSBlbXB0eVZhbHVlKCk7IH0KKyAgICBib29sIGlzRGVsZXRlZFZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA9PSBkZWxldGVkVmFsdWUoKTsgfQorICAgIAorICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBQdHJIYXNoPHZvaWQqPjo6aGFzaChtX3Zh
bHVlKTsgfQogCiBwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkKiBlbXB0eVZhbHVlKCkgeyByZXR1
cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMSkpOyB9CisgICAg
c3RhdGljIHZvaWQqIGRlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4o
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDIpKTsgfQorICAgIAogICAgIHZvaWQqIG1fdmFsdWU7CiB9
OwogCitzdHJ1Y3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRySGFzaCB7CisgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBwdHIpIHsgcmV0dXJuIHB0ci5o
YXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHImIGEsIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhID09IGI7CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVU
b0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKIC8vIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjoK
IC8vCiAvLyBBIHJlZmVyZW5jZSB0byBhIHNlY3Rpb24gb2YgSklUIGdlbmVyYXRlZCBjb2RlLiAg
QSBDb2RlUmVmIGNvbnNpc3RzIG9mIGEKQEAgLTQyMCw0ICs0NTAsMTYgQEAgcHJpdmF0ZToKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVB0cj4geworICAgIHR5cGVkZWYgSlNDOjpNYWNyb0Fzc2Vt
YmxlckNvZGVQdHJIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI+IDogcHVibGljIEN1c3RvbUhhc2hUcmFpdHM8SlNDOjpNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWZfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gMTU5MDAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTIgQEAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbiA6IHB1YmxpYyBBYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyPFg4NkFzc2VtYmxlcj4gewotcHJvdGVjdGVkOgorcHVibGljOgogI2lmIENQVShY
ODZfNjQpCiAgICAgc3RhdGljIGNvbnN0IFg4NlJlZ2lzdGVyczo6UmVnaXN0ZXJJRCBzY3JhdGNo
UmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OnIxMTsKICNlbmRpZgogCitwcm90ZWN0ZWQ6CiAgICAg
c3RhdGljIGNvbnN0IGludCBEb3VibGVDb25kaXRpb25CaXRJbnZlcnQgPSAweDEwOwogICAgIHN0
YXRpYyBjb25zdCBpbnQgRG91YmxlQ29uZGl0aW9uQml0U3BlY2lhbCA9IDB4MjA7CiAgICAgc3Rh
dGljIGNvbnN0IGludCBEb3VibGVDb25kaXRpb25CaXRzID0gRG91YmxlQ29uZGl0aW9uQml0SW52
ZXJ0IHwgRG91YmxlQ29uZGl0aW9uQml0U3BlY2lhbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5oCShyZXZpc2lvbiAxNTkwMDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBjbGFzcyBSZXBhdGNoQnVmZmVyIHsKIAogcHVibGlj
OgogICAgIFJlcGF0Y2hCdWZmZXIoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgICAgIDogbV9j
b2RlQmxvY2soY29kZUJsb2NrKQogICAgIHsKICNpZiBFTkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xV
U0lWRSkKICAgICAgICAgUmVmUHRyPEpJVENvZGU+IGNvZGUgPSBjb2RlQmxvY2stPmppdENvZGUo
KTsKQEAgLTUyLDggKzUzLDYgQEAgcHVibGljOgogICAgICAgICBtX3NpemUgPSBjb2RlLT5zaXpl
KCk7CiAKICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWFrZVdyaXRhYmxlKG1fc3RhcnQs
IG1fc2l6ZSk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKICNlbmRp
ZgogICAgIH0KIApAQCAtNjMsNiArNjIsOCBAQCBwdWJsaWM6CiAgICAgICAgIEV4ZWN1dGFibGVB
bGxvY2F0b3I6Om1ha2VFeGVjdXRhYmxlKG1fc3RhcnQsIG1fc2l6ZSk7CiAjZW5kaWYKICAgICB9
CisgICAgCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVC
bG9jazsgfQogCiAgICAgdm9pZCByZWxpbmsoQ29kZUxvY2F0aW9uSnVtcCBqdW1wLCBDb2RlTG9j
YXRpb25MYWJlbCBkZXN0aW5hdGlvbikKICAgICB7CkBAIC0xNzYsNiArMTc3LDcgQEAgcHVibGlj
OgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogI2lmIEVO
QUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQogICAgIHZvaWQqIG1fc3RhcnQ7CiAgICAgc2l6
ZV90IG1fc2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2
aWF0aW9ucy5oCShyZXZpc2lvbiAxNTkwMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEFiYnJldmlhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjY5LDYgKzI2OSw3IEBAIHN0
YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciAKICAgICBMVmFsdWUgYXJnc1td
ID0geyBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3LCBhcmc4IH07CiAg
ICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgOCk7CiB9CitzdGF0
aWMgaW5saW5lIHZvaWQgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihMVmFsdWUgaW5z
dHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxpbmdDb252ZW50aW9uKSB7IGxsdm0tPlNldEluc3RydWN0
aW9uQ2FsbENvbnYoaW5zdHJ1Y3Rpb24sIGNhbGxpbmdDb252ZW50aW9uKTsgfQogc3RhdGljIGlu
bGluZSBMVmFsdWUgYnVpbGRFeHRyYWN0VmFsdWUoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGFn
Z1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkRXh0cmFjdFZhbHVlKGJ1
aWxkZXIsIGFnZ1ZhbCwgaW5kZXgsICIiKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRT
ZWxlY3QoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGNvbmRpdGlvbiwgTFZhbHVlIHRha2VuLCBM
VmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGxsdm0tPkJ1aWxkU2VsZWN0KGJ1aWxkZXIsIGNvbmRp
dGlvbiwgdGFrZW4sIG5vdFRha2VuLCAiIik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxk
QnIoTEJ1aWxkZXIgYnVpbGRlciwgTEJhc2ljQmxvY2sgZGVzdGluYXRpb24pIHsgcmV0dXJuIGxs
dm0tPkJ1aWxkQnIoYnVpbGRlciwgZGVzdGluYXRpb24pOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE1OTAwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCwx
NCArMTg4LDEyIEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXIt
PnZhbHVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBVTlVTRURfUEFSQU0ocmVjb3JkKTsg
Ly8gRklYTUU6IHVzZSBBbnlSZWdzLgotCiAgICAgICAgICAgICAvLyBGSVhNRTogTExWTSBzaG91
bGQgdGVsbCB1cyB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuCiAgICAgICAgICAgICBSZWdpc3Rl
clNldCB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgY2FsbEZyYW1lUmVnaXN0ZXIgPSBHUFJJbmZvOjph
cmd1bWVudEdQUjA7Ci0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IEdQUkluZm86OmFyZ3VtZW50
R1BSMTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UjsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWNvcmQubG9jYXRpb25zWzBdLmRpcmVj
dEdQUigpOworICAgICAgICAgICAgR1BSUmVnIGNhbGxGcmFtZVJlZ2lzdGVyID0gcmVjb3JkLmxv
Y2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVjb3Jk
LmxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBnZXRCeUlk
LmNvZGVPcmlnaW4oKSwgdXNlZFJlZ2lzdGVycywgY2FsbEZyYW1lUmVnaXN0ZXIsCkBAIC0yMjQs
MTkgKzIyMiwxNyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVy
LT52YWx1ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHJlY29yZCk7
IC8vIEZJWE1FOiB1c2UgQW55UmVncy4KLQogICAgICAgICAgICAgLy8gRklYTUU6IExMVk0gc2hv
dWxkIHRlbGwgdXMgd2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLgogICAgICAgICAgICAgUmVnaXN0
ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGNhbGxGcmFtZVJlZ2lzdGVyID0gR1BSSW5mbzo6
YXJndW1lbnRHUFIwOwotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjphcmd1bWVu
dEdQUjE7Ci0gICAgICAgICAgICBHUFJSZWcgdmFsdWUgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7
CisgICAgICAgICAgICBHUFJSZWcgY2FsbEZyYW1lUmVnaXN0ZXIgPSByZWNvcmQubG9jYXRpb25z
WzBdLmRpcmVjdEdQUigpOworICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWNvcmQubG9jYXRp
b25zWzFdLmRpcmVjdEdQUigpOworICAgICAgICAgICAgR1BSUmVnIHZhbHVlID0gcmVjb3JkLmxv
Y2F0aW9uc1syXS5kaXJlY3RHUFIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgSklUUHV0
QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBwdXRCeUlkLmNv
ZGVPcmlnaW4oKSwgdXNlZFJlZ2lzdGVycywgY2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MoYmFzZSksIEpTVmFsdWVSZWdzKHZhbHVlKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIzLCBmYWxzZSwKLSAgICAgICAgICAgICAgICBwdXRCeUlkLmVjbWFNb2RlKCksIHB1
dEJ5SWQucHV0S2luZCgpKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlKSwgSlNW
YWx1ZVJlZ3ModmFsdWUpLCBNYWNyb0Fzc2VtYmxlcjo6c2NyYXRjaFJlZ2lzdGVyLAorICAgICAg
ICAgICAgICAgIGZhbHNlLCBwdXRCeUlkLmVjbWFNb2RlKCksIHB1dEJ5SWQucHV0S2luZCgpKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGJlZ2luID0g
c2xvd1BhdGhKSVQubGFiZWwoKTsKICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAkocmV2aXNpb24gMTU5MDAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMywzOCArMzMsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCi1zdGF0aWMgc2l6ZV90IHNfc2l6ZU9mR2V0QnlJZDsKLXN0YXRpYyBzaXpl
X3Qgc19zaXplT2ZQdXRCeUlkOwotCiBzaXplX3Qgc2l6ZU9mR2V0QnlJZCgpCiB7Ci0gICAgaWYg
KHNfc2l6ZU9mR2V0QnlJZCkKLSAgICAgICAgcmV0dXJuIHNfc2l6ZU9mR2V0QnlJZDsKLSAgICAK
LSAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7Ci0gICAgCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciBn
ZW5lcmF0b3IoCi0gICAgICAgIDAsIENvZGVPcmlnaW4oKSwgUmVnaXN0ZXJTZXQoKSwgR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgIEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q2
KSwgSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDcpLCBmYWxzZSk7Ci0gICAgZ2VuZXJhdG9yLmdl
bmVyYXRlRmFzdFBhdGgoaml0KTsKLSAgICAKLSAgICByZXR1cm4gc19zaXplT2ZHZXRCeUlkID0g
aml0Lm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7CisgICAgcmV0dXJuIDI5OwogfQogCiBzaXplX3Qg
c2l6ZU9mUHV0QnlJZCgpCiB7Ci0gICAgaWYgKHNfc2l6ZU9mUHV0QnlJZCkKLSAgICAgICAgcmV0
dXJuIHNfc2l6ZU9mUHV0QnlJZDsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7Ci0gICAg
Ci0gICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW5lcmF0b3IoCi0gICAgICAgIDAsIENvZGVPcmln
aW4oKSwgUmVnaXN0ZXJTZXQoKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAg
IEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1Q2KSwgSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDcp
LCBHUFJJbmZvOjpyZWdUOCwgZmFsc2UsCi0gICAgICAgIE5vdFN0cmljdE1vZGUsIE5vdERpcmVj
dCk7Ci0gICAgZ2VuZXJhdG9yLmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKLSAgICAKLSAgICByZXR1
cm4gc19zaXplT2ZQdXRCeUlkID0gaml0Lm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7CisgICAgcmV0
dXJuIDMyOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAxNTkwMDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVu
Y3Rpb24oKQogICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKAogICAgICAgICAgICAg
ICAgICAgICBtX3BsYW4udm0uZnRsVGh1bmtzLT5nZXRPU1JFeGl0R2VuZXJhdGlvblRodW5rKAog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9wbGFuLnZtLCBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBz
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdENvZGUtPnN0YWNrbWFwcywgaXRlci0+
dmFsdWUubG9jYXRpb25zWzBdKSkuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJmppdENvZGUtPnN0YWNrbWFwcywgaXRlci0+dmFsdWUubG9jYXRpb25zWzBdKSkuY29kZSgp
KSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGppdENvZGUtPmluaXRpYWxpemVFeGl0
VGh1bmtzKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5jcHAJ
KHJldmlzaW9uIDE1OTAwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKIAotTG9jYXRpb24gTG9jYXRpb246OmZvclN0YWNrbWFwcyhjb25z
dCBTdGFja01hcHMmIHN0YWNrbWFwcywgY29uc3QgU3RhY2tNYXBzOjpMb2NhdGlvbiYgbG9jYXRp
b24pCitMb2NhdGlvbiBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKGNvbnN0IFN0YWNrTWFwcyogc3Rh
Y2ttYXBzLCBjb25zdCBTdGFja01hcHM6OkxvY2F0aW9uJiBsb2NhdGlvbikKIHsKICAgICBzd2l0
Y2ggKGxvY2F0aW9uLmtpbmQpIHsKICAgICBjYXNlIFN0YWNrTWFwczo6TG9jYXRpb246OlVucHJv
Y2Vzc2VkOgpAQCAtNTMsNyArNTMsOCBAQCBMb2NhdGlvbiBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBz
KGNvbnN0IFN0CiAgICAgICAgIHJldHVybiBmb3JDb25zdGFudChsb2NhdGlvbi5vZmZzZXQpOwog
ICAgICAgICAKICAgICBjYXNlIFN0YWNrTWFwczo6TG9jYXRpb246OkNvbnN0YW50SW5kZXg6Ci0g
ICAgICAgIHJldHVybiBmb3JDb25zdGFudChzdGFja21hcHMuY29uc3RhbnRzW2xvY2F0aW9uLm9m
ZnNldF0uaW50ZWdlcik7CisgICAgICAgIEFTU0VSVChzdGFja21hcHMpOworICAgICAgICByZXR1
cm4gZm9yQ29uc3RhbnQoc3RhY2ttYXBzLT5jb25zdGFudHNbbG9jYXRpb24ub2Zmc2V0XS5pbnRl
Z2VyKTsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmgJKHJldmlzaW9uIDE1OTAw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtODQsNyArODQsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogCi0gICAgc3RhdGljIExvY2F0aW9uIGZvclN0YWNrbWFwcyhjb25zdCBTdGFja01hcHMm
LCBjb25zdCBTdGFja01hcHM6OkxvY2F0aW9uJik7CisgICAgLy8gWW91IGNhbiBwYXNzIGEgbnVs
bCBTdGFja01hcHMgaWYgeW91IGFyZSBjb25maWRlbnQgdGhhdCB0aGUgbG9jYXRpb24gZG9lc24n
dAorICAgIC8vIGludm9sdmUgYSB3aWRlIGNvbnN0YW50LgorICAgIHN0YXRpYyBMb2NhdGlvbiBm
b3JTdGFja21hcHMoY29uc3QgU3RhY2tNYXBzKiwgY29uc3QgU3RhY2tNYXBzOjpMb2NhdGlvbiYp
OwogICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHJldmlzaW9uIDE1OTAwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjc1LDEwICsxMjc1LDEyIEBAIHBy
aXZhdGU6CiAKICAgICAgICAgLy8gQXJndW1lbnRzOiBpZCwgYnl0ZXMsIHRhcmdldCwgbnVtQXJn
cywgYXJncy4uLgogICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21hcElEcysr
OwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNhbGwoCisgICAgICAgIExWYWx1ZSBjYWxsID0g
bV9vdXQuY2FsbCgKICAgICAgICAgICAgIG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygp
LAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihzdGFja21hcElEKSwgbV9vdXQuY29uc3RJ
bnQzMihzaXplT2ZHZXRCeUlkKCkpLAotICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJlZjgp
LCBtX291dC5jb25zdEludDMyKDIpLCBtX2NhbGxGcmFtZSwgYmFzZSkpOworICAgICAgICAgICAg
Y29uc3ROdWxsKG1fb3V0LnJlZjgpLCBtX291dC5jb25zdEludDMyKDIpLCBtX2NhbGxGcmFtZSwg
YmFzZSk7CisgICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExW
TUFueVJlZ0NhbGxDb252KTsKKyAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKICAgICAgICAgCiAg
ICAgICAgIG1fZnRsU3RhdGUuZ2V0QnlJZHMuYXBwZW5kKEdldEJ5SWREZXNjcmlwdG9yKHN0YWNr
bWFwSUQsIG1fbm9kZS0+Y29kZU9yaWdpbiwgdWlkKSk7CiAgICAgfQpAQCAtMTI5NCwxMCArMTI5
NiwxMSBAQCBwcml2YXRlOgogCiAgICAgICAgIC8vIEFyZ3VtZW50czogaWQsIGJ5dGVzLCB0YXJn
ZXQsIG51bUFyZ3MsIGFyZ3MuLi4KICAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3Rh
Y2ttYXBJRHMrKzsKLSAgICAgICAgbV9vdXQuY2FsbCgKKyAgICAgICAgTFZhbHVlIGNhbGwgPSBt
X291dC5jYWxsKAogICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludFZvaWRJbnRyaW5zaWMoKSwK
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RhY2ttYXBJRCksIG1fb3V0LmNvbnN0SW50
MzIoc2l6ZU9mUHV0QnlJZCgpKSwKICAgICAgICAgICAgIGNvbnN0TnVsbChtX291dC5yZWY4KSwg
bV9vdXQuY29uc3RJbnQzMigzKSwgbV9jYWxsRnJhbWUsIGJhc2UsIHZhbHVlKTsKKyAgICAgICAg
c2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVnQ2FsbENvbnYp
OwogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5wdXRCeUlkcy5hcHBlbmQoUHV0QnlJZERl
c2NyaXB0b3IoCiAgICAgICAgICAgICBzdGFja21hcElELCBtX25vZGUtPmNvZGVPcmlnaW4sIHVp
ZCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21w
aWxlci5jcHAJKHJldmlzaW9uIDE1OTAwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDggKzE3Niw4IEBA
IHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIGV4aXQubV9jb2RlID0gRklOQUxJWkVfQ09E
RV9JRigKICAgICAgICAgc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCksCiAgICAgICAgIHBhdGNoQnVm
ZmVyLAotICAgICAgICAoIkZUTCBPU1IgZXhpdCAjJXUgKGJjIyV1LCAlcykgZnJvbSAlcywgd2l0
aCBvcGVyYW5kcyA9ICVzLCBhbmQgcmVjb3JkID0gJXMiLAotICAgICAgICAgICAgZXhpdElELCBl
eGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LAorICAgICAgICAoIkZUTCBPU1IgZXhpdCAj
JXUgKCVzLCAlcykgZnJvbSAlcywgd2l0aCBvcGVyYW5kcyA9ICVzLCBhbmQgcmVjb3JkID0gJXMi
LAorICAgICAgICAgICAgZXhpdElELCB0b0NTdHJpbmcoZXhpdC5tX2NvZGVPcmlnaW4pLmRhdGEo
KSwKICAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmco
KmNvZGVCbG9jaykuZGF0YSgpLAogICAgICAgICAgICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4
dDxEdW1wQ29udGV4dD4oZXhpdC5tX3ZhbHVlcykpLmRhdGEoKSwKICAgICAgICAgICAgIHRvQ1N0
cmluZygqcmVjb3JkKS5kYXRhKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU2xvd1BhdGhDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHJldmlzaW9uIDE1OTAwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQs
MjAgKzY0LDIzIEBAIHB1YmxpYzoKICAgICAgICAgbV9vZmZzZXRUb1NhdmluZ0FyZWEgPQogICAg
ICAgICAgICAgKHN0ZDo6bWF4KG1fbnVtQXJncywgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVS
UykgLSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTKSAqIHdvcmRTaXplOwogICAgICAgICAK
LSAgICAgICAgdW5zaWduZWQgbnVtQXJndW1lbnRSZWdpc3RlcnNUaGF0TmVlZFNhdmluZyA9IDA7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKE5VTUJFUl9PRl9BUkdVTUVOVF9S
RUdJU1RFUlMsIG51bUFyZ3MpOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV91c2VkUmVnaXN0
ZXJzLmdldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkpKQotICAgICAgICAgICAgICAg
IG51bUFyZ3VtZW50UmVnaXN0ZXJzVGhhdE5lZWRTYXZpbmcrKzsKLSAgICAgICAgfQorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJT
LCBudW1BcmdzKTsgaS0tOykKKyAgICAgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3Rl
cnMuc2V0KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSk7CisgICAgICAgIGlmIChyZXR1
cm5SZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgbV9jYWxsaW5nQ29udmVu
dGlvblJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBtX2Nh
bGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLmZpbHRlcihtX3VzZWRSZWdpc3RlcnMpOworICAgICAg
ICAKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycyA9
CisgICAgICAgICAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLm51bWJlck9mU2V0UmVn
aXN0ZXJzKCk7CiAgICAgICAgIAogICAgICAgICBzaXplX3Qgb2Zmc2V0VG9UaHVua1NhdmluZ0Fy
ZWEgPQogICAgICAgICAgICAgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKwotICAgICAgICAgICAgbnVt
QXJndW1lbnRSZWdpc3RlcnNUaGF0TmVlZFNhdmluZyAqIHdvcmRTaXplOworICAgICAgICAgICAg
bnVtYmVyT2ZDYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycyAqIHdvcmRTaXplOwogICAgICAgICAK
ICAgICAgICAgbV9zdGFja0J5dGVzTmVlZGVkID0KICAgICAgICAgICAgIG9mZnNldFRvVGh1bmtT
YXZpbmdBcmVhICsKICAgICAgICAgICAgIHN0YWNrQnl0ZXNOZWVkZWRGb3JSZXR1cm5BZGRyZXNz
ICsKLSAgICAgICAgICAgIChtX3VzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSAt
IG51bUFyZ3VtZW50UmVnaXN0ZXJzVGhhdE5lZWRTYXZpbmcpICogd29yZFNpemU7CisgICAgICAg
ICAgICAobV91c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgLSBudW1iZXJPZkNh
bGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzKSAqIHdvcmRTaXplOwogICAgICAgICAKICAgICAgICAg
c2l6ZV90IHN0YWNrQWxpZ25tZW50ID0gMTY7CiAgICAgICAgIApAQCAtODcsMTEgKzkwLDEzIEBA
IHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG1fdGh1bmtTYXZlU2V0ID0gbV91c2VkUmVnaXN0
ZXJzOwogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4oTlVNQkVS
X09GX0FSR1VNRU5UX1JFR0lTVEVSUywgbnVtQXJncyk7IGktLTspIHsKLSAgICAgICAgICAgIGlm
ICghbV91c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkpKQor
ICAgICAgICAvLyBUaGlzIHJlbGllcyBvbiBhbGwgY2FsbGluZyBjb252ZW50aW9uIHJlZ2lzdGVy
cyBhbHNvIGJlaW5nIHRlbXAgcmVnaXN0ZXJzLgorICAgICAgICB1bnNpZ25lZCBzdGFja0luZGV4
ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnM7IGktLTspIHsKKyAgICAgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0b1JlZ2lzdGVy
KGkpOworICAgICAgICAgICAgaWYgKCFtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLmdldChy
ZWcpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgR1BSUmVnIHJlZyA9
IEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKTsKLSAgICAgICAgICAgIG1faml0LnN0b3Jl
UHRyKHJlZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIsIG1fb2Zmc2V0VG9TYXZpbmdBcmVhICsgaSAqIHdvcmRTaXplKSk7CisgICAgICAg
ICAgICBtX2ppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRvU2F2aW5nQXJlYSArIChzdGFja0lu
ZGV4KyspICogd29yZFNpemUpKTsKICAgICAgICAgICAgIG1fdGh1bmtTYXZlU2V0LmNsZWFyKHJl
Zyk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMDMsMTEgKzEwOCwxMiBAQCBwdWJsaWM6CiAg
ICAgICAgIGlmIChtX3JldHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBtX3JldHVyblJlZ2lzdGVyKTsK
ICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKE5VTUJFUl9PRl9B
UkdVTUVOVF9SRUdJU1RFUlMsIG1fbnVtQXJncyk7IGktLTspIHsKLSAgICAgICAgICAgIGlmICgh
bV91c2VkUmVnaXN0ZXJzLmdldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkpKQorICAg
ICAgICB1bnNpZ25lZCBzdGFja0luZGV4ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgICAgIEdQUlJlZyBy
ZWcgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICAgICAgaWYgKCFtX2NhbGxpbmdD
b252ZW50aW9uUmVnaXN0ZXJzLmdldChyZWcpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKTsK
LSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG1fb2Zmc2V0VG9TYXZpbmdBcmVhICsgaSAqIHdv
cmRTaXplKSwgcmVnKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG1fb2Zmc2V0VG9TYXZp
bmdBcmVhICsgKHN0YWNrSW5kZXgrKykgKiB3b3JkU2l6ZSksIHJlZyk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIG1faml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMiht
X3N0YWNrQnl0ZXNOZWVkZWQpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
QEAgLTEzOSw2ICsxNDUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFN0YXRlJiBtX3N0YXRl
OwogICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKKyAgICBSZWdpc3RlclNldCBtX2Nh
bGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzOwogICAgIENDYWxsSGVscGVycyYgbV9qaXQ7CiAgICAg
dW5zaWduZWQgbV9udW1BcmdzOwogICAgIEdQUlJlZyBtX3JldHVyblJlZ2lzdGVyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCShyZXZp
c2lvbiAxNTkwMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCogY2FsbFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbFRhcmdldDsgfQogICAgIHB0cmRp
ZmZfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQogICAgIAorICAgIFNsb3dQ
YXRoQ2FsbEtleSB3aXRoQ2FsbFRhcmdldCh2b2lkKiBjYWxsVGFyZ2V0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleSh1c2VkUmVnaXN0ZXJzKCksIGNhbGxUYXJnZXQsIG9m
ZnNldCgpKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAgICAgCiAgICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAkocmV2aXNpb24gMTU5MDAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NiwxNSArNjYsMTUgQEAgdm9pZCBTdGFja01hcHM6OkxvY2F0aW9uOjpkdW1w
KFByaW50U3RyZQogICAgIG91dC5wcmludCgiKCIsIGtpbmQsICIsIHJlZyIsIGR3YXJmUmVnTnVt
LCAiLCAiLCBvZmZzZXQsICIpIik7CiB9CiAKLUdQUlJlZyBTdGFja01hcHM6OkxvY2F0aW9uOjpk
aXJlY3RHUFIoU3RhY2tNYXBzJiBzdGFja21hcHMpIGNvbnN0CitHUFJSZWcgU3RhY2tNYXBzOjpM
b2NhdGlvbjo6ZGlyZWN0R1BSKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRlRMOjpMb2NhdGlvbjo6
Zm9yU3RhY2ttYXBzKHN0YWNrbWFwcywgKnRoaXMpLmRpcmVjdEdQUigpOworICAgIHJldHVybiBG
VEw6OkxvY2F0aW9uOjpmb3JTdGFja21hcHMoMCwgKnRoaXMpLmRpcmVjdEdQUigpOwogfQogCiB2
b2lkIFN0YWNrTWFwczo6TG9jYXRpb246OnJlc3RvcmVJbnRvKAogICAgIE1hY3JvQXNzZW1ibGVy
JiBqaXQsIFN0YWNrTWFwcyYgc3RhY2ttYXBzLCBjaGFyKiBzYXZlZFJlZ2lzdGVycywgR1BSUmVn
IHJlc3VsdCkgY29uc3QKIHsKLSAgICBGVEw6OkxvY2F0aW9uOjpmb3JTdGFja21hcHMoc3RhY2tt
YXBzLCAqdGhpcykucmVzdG9yZUludG8oaml0LCBzYXZlZFJlZ2lzdGVycywgcmVzdWx0KTsKKyAg
ICBGVEw6OkxvY2F0aW9uOjpmb3JTdGFja21hcHMoJnN0YWNrbWFwcywgKnRoaXMpLnJlc3RvcmVJ
bnRvKGppdCwgc2F2ZWRSZWdpc3RlcnMsIHJlc3VsdCk7CiB9CiAKIGJvb2wgU3RhY2tNYXBzOjpS
ZWNvcmQ6OnBhcnNlKERhdGFWaWV3KiB2aWV3LCB1bnNpZ25lZCYgb2Zmc2V0KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5oCShyZXZpc2lvbiAxNTkwMDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NSw3ICs2NSw3IEBAIHN0cnVjdCBTdGFja01hcHMgewogICAgICAgICB2b2lkIHBhcnNl
KERhdGFWaWV3KiwgdW5zaWduZWQmIG9mZnNldCk7CiAgICAgICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIEdQUlJlZyBkaXJlY3RHUFIoU3Rh
Y2tNYXBzJikgY29uc3Q7CisgICAgICAgIEdQUlJlZyBkaXJlY3RHUFIoKSBjb25zdDsKICAgICAg
ICAgdm9pZCByZXN0b3JlSW50byhNYWNyb0Fzc2VtYmxlciYsIFN0YWNrTWFwcyYsIGNoYXIqIHNh
dmVkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0KSBjb25zdDsKICAgICB9OwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCShyZXZpc2lvbiAxNTkwMDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NCwxOSArNDQsMzggQEAgbmFtZXNwYWNlIEZUTCB7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3Ny
RXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYsIGNvbnN0IExvY2F0aW9uJik7CiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoVk0mLCBjb25zdCBT
bG93UGF0aENhbGxLZXkmKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZSwgdHlwZW5hbWUg
S2V5VHlwZSwgdHlwZW5hbWUgR2VuZXJhdG9yVHlwZT4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5
cGVBcmd1bWVudD4KK3N0cnVjdCBUaHVua01hcCB7CisgICAgdHlwZWRlZiBLZXlUeXBlQXJndW1l
bnQgS2V5VHlwZTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8S2V5VHlwZSwgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPiBUb1RodW5rTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIsIEtleVR5cGU+IEZyb21UaHVua01hcDsKKyAgICAKKyAgICBUb1RodW5rTWFwIG1fdG9U
aHVuazsKKyAgICBGcm9tVGh1bmtNYXAgbV9mcm9tVGh1bms7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBNYXBUeXBlLCB0eXBlbmFtZSBHZW5lcmF0b3JUeXBlPgogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGdlbmVyYXRlSWZOZWNlc3NhcnkoCi0gICAgVk0mIHZtLCBNYXBUeXBlJiBtYXAsIGNvbnN0
IEtleVR5cGUmIGtleSwgR2VuZXJhdG9yVHlwZSBnZW5lcmF0b3IpCisgICAgVk0mIHZtLCBNYXBU
eXBlJiBtYXAsIGNvbnN0IHR5cGVuYW1lIE1hcFR5cGU6OktleVR5cGUmIGtleSwgR2VuZXJhdG9y
VHlwZSBnZW5lcmF0b3IpCiB7Ci0gICAgdHlwZW5hbWUgTWFwVHlwZTo6aXRlcmF0b3IgaXRlciA9
IG1hcC5maW5kKGtleSk7Ci0gICAgaWYgKGl0ZXIgIT0gbWFwLmVuZCgpKQorICAgIHR5cGVuYW1l
IE1hcFR5cGU6OlRvVGh1bmtNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtYXAubV90b1RodW5rLmZpbmQo
a2V5KTsKKyAgICBpZiAoaXRlciAhPSBtYXAubV90b1RodW5rLmVuZCgpKQogICAgICAgICByZXR1
cm4gaXRlci0+dmFsdWU7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJlc3VsdCA9
IGdlbmVyYXRvcih2bSwga2V5KTsKLSAgICBtYXAuYWRkKGtleSwgcmVzdWx0KTsKKyAgICBtYXAu
bV90b1RodW5rLmFkZChrZXksIHJlc3VsdCk7CisgICAgbWFwLm1fZnJvbVRodW5rLmFkZChyZXN1
bHQuY29kZSgpLCBrZXkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIE1hcFR5cGU+Cit0eXBlbmFtZSBNYXBUeXBlOjpLZXlUeXBlIGtleUZvclRodW5rKE1hcFR5
cGUmIG1hcCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHB0cikKK3sKKyAgICB0eXBlbmFtZSBNYXBU
eXBlOjpGcm9tVGh1bmtNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtYXAubV9mcm9tVGh1bmsuZmluZChw
dHIpOworICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gbWFwLm1fZnJvbVRodW5rLmVuZCgpKTsK
KyAgICByZXR1cm4gaXRlci0+dmFsdWU7Cit9CisKIGNsYXNzIFRodW5rcyB7CiBwdWJsaWM6CiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdldE9TUkV4aXRHZW5lcmF0aW9uVGh1bmsoVk0mIHZt
LCBjb25zdCBMb2NhdGlvbiYgbG9jYXRpb24pCkBAIC03MSw5ICs5MCwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICB2bSwgbV9zbG93UGF0aENhbGxUaHVua3MsIGtleSwgc2xvd1BhdGhDYWxsVGh1
bmtHZW5lcmF0b3IpOwogICAgIH0KICAgICAKKyAgICBTbG93UGF0aENhbGxLZXkga2V5Rm9yU2xv
d1BhdGhDYWxsVGh1bmsoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHB0cikKKyAgICB7CisgICAgICAg
IHJldHVybiBrZXlGb3JUaHVuayhtX3Nsb3dQYXRoQ2FsbFRodW5rcywgcHRyKTsKKyAgICB9Cisg
ICAgCiBwcml2YXRlOgotICAgIEhhc2hNYXA8TG9jYXRpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zj4gbV9vc3JFeGl0VGh1bmtzOwotICAgIEhhc2hNYXA8U2xvd1BhdGhDYWxsS2V5LCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY+IG1fc2xvd1BhdGhDYWxsVGh1bmtzOworICAgIFRodW5rTWFwPExvY2F0
aW9uPiBtX29zckV4aXRUaHVua3M7CisgICAgVGh1bmtNYXA8U2xvd1BhdGhDYWxsS2V5PiBtX3Ns
b3dQYXRoQ2FsbFRodW5rczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRlBSSW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvRlBSSW5mby5oCShyZXZpc2lvbiAxNTkwMDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0ZQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyAr
NzMsMTAgQEAgcHVibGljOgogICAgIH0KICAgICBzdGF0aWMgdW5zaWduZWQgdG9JbmRleChGUFJS
ZWcgcmVnKQogICAgIHsKLSAgICAgICAgcmV0dXJuICh1bnNpZ25lZClyZWc7CisgICAgICAgIHVu
c2lnbmVkIHJlc3VsdCA9ICh1bnNpZ25lZClyZWc7CisgICAgICAgIGlmIChyZXN1bHQgPj0gbnVt
YmVyT2ZSZWdpc3RlcnMpCisgICAgICAgICAgICByZXR1cm4gSW52YWxpZEluZGV4OworICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICBzdGF0aWMgRlBSUmVnIHRvQXJndW1l
bnRSZWdpc3Rlcih1bnNpZ25lZCBpbmRleCkKQEAgLTEwMSw2ICsxMDQsOCBAQCBwdWJsaWM6CiAj
ZW5kaWYKICAgICAgICAgcmV0dXJuIG5hbWVGb3JSZWdpc3RlcltyZWddOwogICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSW52YWxpZEluZGV4ID0gMHhmZmZmZmZmZjsKIH07
CiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHJldmlzaW9u
IDE1OTAwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MjEsOSArNDIxLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQocmVnICE9
IEludmFsaWRHUFJSZWcpOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihyZWcpIDwg
MTYpOwogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW5kZXhGb3JSZWdpc3RlclsxNl0g
PSB7IDAsIDIsIDEsIDMsIEludmFsaWRJbmRleCwgSW52YWxpZEluZGV4LCA1LCA0LCA2LCA3LCA4
LCBJbnZhbGlkSW5kZXgsIEludmFsaWRJbmRleCwgOSwgSW52YWxpZEluZGV4LCBJbnZhbGlkSW5k
ZXggfTsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gaW5kZXhGb3JSZWdpc3RlcltyZWddOwot
ICAgICAgICBBU1NFUlQocmVzdWx0ICE9IEludmFsaWRJbmRleCk7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIHJldHVybiBpbmRleEZvclJlZ2lzdGVyW3JlZ107CiAgICAgfQogCiAg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlYnVnTmFtZShHUFJSZWcgcmVnKQpAQCAtNDM4LDcgKzQz
Niw2IEBAIHB1YmxpYzoKICAgICAgICAgfTsKICAgICAgICAgcmV0dXJuIG5hbWVGb3JSZWdpc3Rl
cltyZWddOwogICAgIH0KLXByaXZhdGU6CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgSW52
YWxpZEluZGV4ID0gMHhmZmZmZmZmZjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyU2V0LmNwcAkocmV2aXNpb24gMTU5MDAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDYg
QEAgUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpcwogI2lmIENQVShYODZf
NjQpCiAgICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6OmVieCk7CiAgICAgcmVzdWx0LnNldChY
ODZSZWdpc3RlcnM6OmVicCk7Ci0gICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6OnIxMCk7CiAg
ICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6OnIxMik7CiAgICAgcmVzdWx0LnNldChYODZSZWdp
c3RlcnM6OnIxMyk7CiAgICAgcmVzdWx0LnNldChYODZSZWdpc3RlcnM6OnIxNCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAxNTkwMDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTgxLDYgKzgxLDcgQEAgcHVibGljOgogICAgIGJvb2wgZ2V0KEZQUlJlZyByZWcpIGNvbnN0
IHsgcmV0dXJuIG1fdmVjdG9yLmdldChNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChyZWcp
KTsgfQogICAgIAogICAgIHZvaWQgbWVyZ2UoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1f
dmVjdG9yLm1lcmdlKG90aGVyLm1fdmVjdG9yKTsgfQorICAgIHZvaWQgZmlsdGVyKGNvbnN0IFJl
Z2lzdGVyU2V0JiBvdGhlcikgeyBtX3ZlY3Rvci5maWx0ZXIob3RoZXIubV92ZWN0b3IpOyB9CiAg
ICAgdm9pZCBleGNsdWRlKGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgeyBtX3ZlY3Rvci5leGNs
dWRlKG90aGVyLm1fdmVjdG9yKTsgfQogICAgIAogICAgIHNpemVfdCBudW1iZXJPZlNldFJlZ2lz
dGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmJpdENvdW50KCk7IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTU5MDAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1l
SW5saW5lcy5oIgorI2luY2x1ZGUgIkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIkdDQXdhcmVKSVRT
dHViUm91dGluZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCkBAIC01MiwxMCArNTMsNDQgQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyBnaXZlIHRoZSBG
VEwgY2xvc3VyZSBjYWxsIHBhdGNoaW5nIHN1cHBvcnQgdW50aWwgd2Ugc3dpdGNoIHRvIHRoZSBD
IHN0YWNrIC0gYnV0IHdoZW4gd2UgZG8gdGhhdCwKIC8vIGNhbGxGcmFtZVJlZ2lzdGVyIHdpbGwg
ZGlzYXBwZWFyLgogCitzdGF0aWMgRnVuY3Rpb25QdHIgcmVhZENhbGxUYXJnZXQoUmVwYXRjaEJ1
ZmZlciYgcmVwYXRjaEJ1ZmZlciwgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsKQoreworICAgIEZ1bmN0
aW9uUHRyIHJlc3VsdCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsKTsKKyNp
ZiBFTkFCTEUoRlRMX0pJVCkKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHJlcGF0Y2hCdWZm
ZXIuY29kZUJsb2NrKCk7CisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6
OkZUTEpJVCkgeworICAgICAgICByZXR1cm4gRnVuY3Rpb25QdHIoY29kZUJsb2NrLT52bSgpLT5m
dGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2FsbFRodW5rKAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MoCisgICAgICAgICAgICAg
ICAgcmVzdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCkpKS5jYWxsVGFyZ2V0KCkpOworICAgIH0KKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHJlcGF0Y2hCdWZmZXIpOworI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlcGF0Y2hDYWxs
KFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIENvZGVMb2NhdGlvbkNhbGwgY2FsbCwgRnVu
Y3Rpb25QdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCit7CisjaWYgRU5BQkxFKEZUTF9KSVQpCisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSByZXBhdGNoQnVmZmVyLmNvZGVCbG9jaygpOworICAgIGlm
IChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpIHsKKyAgICAgICAgVk0m
IHZtID0gKmNvZGVCbG9jay0+dm0oKTsKKyAgICAgICAgRlRMOjpUaHVua3MmIHRodW5rcyA9ICp2
bS5mdGxUaHVua3M7CisgICAgICAgIEZUTDo6U2xvd1BhdGhDYWxsS2V5IGtleSA9IHRodW5rcy5r
ZXlGb3JTbG93UGF0aENhbGxUaHVuaygKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxsKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAg
ICAgIGtleSA9IGtleS53aXRoQ2FsbFRhcmdldChuZXdDYWxsZWVGdW5jdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICAgICAgbmV3Q2FsbGVlRnVuY3Rpb24gPSBGdW5jdGlvblB0cigKKyAg
ICAgICAgICAgIHRodW5rcy5nZXRTbG93UGF0aENhbGxUaHVuayh2bSwga2V5KS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uKTsKK30KKwogc3Rh
dGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlYmxvY2ssIENvZGVMb2NhdGlvbkNh
bGwgY2FsbCwgRnVuY3Rpb25QdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCiB7CiAgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVibG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
Y2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24pOworICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIs
IGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uKTsKIH0KIAogc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRT
ZWxmQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IEZ1
bmN0aW9uUHRyICZzbG93UGF0aEZ1bmN0aW9uLCBib29sIGNvbXBhY3QpCkBAIC02Myw3ICs5OCw3
IEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcyhDb2RlQmwKICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKIAogICAgIC8vIE9ubHkgb3B0aW1pemUg
b25jZSEKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIHNsb3dQYXRoRnVuY3Rpb24pOworICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhGdW5jdGlvbik7CiAKICAgICAvLyBQ
YXRjaCB0aGUgc3RydWN0dXJlIGNoZWNrICYgdGhlIG9mZnNldCBvZiB0aGUgbG9hZC4KICAgICBy
ZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJl
bFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2guZGVsdGFDaGVja0ltbVRvQ2Fs
bCksIHN0cnVjdHVyZSk7CkBAIC0zMTQsNyArMzQ5LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVH
ZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNvZGVCbG9jayk7CiAgICAgICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVm
ZmVyLCBzdHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9w
ZXJhdGlvbkdldEJ5SWQpOworICAgICAgICByZXBhdGNoQ2FsbChyZXBhdGNoQnVmZmVyLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwogICAgICAgICAKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzYyLDcgKzM5Nyw3IEBAIHN0YXRpYyBib29s
IHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJl
cGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKICAgICByZXBsYWNlV2l0aEp1bXAocmVwYXRjaEJ1ZmZl
ciwgc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKLSAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlv
bkdldEJ5SWRCdWlsZExpc3QpOworICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7CiAgICAg
CiAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCB0cnVlKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTEwMDAsNyArMTAzNSw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlUHV0
QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uanVtcEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwKICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgICAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0
ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgICAgICAg
ICByZXBhdGNoQ2FsbChyZXBhdGNoQnVmZmVyLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9u
KCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1
cmUsIHByb3RvdHlwZUNoYWluLCBwdXRLaW5kID09IERpcmVjdCk7CiAgICAgICAgICAgICAKQEAg
LTExMDUsNyArMTE0MCw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0
YXQKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwg
Q29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKLSAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0
QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hDYWxsKHJl
cGF0Y2hCdWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5l
cmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KQEAgLTEzODAsNyArMTQxNSw3IEBAIHZvaWQgbGlua0Nsb3N1cmVD
YWxsKEV4ZWNTdGF0ZSogZXhlYywgQ2EKIAogdm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZl
ciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewotICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplKTsKKyAgICByZXBhdGNoQ2FsbChyZXBhdGNoQnVmZmVyLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSk7CiAgICAgQ29k
ZUxvY2F0aW9uRGF0YUxhYmVsUHRyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDaGVja0ltbVRvQ2FsbCk7CiAgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1wUmVw
bGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7CiAgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCkBA
IC0xNDAyLDcgKzE0MzcsNyBAQCB2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBh
dGNoCiAKIHZvaWQgcmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKLSAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJ
IHVub3B0aW1pemVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRpb25fRVNzaUpK
ST4oTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSB1
bm9wdGltaXplZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PFZfSklUT3BlcmF0aW9uX0VTc2lKSkk+
KHJlYWRDYWxsVGFyZ2V0KHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBvcHRp
bWl6ZWRGdW5jdGlvbjsKICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25Q
dXRCeUlkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0
cmljdEJ1aWxkTGlzdCkKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0T3B0aW1pemU7CkBAIC0xNDE0LDcgKzE0NDksNyBAQCB2b2lkIHJlc2V0UHV0QnlJ
RChSZXBhdGNoQnVmZmVyJiByZXBhdGNoCiAgICAgICAgIEFTU0VSVCh1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KTsKICAgICAg
ICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0
aW1pemU7CiAgICAgfQotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVuY3Rpb24pOworICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hC
dWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3B0aW1pemVkRnVuY3Rpb24pOwog
ICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOwogICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2Fu
SnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSkgewogICAgICAgICByZXBh
dGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBh
dGNoKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oCShyZXZpc2lvbiAxNTkwMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw5ICs0NCwyMSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9kaWRSZXVzZVJlZ2lzdGVycyhmYWxz
ZSkKICAgICB7CiAgICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9p
ZCBsb2NrKFQgcmVnKSB7IG1fbG9ja2VkUmVnaXN0ZXJzLnNldChyZWcpOyB9CisKKyAgICB2b2lk
IGxvY2soR1BSUmVnIHJlZykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gR1BSSW5m
bzo6dG9JbmRleChyZWcpOworICAgICAgICBpZiAoaW5kZXggPT0gR1BSSW5mbzo6SW52YWxpZElu
ZGV4KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2xvY2tlZFJlZ2lzdGVycy5zZXRH
UFJCeUluZGV4KGluZGV4KTsKKyAgICB9CisgICAgdm9pZCBsb2NrKEZQUlJlZyByZWcpCisgICAg
eworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IEZQUkluZm86OnRvSW5kZXgocmVnKTsKKyAgICAg
ICAgaWYgKGluZGV4ID09IEZQUkluZm86OkludmFsaWRJbmRleCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0RlBSQnlJbmRleChpbmRleCk7CisgICAg
fQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhbmtJbmZvPgogICAgIHR5cGVuYW1lIEJh
bmtJbmZvOjpSZWdpc3RlclR5cGUgYWxsb2NhdGVTY3JhdGNoKCkKSW5kZXg6IFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
NTkwMDMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE4IEBACisyMDEzLTExLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgU3dpdGNoIEZUTCBHZXRCeUlkL1B1dEJ5SWQgSUMncyBvdmVyIHRvIHVzaW5nIEFueVJl
Z0NDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQw
OTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIEkgbmVlZGVkIHRvIGFkZCBhbm90aGVyIHNldCBvcGVyYXRpb24sIG5hbWVseSBmaWx0ZXIo
KSwgd2hpY2ggaXMgYW4gaW4tcGxhY2Ugc2V0CisgICAgICAgIGludGVyc2VjdGlvbi4KKworICAg
ICAgICAqIHd0Zi9CaXRWZWN0b3IuY3BwOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmZpbHRl
clNsb3cpOgorICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6Qml0VmVj
dG9yOjpmaWx0ZXIpOgorCiAyMDEzLTExLTA5ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3
ZWJraXQub3JnPgogCiAgICAgICAgIE1vdmUgUnVuTG9vcCBmcm9tIFdlYkNvcmUgdG8gV1RGCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0JpdFZlY3Rvci5jcHAJKHJldmlzaW9uIDE1OTAwMykKKysrIFNvdXJjZS9XVEYvd3Rm
L0JpdFZlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsMzEgQEAgdm9pZCBC
aXRWZWN0b3I6Om1lcmdlU2xvdyhjb25zdCBCaXRWZWN0bwogICAgICAgICBhLT5iaXRzKClbaV0g
fD0gYi0+Yml0cygpW2ldOwogfQogCit2b2lkIEJpdFZlY3Rvcjo6ZmlsdGVyU2xvdyhjb25zdCBC
aXRWZWN0b3ImIG90aGVyKQoreworICAgIGlmIChvdGhlci5pc0lubGluZSgpKSB7CisgICAgICAg
IEFTU0VSVCghaXNJbmxpbmUoKSk7CisgICAgICAgICpiaXRzKCkgJj0gY2xlYW5zZUlubGluZUJp
dHMob3RoZXIubV9iaXRzT3JQb2ludGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBpZiAoaXNJbmxpbmUoKSkgeworICAgICAgICBBU1NFUlQoIW90aGVyLmlzSW5saW5lKCkp
OworICAgICAgICBtX2JpdHNPclBvaW50ZXIgJj0gKm90aGVyLm91dE9mTGluZUJpdHMoKS0+Yml0
cygpOworICAgICAgICBtX2JpdHNPclBvaW50ZXIgfD0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
MSkgPDwgbWF4SW5saW5lQml0cygpKTsKKyAgICAgICAgQVNTRVJUKGlzSW5saW5lKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIE91dE9mTGluZUJpdHMqIGEgPSBvdXRPZkxp
bmVCaXRzKCk7CisgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogYiA9IG90aGVyLm91dE9mTGluZUJp
dHMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihhLT5udW1Xb3JkcygpLCBiLT5u
dW1Xb3JkcygpKTsgaS0tOykKKyAgICAgICAgYS0+Yml0cygpW2ldICY9IGItPmJpdHMoKVtpXTsK
KyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBiLT5udW1Xb3JkcygpOyBpIDwgYS0+bnVtV29y
ZHMoKTsgKytpKQorICAgICAgICBhLT5iaXRzKClbaV0gPSAwOworfQorCiB2b2lkIEJpdFZlY3Rv
cjo6ZXhjbHVkZVNsb3coY29uc3QgQml0VmVjdG9yJiBvdGhlcikKIHsKICAgICBpZiAob3RoZXIu
aXNJbmxpbmUoKSkgewpJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDE1OTAwMykKKysrIFNv
dXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNiArMTgxLDE2
IEBAIHB1YmxpYzogCiAgICAgICAgIEFTU0VSVChpc0lubGluZSgpKTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBmaWx0ZXIoY29uc3QgQml0VmVjdG9yJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlm
ICghaXNJbmxpbmUoKSB8fCAhb3RoZXIuaXNJbmxpbmUoKSkgeworICAgICAgICAgICAgZmlsdGVy
U2xvdyhvdGhlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9i
aXRzT3JQb2ludGVyICY9IG90aGVyLm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgQVNTRVJUKGlz
SW5saW5lKCkpOworICAgIH0KKyAgICAKICAgICB2b2lkIGV4Y2x1ZGUoY29uc3QgQml0VmVjdG9y
JiBvdGhlcikKICAgICB7CiAgICAgICAgIGlmICghaXNJbmxpbmUoKSB8fCAhb3RoZXIuaXNJbmxp
bmUoKSkgewpAQCAtMzAyLDYgKzMxMiw3IEBAIHByaXZhdGU6CiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgc2V0U2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKTsKICAgICAKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZVNsb3coY29uc3QgQml0VmVjdG9yJiBvdGhlcik7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsdGVyU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90
aGVyKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBleGNsdWRlU2xvdyhjb25zdCBCaXRW
ZWN0b3ImIG90aGVyKTsKICAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGJpdENv
dW50U2xvdygpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216502</attachid>
            <date>2013-11-09 17:38:32 -0800</date>
            <delta_ts>2013-11-10 07:22:57 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>43105</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5MDAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyOSBA
QAorMjAxMy0xMS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFN3aXRjaCBGVEwgR2V0QnlJZC9QdXRCeUlkIElDJ3Mgb3ZlciB0byB1c2luZyBBbnlSZWdDQwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0MDk0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBU
aGlzIGNsb3NlcyB0aGUgbG9vcCBvbiBpbmxpbmUgY2FjaGVzIChJQydzKSBpbiB0aGUgRlRMLiBU
aGUgZ29hbCBpcyB0byBoYXZlIElDJ3MKKyAgICAgICAgaW4gTExWTS1nZW5lcmF0ZWQgY29kZSB0
aGF0IGFyZSBqdXN0IGFzIGVmZmljaWVudCAoaWYgbm90IG1vcmUgc28pIHRoYW4gd2hhdCBhCisg
ICAgICAgIGN1c3RvbSBKSVQgY291bGQgZG8uIEFzIGluIHplcm8gc291cmNlcyBvZiBvdmVyaGVh
ZC4gTm90IGEgc2luZ2xlIGV4dHJhIGluc3RydWN0aW9uCisgICAgICAgIG9yIGV2ZW4gcmVnaXN0
ZXIgYWxsb2NhdGlvbiBwYXRob2xvZ3kuIFdlIGFjY29tcGxpc2ggdGhpcyBieSBoYXZpbmcgdHdv
IHRoaW5naWVzIGluCisgICAgICAgIExMVk0uIEZpcnN0IGlzIHRoZSBsbHZtLmV4cGVyaW1lbnRh
bC5wYXRjaHBvaW50IGludHJpbnNpYywgd2hpY2ggaXMgc29ydCBvZiBhbgorICAgICAgICBpbmxp
bmUgbWFjaGluZSBjb2RlIHNuaXBwZXQgdGhhdCB3ZSBjYW4gZmlsbCBpbiB3aXRoIHdoYXRldmVy
IHdlIHdhbnQgYW5kIHRoZW4KKyAgICAgICAgbW9kaWZ5IHN1YnNlcXVlbnRseS4gQnV0IHlvdSBo
YXZlIG9ubHkgdHdvIGNob2ljZXMgb2YgaG93IHRvIHBhc3MgdmFsdWVzIHRvIGEKKyAgICAgICAg
cGF0Y2hwb2ludDogKDEpIHZpYSB0aGUgY2FsbGluZyBjb252ZW50aW9uIG9yICgyKSB2aWEgdGhl
IHN0YWNrbWFwLiBOZWl0aGVyIGFyZSBnb29kCisgICAgICAgIGZvciBvcGVyYW5kcyB0byBhbiBJ
QyAobGlrZSB0aGUgYmFzZSBwb2ludGVyIGZvciBhIEdldEJ5SWQsIGZvciBleGFtcGxlKS4gKDEp
IGlzIGJhZAorICAgICAgICBiZWNhdXNlIGl0IHJlc3VsdHMgaW4gdGhpbmdzIGJlaW5nIHBpbm5l
ZCB0byBjZXJ0YWluIHJlZ2lzdGVycyBhIHByaW9yaTsgYSBjdXN0b20KKyAgICAgICAgSklUIChs
aWtlIHRoZSBERkcpIHdpbGwgbm90IHBpbiBJQyBvcGVyYW5kcyB0byBhbnkgcmVnaXN0ZXJzIGEg
cHJpb3JpIGJ1dCB3aWxsIGFsbG93CisgICAgICAgIHRoZSByZWdpc3RlciBhbGxvY2F0b3IgdG8g
ZG8gd2hhdGV2ZXIgaXQgd2FudHMuICgyKSBpcyBiYWQgYmVjYXVzZSB0aGUgb3BlcmFuZHMgbWF5
CisgICAgICAgIGJlIHNwaWxsZWQgb3IgbWF5IGJlIHJlcHJlc2VudGVkIGluIG90aGVyIGNyYXp5
IHdheXMuIFlvdSBnZW5lcmFsbHkgd2FudCBhbiBJQyB0bworICAgICAgICBoYXZlIGl0cyBvcGVy
YW5kcyBpbiByZWdpc3RlcnMuIEFsc28sIHBhdGNocG9pbnRzIG9ubHkgcmV0dXJuIHZhbHVlcyB1
c2luZyB0aGUKKyAgICAgICAgY2FsbGluZyBjb252ZW50aW9uLCB3aGljaCBpcyB1bmZvcnR1bmF0
ZSBzaW5jZSBpdCBwaW5zIHRoZSByZXR1cm4gdmFsdWUgdG8gYQorICAgICAgICByZWdpc3RlciBh
IHByaW9yaS4gVGhpcyBpcyB3aGVyZSB0aGUgc2Vjb25kIHRoaW5neSBjb21lcyBpbjogdGhlIEFu
eVJlZ0NDLiBUaGlzIGlzCisgICAgICAgIGEgc3BlY2lhbCBjYWxsaW5nIGNvbnZlbnRpb24gb25s
eSBmb3IgdXNlIHdpdGggcGF0Y2hwb2ludHMuIEl0IG1lYW5zIHRoYXQgYXJndW1lbnRzCisgICAg
ICAgIHBhc3NlZCAiYnkgQ0MiIGluIHRoZSBwYXRjaHBvaW50IGNhbiBiZSBwbGFjZWQgaW4gYW55
IHJlZ2lzdGVyLCBhbmQgdGhlIHJlZ2lzdGVyCisgICAgICAgIHRoYXQgZ2V0cyB1c2VkIGlzIHJl
cG9ydGVkIGFzIHBhcnQgb2YgdGhlIHN0YWNrbWFwLiBJdCBhbHNvIG1lYW5zIHRoYXQgdGhlIHJl
dHVybgorICAgICAgICB2YWx1ZSAoaWYgdGhlcmUgaXMgb25lKSBjYW4gYmUgcGxhY2VkIGluIGFu
eSByZWdpc3RlciwgYW5kIHRoZSBzdGFja21hcCB3aWxsIHRlbGwKKyAgICAgICAgeW91IHdoaWNo
IG9uZSBpdCB3YXMuIFRodXMsIHBhdGNocG9pbnRzIGNvbWJpbmVkIHdpdGggQW55UmVnQ0MgbWVh
biB0aGF0IHlvdSBub3QKKyAgICAgICAgb25seSBnZXQgdGhlIGtpbmQgb2Ygc2VsZi1tb2RpZnlp
bmcgY29kZSB0aGF0IHlvdSB3YW50IGZvciBJQydzLCBidXQgeW91IGFsc28gZ2V0CisgICAgICAg
IGFsbCBvZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdGlvbiBnb29kbmVzcyB0aGF0IGEgY3VzdG9tIEpJ
VCB3b3VsZCBoYXZlIGdpdmVuIHlvdS4KKyAgICAgICAgRXhjZXB0IHRoYXQgeW91J3JlIGdldHRp
bmcgaXQgZnJvbSBMTFZNIGFuZCBub3QgYSBjdXN0b20gSklULiBBd2Vzb21lLgorICAgICAgICAK
KyAgICAgICAgRXZlbiB0aG91Z2ggYWxsIG9mIHRoZSBmdW4gc3R1ZmYgaXMgb24gdGhlIExMVk0g
c2lkZSwgdGhpcyBwYXRjaCB3YXMgaGFyZGVyIHRoYW4KKyAgICAgICAgeW91J2QgZXhwZWN0Lgor
ICAgICAgICAKKyAgICAgICAgRmlyc3QgdGhlIG9idmlvdXMgYml0czoKKyAgICAgICAgCisgICAg
ICAgIC0gSUMgcGF0Y2hwb2ludHMgbm93IHVzZSBBbnlSZWdDQyBpbnN0ZWFkIG9mIHRoZSBDIEND
LiAoQ0MgPSBjYWxsaW5nIGNvbnZlbnRpb24uKQorICAgICAgICAKKyAgICAgICAgLSBGVEw6OmZp
eEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygpIG5vdyBjb3JyZWN0bHkgZmlndXJlcyBvdXQgd2hp
Y2ggcmVnaXN0ZXJzIHRoZQorICAgICAgICAgIElDIGlzIHN1cHBvc2VkIHRvIHVzZSBpbnN0ZWFk
IG9mIGFzc3VtaW5nIEMgQ0MgYXJndW1lbnQgcmVnaXN0ZXJzLgorICAgICAgICAKKyAgICAgICAg
QW5kIHRoZW4gYWxsIG9mIHRoZSBzdHVmZiB0aGF0IGJyb2tlIGFuZCB0aGF0IHRoaXMgcGF0Y2gg
Zml4ZXM6CisgICAgICAgIAorICAgICAgICAtIElDIHNpemluZyBiYXNlZCBvbiBnZW5lcmF0aW5n
IGEgZHVtbXkgSUMgKHdoYXQgRlRMSW5saW5lQ2FjaGVTaXplIGRpZCkgaXMgdG90YWxseQorICAg
ICAgICAgIGJhZCBvbiB4ODYtNjQsIHdoZXJlIHZhcmlvdXMgcmVnaXN0ZXIgcGVybXV0YXRpb25z
IGxlYWQgdG8gYml6YXJyZSBoZWFkZXIgYnl0ZXMKKyAgICAgICAgICBhbmQgZWNsZWN0aWMgU0lC
IGVuY29kaW5ncy4gSSBjaGFuZ2VkIHRoYXQgdG8gaGF2ZSBtYWdpYyBjb25zdGFudHMsIGZvciBu
b3cuCisgICAgICAgIAorICAgICAgICAtIFNsb3cgcGF0aCBjYWxscyBkaWRuJ3QgcHJlc2VydmUg
dGhlIENDIHJldHVybiByZWdpc3Rlci4KKyAgICAgICAgCisgICAgICAgIC0gUmVwYXRjaCdzIHNj
cmF0Y2ggcmVnaXN0ZXIgYWxsb2NhdGlvbiB3b3VsZCBnZXQgdG90YWxseSBjb25mdXNlZCBpZiB0
aGUgb3BlcmFuZAorICAgICAgICAgIHJlZ2lzdGVycyB3ZXJlbid0IG9uZSBvZiB0aGUgREZHLXN0
eWxlICJ0ZW1wIiByZWdpc3RlcnMuIEFuZCBieSAidG90YWxseSBjb25mdXNlZCIKKyAgICAgICAg
ICBJIG1lYW4gdGhhdCBpdCB3b3VsZCBjcmFzaC4KKyAgICAgICAgCisgICAgICAgIC0gV2UgYXNz
dW1lZCB0aGF0IHIxMCBpcyBjYWxsZWUtc2F2ZWQuIEl0J3Mgbm90LiBUaGF0IG9uZSBkdWRlJ3Mg
UFBUIGFib3V0IHg4Ni02NAorICAgICAgICAgIGNkZWNsIHRoYXQgSSBmb3VuZCBvbiB0aGUgaW50
ZXJ0dWJlcyB3YXMgbm90IGEgdHJ1c3R3b3J0aHkgc291cmNlIG9mIGluZm9ybWF0aW9uLAorICAg
ICAgICAgIGFwcGFyZW50bHkuCisgICAgICAgIAorICAgICAgICAtIENhbGwgcmVwYXRjaGluZyBk
aWRuJ3Qga25vdyB0aGF0IHRoZSBGVEwgZG9lcyBpdHMgSUMgc2xvdyBjYWxscyB2aWEgc3BlY2lh
bGx5CisgICAgICAgICAgZ2VuZXJhdGVkIHRodW5rcy4gVGhpcyB3YXMgcGFydGljdWxhcmx5IGZ1
biB0byBmaXg6IGJhc2ljYWxseSwgbm93IHdoZW4gd2UgcmVsaW5rCisgICAgICAgICAgYW4gSUMg
Y2FsbCBpbiB0aGUgRlRMLCB3ZSB1c2UgdGhlIG9sZCBjYWxsIHRhcmdldCB0byBmaW5kIHRoZSBT
bG93UGF0aENhbGxLZXksCisgICAgICAgICAgd2hpY2ggdGVsbHMgdXMgZXZlcnl0aGluZyB3ZSBu
ZWVkIHRvIGtub3cgdG8gZ2VuZXJhdGUgKG9yIGxvb2sgdXApIGEgbmV3IHRodW5rIGZvcgorICAg
ICAgICAgIHRoZSBuZXcgZnVuY3Rpb24gd2Ugd2FudCB0byBjYWxsLgorICAgICAgICAKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjppc0VtcHR5VmFsdWUpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckNvZGVQdHI6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJDb2RlUHRyOjpoYXNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJD
b2RlUHRyOjplbXB0eVZhbHVlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRy
OjpkZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHJIYXNo
OjpoYXNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUHRySGFzaDo6ZXF1YWwp
OgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAg
ICAqIGFzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmg6CisgICAgICAgIChKU0M6OlJlcGF0Y2hCdWZm
ZXI6OlJlcGF0Y2hCdWZmZXIpOgorICAgICAgICAoSlNDOjpSZXBhdGNoQnVmZmVyOjpjb2RlQmxv
Y2spOgorICAgICAgICAqIGZ0bC9GVExBYmJyZXZpYXRpb25zLmg6CisgICAgICAgIChKU0M6OkZU
TDo6c2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbik6CisgICAgICAgICogZnRsL0ZUTENv
bXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFw
cyk6CisgICAgICAgICogZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6c2l6ZU9mR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mUHV0QnlJZCk6
CisgICAgICAgICogZnRsL0ZUTEpJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMTG9jYXRp
b24uY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkxvY2F0aW9uOjpmb3JTdGFja21hcHMpOgorICAg
ICAgICAqIGZ0bC9GVExMb2NhdGlvbi5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExW
TS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVHZXRCeUlk
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVB1dEJ5SWQpOgor
ICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OmNvbXBpbGVTdHViKToKKyAgICAgICAgKiBmdGwvRlRMU2xvd1BhdGhDYWxsLmNwcDoKKyAgICAg
ICAgKiBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5Lmg6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1Bh
dGhDYWxsS2V5Ojp3aXRoQ2FsbFRhcmdldCk6CisgICAgICAgICogZnRsL0ZUTFN0YWNrTWFwcy5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6U3RhY2tNYXBzOjpMb2NhdGlvbjo6ZGlyZWN0R1BSKToK
KyAgICAgICAgKEpTQzo6RlRMOjpTdGFja01hcHM6OkxvY2F0aW9uOjpyZXN0b3JlSW50byk6Cisg
ICAgICAgICogZnRsL0ZUTFN0YWNrTWFwcy5oOgorICAgICAgICAqIGZ0bC9GVExUaHVua3MuaDoK
KyAgICAgICAgKEpTQzo6RlRMOjpnZW5lcmF0ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6
RlRMOjprZXlGb3JUaHVuayk6CisgICAgICAgIChKU0M6OkZUTDo6VGh1bmtzOjprZXlGb3JTbG93
UGF0aENhbGxUaHVuayk6CisgICAgICAgICogaml0L0ZQUkluZm8uaDoKKyAgICAgICAgKEpTQzo6
RlBSSW5mbzo6dG9JbmRleCk6CisgICAgICAgICogaml0L0dQUkluZm8uaDoKKyAgICAgICAgKEpT
Qzo6R1BSSW5mbzo6dG9JbmRleCk6CisgICAgICAgIChKU0M6OkdQUkluZm86OmRlYnVnTmFtZSk6
CisgICAgICAgICogaml0L1JlZ2lzdGVyU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJT
ZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5oOgor
ICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6ZmlsdGVyKToKKyAgICAgICAgKiBqaXQvUmVwYXRj
aC5jcHA6CisgICAgICAgIChKU0M6OnJlYWRDYWxsVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6cmVw
YXRjaENhbGwpOgorICAgICAgICAoSlNDOjpyZXBhdGNoQnlJZFNlbGZBY2Nlc3MpOgorICAgICAg
ICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQp
OgorICAgICAgICAoSlNDOjp0cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAgICAgICAgKEpTQzo6cmVz
ZXRHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlEKToKKyAgICAgICAgKiBqaXQv
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6OlNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcjo6bG9jayk6CisKIDIwMTMtMTEtMDggIFphbiBEb2JlcnNlayAgPHpkb2JlcnNl
a0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgR1RLIGJ1aWxkIGZpeC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaAkocmV2aXNpb24gMTU5MDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzM0
LDExICszMzQsNDEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgZHVtcFdpdGhOYW1lKCJDb2Rl
UHRyIiwgb3V0KTsKICAgICB9CisgICAgCisgICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlW
YWx1ZSB9OworICAgIGVudW0gRGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07CisgICAg
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKEVtcHR5VmFsdWVUYWcpCisgICAgICAgIDogbV92
YWx1ZShlbXB0eVZhbHVlKCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIoRGVsZXRlZFZhbHVlVGFnKQorICAgICAgICA6IG1fdmFsdWUoZGVsZXRlZFZhbHVl
KCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUgPT0gZW1wdHlWYWx1ZSgpOyB9CisgICAgYm9vbCBpc0RlbGV0ZWRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0gZGVsZXRlZFZhbHVlKCk7IH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gUHRySGFzaDx2b2lkKj46Omhhc2gobV92
YWx1ZSk7IH0KIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCogZW1wdHlWYWx1ZSgpIHsgcmV0
dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDEpKTsgfQorICAg
IHN0YXRpYyB2b2lkKiBkZWxldGVkVmFsdWUoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KHN0YXRpY19jYXN0PGludHB0cl90PigyKSk7IH0KKyAgICAKICAgICB2b2lkKiBtX3ZhbHVlOwog
fTsKIAorc3RydWN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ckhhc2ggeworICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgcHRyKSB7IHJldHVybiBwdHIu
aGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyJiBhLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGIpCisgICAgeworICAgICAgICBy
ZXR1cm4gYSA9PSBiOworICAgIH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCiAvLyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
CiAvLwogLy8gQSByZWZlcmVuY2UgdG8gYSBzZWN0aW9uIG9mIEpJVCBnZW5lcmF0ZWQgY29kZS4g
IEEgQ29kZVJlZiBjb25zaXN0cyBvZiBhCkBAIC00MjAsNCArNDUwLDE2IEBAIHByaXZhdGU6CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8
SlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHI+IHsKKyAgICB0eXBlZGVmIEpTQzo6TWFjcm9Bc3Nl
bWJsZXJDb2RlUHRySGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6TWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPiA6IHB1YmxpYyBDdXN0b21IYXNoVHJhaXRzPEpTQzo6TWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDE1OTAw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDEyIEBACiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgTWFjcm9Bc3NlbWJsZXJYODZDb21tb24gOiBwdWJsaWMgQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlcjxYODZBc3NlbWJsZXI+IHsKLXByb3RlY3RlZDoKK3B1YmxpYzoKICNpZiBDUFUo
WDg2XzY0KQogICAgIHN0YXRpYyBjb25zdCBYODZSZWdpc3RlcnM6OlJlZ2lzdGVySUQgc2NyYXRj
aFJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjpyMTE7CiAjZW5kaWYKIAorcHJvdGVjdGVkOgogICAg
IHN0YXRpYyBjb25zdCBpbnQgRG91YmxlQ29uZGl0aW9uQml0SW52ZXJ0ID0gMHgxMDsKICAgICBz
dGF0aWMgY29uc3QgaW50IERvdWJsZUNvbmRpdGlvbkJpdFNwZWNpYWwgPSAweDIwOwogICAgIHN0
YXRpYyBjb25zdCBpbnQgRG91YmxlQ29uZGl0aW9uQml0cyA9IERvdWJsZUNvbmRpdGlvbkJpdElu
dmVydCB8IERvdWJsZUNvbmRpdGlvbkJpdFNwZWNpYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaAkocmV2aXNpb24gMTU5MDAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgY2xhc3MgUmVwYXRjaEJ1ZmZlciB7CiAKIHB1Ymxp
YzoKICAgICBSZXBhdGNoQnVmZmVyKENvZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICA6IG1f
Y29kZUJsb2NrKGNvZGVCbG9jaykKICAgICB7CiAjaWYgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENM
VVNJVkUpCiAgICAgICAgIFJlZlB0cjxKSVRDb2RlPiBjb2RlID0gY29kZUJsb2NrLT5qaXRDb2Rl
KCk7CkBAIC01Miw4ICs1Myw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9zaXplID0gY29kZS0+c2l6
ZSgpOwogCiAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1ha2VXcml0YWJsZShtX3N0YXJ0
LCBtX3NpemUpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CiAjZW5k
aWYKICAgICB9CiAKQEAgLTYzLDYgKzYyLDggQEAgcHVibGljOgogICAgICAgICBFeGVjdXRhYmxl
QWxsb2NhdG9yOjptYWtlRXhlY3V0YWJsZShtX3N0YXJ0LCBtX3NpemUpOwogI2VuZGlmCiAgICAg
fQorICAgIAorICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
QmxvY2s7IH0KIAogICAgIHZvaWQgcmVsaW5rKENvZGVMb2NhdGlvbkp1bXAganVtcCwgQ29kZUxv
Y2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCiAgICAgewpAQCAtMTc2LDYgKzE3Nyw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICNpZiBF
TkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKICAgICB2b2lkKiBtX3N0YXJ0OwogICAgIHNp
emVfdCBtX3NpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlh
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJl
dmlhdGlvbnMuaAkocmV2aXNpb24gMTU5MDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYmJyZXZpYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2OSw2ICsyNjksNyBAQCBz
dGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgCiAgICAgTFZhbHVlIGFyZ3Nb
XSA9IHsgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNywgYXJnOCB9Owog
ICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDgpOwogfQorc3Rh
dGljIGlubGluZSB2b2lkIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oTFZhbHVlIGlu
c3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsaW5nQ29udmVudGlvbikgeyBsbHZtLT5TZXRJbnN0cnVj
dGlvbkNhbGxDb252KGluc3RydWN0aW9uLCBjYWxsaW5nQ29udmVudGlvbik7IH0KIHN0YXRpYyBp
bmxpbmUgTFZhbHVlIGJ1aWxkRXh0cmFjdFZhbHVlKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBh
Z2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBsbHZtLT5CdWlsZEV4dHJhY3RWYWx1ZShi
dWlsZGVyLCBhZ2dWYWwsIGluZGV4LCAiIik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxk
U2VsZWN0KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBjb25kaXRpb24sIExWYWx1ZSB0YWtlbiwg
TFZhbHVlIG5vdFRha2VuKSB7IHJldHVybiBsbHZtLT5CdWlsZFNlbGVjdChidWlsZGVyLCBjb25k
aXRpb24sIHRha2VuLCBub3RUYWtlbiwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWls
ZEJyKExCdWlsZGVyIGJ1aWxkZXIsIExCYXNpY0Jsb2NrIGRlc3RpbmF0aW9uKSB7IHJldHVybiBs
bHZtLT5CdWlsZEJyKGJ1aWxkZXIsIGRlc3RpbmF0aW9uKTsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAxNTkwMDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgs
MTQgKzE4OCwxMiBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVy
LT52YWx1ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHJlY29yZCk7
IC8vIEZJWE1FOiB1c2UgQW55UmVncy4KLQogICAgICAgICAgICAgLy8gRklYTUU6IExMVk0gc2hv
dWxkIHRlbGwgdXMgd2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLgogICAgICAgICAgICAgUmVnaXN0
ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGNhbGxGcmFtZVJlZ2lzdGVyID0gR1BSSW5mbzo6
YXJndW1lbnRHUFIwOwotICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSBHUFJJbmZvOjphcmd1bWVu
dEdQUjE7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFI7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVjb3JkLmxvY2F0aW9uc1swXS5kaXJl
Y3RHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBjYWxsRnJhbWVSZWdpc3RlciA9IHJlY29yZC5s
b2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7CisgICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlY29y
ZC5sb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgZ2V0QnlJ
ZC5jb2RlT3JpZ2luKCksIHVzZWRSZWdpc3RlcnMsIGNhbGxGcmFtZVJlZ2lzdGVyLApAQCAtMjI0
LDE5ICsyMjIsMTcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRl
ci0+dmFsdWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFVOVVNFRF9QQVJBTShyZWNvcmQp
OyAvLyBGSVhNRTogdXNlIEFueVJlZ3MuCi0KICAgICAgICAgICAgIC8vIEZJWE1FOiBMTFZNIHNo
b3VsZCB0ZWxsIHVzIHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4KICAgICAgICAgICAgIFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBjYWxsRnJhbWVSZWdpc3RlciA9IEdQUkluZm86
OmFyZ3VtZW50R1BSMDsKLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gR1BSSW5mbzo6YXJndW1l
bnRHUFIxOwotICAgICAgICAgICAgR1BSUmVnIHZhbHVlID0gR1BSSW5mbzo6YXJndW1lbnRHUFIy
OworICAgICAgICAgICAgR1BSUmVnIGNhbGxGcmFtZVJlZ2lzdGVyID0gcmVjb3JkLmxvY2F0aW9u
c1swXS5kaXJlY3RHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVjb3JkLmxvY2F0
aW9uc1sxXS5kaXJlY3RHUFIoKTsKKyAgICAgICAgICAgIEdQUlJlZyB2YWx1ZSA9IHJlY29yZC5s
b2NhdGlvbnNbMl0uZGlyZWN0R1BSKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEpJVFB1
dEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgcHV0QnlJZC5j
b2RlT3JpZ2luKCksIHVzZWRSZWdpc3RlcnMsIGNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAg
ICAgICAgIEpTVmFsdWVSZWdzKGJhc2UpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIEdQUkluZm86OmFy
Z3VtZW50R1BSMywgZmFsc2UsCi0gICAgICAgICAgICAgICAgcHV0QnlJZC5lY21hTW9kZSgpLCBw
dXRCeUlkLnB1dEtpbmQoKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZSksIEpT
VmFsdWVSZWdzKHZhbHVlKSwgTWFjcm9Bc3NlbWJsZXI6OnNjcmF0Y2hSZWdpc3RlciwKKyAgICAg
ICAgICAgICAgICBmYWxzZSwgcHV0QnlJZC5lY21hTW9kZSgpLCBwdXRCeUlkLnB1dEtpbmQoKSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBiZWdpbiA9
IHNsb3dQYXRoSklULmxhYmVsKCk7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHJldmlzaW9uIDE1OTAw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsMzggKzMzLDE4IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIAotc3RhdGljIHNpemVfdCBzX3NpemVPZkdldEJ5SWQ7Ci1zdGF0aWMgc2l6
ZV90IHNfc2l6ZU9mUHV0QnlJZDsKKy8vIFRoZXNlIHNpemVzIGFyZSB4ODYtNjQtc3BlY2lmaWMs
IGFuZCB3ZXJlIGZvdW5kIGVtcGlyaWNhbGx5LiBUaGV5IGhhdmUgdG8gY292ZXIgdGhlIHdvcnN0
CisvLyBwb3NzaWJsZSBjb21iaW5hdGlvbiBvZiByZWdpc3RlcnMgbGVhZGluZyB0byB0aGUgbGFy
Z2VzdCBwb3NzaWJsZSBlbmNvZGluZyBvZiBlYWNoCisvLyBpbnN0cnVjdGlvbiBpbiB0aGUgSUMu
CiAKIHNpemVfdCBzaXplT2ZHZXRCeUlkKCkKIHsKLSAgICBpZiAoc19zaXplT2ZHZXRCeUlkKQot
ICAgICAgICByZXR1cm4gc19zaXplT2ZHZXRCeUlkOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVy
IGppdDsKLSAgICAKLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbmVyYXRvcigKLSAgICAgICAg
MCwgQ29kZU9yaWdpbigpLCBSZWdpc3RlclNldCgpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDYpLCBKU1ZhbHVlUmVncyhHUFJJ
bmZvOjpyZWdUNyksIGZhbHNlKTsKLSAgICBnZW5lcmF0b3IuZ2VuZXJhdGVGYXN0UGF0aChqaXQp
OwotICAgIAotICAgIHJldHVybiBzX3NpemVPZkdldEJ5SWQgPSBqaXQubV9hc3NlbWJsZXIuY29k
ZVNpemUoKTsKKyAgICByZXR1cm4gMjk7CiB9CiAKIHNpemVfdCBzaXplT2ZQdXRCeUlkKCkKIHsK
LSAgICBpZiAoc19zaXplT2ZQdXRCeUlkKQotICAgICAgICByZXR1cm4gc19zaXplT2ZQdXRCeUlk
OwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKLSAgICAKLSAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIGdlbmVyYXRvcigKLSAgICAgICAgMCwgQ29kZU9yaWdpbigpLCBSZWdpc3RlclNldCgp
LCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgSlNWYWx1ZVJlZ3MoR1BSSW5m
bzo6cmVnVDYpLCBKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUNyksIEdQUkluZm86OnJlZ1Q4LCBm
YWxzZSwKLSAgICAgICAgTm90U3RyaWN0TW9kZSwgTm90RGlyZWN0KTsKLSAgICBnZW5lcmF0b3Iu
Z2VuZXJhdGVGYXN0UGF0aChqaXQpOwotICAgIAotICAgIHJldHVybiBzX3NpemVPZlB1dEJ5SWQg
PSBqaXQubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKKyAgICByZXR1cm4gMzI7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE1OTAwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyAr
NzUsNyBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoCiAgICAgICAgICAgICAgICAgICAgIG1fcGxhbi52bS5m
dGxUaHVua3MtPmdldE9TUkV4aXRHZW5lcmF0aW9uVGh1bmsoCiAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3BsYW4udm0sIExvY2F0aW9uOjpmb3JTdGFja21hcHMoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaml0Q29kZS0+c3RhY2ttYXBzLCBpdGVyLT52YWx1ZS5sb2NhdGlvbnNbMF0p
KS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaml0Q29kZS0+c3RhY2tt
YXBzLCBpdGVyLT52YWx1ZS5sb2NhdGlvbnNbMF0pKS5jb2RlKCkpKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaml0Q29kZS0+aW5pdGlhbGl6ZUV4aXRUaHVua3MoCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmNwcAkocmV2aXNpb24gMTU5MDAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewog
Ci1Mb2NhdGlvbiBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKGNvbnN0IFN0YWNrTWFwcyYgc3RhY2tt
YXBzLCBjb25zdCBTdGFja01hcHM6OkxvY2F0aW9uJiBsb2NhdGlvbikKK0xvY2F0aW9uIExvY2F0
aW9uOjpmb3JTdGFja21hcHMoY29uc3QgU3RhY2tNYXBzKiBzdGFja21hcHMsIGNvbnN0IFN0YWNr
TWFwczo6TG9jYXRpb24mIGxvY2F0aW9uKQogewogICAgIHN3aXRjaCAobG9jYXRpb24ua2luZCkg
ewogICAgIGNhc2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6VW5wcm9jZXNzZWQ6CkBAIC01Myw3ICs1
Myw4IEBAIExvY2F0aW9uIExvY2F0aW9uOjpmb3JTdGFja21hcHMoY29uc3QgU3QKICAgICAgICAg
cmV0dXJuIGZvckNvbnN0YW50KGxvY2F0aW9uLm9mZnNldCk7CiAgICAgICAgIAogICAgIGNhc2Ug
U3RhY2tNYXBzOjpMb2NhdGlvbjo6Q29uc3RhbnRJbmRleDoKLSAgICAgICAgcmV0dXJuIGZvckNv
bnN0YW50KHN0YWNrbWFwcy5jb25zdGFudHNbbG9jYXRpb24ub2Zmc2V0XS5pbnRlZ2VyKTsKKyAg
ICAgICAgQVNTRVJUKHN0YWNrbWFwcyk7CisgICAgICAgIHJldHVybiBmb3JDb25zdGFudChzdGFj
a21hcHMtPmNvbnN0YW50c1tsb2NhdGlvbi5vZmZzZXRdLmludGVnZXIpOwogICAgIH0KICAgICAK
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG9jYXRpb24uaAkocmV2aXNpb24gMTU5MDAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw5
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBzdGF0aWMg
TG9jYXRpb24gZm9yU3RhY2ttYXBzKGNvbnN0IFN0YWNrTWFwcyYsIGNvbnN0IFN0YWNrTWFwczo6
TG9jYXRpb24mKTsKKyAgICAvLyBZb3UgY2FuIHBhc3MgYSBudWxsIFN0YWNrTWFwcyBpZiB5b3Ug
YXJlIGNvbmZpZGVudCB0aGF0IHRoZSBsb2NhdGlvbiBkb2Vzbid0CisgICAgLy8gaW52b2x2ZSBh
IHdpZGUgY29uc3RhbnQuCisgICAgc3RhdGljIExvY2F0aW9uIGZvclN0YWNrbWFwcyhjb25zdCBT
dGFja01hcHMqLCBjb25zdCBTdGFja01hcHM6OkxvY2F0aW9uJik7CiAgICAgCiAgICAgS2luZCBr
aW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTU5MDAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNzUsMTAgKzEyNzUsMTIgQEAgcHJpdmF0ZToKIAogICAgICAgICAv
LyBBcmd1bWVudHM6IGlkLCBieXRlcywgdGFyZ2V0LCBudW1BcmdzLCBhcmdzLi4uCiAgICAgICAg
IHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7Ci0gICAgICAgIHNldEpTVmFs
dWUobV9vdXQuY2FsbCgKKyAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAogICAgICAg
ICAgICAgbV9vdXQucGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksCiAgICAgICAgICAgICBtX291
dC5jb25zdEludDMyKHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkdldEJ5SWQo
KSksCi0gICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIo
MiksIG1fY2FsbEZyYW1lLCBiYXNlKSk7CisgICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVm
OCksIG1fb3V0LmNvbnN0SW50MzIoMiksIG1fY2FsbEZyYW1lLCBiYXNlKTsKKyAgICAgICAgc2V0
SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVnQ2FsbENvbnYpOwor
ICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5n
ZXRCeUlkcy5hcHBlbmQoR2V0QnlJZERlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgbV9ub2RlLT5jb2Rl
T3JpZ2luLCB1aWQpKTsKICAgICB9CkBAIC0xMjk0LDEwICsxMjk2LDExIEBAIHByaXZhdGU6CiAK
ICAgICAgICAgLy8gQXJndW1lbnRzOiBpZCwgYnl0ZXMsIHRhcmdldCwgbnVtQXJncywgYXJncy4u
LgogICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21hcElEcysrOwotICAgICAg
ICBtX291dC5jYWxsKAorICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCiAgICAgICAg
ICAgICBtX291dC5wYXRjaHBvaW50Vm9pZEludHJpbnNpYygpLAogICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQzMihzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZQdXRCeUlkKCkp
LAogICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJlZjgpLCBtX291dC5jb25zdEludDMyKDMp
LCBtX2NhbGxGcmFtZSwgYmFzZSwgdmFsdWUpOworICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxp
bmdDb252ZW50aW9uKGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7CiAgICAgICAgIAogICAgICAg
ICBtX2Z0bFN0YXRlLnB1dEJ5SWRzLmFwcGVuZChQdXRCeUlkRGVzY3JpcHRvcigKICAgICAgICAg
ICAgIHN0YWNrbWFwSUQsIG1fbm9kZS0+Y29kZU9yaWdpbiwgdWlkLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24g
MTU5MDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsOCArMTc2LDggQEAgc3RhdGljIHZvaWQgY29tcGls
ZVN0dWIoCiAgICAgZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RFX0lGKAogICAgICAgICBzaG91
bGRTaG93RGlzYXNzZW1ibHkoKSwKICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiRlRM
IE9TUiBleGl0ICMldSAoYmMjJXUsICVzKSBmcm9tICVzLCB3aXRoIG9wZXJhbmRzID0gJXMsIGFu
ZCByZWNvcmQgPSAlcyIsCi0gICAgICAgICAgICBleGl0SUQsIGV4aXQubV9jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgsCisgICAgICAgICgiRlRMIE9TUiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVz
LCB3aXRoIG9wZXJhbmRzID0gJXMsIGFuZCByZWNvcmQgPSAlcyIsCisgICAgICAgICAgICBleGl0
SUQsIHRvQ1N0cmluZyhleGl0Lm1fY29kZU9yaWdpbikuZGF0YSgpLAogICAgICAgICAgICAgZXhp
dEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCks
CiAgICAgICAgICAgICB0b0NTdHJpbmcoaWdub3JpbmdDb250ZXh0PER1bXBDb250ZXh0PihleGl0
Lm1fdmFsdWVzKSkuZGF0YSgpLAogICAgICAgICAgICAgdG9DU3RyaW5nKCpyZWNvcmQpLmRhdGEo
KSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxs
LmNwcAkocmV2aXNpb24gMTU5MDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
bG93UGF0aENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwyMCArNjQsMjMgQEAgcHVibGlj
OgogICAgICAgICBtX29mZnNldFRvU2F2aW5nQXJlYSA9CiAgICAgICAgICAgICAoc3RkOjptYXgo
bV9udW1BcmdzLCBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTKSAtIE5VTUJFUl9PRl9BUkdV
TUVOVF9SRUdJU1RFUlMpICogd29yZFNpemU7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBu
dW1Bcmd1bWVudFJlZ2lzdGVyc1RoYXROZWVkU2F2aW5nID0gMDsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gc3RkOjptaW4oTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUywgbnVtQXJncyk7
IGktLTspIHsKLSAgICAgICAgICAgIGlmIChtX3VzZWRSZWdpc3RlcnMuZ2V0KEdQUkluZm86OnRv
QXJndW1lbnRSZWdpc3RlcihpKSkpCi0gICAgICAgICAgICAgICAgbnVtQXJndW1lbnRSZWdpc3Rl
cnNUaGF0TmVlZFNhdmluZysrOwotICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHN0ZDo6bWluKE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMsIG51bUFyZ3MpOyBpLS07KQor
ICAgICAgICAgICAgbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6dG9B
cmd1bWVudFJlZ2lzdGVyKGkpKTsKKyAgICAgICAgaWYgKHJldHVyblJlZ2lzdGVyICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgICAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLnNldChH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdp
c3RlcnMuZmlsdGVyKG1fdXNlZFJlZ2lzdGVycyk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzID0KKyAgICAgICAgICAgIG1fY2Fs
bGluZ0NvbnZlbnRpb25SZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsKICAgICAgICAg
CiAgICAgICAgIHNpemVfdCBvZmZzZXRUb1RodW5rU2F2aW5nQXJlYSA9CiAgICAgICAgICAgICBt
X29mZnNldFRvU2F2aW5nQXJlYSArCi0gICAgICAgICAgICBudW1Bcmd1bWVudFJlZ2lzdGVyc1Ro
YXROZWVkU2F2aW5nICogd29yZFNpemU7CisgICAgICAgICAgICBudW1iZXJPZkNhbGxpbmdDb252
ZW50aW9uUmVnaXN0ZXJzICogd29yZFNpemU7CiAgICAgICAgIAogICAgICAgICBtX3N0YWNrQnl0
ZXNOZWVkZWQgPQogICAgICAgICAgICAgb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWEgKwogICAgICAg
ICAgICAgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3MgKwotICAgICAgICAgICAgKG1f
dXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpIC0gbnVtQXJndW1lbnRSZWdpc3Rl
cnNUaGF0TmVlZFNhdmluZykgKiB3b3JkU2l6ZTsKKyAgICAgICAgICAgIChtX3VzZWRSZWdpc3Rl
cnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSAtIG51bWJlck9mQ2FsbGluZ0NvbnZlbnRpb25SZWdp
c3RlcnMpICogd29yZFNpemU7CiAgICAgICAgIAogICAgICAgICBzaXplX3Qgc3RhY2tBbGlnbm1l
bnQgPSAxNjsKICAgICAgICAgCkBAIC04NywxMSArOTAsMTMgQEAgcHVibGljOgogICAgICAgICAK
ICAgICAgICAgbV90aHVua1NhdmVTZXQgPSBtX3VzZWRSZWdpc3RlcnM7CiAgICAgICAgIAotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNU
RVJTLCBudW1BcmdzKTsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFtX3VzZWRSZWdpc3RlcnMu
Z2V0KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSkpCisgICAgICAgIC8vIFRoaXMgcmVs
aWVzIG9uIGFsbCBjYWxsaW5nIGNvbnZlbnRpb24gcmVnaXN0ZXJzIGFsc28gYmVpbmcgdGVtcCBy
ZWdpc3RlcnMuCisgICAgICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSAwOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAg
ICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgICAgICBp
ZiAoIW1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZ2V0KHJlZykpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9Bcmd1bWVu
dFJlZ2lzdGVyKGkpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRU
b1NhdmluZ0FyZWEgKyBpICogd29yZFNpemUpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRy
KHJlZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsIG1fb2Zmc2V0VG9TYXZpbmdBcmVhICsgKHN0YWNrSW5kZXgrKykgKiB3b3JkU2l6ZSkp
OwogICAgICAgICAgICAgbV90aHVua1NhdmVTZXQuY2xlYXIocmVnKTsKICAgICAgICAgfQogICAg
ICAgICAKQEAgLTEwMywxMSArMTA4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG1fcmV0dXJu
UmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIG1faml0Lm1vdmUoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIG1fcmV0dXJuUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4oTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUywg
bV9udW1BcmdzKTsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFtX3VzZWRSZWdpc3RlcnMuZ2V0
KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSkpCisgICAgICAgIHVuc2lnbmVkIHN0YWNr
SW5kZXggPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgaS0tOykgeworICAgICAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvUmVn
aXN0ZXIoaSk7CisgICAgICAgICAgICBpZiAoIW1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMu
Z2V0KHJlZykpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBHUFJSZWcg
cmVnID0gR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpOwotICAgICAgICAgICAgbV9qaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyBpICogd29yZFNpemUpLCByZWcpOworICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyAoc3RhY2tJbmRl
eCsrKSAqIHdvcmRTaXplKSwgcmVnKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9q
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRlc05lZWRlZCks
IENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTM5LDYgKzE0NSw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU3RhdGUmIG1fc3RhdGU7CiAgICAgUmVnaXN0ZXJTZXQg
bV91c2VkUmVnaXN0ZXJzOworICAgIFJlZ2lzdGVyU2V0IG1fY2FsbGluZ0NvbnZlbnRpb25SZWdp
c3RlcnM7CiAgICAgQ0NhbGxIZWxwZXJzJiBtX2ppdDsKICAgICB1bnNpZ25lZCBtX251bUFyZ3M7
CiAgICAgR1BSUmVnIG1fcmV0dXJuUmVnaXN0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgJKHJldmlzaW9uIDE1OTAwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDYgKzYxLDExIEBAIHB1YmxpYzoKICAgICB2b2lkKiBjYWxsVGFyZ2V0KCkgY29u
c3QgeyByZXR1cm4gbV9jYWxsVGFyZ2V0OyB9CiAgICAgcHRyZGlmZl90IG9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CiAgICAgCisgICAgU2xvd1BhdGhDYWxsS2V5IHdpdGhDYWxs
VGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpCisgICAgeworICAgICAgICByZXR1cm4gU2xvd1BhdGhD
YWxsS2V5KHVzZWRSZWdpc3RlcnMoKSwgY2FsbFRhcmdldCwgb2Zmc2V0KCkpOworICAgIH0KKyAg
ICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKICAgICBlbnVtIEVt
cHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YWNrTWFwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGFja01hcHMuY3BwCShyZXZpc2lvbiAxNTkwMDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDE1ICs2
NiwxNSBAQCB2b2lkIFN0YWNrTWFwczo6TG9jYXRpb246OmR1bXAoUHJpbnRTdHJlCiAgICAgb3V0
LnByaW50KCIoIiwga2luZCwgIiwgcmVnIiwgZHdhcmZSZWdOdW0sICIsICIsIG9mZnNldCwgIiki
KTsKIH0KIAotR1BSUmVnIFN0YWNrTWFwczo6TG9jYXRpb246OmRpcmVjdEdQUihTdGFja01hcHMm
IHN0YWNrbWFwcykgY29uc3QKK0dQUlJlZyBTdGFja01hcHM6OkxvY2F0aW9uOjpkaXJlY3RHUFIo
KSBjb25zdAogewotICAgIHJldHVybiBGVEw6OkxvY2F0aW9uOjpmb3JTdGFja21hcHMoc3RhY2tt
YXBzLCAqdGhpcykuZGlyZWN0R1BSKCk7CisgICAgcmV0dXJuIEZUTDo6TG9jYXRpb246OmZvclN0
YWNrbWFwcyhudWxscHRyLCAqdGhpcykuZGlyZWN0R1BSKCk7CiB9CiAKIHZvaWQgU3RhY2tNYXBz
OjpMb2NhdGlvbjo6cmVzdG9yZUludG8oCiAgICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgU3RhY2tN
YXBzJiBzdGFja21hcHMsIGNoYXIqIHNhdmVkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0KSBjb25z
dAogewotICAgIEZUTDo6TG9jYXRpb246OmZvclN0YWNrbWFwcyhzdGFja21hcHMsICp0aGlzKS5y
ZXN0b3JlSW50byhqaXQsIHNhdmVkUmVnaXN0ZXJzLCByZXN1bHQpOworICAgIEZUTDo6TG9jYXRp
b246OmZvclN0YWNrbWFwcygmc3RhY2ttYXBzLCAqdGhpcykucmVzdG9yZUludG8oaml0LCBzYXZl
ZFJlZ2lzdGVycywgcmVzdWx0KTsKIH0KIAogYm9vbCBTdGFja01hcHM6OlJlY29yZDo6cGFyc2Uo
RGF0YVZpZXcqIHZpZXcsIHVuc2lnbmVkJiBvZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgJKHJldmlzaW9uIDE1OTAwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1
LDcgQEAgc3RydWN0IFN0YWNrTWFwcyB7CiAgICAgICAgIHZvaWQgcGFyc2UoRGF0YVZpZXcqLCB1
bnNpZ25lZCYgb2Zmc2V0KTsKICAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0OwogICAgICAgICAKLSAgICAgICAgR1BSUmVnIGRpcmVjdEdQUihTdGFja01hcHMmKSBjb25z
dDsKKyAgICAgICAgR1BSUmVnIGRpcmVjdEdQUigpIGNvbnN0OwogICAgICAgICB2b2lkIHJlc3Rv
cmVJbnRvKE1hY3JvQXNzZW1ibGVyJiwgU3RhY2tNYXBzJiwgY2hhciogc2F2ZWRSZWdpc3RlcnMs
IEdQUlJlZyByZXN1bHQpIGNvbnN0OwogICAgIH07CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHJldmlzaW9uIDE1OTAwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE5ICs0NCwzOCBA
QCBuYW1lc3BhY2UgRlRMIHsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlv
blRodW5rR2VuZXJhdG9yKFZNJiwgY29uc3QgTG9jYXRpb24mKTsKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcihWTSYsIGNvbnN0IFNsb3dQYXRoQ2FsbEtl
eSYpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBl
bmFtZSBHZW5lcmF0b3JUeXBlPgordGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFyZ3VtZW50Pgor
c3RydWN0IFRodW5rTWFwIHsKKyAgICB0eXBlZGVmIEtleVR5cGVBcmd1bWVudCBLZXlUeXBlOwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlUeXBlLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IFRvVGh1
bmtNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgS2V5VHlw
ZT4gRnJvbVRodW5rTWFwOworICAgIAorICAgIFRvVGh1bmtNYXAgbV90b1RodW5rOworICAgIEZy
b21UaHVua01hcCBtX2Zyb21UaHVuazsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGUs
IHR5cGVuYW1lIEdlbmVyYXRvclR5cGU+CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJhdGVJ
Zk5lY2Vzc2FyeSgKLSAgICBWTSYgdm0sIE1hcFR5cGUmIG1hcCwgY29uc3QgS2V5VHlwZSYga2V5
LCBHZW5lcmF0b3JUeXBlIGdlbmVyYXRvcikKKyAgICBWTSYgdm0sIE1hcFR5cGUmIG1hcCwgY29u
c3QgdHlwZW5hbWUgTWFwVHlwZTo6S2V5VHlwZSYga2V5LCBHZW5lcmF0b3JUeXBlIGdlbmVyYXRv
cikKIHsKLSAgICB0eXBlbmFtZSBNYXBUeXBlOjppdGVyYXRvciBpdGVyID0gbWFwLmZpbmQoa2V5
KTsKLSAgICBpZiAoaXRlciAhPSBtYXAuZW5kKCkpCisgICAgdHlwZW5hbWUgTWFwVHlwZTo6VG9U
aHVua01hcDo6aXRlcmF0b3IgaXRlciA9IG1hcC5tX3RvVGh1bmsuZmluZChrZXkpOworICAgIGlm
IChpdGVyICE9IG1hcC5tX3RvVGh1bmsuZW5kKCkpCiAgICAgICAgIHJldHVybiBpdGVyLT52YWx1
ZTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcmVzdWx0ID0gZ2VuZXJhdG9yKHZt
LCBrZXkpOwotICAgIG1hcC5hZGQoa2V5LCByZXN1bHQpOworICAgIG1hcC5tX3RvVGh1bmsuYWRk
KGtleSwgcmVzdWx0KTsKKyAgICBtYXAubV9mcm9tVGh1bmsuYWRkKHJlc3VsdC5jb2RlKCksIGtl
eSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4K
K3R5cGVuYW1lIE1hcFR5cGU6OktleVR5cGUga2V5Rm9yVGh1bmsoTWFwVHlwZSYgbWFwLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgcHRyKQoreworICAgIHR5cGVuYW1lIE1hcFR5cGU6OkZyb21UaHVu
a01hcDo6aXRlcmF0b3IgaXRlciA9IG1hcC5tX2Zyb21UaHVuay5maW5kKHB0cik7CisgICAgUkVM
RUFTRV9BU1NFUlQoaXRlciAhPSBtYXAubV9mcm9tVGh1bmsuZW5kKCkpOworICAgIHJldHVybiBp
dGVyLT52YWx1ZTsKK30KKwogY2xhc3MgVGh1bmtzIHsKIHB1YmxpYzoKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgZ2V0T1NSRXhpdEdlbmVyYXRpb25UaHVuayhWTSYgdm0sIGNvbnN0IExvY2F0
aW9uJiBsb2NhdGlvbikKQEAgLTcxLDkgKzkwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHZt
LCBtX3Nsb3dQYXRoQ2FsbFRodW5rcywga2V5LCBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcik7
CiAgICAgfQogICAgIAorICAgIFNsb3dQYXRoQ2FsbEtleSBrZXlGb3JTbG93UGF0aENhbGxUaHVu
ayhNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtleUZv
clRodW5rKG1fc2xvd1BhdGhDYWxsVGh1bmtzLCBwdHIpOworICAgIH0KKyAgICAKIHByaXZhdGU6
Ci0gICAgSGFzaE1hcDxMb2NhdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBtX29zckV4aXRU
aHVua3M7Ci0gICAgSGFzaE1hcDxTbG93UGF0aENhbGxLZXksIE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zj4gbV9zbG93UGF0aENhbGxUaHVua3M7CisgICAgVGh1bmtNYXA8TG9jYXRpb24+IG1fb3NyRXhp
dFRodW5rczsKKyAgICBUaHVua01hcDxTbG93UGF0aENhbGxLZXk+IG1fc2xvd1BhdGhDYWxsVGh1
bmtzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9GUFJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9GUFJJbmZvLmgJKHJldmlzaW9uIDE1OTAwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRlBSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3MywxMCBAQCBwdWJs
aWM6CiAgICAgfQogICAgIHN0YXRpYyB1bnNpZ25lZCB0b0luZGV4KEZQUlJlZyByZWcpCiAgICAg
ewotICAgICAgICByZXR1cm4gKHVuc2lnbmVkKXJlZzsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0
ID0gKHVuc2lnbmVkKXJlZzsKKyAgICAgICAgaWYgKHJlc3VsdCA+PSBudW1iZXJPZlJlZ2lzdGVy
cykKKyAgICAgICAgICAgIHJldHVybiBJbnZhbGlkSW5kZXg7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBGUFJSZWcgdG9Bcmd1bWVudFJlZ2lzdGVyKHVu
c2lnbmVkIGluZGV4KQpAQCAtMTAxLDYgKzEwNCw4IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAg
ICByZXR1cm4gbmFtZUZvclJlZ2lzdGVyW3JlZ107CiAgICAgfQorICAgIAorICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBJbnZhbGlkSW5kZXggPSAweGZmZmZmZmZmOwogfTsKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAkocmV2aXNpb24gMTU5MDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
OSw3ICszMzksNiBAQCBwdWJsaWM6CiAgICAgICAgIH07CiAgICAgICAgIHJldHVybiBuYW1lRm9y
UmVnaXN0ZXJbcmVnXTsKICAgICB9Ci1wcml2YXRlOgogCiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIEludmFsaWRJbmRleCA9IDB4ZmZmZmZmZmY7CiB9OwpAQCAtNDIxLDkgKzQyMCw3IEBAIHB1
YmxpYzoKICAgICAgICAgQVNTRVJUKHJlZyAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PGludD4ocmVnKSA8IDE2KTsKICAgICAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGluZGV4Rm9yUmVnaXN0ZXJbMTZdID0geyAwLCAyLCAxLCAzLCBJbnZhbGlkSW5kZXgs
IEludmFsaWRJbmRleCwgNSwgNCwgNiwgNywgOCwgSW52YWxpZEluZGV4LCBJbnZhbGlkSW5kZXgs
IDksIEludmFsaWRJbmRleCwgSW52YWxpZEluZGV4IH07Ci0gICAgICAgIHVuc2lnbmVkIHJlc3Vs
dCA9IGluZGV4Rm9yUmVnaXN0ZXJbcmVnXTsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCAhPSBJbnZh
bGlkSW5kZXgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gaW5kZXhG
b3JSZWdpc3RlcltyZWddOwogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWJ1Z05h
bWUoR1BSUmVnIHJlZykKQEAgLTQzOCw3ICs0MzUsNiBAQCBwdWJsaWM6CiAgICAgICAgIH07CiAg
ICAgICAgIHJldHVybiBuYW1lRm9yUmVnaXN0ZXJbcmVnXTsKICAgICB9Ci1wcml2YXRlOgogCiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEludmFsaWRJbmRleCA9IDB4ZmZmZmZmZmY7CiB9OwpA
QCAtNTExLDcgKzUwNyw2IEBAIHB1YmxpYzoKICAgICAgICAgfTsKICAgICAgICAgcmV0dXJuIG5h
bWVGb3JSZWdpc3RlcltyZWddOwogICAgIH0KLXByaXZhdGU6CiAKICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgSW52YWxpZEluZGV4ID0gMHhmZmZmZmZmZjsKIH07CkBAIC02MTAsNyArNjA1LDYg
QEAgcHVibGljOgogICAgICAgICB9OwogICAgICAgICByZXR1cm4gbmFtZUZvclJlZ2lzdGVyW3Jl
Z107CiAgICAgfQotcHJpdmF0ZToKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBJbnZhbGlk
SW5kZXggPSAweGZmZmZmZmZmOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJTZXQuY3BwCShyZXZpc2lvbiAxNTkwMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZ2lzdGVyU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNiBAQCBS
ZWdpc3RlclNldCBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzCiAjaWYgQ1BVKFg4Nl82NCkK
ICAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6ZWJ4KTsKICAgICByZXN1bHQuc2V0KFg4NlJl
Z2lzdGVyczo6ZWJwKTsKLSAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjEwKTsKICAgICBy
ZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjEyKTsKICAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVy
czo6cjEzKTsKICAgICByZXN1bHQuc2V0KFg4NlJlZ2lzdGVyczo6cjE0KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDE1OTAwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
ODEsNiArODEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBnZXQoRlBSUmVnIHJlZykgY29uc3QgeyBy
ZXR1cm4gbV92ZWN0b3IuZ2V0KE1hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KHJlZykpOyB9
CiAgICAgCiAgICAgdm9pZCBtZXJnZShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIHsgbV92ZWN0
b3IubWVyZ2Uob3RoZXIubV92ZWN0b3IpOyB9CisgICAgdm9pZCBmaWx0ZXIoY29uc3QgUmVnaXN0
ZXJTZXQmIG90aGVyKSB7IG1fdmVjdG9yLmZpbHRlcihvdGhlci5tX3ZlY3Rvcik7IH0KICAgICB2
b2lkIGV4Y2x1ZGUoY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSB7IG1fdmVjdG9yLmV4Y2x1ZGUo
b3RoZXIubV92ZWN0b3IpOyB9CiAgICAgCiAgICAgc2l6ZV90IG51bWJlck9mU2V0UmVnaXN0ZXJz
KCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuYml0Q291bnQoKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNTkwMDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWVJbmxp
bmVzLmgiCisjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJS
b3V0aW5lLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKQEAgLTUyLDEwICs1Myw0NCBAQCBuYW1lc3BhY2UgSlNDIHsKIC8vIGdpdmUgdGhlIEZUTCBj
bG9zdXJlIGNhbGwgcGF0Y2hpbmcgc3VwcG9ydCB1bnRpbCB3ZSBzd2l0Y2ggdG8gdGhlIEMgc3Rh
Y2sgLSBidXQgd2hlbiB3ZSBkbyB0aGF0LAogLy8gY2FsbEZyYW1lUmVnaXN0ZXIgd2lsbCBkaXNh
cHBlYXIuCiAKK3N0YXRpYyBGdW5jdGlvblB0ciByZWFkQ2FsbFRhcmdldChSZXBhdGNoQnVmZmVy
JiByZXBhdGNoQnVmZmVyLCBDb2RlTG9jYXRpb25DYWxsIGNhbGwpCit7CisgICAgRnVuY3Rpb25Q
dHIgcmVzdWx0ID0gTWFjcm9Bc3NlbWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwpOworI2lmIEVO
QUJMRShGVExfSklUKQorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gcmVwYXRjaEJ1ZmZlci5j
b2RlQmxvY2soKTsKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6RlRM
SklUKSB7CisgICAgICAgIHJldHVybiBGdW5jdGlvblB0cihjb2RlQmxvY2stPnZtKCktPmZ0bFRo
dW5rcy0+a2V5Rm9yU2xvd1BhdGhDYWxsVGh1bmsoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcygKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKSkpLmNhbGxUYXJnZXQoKSk7CisgICAgfQorI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0ocmVwYXRjaEJ1ZmZlcik7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoUmVw
YXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlv
blB0ciBuZXdDYWxsZWVGdW5jdGlvbikKK3sKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKyAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IHJlcGF0Y2hCdWZmZXIuY29kZUJsb2NrKCk7CisgICAgaWYgKGNv
ZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OkZUTEpJVCkgeworICAgICAgICBWTSYgdm0g
PSAqY29kZUJsb2NrLT52bSgpOworICAgICAgICBGVEw6OlRodW5rcyYgdGh1bmtzID0gKnZtLmZ0
bFRodW5rczsKKyAgICAgICAgRlRMOjpTbG93UGF0aENhbGxLZXkga2V5ID0gdGh1bmtzLmtleUZv
clNsb3dQYXRoQ2FsbFRodW5rKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpj
cmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAg
a2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5ld0NhbGxlZUZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOworICAgICAgICBuZXdDYWxsZWVGdW5jdGlvbiA9IEZ1bmN0aW9uUHRyKAorICAgICAg
ICAgICAgdGh1bmtzLmdldFNsb3dQYXRoQ2FsbFRodW5rKHZtLCBrZXkpLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpKTsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24pOworfQorCiBzdGF0aWMg
dm9pZCByZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVibG9jaywgQ29kZUxvY2F0aW9uQ2FsbCBj
YWxsLCBGdW5jdGlvblB0ciBuZXdDYWxsZWVGdW5jdGlvbikKIHsKICAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoY29kZWJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxs
LCBuZXdDYWxsZWVGdW5jdGlvbik7CisgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgY2Fs
bCwgbmV3Q2FsbGVlRnVuY3Rpb24pOwogfQogCiBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZB
Y2Nlc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rp
b25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sIGJvb2wgY29tcGFjdCkKQEAgLTYzLDcgKzk4LDcgQEAg
c3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKENvZGVCbAogICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogCiAgICAgLy8gT25seSBvcHRpbWl6ZSBvbmNl
IQotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwg
c2xvd1BhdGhGdW5jdGlvbik7CisgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBzbG93UGF0aEZ1bmN0aW9uKTsKIAogICAgIC8vIFBhdGNo
IHRoZSBzdHJ1Y3R1cmUgY2hlY2sgJiB0aGUgb2Zmc2V0IG9mIHRoZSBsb2FkLgogICAgIHJlcGF0
Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRy
QXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0YUNoZWNrSW1tVG9DYWxsKSwg
c3RydWN0dXJlKTsKQEAgLTMxNCw3ICszNDksNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5
SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIoY29kZUJsb2NrKTsKICAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hCdWZmZXIs
IHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7Ci0gICAgICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0
aW9uR2V0QnlJZCk7CisgICAgICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CiAgICAgICAgIAogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0zNjIsNyArMzk3LDcgQEAgc3RhdGljIGJvb2wgdHJ5
Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjb2RlQmxvY2spOwogICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBz
dHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOwotICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0
QnlJZEJ1aWxkTGlzdCk7CisgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKICAgICAKICAg
ICBzdHViSW5mby5pbml0R2V0QnlJZENoYWluKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIHRydWUpOwogICAgIHJldHVy
biB0cnVlOwpAQCAtMTAwMCw3ICsxMDM1LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlE
KEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5qdW1wQXRPZmZzZXQoCiAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvU3RydWN0Q2hlY2spLAogICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0
dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgICAgICAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlz
dEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAgICAgIHJl
cGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBw
cm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24oKnZt
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwg
cHJvdG90eXBlQ2hhaW4sIHB1dEtpbmQgPT0gRGlyZWN0KTsKICAgICAgICAgICAgIApAQCAtMTEw
NSw3ICsxMTQwLDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAog
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
anVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2Rl
TG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgICAgICAKICAg
ICAgICAgaWYgKGxpc3QtPmlzRnVsbCgpKQotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlk
RnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgICAgICAgICAgcmVwYXRjaENhbGwocmVwYXRj
aEJ1ZmZlciwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZUdlbmVyaWNQ
dXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogICAgICAgICAKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQpAQCAtMTM4MCw3ICsxNDE1LDcgQEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwo
RXhlY1N0YXRlKiBleGVjLCBDYQogCiB2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiBy
ZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUpOworICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKTsKICAgICBDb2RlTG9j
YXRpb25EYXRhTGFiZWxQdHIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZWx0
YUNoZWNrSW1tVG9DYWxsKTsKICAgICBpZiAoTWFjcm9Bc3NlbWJsZXI6OmNhbkp1bXBSZXBsYWNl
UGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkpIHsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgKQEAgLTE0
MDIsNyArMTQzNyw3IEBAIHZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2gK
IAogdm9pZCByZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewotICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxWX0pJVE9wZXJhdGlvbl9FU3NpSkpJPihN
YWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxUYXJnZXQoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIHVub3B0
aW1pemVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8Vl9KSVRPcGVyYXRpb25fRVNzaUpKST4ocmVh
ZENhbGxUYXJnZXQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uKS5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIG9wdGltaXpl
ZEZ1bmN0aW9uOwogICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0
QnVpbGRMaXN0KQogICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRT
dHJpY3RPcHRpbWl6ZTsKQEAgLTE0MTQsNyArMTQ0OSw3IEBAIHZvaWQgcmVzZXRQdXRCeUlEKFJl
cGF0Y2hCdWZmZXImIHJlcGF0Y2gKICAgICAgICAgQVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RCdWlsZExpc3QpOwogICAgICAgICBv
cHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6
ZTsKICAgICB9Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLCBvcHRpbWl6ZWRGdW5jdGlvbik7CisgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1ZmZl
ciwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcHRpbWl6ZWRGdW5jdGlvbik7CiAgICAg
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0
Y2guZGVsdGFDaGVja0ltbVRvQ2FsbCk7CiAgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5KdW1w
UmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7CiAgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2go
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE1OTAwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkg
KzQ0LDIxIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2RpZFJldXNlUmVnaXN0ZXJzKGZhbHNlKQog
ICAgIHsKICAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIGxv
Y2soVCByZWcpIHsgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KHJlZyk7IH0KKworICAgIHZvaWQgbG9j
ayhHUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBHUFJJbmZvOjp0
b0luZGV4KHJlZyk7CisgICAgICAgIGlmIChpbmRleCA9PSBHUFJJbmZvOjpJbnZhbGlkSW5kZXgp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldEdQUkJ5
SW5kZXgoaW5kZXgpOworICAgIH0KKyAgICB2b2lkIGxvY2soRlBSUmVnIHJlZykKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gRlBSSW5mbzo6dG9JbmRleChyZWcpOworICAgICAgICBp
ZiAoaW5kZXggPT0gRlBSSW5mbzo6SW52YWxpZEluZGV4KQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBtX2xvY2tlZFJlZ2lzdGVycy5zZXRGUFJCeUluZGV4KGluZGV4KTsKKyAgICB9CiAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFua0luZm8+CiAgICAgdHlwZW5hbWUgQmFua0lu
Zm86OlJlZ2lzdGVyVHlwZSBhbGxvY2F0ZVNjcmF0Y2goKQpJbmRleDogU291cmNlL1dURi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTAw
MykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTMtMTEtMDkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAg
ICBTd2l0Y2ggRlRMIEdldEJ5SWQvUHV0QnlJZCBJQydzIG92ZXIgdG8gdXNpbmcgQW55UmVnQ0MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDA5NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
SSBuZWVkZWQgdG8gYWRkIGFub3RoZXIgc2V0IG9wZXJhdGlvbiwgbmFtZWx5IGZpbHRlcigpLCB3
aGljaCBpcyBhbiBpbi1wbGFjZSBzZXQKKyAgICAgICAgaW50ZXJzZWN0aW9uLgorCisgICAgICAg
ICogd3RmL0JpdFZlY3Rvci5jcHA6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6ZmlsdGVyU2xv
dyk6CisgICAgICAgICogd3RmL0JpdFZlY3Rvci5oOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6
OmZpbHRlcik6CisKIDIwMTMtMTEtMDkgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgTW92ZSBSdW5Mb29wIGZyb20gV2ViQ29yZSB0byBXVEYKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvQml0VmVjdG9yLmNwcAkocmV2aXNpb24gMTU5MDAzKQorKysgU291cmNlL1dURi93dGYvQml0
VmVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDYgKzEyNCwzMSBAQCB2b2lkIEJpdFZl
Y3Rvcjo6bWVyZ2VTbG93KGNvbnN0IEJpdFZlY3RvCiAgICAgICAgIGEtPmJpdHMoKVtpXSB8PSBi
LT5iaXRzKClbaV07CiB9CiAKK3ZvaWQgQml0VmVjdG9yOjpmaWx0ZXJTbG93KGNvbnN0IEJpdFZl
Y3RvciYgb3RoZXIpCit7CisgICAgaWYgKG90aGVyLmlzSW5saW5lKCkpIHsKKyAgICAgICAgQVNT
RVJUKCFpc0lubGluZSgpKTsKKyAgICAgICAgKmJpdHMoKSAmPSBjbGVhbnNlSW5saW5lQml0cyhv
dGhlci5tX2JpdHNPclBvaW50ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IGlmIChpc0lubGluZSgpKSB7CisgICAgICAgIEFTU0VSVCghb3RoZXIuaXNJbmxpbmUoKSk7Cisg
ICAgICAgIG1fYml0c09yUG9pbnRlciAmPSAqb3RoZXIub3V0T2ZMaW5lQml0cygpLT5iaXRzKCk7
CisgICAgICAgIG1fYml0c09yUG9pbnRlciB8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8
PCBtYXhJbmxpbmVCaXRzKCkpOworICAgICAgICBBU1NFUlQoaXNJbmxpbmUoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgT3V0T2ZMaW5lQml0cyogYSA9IG91dE9mTGluZUJp
dHMoKTsKKyAgICBjb25zdCBPdXRPZkxpbmVCaXRzKiBiID0gb3RoZXIub3V0T2ZMaW5lQml0cygp
OworICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKGEtPm51bVdvcmRzKCksIGItPm51bVdv
cmRzKCkpOyBpLS07KQorICAgICAgICBhLT5iaXRzKClbaV0gJj0gYi0+Yml0cygpW2ldOworICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IGItPm51bVdvcmRzKCk7IGkgPCBhLT5udW1Xb3Jkcygp
OyArK2kpCisgICAgICAgIGEtPmJpdHMoKVtpXSA9IDA7Cit9CisKIHZvaWQgQml0VmVjdG9yOjpl
eGNsdWRlU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKQogewogICAgIGlmIChvdGhlci5pc0lu
bGluZSgpKSB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMTU5MDAzKQorKysgU291cmNl
L1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw2ICsxODEsMTYgQEAg
cHVibGljOiAKICAgICAgICAgQVNTRVJUKGlzSW5saW5lKCkpOwogICAgIH0KICAgICAKKyAgICB2
b2lkIGZpbHRlcihjb25zdCBCaXRWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKCFp
c0lubGluZSgpIHx8ICFvdGhlci5pc0lubGluZSgpKSB7CisgICAgICAgICAgICBmaWx0ZXJTbG93
KG90aGVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2JpdHNP
clBvaW50ZXIgJj0gb3RoZXIubV9iaXRzT3JQb2ludGVyOworICAgICAgICBBU1NFUlQoaXNJbmxp
bmUoKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgZXhjbHVkZShjb25zdCBCaXRWZWN0b3ImIG90
aGVyKQogICAgIHsKICAgICAgICAgaWYgKCFpc0lubGluZSgpIHx8ICFvdGhlci5pc0lubGluZSgp
KSB7CkBAIC0zMDIsNiArMzEyLDcgQEAgcHJpdmF0ZToKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBzZXRTbG93KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpOwogICAgIAogICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIG1lcmdlU2xvdyhjb25zdCBCaXRWZWN0b3ImIG90aGVyKTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWx0ZXJTbG93KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIp
OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGV4Y2x1ZGVTbG93KGNvbnN0IEJpdFZlY3Rv
ciYgb3RoZXIpOwogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgYml0Q291bnRT
bG93KCkgY29uc3Q7Cg==
</data>
<flag name="review"
          id="239480"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>