<?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>118910</bug_id>
          
          <creation_ts>2013-07-19 10:57:15 -0700</creation_ts>
          <short_desc>fourthTier: DFG Nodes should be able to abstractly tell you what they read and what they write</short_desc>
          <delta_ts>2013-07-21 21:03:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>118935</dependson>
    
    <dependson>118940</dependson>
          <blocked>118749</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>910243</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-19 10:57:15 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910244</commentid>
    <comment_count>1</comment_count>
      <attachid>207124</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-19 10:57:52 -0700</bug_when>
    <thetext>Created attachment 207124
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910378</commentid>
    <comment_count>2</comment_count>
      <attachid>207159</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-19 17:09:03 -0700</bug_when>
    <thetext>Created attachment 207159
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910396</commentid>
    <comment_count>3</comment_count>
      <attachid>207165</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-19 18:52:56 -0700</bug_when>
    <thetext>Created attachment 207165
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910423</commentid>
    <comment_count>4</comment_count>
      <attachid>207182</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-19 21:58:19 -0700</bug_when>
    <thetext>Created attachment 207182
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910436</commentid>
    <comment_count>5</comment_count>
      <attachid>207187</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-19 23:30:03 -0700</bug_when>
    <thetext>Created attachment 207187
clobberizer is done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910486</commentid>
    <comment_count>6</comment_count>
      <attachid>207199</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-20 12:27:03 -0700</bug_when>
    <thetext>Created attachment 207199
shockingly, it works

And by &quot;works&quot; I mean that I can dump some clobbers here and there.  Visual inspection confirms that it&apos;s as good as it will be before I write a real client that uses this in anger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910487</commentid>
    <comment_count>7</comment_count>
      <attachid>207200</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-20 12:31:44 -0700</bug_when>
    <thetext>Created attachment 207200
make the changelog even more epic</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910488</commentid>
    <comment_count>8</comment_count>
      <attachid>207201</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-20 12:35:43 -0700</bug_when>
    <thetext>Created attachment 207201
make the changelog even more lovely</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910547</commentid>
    <comment_count>9</comment_count>
      <attachid>207213</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-21 15:01:53 -0700</bug_when>
    <thetext>Created attachment 207213
cleanups

overlapsReads is renamed to readsOverlap.  Same for writes.

Added a method called didWrites() that just tells you if any writes occurred.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910548</commentid>
    <comment_count>10</comment_count>
      <attachid>207214</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-21 15:19:00 -0700</bug_when>
    <thetext>Created attachment 207214
the patch

added a ClobberSet::addAll() method</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910570</commentid>
    <comment_count>11</comment_count>
      <attachid>207214</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-07-21 18:11:43 -0700</bug_when>
    <thetext>Comment on attachment 207214
the patch

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

Is there anyway to test all this (is it worth it to unit test it)?  Or will I have to wait for LICM?

&gt; Source/JavaScriptCore/dfg/DFGAbstractHeap.h:275
&gt; +    int64_t m_value;

Even though it is not too confusing, you should probably add a short comment explaining the structure of m_value, bitwise.

&gt; Source/JavaScriptCore/dfg/DFGClobberSet.cpp:106
&gt; +    out.print(&quot;(Direct:[&quot;, sortedListDump(direct()), &quot;], Super:[&quot;, sortedListDump(super()), &quot;])&quot;);

Please adding timing information so you can have a function called clobberingTime().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910574</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-21 19:22:53 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 207214 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=207214&amp;action=review
&gt; 
&gt; Is there anyway to test all this (is it worth it to unit test it)?  Or will I have to wait for LICM?

Yeah this will have to wait for LICM and GVN or CSE. 
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractHeap.h:275
&gt; &gt; +    int64_t m_value;
&gt; 
&gt; Even though it is not too confusing, you should probably add a short comment explaining the structure of m_value, bitwise.

Will do. 

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGClobberSet.cpp:106
&gt; &gt; +    out.print(&quot;(Direct:[&quot;, sortedListDump(direct()), &quot;], Super:[&quot;, sortedListDump(super()), &quot;])&quot;);
&gt; 
&gt; Please adding timing information so you can have a function called clobberingTime().

I&apos;ll consider it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910586</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-21 21:03:56 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/152959</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207124</attachid>
            <date>2013-07-19 10:57:52 -0700</date>
            <delta_ts>2013-07-19 17:09:03 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>5734</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBYnN0cmFjdEhlYXBfaAorI2RlZmlu
ZSBERkdBYnN0cmFjdEhlYXBfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gSW1wbGVtZW50cyBhIHRocmVlLWxldmVsIHR5cGUg
aGllcmFyY2h5OgorLy8gLSBXb3JsZCBpcyB0aGUgc3VwZXJ0eXBlIG9mIGFsbCBvZiB0aGUgdGhp
bmdzLgorLy8gLSBLaW5kIHdpdGggVE9QIHN1YmtpbmQgaXMgdGhlIGRpcmVjdCBzdWJ0eXBlIG9m
IFdvcmxkLgorLy8gLSBLaW5kIHdpdGggbm9uLVRPUCBzdWJraW5kIGlzIHRoZSBkaXJlY3Qgc3Vi
dHlwZSBvZiBpdHMgY29ycmVzcG9uZGluZyBUT1AgS2luZC4KKworY2xhc3MgQWJzdHJhY3RIZWFw
IHsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hpZnQgPSAxNjsKKyAgICAKK3B1YmxpYzoK
KyAgICBlbnVtIEtpbmQgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBCdXR0ZXJmbHlfcHVi
bGljTGVuZ3RoLAorICAgICAgICBCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoLAorICAgICAgICBKU09i
amVjdF9idXR0ZXJmbHksCisgICAgICAgIEpTQ2VsbF9zdHJ1Y3R1cmUsCisgICAgICAgIFN0cmlu
Z0ltcGxfaGFzaEFuZEZsYWdzLAorICAgICAgICBOYW1lZFByb3BlcnRpZXMsCisgICAgICAgIElu
ZGV4ZWRJbnQzMlByb3BlcnRpZXMsCisgICAgICAgIEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLAor
ICAgICAgICBJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMsCisgICAgICAgIEFycmF5U3RvcmFn
ZVByb3BlcnRpZXMsCisgICAgICAgIFZhcmlhYmxlcywKKyAgICAgICAgVHlwZWRBcnJheVByb3Bl
cnRpZXMsCisgICAgICAgIExlbmd0aCwKKyAgICAgICAgQWJzb2x1dGUsCisgICAgICAgIFdvcmxk
CisgICAgfTsKKyAgICAKKyAgICBjbGFzcyBTdWJLaW5kIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFN1YktpbmQoKQorICAgICAgICAgICAgOiBtX3ZhbHVlKC0xKQorICAgICAgICB7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFN1YktpbmQoaW50cHRyX3QgdmFsdWUpCisgICAgICAgICAg
ICA6IG1fdmFsdWUodmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCgoKHZhbHVl
IDw8IHNoaWZ0KSA+PiBzaGlmdCkgPT0gdmFsdWUpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBTdWJLaW5kKGNvbnN0IHZvaWQqIHZhbHVlKQorICAgICAgICAgICAgOiBtX3ZhbHVlKGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4odmFsdWUpKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGludHB0cl90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQor
ICAgICAgICAKKyAgICAgICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0g
LTE7IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdWJLaW5kJiBv
dGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3Ro
ZXIubV92YWx1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFN1YktpbmQmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBib29sIGlzRGlzam9pbnQoY29uc3QgU3ViS2luZCYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgU3ViS2luZCYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhaXNEaXNqb2ludChvdGhl
cik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgaW50cHRyX3Qg
bV92YWx1ZTsKKyAgICB9OworCisgICAgQWJzdHJhY3RIZWFwKEtpbmQga2luZCA9IEludmFsaWQs
IFN1YktpbmQgc3ViS2luZCA9IFN1YktpbmQoKSkKKyAgICB7CisgICAgICAgIHNldERhdGEoa2lu
ZCwgc3ViS2luZCk7CisgICAgfQorICAgIAorICAgIEFic3RyYWN0SGVhcChXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgeworICAgICAgICBzZXRkYXRhKEludmFsaWQsIFN1Yktp
bmQoMCkpCisgICAgfQorICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgS2luZCBraW5kKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8S2luZD4obV92YWx1ZSAmICgoMSA8PCBzaGlmdCkg
LSAxKSk7IH0KKyAgICBTdWJLaW5kIHN1YktpbmQoKSBjb25zdCB7IHJldHVybiBTdWJLaW5kKG1f
dmFsdWUgPj4gc2hpZnQpOyB9CisjZWxzZQorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZDsgfQorICAgIFN1YktpbmQgc3ViS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ViS2lu
ZDsgfQorI2VuZGlmCisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBr
aW5kKCkgPT0gSW52YWxpZDsgfQorICAgIAorICAgIGJvb2wgaXNEaXNqb2ludChjb25zdCBBYnN0
cmFjdEhlYXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCEhKnRoaXMpOwor
ICAgICAgICBBU1NFUlQoISFvdGhlcik7CisgICAgICAgIGlmIChraW5kKCkgPT0gV29ybGQpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvdGhlci5raW5kKCkgPT0gV29y
bGQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChraW5kKCkgIT0gb3Ro
ZXIua2luZCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBzdWJL
aW5kKCkuaXNEaXNqb2ludChvdGhlci5zdWJLaW5kKCkpOworICAgIH0KKyAgICAKKyAgICBib29s
IG92ZXJsYXBzKGNvbnN0IEFic3RyYWN0SGVhcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gIWlzRGlzam9pbnQob3RoZXIpOworICAgIH0KKyAgICAKKyAgICBBYnN0cmFjdEhl
YXAgc3VwZXJ0eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghISp0aGlzKTsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSAhPSBXb3JsZCk7CisgICAgICAgIGlmIChzdWJLaW5kKCkuaXNU
b3AoKSkKKyAgICAgICAgICAgIHJldHVybiBXb3JsZDsKKyAgICAgICAgcmV0dXJuIEFic3RyYWN0
SGVhcChraW5kKCkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGtpbmQoKSArIHN1YktpbmQoKS52
YWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBJbnZhbGlkICYmICFzdWJLaW5kKCkuaXNUb3AoKTsg
fQorICAgIAorcHJpdmF0ZToKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgCisgICAg
dm9pZCBzZXREYXRhKEtpbmQga2luZCwgU3ViS2luZCBzdWJLaW5kKQorICAgIHsKKyAgICAgICAg
bV92YWx1ZSA9IChzdWJLaW5kLnZhbHVlKCkgPDwgc2hpZnQpIHwgc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KGtpbmQpOworICAgIH0KKyAgICAKKyAgICBpbnRwdHJfdCBtX3ZhbHVlOworI2Vsc2UKKyAg
ICB2b2lkIHNldERhdGEoS2luZCBraW5kLCBTdWJLaW5kIHN1YktpbmQpCisgICAgeworICAgICAg
ICBtX2tpbmQgPSBraW5kOworICAgICAgICBtX3N1YktpbmQgPSBzdWJLaW5kOworICAgIH0KKyAg
ICAKKyAgICBLaW5kIG1fa2luZDsKKyAgICBTdWJLaW5kIG1fc3ViS2luZDsKKyNlbmRpZgorfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyNlbmRpZiAvLyBERkdBYnN0cmFjdEhlYXBfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207159</attachid>
            <date>2013-07-19 17:09:03 -0700</date>
            <delta_ts>2013-07-19 18:52:56 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>17859</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVh
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR0Fic3RyYWN0SGVhcC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAg
b3V0LnByaW50KCJUT1AiKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCh2YWx1ZSgpKTsK
K30KKwordm9pZCBBYnN0cmFjdEhlYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoa2luZCgpKTsKKyAgICBpZiAoa2luZCgpID09IEludmFsaWQgfHwga2lu
ZCgpID09IFdvcmxkKQorICAgICAgICByZXR1cm47CisgICAgb3V0LnByaW50KCIoIiwgcGF5bG9h
ZCgpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBX
VEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBBYnN0cmFjdEhlYXBLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChr
aW5kKSB7CisgICAgY2FzZSBJbnZhbGlkQWJzdHJhY3RIZWFwOgorICAgICAgICBvdXQucHJpbnQo
IkludmFsaWRBYnN0cmFjdEhlYXAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQnV0dGVy
Zmx5X3B1YmxpY0xlbmd0aDoKKyAgICAgICAgb3V0LnByaW50KCJCdXR0ZXJmbHlfcHVibGljTGVu
Z3RoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJ1dHRlcmZseV92ZWN0b3JMZW5ndGg6
CisgICAgICAgIG91dC5wcmludCgiQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBKU09iamVjdF9idXR0ZXJmbHk6CisgICAgICAgIG91dC5wcmludCgi
SlNPYmplY3RfYnV0dGVyZmx5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQ2VsbF9z
dHJ1Y3R1cmU6CisgICAgICAgIG91dC5wcmludCgiSlNDZWxsX3N0cnVjdHVyZSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBTdHJpbmdJbXBsX2hhc2hBbmRGbGFnczoKKyAgICAgICAgb3V0
LnByaW50KCJTdHJpbmdJbXBsX2hhc2hBbmRGbGFncyIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBOYW1lZFByb3BlcnRpZXM6CisgICAgICAgIG91dC5wcmludCgiTmFtZWRQcm9wZXJ0aWVz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlByb3BlcnRpZXM6Cisg
ICAgICAgIG91dC5wcmludCgiSW5kZXhlZEludDMyUHJvcGVydGllcyIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJbmRleGVkRG91YmxlUHJvcGVydGllczoKKyAgICAgICAgb3V0LnByaW50
KCJJbmRleGVkRG91YmxlUHJvcGVydGllcyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJ
bmRleGVkQ29udGlndW91c1Byb3BlcnRpZXM6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZENv
bnRpZ3VvdXNQcm9wZXJ0aWVzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFycmF5U3Rv
cmFnZVByb3BlcnRpZXM6CisgICAgICAgIG91dC5wcmludCgiQXJyYXlTdG9yYWdlUHJvcGVydGll
cyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYXJpYWJsZXM6CisgICAgICAgIG91dC5w
cmludCgiVmFyaWFibGVzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVkQXJyYXlQ
cm9wZXJ0aWVzOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVkQXJyYXlQcm9wZXJ0aWVzIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIExlbmd0aDoKKyAgICAgICAgb3V0LnByaW50KCJMZW5n
dGgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJzb2x1dGU6CisgICAgICAgIG91dC5w
cmludCgiQWJzb2x1dGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgV29ybGQ6CisgICAg
ICAgIG91dC5wcmludCgiV29ybGQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
REZHQWJzdHJhY3RIZWFwX2gKKyNkZWZpbmUgREZHQWJzdHJhY3RIZWFwX2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIEltcGxlbWVudHMgYSB0aHJlZS1sZXZlbCB0eXBlIGhp
ZXJhcmNoeToKKy8vIC0gV29ybGQgaXMgdGhlIHN1cGVydHlwZSBvZiBhbGwgb2YgdGhlIHRoaW5n
cy4KKy8vIC0gS2luZCB3aXRoIFRPUCBwYXlsb2FkIGlzIHRoZSBkaXJlY3Qgc3VidHlwZSBvZiBX
b3JsZC4KKy8vIC0gS2luZCB3aXRoIG5vbi1UT1AgcGF5bG9hZCBpcyB0aGUgZGlyZWN0IHN1YnR5
cGUgb2YgaXRzIGNvcnJlc3BvbmRpbmcgVE9QIEtpbmQuCisKK2VudW0gQWJzdHJhY3RIZWFwS2lu
ZCB7CisgICAgSW52YWxpZEhlYXBLaW5kLAorICAgIFdvcmxkLAorICAgIEJ1dHRlcmZseV9wdWJs
aWNMZW5ndGgsCisgICAgQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCwKKyAgICBKU09iamVjdF9idXR0
ZXJmbHksCisgICAgSlNDZWxsX3N0cnVjdHVyZSwKKyAgICBTdHJpbmdJbXBsX2hhc2hBbmRGbGFn
cywKKyAgICBOYW1lZFByb3BlcnRpZXMsCisgICAgSW5kZXhlZEludDMyUHJvcGVydGllcywKKyAg
ICBJbmRleGVkRG91YmxlUHJvcGVydGllcywKKyAgICBJbmRleGVkQ29udGlndW91c1Byb3BlcnRp
ZXMsCisgICAgQXJyYXlTdG9yYWdlUHJvcGVydGllcywKKyAgICBWYXJpYWJsZXMsCisgICAgVHlw
ZWRBcnJheVByb3BlcnRpZXMsCisgICAgQWJzb2x1dGUKK307CisKK2NsYXNzIEFic3RyYWN0SGVh
cCB7CitwdWJsaWM6CisgICAgY2xhc3MgUGF5bG9hZCB7CisgICAgcHVibGljOgorICAgICAgICBQ
YXlsb2FkKCkKKyAgICAgICAgICAgIDogbV9pc1RvcChmYWxzZSkKKyAgICAgICAgICAgICwgbV92
YWx1ZSgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFBheWxvYWQo
Ym9vbCBpc1RvcCwgaW50NjRfdCB2YWx1ZSkKKyAgICAgICAgICAgIDogbV9pc1RvcChpc1RvcCkK
KyAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKCEoaXNUb3AgJiYgdmFsdWUpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUGF5
bG9hZChpbnQ2NF90IHZhbHVlKQorICAgICAgICAgICAgOiBtX2lzVG9wKGZhbHNlKQorICAgICAg
ICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHN0YXRpYyBQYXlsb2FkIHRvcCgpIGNvbnN0IHsgcmV0dXJuIFBheWxvYWQodHJ1ZSwg
MCk7IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNUb3AoKSBjb25zdCB7IHJldHVybiBtX2lz
VG9wOyB9CisgICAgICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoIWlzVG9wKCkpOworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQYXlsb2FkJiBv
dGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faXNUb3AgPT0gb3Ro
ZXIubV9pc1RvcAorICAgICAgICAgICAgICAgICYmIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBheWxv
YWQmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IFBheWxvYWQmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNU
b3AoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gIW90aGVyLmlzVG9wKCk7CisgICAgICAgICAg
ICBpZiAob3RoZXIuaXNUb3AoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gdmFsdWUoKSA8IG90aGVyLnZhbHVlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGJvb2wgaXNEaXNqb2ludChjb25zdCBQYXlsb2FkJiBvdGhlcikgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUgIT0gb3RoZXIubV92
YWx1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvdmVybGFwcyhjb25zdCBQ
YXlsb2FkJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICFpc0Rp
c2pvaW50KG90aGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wg
bV9pc1RvcDsKKyAgICAgICAgaW50NjRfdCBtX3ZhbHVlOworICAgIH07CisgICAgCisgICAgQWJz
dHJhY3RIZWFwKCkKKyAgICB7CisgICAgICAgIG1fdmFsdWUgPSBlbmNvZGUoSW52YWxpZEFic3Ry
YWN0SGVhcCwgUGF5bG9hZCgpKTsKKyAgICB9CisgICAgCisgICAgQWJzdHJhY3RIZWFwKEFic3Ry
YWN0SGVhcEtpbmQga2luZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kICE9IEludmFsaWRB
YnN0cmFjdEhlYXApOworICAgICAgICBtX3ZhbHVlID0gZW5jb2RlKGtpbmQsIFBheWxvYWQ6OnRv
cCgpKTsKKyAgICB9CisgICAgCisgICAgQWJzdHJhY3RIZWFwKEFic3RyYWN0SGVhcEtpbmQga2lu
ZCwgUGF5bG9hZCBwYXlsb2FkKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgIT0gSW52YWxp
ZEFic3RyYWN0SGVhcCAmJiBraW5kICE9IFdvcmxkKTsKKyAgICAgICAgbV92YWx1ZSA9IGVuY29k
ZShraW5kLCBwYXlsb2FkKTsKKyAgICB9CisgICAgCisgICAgQWJzdHJhY3RIZWFwKFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICB7CisgICAgICAgIG1fdmFsdWUgPSBlbmNvZGUo
SW52YWxpZEFic3RyYWN0SGVhcCwgUGF5bG9hZDo6dG9wKCkpOworICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBJbnZhbGlkQWJzdHJhY3RI
ZWFwICYmICFwYXlsb2FkSW1wbCgpLmlzVG9wKCk7IH0KKyAgICAKKyAgICBBYnN0cmFjdEhlYXBL
aW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxBYnN0cmFjdEhlYXBLaW5kPiht
X3ZhbHVlICYgKCgxIDw8IHRvcFNoaWZ0KSAtIDEpKTsgfQorICAgIFBheWxvYWQgcGF5bG9hZCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpICE9IFdvcmxkICYmIGtpbmQoKSAh
PSBJbnZhbGlkQWJzdHJhY3RIZWFwKTsKKyAgICAgICAgcmV0dXJuIHBheWxvYWRJbXBsKCk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgaXNEaXNqb2ludChjb25zdCBBYnN0cmFjdEhlYXAmIG90aGVy
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBJbnZhbGlkQWJzdHJhY3RIZWFwKTsK
KyAgICAgICAgQVNTRVJUKG90aGVyLmtpbmQoKSAhPSBJbnZhbGlkQWJzdHJhY3RIZWFwKTsKKyAg
ICAgICAgaWYgKGtpbmQoKSA9PSBXb3JsZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKG90aGVyLmtpbmQoKSA9PSBXb3JsZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKGtpbmQoKSAhPSBvdGhlci5raW5kKCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHBheWxvYWQoKS5pc0Rpc2pvaW50KG90aGVyLnBheWxv
YWQoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgQWJzdHJhY3RIZWFw
JiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAhaXNEaXNqb2ludChvdGhlcik7CisgICAg
fQorICAgIAorICAgIEFic3RyYWN0SGVhcCBzdXBlcnR5cGUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSAhPSBJbnZhbGlkQWJzdHJhY3RIZWFwKTsKKyAgICAgICAgaWYgKGtp
bmQoKSA9PSBXb3JsZCkKKyAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdEhlYXAoKTsKKyAgICAg
ICAgaWYgKHBheWxvYWQoKS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIFdvcmxkOworICAg
ICAgICByZXR1cm4gQWJzdHJhY3RIZWFwKGtpbmQoKSk7CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDxpbnQ2
NF90Pjo6aGFzaChtX3ZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEFic3RyYWN0SGVhcCYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9
PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
QWJzdHJhY3RIZWFwJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgQWJzdHJhY3RIZWFw
JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChraW5kKCkgIT0gb3RoZXIua2luZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGtpbmQoKSA8IG90aGVyLmtpbmQoKTsKKyAgICAgICAgcmV0dXJuIHBh
eWxvYWQoKSA8IG90aGVyLnBheWxvYWQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09
IEludmFsaWRBYnN0cmFjdEhlYXAgJiYgcGF5bG9hZEltcGwoKS5pc1RvcCgpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRl
OgorICAgIHN0YXRpYyB1bnNpZ25lZCB2YWx1ZVNoaWZ0ID0gMTU7CisgICAgc3RhdGljIHVuc2ln
bmVkIHRvcFNoaWZ0ID0gMTQ7CisgICAgCisgICAgUGF5bG9hZCBwYXlsb2FkSW1wbCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gUGF5bG9hZCgobV92YWx1ZSA+PiB0b3BTaGlmdCkgJiAx
LCBtX3ZhbHVlID4+IHZhbHVlU2hpZnQpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgaW50NjRf
dCBlbmNvZGUoQWJzdHJhY3RIZWFwS2luZCBraW5kLCBQYXlsb2FkIHBheWxvYWQpCisgICAgewor
ICAgICAgICBpbnQ2NF90IGtpbmRBc0ludCA9IHN0YXRpY19jYXN0PGludDY0X3Q+KGtpbmQpOwor
ICAgICAgICBBU1NFUlQoa2luZEFzSW50IDwgKDEgPDwgdG9wU2hpZnQpKTsKKyAgICAgICAgcmV0
dXJuIGtpbmRBc0ludCB8IChwYXlsb2FkLmlzVG9wKCkgPDwgdG9wU2hpZnQpIHwgKHBheWxvYWQu
dmFsdWUoKSA8PCB2YWx1ZVNoaWZ0KTsKKyAgICB9CisgICAgCisgICAgaW50NjRfdCBtX3ZhbHVl
OworfTsKKworc3RydWN0IEFic3RyYWN0SGVhcEhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IEFic3RyYWN0SGVhcCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQWJzdHJhY3RIZWFwJiBhLCBjb25zdCBBYnN0cmFjdEhl
YXAmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0Nv
bXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6REZHOjpBYnN0cmFjdEhlYXBLaW5kKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpE
Rkc6OkFic3RyYWN0SGVhcD4geworICAgIHR5cGVkZWYgSlNDOjpERkc6QWJzdHJhY3RIZWFwSGFz
aCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpBYnN0cmFjdEhlYXA+IDogU2lt
cGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOkFic3RyYWN0SGVhcD4geyB9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
QWJzdHJhY3RIZWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJTZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitDbG9iYmVyU2V0OjpDbG9iYmVyU2V0KCkgeyB9CitDbG9iYmVyU2V0Ojp+Q2xv
YmJlclNldCgpIHsgfQorCit2b2lkIENsb2JiZXJTZXQ6OmFkZChBYnN0cmFjdEhlYXAgaGVhcCkK
K3sKKyAgICBtX2NvYmJlcnMuc2V0KGhlYXAsIHRydWUpOworICAgIHdoaWxlIChoZWFwLmtpbmQo
KSAhPSBXb3JsZCkgeworICAgICAgICBoZWFwID0gaGVhcC5zdXBlcnR5cGUoKTsKKyAgICAgICAg
bV9jbG9iYmVycy5hZGQoaGVhcCwgZmFsc2UpOworICAgIH0KK30KKworYm9vbCBDbG9iYmVyU2V0
Ojpjb250YWlucyhBYnN0cmFjdEhlYXAgaGVhcCkgY29uc3QKK3sKKyAgICBIYXNoTWFwPEFic3Ry
YWN0SGVhcCwgYm9vbD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX2Nsb2JiZXJzLmZpbmQoaGVh
cCk7CisgICAgaWYgKGl0ZXIgPT0gbV9jbG9iYmVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBpdGVyLT52YWx1ZTsKK30KKworYm9vbCBDbG9iYmVyU2V0OjpvdmVy
bGFwcyhBYnN0cmFjdEhlYXAgaGVhcCkgY29uc3QKK3sKKyAgICBpZiAobV9jbG9iYmVycy5maW5k
KGhlYXApICE9IG1fY2xvYmJlcnMuZW5kKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHdo
aWxlIChoZWFwLmtpbmQoKSAhPSBXb3JsZCkgeworICAgICAgICBoZWFwID0gaGVhcC5zdXBlcnR5
cGUoKTsKKyAgICAgICAgaWYgKGNvbnRhaW5zKGhlYXApKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDbG9iYmVyU2V0OjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgVmVjdG9yPEFic3RyYWN0SGVhcD4gaGVh
cHM7CisgICAgZm9yIChIYXNoTWFwPEFic3RyYWN0SGVhcCwgYm9vbD46Oml0ZXJhdG9yIGl0ZXIg
PSBtX2Nsb2JiZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jbG9iYmVycy5lbmQoKTsgKytpdGVyKQor
ICAgICAgICBoZWFwcy5hcHBlbmQoaXRlci0+a2V5KTsKKyAgICBzdGQ6OnNvcnQoaGVhcHMuYmVn
aW4oKSwgaGVhcHMuZW5kKCkpOworICAgIG91dC5wcmludCgiKERpcmVjdDpbIik7CisgICAgQ29t
bWFQcmludGVyIGNvbW1hOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBoZWFwcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAobV9jbG9iYmVycy5nZXQoaGVhcHNbaV0pKQorICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBoZWFwc1tpXSk7CisgICAgfQorICAgIG91dC5wcmludCgi
XSwgU3VwZXI6WyIpOworICAgIGNvbW1hID0gQ29tbWFQcmludGVyKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGhlYXBzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghbV9jbG9i
YmVycy5nZXQoaGVhcHNbaV0pKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBoZWFwc1tp
XSk7CisgICAgfQorICAgIG91dC5wcmludCgiXSkiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR0Nsb2JiZXJTZXRfaAorI2RlZmluZSBERkdDbG9iYmVyU2V0X2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdBYnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Ns
YXNzIENsb2JiZXJTZXQgeworcHVibGljOgorICAgIENsb2JiZXJTZXQoKTsKKyAgICB+Q2xvYmJl
clNldCgpOworICAgIAorICAgIHZvaWQgYWRkKEFic3RyYWN0SGVhcCk7CisgICAgYm9vbCBjb250
YWlucyhBYnN0cmFjdEhlYXApIGNvbnN0OworICAgIGJvb2wgb3ZlcmxhcHMoQWJzdHJhY3RIZWFw
KSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAK
K3ByaXZhdGU6CisgICAgLy8gTWFwcyBoZWFwIHRvOgorICAgIC8vIHRydWUgLS0+IGl0J3MgYSBk
aXJlY3QgY2xvYmJlcgorICAgIC8vIGZhbHNlIC0tPiBpdCdzIGp1c3QgYSBzdXBlcnR5cGUgb2Yg
YSBkaXJlY3QgY2xvYmJlcgorICAgIEhhc2hNYXA8QWJzdHJhY3RIZWFwLCBib29sPiBtX2Nsb2Ji
ZXJzOworfTsKKworY2xhc3MgQ2xvYmJlclNldEFkZCB7CitwdWJsaWM6CisgICAgQ2xvYmJlclNl
dEFkZChDbG9iYmVyU2V0JiBzZXQpCisgICAgICAgIDogbV9zZXQoc2V0KQorICAgIHsKKyAgICB9
CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAg
ICAgICAgbV9zZXQuYWRkKGhlYXApOworICAgIH0KK3ByaXZhdGU6CisgICAgQ2xvYmJlclNldCYg
bV9zZXQ7Cit9OworCitjbGFzcyBDbG9iYmVyU2V0T3ZlcmxhcHMgeworcHVibGljOgorICAgIENs
b2JiZXJTZXRPdmVybGFwcyhjb25zdCBDbG9iYmVyU2V0JiBzZXQpCisgICAgICAgIDogbV9zZXQo
c2V0KQorICAgICAgICAsIG1fcmVzdWx0KGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
dm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgbV9yZXN1
bHQgfD0gbV9zZXQub3ZlcmxhcHMoaGVhcCk7CisgICAgfQorICAgIAorICAgIGJvb2wgcmVzdWx0
KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHQ7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3Qg
Q2xvYmJlclNldCYgbV9zZXQ7CisgICAgYm9vbCBtX3Jlc3VsdDsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHQ2xvYmJlclNldF9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207165</attachid>
            <date>2013-07-19 18:52:56 -0700</date>
            <delta_ts>2013-07-19 21:58:19 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22707</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVh
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR0Fic3RyYWN0SGVhcC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAg
b3V0LnByaW50KCJUT1AiKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCh2YWx1ZSgpKTsK
K30KKwordm9pZCBBYnN0cmFjdEhlYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoa2luZCgpKTsKKyAgICBpZiAoa2luZCgpID09IEludmFsaWQgfHwga2lu
ZCgpID09IFdvcmxkKQorICAgICAgICByZXR1cm47CisgICAgb3V0LnByaW50KCIoIiwgcGF5bG9h
ZCgpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBX
VEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBBYnN0cmFjdEhlYXBLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChr
aW5kKSB7CisgICAgY2FzZSBJbnZhbGlkQWJzdHJhY3RIZWFwOgorICAgICAgICBvdXQucHJpbnQo
IkludmFsaWRBYnN0cmFjdEhlYXAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQnV0dGVy
Zmx5X3B1YmxpY0xlbmd0aDoKKyAgICAgICAgb3V0LnByaW50KCJCdXR0ZXJmbHlfcHVibGljTGVu
Z3RoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJ1dHRlcmZseV92ZWN0b3JMZW5ndGg6
CisgICAgICAgIG91dC5wcmludCgiQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBKU09iamVjdF9idXR0ZXJmbHk6CisgICAgICAgIG91dC5wcmludCgi
SlNPYmplY3RfYnV0dGVyZmx5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQ2VsbF9z
dHJ1Y3R1cmU6CisgICAgICAgIG91dC5wcmludCgiSlNDZWxsX3N0cnVjdHVyZSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBTdHJpbmdJbXBsX2hhc2hBbmRGbGFnczoKKyAgICAgICAgb3V0
LnByaW50KCJTdHJpbmdJbXBsX2hhc2hBbmRGbGFncyIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBOYW1lZFByb3BlcnRpZXM6CisgICAgICAgIG91dC5wcmludCgiTmFtZWRQcm9wZXJ0aWVz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZGV4ZWRJbnQzMlByb3BlcnRpZXM6Cisg
ICAgICAgIG91dC5wcmludCgiSW5kZXhlZEludDMyUHJvcGVydGllcyIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJbmRleGVkRG91YmxlUHJvcGVydGllczoKKyAgICAgICAgb3V0LnByaW50
KCJJbmRleGVkRG91YmxlUHJvcGVydGllcyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJ
bmRleGVkQ29udGlndW91c1Byb3BlcnRpZXM6CisgICAgICAgIG91dC5wcmludCgiSW5kZXhlZENv
bnRpZ3VvdXNQcm9wZXJ0aWVzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFycmF5U3Rv
cmFnZVByb3BlcnRpZXM6CisgICAgICAgIG91dC5wcmludCgiQXJyYXlTdG9yYWdlUHJvcGVydGll
cyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYXJpYWJsZXM6CisgICAgICAgIG91dC5w
cmludCgiVmFyaWFibGVzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVkQXJyYXlQ
cm9wZXJ0aWVzOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVkQXJyYXlQcm9wZXJ0aWVzIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIExlbmd0aDoKKyAgICAgICAgb3V0LnByaW50KCJMZW5n
dGgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJzb2x1dGU6CisgICAgICAgIG91dC5w
cmludCgiQWJzb2x1dGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgV29ybGQ6CisgICAg
ICAgIG91dC5wcmludCgiV29ybGQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
REZHQWJzdHJhY3RIZWFwX2gKKyNkZWZpbmUgREZHQWJzdHJhY3RIZWFwX2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIEltcGxlbWVudHMgYSB0aHJlZS1sZXZlbCB0eXBlIGhp
ZXJhcmNoeToKKy8vIC0gV29ybGQgaXMgdGhlIHN1cGVydHlwZSBvZiBhbGwgb2YgdGhlIHRoaW5n
cy4KKy8vIC0gS2luZCB3aXRoIFRPUCBwYXlsb2FkIGlzIHRoZSBkaXJlY3Qgc3VidHlwZSBvZiBX
b3JsZC4KKy8vIC0gS2luZCB3aXRoIG5vbi1UT1AgcGF5bG9hZCBpcyB0aGUgZGlyZWN0IHN1YnR5
cGUgb2YgaXRzIGNvcnJlc3BvbmRpbmcgVE9QIEtpbmQuCisKK2VudW0gQWJzdHJhY3RIZWFwS2lu
ZCB7CisgICAgSW52YWxpZEhlYXBLaW5kLAorICAgIFdvcmxkLAorICAgIEJ1dHRlcmZseV9wdWJs
aWNMZW5ndGgsCisgICAgQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCwKKyAgICBKU09iamVjdF9idXR0
ZXJmbHksCisgICAgSlNDZWxsX3N0cnVjdHVyZSwKKyAgICBTdHJpbmdJbXBsX2hhc2hBbmRGbGFn
cywKKyAgICBOYW1lZFByb3BlcnRpZXMsCisgICAgSW5kZXhlZEludDMyUHJvcGVydGllcywKKyAg
ICBJbmRleGVkRG91YmxlUHJvcGVydGllcywKKyAgICBJbmRleGVkQ29udGlndW91c1Byb3BlcnRp
ZXMsCisgICAgQXJyYXlTdG9yYWdlUHJvcGVydGllcywKKyAgICBWYXJpYWJsZXMsCisgICAgVHlw
ZWRBcnJheVByb3BlcnRpZXMsCisgICAgQWJzb2x1dGUsCisgICAgTWlzY0ZpZWxkcywgLy8gVXNl
IHRoaXMgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhhdCBpZiB0aGUgd29ybGQg
Z290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5vdCB3b3JrLgorICAgIFNp
ZGVTdGF0ZSAvLyBVc2UgdGhpcyBmb3Igd3JpdGVzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhh
dCBob2lzdGluZyB0aGUgbm9kZSBpcyBpbnZhbGlkLiBUaGlzIHdvcmtzIGJlY2F1c2Ugd2UgZG9u
J3QgaG9pc3QgYW55dGhpbmcgdGhhdCBoYXMgYW55IHNpZGUgZWZmZWN0cyBhdCBhbGwuCit9Owor
CitjbGFzcyBBYnN0cmFjdEhlYXAgeworcHVibGljOgorICAgIGNsYXNzIFBheWxvYWQgeworICAg
IHB1YmxpYzoKKyAgICAgICAgUGF5bG9hZCgpCisgICAgICAgICAgICA6IG1faXNUb3AoZmFsc2Up
CisgICAgICAgICAgICAsIG1fdmFsdWUoMCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBQYXlsb2FkKGJvb2wgaXNUb3AsIGludDY0X3QgdmFsdWUpCisgICAgICAgICAg
ICA6IG1faXNUb3AoaXNUb3ApCisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVCghKGlzVG9wICYmIHZhbHVlKSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIFBheWxvYWQoaW50NjRfdCB2YWx1ZSkKKyAgICAgICAgICAgIDogbV9p
c1RvcChmYWxzZSkKKyAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICAgICAgOiBtX2lzVG9wKGZhbHNlKQorICAgICAgICAgICAgLCBtX3ZhbHVlKHN0
YXRpY19jYXN0PGludD4ob3BlcmFuZCkpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgc3RhdGljIFBheWxvYWQgdG9wKCkgY29uc3QgeyByZXR1cm4gUGF5bG9hZCh0cnVl
LCAwKTsgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNUb3A7IH0KKyAgICAgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghaXNUb3AoKSk7CisgICAgICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBheWxvYWQm
IG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pc1RvcCA9PSBv
dGhlci5tX2lzVG9wCisgICAgICAgICAgICAgICAgJiYgbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUGF5
bG9hZCYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgUGF5bG9hZCYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChp
c1RvcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAhb3RoZXIuaXNUb3AoKTsKKyAgICAgICAg
ICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIHJldHVybiB2YWx1ZSgpIDwgb3RoZXIudmFsdWUoKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgYm9vbCBpc0Rpc2pvaW50KGNvbnN0IFBheWxvYWQmIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAob3RoZXIuaXNUb3AoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbV92YWx1ZSAhPSBvdGhlci5t
X3ZhbHVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG92ZXJsYXBzKGNvbnN0
IFBheWxvYWQmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIWlz
RGlzam9pbnQob3RoZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgYm9v
bCBtX2lzVG9wOworICAgICAgICBpbnQ2NF90IG1fdmFsdWU7CisgICAgfTsKKyAgICAKKyAgICBB
YnN0cmFjdEhlYXAoKQorICAgIHsKKyAgICAgICAgbV92YWx1ZSA9IGVuY29kZShJbnZhbGlkQWJz
dHJhY3RIZWFwLCBQYXlsb2FkKCkpOworICAgIH0KKyAgICAKKyAgICBBYnN0cmFjdEhlYXAoQWJz
dHJhY3RIZWFwS2luZCBraW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgIT0gSW52YWxp
ZEFic3RyYWN0SGVhcCk7CisgICAgICAgIG1fdmFsdWUgPSBlbmNvZGUoa2luZCwgUGF5bG9hZDo6
dG9wKCkpOworICAgIH0KKyAgICAKKyAgICBBYnN0cmFjdEhlYXAoQWJzdHJhY3RIZWFwS2luZCBr
aW5kLCBQYXlsb2FkIHBheWxvYWQpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCAhPSBJbnZh
bGlkQWJzdHJhY3RIZWFwICYmIGtpbmQgIT0gV29ybGQpOworICAgICAgICBtX3ZhbHVlID0gZW5j
b2RlKGtpbmQsIHBheWxvYWQpOworICAgIH0KKyAgICAKKyAgICBBYnN0cmFjdEhlYXAoV1RGOjpI
YXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgIHsKKyAgICAgICAgbV92YWx1ZSA9IGVuY29k
ZShJbnZhbGlkQWJzdHJhY3RIZWFwLCBQYXlsb2FkOjp0b3AoKSk7CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEludmFsaWRBYnN0cmFj
dEhlYXAgJiYgIXBheWxvYWRJbXBsKCkuaXNUb3AoKTsgfQorICAgIAorICAgIEFic3RyYWN0SGVh
cEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEFic3RyYWN0SGVhcEtpbmQ+
KG1fdmFsdWUgJiAoKDEgPDwgdG9wU2hpZnQpIC0gMSkpOyB9CisgICAgUGF5bG9hZCBwYXlsb2Fk
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgIT0gV29ybGQgJiYga2luZCgp
ICE9IEludmFsaWRBYnN0cmFjdEhlYXApOworICAgICAgICByZXR1cm4gcGF5bG9hZEltcGwoKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc0Rpc2pvaW50KGNvbnN0IEFic3RyYWN0SGVhcCYgb3Ro
ZXIpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpICE9IEludmFsaWRBYnN0cmFjdEhlYXAp
OworICAgICAgICBBU1NFUlQob3RoZXIua2luZCgpICE9IEludmFsaWRBYnN0cmFjdEhlYXApOwor
ICAgICAgICBpZiAoa2luZCgpID09IFdvcmxkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAob3RoZXIua2luZCgpID09IFdvcmxkKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAoa2luZCgpICE9IG90aGVyLmtpbmQoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4gcGF5bG9hZCgpLmlzRGlzam9pbnQob3RoZXIucGF5
bG9hZCgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBBYnN0cmFjdEhl
YXAmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFpc0Rpc2pvaW50KG90aGVyKTsKKyAg
ICB9CisgICAgCisgICAgQWJzdHJhY3RIZWFwIHN1cGVydHlwZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpICE9IEludmFsaWRBYnN0cmFjdEhlYXApOworICAgICAgICBpZiAo
a2luZCgpID09IFdvcmxkKQorICAgICAgICAgICAgcmV0dXJuIEFic3RyYWN0SGVhcCgpOworICAg
ICAgICBpZiAocGF5bG9hZCgpLmlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gV29ybGQ7Cisg
ICAgICAgIHJldHVybiBBYnN0cmFjdEhlYXAoa2luZCgpKTsKKyAgICB9CisgICAgCisgICAgdW5z
aWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPGlu
dDY0X3Q+OjpoYXNoKG1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQWJzdHJhY3RIZWFwJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVl
ID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBBYnN0cmFjdEhlYXAmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBBYnN0cmFjdEhl
YXAmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKGtpbmQoKSAhPSBvdGhlci5raW5kKCkpCisg
ICAgICAgICAgICByZXR1cm4ga2luZCgpIDwgb3RoZXIua2luZCgpOworICAgICAgICByZXR1cm4g
cGF5bG9hZCgpIDwgb3RoZXIucGF5bG9hZCgpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkg
PT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBwYXlsb2FkSW1wbCgpLmlzVG9wKCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKK3ByaXZh
dGU6CisgICAgc3RhdGljIHVuc2lnbmVkIHZhbHVlU2hpZnQgPSAxNTsKKyAgICBzdGF0aWMgdW5z
aWduZWQgdG9wU2hpZnQgPSAxNDsKKyAgICAKKyAgICBQYXlsb2FkIHBheWxvYWRJbXBsKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBQYXlsb2FkKChtX3ZhbHVlID4+IHRvcFNoaWZ0KSAm
IDEsIG1fdmFsdWUgPj4gdmFsdWVTaGlmdCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBpbnQ2
NF90IGVuY29kZShBYnN0cmFjdEhlYXBLaW5kIGtpbmQsIFBheWxvYWQgcGF5bG9hZCkKKyAgICB7
CisgICAgICAgIGludDY0X3Qga2luZEFzSW50ID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oa2luZCk7
CisgICAgICAgIEFTU0VSVChraW5kQXNJbnQgPCAoMSA8PCB0b3BTaGlmdCkpOworICAgICAgICBy
ZXR1cm4ga2luZEFzSW50IHwgKHBheWxvYWQuaXNUb3AoKSA8PCB0b3BTaGlmdCkgfCAocGF5bG9h
ZC52YWx1ZSgpIDw8IHZhbHVlU2hpZnQpOworICAgIH0KKyAgICAKKyAgICBpbnQ2NF90IG1fdmFs
dWU7Cit9OworCitzdHJ1Y3QgQWJzdHJhY3RIZWFwSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgQWJzdHJhY3RIZWFwJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBBYnN0cmFjdEhlYXAmIGEsIGNvbnN0IEFic3RyYWN0
SGVhcCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpERkc6OkFic3RyYWN0SGVhcEtpbmQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6
OkRGRzo6QWJzdHJhY3RIZWFwPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzpBYnN0cmFjdEhlYXBI
YXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsK
K3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkFic3RyYWN0SGVhcD4gOiBT
aW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6QWJzdHJhY3RIZWFwPiB7IH07CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdBYnN0cmFjdEhlYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlclNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK0Nsb2JiZXJTZXQ6OkNsb2JiZXJTZXQoKSB7IH0KK0Nsb2JiZXJTZXQ6On5D
bG9iYmVyU2V0KCkgeyB9CisKK3ZvaWQgQ2xvYmJlclNldDo6YWRkKEFic3RyYWN0SGVhcCBoZWFw
KQoreworICAgIEhhc2hNYXA8QWJzdHJhY3RIZWFwLCBib29sPjo6QWRkUmVzdWx0IHJlc3VsdCA9
IG1fY29iYmVycy5hZGQoaGVhcCwgdHJ1ZSk7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7
CisgICAgICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICByZXN1bHQtPml0ZXJhdG9yLnZhbHVlID0gdHJ1ZTsKKyAgICB9CisgICAgd2hp
bGUgKGhlYXAua2luZCgpICE9IFdvcmxkKSB7CisgICAgICAgIGhlYXAgPSBoZWFwLnN1cGVydHlw
ZSgpOworICAgICAgICBpZiAoIW1fY2xvYmJlcnMuYWRkKGhlYXAsIGZhbHNlKS5pc05ld0VudHJ5
KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworYm9vbCBDbG9iYmVyU2V0Ojpjb250
YWlucyhBYnN0cmFjdEhlYXAgaGVhcCkgY29uc3QKK3sKKyAgICBIYXNoTWFwPEFic3RyYWN0SGVh
cCwgYm9vbD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX2Nsb2JiZXJzLmZpbmQoaGVhcCk7Cisg
ICAgaWYgKGl0ZXIgPT0gbV9jbG9iYmVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiBpdGVyLT52YWx1ZTsKK30KKworYm9vbCBDbG9iYmVyU2V0OjpvdmVybGFwcyhB
YnN0cmFjdEhlYXAgaGVhcCkgY29uc3QKK3sKKyAgICBpZiAobV9jbG9iYmVycy5maW5kKGhlYXAp
ICE9IG1fY2xvYmJlcnMuZW5kKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHdoaWxlICho
ZWFwLmtpbmQoKSAhPSBXb3JsZCkgeworICAgICAgICBoZWFwID0gaGVhcC5zdXBlcnR5cGUoKTsK
KyAgICAgICAgaWYgKGNvbnRhaW5zKGhlYXApKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDbG9iYmVyU2V0OjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgVmVjdG9yPEFic3RyYWN0SGVhcD4gaGVhcHM7Cisg
ICAgZm9yIChIYXNoTWFwPEFic3RyYWN0SGVhcCwgYm9vbD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Ns
b2JiZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jbG9iYmVycy5lbmQoKTsgKytpdGVyKQorICAgICAg
ICBoZWFwcy5hcHBlbmQoaXRlci0+a2V5KTsKKyAgICBzdGQ6OnNvcnQoaGVhcHMuYmVnaW4oKSwg
aGVhcHMuZW5kKCkpOworICAgIG91dC5wcmludCgiKERpcmVjdDpbIik7CisgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBoZWFwcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAobV9jbG9iYmVycy5nZXQoaGVhcHNbaV0pKQorICAgICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBoZWFwc1tpXSk7CisgICAgfQorICAgIG91dC5wcmludCgiXSwgU3Vw
ZXI6WyIpOworICAgIGNvbW1hID0gQ29tbWFQcmludGVyKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGhlYXBzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghbV9jbG9iYmVycy5n
ZXQoaGVhcHNbaV0pKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBoZWFwc1tpXSk7Cisg
ICAgfQorICAgIG91dC5wcmludCgiXSkiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlclNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR0Nsb2JiZXJTZXRfaAorI2RlZmluZSBERkdDbG9iYmVyU2V0X2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0
cmFjdEhlYXAuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIENs
b2JiZXJTZXQgeworcHVibGljOgorICAgIENsb2JiZXJTZXQoKTsKKyAgICB+Q2xvYmJlclNldCgp
OworICAgIAorICAgIHZvaWQgYWRkKEFic3RyYWN0SGVhcCk7CisgICAgYm9vbCBjb250YWlucyhB
YnN0cmFjdEhlYXApIGNvbnN0OworICAgIGJvb2wgb3ZlcmxhcHMoQWJzdHJhY3RIZWFwKSBjb25z
dDsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZh
dGU6CisgICAgLy8gTWFwcyBoZWFwIHRvOgorICAgIC8vIHRydWUgLS0+IGl0J3MgYSBkaXJlY3Qg
Y2xvYmJlcgorICAgIC8vIGZhbHNlIC0tPiBpdCdzIGp1c3QgYSBzdXBlcnR5cGUgb2YgYSBkaXJl
Y3QgY2xvYmJlcgorICAgIEhhc2hNYXA8QWJzdHJhY3RIZWFwLCBib29sPiBtX2Nsb2JiZXJzOwor
fTsKKworY2xhc3MgQ2xvYmJlclNldEFkZCB7CitwdWJsaWM6CisgICAgQ2xvYmJlclNldEFkZChD
bG9iYmVyU2V0JiBzZXQpCisgICAgICAgIDogbV9zZXQoc2V0KQorICAgIHsKKyAgICB9CisgICAg
CisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAg
bV9zZXQuYWRkKGhlYXApOworICAgIH0KK3ByaXZhdGU6CisgICAgQ2xvYmJlclNldCYgbV9zZXQ7
Cit9OworCitjbGFzcyBDbG9iYmVyU2V0T3ZlcmxhcHMgeworcHVibGljOgorICAgIENsb2JiZXJT
ZXRPdmVybGFwcyhjb25zdCBDbG9iYmVyU2V0JiBzZXQpCisgICAgICAgIDogbV9zZXQoc2V0KQor
ICAgICAgICAsIG1fcmVzdWx0KGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBv
cGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgbV9yZXN1bHQgfD0g
bV9zZXQub3ZlcmxhcHMoaGVhcCk7CisgICAgfQorICAgIAorICAgIGJvb2wgcmVzdWx0KCkgY29u
c3QgeyByZXR1cm4gbV9yZXN1bHQ7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3QgQ2xvYmJl
clNldCYgbV9zZXQ7CisgICAgYm9vbCBtX3Jlc3VsdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ2xv
YmJlclNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDbG9iYmVyaXplX2gKKyNk
ZWZpbmUgREZHQ2xvYmJlcml6ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisjaW5jbHVk
ZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIFJlYWRGdW5jdG9yPgordm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgV3JpdGVGdW5jdG9yJiB3cml0ZSwg
UmVhZEZ1bmN0b3ImIHJlYWQpCit7CisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgY2Fz
ZSBKU0NvbnN0YW50OgorICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CisgICAgY2FzZSBJZGVudGl0
eToKKyAgICBjYXNlIFBoYW50b206CisgICAgY2FzZSBCaXRBbmQ6CisgICAgY2FzZSBCaXRPcjoK
KyAgICBjYXNlIEJpdFhvcjoKKyAgICBjYXNlIEJpdExTaGlmdDoKKyAgICBjYXNlIEJpdFJTaGlm
dDoKKyAgICBjYXNlIEJpdFVSU2hpZnQ6CisgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgY2Fz
ZSBBcml0aEFkZDoKKyAgICBjYXNlIEFyaXRoU3ViOgorICAgIGNhc2UgQXJpdGhOZWdhdGU6Cisg
ICAgY2FzZSBBcml0aE11bDoKKyAgICBjYXNlIEFyaXRoRGl2OgorICAgIGNhc2UgQXJpdGhNb2Q6
CisgICAgY2FzZSBBcml0aEFiczoKKyAgICBjYXNlIEFyaXRoTWluOgorICAgIGNhc2UgQXJpdGhT
cXJ0OgorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgTW92SGludEFuZENoZWNr
OgorICAgIGNhc2UgTW92SGludDoKKyAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBVcHNp
bG9uOgorICAgIGNhc2UgUGhpOgorICAgIGNhc2UgRmx1c2g6CisgICAgY2FzZSBQaGFudG9tTG9j
YWw6CisgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICBjYXNlIElubGluZVN0YXJ0OgorICAgICAg
ICB3cml0ZShTaWRlU3RhdGUpOworICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGVzZSBhcmUg
Zm9yd2FyZC1leGl0aW5nIG5vZGVzIHRoYXQgYXNzdW1lIHRoYXQgdGhlIHN1YnNlcXVlbnQgaW5z
dHJ1Y3Rpb24KKyAgICAvLyBpcyBhIE1vdkhpbnQsIGFuZCB0aGV5IHRyeSB0byByb2xsIGZvcndh
cmQgb3ZlciB0aGlzIE1vdkhpbnQgaW4gdGhlaXIKKyAgICAvLyBleGVjdXRpb24uIFRoaXMgbWFr
ZXMgaG9pc3RpbmcgdGhlbSBpbXBvc3NpYmxlIHdpdGhvdXQgYWRkaXRpb25hbCBtYWdpYy4gV2UK
KyAgICAvLyBtYXkgYWRkIHN1Y2ggbWFnaWMgZXZlbnR1YWxseSwgYnV0IGp1c3Qgbm90IHlldC4K
KyAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgIGNhc2UgRm9yd2FyZEludDMyVG9Eb3VibGU6
CisgICAgY2FzZSBEb3VibGVBc0ludDMyOgorICAgICAgICB3cml0ZShTaWRlU3RhdGUpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQ3JlYXRlVGhpczoKKyAgICAgICAgcmVh
ZChNaXNjRmllbGRzKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFZhbHVl
QWQ6CisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUb1RoaXM6CisgICAgICAgIHJlYWQoSlNDZWxs
X3N0cnVjdHVyZSk7CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgY2FzZSBHZXRDYWxsZWU6CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFw
KFZhcmlhYmxlcywgSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBTZXRDYWxsZWU6CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIEpTU3RhY2s6OkNhbGxlZSkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNh
c2UgR2V0TG9jYWw6CisgICAgY2FzZSBHZXRBcmd1bWVudDoKKyAgICAgICAgcmVhZChBYnN0cmFj
dEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFZhcmlh
Ymxlcywgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNh
c2UgR2V0TG9jYWxVbmxpbmtlZDoKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVz
LCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICBjYXNlIEdldEJ5VmFsOiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgYmUgc29tZXRo
aW5nIGxpa2UgemVybyBmdW4gdG8gd3JpdGUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
fQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHQ2xvYmJlcml6ZV9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207182</attachid>
            <date>2013-07-19 21:58:19 -0700</date>
            <delta_ts>2013-07-19 23:30:03 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31793</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVh
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiREZHQWJzdHJhY3RIZWFwLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIEFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChpc1RvcCgpKQorICAgICAgICBv
dXQucHJpbnQoIlRPUCIpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50KHZhbHVlKCkpOwor
fQorCit2b2lkIEFic3RyYWN0SGVhcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludChraW5kKCkpOworICAgIGlmIChraW5kKCkgPT0gSW52YWxpZCB8fCBraW5k
KCkgPT0gV29ybGQpCisgICAgICAgIHJldHVybjsKKyAgICBvdXQucHJpbnQoIigiLCBwYXlsb2Fk
KCksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdU
RiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIEFic3RyYWN0SGVhcEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtp
bmQpIHsKKyNkZWZpbmUgQUJTVFJBQ1RfSEVBUF9EVU1QKG5hbWUpICAgICAgICAgICAgXAorICAg
IGNhc2UgbmFtZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG91dC5w
cmludCgjbmFtZSk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuOworICAgIEZP
Ul9SRUFDSF9BQlNUUkFDVF9IRUFQX0tJTkQoQUJTVFJBQ1RfSEVBUF9EVU1QKQorI3VuZGVmIEFC
U1RSQUNUX0hFQVBfRFVNUAorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQWJzdHJhY3RIZWFwX2gKKyNkZWZp
bmUgREZHQWJzdHJhY3RIZWFwX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8v
IEltcGxlbWVudHMgYSB0aHJlZS1sZXZlbCB0eXBlIGhpZXJhcmNoeToKKy8vIC0gV29ybGQgaXMg
dGhlIHN1cGVydHlwZSBvZiBhbGwgb2YgdGhlIHRoaW5ncy4KKy8vIC0gS2luZCB3aXRoIFRPUCBw
YXlsb2FkIGlzIHRoZSBkaXJlY3Qgc3VidHlwZSBvZiBXb3JsZC4KKy8vIC0gS2luZCB3aXRoIG5v
bi1UT1AgcGF5bG9hZCBpcyB0aGUgZGlyZWN0IHN1YnR5cGUgb2YgaXRzIGNvcnJlc3BvbmRpbmcg
VE9QIEtpbmQuCisKKyNkZWZpbmUgRk9SX0VBQ0hfQUJTVFJBQ1RfSEVBUF9LSU5EKG1hY3JvKSBc
CisgICAgbWFjcm8oSW52YWxpZEhlYXBLaW5kKSBcCisgICAgbWFjcm8oV29ybGQpIFwKKyAgICBt
YWNybyhBcmd1bWVudHNfbnVtQXJndW1lbnRzKSBcCisgICAgbWFjcm8oQXJndW1lbnRzX292ZXJy
aWRlTGVuZ3RoKSBcCisgICAgbWFjcm8oQXJndW1lbnRzX3JlZ2lzdGVycykgXAorICAgIG1hY3Jv
KEFyZ3VtZW50c19zbG93QXJndW1lbnRzKSBcCisgICAgbWFjcm8oQnV0dGVyZmx5X3B1YmxpY0xl
bmd0aCkgXAorICAgIG1hY3JvKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpIFwKKyAgICBtYWNybyhK
U0NlbGxfc3RydWN0dXJlKSBcCisgICAgbWFjcm8oSlNGdW5jdGlvbl9leGVjdXRhYmxlKSBcCisg
ICAgbWFjcm8oSlNGdW5jdGlvbl9zY29wZUNoYWluKSBcCisgICAgbWFjcm8oSlNPYmplY3RfYnV0
dGVyZmx5KSBcCisgICAgbWFjcm8oTmFtZWRQcm9wZXJ0aWVzKSBcCisgICAgbWFjcm8oSW5kZXhl
ZEludDMyUHJvcGVydGllcykgXAorICAgIG1hY3JvKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKSBc
CisgICAgbWFjcm8oSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKSBcCisgICAgbWFjcm8oQXJy
YXlTdG9yYWdlUHJvcGVydGllcykgXAorICAgIG1hY3JvKFZhcmlhYmxlcykgXAorICAgIG1hY3Jv
KFR5cGVkQXJyYXlTdG9yYWdlUG9pbnRlcikgXAorICAgIG1hY3JvKFR5cGVkQXJyYXlQcm9wZXJ0
aWVzKSBcCisgICAgbWFjcm8oVHlwZWRBcnJheUxlbmd0aCkgXAorICAgIG1hY3JvKEFic29sdXRl
KSBcCisgICAgLyogVXNlIHRoaXMgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhh
dCBpZiB0aGUgd29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5v
dCB3b3JrLiAqL1wKKyAgICBtYWNybyhNaXNjRmllbGRzKSBcCisgICAgLyogVXNlIHRoaXMgZm9y
IHdyaXRlcyBvbmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaG9pc3RpbmcgdGhlIG5vZGUgaXMg
aW52YWxpZC4gVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRvbid0IGhvaXN0IGFueXRoaW5nIHRoYXQg
aGFzIGFueSBzaWRlIGVmZmVjdHMgYXQgYWxsLiAqL1wKKyAgICBtYWNybyhTaWRlU3RhdGUpCisK
K2VudW0gQWJzdHJhY3RIZWFwS2luZCB7CisjZGVmaW5lIEFCU1RSQUNUX0hFQVBfREVDTEFSQVRJ
T04obmFtZSkgbmFtZSwKKyAgICBGT1JfRUFDSF9BQlNUUkFDVF9IRUFQX0tJTkQoQUJTVFJBQ1Rf
SEVBUF9ERUNMQVJBVElPTikKKyN1bmRlZiBBQlNUUkFDVF9IRUFQX0RFQ0xBUkFUSU9OCit9Owor
CitjbGFzcyBBYnN0cmFjdEhlYXAgeworcHVibGljOgorICAgIGNsYXNzIFBheWxvYWQgeworICAg
IHB1YmxpYzoKKyAgICAgICAgUGF5bG9hZCgpCisgICAgICAgICAgICA6IG1faXNUb3AoZmFsc2Up
CisgICAgICAgICAgICAsIG1fdmFsdWUoMCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBQYXlsb2FkKGJvb2wgaXNUb3AsIGludDY0X3QgdmFsdWUpCisgICAgICAgICAg
ICA6IG1faXNUb3AoaXNUb3ApCisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVCghKGlzVG9wICYmIHZhbHVlKSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIFBheWxvYWQoaW50NjRfdCB2YWx1ZSkKKyAgICAgICAgICAgIDogbV9p
c1RvcChmYWxzZSkKKyAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KQorICAgICAgICAgICAgOiBtX2lzVG9wKGZhbHNlKQorICAgICAgICAgICAgLCBtX3ZhbHVlKHN0
YXRpY19jYXN0PGludD4ob3BlcmFuZCkpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgc3RhdGljIFBheWxvYWQgdG9wKCkgY29uc3QgeyByZXR1cm4gUGF5bG9hZCh0cnVl
LCAwKTsgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNUb3A7IH0KKyAgICAgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghaXNUb3AoKSk7CisgICAgICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBheWxvYWQm
IG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pc1RvcCA9PSBv
dGhlci5tX2lzVG9wCisgICAgICAgICAgICAgICAgJiYgbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUGF5
bG9hZCYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgUGF5bG9hZCYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChp
c1RvcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAhb3RoZXIuaXNUb3AoKTsKKyAgICAgICAg
ICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIHJldHVybiB2YWx1ZSgpIDwgb3RoZXIudmFsdWUoKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgYm9vbCBpc0Rpc2pvaW50KGNvbnN0IFBheWxvYWQmIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAob3RoZXIuaXNUb3AoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbV92YWx1ZSAhPSBvdGhlci5t
X3ZhbHVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG92ZXJsYXBzKGNvbnN0
IFBheWxvYWQmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIWlz
RGlzam9pbnQob3RoZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgYm9v
bCBtX2lzVG9wOworICAgICAgICBpbnQ2NF90IG1fdmFsdWU7CisgICAgfTsKKyAgICAKKyAgICBB
YnN0cmFjdEhlYXAoKQorICAgIHsKKyAgICAgICAgbV92YWx1ZSA9IGVuY29kZShJbnZhbGlkQWJz
dHJhY3RIZWFwLCBQYXlsb2FkKCkpOworICAgIH0KKyAgICAKKyAgICBBYnN0cmFjdEhlYXAoQWJz
dHJhY3RIZWFwS2luZCBraW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgIT0gSW52YWxp
ZEFic3RyYWN0SGVhcCk7CisgICAgICAgIG1fdmFsdWUgPSBlbmNvZGUoa2luZCwgUGF5bG9hZDo6
dG9wKCkpOworICAgIH0KKyAgICAKKyAgICBBYnN0cmFjdEhlYXAoQWJzdHJhY3RIZWFwS2luZCBr
aW5kLCBQYXlsb2FkIHBheWxvYWQpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCAhPSBJbnZh
bGlkQWJzdHJhY3RIZWFwICYmIGtpbmQgIT0gV29ybGQpOworICAgICAgICBtX3ZhbHVlID0gZW5j
b2RlKGtpbmQsIHBheWxvYWQpOworICAgIH0KKyAgICAKKyAgICBBYnN0cmFjdEhlYXAoV1RGOjpI
YXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgIHsKKyAgICAgICAgbV92YWx1ZSA9IGVuY29k
ZShJbnZhbGlkQWJzdHJhY3RIZWFwLCBQYXlsb2FkOjp0b3AoKSk7CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEludmFsaWRBYnN0cmFj
dEhlYXAgJiYgIXBheWxvYWRJbXBsKCkuaXNUb3AoKTsgfQorICAgIAorICAgIEFic3RyYWN0SGVh
cEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEFic3RyYWN0SGVhcEtpbmQ+
KG1fdmFsdWUgJiAoKDEgPDwgdG9wU2hpZnQpIC0gMSkpOyB9CisgICAgUGF5bG9hZCBwYXlsb2Fk
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgIT0gV29ybGQgJiYga2luZCgp
ICE9IEludmFsaWRBYnN0cmFjdEhlYXApOworICAgICAgICByZXR1cm4gcGF5bG9hZEltcGwoKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc0Rpc2pvaW50KGNvbnN0IEFic3RyYWN0SGVhcCYgb3Ro
ZXIpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpICE9IEludmFsaWRBYnN0cmFjdEhlYXAp
OworICAgICAgICBBU1NFUlQob3RoZXIua2luZCgpICE9IEludmFsaWRBYnN0cmFjdEhlYXApOwor
ICAgICAgICBpZiAoa2luZCgpID09IFdvcmxkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAob3RoZXIua2luZCgpID09IFdvcmxkKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAoa2luZCgpICE9IG90aGVyLmtpbmQoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4gcGF5bG9hZCgpLmlzRGlzam9pbnQob3RoZXIucGF5
bG9hZCgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBBYnN0cmFjdEhl
YXAmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFpc0Rpc2pvaW50KG90aGVyKTsKKyAg
ICB9CisgICAgCisgICAgQWJzdHJhY3RIZWFwIHN1cGVydHlwZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpICE9IEludmFsaWRBYnN0cmFjdEhlYXApOworICAgICAgICBpZiAo
a2luZCgpID09IFdvcmxkKQorICAgICAgICAgICAgcmV0dXJuIEFic3RyYWN0SGVhcCgpOworICAg
ICAgICBpZiAocGF5bG9hZCgpLmlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gV29ybGQ7Cisg
ICAgICAgIHJldHVybiBBYnN0cmFjdEhlYXAoa2luZCgpKTsKKyAgICB9CisgICAgCisgICAgdW5z
aWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPGlu
dDY0X3Q+OjpoYXNoKG1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQWJzdHJhY3RIZWFwJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVl
ID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBBYnN0cmFjdEhlYXAmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBBYnN0cmFjdEhl
YXAmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKGtpbmQoKSAhPSBvdGhlci5raW5kKCkpCisg
ICAgICAgICAgICByZXR1cm4ga2luZCgpIDwgb3RoZXIua2luZCgpOworICAgICAgICByZXR1cm4g
cGF5bG9hZCgpIDwgb3RoZXIucGF5bG9hZCgpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkg
PT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBwYXlsb2FkSW1wbCgpLmlzVG9wKCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKK3ByaXZh
dGU6CisgICAgc3RhdGljIHVuc2lnbmVkIHZhbHVlU2hpZnQgPSAxNTsKKyAgICBzdGF0aWMgdW5z
aWduZWQgdG9wU2hpZnQgPSAxNDsKKyAgICAKKyAgICBQYXlsb2FkIHBheWxvYWRJbXBsKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBQYXlsb2FkKChtX3ZhbHVlID4+IHRvcFNoaWZ0KSAm
IDEsIG1fdmFsdWUgPj4gdmFsdWVTaGlmdCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBpbnQ2
NF90IGVuY29kZShBYnN0cmFjdEhlYXBLaW5kIGtpbmQsIFBheWxvYWQgcGF5bG9hZCkKKyAgICB7
CisgICAgICAgIGludDY0X3Qga2luZEFzSW50ID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oa2luZCk7
CisgICAgICAgIEFTU0VSVChraW5kQXNJbnQgPCAoMSA8PCB0b3BTaGlmdCkpOworICAgICAgICBy
ZXR1cm4ga2luZEFzSW50IHwgKHBheWxvYWQuaXNUb3AoKSA8PCB0b3BTaGlmdCkgfCAocGF5bG9h
ZC52YWx1ZSgpIDw8IHZhbHVlU2hpZnQpOworICAgIH0KKyAgICAKKyAgICBpbnQ2NF90IG1fdmFs
dWU7Cit9OworCitzdHJ1Y3QgQWJzdHJhY3RIZWFwSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgQWJzdHJhY3RIZWFwJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBBYnN0cmFjdEhlYXAmIGEsIGNvbnN0IEFic3RyYWN0
SGVhcCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpERkc6OkFic3RyYWN0SGVhcEtpbmQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6
OkRGRzo6QWJzdHJhY3RIZWFwPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzpBYnN0cmFjdEhlYXBI
YXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsK
K3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkFic3RyYWN0SGVhcD4gOiBT
aW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6QWJzdHJhY3RIZWFwPiB7IH07CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdBYnN0cmFjdEhlYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlclNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK0Nsb2JiZXJTZXQ6OkNsb2JiZXJTZXQoKSB7IH0KK0Nsb2JiZXJTZXQ6On5D
bG9iYmVyU2V0KCkgeyB9CisKK3ZvaWQgQ2xvYmJlclNldDo6YWRkKEFic3RyYWN0SGVhcCBoZWFw
KQoreworICAgIEhhc2hNYXA8QWJzdHJhY3RIZWFwLCBib29sPjo6QWRkUmVzdWx0IHJlc3VsdCA9
IG1fY29iYmVycy5hZGQoaGVhcCwgdHJ1ZSk7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7
CisgICAgICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICByZXN1bHQtPml0ZXJhdG9yLnZhbHVlID0gdHJ1ZTsKKyAgICB9CisgICAgd2hp
bGUgKGhlYXAua2luZCgpICE9IFdvcmxkKSB7CisgICAgICAgIGhlYXAgPSBoZWFwLnN1cGVydHlw
ZSgpOworICAgICAgICBpZiAoIW1fY2xvYmJlcnMuYWRkKGhlYXAsIGZhbHNlKS5pc05ld0VudHJ5
KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworYm9vbCBDbG9iYmVyU2V0Ojpjb250
YWlucyhBYnN0cmFjdEhlYXAgaGVhcCkgY29uc3QKK3sKKyAgICBIYXNoTWFwPEFic3RyYWN0SGVh
cCwgYm9vbD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX2Nsb2JiZXJzLmZpbmQoaGVhcCk7Cisg
ICAgaWYgKGl0ZXIgPT0gbV9jbG9iYmVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiBpdGVyLT52YWx1ZTsKK30KKworYm9vbCBDbG9iYmVyU2V0OjpvdmVybGFwcyhB
YnN0cmFjdEhlYXAgaGVhcCkgY29uc3QKK3sKKyAgICBpZiAobV9jbG9iYmVycy5maW5kKGhlYXAp
ICE9IG1fY2xvYmJlcnMuZW5kKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHdoaWxlICho
ZWFwLmtpbmQoKSAhPSBXb3JsZCkgeworICAgICAgICBoZWFwID0gaGVhcC5zdXBlcnR5cGUoKTsK
KyAgICAgICAgaWYgKGNvbnRhaW5zKGhlYXApKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDbG9iYmVyU2V0OjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgVmVjdG9yPEFic3RyYWN0SGVhcD4gaGVhcHM7Cisg
ICAgZm9yIChIYXNoTWFwPEFic3RyYWN0SGVhcCwgYm9vbD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Ns
b2JiZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jbG9iYmVycy5lbmQoKTsgKytpdGVyKQorICAgICAg
ICBoZWFwcy5hcHBlbmQoaXRlci0+a2V5KTsKKyAgICBzdGQ6OnNvcnQoaGVhcHMuYmVnaW4oKSwg
aGVhcHMuZW5kKCkpOworICAgIG91dC5wcmludCgiKERpcmVjdDpbIik7CisgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBoZWFwcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAobV9jbG9iYmVycy5nZXQoaGVhcHNbaV0pKQorICAgICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBoZWFwc1tpXSk7CisgICAgfQorICAgIG91dC5wcmludCgiXSwgU3Vw
ZXI6WyIpOworICAgIGNvbW1hID0gQ29tbWFQcmludGVyKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGhlYXBzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghbV9jbG9iYmVycy5n
ZXQoaGVhcHNbaV0pKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBoZWFwc1tpXSk7Cisg
ICAgfQorICAgIG91dC5wcmludCgiXSkiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlclNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR0Nsb2JiZXJTZXRfaAorI2RlZmluZSBERkdDbG9iYmVyU2V0X2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0
cmFjdEhlYXAuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIENs
b2JiZXJTZXQgeworcHVibGljOgorICAgIENsb2JiZXJTZXQoKTsKKyAgICB+Q2xvYmJlclNldCgp
OworICAgIAorICAgIHZvaWQgYWRkKEFic3RyYWN0SGVhcCk7CisgICAgYm9vbCBjb250YWlucyhB
YnN0cmFjdEhlYXApIGNvbnN0OworICAgIGJvb2wgb3ZlcmxhcHMoQWJzdHJhY3RIZWFwKSBjb25z
dDsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZh
dGU6CisgICAgLy8gTWFwcyBoZWFwIHRvOgorICAgIC8vIHRydWUgLS0+IGl0J3MgYSBkaXJlY3Qg
Y2xvYmJlcgorICAgIC8vIGZhbHNlIC0tPiBpdCdzIGp1c3QgYSBzdXBlcnR5cGUgb2YgYSBkaXJl
Y3QgY2xvYmJlcgorICAgIEhhc2hNYXA8QWJzdHJhY3RIZWFwLCBib29sPiBtX2Nsb2JiZXJzOwor
fTsKKworY2xhc3MgQ2xvYmJlclNldEFkZCB7CitwdWJsaWM6CisgICAgQ2xvYmJlclNldEFkZChD
bG9iYmVyU2V0JiBzZXQpCisgICAgICAgIDogbV9zZXQoc2V0KQorICAgIHsKKyAgICB9CisgICAg
CisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAg
bV9zZXQuYWRkKGhlYXApOworICAgIH0KK3ByaXZhdGU6CisgICAgQ2xvYmJlclNldCYgbV9zZXQ7
Cit9OworCitjbGFzcyBDbG9iYmVyU2V0T3ZlcmxhcHMgeworcHVibGljOgorICAgIENsb2JiZXJT
ZXRPdmVybGFwcyhjb25zdCBDbG9iYmVyU2V0JiBzZXQpCisgICAgICAgIDogbV9zZXQoc2V0KQor
ICAgICAgICAsIG1fcmVzdWx0KGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBv
cGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgbV9yZXN1bHQgfD0g
bV9zZXQub3ZlcmxhcHMoaGVhcCk7CisgICAgfQorICAgIAorICAgIGJvb2wgcmVzdWx0KCkgY29u
c3QgeyByZXR1cm4gbV9yZXN1bHQ7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3QgQ2xvYmJl
clNldCYgbV9zZXQ7CisgICAgYm9vbCBtX3Jlc3VsdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ2xv
YmJlclNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDbG9iYmVyaXplX2gKKyNk
ZWZpbmUgREZHQ2xvYmJlcml6ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisjaW5jbHVk
ZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIFJlYWRGdW5jdG9yPgordm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgV3JpdGVGdW5jdG9yJiB3cml0ZSwg
UmVhZEZ1bmN0b3ImIHJlYWQpCit7CisgICAgLy8gU29tZSBub3RlczoKKyAgICAvLworICAgIC8v
IC0gV2UgY2Fubm90IGhvaXN0LCBvciBzaW5rLCBhbnl0aGluZyB0aGF0IGhhcyBlZmZlY3RzLiBU
aGlzIG1lYW5zIHRoYXQgdGhlCisgICAgLy8gICBlYXNpZXN0IHdheSBvZiBpbmRpY2F0aW5nIHRo
YXQgc29tZXRoaW5nIGNhbm5vdCBiZSBob2lzdGVkIGlzIHRvIGNsYWltCisgICAgLy8gICB0aGF0
IGl0IHNpZGUtZWZmZWN0cyBzb21lIG1pc2NlbGxhbmVvdXMgdGhpbmcuCisgICAgLy8KKyAgICAv
LyAtIFdlIGNhbm5vdCBob2lzdCBmb3J3YXJkLWV4aXRpbmcgbm9kZXMgd2l0aG91dCBzb21lIGFk
ZGl0aW9uYWwgZWZmb3J0LiBJCisgICAgLy8gICBiZWxpZXZlIHRoYXQgd2hhdCBpdCBjb21lcyBk
b3duIHRvIGlzIHRoYXQgZm9yd2FyZC1leGl0aW5nIGdlbmVyYWxseSBoYXZlCisgICAgLy8gICB0
aGVpciBOb2RlRXhpdHNGb3J3YXJkIGNsZWFyZWQgdXBvbiBob2lzdCwgZXhjZXB0IGZvciBmb3J3
YXJkLWV4aXRpbmcKKyAgICAvLyAgIG5vZGVzIHRoYXQgdGFrZSBib2d1cyBzdGF0ZSBhcyB0aGVp
ciBpbnB1dC4gVGhvc2UgYXJlIHN1YnN0YW50aWFsbHkKKyAgICAvLyAgIGhhcmRlci4gV2UgZGlz
YWJsZSBpdCBmb3Igbm93LiBJbiB0aGUgZnV0dXJlIHdlIGNvdWxkIGVuYWJsZSBpdCBieSBoYXZp
bmcKKyAgICAvLyAgIHZlcnNpb25zIG9mIHRob3NlIG5vZGVzIHRoYXQgYmFja3dhcmQtZXhpdCBp
bnN0ZWFkLCBidXQgSSdtIG5vdCBjb252aW5jZWQKKyAgICAvLyAgIG9mIHRoZSBzb3VuZG5lc3Mu
CisgICAgLy8KKyAgICAvLyAtIFNvbWUgbm9kZXMgbGllLCBhbmQgY2xhaW0gdGhhdCB0aGV5IGRv
IG5vdCByZWFkIHRoZSBKU0NlbGxfc3RydWN0dXJlLgorICAgIC8vICAgVGhlc2UgYXJlIG5vZGVz
IHRoYXQgdXNlIHRoZSBzdHJ1Y3R1cmUgaW4gYSB3YXkgdGhhdCBkb2VzIG5vdCBkZXBlbmQgb24K
KyAgICAvLyAgIHRoaW5ncyB0aGF0IGNoYW5nZSB1bmRlciBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMu
CisgICAgLy8KKyAgICAvLyAtIEl0J3MgaW1wbGljaXRseSB1bmRlcnN0b29kIHRoYXQgT1NSIGV4
aXRzIHJlYWQgdGhlIHdvcmxkLiBUaGlzIGlzIHdoeSB3ZQorICAgIC8vICAgZ2VuZXJhbGx5IGRv
bid0IG1vdmUgb3IgZWxpbWluYXRlIHN0b3Jlcy4gRXZlcnkgbm9kZSBjYW4gZXhpdCwgc28gdGhl
CisgICAgLy8gICByZWFkIHNldCBkb2VzIG5vdCByZWZsZWN0IHRoaW5ncyB0aGF0IHdvdWxkIGJl
IHJlYWQgaWYgd2UgZXhpdGVkLgorICAgIC8vICAgSW5zdGVhZCwgdGhlIHJlYWQgc2V0IHJlZmxl
Y3RzIHdoYXQgdGhlIG5vZGUgd2lsbCBoYXZlIHRvIHJlYWQgaWYgaXQKKyAgICAvLyAgICpkb2Vz
bid0KiBleGl0LgorICAgIC8vCisgICAgLy8gLSBCcm9hZGx5LCB3ZSBkb24ndCBzYXkgdGhhdCB3
ZSdyZSByZWFkaW5nIHNvbWV0aGluZyBpZiB0aGF0IHNvbWV0aGluZyBpcworICAgIC8vICAgaW1t
dXRhYmxlLgorICAgIC8vCisgICAgLy8gLSBXZSB0cnkgdG8gbWFrZSB0aGlzIHdvcmsgZXZlbiBw
cmlvciB0byB0eXBlIGluZmVyZW5jZSwganVzdCBzbyB0aGF0IHdlCisgICAgLy8gICBjYW4gdXNl
IGl0IGZvciBJUiBkdW1wcy4gTm8gcHJvbWlzZXMgb24gd2hldGhlciB0aGUgYW5zd2VycyBhcmUg
c291bmQKKyAgICAvLyAgIHByaW9yIHRvIHR5cGUgaW5mZXJlbmNlIC0gdGhvdWdoIHRoZXkgcHJv
YmFibHkgY291bGQgYmUgaWYgd2UgZGlkIHNvbWUKKyAgICAvLyAgIHNtYWxsIGhhY2tpbmcuCisg
ICAgCisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBKU0NvbnN0YW50OgorICAg
IGNhc2UgV2Vha0pTQ29uc3RhbnQ6CisgICAgY2FzZSBJZGVudGl0eToKKyAgICBjYXNlIFBoYW50
b206CisgICAgY2FzZSBCaXRBbmQ6CisgICAgY2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoK
KyAgICBjYXNlIEJpdExTaGlmdDoKKyAgICBjYXNlIEJpdFJTaGlmdDoKKyAgICBjYXNlIEJpdFVS
U2hpZnQ6CisgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgY2FzZSBBcml0aEFkZDoKKyAgICBj
YXNlIEFyaXRoU3ViOgorICAgIGNhc2UgQXJpdGhOZWdhdGU6CisgICAgY2FzZSBBcml0aE11bDoK
KyAgICBjYXNlIEFyaXRoRGl2OgorICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgY2FzZSBBcml0aEFi
czoKKyAgICBjYXNlIEFyaXRoTWluOgorICAgIGNhc2UgQXJpdGhTcXJ0OgorICAgIGNhc2UgR2V0
U2NvcGU6CisgICAgY2FzZSBTa2lwU2NvcGU6CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CisgICAgY2FzZSBNb3ZIaW50OgorICAgIGNhc2UgWm9t
YmllSGludDoKKyAgICBjYXNlIFVwc2lsb246CisgICAgY2FzZSBQaGk6CisgICAgY2FzZSBGbHVz
aDoKKyAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgIGNh
c2UgSW5saW5lU3RhcnQ6CisgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFRoZXNlIGFyZSBmb3J3YXJkLWV4aXRpbmcgbm9kZXMgdGhhdCBhc3N1bWUg
dGhhdCB0aGUgc3Vic2VxdWVudCBpbnN0cnVjdGlvbgorICAgIC8vIGlzIGEgTW92SGludCwgYW5k
IHRoZXkgdHJ5IHRvIHJvbGwgZm9yd2FyZCBvdmVyIHRoaXMgTW92SGludCBpbiB0aGVpcgorICAg
IC8vIGV4ZWN1dGlvbi4gVGhpcyBtYWtlcyBob2lzdGluZyB0aGVtIGltcG9zc2libGUgd2l0aG91
dCBhZGRpdGlvbmFsIG1hZ2ljLiBXZQorICAgIC8vIG1heSBhZGQgc3VjaCBtYWdpYyBldmVudHVh
bGx5LCBidXQganVzdCBub3QgeWV0LgorICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgY2Fz
ZSBGb3J3YXJkSW50MzJUb0RvdWJsZToKKyAgICBjYXNlIERvdWJsZUFzSW50MzI6CisgICAgICAg
IHdyaXRlKFNpZGVTdGF0ZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBD
cmVhdGVUaGlzOgorICAgIGNhc2UgVG9UaGlzOgorICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgY2FzZSBH
ZXRCeUlkOgorICAgIGNhc2UgR2V0QnlJZEZsdXNoOgorICAgIGNhc2UgUHV0QnlJZDoKKyAgICBj
YXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0ZShX
b3JsZCk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHZXRDYWxsZWU6Cisg
ICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6Q2FsbGVlKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTZXRDYWxsZWU6CisgICAgICAgIHdy
aXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkNhbGxlZSkpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgR2V0TG9jYWw6CisgICAgY2FzZSBHZXRBcmd1bWVu
dDoKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSk7
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKKyAgICAgICAgcmVh
ZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEdldEJ5VmFsOiB7CisgICAgICAgIEFycmF5
TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIHN3aXRjaCAobW9kZS50eXBl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICAg
ICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVk
OgorICAgICAgICAgICAgLy8gQXNzdW1lIHRoZSB3b3JzdCBzaW5jZSB3ZSBkb24ndCBoYXZlIHBy
b2ZpbGluZyB5ZXQuCisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRl
KFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgICAgICB3cml0ZShTaWRlU3RhdGUpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
CisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpTdHJp
bmc6CisgICAgICAgICAgICBpZiAobW9kZS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAg
ICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVGhpcyBhcHBl
YXJzIHRvIHJlYWQgbm90aGluZyBiZWNhdXNlIGl0J3Mgb25seSByZWFkaW5nIGltbXV0YWJsZSBk
YXRhLgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJy
YXk6OkFyZ3VtZW50czoKKyAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3JlZ2lzdGVycyk7Cisg
ICAgICAgICAgICByZWFkKFZhcmlhYmxlcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgICAgICAgICBpZiAobW9kZS5p
c0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5n
dGgpOworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAg
ICAgICAgICAgICAgcmVhZChJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAg
ICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICBpZiAobW9kZS5pc0luQm91
bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwor
ICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAgICAgICAg
ICAgICAgcmVhZChJbmRleGVkRG91YmxlUHJvcGVyaXRlcyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAg
ICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3Vu
ZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7Cisg
ICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAg
ICAgICByZWFkKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAg
ICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIEFycmF5OjpTbG93
UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgLy8gR2l2ZSB1cCBvbiBsaWZlIGZvciBub3cu
CisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpJbnQ4
QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgICAgIGNhc2UgQXJy
YXk6OkludDMyQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpVaW50
MTZBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgIGNhc2Ug
QXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5Ogor
ICAgICAgICAgICAgcmVhZChUeXBlZEFycmF5UHJvcGVydGllcyk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBQdXRCeVZhbDoKKyAgICBj
YXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJh
eU1vZGUoKTsKKyAgICAgICAgc3dpdGNoIChtb2RlLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAg
ICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICAgICAgY2FzZSBB
cnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICAvLyBBc3N1bWUgdGhlIHdvcnN0IHNp
bmNlIHdlIGRvbid0IGhhdmUgcHJvZmlsaW5nIHlldC4KKyAgICAgICAgICAgIHJlYWQoV29ybGQp
OworICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIHdyaXRl
KFNpZGVTdGF0ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAg
ICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3Jl
Z2lzdGVycyk7CisgICAgICAgICAgICByZWFkKEFyZ3VtZW50c19udW1Bcmd1bWVudHMpOworICAg
ICAgICAgICAgcmVhZChBcmd1bWVudHNfc2xvd0FyZ3VtZW50cyk7CisgICAgICAgICAgICB3cml0
ZShWYXJpYWJsZXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJyYXk6OkludDMyOgorICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlz
T3V0T2ZCb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAg
ICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAg
ICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgIHJlYWQoSW5kZXhl
ZEludDMyUHJvcGVydGllcyk7CisgICAgICAgICAgICB3cml0ZShJbmRleGVkSW50MzJQcm9wZXJ0
aWVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFy
cmF5OjpEb3VibGU6CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJv
dW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICAgICAg
d3JpdGUoV29ybGQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICByZWFk
KEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgcmVhZChJbmRleGVkRG91Ymxl
UHJvcGVydGllcyk7CisgICAgICAgICAgICB3cml0ZShJbmRleGVkRG91YmxlUHJvcGVydGllcyk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6
Q29udGlndW91czoKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgICAgICB3
cml0ZShXb3JsZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgIHJlYWQo
QnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICByZWFkKEluZGV4ZWRDb250aWd1
b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICB3cml0ZShJbmRleGVkQ29udGlndW91c1Byb3Bl
cnRpZXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
QXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3Rv
cmFnZToKKyAgICAgICAgICAgIC8vIEdpdmUgdXAgb24gbGlmZSBmb3Igbm93LgorICAgICAgICAg
ICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICBjYXNlIEFy
cmF5OjpJbnQxNkFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgICAg
ICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1w
ZWRBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgICAgIGNhc2Ug
QXJyYXk6OlVpbnQzMkFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgICAgIHdyaXRlKFR5cGVk
QXJyYXlQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgICAgICAKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgIGNhc2UgRm9yd2FyZENoZWNr
U3RydWN0dXJlOgorICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CisgICAg
Y2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CisgICAgY2FzZSBDaGVj
a0FycmF5OgorICAgIGNhc2UgRm9yd2FyZENoZWNrQXJyYXk6CisgICAgICAgIHJlYWQoSlNDZWxs
X3N0cnVjdHVyZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDaGVja0V4
ZWN1dGFibGU6CisgICAgICAgIHJlYWQoSlNGdW5jdGlvbl9leGVjdXRhYmxlKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICBjYXNlIFBoYW50
b21QdXRTdHJ1Y3R1cmU6CisgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1cmUpOworICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Cisg
ICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgICAgICByZWFkKEpT
T2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZseSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CisgICAgICAg
IHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICBjYXNlIEFycmF5aWZ5OgorICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKKyAgICAgICAg
cmVhZChKU0NlbGxfc3RydWN0dXJlKTsKKyAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkp
OworICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlKTsKKyAgICAgICAgd3JpdGUoSlNPYmpl
Y3RfYnV0dGVyZmx5KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBl
KCkgPT0gQXJyYXk6OlN0cmluZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmVhZChU
eXBlZEFycmF5U3RvcmFnZVBvaW50ZXIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
IGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFByb3BlcnRpZXMs
IGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgp
XS5vZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFB1dEJ5T2Zm
c2V0OgorICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoUHJvcGVydGllcywgZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLm9mZnNldCkpOwor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6IHsKKyAg
ICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dpdGNo
IChtb2RlLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOgorICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAg
ICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRB
cnJheVN0b3JhZ2U6CisgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlN0
cmluZzoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFy
cmF5OjpBcmd1bWVudHM6CisgICAgICAgICAgICByZWFkKEFyZ3VtZW50c19vdmVycmlkZUxlbmd0
aCk7CisgICAgICAgICAgICByZWFkKEFyZ3VtZW50c19udW1Bcmd1bWVudHMpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZWFkKFR5cGVkQXJyYXlMZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfQorICAgICAgICAKKyAgICBjYXNlIEdldE15U2NvcGU6CisgICAgICAgIHJlYWQoQWJzdHJh
Y3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6U2NvcGVDaGFpbikpOworICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGNhc2UgU2V0TXlTY29wZToKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RI
ZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6U2NvcGVDaGFpbikpOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgU2tpcFRvcFNjb3BlOgorICAgICAgICByZWFkKEFic3RyYWN0SGVh
cChWYXJpYWJsZXMsIGdyYXBoLm1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpOwor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgR2V0Q2xvc3VyZVJlZ2lzdGVyczoK
KyAgICAgICAgLy8gRklYTUUKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdDbG9iYmVyaXplX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207187</attachid>
            <date>2013-07-19 23:30:03 -0700</date>
            <delta_ts>2013-07-20 12:27:03 -0700</delta_ts>
            <desc>clobberizer is done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31750</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyOTM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDEzLTA3LTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogU3RyaW5nIEdldEJ5VmFsIG91dC1vZi1ib3VuZHMgaGFuZGxpbmcgaXMgc28g
d3JvbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
ODkzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgQnVuY2ggb2YgU3RyaW5nIEdldEJ5VmFsIG91dC1vZi1ib3VuZHMgZml4ZXM6CisgICAg
ICAgIAorICAgICAgICAtIEV2ZW4gaWYgdGhlIHN0cmluZyBwcm90byBjaGFpbiBpcyBzYW5lLCB3
ZSBuZWVkIHRvIHdhdGNoIG91dCBmb3IgbmVnYXRpdmUKKyAgICAgICAgICBpbmRpY2VzLiBUaGV5
IG1heSBnZXQgdmFsdWVzIG9yIGNhbGwgZ2V0dGVycyBpbiB0aGUgcHJvdG90eXBlcywgc2luY2Ug
cHJvdG8KKyAgICAgICAgICBzYW5pdHkgZG9lc24ndCBjaGVjayBmb3IgbmVnYXRpdmUgaW5kZXhl
ZCBwcm9wZXJ0aWVzLCBhcyB0aGV5IGFyZSBub3QKKyAgICAgICAgICB0ZWNobmljYWxseSBpbmRl
eGVkIHByb3BlcnRpZXMuCisgICAgICAgIAorICAgICAgICAtIEdldEJ5VmFsIFN0cmluZyBvdXQt
b2YtYm91bmRzIGRvZXMgaW4gZmFjdCBjbG9iYmVyV29ybGQoKS4gQ1NFIHNob3VsZCBiZQorICAg
ICAgICAgIGdpdmVuIHRoaXMgaW5mb3JtYXRpb24uCisgICAgICAgIAorICAgICAgICAtIEdldEJ5
VmFsIFN0cmluZyBvdXQtb2YtYm91bmRzIGRvZXMgaW4gZmFjdCBjbG9iYmVyV29ybGQoKS4gQ0ZB
IHNob3VsZCBiZQorICAgICAgICAgIGdpdmVuIHRoaXMgaW5mb3JtYXRpb24uCisgICAgICAgIAor
ICAgICAgICBBbHNvIGZpeGVkIHNvbWUgb3RoZXIgdGhpbmdzOgorICAgICAgICAKKyAgICAgICAg
LSBJZiB0aGUgREZHIGlzIGRpc2FibGVkLCB0aGUgdGVzdFJ1bm5lciBzaG91bGQgcHJldGVuZCB0
aGF0IHdlJ3ZlIGRvbmUgYQorICAgICAgICAgIGJ1bmNoIG9mIERGRyBjb21waWxlcy4gVGhhdCdz
IG5lY2Vzc2FyeSB0byBwcmV2ZW50IHRoZSB0ZXN0cyBmcm9tIHRpbWluZworICAgICAgICAgIG91
dC4KKyAgICAgICAgCisgICAgICAgIC0gRGlzYXNzZW1ibGVyIHNob3VsZG4ndCB0cnkgdG8gZHVt
cCBzb3VyY2UgY29kZSBzaW5jZSBpdCdzIG5vdCBzYWZlIGluIHRoZQorICAgICAgICAgIGNvbmN1
cnJlbnQgSklULgorCisgICAgICAgICogQVBJL0pTQ1Rlc3RSdW5uZXJVdGlscy5jcHA6CisgICAg
ICAgIChKU0M6Om51bWJlck9mREZHQ29tcGlsZXMpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6OjpleGVjdXRlRWZmZWN0cyk6
CisgICAgICAgICogZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
RGlzYXNzZW1ibGVyOjpkdW1wSGVhZGVyKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YnlWYWxJc1B1cmUpOgorICAgICAgICAqIGRmZy9ERkdT
YW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvcik6CisgICAg
ICAgIChKU0M6OkRGRzo6U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3I6OlNhbmVT
dHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpTYW5l
U3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvcjo6Z2VuZXJhdGVJbnRlcm5hbCk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcpOgorCiAyMDEzLTA3LTE5ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91cnRoVGllcjogU3RydWN0
dXJlOjppc1ZhbGlkT2Zmc2V0KCkgc2hvdWxkIGJlIGFibGUgdG8gdGVsbCB5b3UgaWYgeW91J3Jl
IGxvYWRpbmcgYSB2YWxpZCBKU1ZhbHVlLCBhbmQgbm90IGp1c3Qgbm90IGNyYXNoaW5nCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ1Rlc3RSdW5uZXJVdGlscy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NUZXN0UnVubmVyVXRpbHMuY3Bw
CShyZXZpc2lvbiAxNTI5MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ1Rlc3RS
dW5uZXJVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDE3ICs0OCwyMyBAQCBzdGF0aWMg
RnVuY3Rpb25FeGVjdXRhYmxlKiBnZXRFeGVjdXRhYmxlCiAKIEpTVmFsdWVSZWYgbnVtYmVyT2ZE
RkdDb21waWxlcyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB0aGVGdW5jdGlvblZh
bHVlUmVmKQogeworICAgIGJvb2wgcHJldGVuZFRvSGF2ZU1hbnlDb21waWxlcyA9IGZhbHNlOwor
I2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkgfHwgIU9wdGlv
bnM6OnVzZURGR0pJVCgpKQorICAgICAgICBwcmV0ZW5kVG9IYXZlTWFueUNvbXBpbGVzID0gdHJ1
ZTsKKyNlbHNlCisgICAgcHJldGVuZFRvSGF2ZU1hbnlDb21waWxlcyA9IHRydWU7CisjZW5kaWYK
KyAgICAKICAgICBpZiAoRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZ2V0RXhlY3V0
YWJsZShjb250ZXh0LCB0aGVGdW5jdGlvblZhbHVlUmVmKSkgewogICAgICAgICBDb2RlQmxvY2sq
IGJhc2VsaW5lQ29kZUJsb2NrID0gZXhlY3V0YWJsZS0+YmFzZWxpbmVDb2RlQmxvY2tGb3IoQ29k
ZUZvckNhbGwpOwogICAgICAgICAKICAgICAgICAgaWYgKCFiYXNlbGluZUNvZGVCbG9jaykKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAwKTsKIAotI2lmIEVO
QUJMRShERkdfSklUKSAgICAgICAgCisgICAgICAgIGlmIChwcmV0ZW5kVG9IYXZlTWFueUNvbXBp
bGVzKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIDEwMDAw
MDAuMCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBiYXNlbGlu
ZUNvZGVCbG9jay0+bnVtYmVyT2ZERkdDb21waWxlcygpKTsKLSNlbHNlCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAxMDAwMDAwLjApOwotI2VuZGlmCiAgICAgfQog
ICAgIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI5MzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMzY2LDEzICszNjYsMTQgQEAKIAkJMEZFNTA1N0IxNzhGNUI1MzAwQjM1
RjhDIC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTZFMTc4RjVCNTMwMEIzNUY4QyAv
KiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFNTA1N0MxNzhGNUI1MzAwQjM1RjhDIC8q
IERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU2RjE3OEY1QjUzMDBCMzVGOEMgLyogREZHU1NBQ29udmVy
c2lvblBoYXNlLmNwcCAqLzsgfTsKIAkJMEZFNTA1N0QxNzhGNUI1MzAwQjM1RjhDIC8qIERGR1NT
QUNvbnZlcnNpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFNTA1NzAxNzhGNUI1MzAwQjM1RjhDIC8qIERGR1NTQUNvbnZlcnNpb25QaGFz
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
RTUwNTgyMTc5NjVDM0QwMEIzNUY4QyAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU4
MDE3OTY1QzNEMDBCMzVGOEMgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwICov
OyB9OworCQkwRkU1MDU4MzE3OTY1QzNEMDBCMzVGOEMgLyogREZHTG9vcFByZUhlYWRlckNyZWF0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRTUwNTgxMTc5NjVDM0QwMEIzNUY4QyAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFz
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
RTUwNThBMTc5OEFCRjUwMEIzNUY4QyAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU4NjE3OThBQkY1
MDBCMzVGOEMgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTUwNThCMTc5OEFCRjUwMEIzNUY4QyAv
KiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1ODcxNzk4QUJGNTAwQjM1RjhDIC8qIERGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFNTA1OEMxNzk4QUJGNTAwQjM1RjhDIC8qIERGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRTUwNTg4MTc5OEFCRjUwMEIzNUY4QyAvKiBERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5jcHAgKi87IH07CiAJCTBGRTUwNThEMTc5OEFCRjUwMEIzNUY4QyAvKiBERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFNTA1ODkxNzk4QUJGNTAwQjM1RjhDIC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZF
NTA1OEYxNzk4QUU3MTAwQjM1RjhDIC8qIERGR01lcmdlTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1OEUxNzk4QUU2RjAwQjM1RjhDIC8q
IERGR01lcmdlTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTBGRTUwNTgyMTc5NjVDM0QwMEIzNUY4QyAvKiBERkdMb29wUHJlSGVhZGVyQ3Jl
YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkU1MDU4MDE3OTY1QzNEMDBCMzVGOEMgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9u
UGhhc2UuY3BwICovOyB9OwotCQkwRkU1MDU4MzE3OTY1QzNEMDBCMzVGOEMgLyogREZHTG9vcFBy
ZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTUwNTgxMTc5NjVDM0QwMEIzNUY4QyAvKiBERkdMb29wUHJlSGVhZGVy
Q3JlYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGRTUwNTkxMTc5QTQ5MjQwMEIzNUY4QyAvKiBERkdTYW5lU3RyaW5nR2V0QnlW
YWxTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFNTA1OTAxNzlBNDkyNDAwQjM1RjhDIC8qIERGR1NhbmVTdHJpbmdHZXRC
eVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZFODUzNEIxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRX
YXRjaHBvaW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNw
cCAqLzsgfTsKIAkJMEZFODUzNEMxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBv
aW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
ODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTA4MTcwNTEz
REIwMEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMDlGRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQWJi
cmV2aWF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xNDE3LDEzICsxNDE4LDE0IEBACiAJCTBGRTUwNTZFMTc4RjVCNTMwMEIzNUY4QyAv
KiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDsgcGF0aCA9IGRm
Zy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRTUwNTZGMTc4RjVCNTMwMEIzNUY4QyAvKiBERkdTU0FDb252ZXJzaW9uUGhh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU1NBQ29udmVy
c2lvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU1MDU3MDE3OEY1QjUzMDBCMzVGOEMgLyogREZH
U1NBQ29udmVyc2lvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1NTQUNvbnZlcnNpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU4MDE3OTY1QzNEMDBCMzVGOEMg
LyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFNTA1ODExNzk2NUMzRDAwQjM1RjhDIC8qIERGR0xvb3BQcmVIZWFk
ZXJDcmVhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xv
b3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHTG9vcFByZUhlYWRlckNy
ZWF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNTA1ODYxNzk4
QUJGNTAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOyBwYXRoID0gZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZF
NTA1ODcxNzk4QUJGNTAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNTA1ODgxNzk4QUJGNTAwQjM1RjhDIC8qIERG
R0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTUwNTg5
MTc5OEFCRjUwMEIzNUY4QyAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oOyBwYXRoID0g
ZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRTUwNThFMTc5OEFFNkYwMEIzNUY4QyAvKiBERkdNZXJnZU1vZGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHTWVyZ2VNb2RlLmg7IHBhdGggPSBkZmcvREZHTWVyZ2VNb2RlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRTUwNTgwMTc5NjVDM0QwMEIzNUY4QyAvKiBERkdMb29w
UHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
TG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRkU1MDU4MTE3OTY1QzNEMDBCMzVGOEMgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9u
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTG9vcFByZUhlYWRl
ckNyZWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFz
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU5MDE3OUE0OTI0MDBCMzVG
OEMgLyogREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5l
cmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4
RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHBhdGggPSBkZmcvREZHRGVz
aXJlZFdhdGNocG9pbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUz
NEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgcGF0aCA9IGRm
Zy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0aW9ucy5oOyBwYXRoID0gZnRsL0ZU
TEFiYnJldmlhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5ODUsNyAr
Mjk4Nyw2IEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBGRTUwNThFMTc5OEFFNkYwMEIz
NUY4QyAvKiBERkdNZXJnZU1vZGUuaCAqLywKIAkJCQkwRkU1MDU4NjE3OThBQkY1MDBCMzVGOEMg
LyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5oICovLAogCQkJCTBGRTUwNTg3MTc5OEFCRjUwMEIz
NUY4QyAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkz
MTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKQEAgLTMwODMsNiAr
MzA4NCw3IEBACiAJCQkJMEZCNEI1MUQxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0
YXRlLmggKi8sCiAJCQkJMEZFNTA1ODAxNzk2NUMzRDAwQjM1RjhDIC8qIERGR0xvb3BQcmVIZWFk
ZXJDcmVhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkU1MDU4MTE3OTY1QzNEMDBCMzVGOEMgLyog
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkU1MDU4RTE3OThBRTZG
MDBCMzVGOEMgLyogREZHTWVyZ2VNb2RlLmggKi8sCiAJCQkJMEYyQkRDM0QxNTIyODAxNzAwQ0Q4
OTEwIC8qIERGR01pbmlmaWVkR3JhcGguaCAqLywKIAkJCQkwRkI0QjUxMDE2QjNBOTY0MDAzRjY5
NkIgLyogREZHTWluaWZpZWRJRC5oICovLAogCQkJCTBGMkJEQzRDMTUyMjgxODMwMENEODkxMCAv
KiBERkdNaW5pZmllZE5vZGUuY3BwICovLApAQCAtMzEyOCw2ICszMTMwLDcgQEAKIAkJCQkwRjc2
NkQ0MjE1QjJBM0JEMDA4RjM2M0UgLyogREZHUmVnaXN0ZXJTZXQuaCAqLywKIAkJCQk4NkJCMDlC
RTEzOEUzODFCMDA1NjcwMkYgLyogREZHUmVwYXRjaC5jcHAgKi8sCiAJCQkJODZCQjA5QkYxMzhF
MzgxQjAwNTY3MDJGIC8qIERGR1JlcGF0Y2guaCAqLywKKwkJCQkwRkU1MDU5MDE3OUE0OTI0MDBC
MzVGOEMgLyogREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCAqLywKIAkJ
CQk4NkVDQTNGOTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oICovLAogCQkJCTBG
NzY2RDQ1MTVCMzcwMUQwMDhGMzYzRSAvKiBERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCAq
LywKIAkJCQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZl
UGxhbi5oICovLApAQCAtMzUwNyw2ICszNTEwLDcgQEAKIAkJCQkwRkMwOTdBMjE0NkIyOENDMDBD
RjI0NDIgLyogREZHVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNCM0EyQzE1NDc1MDAy
MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ3MTUy
MjgwMjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRTUwNTkxMTc5QTQ5MjQwMEIzNUY4QyAvKiBERkdTYW5lU3RyaW5nR2V0QnlWYWxT
bG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAw
QkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1MDU1RDE3ODdCMENG
MDBCMzVGOEMgLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQkRDNDgxNTIyODAyOTAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggaW4gSGVh
ZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE1MjkzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNzc2LDcgKzc3Niw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAvLyBHZXRCeVZhbCBvcGVyYXRpb24g
dGhlIGZhY3QgdGhhdCB3ZSdyZSB1c2luZyBhIHdhdGNocG9pbnQsIHVzaW5nCiAgICAgICAgICAg
ICAgICAgLy8gc29tZXRoaW5nIGxpa2UgQXJyYXk6OlNhbmVDaGFpbiAoZXhjZXB0IG5vdCBxdWl0
ZSwgYmVjYXVzZSB0aGF0CiAgICAgICAgICAgICAgICAgLy8gaW1wbGllcyBhbiBpbi1ib3VuZHMg
YWNjZXNzKS4gTm9uZSBvZiB0aGlzIGZlZWxzIGxpa2UgaXQncyB3b3J0aCBpdCwKLSAgICAgICAg
ICAgICAgICAvLyBzbyB3ZSdyZSBnb2luZyB3aXRoIFRPUCBmb3Igbm93LgorICAgICAgICAgICAg
ICAgIC8vIHNvIHdlJ3JlIGdvaW5nIHdpdGggVE9QIGZvciBub3cuIFRoZSBzYW1lIHRoaW5nIGFw
cGxpZXMgdG8KKyAgICAgICAgICAgICAgICAvLyBjbG9iYmVyaW5nIHRoZSB3b3JsZC4KKyAgICAg
ICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsK
ICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgu
bV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTUyOTM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw3ICs2OSw2IEBAIHZvaWQgRGlzYXNzZW1ibGVyOjpkdW1wSGVhZGVyKFByaW50U3RyZWEK
IHsKICAgICBvdXQucHJpbnQoIkdlbmVyYXRlZCBERkcgSklUIGNvZGUgZm9yICIsIENvZGVCbG9j
a1dpdGhKSVRUeXBlKG1fZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCksICIsIGlu
c3RydWN0aW9uIGNvdW50ID0gIiwgbV9ncmFwaC5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3Vu
dCgpLCAiOlxuIik7CiAgICAgb3V0LnByaW50KCIgICAgT3B0aW1pemVkIHdpdGggZXhlY3V0aW9u
IGNvdW50ZXIgPSAiLCBtX2dyYXBoLm1fcHJvZmlsZWRCbG9jay0+aml0RXhlY3V0ZUNvdW50ZXIo
KSwgIlxuIik7Ci0gICAgb3V0LnByaW50KCIgICAgU291cmNlOiAiLCBtX2dyYXBoLm1fY29kZUJs
b2NrLT5zb3VyY2VDb2RlT25PbmVMaW5lKCksICJcbiIpOwogICAgIG91dC5wcmludCgiICAgIENv
ZGUgYXQgWyIsIFJhd1BvaW50ZXIobGlua0J1ZmZlci5kZWJ1Z0FkZHJlc3MoKSksICIsICIsIFJh
d1BvaW50ZXIoc3RhdGljX2Nhc3Q8Y2hhcio+KGxpbmtCdWZmZXIuZGVidWdBZGRyZXNzKCkpICsg
bGlua0J1ZmZlci5kZWJ1Z1NpemUoKSksICIpOlxuIik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE1MjkzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDcgKzQ5Miw3IEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAg
ICAgICAgIHJldHVybiAhbm9kZS0+YXJyYXlNb2RlKCkubWF5U3RvcmVUb0hvbGUoKTsKICAgICAg
ICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgcmV0dXJuIG5vZGUtPm9wKCkgPT0g
R2V0QnlWYWw7CisgICAgICAgICAgICByZXR1cm4gbm9kZS0+b3AoKSA9PSBHZXRCeVZhbCAmJiBu
b2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAg
ICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gR2V0QnlWYWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhbmVTdHJp
bmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYW5lU3RyaW5nR2V0
QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvcl9oCisjZGVmaW5lIERGR1NhbmVT
dHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNp
bmNsdWRlICJERkdPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3Iu
aCIKKyNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBTYW5lU3RyaW5n
R2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvciA6IHB1YmxpYyBKdW1waW5nU2xvd1BhdGhHZW5lcmF0
b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXA+IHsKK3B1YmxpYzoKKyAgICBTYW5lU3RyaW5nR2V0QnlW
YWxTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXAm
IGZyb20sIFNwZWN1bGF0aXZlSklUKiBqaXQsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsCisgICAg
ICAgIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcpCisgICAgICAgIDogSnVtcGlu
Z1Nsb3dQYXRoR2VuZXJhdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wPihmcm9tLCBqaXQpCisgICAg
ICAgICwgbV9yZXN1bHRSZWdzKHJlc3VsdFJlZ3MpCisgICAgICAgICwgbV9iYXNlUmVnKGJhc2VS
ZWcpCisgICAgICAgICwgbV9wcm9wZXJ0eVJlZyhwcm9wZXJ0eVJlZykKKyAgICB7CisgICAgICAg
IGppdC0+c2lsZW50U3BpbGxBbGxSZWdpc3RlcnNJbXBsKGZhbHNlLCBtX3BsYW5zLCBleHRyYWN0
UmVzdWx0KHJlc3VsdFJlZ3MpKTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBn
ZW5lcmF0ZUludGVybmFsKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgeworICAgICAgICBsaW5r
RnJvbShqaXQpOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNOZWcg
PSBqaXQtPm1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okxlc3NU
aGFuLCBtX3Byb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKTsKKyAg
ICAgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgaml0LT5tX2ppdC5tb3ZlKAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSkpLCBtX3Jlc3VsdFJlZ3MuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgaml0LT5t
X2ppdC5tb3ZlKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCBtX3Jlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICBqaXQt
Pm1faml0Lm1vdmUoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDAp
LCBtX3Jlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyNlbmRpZgorICAgICAgICBqdW1wVG8oaml0
KTsKKyAgICAgICAgCisgICAgICAgIGlzTmVnLmxpbmsoJmppdC0+bV9qaXQpOworCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BsYW5zLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgaml0LT5zaWxlbnRTcGlsbChtX3BsYW5zW2ldKTsKKyAgICAgICAgaml0LT5jYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50LCBleHRyYWN0UmVzdWx0KG1fcmVzdWx0UmVn
cyksIG1fYmFzZVJlZywgbV9wcm9wZXJ0eVJlZyk7CisgICAgICAgIEdQUlJlZyBjYW5UcmFtcGxl
ID0gU3BlY3VsYXRpdmVKSVQ6OnBpY2tDYW5UcmFtcGxlKGV4dHJhY3RSZXN1bHQobV9yZXN1bHRS
ZWdzKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcGxhbnMuc2l6ZSgpOyBpLS07KQor
ICAgICAgICAgICAgaml0LT5zaWxlbnRGaWxsKG1fcGxhbnNbaV0sIGNhblRyYW1wbGUpOworICAg
ICAgICAKKyAgICAgICAganVtcFRvKGppdCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBK
U1ZhbHVlUmVncyBtX3Jlc3VsdFJlZ3M7CisgICAgR1BSUmVnIG1fYmFzZVJlZzsKKyAgICBHUFJS
ZWcgbV9wcm9wZXJ0eVJlZzsKKyAgICBWZWN0b3I8U2lsZW50UmVnaXN0ZXJTYXZlUGxhbiwgMj4g
bV9wbGFuczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhH
ZW5lcmF0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTUyOTM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiREZHQmluYXJ5U3dpdGNoLmgiCiAjaW5jbHVkZSAiREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xv
d1BhdGhHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0
aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCkBAIC0yMTE0
LDE2ICsyMTE1LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QK
ICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0Lmdsb2JhbE9iamVj
dEZvcihub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgaWYgKGdsb2JhbE9iamVjdC0+c3RyaW5n
UHJvdG90eXBlQ2hhaW5Jc1NhbmUoKSkgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aE1vdmUoCi0g
ICAgICAgICAgICAgICAgICAgIG91dE9mQm91bmRzLCB0aGlzLCBUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwKLSAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJl
ZykpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoYWRvcHRQdHIobmV3IFNhbmVT
dHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIG91dE9mQm91
bmRzLCB0aGlzLCBKU1ZhbHVlUmVncyhzY3JhdGNoUmVnKSwgYmFzZVJlZywgcHJvcGVydHlSZWcp
KSk7CiAjZWxzZQotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAg
ICAgICAgc2xvd1BhdGhNb3ZlKAotICAgICAgICAgICAgICAgICAgICBvdXRPZkJvdW5kcywgdGhp
cywKLSAgICAgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlc3VsdFRhZ1JlZywKLSAgICAgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKDApLCBz
Y3JhdGNoUmVnKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihhZG9wdFB0cihu
ZXcgU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAg
b3V0T2ZCb3VuZHMsIHRoaXMsIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgc2NyYXRjaFJlZyks
CisgICAgICAgICAgICAgICAgYmFzZVJlZywgcHJvcGVydHlSZWcpKSk7CiAjZW5kaWYKICAgICAg
ICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyOTM5
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTMtMDctMTkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAg
ICBmb3VydGhUaWVyOiBTdHJpbmcgR2V0QnlWYWwgb3V0LW9mLWJvdW5kcyBoYW5kbGluZyBpcyBz
byB3cm9uZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE4OTM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBmYXN0L2pzL2RmZy1zdHJpbmctb3V0LW9mLWJvdW5kcy1jaGVjay1zdHJ1Y3R1cmUtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL2RmZy1zdHJpbmctb3V0LW9mLWJvdW5k
cy1jaGVjay1zdHJ1Y3R1cmUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9kZmctc3Ry
aW5nLW91dC1vZi1ib3VuZHMtY3NlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9qcy9kZmctc3RyaW5nLW91dC1vZi1ib3VuZHMtY3NlLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvanMvZGZnLXN0cmluZy1vdXQtb2YtYm91bmRzLW5lZ2F0aXZlLWNoZWNrLXN0cnVjdHVy
ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvZGZnLXN0cmluZy1vdXQt
b2YtYm91bmRzLW5lZ2F0aXZlLWNoZWNrLXN0cnVjdHVyZS5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2pzL2RmZy1zdHJpbmctb3V0LW9mLWJvdW5kcy1uZWdhdGl2ZS1wcm90by12YWx1ZS1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvZGZnLXN0cmluZy1vdXQtb2Yt
Ym91bmRzLW5lZ2F0aXZlLXByb3RvLXZhbHVlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
anMvanNjLXRlc3QtbGlzdDoKKyAgICAgICAgKiBmYXN0L2pzL3NjcmlwdC10ZXN0cy9kZmctc3Ry
aW5nLW91dC1vZi1ib3VuZHMtY2hlY2stc3RydWN0dXJlLmpzOiBBZGRlZC4KKyAgICAgICAgKGZv
byk6CisgICAgICAgICogZmFzdC9qcy9zY3JpcHQtdGVzdHMvZGZnLXN0cmluZy1vdXQtb2YtYm91
bmRzLWNzZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAqIGZhc3QvanMvc2Ny
aXB0LXRlc3RzL2RmZy1zdHJpbmctb3V0LW9mLWJvdW5kcy1uZWdhdGl2ZS1jaGVjay1zdHJ1Y3R1
cmUuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKHdoaWxlKToKKyAgICAgICAg
KiBmYXN0L2pzL3NjcmlwdC10ZXN0cy9kZmctc3RyaW5nLW91dC1vZi1ib3VuZHMtbmVnYXRpdmUt
cHJvdG8tdmFsdWUuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwogMjAxMy0wNi0yNSAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRpZXI6IERGRyBz
aG91bGQgc3VwcG9ydCBzd2l0Y2hfc3RyaW5nCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2Rm
Zy1zdHJpbmctb3V0LW9mLWJvdW5kcy1jaGVjay1zdHJ1Y3R1cmUtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvZGZnLXN0cmluZy1vdXQtb2YtYm91bmRzLWNo
ZWNrLXN0cnVjdHVyZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2pzL2RmZy1zdHJpbmctb3V0LW9mLWJvdW5kcy1jaGVjay1zdHJ1Y3R1cmUtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOSBAQAorVGVzdHMgd2hhdCBoYXBwZW5zIHdo
ZW4geW91IGRvIGEgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb24gYSBzdHJpbmcgYW5kIHVzZSB0aGF0
IHRvIGluc3RhbGwgYSBnZXR0ZXIgdGhhdCBjbG9iYmVycyBhIHN0cnVjdHVyZS4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1Bhc3NlZCBzb21lIHRlc3RzIHNpbGVudGx5LgorCitU
RVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvZGZnLXN0cmluZy1vdXQt
b2YtYm91bmRzLWNoZWNrLXN0cnVjdHVyZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvanMvZGZnLXN0cmluZy1vdXQtb2YtYm91bmRzLWNoZWNrLXN0cnVjdHVyZS5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9kZmctc3RyaW5nLW91dC1vZi1ib3Vu
ZHMtY2hlY2stc3RydWN0dXJlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2RmZy1zdHJpbmctb3V0
LW9mLWJvdW5kcy1jaGVjay1zdHJ1Y3R1cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9qcy9kZmctc3RyaW5nLW91dC1vZi1ib3VuZHMtY3NlLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2RmZy1zdHJpbmctb3V0
LW9mLWJvdW5kcy1jc2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9qcy9kZmctc3RyaW5nLW91dC1vZi1ib3VuZHMtY3NlLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKK1Rlc3RzIHdoYXQgaGFwcGVucyB3aGVuIHlvdSBwcmVz
ZW50IGEgQ1NFIG9wcG9ydHVuaXR5IGFjcm9zcyBhbiBvdXQtb2YtYm91bmRzIHN0cmluZyBhY2Nl
c3MuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQYXNzZWQgc29tZSB0ZXN0cyBz
aWxlbnRseS4KKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2Rm
Zy1zdHJpbmctb3V0LW9mLWJvdW5kcy1jc2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2pzL2RmZy1zdHJpbmctb3V0LW9mLWJvdW5kcy1jc2UuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvanMvZGZnLXN0cmluZy1vdXQtb2YtYm91bmRzLWNzZS5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAi
LS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dCBzcmM9InNjcmlwdC10ZXN0cy9kZmctc3RyaW5nLW91dC1vZi1ib3VuZHMtY3NlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvZGZnLXN0cmluZy1v
dXQtb2YtYm91bmRzLW5lZ2F0aXZlLWNoZWNrLXN0cnVjdHVyZS1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9kZmctc3RyaW5nLW91dC1vZi1ib3VuZHMtbmVn
YXRpdmUtY2hlY2stc3RydWN0dXJlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvanMvZGZnLXN0cmluZy1vdXQtb2YtYm91bmRzLW5lZ2F0aXZlLWNoZWNrLXN0
cnVjdHVyZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5IEBACitUZXN0
cyB3aGF0IGhhcHBlbnMgd2hlbiB5b3UgZG8gYSBuZWdhdGl2ZSBvdXQtb2YtYm91bmRzIGFjY2Vz
cyBvbiBhIHN0cmluZyBhbmQgdXNlIHRoYXQgdG8gaW5zdGFsbCBhIGdldHRlciB0aGF0IGNsb2Ji
ZXJzIGEgc3RydWN0dXJlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUGFzc2Vk
IHNvbWUgdGVzdHMgc2lsZW50bHkuCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9qcy9kZmctc3RyaW5nLW91dC1vZi1ib3VuZHMtbmVnYXRpdmUtY2hlY2stc3RydWN0
dXJlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9kZmctc3RyaW5nLW91
dC1vZi1ib3VuZHMtbmVnYXRpdmUtY2hlY2stc3RydWN0dXJlLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2pzL2RmZy1zdHJpbmctb3V0LW9mLWJvdW5kcy1uZWdhdGl2ZS1j
aGVjay1zdHJ1Y3R1cmUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZGZnLXN0cmluZy1vdXQtb2Yt
Ym91bmRzLW5lZ2F0aXZlLWNoZWNrLXN0cnVjdHVyZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2RmZy1zdHJpbmctb3V0LW9mLWJvdW5kcy1uZWdh
dGl2ZS1wcm90by12YWx1ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9qcy9kZmctc3RyaW5nLW91dC1vZi1ib3VuZHMtbmVnYXRpdmUtcHJvdG8tdmFsdWUtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9kZmctc3RyaW5n
LW91dC1vZi1ib3VuZHMtbmVnYXRpdmUtcHJvdG8tdmFsdWUtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOSBAQAorVGVzdHMgd2hhdCBoYXBwZW5zIHdoZW4geW91IGRvIGEg
bmVnYXRpdmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb24gYSBzdHJpbmcgd2hpbGUgdGhlIHByb3Rv
dHlwZSBoYXMgYSBuZWdhdGl2ZSBpbmRleGVkIHByb3BlcnR5LgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUGFzc2VkIHNvbWUgdGVzdHMgc2lsZW50bHkuCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9kZmctc3RyaW5nLW91dC1vZi1ib3VuZHMt
bmVnYXRpdmUtcHJvdG8tdmFsdWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2pzL2RmZy1zdHJpbmctb3V0LW9mLWJvdW5kcy1uZWdhdGl2ZS1wcm90by12YWx1ZS5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9kZmctc3RyaW5nLW91dC1vZi1ib3Vu
ZHMtbmVnYXRpdmUtcHJvdG8tdmFsdWUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZGZnLXN0cmlu
Zy1vdXQtb2YtYm91bmRzLW5lZ2F0aXZlLXByb3RvLXZhbHVlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvanNjLXRlc3QtbGlzdAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2pzYy10ZXN0LWxpc3QJKHJldmlzaW9uIDE1MjkzNykK
KysrIExheW91dFRlc3RzL2Zhc3QvanMvanNjLXRlc3QtbGlzdAkod29ya2luZyBjb3B5KQpAQCAt
MTk5LDYgKzE5OSwxMCBAQCBmYXN0L2pzL2RmZy1wdXRieXZhbC1jZmEtY2xvYmJlcgogZmFzdC9q
cy9kZmctcmVkdW5kYW50LWxvYWQtb2YtY2FwdHVyZWQtdmFyaWFibGUtcHJvdmVuLWNvbnN0YW50
CiBmYXN0L2pzL2RmZy1zaWRlLWVmZmVjdC1hc3NpZ25tZW50LW9zci1leGl0CiBmYXN0L2pzL2Rm
Zy1zcXJ0LWJhY2t3YXJkcy1wcm9wYWdhdGlvbgorZmFzdC9qcy9kZmctc3RyaW5nLW91dC1vZi1i
b3VuZHMtY2hlY2stc3RydWN0dXJlCitmYXN0L2pzL2RmZy1zdHJpbmctb3V0LW9mLWJvdW5kcy1j
c2UKK2Zhc3QvanMvZGZnLXN0cmluZy1vdXQtb2YtYm91bmRzLW5lZ2F0aXZlLWNoZWNrLXN0cnVj
dHVyZQorZmFzdC9qcy9kZmctc3RyaW5nLW91dC1vZi1ib3VuZHMtbmVnYXRpdmUtcHJvdG8tdmFs
dWUKIGZhc3QvanMvZGZnLXN0cmluZy1zdHJpY3RlcQogZmFzdC9qcy9kZmctdGVhci1vZmYtYXJn
dW1lbnRzLW5vdC1hY3RpdmF0aW9uCiBmYXN0L2pzL2RmZy10by1zdHJpbmctYmFkLXRvU3RyaW5n
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9kZmctc3RyaW5nLW91dC1v
Zi1ib3VuZHMtY2hlY2stc3RydWN0dXJlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvanMvc2NyaXB0LXRlc3RzL2RmZy1zdHJpbmctb3V0LW9mLWJvdW5kcy1jaGVjay1zdHJ1Y3R1
cmUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9k
Zmctc3RyaW5nLW91dC1vZi1ib3VuZHMtY2hlY2stc3RydWN0dXJlLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjkgQEAKK2Rlc2NyaXB0aW9uKAorIlRlc3RzIHdoYXQgaGFwcGVucyB3aGVu
IHlvdSBkbyBhIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIGEgc3RyaW5nIGFuZCB1c2UgdGhhdCB0
byBpbnN0YWxsIGEgZ2V0dGVyIHRoYXQgY2xvYmJlcnMgYSBzdHJ1Y3R1cmUuIgorKTsKKworZnVu
Y3Rpb24gZm9vKHMsIG8pIHsKKyAgICB2YXIgeCA9IG8uZjsKKyAgICBzWzQyXTsKKyAgICB2YXIg
eSA9IG8uZzsKKyAgICByZXR1cm4geCArIHk7Cit9CisKK25vSW5saW5lKGZvbyk7CitzaWxlbnRU
ZXN0UGFzcyA9IHRydWU7CisKK3ZhciB0aGVPYmplY3QgPSB7fTsKKwordmFyIGRpZEdldENhbGxl
ZCA9IGZhbHNlOworU3RyaW5nLnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKCI0MiIsIGZ1bmN0
aW9uKCkgeyBkaWRHZXRDYWxsZWQgPSB0cnVlOyBkZWxldGUgdGhlT2JqZWN0Lmc7IHRoZU9iamVj
dC5oID0gNDIgfSk7CisKK3doaWxlICh0ZXN0UnVubmVyLm51bWJlck9mREZHQ29tcGlsZXMoZm9v
KSA8IDEpIHsKKyAgICBkaWRHZXRDYWxsZWQgPSBmYWxzZTsKKyAgICBzaG91bGRCZSgiZm9vKFwi
aGVsbG9cIiwge2Y6MSwgZzoyfSkiLCAiMyIpOworICAgIHNob3VsZEJlKCJkaWRHZXRDYWxsZWQi
LCAidHJ1ZSIpOworfQorCit0aGVPYmplY3QgPSB7ZjoxLCBnOjJ9OworZGlkR2V0Q2FsbGVkID0g
ZmFsc2U7CitzaG91bGRCZSgiZm9vKFwiaGVsbG9cIiwgdGhlT2JqZWN0KSIsICIwLzAiKTsKK3No
b3VsZEJlKCJkaWRHZXRDYWxsZWQiLCAidHJ1ZSIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9q
cy9zY3JpcHQtdGVzdHMvZGZnLXN0cmluZy1vdXQtb2YtYm91bmRzLWNzZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9kZmctc3RyaW5nLW91dC1vZi1i
b3VuZHMtY3NlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQt
dGVzdHMvZGZnLXN0cmluZy1vdXQtb2YtYm91bmRzLWNzZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIzIEBACitkZXNjcmlwdGlvbigKKyJUZXN0cyB3aGF0IGhhcHBlbnMgd2hlbiB5b3Ug
cHJlc2VudCBhIENTRSBvcHBvcnR1bml0eSBhY3Jvc3MgYW4gb3V0LW9mLWJvdW5kcyBzdHJpbmcg
YWNjZXNzLiIKKyk7CisKK2Z1bmN0aW9uIGZvbyhzLCBvKSB7CisgICAgdmFyIHggPSBvLmY7Cisg
ICAgc1swXTsKKyAgICB2YXIgeSA9IG8uZjsKKyAgICByZXR1cm4geCArIHk7Cit9CisKK25vSW5s
aW5lKGZvbyk7CitzaWxlbnRUZXN0UGFzcyA9IHRydWU7CisKK3ZhciB0aGVPYmplY3QgPSB7fTsK
KworU3RyaW5nLnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKCIwIiwgZnVuY3Rpb24oKSB7IHRo
ZU9iamVjdC5mID0gNDI7IH0pOworCit3aGlsZSAoIWRmZ0NvbXBpbGVkKHtmOmZvb30pKQorICAg
IHNob3VsZEJlKCJmb28oXCJcIiwge2Y6MX0pIiwgIjIiKTsKKwordGhlT2JqZWN0ID0ge2Y6MX07
CitzaG91bGRCZSgiZm9vKFwiXCIsIHRoZU9iamVjdCkiLCAiNDMiKTsKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2RmZy1zdHJpbmctb3V0LW9mLWJvdW5kcy1uZWdhdGl2
ZS1jaGVjay1zdHJ1Y3R1cmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9z
Y3JpcHQtdGVzdHMvZGZnLXN0cmluZy1vdXQtb2YtYm91bmRzLW5lZ2F0aXZlLWNoZWNrLXN0cnVj
dHVyZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3Rz
L2RmZy1zdHJpbmctb3V0LW9mLWJvdW5kcy1uZWdhdGl2ZS1jaGVjay1zdHJ1Y3R1cmUuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMyBAQAorZGVzY3JpcHRpb24oCisiVGVzdHMgd2hhdCBo
YXBwZW5zIHdoZW4geW91IGRvIGEgbmVnYXRpdmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb24gYSBz
dHJpbmcgYW5kIHVzZSB0aGF0IHRvIGluc3RhbGwgYSBnZXR0ZXIgdGhhdCBjbG9iYmVycyBhIHN0
cnVjdHVyZS4iCispOworCitmdW5jdGlvbiBmb28ocywgbykgeworICAgIHZhciB4ID0gby5mOwor
ICAgIHNbLTFdOworICAgIHZhciB5ID0gby5nOworICAgIHJldHVybiB4ICsgeTsKK30KKworbm9J
bmxpbmUoZm9vKTsKK3NpbGVudFRlc3RQYXNzID0gdHJ1ZTsKKwordmFyIHRoZU9iamVjdCA9IHt9
OworCitTdHJpbmcucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oIi0xIiwgZnVuY3Rpb24oKSB7
IGRlbGV0ZSB0aGVPYmplY3QuZzsgfSk7CisKK3doaWxlICh0ZXN0UnVubmVyLm51bWJlck9mREZH
Q29tcGlsZXMoZm9vKSA8IDEpCisgICAgc2hvdWxkQmUoImZvbyhcImhlbGxvXCIsIHtmOjEsIGc6
Mn0pIiwgIjMiKTsKKwordGhlT2JqZWN0ID0ge2Y6MSwgZzoyfTsKK3Nob3VsZEJlKCJmb28oXCJo
ZWxsb1wiLCB0aGVPYmplY3QpIiwgIjAvMCIpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9z
Y3JpcHQtdGVzdHMvZGZnLXN0cmluZy1vdXQtb2YtYm91bmRzLW5lZ2F0aXZlLXByb3RvLXZhbHVl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2RmZy1z
dHJpbmctb3V0LW9mLWJvdW5kcy1uZWdhdGl2ZS1wcm90by12YWx1ZS5qcwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2RmZy1zdHJpbmctb3V0LW9mLWJv
dW5kcy1uZWdhdGl2ZS1wcm90by12YWx1ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2
IEBACitkZXNjcmlwdGlvbigKKyJUZXN0cyB3aGF0IGhhcHBlbnMgd2hlbiB5b3UgZG8gYSBuZWdh
dGl2ZSBvdXQtb2YtYm91bmRzIGFjY2VzcyBvbiBhIHN0cmluZyB3aGlsZSB0aGUgcHJvdG90eXBl
IGhhcyBhIG5lZ2F0aXZlIGluZGV4ZWQgcHJvcGVydHkuIgorKTsKKworZnVuY3Rpb24gZm9vKHMp
IHsKKyAgICByZXR1cm4gc1stMV07Cit9CisKK25vSW5saW5lKGZvbyk7CitzaWxlbnRUZXN0UGFz
cyA9IHRydWU7CisKK1N0cmluZy5wcm90b3R5cGVbLTFdID0gImhlbGxvIjsKKworZm9yICh2YXIg
aSA9IDA7IGkgPCAyOyBpID0gZGZnSW5jcmVtZW50KHtmOmZvbywgaTppICsgMSwgbjoxLCBjb21w
aWxlczoyfSkpCisgICAgc2hvdWxkQmUoImZvbyhcImhlbGxvXCIpIiwgIlwiaGVsbG9cIiIpOwor
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207199</attachid>
            <date>2013-07-20 12:27:03 -0700</date>
            <delta_ts>2013-07-20 12:31:44 -0700</delta_ts>
            <desc>shockingly, it works</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58876</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyOTQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OCBA
QAorMjAxMy0wNy0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBOb2RlcyBzaG91bGQgYmUgYWJsZSB0byBhYnN0cmFjdGx5IHRlbGwg
eW91IHdoYXQgdGhleSByZWFkIGFuZCB3aGF0IHRoZXkgd3JpdGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODkxMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRkIHRoZSBub3Rpb24gb2Yg
QWJzdHJhY3RIZWFwIHRvIHRoZSBERkcuIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHRoZSBBYnN0cmFj
dEhlYXAgaW4KKyAgICAgICAgdGhlIEZUTCwgZXhjZXB0IHRoYXQgdGhlIEZUTCdzIEFic3RyYWN0
SGVhcHMgYXJlIHVzZWQgZHVyaW5nIExMVk0gbG93ZXJpbmcgYW5kIGFyZQorICAgICAgICBlbmdp
bmVlcmVkIHRvIG9iZXkgTExWTSBUQkFBIGxvZ2ljLiBUaGUgRlRMJ3MgQWJzdHJhY3RIZWFwcyBh
cmUgYWxzbyBlbmdpbmVlcmVkIHRvCisgICAgICAgIGJlIGluZXhwZW5zaXZlIHRvIHVzZSAodGhl
eSBqdXN0IGdpdmUgeW91IGEgVEJBQSBub2RlKSBidXQgZXhwZW5zaXZlIHRvIGNyZWF0ZSAoeW91
CisgICAgICAgIGNyZWF0ZSB0aGVtIGFsbCB1cCBmcm9udCkuIEZUTCBBYnN0cmFjdEhlYXBzIGFs
c28gZG9uJ3QgYWN0dWFsbHkgZ2l2ZSB5b3UgdGhlCisgICAgICAgIGFiaWxpdHkgdG8gcmVhc29u
IGFib3V0IGFsaWFzaW5nOyB0aGV5IGFyZSAqanVzdCogYSBtZWNoYW5pc20gZm9yIGxvd2VyaW5n
IHRvIFRCQUEuCisgICAgICAgIFRoZSBERkcncyBBYnN0cmFjdEhlYXBzIGFyZSBlbmdpbmVlcmVk
IHRvIGJlIGJvdGggY2hlYXAgdG8gY3JlYXRlIGFuZCBjaGVhcCB0byB1c2UuCisgICAgICAgIFRo
ZXkgYWxzbyBnaXZlIHlvdSBhbGlhc2luZyBtYWNoaW5lcnkuIFRoZSBERkcgQWJzdHJhY3RIZWFw
cyBhcmUgcmVwcmVzZW50ZWQKKyAgICAgICAgaW50ZXJuYWxseSBieSBhIGludDY0X3QuIE1hbnkg
Y29tcGFyaXNvbnMgYmV0d2VlbiB0aGVtIGFyZSBqdXN0IGludGVnZXIgY29tYXByaXNvbnMuCisg
ICAgICAgIEFic3RyYWN0SGVhcHMgZm9ybSBhIHRocmVlLWxldmVsIGhpZXJhcmNoeSAoV29ybGQg
aXMgdGhlIHN1cGVydHlwZSBvZiBldmVyeXRoaW5nLAorICAgICAgICBLaW5kIHdpdGggYSBUT1Ag
cGF5bG9hZCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLCBhbmQgS2luZCB3aXRoIGEgbm9u
LVRPUAorICAgICAgICBwYXlsb2FkIGlzIHRoZSBkaXJlY3Qgc3VidHlwZSBvZiBpdHMgY29ycmVz
cG9uZGluZyBUT1AgS2luZCkuCisgICAgICAgIAorICAgICAgICBBZGQgdGhlIG5vdGlvbiBvZiBh
IENsb2JiZXJTZXQuIFRoaXMgaXMgdGhlIHNldCBvZiBBYnN0cmFjdEhlYXBzIHRoYXQgeW91IGhh
ZAorICAgICAgICBjbG9iYmVyZWQuIEl0IHJlcHJlc2VudHMgdGhlIHNldCB0aGF0IHJlc3VsdHMg
ZnJvbSB1bmlmeWluZyBhIGJ1bmNoIG9mCisgICAgICAgIEFic3RyYWN0SGVhcHMsIGFuZCBpcyBp
bnRlbmRlZCB0byBxdWlja2x5IGFuc3dlciBvdmVybGFwIHF1ZXN0aW9uczogZG9lcyB0aGUgZ2l2
ZW4KKyAgICAgICAgQWJzdHJhY3RIZWFwIG92ZXJsYXAgYW55IEFic3RyYWN0SGVhcCBpbiB0aGUg
Q2xvYmJlclNldD8gVG8gdGhpcyBlbmQsIGlmIHlvdSBhZGQgYW4KKyAgICAgICAgQWJzdHJhY3RI
ZWFwIHRvIGEgc2V0LCBpdCAiZGlyZWN0bHkiIGFkZHMgdGhlIGhlYXAgaXRzZWxmLCBhbmQgInN1
cGVyIiBhZGRzIGFsbCBvZgorICAgICAgICBpdHMgYW5jZXN0b3JzLiBBbiBBYnN0cmFjdEhlYXAg
aXMgc2FpZCB0byBvdmVybGFwIGEgc2V0IGlmIGFueSBkaXJlY3Qgb3Igc3VwZXIKKyAgICAgICAg
bWVtYmVyIGlzIGVxdWFsIHRvIGl0LCBvciBpZiBhbnkgb2YgaXRzIGFuY2VzdG9ycyBhcmUgZXF1
YWwgdG8gYSBkaXJlY3QgbWVtYmVyLgorICAgICAgICAKKyAgICAgICAgRXhhbXBsZSAjMToKKyAg
ICAgICAgCisgICAgICAgICAgICAtIEkgYWRkIFZhcmlhYmxlcyg1KS4KKyAgICAgICAgICAgIC0g
WW91IHF1ZXJ5IFZhcmlhYmxlcworICAgICAgICAgICAgCisgICAgICAgICAgICBUaGUgc2V0IHdp
bGwgaGF2ZSBWYXJpYWJsZXMoNSkgYXMgYSBkaXJlY3QgbWVtYmVyLCBhbmQgVmFyaWFibGVzIGFu
ZCBXb3JsZCBhcworICAgICAgICAgICAgc3VwZXIgbWVtYmVycy4gVGhlIFZhcmlhYmxlcyBxdWVy
eSB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiB0cnVlLCBiZWNhdXNlCisgICAgICAgICAgICBWYXJp
YWJsZXMgaXMgaW5kZWVkIGEgc3VwZXIgbWVtYmVyLgorICAgICAgICAKKyAgICAgICAgRXhhbXBs
ZSAjMjoKKyAgICAgICAgCisgICAgICAgICAgICAtIEkgYWRkIFZhcmlhYmxlcyg1KQorICAgICAg
ICAgICAgLSBZb3UgcXVlcnkgTmFtZWRQcm9wZXJ0aWVzCisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIE5hbWVkUHJvcGVydGllcyBpcyBub3QgYSBtZW1iZXIgYXQgYWxsIChuZWl0aGVyIGRpcmVj
dCBvciBzdXBlcikuIFdlIG5leHQKKyAgICAgICAgICAgIHF1ZXJ5IFdvcmxkLiBXb3JsZCBpcyBh
IG1lbWJlciwgYnV0IGl0J3MgYSBzdXBlciBtZW1iZXIsIHNvIHdlIHJldHVybiBmYWxzZS4KKyAg
ICAgICAgCisgICAgICAgIEV4YW1wbGUgIzM6CisgICAgICAgIAorICAgICAgICAgICAgLSBJIGFk
ZCBWYXJpYWJsZXMKKyAgICAgICAgICAgIC0gWW91IHF1ZXJ5IFZhcmlhYmxlcyg1KQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBUaGUgc2V0IHdpbGwgaGF2ZSBWYXJpYWJsZXMgYXMgYSBkaXJl
Y3QgbWVtYmVyLCBhbmQgV29ybGQgYXMgYSBzdXBlciBtZW1iZXIuCisgICAgICAgICAgICBUaGUg
VmFyaWFibGVzKDUpIHF1ZXJ5IHdpbGwgbm90IGZpbmQgVmFyaWFibGVzKDUpIGluIHRoZSBzZXQs
IGJ1dCB0aGVuIGl0CisgICAgICAgICAgICB3aWxsIHF1ZXJ5IFZhcmlhYmxlcy4gVmFyaWFibGVz
IGlzIGEgZGlyZWN0IG1lbWJlciwgc28gd2UgcmV0dXJuIHRydWUuCisgICAgICAgIAorICAgICAg
ICBFeGFtcGxlICM0OgorICAgICAgICAKKyAgICAgICAgICAgIC0gSSBhZGQgVmFyaWFibGVzCisg
ICAgICAgICAgICAtIFlvdSBxdWVyeSBOYW1lZFByb3BlcnRpZXMoNSkKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgTmVpdGhlciBOYW1lZFByb3BlcnRpZXMgbm9yIE5hbWVkUHJvcGVydGllcyg1
KSBhcmUgbWVtYmVycy4gV2UgbmV4dCBxdWVyeQorICAgICAgICAgICAgV29ybGQuIFdvcmxkIGlz
IGEgbWVtYmVyLCBidXQgaXQncyBhIHN1cGVyIG1lbWJlciwgc28gd2UgcmV0dXJuIGZhbHNlLgor
ICAgICAgICAKKyAgICAgICAgT3ZlcmxhcCBxdWVyaWVzIHJlcXVpcmUgdGhhdCBlaXRoZXIgdGhl
IGhlYXAgYmVpbmcgcXVlcmllZCBpcyBpbiB0aGUgc2V0CisgICAgICAgIChlaXRoZXIgZGlyZWN0
IG9yIHN1cGVyKSwgb3IgdGhhdCBvbmUgb2YgaXRzIGFuY2VzdG9ycyBpcyBhIGRpcmVjdCBtZW1i
ZXIuCisgICAgICAgIEFub3RoZXIgd2F5IHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIHdvcmtzIGlz
IHRoYXQgdHdvIGhlYXBzIEEgYW5kIEIgYXJlIHNhaWQKKyAgICAgICAgdG8gb3ZlcmxhcCBpZiBB
LmlzU3VidHlwZU9mKEIpIG9yIEIuaXNTdWJ0eXBlT2YoQSkuIFRoaXMgaXMgc291bmQgc2luY2Ug
aGVhcHMKKyAgICAgICAgZm9ybSBhIHNpbmdsZS1pbmhlcml0YW5jZSBoZWlyYXJjaHkuIENvbnNp
ZGVyIHRoYXQgd2Ugd2FudGVkIHRvIGltcGxlbWVudCBhCisgICAgICAgIHNldCB0aGF0IGhvbGRz
IGhlYXBzIGFuZCBhbnN3ZXJzIHRoZSBxdWVzdGlvbiwgImlzIGFueSBtZW1iZXIgaW4gdGhlIHNl
dCBhbgorICAgICAgICBhbmNlc3RvciAoaS5lLiBzdXBlcnR5cGUpIG9mIHNvbWUgb3RoZXIgaGVh
cCIuIFdlIHdvdWxkIGhhdmUgdGhlIHNldCBjb250YWluCisgICAgICAgIHRoZSBoZWFwcyB0aGVt
c2VsdmVzLCBhbmQgd2Ugd291bGQgc2F0aXNmeSB0aGUgcXVlcnkgIkEuaXNTdWJ0eXBlT2ZBbnko
c2V0KSIKKyAgICAgICAgYnkgd2Fsa2luZyB0aGUgYW5jZXN0b3IgY2hhaW4gb2YgQSwgYW5kIHJl
cGVhdGVkbHkgcXVlcnlpbmcgaXRzIG1lbWJlcnNoaXAgaW4KKyAgICAgICAgdGhlIHNldC4gVGhp
cyBpcyB3aGF0IHRoZSAiZGlyZWN0IiBtZW1iZXJzIG9mIG91ciBzZXQgZG8uIE5vdyBjb25zaWRl
ciB0aGUKKyAgICAgICAgb3RoZXIgcGFydCwgd2hlcmUgd2Ugd2FudCB0byBhc2sgaWYgYW55IG1l
bWJlciBvZiB0aGUgc2V0IGlzIGEgZGVzY2VuZGVudCBvZgorICAgICAgICBhIGhlYXAsIG9yICJB
LmlzU3VwZXJ0eXBlT2ZBbnkoc2V0KSIuIFdlIHdvdWxkIGltcGxlbWVudCB0aGlzIGJ5IGltcGxl
bWVudGluZworICAgICAgICBzZXQuYWRkKEIpIGFzIGFkZGluZyBub3QganVzdCBCIGJ1dCBhbHNv
IGFsbCBvZiBCJ3MgYW5jZXN0b3JzOyB0aGVuIHdlIHdvdWxkCisgICAgICAgIGFuc3dlciBBLmlz
U3VwZXJ0eXBlT2ZBbnkoc2V0KSBieSBqdXN0IGNoZWNraW5nIGlmIEEgaXMgaW4gdGhlIHNldC4g
V2l0aCB0d28KKyAgICAgICAgc3VjaCBzZXRzIC0gb25lIHRoYXQgYW5zd2VycyBpc1N1YnR5cGVP
ZkFueSgpIGFuZCBhbm90aGVyIHRoYXQgYW5zd2VycworICAgICAgICBpc1N1cGVydHlwZU9mQW55
KCkgLSB3ZSBjb3VsZCBhbnN3ZXIgdGhlICJkbyBhbnkgb2YgbXkgaGVhcHMgb3ZlcmxhcCB5b3Vy
CisgICAgICAgIGhlYXAiIHF1ZXN0aW9uLiBDbG9iYmVyU2V0IGRvZXMgdGhpcywgYnV0IGNvbWJp
bmVzIHRoZSB0d28gc2V0cyBpbnRvIGEgc2luZ2xlCisgICAgICAgIEhhc2hNYXAuIFRoZSBIYXNo
TWFwJ3MgdmFsdWUsICJkaXJlY3QiLCBtZWFucyB0aGF0IHRoZSBrZXkgaXMgYSBtZW1iZXIgb2YK
KyAgICAgICAgYm90aCB0aGUgc3VwZXJ0eXBlIHNldCBhbmQgdGhlIHN1YnR5cGUgc2V0OyBpZiBp
dCdzIGZhbHNlIHRoZW4gaXQncyBvbmx5IGEKKyAgICAgICAgbWVtYmVyIG9mIG9uZSBvZiB0aGVt
LgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgdGhpcyBhZGRzIGEgZnVuY3Rvcml6ZWQgY2xv
YmJlcml6ZSgpIG1ldGhvZCB0aGF0IGFkZHMgdGhlIHJlYWQgYW5kCisgICAgICAgIHdyaXRlIGNs
b2JiZXJzIG9mIGEgREZHOjpOb2RlIHRvIHJlYWQgYW5kIHdyaXRlIGZ1bmN0b3JzLiBDb21tb24g
ZnVuY3RvcnMgZm9yCisgICAgICAgIGFkZGluZyB0byBDbG9iYmVyU2V0cywgcXVlcnlpbmcgb3Zl
cmxhcCwgYW5kIGRvaW5nIG5vdGhpbmcgYXJlIHByb3ZpZGVkLgorICAgICAgICBDb252ZW5pZW50
IHdyYXBwZXJzIGFyZSBhbHNvIHByb3ZpZGVkLiBUaGlzIGFsbG93cyB5b3UgdG8gc2F5IHRoaW5n
cyBsaWtlOgorICAgICAgICAKKyAgICAgICAgICAgIENsb2JiZXJTZXQgc2V0OworICAgICAgICAg
ICAgYWRkV3JpdGVzKGdyYXBoLCBub2RlMSwgc2V0KTsKKyAgICAgICAgICAgIGlmIChvdmVybGFw
c1JlYWRzKGdyYXBoLCBub2RlMiwgc2V0KSkKKyAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHRo
YXQgbm9kZTEgd3JpdGVzIHRvIHNvbWV0aGluZyB0aGF0IG5vZGUyIHJlYWRzIGZyb20uCisgICAg
ICAgIAorICAgICAgICBDdXJyZW50bHkgdGhpcyBmYWNpbGl0eSBpcyBvbmx5IHVzZWQgdG8gaW1w
cm92ZSBncmFwaCBkdW1waW5nLCBidXQgaXQgd2lsbAorICAgICAgICBiZSBpbnN0cnVtZW50YWwg
aW4gYm90aCBMSUNNIGFuZCBHVk4uIEluIHRoZSBmdXR1cmUsIEkgd2FudCB0byBjb21wbGV0ZWx5
CisgICAgICAgIGtpbGwgdGhlIE5vZGVDbG9iYmVyc1dvcmxkIGFuZCBOb2RlTWlnaHRDbG9iYmVy
IGZsYWdzLCBhbmQgZXJhZGljYXRlCisgICAgICAgIENTRVBoYXNlJ3MgaGFja2lzaCB3YXkgb2Yg
YWNjb21wbGlzaGluZyBhbG1vc3QgZXhhY3RseSB3aGF0IEFic3RyYWN0SGVhcAorICAgICAgICBn
aXZlcyB5b3UuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1w
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OmR1bXApOgorICAgICAgICAoV1RG
KToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SGVhcC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChBYnN0cmFjdEhlYXAp
OgorICAgICAgICAoUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQ
YXlsb2FkOjpQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxv
YWQ6OnRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjppc1Rv
cCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjp2YWx1ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjp2YWx1ZUltcGwpOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6Om9wZXJhdG9yPCk6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjppc0Rpc2pvaW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6Om92ZXJsYXBzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RIZWFwOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVh
cDo6a2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpwYXlsb2FkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OmlzRGlzam9pbnQpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SGVhcDo6b3ZlcmxhcHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0SGVhcDo6c3VwZXJ0eXBlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6Omhh
c2gpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEhlYXA6Om9wZXJhdG9yPCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJh
Y3RIZWFwOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RIZWFwOjpwYXlsb2FkSW1wbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFw
OjplbmNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcEhhc2g6Omhhc2gpOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcEhhc2g6OmVxdWFsKToKKyAgICAgICAgKEFi
c3RyYWN0SGVhcEhhc2gpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJl
clNldC5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9i
YmVyU2V0OjpDbG9iYmVyU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0Ojp+Q2xv
YmJlclNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q2xvYmJlclNldDo6YWRkKToKKyAgICAgICAg
KEpTQzo6REZHOjpDbG9iYmVyU2V0Ojpjb250YWlucyk6CisgICAgICAgIChKU0M6OkRGRzo6Q2xv
YmJlclNldDo6b3ZlcmxhcHMpOgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXQ6OmNsZWFy
KToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0OjpkaXJlY3QpOgorICAgICAgICAoSlND
OjpERkc6OkNsb2JiZXJTZXQ6OnN1cGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0OjpzZXRPZik6CisgICAgICAg
IChKU0M6OkRGRzo6YWRkUmVhZHMpOgorICAgICAgICAoSlNDOjpERkc6OmFkZFdyaXRlcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6YWRkUmVhZHNBbmRXcml0ZXMpOgorICAgICAgICAoSlNDOjpERkc6
Om92ZXJsYXBzUmVhZHMpOgorICAgICAgICAoSlNDOjpERkc6Om92ZXJsYXBzV3JpdGVzKToKKyAg
ICAgICAgKiBkZmcvREZHQ2xvYmJlclNldC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAg
ICAgIChDbG9iYmVyU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0Ojppc0VtcHR5
KToKKyAgICAgICAgKENsb2JiZXJTZXRBZGQpOgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJT
ZXRBZGQ6OkNsb2JiZXJTZXRBZGQpOgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXRBZGQ6
Om9wZXJhdG9yKCkpOgorICAgICAgICAoQ2xvYmJlclNldE92ZXJsYXBzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpDbG9iYmVyU2V0T3ZlcmxhcHM6OkNsb2JiZXJTZXRPdmVybGFwcyk6CisgICAgICAg
IChKU0M6OkRGRzo6Q2xvYmJlclNldE92ZXJsYXBzOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpT
Qzo6REZHOjpDbG9iYmVyU2V0T3ZlcmxhcHM6OnJlc3VsdCk6CisgICAgICAgICogZGZnL0RGR0Ns
b2JiZXJpemUuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OmNs
b2JiZXJpemUpOgorICAgICAgICAoTm9PcENsb2JiZXJpemUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vT3BDbG9iYmVyaXplOjpOb09wQ2xvYmJlcml6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9P
cENsb2JiZXJpemU6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorCiAyMDEzLTA3LTE5ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91cnRoVGllcjogU3RyaW5nT2JqZWN0
VXNlIHVzZXMgc3RydWN0dXJlcywgYW5kIENTRSBzaG91bGQga25vdyB0aGF0CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUyOTQ1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTM3NSw2ICszNzUsMTEgQEAKIAkJMEZFNTA1OEYxNzk4QUU3MTAwQjM1RjhD
IC8qIERGR01lcmdlTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFNTA1OEUxNzk4QUU2RjAwQjM1RjhDIC8qIERGR01lcmdlTW9kZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTUwNTkzMTc5
QTYwNDUwMEIzNUY4QyAvKiBERkdFZGdlVXNlc1N0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1OTIxNzlBNjA0NTAwQjM1RjhDIC8q
IERGR0VkZ2VVc2VzU3RydWN0dXJlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZFNTA1OTExNzlBNDkyNDAwQjM1RjhDIC8qIERGR1NhbmVTdHJp
bmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU5MDE3OUE0OTI0MDBCMzVGOEMgLyogREZHU2FuZVN0
cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU5OTE3OUIwRjcyMDBCMzVGOEMgLyogREZH
QWJzdHJhY3RIZWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTUwNTk0MTc5QjBGNzIwMEIzNUY4QyAvKiBERkdBYnN0cmFjdEhlYXAuY3BwICov
OyB9OworCQkwRkU1MDU5QTE3OUIwRjcyMDBCMzVGOEMgLyogREZHQWJzdHJhY3RIZWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU5NTE3OUIw
RjcyMDBCMzVGOEMgLyogREZHQWJzdHJhY3RIZWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1OUIxNzlCMEY3MjAwQjM1RjhDIC8qIERG
R0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTUwNTk2MTc5QjBGNzIwMEIzNUY4QyAvKiBERkdDbG9iYmVyaXplLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1OUMxNzlCMEY3
MjAwQjM1RjhDIC8qIERGR0Nsb2JiZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1OTcxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Nsb2Ji
ZXJTZXQuY3BwICovOyB9OworCQkwRkU1MDU5RDE3OUIwRjcyMDBCMzVGOEMgLyogREZHQ2xvYmJl
clNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
NTA1OTgxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Nsb2JiZXJTZXQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkU4NTM0QjE3MjNDREE1MDBCNjE4
RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuY3BwICovOyB9OwogCQkwRkU4NTM0QzE3MjNDREE1MDBCNjE4RjUgLyog
REZHRGVzaXJlZFdhdGNocG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZFQTBBMDgxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwOUZEMTcwNTEzREIw
MEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0MjgsNiArMTQzMywxMSBAQAogCQkwRkU1MDU4RTE3
OThBRTZGMDBCMzVGOEMgLyogREZHTWVyZ2VNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR01lcmdl
TW9kZS5oOyBwYXRoID0gZGZnL0RGR01lcmdlTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkU1MDU5MjE3OUE2MDQ1MDBCMzVGOEMgLyogREZHRWRnZVVzZXNTdHJ1Y3R1cmUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRWRnZVVzZXNTdHJ1Y3R1cmUu
aDsgcGF0aCA9IGRmZy9ERkdFZGdlVXNlc1N0cnVjdHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkU1MDU5MDE3OUE0OTI0MDBCMzVGOEMgLyogREZHU2FuZVN0cmluZ0dldEJ5
VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdT
YW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkU1MDU5NDE3OUIwRjcyMDBCMzVGOEMgLyogREZHQWJzdHJhY3RIZWFwLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Fic3RyYWN0SGVhcC5j
cHA7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RIZWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFNTA1OTUxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SGVhcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBYnN0cmFjdEhlYXAuaDsgcGF0aCA9
IGRmZy9ERkdBYnN0cmFjdEhlYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
NTA1OTYxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Nsb2JiZXJpemUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQ2xvYmJlcml6ZS5oOyBwYXRoID0gZGZnL0RGR0Nsb2JiZXJp
emUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1OTcxNzlCMEY3MjAwQjM1
RjhDIC8qIERGR0Nsb2JiZXJTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHQ2xvYmJlclNldC5jcHA7IHBhdGggPSBkZmcvREZHQ2xvYmJlclNldC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTk4MTc5QjBGNzIwMEIzNUY4QyAvKiBE
RkdDbG9iYmVyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Nsb2Ji
ZXJTZXQuaDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRGVzaXJlZFdh
dGNocG9pbnRzLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyogREZH
RGVzaXJlZFdhdGNocG9pbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0Rlc2lyZWRXYXRjaHBvaW50cy5oOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMDlGRDE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMQWJicmV2aWF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExBYmJyZXZpYXRpb25zLmg7IHBhdGggPSBmdGwvRlRMQWJicmV2aWF0aW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjk4OSw2ICsyOTk5LDggQEAKIAkJODZFQzlEQjMxMzI4
REY0NDAwMkIyQUQ3IC8qIGRmZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEZFNTA1OTQxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SGVhcC5j
cHAgKi8sCisJCQkJMEZFNTA1OTUxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SGVhcC5o
ICovLAogCQkJCTBGRTUwNTg2MTc5OEFCRjUwMEIzNUY4QyAvKiBERkdBYnN0cmFjdEludGVycHJl
dGVyLmggKi8sCiAJCQkJMEZFNTA1ODcxNzk4QUJGNTAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmggKi8sCiAJCQkJMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERG
R0Fic3RyYWN0VmFsdWUuY3BwICovLApAQCAtMzAyNCw2ICszMDM2LDkgQEAKIAkJCQkwRkZGQzk0
QzE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuaCAqLywKIAkJCQkwRjNCM0EyNDE1NDRD
OTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEYz
QjNBMjUxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCAqLywK
KwkJCQkwRkU1MDU5NjE3OUIwRjcyMDBCMzVGOEMgLyogREZHQ2xvYmJlcml6ZS5oICovLAorCQkJ
CTBGRTUwNTk3MTc5QjBGNzIwMEIzNUY4QyAvKiBERkdDbG9iYmVyU2V0LmNwcCAqLywKKwkJCQkw
RkU1MDU5ODE3OUIwRjcyMDBCMzVGOEMgLyogREZHQ2xvYmJlclNldC5oICovLAogCQkJCTBGQjRC
NTFBMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdDb21tb24uY3BwICovLAogCQkJCTBGQzA5NzdFMTQ2
OUVCQzQwMENGMjQ0MiAvKiBERkdDb21tb24uaCAqLywKIAkJCQkwRkVBMEEyRDE3MEQ0MEJGMDBC
QjcyMkMgLyogREZHQ29tbW9uRGF0YS5jcHAgKi8sCkBAIC0zMzgwLDYgKzMzOTUsNyBAQAogCQkJ
CTBGRTUwNThGMTc5OEFFNzEwMEIzNUY4QyAvKiBERkdNZXJnZU1vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFRjY4MzVGMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTXY3LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRTI0NTk2MjE3NjAxRDU4MDA3NEZDRTAgLyogQ2FsbEZyYW1lSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1OUExNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Fi
c3RyYWN0SGVhcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVGNjgzNjAxNzQzNDNDQzAwQTMyRTI1
IC8qIEpJVFN0dWJzWDg2XzY0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUY2ODM1RTE3NDM0M0ND
MDBBMzJFMjUgLyogSklUU3R1YnNBUk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFOTQwMzIyMTc0
NDQyNTkwMDQ3Q0Y2RSAvKiBKSVRTdHVic1g4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
NTcwLDYgKzM1ODYsNyBAQAogCQkJCTBGRUEwQTFGMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5OTBFRDFEM0FF
MDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTE2NjdCMEUx
OTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkU1MDU5RDE3OUIwRjcyMDBCMzVGOEMgLyogREZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAwQjg5NjE5IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVBMEEwODE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODYwQkQ4MDExNDhFQTZGMjAwMTEyQjJGIC8qIEludHJpbnNp
Yy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjE1LDYgKzM2MzIsNyBAQAogCQkJCTE0OENEMUQ4MTA4
Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5Nzg4MDE0MTE0NzFBRDkyMDA0MUIwMTYgLyogSlNEYXRlTWF0aC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzJBN0Y2ODgxNjA0MzJENDAwRjc2Qjk4IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU5QjE3OUIwRjcyMDBCMzVGOEMgLyogREZHQ2xvYmJl
cml6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpT
RXhwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRCMkNEQzE3NDJEODA0MDA3QjNDMUIgLyog
REZHRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0I0QUNBRjE0ODRDOUNFMDBCMzhB
MzYgLyogSlNFeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovLApAQCAtNDI5Myw2ICs0MzExLDcg
QEAKIAkJCQkwRkVBMEEwQjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDdGMzlDMzEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUNvbnN0cnVjdG9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM0MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRl
Q29udmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkU1MDU5OTE3OUIwRjcyMDBCMzVG
OEMgLyogREZHQWJzdHJhY3RIZWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM1MTA3
RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVnZ2VyLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNDQ1Miw2ICs0NDcxLDcgQEAKIAkJCQkwRjRFMUEwRTE3M0FFRERDMDA3RUUyRDMg
LyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgyQjc0
RTBBNDMwMzI4MDA1MTdDRkMgLyogSlNTdHJpbmdSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ2QUFCMzgwQjY2QTk0NDAwRTU1RjE2IC8qIEpTU3RyaW5nUmVmQ0YuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFNTA1OUMxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Nsb2JiZXJTZXQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMEMxNTdFRTA5RjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFi
bGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBB
IC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAqLywKIAkJCQkxNEJENUEzMjBBM0U5MUY2MDBCQUY1
OUMgLyogSlNWYWx1ZVJlZi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCit2b2lkIEFic3RyYWN0SGVhcDo6UGF5bG9hZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIGlmIChpc1RvcCgpKQorICAgICAgICBvdXQucHJpbnQoIlRPUCIpOworICAg
IGVsc2UKKyAgICAgICAgb3V0LnByaW50KHZhbHVlKCkpOworfQorCit2b2lkIEFic3RyYWN0SGVh
cDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChraW5kKCkp
OworICAgIGlmIChraW5kKCkgPT0gSW52YWxpZEFic3RyYWN0SGVhcCB8fCBraW5kKCkgPT0gV29y
bGQgfHwgcGF5bG9hZCgpLmlzVG9wKCkpCisgICAgICAgIHJldHVybjsKKyAgICBvdXQucHJpbnQo
IigiLCBwYXlsb2FkKCksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
bmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEFic3RyYWN0SGVhcEtpbmQga2luZCkKK3sKKyAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyNkZWZpbmUgQUJTVFJBQ1RfSEVBUF9EVU1QKG5hbWUpICAgICAg
ICAgICAgXAorICAgIGNhc2UgbmFtZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIG91dC5wcmludCgjbmFtZSk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0
dXJuOworICAgIEZPUl9FQUNIX0FCU1RSQUNUX0hFQVBfS0lORChBQlNUUkFDVF9IRUFQX0RVTVAp
CisjdW5kZWYgQUJTVFJBQ1RfSEVBUF9EVU1QCisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RI
ZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEhlYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBYnN0cmFjdEhl
YXBfaAorI2RlZmluZSBERkdBYnN0cmFjdEhlYXBfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gSW1wbGVtZW50cyBhIHRo
cmVlLWxldmVsIHR5cGUgaGllcmFyY2h5OgorLy8gLSBXb3JsZCBpcyB0aGUgc3VwZXJ0eXBlIG9m
IGFsbCBvZiB0aGUgdGhpbmdzLgorLy8gLSBLaW5kIHdpdGggVE9QIHBheWxvYWQgaXMgdGhlIGRp
cmVjdCBzdWJ0eXBlIG9mIFdvcmxkLgorLy8gLSBLaW5kIHdpdGggbm9uLVRPUCBwYXlsb2FkIGlz
IHRoZSBkaXJlY3Qgc3VidHlwZSBvZiBpdHMgY29ycmVzcG9uZGluZyBUT1AgS2luZC4KKworI2Rl
ZmluZSBGT1JfRUFDSF9BQlNUUkFDVF9IRUFQX0tJTkQobWFjcm8pIFwKKyAgICBtYWNybyhJbnZh
bGlkQWJzdHJhY3RIZWFwKSBcCisgICAgbWFjcm8oV29ybGQpIFwKKyAgICBtYWNybyhBcmd1bWVu
dHNfbnVtQXJndW1lbnRzKSBcCisgICAgbWFjcm8oQXJndW1lbnRzX292ZXJyaWRlTGVuZ3RoKSBc
CisgICAgbWFjcm8oQXJndW1lbnRzX3JlZ2lzdGVycykgXAorICAgIG1hY3JvKEFyZ3VtZW50c19z
bG93QXJndW1lbnRzKSBcCisgICAgbWFjcm8oQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCkgXAorICAg
IG1hY3JvKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpIFwKKyAgICBtYWNybyhKU0NlbGxfc3RydWN0
dXJlKSBcCisgICAgbWFjcm8oSlNGdW5jdGlvbl9leGVjdXRhYmxlKSBcCisgICAgbWFjcm8oSlNG
dW5jdGlvbl9zY29wZUNoYWluKSBcCisgICAgbWFjcm8oSlNPYmplY3RfYnV0dGVyZmx5KSBcCisg
ICAgbWFjcm8oSlNWYXJpYWJsZU9iamVjdF9yZWdpc3RlcnMpIFwKKyAgICBtYWNybyhOYW1lZFBy
b3BlcnRpZXMpIFwKKyAgICBtYWNybyhJbmRleGVkSW50MzJQcm9wZXJ0aWVzKSBcCisgICAgbWFj
cm8oSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpIFwKKyAgICBtYWNybyhJbmRleGVkQ29udGlndW91
c1Byb3BlcnRpZXMpIFwKKyAgICBtYWNybyhBcnJheVN0b3JhZ2VQcm9wZXJ0aWVzKSBcCisgICAg
bWFjcm8oVmFyaWFibGVzKSBcCisgICAgbWFjcm8oVHlwZWRBcnJheVN0b3JhZ2VQb2ludGVyKSBc
CisgICAgbWFjcm8oVHlwZWRBcnJheVByb3BlcnRpZXMpIFwKKyAgICBtYWNybyhUeXBlZEFycmF5
TGVuZ3RoKSBcCisgICAgbWFjcm8oR0NTdGF0ZSkgXAorICAgIG1hY3JvKFJlZ0V4cFN0YXRlKSBc
CisgICAgbWFjcm8oSW50ZXJuYWxTdGF0ZSkgXAorICAgIG1hY3JvKEFic29sdXRlKSBcCisgICAg
LyogVXNlIHRoaXMgZm9yIHJlYWRzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhhdCBpZiB0aGUg
d29ybGQgZ290IGNsb2JiZXJlZCwgdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIG5vdCB3b3JrLiAq
L1wKKyAgICBtYWNybyhNaXNjRmllbGRzKSBcCisgICAgLyogVXNlIHRoaXMgZm9yIHdyaXRlcyBv
bmx5LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaG9pc3RpbmcgdGhlIG5vZGUgaXMgaW52YWxpZC4g
VGhpcyB3b3JrcyBiZWNhdXNlIHdlIGRvbid0IGhvaXN0IGFueXRoaW5nIHRoYXQgaGFzIGFueSBz
aWRlIGVmZmVjdHMgYXQgYWxsLiAqL1wKKyAgICBtYWNybyhTaWRlU3RhdGUpCisKK2VudW0gQWJz
dHJhY3RIZWFwS2luZCB7CisjZGVmaW5lIEFCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04obmFtZSkg
bmFtZSwKKyAgICBGT1JfRUFDSF9BQlNUUkFDVF9IRUFQX0tJTkQoQUJTVFJBQ1RfSEVBUF9ERUNM
QVJBVElPTikKKyN1bmRlZiBBQlNUUkFDVF9IRUFQX0RFQ0xBUkFUSU9OCit9OworCitjbGFzcyBB
YnN0cmFjdEhlYXAgeworcHVibGljOgorICAgIGNsYXNzIFBheWxvYWQgeworICAgIHB1YmxpYzoK
KyAgICAgICAgUGF5bG9hZCgpCisgICAgICAgICAgICA6IG1faXNUb3AoZmFsc2UpCisgICAgICAg
ICAgICAsIG1fdmFsdWUoMCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBQYXlsb2FkKGJvb2wgaXNUb3AsIGludDY0X3QgdmFsdWUpCisgICAgICAgICAgICA6IG1faXNU
b3AoaXNUb3ApCisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghKGlzVG9wICYmIHZhbHVlKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIFBheWxvYWQoaW50NjRfdCB2YWx1ZSkKKyAgICAgICAgICAgIDogbV9pc1RvcChmYWxz
ZSkKKyAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBQYXlsb2FkKGNvbnN0IHZvaWQqIHBvaW50ZXIpCisgICAgICAgICAg
ICA6IG1faXNUb3AoZmFsc2UpCisgICAgICAgICAgICAsIG1fdmFsdWUoYml0d2lzZV9jYXN0PGlu
dHB0cl90Pihwb2ludGVyKSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBQYXlsb2FkKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgICAgICAgICAgOiBtX2lzVG9w
KGZhbHNlKQorICAgICAgICAgICAgLCBtX3ZhbHVlKHN0YXRpY19jYXN0PGludD4ob3BlcmFuZCkp
CisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIFBheWxvYWQg
dG9wKCkgeyByZXR1cm4gUGF5bG9hZCh0cnVlLCAwKTsgfQorICAgICAgICAKKyAgICAgICAgYm9v
bCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1faXNUb3A7IH0KKyAgICAgICAgaW50NjRfdCB2YWx1
ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghaXNUb3AoKSk7CisgICAg
ICAgICAgICByZXR1cm4gdmFsdWVJbXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgaW50NjRfdCB2
YWx1ZUltcGwoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV92YWx1ZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBheWxv
YWQmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pc1RvcCA9
PSBvdGhlci5tX2lzVG9wCisgICAgICAgICAgICAgICAgJiYgbV92YWx1ZSA9PSBvdGhlci5tX3Zh
bHVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
UGF5bG9hZCYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRv
cjwoY29uc3QgUGF5bG9hZCYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChpc1RvcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAhb3RoZXIuaXNUb3AoKTsKKyAgICAg
ICAgICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHJldHVybiB2YWx1ZSgpIDwgb3RoZXIudmFsdWUoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgYm9vbCBpc0Rpc2pvaW50KGNvbnN0IFBheWxvYWQmIG90aGVyKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAob3RoZXIuaXNUb3AoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbV92YWx1ZSAhPSBvdGhl
ci5tX3ZhbHVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG92ZXJsYXBzKGNv
bnN0IFBheWxvYWQmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
IWlzRGlzam9pbnQob3RoZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAg
Ym9vbCBtX2lzVG9wOworICAgICAgICBpbnQ2NF90IG1fdmFsdWU7CisgICAgfTsKKyAgICAKKyAg
ICBBYnN0cmFjdEhlYXAoKQorICAgIHsKKyAgICAgICAgbV92YWx1ZSA9IGVuY29kZShJbnZhbGlk
QWJzdHJhY3RIZWFwLCBQYXlsb2FkKCkpOworICAgIH0KKyAgICAKKyAgICBBYnN0cmFjdEhlYXAo
QWJzdHJhY3RIZWFwS2luZCBraW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgIT0gSW52
YWxpZEFic3RyYWN0SGVhcCk7CisgICAgICAgIG1fdmFsdWUgPSBlbmNvZGUoa2luZCwgUGF5bG9h
ZDo6dG9wKCkpOworICAgIH0KKyAgICAKKyAgICBBYnN0cmFjdEhlYXAoQWJzdHJhY3RIZWFwS2lu
ZCBraW5kLCBQYXlsb2FkIHBheWxvYWQpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCAhPSBJ
bnZhbGlkQWJzdHJhY3RIZWFwICYmIGtpbmQgIT0gV29ybGQpOworICAgICAgICBtX3ZhbHVlID0g
ZW5jb2RlKGtpbmQsIHBheWxvYWQpOworICAgIH0KKyAgICAKKyAgICBBYnN0cmFjdEhlYXAoV1RG
OjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgIHsKKyAgICAgICAgbV92YWx1ZSA9IGVu
Y29kZShJbnZhbGlkQWJzdHJhY3RIZWFwLCBQYXlsb2FkOjp0b3AoKSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEludmFsaWRBYnN0
cmFjdEhlYXAgJiYgIXBheWxvYWRJbXBsKCkuaXNUb3AoKTsgfQorICAgIAorICAgIEFic3RyYWN0
SGVhcEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEFic3RyYWN0SGVhcEtp
bmQ+KG1fdmFsdWUgJiAoKDEgPDwgdG9wU2hpZnQpIC0gMSkpOyB9CisgICAgUGF5bG9hZCBwYXls
b2FkKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgIT0gV29ybGQgJiYga2lu
ZCgpICE9IEludmFsaWRBYnN0cmFjdEhlYXApOworICAgICAgICByZXR1cm4gcGF5bG9hZEltcGwo
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0Rpc2pvaW50KGNvbnN0IEFic3RyYWN0SGVhcCYg
b3RoZXIpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpICE9IEludmFsaWRBYnN0cmFjdEhl
YXApOworICAgICAgICBBU1NFUlQob3RoZXIua2luZCgpICE9IEludmFsaWRBYnN0cmFjdEhlYXAp
OworICAgICAgICBpZiAoa2luZCgpID09IFdvcmxkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAob3RoZXIua2luZCgpID09IFdvcmxkKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpZiAoa2luZCgpICE9IG90aGVyLmtpbmQoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gcGF5bG9hZCgpLmlzRGlzam9pbnQob3RoZXIu
cGF5bG9hZCgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBBYnN0cmFj
dEhlYXAmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFpc0Rpc2pvaW50KG90aGVyKTsK
KyAgICB9CisgICAgCisgICAgQWJzdHJhY3RIZWFwIHN1cGVydHlwZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpICE9IEludmFsaWRBYnN0cmFjdEhlYXApOworICAgICAgICBp
ZiAoa2luZCgpID09IFdvcmxkKQorICAgICAgICAgICAgcmV0dXJuIEFic3RyYWN0SGVhcCgpOwor
ICAgICAgICBpZiAocGF5bG9hZCgpLmlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gV29ybGQ7
CisgICAgICAgIHJldHVybiBBYnN0cmFjdEhlYXAoa2luZCgpKTsKKyAgICB9CisgICAgCisgICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNo
PGludDY0X3Q+OjpoYXNoKG1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQWJzdHJhY3RIZWFwJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBBYnN0cmFjdEhlYXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChj
b25zdCBBYnN0cmFjdEhlYXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGtpbmQo
KSAhPSBvdGhlci5raW5kKCkpCisgICAgICAgICAgICByZXR1cm4ga2luZCgpIDwgb3RoZXIua2lu
ZCgpOworICAgICAgICByZXR1cm4gcGF5bG9hZCgpIDwgb3RoZXIucGF5bG9hZCgpOworICAgIH0K
KyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBraW5kKCkgPT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBwYXlsb2FkSW1w
bCgpLmlzVG9wKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVl
U2hpZnQgPSAxNTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdG9wU2hpZnQgPSAxNDsKKyAg
ICAKKyAgICBQYXlsb2FkIHBheWxvYWRJbXBsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBQYXlsb2FkKChtX3ZhbHVlID4+IHRvcFNoaWZ0KSAmIDEsIG1fdmFsdWUgPj4gdmFsdWVTaGlm
dCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBpbnQ2NF90IGVuY29kZShBYnN0cmFjdEhlYXBL
aW5kIGtpbmQsIFBheWxvYWQgcGF5bG9hZCkKKyAgICB7CisgICAgICAgIGludDY0X3Qga2luZEFz
SW50ID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oa2luZCk7CisgICAgICAgIEFTU0VSVChraW5kQXNJ
bnQgPCAoMSA8PCB0b3BTaGlmdCkpOworICAgICAgICByZXR1cm4ga2luZEFzSW50IHwgKHBheWxv
YWQuaXNUb3AoKSA8PCB0b3BTaGlmdCkgfCAocGF5bG9hZC52YWx1ZUltcGwoKSA8PCB2YWx1ZVNo
aWZ0KTsKKyAgICB9CisgICAgCisgICAgaW50NjRfdCBtX3ZhbHVlOworfTsKKworc3RydWN0IEFi
c3RyYWN0SGVhcEhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEFic3RyYWN0
SGVhcCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgQWJzdHJhY3RIZWFwJiBhLCBjb25zdCBBYnN0cmFjdEhlYXAmIGIpIHsgcmV0dXJuIGEg
PT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxl
dGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNl
IFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpBYnN0
cmFjdEhlYXBLaW5kKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNo
OwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OkFic3RyYWN0SGVhcD4g
eworICAgIHR5cGVkZWYgSlNDOjpERkc6OkFic3RyYWN0SGVhcEhhc2ggSGFzaDsKK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SGFzaFRyYWl0czxKU0M6OkRGRzo6QWJzdHJhY3RIZWFwPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0
czxKU0M6OkRGRzo6QWJzdHJhY3RIZWFwPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBYnN0cmFjdEhlYXBfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdDbG9iYmVyU2V0LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Ns
b2JiZXJpemUuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitDbG9iYmVyU2V0OjpDbG9iYmVyU2V0KCkgeyB9CitDbG9iYmVy
U2V0Ojp+Q2xvYmJlclNldCgpIHsgfQorCit2b2lkIENsb2JiZXJTZXQ6OmFkZChBYnN0cmFjdEhl
YXAgaGVhcCkKK3sKKyAgICBIYXNoTWFwPEFic3RyYWN0SGVhcCwgYm9vbD46OkFkZFJlc3VsdCBy
ZXN1bHQgPSBtX2Nsb2JiZXJzLmFkZChoZWFwLCB0cnVlKTsKKyAgICBpZiAocmVzdWx0LmlzTmV3
RW50cnkpIHsKKyAgICAgICAgaWYgKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSB0cnVlOworICAgIH0K
KyAgICB3aGlsZSAoaGVhcC5raW5kKCkgIT0gV29ybGQpIHsKKyAgICAgICAgaGVhcCA9IGhlYXAu
c3VwZXJ0eXBlKCk7CisgICAgICAgIGlmICghbV9jbG9iYmVycy5hZGQoaGVhcCwgZmFsc2UpLmlz
TmV3RW50cnkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCitib29sIENsb2JiZXJT
ZXQ6OmNvbnRhaW5zKEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAoreworICAgIEhhc2hNYXA8QWJz
dHJhY3RIZWFwLCBib29sPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fY2xvYmJlcnMuZmluZCho
ZWFwKTsKKyAgICBpZiAoaXRlciA9PSBtX2Nsb2JiZXJzLmVuZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworfQorCitib29sIENsb2JiZXJTZXQ6Om92
ZXJsYXBzKEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAoreworICAgIGlmIChtX2Nsb2JiZXJzLmZp
bmQoaGVhcCkgIT0gbV9jbG9iYmVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
d2hpbGUgKGhlYXAua2luZCgpICE9IFdvcmxkKSB7CisgICAgICAgIGhlYXAgPSBoZWFwLnN1cGVy
dHlwZSgpOworICAgICAgICBpZiAoY29udGFpbnMoaGVhcCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENsb2JiZXJTZXQ6OmNs
ZWFyKCkKK3sKKyAgICBtX2Nsb2JiZXJzLmNsZWFyKCk7Cit9CisKK0hhc2hTZXQ8QWJzdHJhY3RI
ZWFwPiBDbG9iYmVyU2V0OjpkaXJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBzZXRPZih0cnVl
KTsKK30KKworSGFzaFNldDxBYnN0cmFjdEhlYXA+IENsb2JiZXJTZXQ6OnN1cGVyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gc2V0T2YoZmFsc2UpOworfQorCit2b2lkIENsb2JiZXJTZXQ6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIihEaXJlY3Q6WyIsIHNv
cnRlZExpc3REdW1wKGRpcmVjdCgpKSwgIl0sIFN1cGVyOlsiLCBzb3J0ZWRMaXN0RHVtcChzdXBl
cigpKSwgIl0pIik7Cit9CisKK0hhc2hTZXQ8QWJzdHJhY3RIZWFwPiBDbG9iYmVyU2V0OjpzZXRP
Zihib29sIGRpcmVjdCkgY29uc3QKK3sKKyAgICBIYXNoU2V0PEFic3RyYWN0SGVhcD4gcmVzdWx0
OworICAgIGZvciAoSGFzaE1hcDxBYnN0cmFjdEhlYXAsIGJvb2w+Ojpjb25zdF9pdGVyYXRvciBp
dGVyID0gbV9jbG9iYmVycy5iZWdpbigpOyBpdGVyICE9IG1fY2xvYmJlcnMuZW5kKCk7ICsraXRl
cikgeworICAgICAgICBpZiAoaXRlci0+dmFsdWUgPT0gZGlyZWN0KQorICAgICAgICAgICAgcmVz
dWx0LmFkZChpdGVyLT5rZXkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IGFkZFJlYWRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgcmVhZFNldCkK
K3sKKyAgICBDbG9iYmVyU2V0QWRkIGFkZFJlYWQocmVhZFNldCk7CisgICAgTm9PcENsb2JiZXJp
emUgYWRkV3JpdGU7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRkUmVhZCwgYWRkV3Jp
dGUpOworfQorCit2b2lkIGFkZFdyaXRlcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2Ji
ZXJTZXQmIHdyaXRlU2V0KQoreworICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7CisgICAgQ2xv
YmJlclNldEFkZCBhZGRXcml0ZSh3cml0ZVNldCk7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9k
ZSwgYWRkUmVhZCwgYWRkV3JpdGUpOworfQorCit2b2lkIGFkZFJlYWRzQW5kV3JpdGVzKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgcmVhZFNldCwgQ2xvYmJlclNldCYgd3Jp
dGVTZXQpCit7CisgICAgQ2xvYmJlclNldEFkZCBhZGRSZWFkKHJlYWRTZXQpOworICAgIENsb2Ji
ZXJTZXRBZGQgYWRkV3JpdGUod3JpdGVTZXQpOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUs
IGFkZFJlYWQsIGFkZFdyaXRlKTsKK30KKworYm9vbCBvdmVybGFwc1JlYWRzKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgcmVhZFNldCkKK3sKKyAgICBDbG9iYmVyU2V0T3Zl
cmxhcHMgYWRkUmVhZChyZWFkU2V0KTsKKyAgICBOb09wQ2xvYmJlcml6ZSBhZGRXcml0ZTsKKyAg
ICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7CisgICAgcmV0dXJu
IGFkZFJlYWQucmVzdWx0KCk7Cit9CisKK2Jvb2wgb3ZlcmxhcHNXcml0ZXMoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0JiB3cml0ZVNldCkKK3sKKyAgICBOb09wQ2xvYmJlcml6
ZSBhZGRSZWFkOworICAgIENsb2JiZXJTZXRPdmVybGFwcyBhZGRXcml0ZSh3cml0ZVNldCk7Cisg
ICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRkUmVhZCwgYWRkV3JpdGUpOworICAgIHJldHVy
biBhZGRXcml0ZS5yZXN1bHQoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlclNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdD
bG9iYmVyU2V0X2gKKyNkZWZpbmUgREZHQ2xvYmJlclNldF9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RI
ZWFwLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworc3RydWN0IE5vZGU7CisKKy8vIEZJWE1FOiBJZiB3
ZSBldmVyIHdhbnQgdG8gY29tcGFyZSBpZiB0d28gbm9kZXMgY2xvYmJlciBlYWNoIG90aGVyLCB3
ZSBzaG91bGQKKy8vIGhhdmUgYSBTbWFsbENsb2JiZXJTZXQsIHdoaWNoIGp1c3Qga2VlcHMgYW4g
YXJyYXkgb2YgdGhlIEFic3RyYWN0SGVhcHMgYW5kCisvLyBzYXRpc2ZpZXMgb3ZlcmxhcHMoKSBy
ZXF1ZXN0cyBieSBsb29waW5nIG92ZXIgYWxsIG9mIHRoZW0uIFRoaXMgd2lsbCBwcm9iYWJseQor
Ly8gYmUgZmFzdGVyIHRoYW4gYSBmdWxsIEhhc2hNYXAgaW4gYSBsb3Qgb2YgY2FzZXMuIE9yLCBt
YXliZSwgd2UgY291bGQgaGF2ZQorLy8gQ2xvYmJlclNldCBiZSBzbWFydCBhbmQgdXNlIGEgdmVj
dG9yIHNvIGxvbmcgYXMgaXQgd2FzIHNtYWxsLgorCitjbGFzcyBDbG9iYmVyU2V0IHsKK3B1Ymxp
YzoKKyAgICBDbG9iYmVyU2V0KCk7CisgICAgfkNsb2JiZXJTZXQoKTsKKyAgICAKKyAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2Nsb2JiZXJzLmlzRW1wdHkoKTsgfQorICAgIAor
ICAgIHZvaWQgYWRkKEFic3RyYWN0SGVhcCk7CisgICAgYm9vbCBjb250YWlucyhBYnN0cmFjdEhl
YXApIGNvbnN0OworICAgIGJvb2wgb3ZlcmxhcHMoQWJzdHJhY3RIZWFwKSBjb25zdDsKKyAgICB2
b2lkIGNsZWFyKCk7CisgICAgCisgICAgLy8gQ2FsbHMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgdGhl
IENsb2JiZXJTZXQuCisgICAgCisgICAgSGFzaFNldDxBYnN0cmFjdEhlYXA+IGRpcmVjdCgpIGNv
bnN0OworICAgIEhhc2hTZXQ8QWJzdHJhY3RIZWFwPiBzdXBlcigpIGNvbnN0OworICAgIAorICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBIYXNo
U2V0PEFic3RyYWN0SGVhcD4gc2V0T2YoYm9vbCBkaXJlY3QpIGNvbnN0OworICAgIAorICAgIC8v
IE1hcHMgaGVhcCB0bzoKKyAgICAvLyB0cnVlIC0tPiBpdCdzIGEgZGlyZWN0IGNsb2JiZXIKKyAg
ICAvLyBmYWxzZSAtLT4gaXQncyBqdXN0IGEgc3VwZXJ0eXBlIG9mIGEgZGlyZWN0IGNsb2JiZXIK
KyAgICBIYXNoTWFwPEFic3RyYWN0SGVhcCwgYm9vbD4gbV9jbG9iYmVyczsKK307CisKK2NsYXNz
IENsb2JiZXJTZXRBZGQgeworcHVibGljOgorICAgIENsb2JiZXJTZXRBZGQoQ2xvYmJlclNldCYg
c2V0KQorICAgICAgICA6IG1fc2V0KHNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQg
b3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB7CisgICAgICAgIG1fc2V0LmFkZCho
ZWFwKTsKKyAgICB9Citwcml2YXRlOgorICAgIENsb2JiZXJTZXQmIG1fc2V0OworfTsKKworY2xh
c3MgQ2xvYmJlclNldE92ZXJsYXBzIHsKK3B1YmxpYzoKKyAgICBDbG9iYmVyU2V0T3ZlcmxhcHMo
Y29uc3QgQ2xvYmJlclNldCYgc2V0KQorICAgICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgLCBt
X3Jlc3VsdChmYWxzZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgb3BlcmF0b3IoKShB
YnN0cmFjdEhlYXAgaGVhcCkKKyAgICB7CisgICAgICAgIG1fcmVzdWx0IHw9IG1fc2V0Lm92ZXJs
YXBzKGhlYXApOworICAgIH0KKyAgICAKKyAgICBib29sIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVzdWx0OyB9CisgICAgCitwcml2YXRlOgorICAgIGNvbnN0IENsb2JiZXJTZXQmIG1fc2V0
OworICAgIGJvb2wgbV9yZXN1bHQ7Cit9OworCit2b2lkIGFkZFJlYWRzKEdyYXBoJiwgTm9kZSos
IENsb2JiZXJTZXQmKTsKK3ZvaWQgYWRkV3JpdGVzKEdyYXBoJiwgTm9kZSosIENsb2JiZXJTZXQm
KTsKK3ZvaWQgYWRkUmVhZHNBbmRXcml0ZXMoR3JhcGgmLCBOb2RlKiwgQ2xvYmJlclNldCYgcmVh
ZHMsIENsb2JiZXJTZXQmIHdyaXRlcyk7CisKK2Jvb2wgb3ZlcmxhcHNSZWFkcyhHcmFwaCYsIE5v
ZGUqLCBDbG9iYmVyU2V0Jik7Citib29sIG92ZXJsYXBzV3JpdGVzKEdyYXBoJiwgTm9kZSosIENs
b2JiZXJTZXQmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdDbG9iYmVyU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERGR0Nsb2JiZXJpemVfaAorI2RlZmluZSBERkdDbG9iYmVyaXplX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdBYnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRlICJERkdFZGdlVXNlc1N0cnVjdHVyZS5o
IgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmVhZEZ1bmN0b3IsIHR5cGVuYW1lIFdyaXRlRnVuY3Rv
cj4KK3ZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIFJlYWRGdW5jdG9y
JiByZWFkLCBXcml0ZUZ1bmN0b3ImIHdyaXRlKQoreworICAgIC8vIFNvbWUgbm90ZXM6CisgICAg
Ly8KKyAgICAvLyAtIFdlIGNhbm5vdCBob2lzdCwgb3Igc2luaywgYW55dGhpbmcgdGhhdCBoYXMg
ZWZmZWN0cy4gVGhpcyBtZWFucyB0aGF0IHRoZQorICAgIC8vICAgZWFzaWVzdCB3YXkgb2YgaW5k
aWNhdGluZyB0aGF0IHNvbWV0aGluZyBjYW5ub3QgYmUgaG9pc3RlZCBpcyB0byBjbGFpbQorICAg
IC8vICAgdGhhdCBpdCBzaWRlLWVmZmVjdHMgc29tZSBtaXNjZWxsYW5lb3VzIHRoaW5nLgorICAg
IC8vCisgICAgLy8gLSBXZSBjYW5ub3QgaG9pc3QgZm9yd2FyZC1leGl0aW5nIG5vZGVzIHdpdGhv
dXQgc29tZSBhZGRpdGlvbmFsIGVmZm9ydC4gSQorICAgIC8vICAgYmVsaWV2ZSB0aGF0IHdoYXQg
aXQgY29tZXMgZG93biB0byBpcyB0aGF0IGZvcndhcmQtZXhpdGluZyBnZW5lcmFsbHkgaGF2ZQor
ICAgIC8vICAgdGhlaXIgTm9kZUV4aXRzRm9yd2FyZCBjbGVhcmVkIHVwb24gaG9pc3QsIGV4Y2Vw
dCBmb3IgZm9yd2FyZC1leGl0aW5nCisgICAgLy8gICBub2RlcyB0aGF0IHRha2UgYm9ndXMgc3Rh
dGUgYXMgdGhlaXIgaW5wdXQuIFRob3NlIGFyZSBzdWJzdGFudGlhbGx5CisgICAgLy8gICBoYXJk
ZXIuIFdlIGRpc2FibGUgaXQgZm9yIG5vdy4gSW4gdGhlIGZ1dHVyZSB3ZSBjb3VsZCBlbmFibGUg
aXQgYnkgaGF2aW5nCisgICAgLy8gICB2ZXJzaW9ucyBvZiB0aG9zZSBub2RlcyB0aGF0IGJhY2t3
YXJkLWV4aXQgaW5zdGVhZCwgYnV0IEknbSBub3QgY29udmluY2VkCisgICAgLy8gICBvZiB0aGUg
c291bmRuZXNzLgorICAgIC8vCisgICAgLy8gLSBTb21lIG5vZGVzIGxpZSwgYW5kIGNsYWltIHRo
YXQgdGhleSBkbyBub3QgcmVhZCB0aGUgSlNDZWxsX3N0cnVjdHVyZS4KKyAgICAvLyAgIFRoZXNl
IGFyZSBub2RlcyB0aGF0IHVzZSB0aGUgc3RydWN0dXJlIGluIGEgd2F5IHRoYXQgZG9lcyBub3Qg
ZGVwZW5kIG9uCisgICAgLy8gICB0aGluZ3MgdGhhdCBjaGFuZ2UgdW5kZXIgc3RydWN0dXJlIHRy
YW5zaXRpb25zLgorICAgIC8vCisgICAgLy8gLSBJdCdzIGltcGxpY2l0bHkgdW5kZXJzdG9vZCB0
aGF0IE9TUiBleGl0cyByZWFkIHRoZSB3b3JsZC4gVGhpcyBpcyB3aHkgd2UKKyAgICAvLyAgIGdl
bmVyYWxseSBkb24ndCBtb3ZlIG9yIGVsaW1pbmF0ZSBzdG9yZXMuIEV2ZXJ5IG5vZGUgY2FuIGV4
aXQsIHNvIHRoZQorICAgIC8vICAgcmVhZCBzZXQgZG9lcyBub3QgcmVmbGVjdCB0aGluZ3MgdGhh
dCB3b3VsZCBiZSByZWFkIGlmIHdlIGV4aXRlZC4KKyAgICAvLyAgIEluc3RlYWQsIHRoZSByZWFk
IHNldCByZWZsZWN0cyB3aGF0IHRoZSBub2RlIHdpbGwgaGF2ZSB0byByZWFkIGlmIGl0CisgICAg
Ly8gICAqZG9lc24ndCogZXhpdC4KKyAgICAvLworICAgIC8vIC0gQnJvYWRseSwgd2UgZG9uJ3Qg
c2F5IHRoYXQgd2UncmUgcmVhZGluZyBzb21ldGhpbmcgaWYgdGhhdCBzb21ldGhpbmcgaXMKKyAg
ICAvLyAgIGltbXV0YWJsZS4KKyAgICAvLworICAgIC8vIC0gV2UgdHJ5IHRvIG1ha2UgdGhpcyB3
b3JrIGV2ZW4gcHJpb3IgdG8gdHlwZSBpbmZlcmVuY2UsIGp1c3Qgc28gdGhhdCB3ZQorICAgIC8v
ICAgY2FuIHVzZSBpdCBmb3IgSVIgZHVtcHMuIE5vIHByb21pc2VzIG9uIHdoZXRoZXIgdGhlIGFu
c3dlcnMgYXJlIHNvdW5kCisgICAgLy8gICBwcmlvciB0byB0eXBlIGluZmVyZW5jZSAtIHRob3Vn
aCB0aGV5IHByb2JhYmx5IGNvdWxkIGJlIGlmIHdlIGRpZCBzb21lCisgICAgLy8gICBzbWFsbCBo
YWNraW5nLgorICAgIAorICAgIGlmIChlZGdlc1VzZVN0cnVjdHVyZShncmFwaCwgbm9kZSkpCisg
ICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZSk7CisgICAgCisgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CisgICAgY2FzZSBKU0NvbnN0YW50OgorICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Cisg
ICAgY2FzZSBJZGVudGl0eToKKyAgICBjYXNlIFBoYW50b206CisgICAgY2FzZSBCaXRBbmQ6Cisg
ICAgY2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoKKyAgICBjYXNlIEJpdExTaGlmdDoKKyAg
ICBjYXNlIEJpdFJTaGlmdDoKKyAgICBjYXNlIEJpdFVSU2hpZnQ6CisgICAgY2FzZSBWYWx1ZVRv
SW50MzI6CisgICAgY2FzZSBBcml0aEFkZDoKKyAgICBjYXNlIEFyaXRoU3ViOgorICAgIGNhc2Ug
QXJpdGhOZWdhdGU6CisgICAgY2FzZSBBcml0aE11bDoKKyAgICBjYXNlIEFyaXRoRGl2OgorICAg
IGNhc2UgQXJpdGhNb2Q6CisgICAgY2FzZSBBcml0aEFiczoKKyAgICBjYXNlIEFyaXRoTWluOgor
ICAgIGNhc2UgQXJpdGhNYXg6CisgICAgY2FzZSBBcml0aFNxcnQ6CisgICAgY2FzZSBHZXRTY29w
ZToKKyAgICBjYXNlIFNraXBTY29wZToKKyAgICBjYXNlIENoZWNrRnVuY3Rpb246CisgICAgY2Fz
ZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6CisgICAgY2Fz
ZSBDb21wYXJlU3RyaWN0RXFDb25zdGFudDoKKyAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKKyAg
ICBjYXNlIElzVW5kZWZpbmVkOgorICAgIGNhc2UgSXNCb29sZWFuOgorICAgIGNhc2UgSXNOdW1i
ZXI6CisgICAgY2FzZSBJc1N0cmluZzoKKyAgICBjYXNlIExvZ2ljYWxOb3Q6CisgICAgY2FzZSBJ
bnQzMlRvRG91YmxlOgorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgTW92SGlu
dEFuZENoZWNrOgorICAgIGNhc2UgTW92SGludDoKKyAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAg
Y2FzZSBVcHNpbG9uOgorICAgIGNhc2UgUGhpOgorICAgIGNhc2UgRmx1c2g6CisgICAgY2FzZSBQ
aGFudG9tTG9jYWw6CisgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICBjYXNlIElubGluZVN0YXJ0
OgorICAgIGNhc2UgQnJlYWtwb2ludDoKKyAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CisgICAg
Y2FzZSBDcmVhdGVBcmd1bWVudHM6CisgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgorICAgIGNh
c2UgSnVtcDoKKyAgICBjYXNlIEJyYW5jaDoKKyAgICBjYXNlIFN3aXRjaDoKKyAgICBjYXNlIFRo
cm93OgorICAgIGNhc2UgRm9yY2VPU1JFeGl0OgorICAgIGNhc2UgRm9yd2FyZEZvcmNlT1NSRXhp
dDoKKyAgICBjYXNlIFJldHVybjoKKyAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gVGhlc2UgYXJlIGZvcndhcmQtZXhpdGluZyBub2RlcyB0aGF0IGFz
c3VtZSB0aGF0IHRoZSBzdWJzZXF1ZW50IGluc3RydWN0aW9uCisgICAgLy8gaXMgYSBNb3ZIaW50
LCBhbmQgdGhleSB0cnkgdG8gcm9sbCBmb3J3YXJkIG92ZXIgdGhpcyBNb3ZIaW50IGluIHRoZWly
CisgICAgLy8gZXhlY3V0aW9uLiBUaGlzIG1ha2VzIGhvaXN0aW5nIHRoZW0gaW1wb3NzaWJsZSB3
aXRob3V0IGFkZGl0aW9uYWwgbWFnaWMuIFdlCisgICAgLy8gbWF5IGFkZCBzdWNoIG1hZ2ljIGV2
ZW50dWFsbHksIGJ1dCBqdXN0IG5vdCB5ZXQuCisgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAg
ICBjYXNlIEZvcndhcmRJbnQzMlRvRG91YmxlOgorICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKKyAg
ICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBj
YXNlIENyZWF0ZVRoaXM6CisgICAgY2FzZSBUb1RoaXM6CisgICAgY2FzZSBWYXJJbmplY3Rpb25X
YXRjaHBvaW50OgorICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OgorICAgIGNh
c2UgSXNPYmplY3Q6CisgICAgY2FzZSBJc0Z1bmN0aW9uOgorICAgIGNhc2UgVHlwZU9mOgorICAg
ICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNh
c2UgR2V0QnlJZDoKKyAgICBjYXNlIEdldEJ5SWRGbHVzaDoKKyAgICBjYXNlIFB1dEJ5SWQ6Cisg
ICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgIGNhc2UgQXJyYXlQdXNoOgorICAgIGNhc2UgQXJy
YXlQb3A6CisgICAgY2FzZSBDYWxsOgorICAgIGNhc2UgQ29uc3RydWN0OgorICAgIGNhc2UgVG9Q
cmltaXRpdmU6CisgICAgY2FzZSBJbjoKKyAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2Fm
ZToKKyAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6CisgICAgICAgIHJlYWQoV29ybGQp
OworICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsK
KyAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgICAgIHJlYWQo
V29ybGQpOworICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBjYXNlIEdl
dENhbGxlZToKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBKU1N0YWNrOjpD
YWxsZWUpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNldENhbGxlZToK
KyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6Q2FsbGVlKSk7
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHZXRMb2NhbDoKKyAgICBjYXNl
IEdldEFyZ3VtZW50OgorICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUt
PmxvY2FsKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNldExvY2Fs
OgorICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSk7
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgor
ICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnVubGlua2VkTG9jYWwo
KSkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgR2V0QnlWYWw6IHsKKyAg
ICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dpdGNo
IChtb2RlLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rp
b25zOgorICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICBjYXNlIEFycmF5
OjpVbmRlY2lkZWQ6CisgICAgICAgICAgICAvLyBBc3N1bWUgdGhlIHdvcnN0IHNpbmNlIHdlIGRv
bid0IGhhdmUgcHJvZmlsaW5nIHlldC4KKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAg
ICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIHdyaXRlKFNpZGVTdGF0
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJh
eTo6R2VuZXJpYzoKKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUo
V29ybGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
QXJyYXk6OlN0cmluZzoKKyAgICAgICAgICAgIGlmIChtb2RlLmlzT3V0T2ZCb3VuZHMoKSkgewor
ICAgICAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgICAgIHdyaXRlKFdvcmxk
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAv
LyBUaGlzIGFwcGVhcnMgdG8gcmVhZCBub3RoaW5nIGJlY2F1c2UgaXQncyBvbmx5IHJlYWRpbmcg
aW1tdXRhYmxlIGRhdGEuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfcmVn
aXN0ZXJzKTsKKyAgICAgICAgICAgIHJlYWQoVmFyaWFibGVzKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAg
IGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5
X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVu
Z3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlYWQoV29y
bGQpOworICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAgICAgICAgIGlmICht
b2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1Ymxp
Y0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsK
KyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWFkKFdvcmxkKTsK
KyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICAgICAgaWYgKG1v
ZGUuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGlj
TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwor
ICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWFkKFdvcmxk
KTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2Ug
QXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAvLyBHaXZlIHVwIG9uIGxp
ZmUgZm9yIG5vdy4KKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUo
V29ybGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
QXJyYXk6OkludDhBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJh
eToKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIGNhc2Ug
QXJyYXk6OlVpbnQxNkFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAg
ICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDY0QXJyYXk6CisgICAgICAgICAgICByZWFkKFR5cGVkQXJyYXlQcm9wZXJ0aWVzKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFB1dEJ5
VmFsOgorICAgIGNhc2UgUHV0QnlWYWxBbGlhczogeworICAgICAgICBBcnJheU1vZGUgbW9kZSA9
IG5vZGUtPmFycmF5TW9kZSgpOworICAgICAgICBzd2l0Y2ggKG1vZGUubW9kZUZvclB1dCgpLnR5
cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgorICAg
ICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lk
ZWQ6CisgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgICAgIC8vIEFzc3VtZSB0
aGUgd29yc3Qgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBwcm9maWxpbmcgeWV0LgorICAgICAgICAgICAg
cmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAg
ICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICAgICAgcmVhZChXb3JsZCk7
CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAgcmVhZChB
cmd1bWVudHNfcmVnaXN0ZXJzKTsKKyAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX251bUFyZ3Vt
ZW50cyk7CisgICAgICAgICAgICByZWFkKEFyZ3VtZW50c19zbG93QXJndW1lbnRzKTsKKyAgICAg
ICAgICAgIHdyaXRlKFZhcmlhYmxlcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgICAgICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChXb3JsZCk7
CisgICAgICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7
CisgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAg
cmVhZChJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHdyaXRlKEluZGV4ZWRJ
bnQzMlByb3BlcnRpZXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAg
ICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAg
ICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICByZWFkKElu
ZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHdyaXRlKEluZGV4ZWREb3VibGVQ
cm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgp
LmlzT3V0T2ZCb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAg
ICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAg
ICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgIHJlYWQoSW5k
ZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHdyaXRlKEluZGV4ZWRDb250
aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIEFycmF5OjpTbG93
UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgLy8gR2l2ZSB1cCBvbiBsaWZlIGZvciBub3cu
CisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAg
ICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJy
YXk6CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAg
ICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0
MzJBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICAgICAg
d3JpdGUoVHlwZWRBcnJheVByb3BlcnRpZXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgY2FzZSBG
b3J3YXJkQ2hlY2tTdHJ1Y3R1cmU6CisgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludDoKKyAgICBjYXNlIEZvcndhcmRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKKyAg
ICBjYXNlIENoZWNrQXJyYXk6CisgICAgY2FzZSBGb3J3YXJkQ2hlY2tBcnJheToKKyAgICBjYXNl
IENoZWNrSGFzSW5zdGFuY2U6CisgICAgY2FzZSBJbnN0YW5jZU9mOgorICAgICAgICByZWFkKEpT
Q2VsbF9zdHJ1Y3R1cmUpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQ2hl
Y2tFeGVjdXRhYmxlOgorICAgICAgICByZWFkKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgY2FzZSBQ
aGFudG9tUHV0U3RydWN0dXJlOgorICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
OgorICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgcmVh
ZChKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkp
OworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgR2V0QnV0dGVyZmx5OgorICAg
ICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBBcnJheWlmeToKKyAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CisgICAg
ICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZSk7CisgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVy
Zmx5KTsKKyAgICAgICAgd3JpdGUoSlNDZWxsX3N0cnVjdHVyZSk7CisgICAgICAgIHdyaXRlKEpT
T2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBH
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgorICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpID09IEFycmF5OjpTdHJpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJl
YWQoVHlwZWRBcnJheVN0b3JhZ2VQb2ludGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICByZWFkKEFic3RyYWN0SGVhcChOYW1lZFBy
b3BlcnRpZXMsIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKE5hbWVk
UHJvcGVydGllcywgZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNz
RGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7CisgICAgICAgIEFycmF5TW9kZSBtb2RlID0g
bm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIHN3aXRjaCAobW9kZS50eXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgorICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAg
ICAgICAgcmVhZChBcmd1bWVudHNfb3ZlcnJpZGVMZW5ndGgpOworICAgICAgICAgICAgcmVhZChB
cmd1bWVudHNfbnVtQXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmVhZChUeXBlZEFycmF5TGVuZ3RoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBHZXRNeVNjb3BlOgorICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3Rh
Y2s6OlNjb3BlQ2hhaW4pKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNl
dE15U2NvcGU6CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6
OlNjb3BlQ2hhaW4pKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNraXBU
b3BTY29wZToKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBncmFwaC5tX2Nv
ZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBjYXNlIEdldENsb3N1cmVSZWdpc3RlcnM6CisgICAgICAgIHJlYWQoSlNWYXJpYWJs
ZU9iamVjdF9yZWdpc3RlcnMpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
R2V0Q2xvc3VyZVZhcjoKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2Rl
LT52YXJOdW1iZXIoKSkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgUHV0
Q2xvc3VyZVZhcjoKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+
dmFyTnVtYmVyKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEdldEds
b2JhbFZhcjoKKyAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9pbnQ6CisgICAgICAgIHJlYWQoQWJz
dHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgUHV0R2xvYmFsVmFyOgorICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoQWJzb2x1dGUsIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7CisgICAgICAg
IHJldHVybjsKKworICAgIGNhc2UgTmV3T2JqZWN0OgorICAgIGNhc2UgTmV3QXJyYXk6CisgICAg
Y2FzZSBOZXdBcnJheVdpdGhTaXplOgorICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CisgICAgY2Fz
ZSBOZXdSZWdleHA6CisgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CisgICAgY2FzZSBNYWtlUm9w
ZToKKyAgICBjYXNlIE5ld0Z1bmN0aW9uTm9DaGVjazoKKyAgICBjYXNlIE5ld0Z1bmN0aW9uOgor
ICAgIGNhc2UgTmV3RnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAgICByZWFkKEdDU3RhdGUpOwor
ICAgICAgICB3cml0ZShHQ1N0YXRlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBj
YXNlIFJlZ0V4cEV4ZWM6CisgICAgY2FzZSBSZWdFeHBUZXN0OgorICAgICAgICByZWFkKFJlZ0V4
cFN0YXRlKTsKKyAgICAgICAgd3JpdGUoUmVnRXhwU3RhdGUpOworICAgICAgICByZXR1cm47CisK
KyAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlz
T3V0T2ZCb3VuZHMoKSkgeworICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3
cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgIGNhc2UgQ29tcGFyZUxl
c3NFcToKKyAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgorICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJF
cToKKyAgICAgICAgaWYgKGdyYXBoLmlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgd3JpdGUoV29ybGQp
OworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQ29tcGFyZUVxOgorICAgICAg
ICBpZiAoZ3JhcGguaXNQcmVkaWN0ZWROdW1lcmljYWwobm9kZSkKKyAgICAgICAgICAgIHx8IG5v
ZGUtPmlzQmluYXJ5VXNlS2luZChTdHJpbmdVc2UpCisgICAgICAgICAgICB8fCBub2RlLT5pc0Jp
bmFyeVVzZUtpbmQoU3RyaW5nSWRlbnRVc2UpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgaWYgKChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlIHx8
IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlKQorICAgICAgICAg
ICAgJiYgKG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UgfHwgbm9kZS0+Y2hp
bGQyKCkudXNlS2luZCgpID09IE9iamVjdE9yT3RoZXJVc2UpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgIHdyaXRlKFdvcmxkKTsK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRvU3RyaW5nOgorICAgICAgICBz
d2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIFN0cmluZ09i
amVjdFVzZToKKyAgICAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVjdFVzZToKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAg
IGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAg
d3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICBjYXNlIFRlYXJPZmZBY3RpdmF0aW9u
OgorICAgICAgICB3cml0ZShKU1ZhcmlhYmxlT2JqZWN0X3JlZ2lzdGVycyk7CisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUZWFyT2ZmQXJndW1lbnRzOgorICAgICAgICB3cml0
ZShBcmd1bWVudHNfcmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBj
YXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgorICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJp
YWJsZXMsIGdyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKSk7Cisg
ICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5
VmFsOgorICAgICAgICByZWFkKFZhcmlhYmxlcyk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CisgICAgICAgIHJlYWQoQWJzdHJh
Y3RIZWFwKFZhcmlhYmxlcywgZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9y
aWdpbikpKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9y
OgorICAgICAgICB3cml0ZShTaWRlU3RhdGUpOworICAgICAgICByZWFkKEdDU3RhdGUpOworICAg
ICAgICB3cml0ZShHQ1N0YXRlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNl
IENvdW50RXhlY3V0aW9uOgorICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgorICAgICAgICBy
ZWFkKEludGVybmFsU3RhdGUpOworICAgICAgICB3cml0ZShJbnRlcm5hbFN0YXRlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIExhc3ROb2RlVHlwZToKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitjbGFzcyBOb09wQ2xvYmJl
cml6ZSB7CitwdWJsaWM6CisgICAgTm9PcENsb2JiZXJpemUoKSB7IH0KKyAgICB2b2lkIG9wZXJh
dG9yKCkoQWJzdHJhY3RIZWFwKSB7IH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ2xvYmJlcml6ZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAx
NTI5NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyU2V0Lmgi
CiAjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIgogI2luY2x1ZGUgIkZ1bmN0
aW9uRXhlY3V0YWJsZUR1bXAuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCkBAIC0yNTgsNiAr
MjU5LDEzIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAg
ICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+Y2FzZXNbaV0udmFsdWUsICI6IiwgKmRhdGEt
PmNhc2VzW2ldLnRhcmdldCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImRlZmF1bHQ6Iiwg
KmRhdGEtPmZhbGxUaHJvdWdoKTsKICAgICB9CisgICAgQ2xvYmJlclNldCByZWFkczsKKyAgICBD
bG9iYmVyU2V0IHdyaXRlczsKKyAgICBhZGRSZWFkc0FuZFdyaXRlcygqdGhpcywgbm9kZSwgcmVh
ZHMsIHdyaXRlcyk7CisgICAgaWYgKCFyZWFkcy5pc0VtcHR5KCkpCisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIlI6Iiwgc29ydGVkTGlzdER1bXAocmVhZHMuZGlyZWN0KCksICIsIikpOworICAg
IGlmICghd3JpdGVzLmlzRW1wdHkoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVzoiLCBz
b3J0ZWRMaXN0RHVtcCh3cml0ZXMuZGlyZWN0KCksICIsIikpOwogICAgIG91dC5wcmludChjb21t
YSwgImJjIyIsIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgb3V0
LnByaW50KCIpIik7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyOTQ1KQorKysgU291cmNlL1dURi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMy0wNy0yMCAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIGZvdXJ0aFRpZXI6IERGRyBOb2Rl
cyBzaG91bGQgYmUgYWJsZSB0byBhYnN0cmFjdGx5IHRlbGwgeW91IHdoYXQgdGhleSByZWFkIGFu
ZCB3aGF0IHRoZXkgd3JpdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExODkxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgRml4IGNvbXBpbGUgZ29vZiBpbiBzb3J0ZWRMaXN0RHVtcCgpLgor
CisgICAgICAgICogd3RmL0xpc3REdW1wLmg6CisgICAgICAgIChXVEY6OnNvcnRlZExpc3REdW1w
KToKKwogMjAxMy0wNy0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIGZvdXJ0aFRpZXI6IE5hdHVyYWxMb29wcyBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IGFu
c3dlciBxdWVzdGlvbnMgbGlrZSAid2hhdCBsb29wcyBvd24gdGhpcyBiYXNpYyBibG9jayIKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvTGlzdER1bXAuaAkocmV2aXNpb24gMTUyOTQ1KQorKysgU291cmNlL1dURi93dGYvTGlzdER1
bXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIGlubGluZSBib29sIGxlc3NU
aGFuKGNvbnN0IFQmIGEsIGNvbnN0IFQKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBDU3RyaW5nIHNv
cnRlZExpc3REdW1wKGNvbnN0IFQmIGxpc3QsIGNvbnN0IGNoYXIqIGNvbW1hID0gIiwgIikKIHsK
LSAgICByZXR1cm4gc29ydGVkTGlzdER1bXAobGlzdCwgbGVzc1RoYW48VDo6VmFsdWVUeXBlPiwg
Y29tbWEpOworICAgIHJldHVybiBzb3J0ZWRMaXN0RHVtcChsaXN0LCBsZXNzVGhhbjx0eXBlbmFt
ZSBUOjpWYWx1ZVR5cGU+LCBjb21tYSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207200</attachid>
            <date>2013-07-20 12:31:44 -0700</date>
            <delta_ts>2013-07-20 12:35:43 -0700</delta_ts>
            <desc>make the changelog even more epic</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59169</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyOTQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MiBA
QAorMjAxMy0wNy0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBOb2RlcyBzaG91bGQgYmUgYWJsZSB0byBhYnN0cmFjdGx5IHRlbGwg
eW91IHdoYXQgdGhleSByZWFkIGFuZCB3aGF0IHRoZXkgd3JpdGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODkxMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRkIHRoZSBub3Rpb24gb2Yg
QWJzdHJhY3RIZWFwIHRvIHRoZSBERkcuIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHRoZSBBYnN0cmFj
dEhlYXAgaW4KKyAgICAgICAgdGhlIEZUTCwgZXhjZXB0IHRoYXQgdGhlIEZUTCdzIEFic3RyYWN0
SGVhcHMgYXJlIHVzZWQgZHVyaW5nIExMVk0gbG93ZXJpbmcgYW5kIGFyZQorICAgICAgICBlbmdp
bmVlcmVkIHRvIG9iZXkgTExWTSBUQkFBIGxvZ2ljLiBUaGUgRlRMJ3MgQWJzdHJhY3RIZWFwcyBh
cmUgYWxzbyBlbmdpbmVlcmVkIHRvCisgICAgICAgIGJlIGluZXhwZW5zaXZlIHRvIHVzZSAodGhl
eSBqdXN0IGdpdmUgeW91IGEgVEJBQSBub2RlKSBidXQgZXhwZW5zaXZlIHRvIGNyZWF0ZSAoeW91
CisgICAgICAgIGNyZWF0ZSB0aGVtIGFsbCB1cCBmcm9udCkuIEZUTCBBYnN0cmFjdEhlYXBzIGFs
c28gZG9uJ3QgYWN0dWFsbHkgZ2l2ZSB5b3UgdGhlCisgICAgICAgIGFiaWxpdHkgdG8gcmVhc29u
IGFib3V0IGFsaWFzaW5nOyB0aGV5IGFyZSAqanVzdCogYSBtZWNoYW5pc20gZm9yIGxvd2VyaW5n
IHRvIFRCQUEuCisgICAgICAgIFRoZSBERkcncyBBYnN0cmFjdEhlYXBzIGFyZSBlbmdpbmVlcmVk
IHRvIGJlIGJvdGggY2hlYXAgdG8gY3JlYXRlIGFuZCBjaGVhcCB0byB1c2UuCisgICAgICAgIFRo
ZXkgYWxzbyBnaXZlIHlvdSBhbGlhc2luZyBtYWNoaW5lcnkuIFRoZSBERkcgQWJzdHJhY3RIZWFw
cyBhcmUgcmVwcmVzZW50ZWQKKyAgICAgICAgaW50ZXJuYWxseSBieSBhIGludDY0X3QuIE1hbnkg
Y29tcGFyaXNvbnMgYmV0d2VlbiB0aGVtIGFyZSBqdXN0IGludGVnZXIgY29tYXByaXNvbnMuCisg
ICAgICAgIEFic3RyYWN0SGVhcHMgZm9ybSBhIHRocmVlLWxldmVsIGhpZXJhcmNoeSAoV29ybGQg
aXMgdGhlIHN1cGVydHlwZSBvZiBldmVyeXRoaW5nLAorICAgICAgICBLaW5kIHdpdGggYSBUT1Ag
cGF5bG9hZCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLCBhbmQgS2luZCB3aXRoIGEgbm9u
LVRPUAorICAgICAgICBwYXlsb2FkIGlzIHRoZSBkaXJlY3Qgc3VidHlwZSBvZiBpdHMgY29ycmVz
cG9uZGluZyBUT1AgS2luZCkuCisgICAgICAgIAorICAgICAgICBBZGQgdGhlIG5vdGlvbiBvZiBh
IENsb2JiZXJTZXQuIFRoaXMgaXMgdGhlIHNldCBvZiBBYnN0cmFjdEhlYXBzIHRoYXQgeW91IGhh
ZAorICAgICAgICBjbG9iYmVyZWQuIEl0IHJlcHJlc2VudHMgdGhlIHNldCB0aGF0IHJlc3VsdHMg
ZnJvbSB1bmlmeWluZyBhIGJ1bmNoIG9mCisgICAgICAgIEFic3RyYWN0SGVhcHMsIGFuZCBpcyBp
bnRlbmRlZCB0byBxdWlja2x5IGFuc3dlciBvdmVybGFwIHF1ZXN0aW9uczogZG9lcyB0aGUgZ2l2
ZW4KKyAgICAgICAgQWJzdHJhY3RIZWFwIG92ZXJsYXAgYW55IEFic3RyYWN0SGVhcCBpbiB0aGUg
Q2xvYmJlclNldD8gVG8gdGhpcyBlbmQsIGlmIHlvdSBhZGQgYW4KKyAgICAgICAgQWJzdHJhY3RI
ZWFwIHRvIGEgc2V0LCBpdCAiZGlyZWN0bHkiIGFkZHMgdGhlIGhlYXAgaXRzZWxmLCBhbmQgInN1
cGVyIiBhZGRzIGFsbCBvZgorICAgICAgICBpdHMgYW5jZXN0b3JzLiBBbiBBYnN0cmFjdEhlYXAg
aXMgc2FpZCB0byBvdmVybGFwIGEgc2V0IGlmIGFueSBkaXJlY3Qgb3Igc3VwZXIKKyAgICAgICAg
bWVtYmVyIGlzIGVxdWFsIHRvIGl0LCBvciBpZiBhbnkgb2YgaXRzIGFuY2VzdG9ycyBhcmUgZXF1
YWwgdG8gYSBkaXJlY3QgbWVtYmVyLgorICAgICAgICAKKyAgICAgICAgRXhhbXBsZSAjMToKKyAg
ICAgICAgCisgICAgICAgICAgICAtIEkgYWRkIFZhcmlhYmxlcyg1KS4gSS5lLiBWYXJpYWJsZXMg
aXMgdGhlIEtpbmQgYW5kIDUgaXMgdGhlIHBheWxvYWQuIFRoaXMKKyAgICAgICAgICAgICAgaXMg
YSBzdWJ0eXBlIG9mIFZhcmlhYmxlcywgd2hpY2ggaXMgYSBzdWJ0eXBlIG9mIFdvcmxkLgorICAg
ICAgICAgICAgLSBZb3UgcXVlcnkgVmFyaWFibGVzLiBJLmUuIFZhcmlhYmxlcyB3aXRoIGEgVE9Q
IHBheWxvYWQsIHdoaWNoIGlzIHRoZQorICAgICAgICAgICAgICBzdXBlcnR5cGUgb2YgVmFyaWFi
bGVzKFgpIGZvciBhbnkgWCwgYW5kIGEgc3VidHlwZSBvZiBXb3JsZC4KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgVGhlIHNldCB3aWxsIGhhdmUgVmFyaWFibGVzKDUpIGFzIGEgZGlyZWN0IG1l
bWJlciwgYW5kIFZhcmlhYmxlcyBhbmQgV29ybGQgYXMKKyAgICAgICAgICAgIHN1cGVyIG1lbWJl
cnMuIFRoZSBWYXJpYWJsZXMgcXVlcnkgd2lsbCBpbW1lZGlhdGVseSByZXR1cm4gdHJ1ZSwgYmVj
YXVzZQorICAgICAgICAgICAgVmFyaWFibGVzIGlzIGluZGVlZCBhIHN1cGVyIG1lbWJlci4KKyAg
ICAgICAgCisgICAgICAgIEV4YW1wbGUgIzI6CisgICAgICAgIAorICAgICAgICAgICAgLSBJIGFk
ZCBWYXJpYWJsZXMoNSkKKyAgICAgICAgICAgIC0gWW91IHF1ZXJ5IE5hbWVkUHJvcGVydGllcwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBOYW1lZFByb3BlcnRpZXMgaXMgbm90IGEgbWVtYmVy
IGF0IGFsbCAobmVpdGhlciBkaXJlY3Qgb3Igc3VwZXIpLiBXZSBuZXh0CisgICAgICAgICAgICBx
dWVyeSBXb3JsZC4gV29ybGQgaXMgYSBtZW1iZXIsIGJ1dCBpdCdzIGEgc3VwZXIgbWVtYmVyLCBz
byB3ZSByZXR1cm4gZmFsc2UuCisgICAgICAgIAorICAgICAgICBFeGFtcGxlICMzOgorICAgICAg
ICAKKyAgICAgICAgICAgIC0gSSBhZGQgVmFyaWFibGVzCisgICAgICAgICAgICAtIFlvdSBxdWVy
eSBWYXJpYWJsZXMoNSkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVGhlIHNldCB3aWxsIGhh
dmUgVmFyaWFibGVzIGFzIGEgZGlyZWN0IG1lbWJlciwgYW5kIFdvcmxkIGFzIGEgc3VwZXIgbWVt
YmVyLgorICAgICAgICAgICAgVGhlIFZhcmlhYmxlcyg1KSBxdWVyeSB3aWxsIG5vdCBmaW5kIFZh
cmlhYmxlcyg1KSBpbiB0aGUgc2V0LCBidXQgdGhlbiBpdAorICAgICAgICAgICAgd2lsbCBxdWVy
eSBWYXJpYWJsZXMuIFZhcmlhYmxlcyBpcyBhIGRpcmVjdCBtZW1iZXIsIHNvIHdlIHJldHVybiB0
cnVlLgorICAgICAgICAKKyAgICAgICAgRXhhbXBsZSAjNDoKKyAgICAgICAgCisgICAgICAgICAg
ICAtIEkgYWRkIFZhcmlhYmxlcworICAgICAgICAgICAgLSBZb3UgcXVlcnkgTmFtZWRQcm9wZXJ0
aWVzKDUpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5laXRoZXIgTmFtZWRQcm9wZXJ0aWVz
IG5vciBOYW1lZFByb3BlcnRpZXMoNSkgYXJlIG1lbWJlcnMuIFdlIG5leHQgcXVlcnkKKyAgICAg
ICAgICAgIFdvcmxkLiBXb3JsZCBpcyBhIG1lbWJlciwgYnV0IGl0J3MgYSBzdXBlciBtZW1iZXIs
IHNvIHdlIHJldHVybiBmYWxzZS4KKyAgICAgICAgCisgICAgICAgIE92ZXJsYXAgcXVlcmllcyBy
ZXF1aXJlIHRoYXQgZWl0aGVyIHRoZSBoZWFwIGJlaW5nIHF1ZXJpZWQgaXMgaW4gdGhlIHNldAor
ICAgICAgICAoZWl0aGVyIGRpcmVjdCBvciBzdXBlciksIG9yIHRoYXQgb25lIG9mIGl0cyBhbmNl
c3RvcnMgaXMgYSBkaXJlY3QgbWVtYmVyLgorICAgICAgICBBbm90aGVyIHdheSB0byB0aGluayBh
Ym91dCBob3cgdGhpcyB3b3JrcyBpcyB0aGF0IHR3byBoZWFwcyBBIGFuZCBCIGFyZSBzYWlkCisg
ICAgICAgIHRvIG92ZXJsYXAgaWYgQS5pc1N1YnR5cGVPZihCKSBvciBCLmlzU3VidHlwZU9mKEEp
LiBUaGlzIGlzIHNvdW5kIHNpbmNlIGhlYXBzCisgICAgICAgIGZvcm0gYSBzaW5nbGUtaW5oZXJp
dGFuY2UgaGVpcmFyY2h5LiBDb25zaWRlciB0aGF0IHdlIHdhbnRlZCB0byBpbXBsZW1lbnQgYQor
ICAgICAgICBzZXQgdGhhdCBob2xkcyBoZWFwcyBhbmQgYW5zd2VycyB0aGUgcXVlc3Rpb24sICJp
cyBhbnkgbWVtYmVyIGluIHRoZSBzZXQgYW4KKyAgICAgICAgYW5jZXN0b3IgKGkuZS4gc3VwZXJ0
eXBlKSBvZiBzb21lIG90aGVyIGhlYXAiLiBXZSB3b3VsZCBoYXZlIHRoZSBzZXQgY29udGFpbgor
ICAgICAgICB0aGUgaGVhcHMgdGhlbXNlbHZlcywgYW5kIHdlIHdvdWxkIHNhdGlzZnkgdGhlIHF1
ZXJ5ICJBLmlzU3VidHlwZU9mQW55KHNldCkiCisgICAgICAgIGJ5IHdhbGtpbmcgdGhlIGFuY2Vz
dG9yIGNoYWluIG9mIEEsIGFuZCByZXBlYXRlZGx5IHF1ZXJ5aW5nIGl0cyBtZW1iZXJzaGlwIGlu
CisgICAgICAgIHRoZSBzZXQuIFRoaXMgaXMgd2hhdCB0aGUgImRpcmVjdCIgbWVtYmVycyBvZiBv
dXIgc2V0IGRvLiBOb3cgY29uc2lkZXIgdGhlCisgICAgICAgIG90aGVyIHBhcnQsIHdoZXJlIHdl
IHdhbnQgdG8gYXNrIGlmIGFueSBtZW1iZXIgb2YgdGhlIHNldCBpcyBhIGRlc2NlbmRlbnQgb2YK
KyAgICAgICAgYSBoZWFwLCBvciAiQS5pc1N1cGVydHlwZU9mQW55KHNldCkiLiBXZSB3b3VsZCBp
bXBsZW1lbnQgdGhpcyBieSBpbXBsZW1lbnRpbmcKKyAgICAgICAgc2V0LmFkZChCKSBhcyBhZGRp
bmcgbm90IGp1c3QgQiBidXQgYWxzbyBhbGwgb2YgQidzIGFuY2VzdG9yczsgdGhlbiB3ZSB3b3Vs
ZAorICAgICAgICBhbnN3ZXIgQS5pc1N1cGVydHlwZU9mQW55KHNldCkgYnkganVzdCBjaGVja2lu
ZyBpZiBBIGlzIGluIHRoZSBzZXQuIFdpdGggdHdvCisgICAgICAgIHN1Y2ggc2V0cyAtIG9uZSB0
aGF0IGFuc3dlcnMgaXNTdWJ0eXBlT2ZBbnkoKSBhbmQgYW5vdGhlciB0aGF0IGFuc3dlcnMKKyAg
ICAgICAgaXNTdXBlcnR5cGVPZkFueSgpIC0gd2UgY291bGQgYW5zd2VyIHRoZSAiZG8gYW55IG9m
IG15IGhlYXBzIG92ZXJsYXAgeW91cgorICAgICAgICBoZWFwIiBxdWVzdGlvbi4gQ2xvYmJlclNl
dCBkb2VzIHRoaXMsIGJ1dCBjb21iaW5lcyB0aGUgdHdvIHNldHMgaW50byBhIHNpbmdsZQorICAg
ICAgICBIYXNoTWFwLiBUaGUgSGFzaE1hcCdzIHZhbHVlLCAiZGlyZWN0IiwgbWVhbnMgdGhhdCB0
aGUga2V5IGlzIGEgbWVtYmVyIG9mCisgICAgICAgIGJvdGggdGhlIHN1cGVydHlwZSBzZXQgYW5k
IHRoZSBzdWJ0eXBlIHNldDsgaWYgaXQncyBmYWxzZSB0aGVuIGl0J3Mgb25seSBhCisgICAgICAg
IG1lbWJlciBvZiBvbmUgb2YgdGhlbS4KKyAgICAgICAgCisgICAgICAgIEZpbmFsbHksIHRoaXMg
YWRkcyBhIGZ1bmN0b3JpemVkIGNsb2JiZXJpemUoKSBtZXRob2QgdGhhdCBhZGRzIHRoZSByZWFk
IGFuZAorICAgICAgICB3cml0ZSBjbG9iYmVycyBvZiBhIERGRzo6Tm9kZSB0byByZWFkIGFuZCB3
cml0ZSBmdW5jdG9ycy4gQ29tbW9uIGZ1bmN0b3JzIGZvcgorICAgICAgICBhZGRpbmcgdG8gQ2xv
YmJlclNldHMsIHF1ZXJ5aW5nIG92ZXJsYXAsIGFuZCBkb2luZyBub3RoaW5nIGFyZSBwcm92aWRl
ZC4KKyAgICAgICAgQ29udmVuaWVudCB3cmFwcGVycyBhcmUgYWxzbyBwcm92aWRlZC4gVGhpcyBh
bGxvd3MgeW91IHRvIHNheSB0aGluZ3MgbGlrZToKKyAgICAgICAgCisgICAgICAgICAgICBDbG9i
YmVyU2V0IHNldDsKKyAgICAgICAgICAgIGFkZFdyaXRlcyhncmFwaCwgbm9kZTEsIHNldCk7Cisg
ICAgICAgICAgICBpZiAob3ZlcmxhcHNSZWFkcyhncmFwaCwgbm9kZTIsIHNldCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgbm9kZTEgbWF5IHdyaXRlIHRvIHNvbWV0aGluZyB0
aGF0IG5vZGUyIG1heSByZWFkCisgICAgICAgICAgICAgICAgLy8gZnJvbS4KKyAgICAgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIEN1cnJlbnRseSB0aGlzIGZhY2lsaXR5IGlzIG9ubHkgdXNl
ZCB0byBpbXByb3ZlIGdyYXBoIGR1bXBpbmcsIGJ1dCBpdCB3aWxsCisgICAgICAgIGJlIGluc3Ry
dW1lbnRhbCBpbiBib3RoIExJQ00gYW5kIEdWTi4gSW4gdGhlIGZ1dHVyZSwgSSB3YW50IHRvIGNv
bXBsZXRlbHkKKyAgICAgICAga2lsbCB0aGUgTm9kZUNsb2JiZXJzV29ybGQgYW5kIE5vZGVNaWdo
dENsb2JiZXIgZmxhZ3MsIGFuZCBlcmFkaWNhdGUKKyAgICAgICAgQ1NFUGhhc2UncyBoYWNraXNo
IHdheSBvZiBhY2NvbXBsaXNoaW5nIGFsbW9zdCBleGFjdGx5IHdoYXQgQWJzdHJhY3RIZWFwCisg
ICAgICAgIGdpdmVzIHlvdS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHA6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxv
YWQ6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6ZHVtcCk6CisgICAg
ICAgIChXVEYpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RIZWFwLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEFic3Ry
YWN0SGVhcCk6CisgICAgICAgIChQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEhlYXA6OlBheWxvYWQ6OlBheWxvYWQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVh
cDo6UGF5bG9hZDo6dG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxv
YWQ6OmlzVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OnZh
bHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OnZhbHVlSW1w
bCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpvcGVyYXRvcj09
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6Om9wZXJhdG9yIT0p
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6b3BlcmF0b3I8KToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmlzRGlzam9pbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6b3ZlcmxhcHMpOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6QWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEhlYXA6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RIZWFwOjpraW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OnBheWxv
YWQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6aXNEaXNqb2ludCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvdmVybGFwcyk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RIZWFwOjpzdXBlcnR5cGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
SGVhcDo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYXRvcj09
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6b3BlcmF0b3I8KToKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdEhlYXA6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEhlYXA6OnBheWxvYWRJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEhlYXA6OmVuY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwSGFzaDo6
aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwSGFzaDo6ZXF1YWwpOgorICAg
ICAgICAoQWJzdHJhY3RIZWFwSGFzaCk6CisgICAgICAgIChXVEYpOgorICAgICAgICAqIGRmZy9E
RkdDbG9iYmVyU2V0LmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6OkNsb2JiZXJTZXQ6OkNsb2JiZXJTZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJT
ZXQ6On5DbG9iYmVyU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0OjphZGQpOgor
ICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXQ6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6
REZHOjpDbG9iYmVyU2V0OjpvdmVybGFwcyk6CisgICAgICAgIChKU0M6OkRGRzo6Q2xvYmJlclNl
dDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXQ6OmRpcmVjdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q2xvYmJlclNldDo6c3VwZXIpOgorICAgICAgICAoSlNDOjpERkc6OkNs
b2JiZXJTZXQ6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXQ6OnNldE9mKToK
KyAgICAgICAgKEpTQzo6REZHOjphZGRSZWFkcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRkV3Jp
dGVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGRSZWFkc0FuZFdyaXRlcyk6CisgICAgICAgIChK
U0M6OkRGRzo6b3ZlcmxhcHNSZWFkcyk6CisgICAgICAgIChKU0M6OkRGRzo6b3ZlcmxhcHNXcml0
ZXMpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyU2V0Lmg6IEFkZGVkLgorICAgICAgICAoREZH
KToKKyAgICAgICAgKENsb2JiZXJTZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXQ6
OmlzRW1wdHkpOgorICAgICAgICAoQ2xvYmJlclNldEFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6
Q2xvYmJlclNldEFkZDo6Q2xvYmJlclNldEFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6Q2xvYmJl
clNldEFkZDo6b3BlcmF0b3IoKSk6CisgICAgICAgIChDbG9iYmVyU2V0T3ZlcmxhcHMpOgorICAg
ICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXRPdmVybGFwczo6Q2xvYmJlclNldE92ZXJsYXBzKToK
KyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0T3ZlcmxhcHM6Om9wZXJhdG9yKCkpOgorICAg
ICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXRPdmVybGFwczo6cmVzdWx0KToKKyAgICAgICAgKiBk
ZmcvREZHQ2xvYmJlcml6ZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6
OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgIChOb09wQ2xvYmJlcml6ZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9PcENsb2JiZXJpemU6Ok5vT3BDbG9iYmVyaXplKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb09wQ2xvYmJlcml6ZTo6b3BlcmF0b3IoKSk6CisgICAgICAgICogZGZnL0RGR0dyYXBo
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisKIDIwMTMtMDctMTkgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBmb3VydGhUaWVyOiBTdHJp
bmdPYmplY3RVc2UgdXNlcyBzdHJ1Y3R1cmVzLCBhbmQgQ1NFIHNob3VsZCBrbm93IHRoYXQKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTI5NDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMzc1LDYgKzM3NSwxMSBAQAogCQkwRkU1MDU4RjE3OThBRTcx
MDBCMzVGOEMgLyogREZHTWVyZ2VNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU4RTE3OThBRTZGMDBCMzVGOEMgLyogREZHTWVyZ2VNb2Rl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZF
NTA1OTMxNzlBNjA0NTAwQjM1RjhDIC8qIERGR0VkZ2VVc2VzU3RydWN0dXJlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU5MjE3OUE2MDQ1MDBC
MzVGOEMgLyogREZHRWRnZVVzZXNTdHJ1Y3R1cmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkU1MDU5MTE3OUE0OTI0MDBCMzVGOEMgLyogREZH
U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTkwMTc5QTQ5MjQwMEIzNUY4QyAvKiBE
RkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTk5MTc5QjBGNzIwMEIzNUY4
QyAvKiBERkdBYnN0cmFjdEhlYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFNTA1OTQxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SGVh
cC5jcHAgKi87IH07CisJCTBGRTUwNTlBMTc5QjBGNzIwMEIzNUY4QyAvKiBERkdBYnN0cmFjdEhl
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUw
NTk1MTc5QjBGNzIwMEIzNUY4QyAvKiBERkdBYnN0cmFjdEhlYXAuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU5QjE3OUIwRjcyMDBCMzVG
OEMgLyogREZHQ2xvYmJlcml6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFNTA1OTYxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Nsb2JiZXJpemUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU1MDU5
QzE3OUIwRjcyMDBCMzVGOEMgLyogREZHQ2xvYmJlclNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU5NzE3OUIwRjcyMDBCMzVGOEMgLyog
REZHQ2xvYmJlclNldC5jcHAgKi87IH07CisJCTBGRTUwNTlEMTc5QjBGNzIwMEIzNUY4QyAvKiBE
RkdDbG9iYmVyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkU1MDU5ODE3OUIwRjcyMDBCMzVGOEMgLyogREZHQ2xvYmJlclNldC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NE
QTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8q
IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2
MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkVBMEEwODE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkQx
NzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQyOCw2ICsxNDMzLDExIEBACiAJCTBG
RTUwNThFMTc5OEFFNkYwMEIzNUY4QyAvKiBERkdNZXJnZU1vZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHTWVyZ2VNb2RlLmg7IHBhdGggPSBkZmcvREZHTWVyZ2VNb2RlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRTUwNTkyMTc5QTYwNDUwMEIzNUY4QyAvKiBERkdFZGdlVXNlc1N0
cnVjdHVyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlVXNlc1N0
cnVjdHVyZS5oOyBwYXRoID0gZGZnL0RGR0VkZ2VVc2VzU3RydWN0dXJlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRTUwNTkwMTc5QTQ5MjQwMEIzNUY4QyAvKiBERkdTYW5lU3Ry
aW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0g
ZGZnL0RGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTk0MTc5QjBGNzIwMEIzNUY4QyAvKiBERkdBYnN0cmFj
dEhlYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWJzdHJh
Y3RIZWFwLmNwcDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkU1MDU5NTE3OUIwRjcyMDBCMzVGOEMgLyogREZHQWJzdHJhY3RI
ZWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0SGVhcC5o
OyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0SGVhcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkU1MDU5NjE3OUIwRjcyMDBCMzVGOEMgLyogREZHQ2xvYmJlcml6ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDbG9iYmVyaXplLmg7IHBhdGggPSBkZmcvREZH
Q2xvYmJlcml6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU5NzE3OUIw
RjcyMDBCMzVGOEMgLyogREZHQ2xvYmJlclNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdDbG9iYmVyU2V0LmNwcDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVyU2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1OTgxNzlCMEY3MjAwQjM1
RjhDIC8qIERGR0Nsb2JiZXJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHQ2xvYmJlclNldC5oOyBwYXRoID0gZGZnL0RGR0Nsb2JiZXJTZXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRX
YXRjaHBvaW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThG
NSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIw
MEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTEFiYnJldmlhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTg5LDYgKzI5OTksOCBAQAogCQk4NkVD
OURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQkwRkU1MDU5NDE3OUIwRjcyMDBCMzVGOEMgLyogREZHQWJzdHJh
Y3RIZWFwLmNwcCAqLywKKwkJCQkwRkU1MDU5NTE3OUIwRjcyMDBCMzVGOEMgLyogREZHQWJzdHJh
Y3RIZWFwLmggKi8sCiAJCQkJMEZFNTA1ODYxNzk4QUJGNTAwQjM1RjhDIC8qIERGR0Fic3RyYWN0
SW50ZXJwcmV0ZXIuaCAqLywKIAkJCQkwRkU1MDU4NzE3OThBQkY1MDBCMzVGOEMgLyogREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaCAqLywKIAkJCQkwRjU1QzE5MzE3Mjc2RTQ2MDBDRUFC
RkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgKi8sCkBAIC0zMDI0LDYgKzMwMzYsOSBAQAogCQkJ
CTBGRkZDOTRDMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5oICovLAogCQkJCTBGM0Iz
QTI0MTU0NEM5OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLywK
IAkJCQkwRjNCM0EyNTE1NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFz
ZS5oICovLAorCQkJCTBGRTUwNTk2MTc5QjBGNzIwMEIzNUY4QyAvKiBERkdDbG9iYmVyaXplLmgg
Ki8sCisJCQkJMEZFNTA1OTcxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Nsb2JiZXJTZXQuY3BwICov
LAorCQkJCTBGRTUwNTk4MTc5QjBGNzIwMEIzNUY4QyAvKiBERkdDbG9iYmVyU2V0LmggKi8sCiAJ
CQkJMEZCNEI1MUExNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0NvbW1vbi5jcHAgKi8sCiAJCQkJMEZD
MDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovLAogCQkJCTBGRUEwQTJEMTcw
RDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmNwcCAqLywKQEAgLTMzODAsNiArMzM5NSw3
IEBACiAJCQkJMEZFNTA1OEYxNzk4QUU3MTAwQjM1RjhDIC8qIERGR01lcmdlTW9kZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkVGNjgzNUYxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNdjcu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFMjQ1OTYyMTc2MDFENTgwMDc0RkNFMCAvKiBDYWxsRnJh
bWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU1MDU5QTE3OUIwRjcyMDBCMzVGOEMg
LyogREZHQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUY2ODM2MDE3NDM0M0ND
MDBBMzJFMjUgLyogSklUU3R1YnNYODZfNjQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRjY4MzVF
MTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU5
NDAzMjIxNzQ0NDI1OTAwNDdDRjZFIC8qIEpJVFN0dWJzWDg2Q29tbW9uLmggaW4gSGVhZGVycyAq
LywKQEAgLTM1NzAsNiArMzU4Niw3IEBACiAJCQkJMEZFQTBBMUYxNzA4QjAwNzAwQkI3MjJDIC8q
IEZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk5
MEVEMUQzQUUwMEYxRjY4MSAvKiBJbnN0cnVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
MTY2N0IwRTE5OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVuY3Rpb24uaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRTUwNTlEMTc5QjBGNzIwMEIzNUY4QyAvKiBERkdDbG9iYmVyU2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRUEwQTA4MTcwNTEzREIwMEJCNzIyQyAvKiBGVExBYmJyZXZp
YXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVBNkYyMDAxMTJCMkYgLyog
SW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKQEAgLTM2MTUsNiArMzYzMiw3IEBACiAJCQkJMTQ4
Q0QxRDgxMDhDRjkwMjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3ODgwMTQxMTQ3MUFEOTIwMDQxQjAxNiAvKiBKU0RhdGVNYXRoLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMkE3RjY4ODE2MDQzMkQ0MDBGNzZCOTggLyogSlNEZXN0cnVjdGlibGVP
YmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNTlCMTc5QjBGNzIwMEIzNUY4QyAvKiBE
RkdDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNDE2N0JBQkQ3MDA2RDc2
MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0RDMTc0MkQ4MDQwMDdC
M0MxQiAvKiBERkdGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QjRBQ0FGMTQ4NEM5
Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCkBAIC00MjkzLDYg
KzQzMTEsNyBAQAogCQkJCTBGRUEwQTBCMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDb21waWxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMzMTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlQ29u
c3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzQxMDdFQzM3NjAwNDI3QTQ4
IC8qIERhdGVDb252ZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNTk5MTc5QjBG
NzIwMEIzNUY4QyAvKiBERkdBYnN0cmFjdEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5QzUxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlDNjEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZVByb3RvdHlwZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3QjIgLyogRGVidWdnZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC00NDUyLDYgKzQ0NzEsNyBAQAogCQkJCTBGNEUxQTBFMTczQUVEREMw
MDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0ODJCNzRFMEE0MzAzMjgwMDUxN0NGQyAvKiBKU1N0cmluZ1JlZi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDZBQUIzODBCNjZBOTQ0MDBFNTVGMTYgLyogSlNTdHJpbmdSZWZDRi5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkU1MDU5QzE3OUIwRjcyMDBCMzVGOEMgLyogREZHQ2xvYmJlclNl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQwQzE1N0VFMDlGMDA0QTRFN0QgLyogSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxQTE2N0JBQkVF
MDA2RDc2MEEgLyogSlNWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0QkQ1QTMyMEEzRTkx
RjYwMEJBRjU5QyAvKiBKU1ZhbHVlUmVmLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBYnN0cmFj
dEhlYXAuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK3ZvaWQgQWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIG91dC5wcmludCgiVE9Q
Iik7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQodmFsdWUoKSk7Cit9CisKK3ZvaWQgQWJz
dHJhY3RIZWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KGtpbmQoKSk7CisgICAgaWYgKGtpbmQoKSA9PSBJbnZhbGlkQWJzdHJhY3RIZWFwIHx8IGtpbmQo
KSA9PSBXb3JsZCB8fCBwYXlsb2FkKCkuaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG91
dC5wcmludCgiKCIsIHBheWxvYWQoKSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQWJzdHJhY3RIZWFwS2luZCBraW5k
KQoreworICAgIHN3aXRjaCAoa2luZCkgeworI2RlZmluZSBBQlNUUkFDVF9IRUFQX0RVTVAobmFt
ZSkgICAgICAgICAgICBcCisgICAgY2FzZSBuYW1lOiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgb3V0LnByaW50KCNuYW1lKTsgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICByZXR1cm47CisgICAgRk9SX0VBQ0hfQUJTVFJBQ1RfSEVBUF9LSU5EKEFCU1RSQUNUX0hF
QVBfRFVNUCkKKyN1bmRlZiBBQlNUUkFDVF9IRUFQX0RVTVAKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Fi
c3RyYWN0SGVhcF9oCisjZGVmaW5lIERGR0Fic3RyYWN0SGVhcF9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiVmlydHVhbFJl
Z2lzdGVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBJbXBsZW1l
bnRzIGEgdGhyZWUtbGV2ZWwgdHlwZSBoaWVyYXJjaHk6CisvLyAtIFdvcmxkIGlzIHRoZSBzdXBl
cnR5cGUgb2YgYWxsIG9mIHRoZSB0aGluZ3MuCisvLyAtIEtpbmQgd2l0aCBUT1AgcGF5bG9hZCBp
cyB0aGUgZGlyZWN0IHN1YnR5cGUgb2YgV29ybGQuCisvLyAtIEtpbmQgd2l0aCBub24tVE9QIHBh
eWxvYWQgaXMgdGhlIGRpcmVjdCBzdWJ0eXBlIG9mIGl0cyBjb3JyZXNwb25kaW5nIFRPUCBLaW5k
LgorCisjZGVmaW5lIEZPUl9FQUNIX0FCU1RSQUNUX0hFQVBfS0lORChtYWNybykgXAorICAgIG1h
Y3JvKEludmFsaWRBYnN0cmFjdEhlYXApIFwKKyAgICBtYWNybyhXb3JsZCkgXAorICAgIG1hY3Jv
KEFyZ3VtZW50c19udW1Bcmd1bWVudHMpIFwKKyAgICBtYWNybyhBcmd1bWVudHNfb3ZlcnJpZGVM
ZW5ndGgpIFwKKyAgICBtYWNybyhBcmd1bWVudHNfcmVnaXN0ZXJzKSBcCisgICAgbWFjcm8oQXJn
dW1lbnRzX3Nsb3dBcmd1bWVudHMpIFwKKyAgICBtYWNybyhCdXR0ZXJmbHlfcHVibGljTGVuZ3Ro
KSBcCisgICAgbWFjcm8oQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCkgXAorICAgIG1hY3JvKEpTQ2Vs
bF9zdHJ1Y3R1cmUpIFwKKyAgICBtYWNybyhKU0Z1bmN0aW9uX2V4ZWN1dGFibGUpIFwKKyAgICBt
YWNybyhKU0Z1bmN0aW9uX3Njb3BlQ2hhaW4pIFwKKyAgICBtYWNybyhKU09iamVjdF9idXR0ZXJm
bHkpIFwKKyAgICBtYWNybyhKU1ZhcmlhYmxlT2JqZWN0X3JlZ2lzdGVycykgXAorICAgIG1hY3Jv
KE5hbWVkUHJvcGVydGllcykgXAorICAgIG1hY3JvKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpIFwK
KyAgICBtYWNybyhJbmRleGVkRG91YmxlUHJvcGVydGllcykgXAorICAgIG1hY3JvKEluZGV4ZWRD
b250aWd1b3VzUHJvcGVydGllcykgXAorICAgIG1hY3JvKEFycmF5U3RvcmFnZVByb3BlcnRpZXMp
IFwKKyAgICBtYWNybyhWYXJpYWJsZXMpIFwKKyAgICBtYWNybyhUeXBlZEFycmF5U3RvcmFnZVBv
aW50ZXIpIFwKKyAgICBtYWNybyhUeXBlZEFycmF5UHJvcGVydGllcykgXAorICAgIG1hY3JvKFR5
cGVkQXJyYXlMZW5ndGgpIFwKKyAgICBtYWNybyhHQ1N0YXRlKSBcCisgICAgbWFjcm8oUmVnRXhw
U3RhdGUpIFwKKyAgICBtYWNybyhJbnRlcm5hbFN0YXRlKSBcCisgICAgbWFjcm8oQWJzb2x1dGUp
IFwKKyAgICAvKiBVc2UgdGhpcyBmb3IgcmVhZHMgb25seSwganVzdCB0byBpbmRpY2F0ZSB0aGF0
IGlmIHRoZSB3b3JsZCBnb3QgY2xvYmJlcmVkLCB0aGVuIHRoaXMgb3BlcmF0aW9uIHdpbGwgbm90
IHdvcmsuICovXAorICAgIG1hY3JvKE1pc2NGaWVsZHMpIFwKKyAgICAvKiBVc2UgdGhpcyBmb3Ig
d3JpdGVzIG9ubHksIGp1c3QgdG8gaW5kaWNhdGUgdGhhdCBob2lzdGluZyB0aGUgbm9kZSBpcyBp
bnZhbGlkLiBUaGlzIHdvcmtzIGJlY2F1c2Ugd2UgZG9uJ3QgaG9pc3QgYW55dGhpbmcgdGhhdCBo
YXMgYW55IHNpZGUgZWZmZWN0cyBhdCBhbGwuICovXAorICAgIG1hY3JvKFNpZGVTdGF0ZSkKKwor
ZW51bSBBYnN0cmFjdEhlYXBLaW5kIHsKKyNkZWZpbmUgQUJTVFJBQ1RfSEVBUF9ERUNMQVJBVElP
TihuYW1lKSBuYW1lLAorICAgIEZPUl9FQUNIX0FCU1RSQUNUX0hFQVBfS0lORChBQlNUUkFDVF9I
RUFQX0RFQ0xBUkFUSU9OKQorI3VuZGVmIEFCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04KK307CisK
K2NsYXNzIEFic3RyYWN0SGVhcCB7CitwdWJsaWM6CisgICAgY2xhc3MgUGF5bG9hZCB7CisgICAg
cHVibGljOgorICAgICAgICBQYXlsb2FkKCkKKyAgICAgICAgICAgIDogbV9pc1RvcChmYWxzZSkK
KyAgICAgICAgICAgICwgbV92YWx1ZSgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIFBheWxvYWQoYm9vbCBpc1RvcCwgaW50NjRfdCB2YWx1ZSkKKyAgICAgICAgICAg
IDogbV9pc1RvcChpc1RvcCkKKyAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKCEoaXNUb3AgJiYgdmFsdWUpKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgUGF5bG9hZChpbnQ2NF90IHZhbHVlKQorICAgICAgICAgICAgOiBtX2lz
VG9wKGZhbHNlKQorICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIFBheWxvYWQoY29uc3Qgdm9pZCogcG9pbnRlcikKKyAg
ICAgICAgICAgIDogbV9pc1RvcChmYWxzZSkKKyAgICAgICAgICAgICwgbV92YWx1ZShiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgICAgICA6
IG1faXNUb3AoZmFsc2UpCisgICAgICAgICAgICAsIG1fdmFsdWUoc3RhdGljX2Nhc3Q8aW50Pihv
cGVyYW5kKSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMg
UGF5bG9hZCB0b3AoKSB7IHJldHVybiBQYXlsb2FkKHRydWUsIDApOyB9CisgICAgICAgIAorICAg
ICAgICBib29sIGlzVG9wKCkgY29uc3QgeyByZXR1cm4gbV9pc1RvcDsgfQorICAgICAgICBpbnQ2
NF90IHZhbHVlKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFpc1RvcCgp
KTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZUltcGwoKTsKKyAgICAgICAgfQorICAgICAgICBp
bnQ2NF90IHZhbHVlSW1wbCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X3ZhbHVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgUGF5bG9hZCYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2lzVG9wID09IG90aGVyLm1faXNUb3AKKyAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlID09IG90
aGVyLm1fdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBQYXlsb2FkJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29s
IG9wZXJhdG9yPChjb25zdCBQYXlsb2FkJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuICFvdGhlci5pc1RvcCgp
OworICAgICAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlKCkgPCBvdGhlci52YWx1ZSgpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGlzRGlzam9pbnQoY29uc3QgUGF5bG9hZCYg
b3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChvdGhlci5pc1RvcCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBtX3ZhbHVl
ICE9IG90aGVyLm1fdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3Zl
cmxhcHMoY29uc3QgUGF5bG9hZCYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiAhaXNEaXNqb2ludChvdGhlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgICAgICAKKyAgICBwcml2YXRlOgor
ICAgICAgICBib29sIG1faXNUb3A7CisgICAgICAgIGludDY0X3QgbV92YWx1ZTsKKyAgICB9Owor
ICAgIAorICAgIEFic3RyYWN0SGVhcCgpCisgICAgeworICAgICAgICBtX3ZhbHVlID0gZW5jb2Rl
KEludmFsaWRBYnN0cmFjdEhlYXAsIFBheWxvYWQoKSk7CisgICAgfQorICAgIAorICAgIEFic3Ry
YWN0SGVhcChBYnN0cmFjdEhlYXBLaW5kIGtpbmQpCisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCAhPSBJbnZhbGlkQWJzdHJhY3RIZWFwKTsKKyAgICAgICAgbV92YWx1ZSA9IGVuY29kZShraW5k
LCBQYXlsb2FkOjp0b3AoKSk7CisgICAgfQorICAgIAorICAgIEFic3RyYWN0SGVhcChBYnN0cmFj
dEhlYXBLaW5kIGtpbmQsIFBheWxvYWQgcGF5bG9hZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kICE9IEludmFsaWRBYnN0cmFjdEhlYXAgJiYga2luZCAhPSBXb3JsZCk7CisgICAgICAgIG1f
dmFsdWUgPSBlbmNvZGUoa2luZCwgcGF5bG9hZCk7CisgICAgfQorICAgIAorICAgIEFic3RyYWN0
SGVhcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgeworICAgICAgICBtX3Zh
bHVlID0gZW5jb2RlKEludmFsaWRBYnN0cmFjdEhlYXAsIFBheWxvYWQ6OnRvcCgpKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gSW52
YWxpZEFic3RyYWN0SGVhcCAmJiAhcGF5bG9hZEltcGwoKS5pc1RvcCgpOyB9CisgICAgCisgICAg
QWJzdHJhY3RIZWFwS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QWJzdHJh
Y3RIZWFwS2luZD4obV92YWx1ZSAmICgoMSA8PCB0b3BTaGlmdCkgLSAxKSk7IH0KKyAgICBQYXls
b2FkIHBheWxvYWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBXb3Js
ZCAmJiBraW5kKCkgIT0gSW52YWxpZEFic3RyYWN0SGVhcCk7CisgICAgICAgIHJldHVybiBwYXls
b2FkSW1wbCgpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzRGlzam9pbnQoY29uc3QgQWJzdHJh
Y3RIZWFwJiBvdGhlcikKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgIT0gSW52YWxpZEFi
c3RyYWN0SGVhcCk7CisgICAgICAgIEFTU0VSVChvdGhlci5raW5kKCkgIT0gSW52YWxpZEFic3Ry
YWN0SGVhcCk7CisgICAgICAgIGlmIChraW5kKCkgPT0gV29ybGQpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmIChvdGhlci5raW5kKCkgPT0gV29ybGQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChraW5kKCkgIT0gb3RoZXIua2luZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBwYXlsb2FkKCkuaXNEaXNqb2lu
dChvdGhlci5wYXlsb2FkKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0
IEFic3RyYWN0SGVhcCYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gIWlzRGlzam9pbnQo
b3RoZXIpOworICAgIH0KKyAgICAKKyAgICBBYnN0cmFjdEhlYXAgc3VwZXJ0eXBlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgIT0gSW52YWxpZEFic3RyYWN0SGVhcCk7Cisg
ICAgICAgIGlmIChraW5kKCkgPT0gV29ybGQpCisgICAgICAgICAgICByZXR1cm4gQWJzdHJhY3RI
ZWFwKCk7CisgICAgICAgIGlmIChwYXlsb2FkKCkuaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVy
biBXb3JsZDsKKyAgICAgICAgcmV0dXJuIEFic3RyYWN0SGVhcChraW5kKCkpOworICAgIH0KKyAg
ICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6
OkludEhhc2g8aW50NjRfdD46Omhhc2gobV92YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBBYnN0cmFjdEhlYXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IEFic3RyYWN0SGVhcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IEFic3RyYWN0SGVhcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoa2luZCgpICE9IG90aGVyLmtpbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBraW5kKCkgPCBv
dGhlci5raW5kKCk7CisgICAgICAgIHJldHVybiBwYXlsb2FkKCkgPCBvdGhlci5wYXlsb2FkKCk7
CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbnZhbGlkQWJzdHJhY3RIZWFwICYmIHBh
eWxvYWRJbXBsKCkuaXNUb3AoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgdmFsdWVTaGlmdCA9IDE1OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB0b3BTaGlmdCA9
IDE0OworICAgIAorICAgIFBheWxvYWQgcGF5bG9hZEltcGwoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFBheWxvYWQoKG1fdmFsdWUgPj4gdG9wU2hpZnQpICYgMSwgbV92YWx1ZSA+PiB2
YWx1ZVNoaWZ0KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGludDY0X3QgZW5jb2RlKEFic3Ry
YWN0SGVhcEtpbmQga2luZCwgUGF5bG9hZCBwYXlsb2FkKQorICAgIHsKKyAgICAgICAgaW50NjRf
dCBraW5kQXNJbnQgPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihraW5kKTsKKyAgICAgICAgQVNTRVJU
KGtpbmRBc0ludCA8ICgxIDw8IHRvcFNoaWZ0KSk7CisgICAgICAgIHJldHVybiBraW5kQXNJbnQg
fCAocGF5bG9hZC5pc1RvcCgpIDw8IHRvcFNoaWZ0KSB8IChwYXlsb2FkLnZhbHVlSW1wbCgpIDw8
IHZhbHVlU2hpZnQpOworICAgIH0KKyAgICAKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCitz
dHJ1Y3QgQWJzdHJhY3RIZWFwSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
QWJzdHJhY3RIZWFwJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBBYnN0cmFjdEhlYXAmIGEsIGNvbnN0IEFic3RyYWN0SGVhcCYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCitu
YW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpE
Rkc6OkFic3RyYWN0SGVhcEtpbmQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVm
YXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6QWJzdHJh
Y3RIZWFwPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6QWJzdHJhY3RIZWFwSGFzaCBIYXNoOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpBYnN0cmFjdEhlYXA+IDogU2ltcGxlQ2xhc3NI
YXNoVHJhaXRzPEpTQzo6REZHOjpBYnN0cmFjdEhlYXA+IHsgfTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Fic3RyYWN0
SGVhcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
clNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiREZHQ2xvYmJlcml6ZS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0Nsb2JiZXJTZXQ6OkNsb2JiZXJTZXQoKSB7IH0K
K0Nsb2JiZXJTZXQ6On5DbG9iYmVyU2V0KCkgeyB9CisKK3ZvaWQgQ2xvYmJlclNldDo6YWRkKEFi
c3RyYWN0SGVhcCBoZWFwKQoreworICAgIEhhc2hNYXA8QWJzdHJhY3RIZWFwLCBib29sPjo6QWRk
UmVzdWx0IHJlc3VsdCA9IG1fY2xvYmJlcnMuYWRkKGhlYXAsIHRydWUpOworICAgIGlmIChyZXN1
bHQuaXNOZXdFbnRyeSkgeworICAgICAgICBpZiAocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHRydWU7
CisgICAgfQorICAgIHdoaWxlIChoZWFwLmtpbmQoKSAhPSBXb3JsZCkgeworICAgICAgICBoZWFw
ID0gaGVhcC5zdXBlcnR5cGUoKTsKKyAgICAgICAgaWYgKCFtX2Nsb2JiZXJzLmFkZChoZWFwLCBm
YWxzZSkuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Jvb2wg
Q2xvYmJlclNldDo6Y29udGFpbnMoQWJzdHJhY3RIZWFwIGhlYXApIGNvbnN0Cit7CisgICAgSGFz
aE1hcDxBYnN0cmFjdEhlYXAsIGJvb2w+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9jbG9iYmVy
cy5maW5kKGhlYXApOworICAgIGlmIChpdGVyID09IG1fY2xvYmJlcnMuZW5kKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gaXRlci0+dmFsdWU7Cit9CisKK2Jvb2wgQ2xvYmJl
clNldDo6b3ZlcmxhcHMoQWJzdHJhY3RIZWFwIGhlYXApIGNvbnN0Cit7CisgICAgaWYgKG1fY2xv
YmJlcnMuZmluZChoZWFwKSAhPSBtX2Nsb2JiZXJzLmVuZCgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB3aGlsZSAoaGVhcC5raW5kKCkgIT0gV29ybGQpIHsKKyAgICAgICAgaGVhcCA9IGhl
YXAuc3VwZXJ0eXBlKCk7CisgICAgICAgIGlmIChjb250YWlucyhoZWFwKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2xvYmJl
clNldDo6Y2xlYXIoKQoreworICAgIG1fY2xvYmJlcnMuY2xlYXIoKTsKK30KKworSGFzaFNldDxB
YnN0cmFjdEhlYXA+IENsb2JiZXJTZXQ6OmRpcmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNl
dE9mKHRydWUpOworfQorCitIYXNoU2V0PEFic3RyYWN0SGVhcD4gQ2xvYmJlclNldDo6c3VwZXIo
KSBjb25zdAoreworICAgIHJldHVybiBzZXRPZihmYWxzZSk7Cit9CisKK3ZvaWQgQ2xvYmJlclNl
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiKERpcmVj
dDpbIiwgc29ydGVkTGlzdER1bXAoZGlyZWN0KCkpLCAiXSwgU3VwZXI6WyIsIHNvcnRlZExpc3RE
dW1wKHN1cGVyKCkpLCAiXSkiKTsKK30KKworSGFzaFNldDxBYnN0cmFjdEhlYXA+IENsb2JiZXJT
ZXQ6OnNldE9mKGJvb2wgZGlyZWN0KSBjb25zdAoreworICAgIEhhc2hTZXQ8QWJzdHJhY3RIZWFw
PiByZXN1bHQ7CisgICAgZm9yIChIYXNoTWFwPEFic3RyYWN0SGVhcCwgYm9vbD46OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBtX2Nsb2JiZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jbG9iYmVycy5lbmQo
KTsgKytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLT52YWx1ZSA9PSBkaXJlY3QpCisgICAgICAg
ICAgICByZXN1bHQuYWRkKGl0ZXItPmtleSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgYWRkUmVhZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0JiBy
ZWFkU2V0KQoreworICAgIENsb2JiZXJTZXRBZGQgYWRkUmVhZChyZWFkU2V0KTsKKyAgICBOb09w
Q2xvYmJlcml6ZSBhZGRXcml0ZTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFk
LCBhZGRXcml0ZSk7Cit9CisKK3ZvaWQgYWRkV3JpdGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgQ2xvYmJlclNldCYgd3JpdGVTZXQpCit7CisgICAgTm9PcENsb2JiZXJpemUgYWRkUmVhZDsK
KyAgICBDbG9iYmVyU2V0QWRkIGFkZFdyaXRlKHdyaXRlU2V0KTsKKyAgICBjbG9iYmVyaXplKGdy
YXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7Cit9CisKK3ZvaWQgYWRkUmVhZHNBbmRXcml0
ZXMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0JiByZWFkU2V0LCBDbG9iYmVy
U2V0JiB3cml0ZVNldCkKK3sKKyAgICBDbG9iYmVyU2V0QWRkIGFkZFJlYWQocmVhZFNldCk7Cisg
ICAgQ2xvYmJlclNldEFkZCBhZGRXcml0ZSh3cml0ZVNldCk7CisgICAgY2xvYmJlcml6ZShncmFw
aCwgbm9kZSwgYWRkUmVhZCwgYWRkV3JpdGUpOworfQorCitib29sIG92ZXJsYXBzUmVhZHMoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0JiByZWFkU2V0KQoreworICAgIENsb2Ji
ZXJTZXRPdmVybGFwcyBhZGRSZWFkKHJlYWRTZXQpOworICAgIE5vT3BDbG9iYmVyaXplIGFkZFdy
aXRlOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAg
ICByZXR1cm4gYWRkUmVhZC5yZXN1bHQoKTsKK30KKworYm9vbCBvdmVybGFwc1dyaXRlcyhHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJTZXQmIHdyaXRlU2V0KQoreworICAgIE5vT3BD
bG9iYmVyaXplIGFkZFJlYWQ7CisgICAgQ2xvYmJlclNldE92ZXJsYXBzIGFkZFdyaXRlKHdyaXRl
U2V0KTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7Cisg
ICAgcmV0dXJuIGFkZFdyaXRlLnJlc3VsdCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR0Nsb2JiZXJTZXRfaAorI2RlZmluZSBERkdDbG9iYmVyU2V0X2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdB
YnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CitzdHJ1Y3QgTm9kZTsKKworLy8gRklY
TUU6IElmIHdlIGV2ZXIgd2FudCB0byBjb21wYXJlIGlmIHR3byBub2RlcyBjbG9iYmVyIGVhY2gg
b3RoZXIsIHdlIHNob3VsZAorLy8gaGF2ZSBhIFNtYWxsQ2xvYmJlclNldCwgd2hpY2gganVzdCBr
ZWVwcyBhbiBhcnJheSBvZiB0aGUgQWJzdHJhY3RIZWFwcyBhbmQKKy8vIHNhdGlzZmllcyBvdmVy
bGFwcygpIHJlcXVlc3RzIGJ5IGxvb3Bpbmcgb3ZlciBhbGwgb2YgdGhlbS4gVGhpcyB3aWxsIHBy
b2JhYmx5CisvLyBiZSBmYXN0ZXIgdGhhbiBhIGZ1bGwgSGFzaE1hcCBpbiBhIGxvdCBvZiBjYXNl
cy4gT3IsIG1heWJlLCB3ZSBjb3VsZCBoYXZlCisvLyBDbG9iYmVyU2V0IGJlIHNtYXJ0IGFuZCB1
c2UgYSB2ZWN0b3Igc28gbG9uZyBhcyBpdCB3YXMgc21hbGwuCisKK2NsYXNzIENsb2JiZXJTZXQg
eworcHVibGljOgorICAgIENsb2JiZXJTZXQoKTsKKyAgICB+Q2xvYmJlclNldCgpOworICAgIAor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvYmJlcnMuaXNFbXB0eSgpOyB9
CisgICAgCisgICAgdm9pZCBhZGQoQWJzdHJhY3RIZWFwKTsKKyAgICBib29sIGNvbnRhaW5zKEFi
c3RyYWN0SGVhcCkgY29uc3Q7CisgICAgYm9vbCBvdmVybGFwcyhBYnN0cmFjdEhlYXApIGNvbnN0
OworICAgIHZvaWQgY2xlYXIoKTsKKyAgICAKKyAgICAvLyBDYWxscyB1c2VmdWwgZm9yIGRlYnVn
Z2luZyB0aGUgQ2xvYmJlclNldC4KKyAgICAKKyAgICBIYXNoU2V0PEFic3RyYWN0SGVhcD4gZGly
ZWN0KCkgY29uc3Q7CisgICAgSGFzaFNldDxBYnN0cmFjdEhlYXA+IHN1cGVyKCkgY29uc3Q7Cisg
ICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgor
ICAgIEhhc2hTZXQ8QWJzdHJhY3RIZWFwPiBzZXRPZihib29sIGRpcmVjdCkgY29uc3Q7CisgICAg
CisgICAgLy8gTWFwcyBoZWFwIHRvOgorICAgIC8vIHRydWUgLS0+IGl0J3MgYSBkaXJlY3QgY2xv
YmJlcgorICAgIC8vIGZhbHNlIC0tPiBpdCdzIGp1c3QgYSBzdXBlcnR5cGUgb2YgYSBkaXJlY3Qg
Y2xvYmJlcgorICAgIEhhc2hNYXA8QWJzdHJhY3RIZWFwLCBib29sPiBtX2Nsb2JiZXJzOworfTsK
KworY2xhc3MgQ2xvYmJlclNldEFkZCB7CitwdWJsaWM6CisgICAgQ2xvYmJlclNldEFkZChDbG9i
YmVyU2V0JiBzZXQpCisgICAgICAgIDogbV9zZXQoc2V0KQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgbV9z
ZXQuYWRkKGhlYXApOworICAgIH0KK3ByaXZhdGU6CisgICAgQ2xvYmJlclNldCYgbV9zZXQ7Cit9
OworCitjbGFzcyBDbG9iYmVyU2V0T3ZlcmxhcHMgeworcHVibGljOgorICAgIENsb2JiZXJTZXRP
dmVybGFwcyhjb25zdCBDbG9iYmVyU2V0JiBzZXQpCisgICAgICAgIDogbV9zZXQoc2V0KQorICAg
ICAgICAsIG1fcmVzdWx0KGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcGVy
YXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgbV9yZXN1bHQgfD0gbV9z
ZXQub3ZlcmxhcHMoaGVhcCk7CisgICAgfQorICAgIAorICAgIGJvb2wgcmVzdWx0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZXN1bHQ7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3QgQ2xvYmJlclNl
dCYgbV9zZXQ7CisgICAgYm9vbCBtX3Jlc3VsdDsKK307CisKK3ZvaWQgYWRkUmVhZHMoR3JhcGgm
LCBOb2RlKiwgQ2xvYmJlclNldCYpOwordm9pZCBhZGRXcml0ZXMoR3JhcGgmLCBOb2RlKiwgQ2xv
YmJlclNldCYpOwordm9pZCBhZGRSZWFkc0FuZFdyaXRlcyhHcmFwaCYsIE5vZGUqLCBDbG9iYmVy
U2V0JiByZWFkcywgQ2xvYmJlclNldCYgd3JpdGVzKTsKKworYm9vbCBvdmVybGFwc1JlYWRzKEdy
YXBoJiwgTm9kZSosIENsb2JiZXJTZXQmKTsKK2Jvb2wgb3ZlcmxhcHNXcml0ZXMoR3JhcGgmLCBO
b2RlKiwgQ2xvYmJlclNldCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Nsb2JiZXJTZXRfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHQ2xvYmJlcml6ZV9oCisjZGVmaW5lIERGR0Nsb2JiZXJp
emVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIkRGR0Fic3RyYWN0SGVhcC5oIgorI2luY2x1ZGUgIkRGR0VkZ2VVc2VzU3Ry
dWN0dXJlLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3Jp
dGVGdW5jdG9yPgordm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgUmVh
ZEZ1bmN0b3ImIHJlYWQsIFdyaXRlRnVuY3RvciYgd3JpdGUpCit7CisgICAgLy8gU29tZSBub3Rl
czoKKyAgICAvLworICAgIC8vIC0gV2UgY2Fubm90IGhvaXN0LCBvciBzaW5rLCBhbnl0aGluZyB0
aGF0IGhhcyBlZmZlY3RzLiBUaGlzIG1lYW5zIHRoYXQgdGhlCisgICAgLy8gICBlYXNpZXN0IHdh
eSBvZiBpbmRpY2F0aW5nIHRoYXQgc29tZXRoaW5nIGNhbm5vdCBiZSBob2lzdGVkIGlzIHRvIGNs
YWltCisgICAgLy8gICB0aGF0IGl0IHNpZGUtZWZmZWN0cyBzb21lIG1pc2NlbGxhbmVvdXMgdGhp
bmcuCisgICAgLy8KKyAgICAvLyAtIFdlIGNhbm5vdCBob2lzdCBmb3J3YXJkLWV4aXRpbmcgbm9k
ZXMgd2l0aG91dCBzb21lIGFkZGl0aW9uYWwgZWZmb3J0LiBJCisgICAgLy8gICBiZWxpZXZlIHRo
YXQgd2hhdCBpdCBjb21lcyBkb3duIHRvIGlzIHRoYXQgZm9yd2FyZC1leGl0aW5nIGdlbmVyYWxs
eSBoYXZlCisgICAgLy8gICB0aGVpciBOb2RlRXhpdHNGb3J3YXJkIGNsZWFyZWQgdXBvbiBob2lz
dCwgZXhjZXB0IGZvciBmb3J3YXJkLWV4aXRpbmcKKyAgICAvLyAgIG5vZGVzIHRoYXQgdGFrZSBi
b2d1cyBzdGF0ZSBhcyB0aGVpciBpbnB1dC4gVGhvc2UgYXJlIHN1YnN0YW50aWFsbHkKKyAgICAv
LyAgIGhhcmRlci4gV2UgZGlzYWJsZSBpdCBmb3Igbm93LiBJbiB0aGUgZnV0dXJlIHdlIGNvdWxk
IGVuYWJsZSBpdCBieSBoYXZpbmcKKyAgICAvLyAgIHZlcnNpb25zIG9mIHRob3NlIG5vZGVzIHRo
YXQgYmFja3dhcmQtZXhpdCBpbnN0ZWFkLCBidXQgSSdtIG5vdCBjb252aW5jZWQKKyAgICAvLyAg
IG9mIHRoZSBzb3VuZG5lc3MuCisgICAgLy8KKyAgICAvLyAtIFNvbWUgbm9kZXMgbGllLCBhbmQg
Y2xhaW0gdGhhdCB0aGV5IGRvIG5vdCByZWFkIHRoZSBKU0NlbGxfc3RydWN0dXJlLgorICAgIC8v
ICAgVGhlc2UgYXJlIG5vZGVzIHRoYXQgdXNlIHRoZSBzdHJ1Y3R1cmUgaW4gYSB3YXkgdGhhdCBk
b2VzIG5vdCBkZXBlbmQgb24KKyAgICAvLyAgIHRoaW5ncyB0aGF0IGNoYW5nZSB1bmRlciBzdHJ1
Y3R1cmUgdHJhbnNpdGlvbnMuCisgICAgLy8KKyAgICAvLyAtIEl0J3MgaW1wbGljaXRseSB1bmRl
cnN0b29kIHRoYXQgT1NSIGV4aXRzIHJlYWQgdGhlIHdvcmxkLiBUaGlzIGlzIHdoeSB3ZQorICAg
IC8vICAgZ2VuZXJhbGx5IGRvbid0IG1vdmUgb3IgZWxpbWluYXRlIHN0b3Jlcy4gRXZlcnkgbm9k
ZSBjYW4gZXhpdCwgc28gdGhlCisgICAgLy8gICByZWFkIHNldCBkb2VzIG5vdCByZWZsZWN0IHRo
aW5ncyB0aGF0IHdvdWxkIGJlIHJlYWQgaWYgd2UgZXhpdGVkLgorICAgIC8vICAgSW5zdGVhZCwg
dGhlIHJlYWQgc2V0IHJlZmxlY3RzIHdoYXQgdGhlIG5vZGUgd2lsbCBoYXZlIHRvIHJlYWQgaWYg
aXQKKyAgICAvLyAgICpkb2Vzbid0KiBleGl0LgorICAgIC8vCisgICAgLy8gLSBCcm9hZGx5LCB3
ZSBkb24ndCBzYXkgdGhhdCB3ZSdyZSByZWFkaW5nIHNvbWV0aGluZyBpZiB0aGF0IHNvbWV0aGlu
ZyBpcworICAgIC8vICAgaW1tdXRhYmxlLgorICAgIC8vCisgICAgLy8gLSBXZSB0cnkgdG8gbWFr
ZSB0aGlzIHdvcmsgZXZlbiBwcmlvciB0byB0eXBlIGluZmVyZW5jZSwganVzdCBzbyB0aGF0IHdl
CisgICAgLy8gICBjYW4gdXNlIGl0IGZvciBJUiBkdW1wcy4gTm8gcHJvbWlzZXMgb24gd2hldGhl
ciB0aGUgYW5zd2VycyBhcmUgc291bmQKKyAgICAvLyAgIHByaW9yIHRvIHR5cGUgaW5mZXJlbmNl
IC0gdGhvdWdoIHRoZXkgcHJvYmFibHkgY291bGQgYmUgaWYgd2UgZGlkIHNvbWUKKyAgICAvLyAg
IHNtYWxsIGhhY2tpbmcuCisgICAgCisgICAgaWYgKGVkZ2VzVXNlU3RydWN0dXJlKGdyYXBoLCBu
b2RlKSkKKyAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlKTsKKyAgICAKKyAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgY2FzZSBXZWFrSlNDb25z
dGFudDoKKyAgICBjYXNlIElkZW50aXR5OgorICAgIGNhc2UgUGhhbnRvbToKKyAgICBjYXNlIEJp
dEFuZDoKKyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgIGNhc2UgQml0TFNo
aWZ0OgorICAgIGNhc2UgQml0UlNoaWZ0OgorICAgIGNhc2UgQml0VVJTaGlmdDoKKyAgICBjYXNl
IFZhbHVlVG9JbnQzMjoKKyAgICBjYXNlIEFyaXRoQWRkOgorICAgIGNhc2UgQXJpdGhTdWI6Cisg
ICAgY2FzZSBBcml0aE5lZ2F0ZToKKyAgICBjYXNlIEFyaXRoTXVsOgorICAgIGNhc2UgQXJpdGhE
aXY6CisgICAgY2FzZSBBcml0aE1vZDoKKyAgICBjYXNlIEFyaXRoQWJzOgorICAgIGNhc2UgQXJp
dGhNaW46CisgICAgY2FzZSBBcml0aE1heDoKKyAgICBjYXNlIEFyaXRoU3FydDoKKyAgICBjYXNl
IEdldFNjb3BlOgorICAgIGNhc2UgU2tpcFNjb3BlOgorICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoK
KyAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoK
KyAgICBjYXNlIENvbXBhcmVTdHJpY3RFcUNvbnN0YW50OgorICAgIGNhc2UgQ29tcGFyZVN0cmlj
dEVxOgorICAgIGNhc2UgSXNVbmRlZmluZWQ6CisgICAgY2FzZSBJc0Jvb2xlYW46CisgICAgY2Fz
ZSBJc051bWJlcjoKKyAgICBjYXNlIElzU3RyaW5nOgorICAgIGNhc2UgTG9naWNhbE5vdDoKKyAg
ICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2Fz
ZSBNb3ZIaW50QW5kQ2hlY2s6CisgICAgY2FzZSBNb3ZIaW50OgorICAgIGNhc2UgWm9tYmllSGlu
dDoKKyAgICBjYXNlIFVwc2lsb246CisgICAgY2FzZSBQaGk6CisgICAgY2FzZSBGbHVzaDoKKyAg
ICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgIGNhc2UgSW5s
aW5lU3RhcnQ6CisgICAgY2FzZSBCcmVha3BvaW50OgorICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlv
bjoKKyAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czoKKyAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6
CisgICAgY2FzZSBKdW1wOgorICAgIGNhc2UgQnJhbmNoOgorICAgIGNhc2UgU3dpdGNoOgorICAg
IGNhc2UgVGhyb3c6CisgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CisgICAgY2FzZSBGb3J3YXJkRm9y
Y2VPU1JFeGl0OgorICAgIGNhc2UgUmV0dXJuOgorICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGVzZSBhcmUgZm9yd2FyZC1leGl0aW5nIG5vZGVz
IHRoYXQgYXNzdW1lIHRoYXQgdGhlIHN1YnNlcXVlbnQgaW5zdHJ1Y3Rpb24KKyAgICAvLyBpcyBh
IE1vdkhpbnQsIGFuZCB0aGV5IHRyeSB0byByb2xsIGZvcndhcmQgb3ZlciB0aGlzIE1vdkhpbnQg
aW4gdGhlaXIKKyAgICAvLyBleGVjdXRpb24uIFRoaXMgbWFrZXMgaG9pc3RpbmcgdGhlbSBpbXBv
c3NpYmxlIHdpdGhvdXQgYWRkaXRpb25hbCBtYWdpYy4gV2UKKyAgICAvLyBtYXkgYWRkIHN1Y2gg
bWFnaWMgZXZlbnR1YWxseSwgYnV0IGp1c3Qgbm90IHlldC4KKyAgICBjYXNlIFVJbnQzMlRvTnVt
YmVyOgorICAgIGNhc2UgRm9yd2FyZEludDMyVG9Eb3VibGU6CisgICAgY2FzZSBEb3VibGVBc0lu
dDMyOgorICAgICAgICB3cml0ZShTaWRlU3RhdGUpOworICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgIGNhc2UgQ3JlYXRlVGhpczoKKyAgICBjYXNlIFRvVGhpczoKKyAgICBjYXNlIFZhcklu
amVjdGlvbldhdGNocG9pbnQ6CisgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6
CisgICAgY2FzZSBJc09iamVjdDoKKyAgICBjYXNlIElzRnVuY3Rpb246CisgICAgY2FzZSBUeXBl
T2Y6CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBHZXRCeUlkOgorICAgIGNhc2UgR2V0QnlJZEZsdXNoOgorICAgIGNhc2UgUHV0
QnlJZDoKKyAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgY2FzZSBBcnJheVB1c2g6CisgICAg
Y2FzZSBBcnJheVBvcDoKKyAgICBjYXNlIENhbGw6CisgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAg
Y2FzZSBUb1ByaW1pdGl2ZToKKyAgICBjYXNlIEluOgorICAgIGNhc2UgR2V0TXlBcmd1bWVudHNM
ZW5ndGhTYWZlOgorICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZToKKyAgICAgICAgcmVh
ZChXb3JsZCk7CisgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBjYXNlIFZhbHVlQWRkOgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmJpbmFyeVVzZUtp
bmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICBjYXNlIE51bWJlclVzZToK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAgICAg
ICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
IGNhc2UgR2V0Q2FsbGVlOgorICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpT
U3RhY2s6OkNhbGxlZSkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2V0
Q2FsbGVlOgorICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBKU1N0YWNrOjpD
YWxsZWUpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEdldExvY2FsOgor
ICAgIGNhc2UgR2V0QXJndW1lbnQ6CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxl
cywgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
U2V0TG9jYWw6CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPmxv
Y2FsKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEdldExvY2FsVW5s
aW5rZWQ6CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dW5saW5r
ZWRMb2NhbCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHZXRCeVZh
bDogeworICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOworICAgICAg
ICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5n
UHJlZGljdGlvbnM6CisgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAgIGNh
c2UgQXJyYXk6OlVuZGVjaWRlZDoKKyAgICAgICAgICAgIC8vIEFzc3VtZSB0aGUgd29yc3Qgc2lu
Y2Ugd2UgZG9uJ3QgaGF2ZSBwcm9maWxpbmcgeWV0LgorICAgICAgICAgICAgcmVhZChXb3JsZCk7
CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICAgICAgd3JpdGUo
U2lkZVN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAg
ICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICAgICAgaWYgKG1vZGUuaXNPdXRPZkJvdW5k
cygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICAgICAgd3Jp
dGUoV29ybGQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIFRoaXMgYXBwZWFycyB0byByZWFkIG5vdGhpbmcgYmVjYXVzZSBpdCdzIG9ubHkg
cmVhZGluZyBpbW11dGFibGUgZGF0YS4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgICAgICByZWFkKEFyZ3Vt
ZW50c19yZWdpc3RlcnMpOworICAgICAgICAgICAgcmVhZChWYXJpYWJsZXMpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAg
ICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChC
dXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92
ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZEludDMyUHJvcGVydGll
cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgorICAgICAgICAg
ICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJm
bHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JM
ZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlYWQo
V29ybGQpOworICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgICAg
ICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZs
eV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxl
bmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
YWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAg
ICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIC8vIEdpdmUg
dXAgb24gbGlmZSBmb3Igbm93LgorICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAg
ICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5
OgorICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpV
aW50OEFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAg
ICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFy
cmF5OgorICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgIGNhc2UgQXJy
YXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgICAgIHJlYWQoVHlwZWRBcnJheVByb3BlcnRpZXMp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIGNh
c2UgUHV0QnlWYWw6CisgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CisgICAgICAgIEFycmF5TW9k
ZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIHN3aXRjaCAobW9kZS5tb2RlRm9y
UHV0KCkudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlv
bnM6CisgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAgIGNhc2UgQXJyYXk6
OlVuZGVjaWRlZDoKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICAgICAgLy8g
QXNzdW1lIHRoZSB3b3JzdCBzaW5jZSB3ZSBkb24ndCBoYXZlIHByb2ZpbGluZyB5ZXQuCisgICAg
ICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6
CisgICAgICAgICAgICB3cml0ZShTaWRlU3RhdGUpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgICAgICByZWFk
KFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgICAg
ICByZWFkKEFyZ3VtZW50c19yZWdpc3RlcnMpOworICAgICAgICAgICAgcmVhZChBcmd1bWVudHNf
bnVtQXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3Nsb3dBcmd1bWVudHMp
OworICAgICAgICAgICAgd3JpdGUoVmFyaWFibGVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAgIGlmIChu
b2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFk
KFdvcmxkKTsKKyAgICAgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGlj
TGVuZ3RoKTsKKyAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAg
ICAgICAgICByZWFkKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOworICAgICAgICAgICAgd3JpdGUo
SW5kZXhlZEludDMyUHJvcGVydGllcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgorICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQoV29ybGQp
OworICAgICAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgp
OworICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAg
IHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOworICAgICAgICAgICAgd3JpdGUoSW5kZXhl
ZERvdWJsZVByb3BlcnRpZXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChXb3JsZCk7
CisgICAgICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7
CisgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAg
cmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgd3JpdGUoSW5k
ZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJy
YXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAvLyBHaXZlIHVwIG9uIGxpZmUg
Zm9yIG5vdy4KKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUoV29y
bGQpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJh
eToKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6
SW50MzJBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKKyAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFy
cmF5OgorICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgY2FzZSBBcnJh
eTo6RmxvYXQzMkFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CisgICAg
ICAgICAgICB3cml0ZShUeXBlZEFycmF5UHJvcGVydGllcyk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAg
ICBjYXNlIEZvcndhcmRDaGVja1N0cnVjdHVyZToKKyAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50OgorICAgIGNhc2UgRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50OgorICAgIGNhc2UgQ2hlY2tBcnJheToKKyAgICBjYXNlIEZvcndhcmRDaGVja0FycmF5Ogor
ICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKKyAgICBjYXNlIEluc3RhbmNlT2Y6CisgICAgICAg
IHJlYWQoSlNDZWxsX3N0cnVjdHVyZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBDaGVja0V4ZWN1dGFibGU6CisgICAgICAgIHJlYWQoSlNGdW5jdGlvbl9leGVjdXRhYmxl
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAg
ICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6CisgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1
cmUpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2U6CisgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAg
ICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1
dHRlcmZseSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHZXRCdXR0ZXJm
bHk6CisgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIEFycmF5aWZ5OgorICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVy
ZToKKyAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlKTsKKyAgICAgICAgcmVhZChKU09iamVj
dF9idXR0ZXJmbHkpOworICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlKTsKKyAgICAgICAg
d3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OlN0cmluZykKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmVhZChUeXBlZEFycmF5U3RvcmFnZVBvaW50ZXIpOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFw
KE5hbWVkUHJvcGVydGllcywgZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdl
QWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICB3cml0ZShBYnN0cmFjdEhl
YXAoTmFtZWRQcm9wZXJ0aWVzLCBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3Jh
Z2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlcikpOworICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6IHsKKyAgICAgICAgQXJyYXlNb2Rl
IG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkg
eworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgY2FzZSBBcnJheTo6RG91Ymxl
OgorICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpB
cnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6Cisg
ICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
CisgICAgICAgICAgICByZWFkKEFyZ3VtZW50c19vdmVycmlkZUxlbmd0aCk7CisgICAgICAgICAg
ICByZWFkKEFyZ3VtZW50c19udW1Bcmd1bWVudHMpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZWFkKFR5cGVkQXJyYXlM
ZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgICAgICAK
KyAgICBjYXNlIEdldE15U2NvcGU6CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxl
cywgSlNTdGFjazo6U2NvcGVDaGFpbikpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
IGNhc2UgU2V0TXlTY29wZToKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywg
SlNTdGFjazo6U2NvcGVDaGFpbikpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNh
c2UgU2tpcFRvcFNjb3BlOgorICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIGdy
YXBoLm1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkpOworICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGNhc2UgR2V0Q2xvc3VyZVJlZ2lzdGVyczoKKyAgICAgICAgcmVhZChK
U1ZhcmlhYmxlT2JqZWN0X3JlZ2lzdGVycyk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBHZXRDbG9zdXJlVmFyOgorICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIG5vZGUtPnZhck51bWJlcigpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBQdXRDbG9zdXJlVmFyOgorICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoVmFyaWFibGVz
LCBub2RlLT52YXJOdW1iZXIoKSkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNh
c2UgR2V0R2xvYmFsVmFyOgorICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKKyAgICAgICAg
cmVhZChBYnN0cmFjdEhlYXAoQWJzb2x1dGUsIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBQdXRHbG9iYWxWYXI6CisgICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKTsK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBOZXdPYmplY3Q6CisgICAgY2FzZSBOZXdBcnJh
eToKKyAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CisgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoK
KyAgICBjYXNlIE5ld1JlZ2V4cDoKKyAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKKyAgICBjYXNl
IE1ha2VSb3BlOgorICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgorICAgIGNhc2UgTmV3RnVu
Y3Rpb246CisgICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgIHJlYWQoR0NT
dGF0ZSk7CisgICAgICAgIHdyaXRlKEdDU3RhdGUpOworICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgIGNhc2UgUmVnRXhwRXhlYzoKKyAgICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgICAgIHJl
YWQoUmVnRXhwU3RhdGUpOworICAgICAgICB3cml0ZShSZWdFeHBTdGF0ZSk7CisgICAgICAgIHJl
dHVybjsKKworICAgIGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAgICBpZiAobm9kZS0+YXJyYXlN
b2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAg
ICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQ29tcGFyZUxlc3M6CisgICAgY2FzZSBD
b21wYXJlTGVzc0VxOgorICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgY2FzZSBDb21wYXJl
R3JlYXRlckVxOgorICAgICAgICBpZiAoZ3JhcGguaXNQcmVkaWN0ZWROdW1lcmljYWwobm9kZSkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0
ZShXb3JsZCk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDb21wYXJlRXE6
CisgICAgICAgIGlmIChncmFwaC5pc1ByZWRpY3RlZE51bWVyaWNhbChub2RlKQorICAgICAgICAg
ICAgfHwgbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN0cmluZ1VzZSkKKyAgICAgICAgICAgIHx8IG5v
ZGUtPmlzQmluYXJ5VXNlS2luZChTdHJpbmdJZGVudFVzZSkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICBpZiAoKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmpl
Y3RVc2UgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVjdE9yT3RoZXJVc2UpCisg
ICAgICAgICAgICAmJiAobm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE9iamVjdFVzZSB8fCBu
b2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhlclVzZSkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgd3JpdGUo
V29ybGQpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVG9TdHJpbmc6Cisg
ICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2Ug
U3RyaW5nT2JqZWN0VXNlOgorICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ2VsbFVzZToK
KyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAg
ICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgIGNhc2UgVGVhck9mZkFj
dGl2YXRpb246CisgICAgICAgIHdyaXRlKEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRlYXJPZmZBcmd1bWVudHM6CisgICAg
ICAgIHdyaXRlKEFyZ3VtZW50c19yZWdpc3RlcnMpOworICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGg6CisgICAgICAgIHJlYWQoQWJzdHJhY3RI
ZWFwKFZhcmlhYmxlcywgZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdp
bikpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBKU1N0YWNrOjpBcmd1
bWVudENvdW50KSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHZXRNeUFy
Z3VtZW50QnlWYWw6CisgICAgICAgIHJlYWQoVmFyaWFibGVzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDoKKyAgICAgICAgcmVh
ZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2Rl
LT5jb2RlT3JpZ2luKSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFRocm93UmVmZXJl
bmNlRXJyb3I6CisgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CisgICAgICAgIHJlYWQoR0NTdGF0
ZSk7CisgICAgICAgIHdyaXRlKEdDU3RhdGUpOworICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgQ291bnRFeGVjdXRpb246CisgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6Cisg
ICAgICAgIHJlYWQoSW50ZXJuYWxTdGF0ZSk7CisgICAgICAgIHdyaXRlKEludGVybmFsU3RhdGUp
OworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgTGFzdE5vZGVUeXBlOgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2NsYXNzIE5v
T3BDbG9iYmVyaXplIHsKK3B1YmxpYzoKKyAgICBOb09wQ2xvYmJlcml6ZSgpIHsgfQorICAgIHZv
aWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXApIHsgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdDbG9i
YmVyaXplX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJl
dmlzaW9uIDE1Mjk0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2su
aCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgorI2luY2x1ZGUgIkRGR0Nsb2Ji
ZXJTZXQuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgiCiAjaW5jbHVk
ZSAiRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKQEAg
LTI1OCw2ICsyNTksMTMgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25z
dAogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5jYXNlc1tpXS52YWx1ZSwgIjoi
LCAqZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZGVm
YXVsdDoiLCAqZGF0YS0+ZmFsbFRocm91Z2gpOwogICAgIH0KKyAgICBDbG9iYmVyU2V0IHJlYWRz
OworICAgIENsb2JiZXJTZXQgd3JpdGVzOworICAgIGFkZFJlYWRzQW5kV3JpdGVzKCp0aGlzLCBu
b2RlLCByZWFkcywgd3JpdGVzKTsKKyAgICBpZiAoIXJlYWRzLmlzRW1wdHkoKSkKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAiUjoiLCBzb3J0ZWRMaXN0RHVtcChyZWFkcy5kaXJlY3QoKSwgIiwi
KSk7CisgICAgaWYgKCF3cml0ZXMuaXNFbXB0eSgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJXOiIsIHNvcnRlZExpc3REdW1wKHdyaXRlcy5kaXJlY3QoKSwgIiwiKSk7CiAgICAgb3V0LnBy
aW50KGNvbW1hLCAiYmMjIiwgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAK
ICAgICBvdXQucHJpbnQoIikiKTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTI5NDUpCisrKyBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTA3LTIw
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgZm91cnRoVGllcjog
REZHIE5vZGVzIHNob3VsZCBiZSBhYmxlIHRvIGFic3RyYWN0bHkgdGVsbCB5b3Ugd2hhdCB0aGV5
IHJlYWQgYW5kIHdoYXQgdGhleSB3cml0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTE4OTEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBGaXggY29tcGlsZSBnb29mIGluIHNvcnRlZExpc3RE
dW1wKCkuCisKKyAgICAgICAgKiB3dGYvTGlzdER1bXAuaDoKKyAgICAgICAgKFdURjo6c29ydGVk
TGlzdER1bXApOgorCiAyMDEzLTA3LTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgZm91cnRoVGllcjogTmF0dXJhbExvb3BzIHNob3VsZCBiZSBhYmxlIHRvIHF1
aWNrbHkgYW5zd2VyIHF1ZXN0aW9ucyBsaWtlICJ3aGF0IGxvb3BzIG93biB0aGlzIGJhc2ljIGJs
b2NrIgpJbmRleDogU291cmNlL1dURi93dGYvTGlzdER1bXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9MaXN0RHVtcC5oCShyZXZpc2lvbiAxNTI5NDUpCisrKyBTb3VyY2UvV1RGL3d0
Zi9MaXN0RHVtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgaW5saW5lIGJv
b2wgbGVzc1RoYW4oY29uc3QgVCYgYSwgY29uc3QgVAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIENT
dHJpbmcgc29ydGVkTGlzdER1bXAoY29uc3QgVCYgbGlzdCwgY29uc3QgY2hhciogY29tbWEgPSAi
LCAiKQogewotICAgIHJldHVybiBzb3J0ZWRMaXN0RHVtcChsaXN0LCBsZXNzVGhhbjxUOjpWYWx1
ZVR5cGU+LCBjb21tYSk7CisgICAgcmV0dXJuIHNvcnRlZExpc3REdW1wKGxpc3QsIGxlc3NUaGFu
PHR5cGVuYW1lIFQ6OlZhbHVlVHlwZT4sIGNvbW1hKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207201</attachid>
            <date>2013-07-20 12:35:43 -0700</date>
            <delta_ts>2013-07-21 15:01:53 -0700</delta_ts>
            <desc>make the changelog even more lovely</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59114</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyOTQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OCBA
QAorMjAxMy0wNy0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBOb2RlcyBzaG91bGQgYmUgYWJsZSB0byBhYnN0cmFjdGx5IHRlbGwg
eW91IHdoYXQgdGhleSByZWFkIGFuZCB3aGF0IHRoZXkgd3JpdGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODkxMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRkIHRoZSBub3Rpb24gb2Yg
QWJzdHJhY3RIZWFwIHRvIHRoZSBERkcuIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHRoZSBBYnN0cmFj
dEhlYXAgaW4KKyAgICAgICAgdGhlIEZUTCwgZXhjZXB0IHRoYXQgdGhlIEZUTCdzIEFic3RyYWN0
SGVhcHMgYXJlIHVzZWQgZHVyaW5nIExMVk0gbG93ZXJpbmcgYW5kIGFyZQorICAgICAgICBlbmdp
bmVlcmVkIHRvIG9iZXkgTExWTSBUQkFBIGxvZ2ljLiBUaGUgRlRMJ3MgQWJzdHJhY3RIZWFwcyBh
cmUgYWxzbyBlbmdpbmVlcmVkIHRvCisgICAgICAgIGJlIGluZXhwZW5zaXZlIHRvIHVzZSAodGhl
eSBqdXN0IGdpdmUgeW91IGEgVEJBQSBub2RlKSBidXQgZXhwZW5zaXZlIHRvIGNyZWF0ZSAoeW91
CisgICAgICAgIGNyZWF0ZSB0aGVtIGFsbCB1cCBmcm9udCkuIEZUTCBBYnN0cmFjdEhlYXBzIGFs
c28gZG9uJ3QgYWN0dWFsbHkgZ2l2ZSB5b3UgdGhlCisgICAgICAgIGFiaWxpdHkgdG8gcmVhc29u
IGFib3V0IGFsaWFzaW5nOyB0aGV5IGFyZSAqanVzdCogYSBtZWNoYW5pc20gZm9yIGxvd2VyaW5n
IHRvIFRCQUEuCisgICAgICAgIFRoZSBERkcncyBBYnN0cmFjdEhlYXBzIGFyZSBlbmdpbmVlcmVk
IHRvIGJlIGJvdGggY2hlYXAgdG8gY3JlYXRlIGFuZCBjaGVhcCB0byB1c2UuCisgICAgICAgIFRo
ZXkgYWxzbyBnaXZlIHlvdSBhbGlhc2luZyBtYWNoaW5lcnkuIFRoZSBERkcgQWJzdHJhY3RIZWFw
cyBhcmUgcmVwcmVzZW50ZWQKKyAgICAgICAgaW50ZXJuYWxseSBieSBhIGludDY0X3QuIE1hbnkg
Y29tcGFyaXNvbnMgYmV0d2VlbiB0aGVtIGFyZSBqdXN0IGludGVnZXIgY29tYXByaXNvbnMuCisg
ICAgICAgIEFic3RyYWN0SGVhcHMgZm9ybSBhIHRocmVlLWxldmVsIGhpZXJhcmNoeSAoV29ybGQg
aXMgdGhlIHN1cGVydHlwZSBvZiBldmVyeXRoaW5nLAorICAgICAgICBLaW5kIHdpdGggYSBUT1Ag
cGF5bG9hZCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLCBhbmQgS2luZCB3aXRoIGEgbm9u
LVRPUAorICAgICAgICBwYXlsb2FkIGlzIHRoZSBkaXJlY3Qgc3VidHlwZSBvZiBpdHMgY29ycmVz
cG9uZGluZyBUT1AgS2luZCkuCisgICAgICAgIAorICAgICAgICBBZGQgdGhlIG5vdGlvbiBvZiBh
IENsb2JiZXJTZXQuIFRoaXMgaXMgdGhlIHNldCBvZiBBYnN0cmFjdEhlYXBzIHRoYXQgeW91IGhh
ZAorICAgICAgICBjbG9iYmVyZWQuIEl0IHJlcHJlc2VudHMgdGhlIHNldCB0aGF0IHJlc3VsdHMg
ZnJvbSB1bmlmeWluZyBhIGJ1bmNoIG9mCisgICAgICAgIEFic3RyYWN0SGVhcHMsIGFuZCBpcyBp
bnRlbmRlZCB0byBxdWlja2x5IGFuc3dlciBvdmVybGFwIHF1ZXN0aW9uczogZG9lcyB0aGUgZ2l2
ZW4KKyAgICAgICAgQWJzdHJhY3RIZWFwIG92ZXJsYXAgYW55IEFic3RyYWN0SGVhcCBpbiB0aGUg
Q2xvYmJlclNldD8gVG8gdGhpcyBlbmQsIGlmIHlvdSBhZGQgYW4KKyAgICAgICAgQWJzdHJhY3RI
ZWFwIHRvIGEgc2V0LCBpdCAiZGlyZWN0bHkiIGFkZHMgdGhlIGhlYXAgaXRzZWxmLCBhbmQgInN1
cGVyIiBhZGRzIGFsbCBvZgorICAgICAgICBpdHMgYW5jZXN0b3JzLiBBbiBBYnN0cmFjdEhlYXAg
aXMgc2FpZCB0byBvdmVybGFwIGEgc2V0IGlmIGFueSBkaXJlY3Qgb3Igc3VwZXIKKyAgICAgICAg
bWVtYmVyIGlzIGVxdWFsIHRvIGl0LCBvciBpZiBhbnkgb2YgaXRzIGFuY2VzdG9ycyBhcmUgZXF1
YWwgdG8gYSBkaXJlY3QgbWVtYmVyLgorICAgICAgICAKKyAgICAgICAgRXhhbXBsZSAjMToKKyAg
ICAgICAgCisgICAgICAgICAgICAtIEkgYWRkIFZhcmlhYmxlcyg1KS4gSS5lLiBWYXJpYWJsZXMg
aXMgdGhlIEtpbmQgYW5kIDUgaXMgdGhlIHBheWxvYWQuIFRoaXMKKyAgICAgICAgICAgICAgaXMg
YSBzdWJ0eXBlIG9mIFZhcmlhYmxlcywgd2hpY2ggaXMgYSBzdWJ0eXBlIG9mIFdvcmxkLgorICAg
ICAgICAgICAgLSBZb3UgcXVlcnkgVmFyaWFibGVzLiBJLmUuIFZhcmlhYmxlcyB3aXRoIGEgVE9Q
IHBheWxvYWQsIHdoaWNoIGlzIHRoZQorICAgICAgICAgICAgICBzdXBlcnR5cGUgb2YgVmFyaWFi
bGVzKFgpIGZvciBhbnkgWCwgYW5kIGEgc3VidHlwZSBvZiBXb3JsZC4KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgVGhlIHNldCB3aWxsIGhhdmUgVmFyaWFibGVzKDUpIGFzIGEgZGlyZWN0IG1l
bWJlciwgYW5kIFZhcmlhYmxlcyBhbmQgV29ybGQgYXMKKyAgICAgICAgICAgIHN1cGVyIG1lbWJl
cnMuIFRoZSBWYXJpYWJsZXMgcXVlcnkgd2lsbCBpbW1lZGlhdGVseSByZXR1cm4gdHJ1ZSwgYmVj
YXVzZQorICAgICAgICAgICAgVmFyaWFibGVzIGlzIGluZGVlZCBhIHN1cGVyIG1lbWJlci4KKyAg
ICAgICAgCisgICAgICAgIEV4YW1wbGUgIzI6CisgICAgICAgIAorICAgICAgICAgICAgLSBJIGFk
ZCBWYXJpYWJsZXMoNSkKKyAgICAgICAgICAgIC0gWW91IHF1ZXJ5IE5hbWVkUHJvcGVydGllcwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBOYW1lZFByb3BlcnRpZXMgaXMgbm90IGEgbWVtYmVy
IGF0IGFsbCAobmVpdGhlciBkaXJlY3Qgb3Igc3VwZXIpLiBXZSBuZXh0CisgICAgICAgICAgICBx
dWVyeSBXb3JsZC4gV29ybGQgaXMgYSBtZW1iZXIsIGJ1dCBpdCdzIGEgc3VwZXIgbWVtYmVyLCBz
byB3ZSByZXR1cm4gZmFsc2UuCisgICAgICAgIAorICAgICAgICBFeGFtcGxlICMzOgorICAgICAg
ICAKKyAgICAgICAgICAgIC0gSSBhZGQgVmFyaWFibGVzCisgICAgICAgICAgICAtIFlvdSBxdWVy
eSBWYXJpYWJsZXMoNSkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVGhlIHNldCB3aWxsIGhh
dmUgVmFyaWFibGVzIGFzIGEgZGlyZWN0IG1lbWJlciwgYW5kIFdvcmxkIGFzIGEgc3VwZXIgbWVt
YmVyLgorICAgICAgICAgICAgVGhlIFZhcmlhYmxlcyg1KSBxdWVyeSB3aWxsIG5vdCBmaW5kIFZh
cmlhYmxlcyg1KSBpbiB0aGUgc2V0LCBidXQgdGhlbiBpdAorICAgICAgICAgICAgd2lsbCBxdWVy
eSBWYXJpYWJsZXMuIFZhcmlhYmxlcyBpcyBhIGRpcmVjdCBtZW1iZXIsIHNvIHdlIHJldHVybiB0
cnVlLgorICAgICAgICAKKyAgICAgICAgRXhhbXBsZSAjNDoKKyAgICAgICAgCisgICAgICAgICAg
ICAtIEkgYWRkIFZhcmlhYmxlcworICAgICAgICAgICAgLSBZb3UgcXVlcnkgTmFtZWRQcm9wZXJ0
aWVzKDUpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5laXRoZXIgTmFtZWRQcm9wZXJ0aWVz
IG5vciBOYW1lZFByb3BlcnRpZXMoNSkgYXJlIG1lbWJlcnMuIFdlIG5leHQgcXVlcnkKKyAgICAg
ICAgICAgIFdvcmxkLiBXb3JsZCBpcyBhIG1lbWJlciwgYnV0IGl0J3MgYSBzdXBlciBtZW1iZXIs
IHNvIHdlIHJldHVybiBmYWxzZS4KKyAgICAgICAgCisgICAgICAgIE92ZXJsYXAgcXVlcmllcyBy
ZXF1aXJlIHRoYXQgZWl0aGVyIHRoZSBoZWFwIGJlaW5nIHF1ZXJpZWQgaXMgaW4gdGhlIHNldCAo
ZWl0aGVyCisgICAgICAgIGRpcmVjdCBvciBzdXBlciksIG9yIHRoYXQgb25lIG9mIGl0cyBhbmNl
c3RvcnMgaXMgYSBkaXJlY3QgbWVtYmVyLiBBbm90aGVyIHdheSB0bworICAgICAgICB0aGluayBh
Ym91dCBob3cgdGhpcyB3b3JrcyBpcyB0aGF0IHR3byBoZWFwcyBBIGFuZCBCIGFyZSBzYWlkIHRv
IG92ZXJsYXAgaWYKKyAgICAgICAgQS5pc1N1YnR5cGVPZihCKSBvciBCLmlzU3VidHlwZU9mKEEp
LiBUaGlzIGlzIHNvdW5kIHNpbmNlIGhlYXBzIGZvcm0gYQorICAgICAgICBzaW5nbGUtaW5oZXJp
dGFuY2UgaGVpcmFyY2h5LiBDb25zaWRlciB0aGF0IHdlIHdhbnRlZCB0byBpbXBsZW1lbnQgYSBz
ZXQgdGhhdCBob2xkcworICAgICAgICBoZWFwcyBhbmQgYW5zd2VycyB0aGUgcXVlc3Rpb24sICJp
cyBhbnkgbWVtYmVyIGluIHRoZSBzZXQgYW4gYW5jZXN0b3IgKGkuZS4KKyAgICAgICAgc3VwZXJ0
eXBlKSBvZiBzb21lIG90aGVyIGhlYXAiLiBXZSB3b3VsZCBoYXZlIHRoZSBzZXQgY29udGFpbiB0
aGUgaGVhcHMgdGhlbXNlbHZlcywKKyAgICAgICAgYW5kIHdlIHdvdWxkIHNhdGlzZnkgdGhlIHF1
ZXJ5ICJBLmlzU3VidHlwZU9mQW55KHNldCkiIGJ5IHdhbGtpbmcgdGhlIGFuY2VzdG9yCisgICAg
ICAgIGNoYWluIG9mIEEsIGFuZCByZXBlYXRlZGx5IHF1ZXJ5aW5nIGl0cyBtZW1iZXJzaGlwIGlu
IHRoZSBzZXQuIFRoaXMgaXMgd2hhdCB0aGUKKyAgICAgICAgImRpcmVjdCIgbWVtYmVycyBvZiBv
dXIgc2V0IGRvLiBOb3cgY29uc2lkZXIgdGhlIG90aGVyIHBhcnQsIHdoZXJlIHdlIHdhbnQgdG8g
YXNrIGlmCisgICAgICAgIGFueSBtZW1iZXIgb2YgdGhlIHNldCBpcyBhIGRlc2NlbmRlbnQgb2Yg
YSBoZWFwLCBvciAiQS5pc1N1cGVydHlwZU9mQW55KHNldCkiLiBXZQorICAgICAgICB3b3VsZCBp
bXBsZW1lbnQgdGhpcyBieSBpbXBsZW1lbnRpbmcgc2V0LmFkZChCKSBhcyBhZGRpbmcgbm90IGp1
c3QgQiBidXQgYWxzbyBhbGwgb2YKKyAgICAgICAgQidzIGFuY2VzdG9yczsgdGhlbiB3ZSB3b3Vs
ZCBhbnN3ZXIgQS5pc1N1cGVydHlwZU9mQW55KHNldCkgYnkganVzdCBjaGVja2luZyBpZiBBIGlz
CisgICAgICAgIGluIHRoZSBzZXQuIFdpdGggdHdvIHN1Y2ggc2V0cyAtIG9uZSB0aGF0IGFuc3dl
cnMgaXNTdWJ0eXBlT2ZBbnkoKSBhbmQgYW5vdGhlciB0aGF0CisgICAgICAgIGFuc3dlcnMgaXNT
dXBlcnR5cGVPZkFueSgpIC0gd2UgY291bGQgYW5zd2VyIHRoZSAiZG8gYW55IG9mIG15IGhlYXBz
IG92ZXJsYXAgeW91cgorICAgICAgICBoZWFwIiBxdWVzdGlvbi4gQ2xvYmJlclNldCBkb2VzIHRo
aXMsIGJ1dCBjb21iaW5lcyB0aGUgdHdvIHNldHMgaW50byBhIHNpbmdsZQorICAgICAgICBIYXNo
TWFwLiBUaGUgSGFzaE1hcCdzIHZhbHVlLCAiZGlyZWN0IiwgbWVhbnMgdGhhdCB0aGUga2V5IGlz
IGEgbWVtYmVyIG9mIGJvdGggdGhlCisgICAgICAgIHN1cGVydHlwZSBzZXQgYW5kIHRoZSBzdWJ0
eXBlIHNldDsgaWYgaXQncyBmYWxzZSB0aGVuIGl0J3Mgb25seSBhIG1lbWJlciBvZiBvbmUgb2YK
KyAgICAgICAgdGhlbS4KKyAgICAgICAgCisgICAgICAgIEZpbmFsbHksIHRoaXMgYWRkcyBhIGZ1
bmN0b3JpemVkIGNsb2JiZXJpemUoKSBtZXRob2QgdGhhdCBhZGRzIHRoZSByZWFkIGFuZCB3cml0
ZQorICAgICAgICBjbG9iYmVycyBvZiBhIERGRzo6Tm9kZSB0byByZWFkIGFuZCB3cml0ZSBmdW5j
dG9ycy4gQ29tbW9uIGZ1bmN0b3JzIGZvciBhZGRpbmcgdG8KKyAgICAgICAgQ2xvYmJlclNldHMs
IHF1ZXJ5aW5nIG92ZXJsYXAsIGFuZCBkb2luZyBub3RoaW5nIGFyZSBwcm92aWRlZC4gQ29udmVu
aWVudCB3cmFwcGVycworICAgICAgICBhcmUgYWxzbyBwcm92aWRlZC4gVGhpcyBhbGxvd3MgeW91
IHRvIHNheSB0aGluZ3MgbGlrZToKKyAgICAgICAgCisgICAgICAgICAgICBDbG9iYmVyU2V0IHNl
dDsKKyAgICAgICAgICAgIGFkZFdyaXRlcyhncmFwaCwgbm9kZTEsIHNldCk7CisgICAgICAgICAg
ICBpZiAob3ZlcmxhcHNSZWFkcyhncmFwaCwgbm9kZTIsIHNldCkpCisgICAgICAgICAgICAgICAg
Ly8gV2Uga25vdyB0aGF0IG5vZGUxIG1heSB3cml0ZSB0byBzb21ldGhpbmcgdGhhdCBub2RlMiBt
YXkgcmVhZCBmcm9tLgorICAgICAgICAKKyAgICAgICAgQ3VycmVudGx5IHRoaXMgZmFjaWxpdHkg
aXMgb25seSB1c2VkIHRvIGltcHJvdmUgZ3JhcGggZHVtcGluZywgYnV0IGl0IHdpbGwgYmUKKyAg
ICAgICAgaW5zdHJ1bWVudGFsIGluIGJvdGggTElDTSBhbmQgR1ZOLiBJbiB0aGUgZnV0dXJlLCBJ
IHdhbnQgdG8gY29tcGxldGVseSBraWxsIHRoZQorICAgICAgICBOb2RlQ2xvYmJlcnNXb3JsZCBh
bmQgTm9kZU1pZ2h0Q2xvYmJlciBmbGFncywgYW5kIGVyYWRpY2F0ZSBDU0VQaGFzZSdzIGhhY2tp
c2ggd2F5CisgICAgICAgIG9mIGFjY29tcGxpc2hpbmcgYWxtb3N0IGV4YWN0bHkgd2hhdCBBYnN0
cmFjdEhlYXAgZ2l2ZXMgeW91LgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RIZWFwLmNwcDogQWRk
ZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6UGF5
bG9hZDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpkdW1wKToKKyAg
ICAgICAgKFdURik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRm
Zy9ERkdBYnN0cmFjdEhlYXAuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoQWJz
dHJhY3RIZWFwKToKKyAgICAgICAgKFBheWxvYWQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0SGVhcDo6UGF5bG9hZDo6UGF5bG9hZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RI
ZWFwOjpQYXlsb2FkOjp0b3ApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6UGF5
bG9hZDo6aXNUb3ApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6
dmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6dmFsdWVJ
bXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpvcGVyYXRvcjwp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6aXNEaXNqb2ludCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpvdmVybGFwcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpBYnN0cmFjdEhlYXApOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0SGVhcDo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdEhlYXA6OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6cGF5
bG9hZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjppc0Rpc2pvaW50KToKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6Om92ZXJsYXBzKToKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdEhlYXA6OnN1cGVydHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJh
Y3RIZWFwOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYXRvcjwpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0SGVhcDo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SGVhcDo6cGF5bG9hZEltcGwpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0SGVhcDo6ZW5jb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXBIYXNo
OjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXBIYXNoOjplcXVhbCk6Cisg
ICAgICAgIChBYnN0cmFjdEhlYXBIYXNoKToKKyAgICAgICAgKFdURik6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJTZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6
OkRGRzo6Q2xvYmJlclNldDo6Q2xvYmJlclNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q2xvYmJl
clNldDo6fkNsb2JiZXJTZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXQ6OmFkZCk6
CisgICAgICAgIChKU0M6OkRGRzo6Q2xvYmJlclNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlND
OjpERkc6OkNsb2JiZXJTZXQ6Om92ZXJsYXBzKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVy
U2V0OjpjbGVhcik6CisgICAgICAgIChKU0M6OkRGRzo6Q2xvYmJlclNldDo6ZGlyZWN0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0OjpzdXBlcik6CisgICAgICAgIChKU0M6OkRGRzo6
Q2xvYmJlclNldDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6Q2xvYmJlclNldDo6c2V0T2Yp
OgorICAgICAgICAoSlNDOjpERkc6OmFkZFJlYWRzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGRX
cml0ZXMpOgorICAgICAgICAoSlNDOjpERkc6OmFkZFJlYWRzQW5kV3JpdGVzKToKKyAgICAgICAg
KEpTQzo6REZHOjpvdmVybGFwc1JlYWRzKToKKyAgICAgICAgKEpTQzo6REZHOjpvdmVybGFwc1dy
aXRlcyk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJTZXQuaDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAoQ2xvYmJlclNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q2xvYmJlclNl
dDo6aXNFbXB0eSk6CisgICAgICAgIChDbG9iYmVyU2V0QWRkKToKKyAgICAgICAgKEpTQzo6REZH
OjpDbG9iYmVyU2V0QWRkOjpDbG9iYmVyU2V0QWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9i
YmVyU2V0QWRkOjpvcGVyYXRvcigpKToKKyAgICAgICAgKENsb2JiZXJTZXRPdmVybGFwcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q2xvYmJlclNldE92ZXJsYXBzOjpDbG9iYmVyU2V0T3ZlcmxhcHMp
OgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXRPdmVybGFwczo6b3BlcmF0b3IoKSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q2xvYmJlclNldE92ZXJsYXBzOjpyZXN1bHQpOgorICAgICAgICAq
IGRmZy9ERkdDbG9iYmVyaXplLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpT
Qzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKE5vT3BDbG9iYmVyaXplKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb09wQ2xvYmJlcml6ZTo6Tm9PcENsb2JiZXJpemUpOgorICAgICAgICAoSlND
OjpERkc6Ok5vT3BDbG9iYmVyaXplOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBkZmcvREZHR3Jh
cGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKwogMjAxMy0wNy0xOSAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRpZXI6IFN0
cmluZ09iamVjdFVzZSB1c2VzIHN0cnVjdHVyZXMsIGFuZCBDU0Ugc2hvdWxkIGtub3cgdGhhdApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1Mjk0NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNzUsNiArMzc1LDExIEBACiAJCTBGRTUwNThGMTc5OEFF
NzEwMEIzNUY4QyAvKiBERkdNZXJnZU1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNThFMTc5OEFFNkYwMEIzNUY4QyAvKiBERkdNZXJnZU1v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkU1MDU5MzE3OUE2MDQ1MDBCMzVGOEMgLyogREZHRWRnZVVzZXNTdHJ1Y3R1cmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTkyMTc5QTYwNDUw
MEIzNUY4QyAvKiBERkdFZGdlVXNlc1N0cnVjdHVyZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTUwNTkxMTc5QTQ5MjQwMEIzNUY4QyAvKiBE
RkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1OTAxNzlBNDkyNDAwQjM1RjhDIC8q
IERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFNTA1OTkxNzlCMEY3MjAwQjM1
RjhDIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU5NDE3OUIwRjcyMDBCMzVGOEMgLyogREZHQWJzdHJhY3RI
ZWFwLmNwcCAqLzsgfTsKKwkJMEZFNTA1OUExNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Fic3RyYWN0
SGVhcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
NTA1OTUxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SGVhcC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTlCMTc5QjBGNzIwMEIz
NUY4QyAvKiBERkdDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU5NjE3OUIwRjcyMDBCMzVGOEMgLyogREZHQ2xvYmJlcml6ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUw
NTlDMTc5QjBGNzIwMEIzNUY4QyAvKiBERkdDbG9iYmVyU2V0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTk3MTc5QjBGNzIwMEIzNUY4QyAv
KiBERkdDbG9iYmVyU2V0LmNwcCAqLzsgfTsKKwkJMEZFNTA1OUQxNzlCMEY3MjAwQjM1RjhDIC8q
IERGR0Nsb2JiZXJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTUwNTk4MTc5QjBGNzIwMEIzNUY4QyAvKiBERkdDbG9iYmVyU2V0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFODUzNEIxNzIz
Q0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUg
LyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLzsgfTsKIAkJMEZFODUzNEMxNzIzQ0RBNTAw
QjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGRUEwQTA4MTcwNTEzREIwMEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMDlG
RDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNDI4LDYgKzE0MzMsMTEgQEAKIAkJ
MEZFNTA1OEUxNzk4QUU2RjAwQjM1RjhDIC8qIERGR01lcmdlTW9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdNZXJnZU1vZGUuaDsgcGF0aCA9IGRmZy9ERkdNZXJnZU1vZGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNTA1OTIxNzlBNjA0NTAwQjM1RjhDIC8qIERGR0VkZ2VVc2Vz
U3RydWN0dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0VkZ2VVc2Vz
U3RydWN0dXJlLmg7IHBhdGggPSBkZmcvREZHRWRnZVVzZXNTdHJ1Y3R1cmUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNTA1OTAxNzlBNDkyNDAwQjM1RjhDIC8qIERGR1NhbmVT
dHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGgg
PSBkZmcvREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1OTQxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Fic3Ry
YWN0SGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0
cmFjdEhlYXAuY3BwOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTk1MTc5QjBGNzIwMEIzNUY4QyAvKiBERkdBYnN0cmFj
dEhlYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RIZWFw
Lmg7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RIZWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRTUwNTk2MTc5QjBGNzIwMEIzNUY4QyAvKiBERkdDbG9iYmVyaXplLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Nsb2JiZXJpemUuaDsgcGF0aCA9IGRmZy9E
RkdDbG9iYmVyaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTk3MTc5
QjBGNzIwMEIzNUY4QyAvKiBERkdDbG9iYmVyU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0Nsb2JiZXJTZXQuY3BwOyBwYXRoID0gZGZnL0RGR0Nsb2JiZXJT
ZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU5ODE3OUIwRjcyMDBC
MzVGOEMgLyogREZHQ2xvYmJlclNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdDbG9iYmVyU2V0Lmg7IHBhdGggPSBkZmcvREZHQ2xvYmJlclNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUzNEExNzIzQ0RBNTAwQjYx
OEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkV2F0
Y2hwb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTA5RkQxNzA1MTNE
QjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMQWJicmV2aWF0aW9ucy5oOyBwYXRoID0gZnRsL0ZUTEFiYnJldmlhdGlvbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5ODksNiArMjk5OSw4IEBACiAJCTg2
RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRTUwNTk0MTc5QjBGNzIwMEIzNUY4QyAvKiBERkdBYnN0
cmFjdEhlYXAuY3BwICovLAorCQkJCTBGRTUwNTk1MTc5QjBGNzIwMEIzNUY4QyAvKiBERkdBYnN0
cmFjdEhlYXAuaCAqLywKIAkJCQkwRkU1MDU4NjE3OThBQkY1MDBCMzVGOEMgLyogREZHQWJzdHJh
Y3RJbnRlcnByZXRlci5oICovLAogCQkJCTBGRTUwNTg3MTc5OEFCRjUwMEIzNUY4QyAvKiBERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oICovLAogCQkJCTBGNTVDMTkzMTcyNzZFNDYwMENF
QUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKQEAgLTMwMjQsNiArMzAzNiw5IEBACiAJ
CQkJMEZGRkM5NEMxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmggKi8sCiAJCQkJMEYz
QjNBMjQxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICov
LAogCQkJCTBGM0IzQTI1MTU0NEM5OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmggKi8sCisJCQkJMEZFNTA1OTYxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Nsb2JiZXJpemUu
aCAqLywKKwkJCQkwRkU1MDU5NzE3OUIwRjcyMDBCMzVGOEMgLyogREZHQ2xvYmJlclNldC5jcHAg
Ki8sCisJCQkJMEZFNTA1OTgxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Nsb2JiZXJTZXQuaCAqLywK
IAkJCQkwRkI0QjUxQTE2QjYyNzcyMDAzRjY5NkIgLyogREZHQ29tbW9uLmNwcCAqLywKIAkJCQkw
RkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIgLyogREZHQ29tbW9uLmggKi8sCiAJCQkJMEZFQTBBMkQx
NzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuY3BwICovLApAQCAtMzM4MCw2ICszMzk1
LDcgQEAKIAkJCQkwRkU1MDU4RjE3OThBRTcxMDBCMzVGOEMgLyogREZHTWVyZ2VNb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRUY2ODM1RjE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNBUk12
Ny5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyNDU5NjIxNzYwMUQ1ODAwNzRGQ0UwIC8qIENhbGxG
cmFtZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNTlBMTc5QjBGNzIwMEIzNUY4
QyAvKiBERkdBYnN0cmFjdEhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRjY4MzYwMTc0MzQz
Q0MwMEEzMkUyNSAvKiBKSVRTdHVic1g4Nl82NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVGNjgz
NUUxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTk0MDMyMjE3NDQ0MjU5MDA0N0NGNkUgLyogSklUU3R1YnNYODZDb21tb24uaCBpbiBIZWFkZXJz
ICovLApAQCAtMzU3MCw2ICszNTg2LDcgQEAKIAkJCQkwRkVBMEExRjE3MDhCMDA3MDBCQjcyMkMg
LyogRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3
OTkwRUQxRDNBRTAwRjFGNjgxIC8qIEluc3RydWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzExNjY3QjBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJuYWxGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFNTA1OUQxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Nsb2JiZXJTZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MjlENzdDMEVEMjBENzMwMEI4OTYxOSAvKiBJbnRlcnByZXRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMDgxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJl
dmlhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAv
KiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLApAQCAtMzYxNSw2ICszNjMyLDcgQEAKIAkJCQkx
NDhDRDFEODEwOENGOTAyMDA4MTYzQzYgLyogSlNDb250ZXh0UmVmUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTc4ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGguaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyQTdGNjg4MTYwNDMyRDQwMEY3NkI5OCAvKiBKU0Rlc3RydWN0aWJs
ZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1OUIxNzlCMEY3MjAwQjM1RjhDIC8q
IERGR0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE0MTY3QkFCRDcwMDZE
NzYwQSAvKiBKU0V4cG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDREMxNzQyRDgwNDAw
N0IzQzFCIC8qIERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCNEFDQUYxNDg0
QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywKQEAgLTQyOTMs
NiArNDMxMSw3IEBACiAJCQkJMEZFQTBBMEIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBpbGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzMxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVD
b25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0MjdB
NDggLyogRGF0ZUNvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNTA1OTkxNzlC
MEY3MjAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlDNTEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUluc3RhbmNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0N0YzOUM2MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlUHJvdG90eXBlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTQ0NTIsNiArNDQ3MSw3IEBACiAJCQkJMEY0RTFBMEUxNzNBRURE
QzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ4MkI3NEUwQTQzMDMyODAwNTE3Q0ZDIC8qIEpTU3RyaW5nUmVmLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0NkFBQjM4MEI2NkE5NDQwMEU1NUYxNiAvKiBKU1N0cmluZ1JlZkNGLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRTUwNTlDMTc5QjBGNzIwMEIzNUY4QyAvKiBERkdDbG9iYmVy
U2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDBDMTU3RUUwOUYwMDRBNEU3RCAvKiBK
U1N5bWJvbFRhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RTNDNjFBMTY3QkFC
RUUwMDZENzYwQSAvKiBKU1ZhbHVlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzIwQTNF
OTFGNjAwQkFGNTlDIC8qIEpTVmFsdWVSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Fic3Ry
YWN0SGVhcC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKwordm9pZCBBYnN0cmFjdEhlYXA6OlBheWxvYWQ6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJU
T1AiKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCh2YWx1ZSgpKTsKK30KKwordm9pZCBB
YnN0cmFjdEhlYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoa2luZCgpKTsKKyAgICBpZiAoa2luZCgpID09IEludmFsaWRBYnN0cmFjdEhlYXAgfHwga2lu
ZCgpID09IFdvcmxkIHx8IHBheWxvYWQoKS5pc1RvcCgpKQorICAgICAgICByZXR1cm47CisgICAg
b3V0LnByaW50KCIoIiwgcGF5bG9hZCgpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBBYnN0cmFjdEhlYXBLaW5kIGtp
bmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisjZGVmaW5lIEFCU1RSQUNUX0hFQVBfRFVNUChu
YW1lKSAgICAgICAgICAgIFwKKyAgICBjYXNlIG5hbWU6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBvdXQucHJpbnQoI25hbWUpOyAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHJldHVybjsKKyAgICBGT1JfRUFDSF9BQlNUUkFDVF9IRUFQX0tJTkQoQUJTVFJBQ1Rf
SEVBUF9EVU1QKQorI3VuZGVmIEFCU1RSQUNUX0hFQVBfRFVNUAorICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
QWJzdHJhY3RIZWFwX2gKKyNkZWZpbmUgREZHQWJzdHJhY3RIZWFwX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJWaXJ0dWFs
UmVnaXN0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIEltcGxl
bWVudHMgYSB0aHJlZS1sZXZlbCB0eXBlIGhpZXJhcmNoeToKKy8vIC0gV29ybGQgaXMgdGhlIHN1
cGVydHlwZSBvZiBhbGwgb2YgdGhlIHRoaW5ncy4KKy8vIC0gS2luZCB3aXRoIFRPUCBwYXlsb2Fk
IGlzIHRoZSBkaXJlY3Qgc3VidHlwZSBvZiBXb3JsZC4KKy8vIC0gS2luZCB3aXRoIG5vbi1UT1Ag
cGF5bG9hZCBpcyB0aGUgZGlyZWN0IHN1YnR5cGUgb2YgaXRzIGNvcnJlc3BvbmRpbmcgVE9QIEtp
bmQuCisKKyNkZWZpbmUgRk9SX0VBQ0hfQUJTVFJBQ1RfSEVBUF9LSU5EKG1hY3JvKSBcCisgICAg
bWFjcm8oSW52YWxpZEFic3RyYWN0SGVhcCkgXAorICAgIG1hY3JvKFdvcmxkKSBcCisgICAgbWFj
cm8oQXJndW1lbnRzX251bUFyZ3VtZW50cykgXAorICAgIG1hY3JvKEFyZ3VtZW50c19vdmVycmlk
ZUxlbmd0aCkgXAorICAgIG1hY3JvKEFyZ3VtZW50c19yZWdpc3RlcnMpIFwKKyAgICBtYWNybyhB
cmd1bWVudHNfc2xvd0FyZ3VtZW50cykgXAorICAgIG1hY3JvKEJ1dHRlcmZseV9wdWJsaWNMZW5n
dGgpIFwKKyAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKSBcCisgICAgbWFjcm8oSlND
ZWxsX3N0cnVjdHVyZSkgXAorICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSkgXAorICAg
IG1hY3JvKEpTRnVuY3Rpb25fc2NvcGVDaGFpbikgXAorICAgIG1hY3JvKEpTT2JqZWN0X2J1dHRl
cmZseSkgXAorICAgIG1hY3JvKEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzKSBcCisgICAgbWFj
cm8oTmFtZWRQcm9wZXJ0aWVzKSBcCisgICAgbWFjcm8oSW5kZXhlZEludDMyUHJvcGVydGllcykg
XAorICAgIG1hY3JvKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKSBcCisgICAgbWFjcm8oSW5kZXhl
ZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKSBcCisgICAgbWFjcm8oQXJyYXlTdG9yYWdlUHJvcGVydGll
cykgXAorICAgIG1hY3JvKFZhcmlhYmxlcykgXAorICAgIG1hY3JvKFR5cGVkQXJyYXlTdG9yYWdl
UG9pbnRlcikgXAorICAgIG1hY3JvKFR5cGVkQXJyYXlQcm9wZXJ0aWVzKSBcCisgICAgbWFjcm8o
VHlwZWRBcnJheUxlbmd0aCkgXAorICAgIG1hY3JvKEdDU3RhdGUpIFwKKyAgICBtYWNybyhSZWdF
eHBTdGF0ZSkgXAorICAgIG1hY3JvKEludGVybmFsU3RhdGUpIFwKKyAgICBtYWNybyhBYnNvbHV0
ZSkgXAorICAgIC8qIFVzZSB0aGlzIGZvciByZWFkcyBvbmx5LCBqdXN0IHRvIGluZGljYXRlIHRo
YXQgaWYgdGhlIHdvcmxkIGdvdCBjbG9iYmVyZWQsIHRoZW4gdGhpcyBvcGVyYXRpb24gd2lsbCBu
b3Qgd29yay4gKi9cCisgICAgbWFjcm8oTWlzY0ZpZWxkcykgXAorICAgIC8qIFVzZSB0aGlzIGZv
ciB3cml0ZXMgb25seSwganVzdCB0byBpbmRpY2F0ZSB0aGF0IGhvaXN0aW5nIHRoZSBub2RlIGlz
IGludmFsaWQuIFRoaXMgd29ya3MgYmVjYXVzZSB3ZSBkb24ndCBob2lzdCBhbnl0aGluZyB0aGF0
IGhhcyBhbnkgc2lkZSBlZmZlY3RzIGF0IGFsbC4gKi9cCisgICAgbWFjcm8oU2lkZVN0YXRlKQor
CitlbnVtIEFic3RyYWN0SGVhcEtpbmQgeworI2RlZmluZSBBQlNUUkFDVF9IRUFQX0RFQ0xBUkFU
SU9OKG5hbWUpIG5hbWUsCisgICAgRk9SX0VBQ0hfQUJTVFJBQ1RfSEVBUF9LSU5EKEFCU1RSQUNU
X0hFQVBfREVDTEFSQVRJT04pCisjdW5kZWYgQUJTVFJBQ1RfSEVBUF9ERUNMQVJBVElPTgorfTsK
KworY2xhc3MgQWJzdHJhY3RIZWFwIHsKK3B1YmxpYzoKKyAgICBjbGFzcyBQYXlsb2FkIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFBheWxvYWQoKQorICAgICAgICAgICAgOiBtX2lzVG9wKGZhbHNl
KQorICAgICAgICAgICAgLCBtX3ZhbHVlKDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgUGF5bG9hZChib29sIGlzVG9wLCBpbnQ2NF90IHZhbHVlKQorICAgICAgICAg
ICAgOiBtX2lzVG9wKGlzVG9wKQorICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlQoIShpc1RvcCAmJiB2YWx1ZSkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBQYXlsb2FkKGludDY0X3QgdmFsdWUpCisgICAgICAgICAgICA6IG1f
aXNUb3AoZmFsc2UpCisgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgUGF5bG9hZChjb25zdCB2b2lkKiBwb2ludGVyKQor
ICAgICAgICAgICAgOiBtX2lzVG9wKGZhbHNlKQorICAgICAgICAgICAgLCBtX3ZhbHVlKGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICAgICAgICAg
IDogbV9pc1RvcChmYWxzZSkKKyAgICAgICAgICAgICwgbV92YWx1ZShzdGF0aWNfY2FzdDxpbnQ+
KG9wZXJhbmQpKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRp
YyBQYXlsb2FkIHRvcCgpIHsgcmV0dXJuIFBheWxvYWQodHJ1ZSwgMCk7IH0KKyAgICAgICAgCisg
ICAgICAgIGJvb2wgaXNUb3AoKSBjb25zdCB7IHJldHVybiBtX2lzVG9wOyB9CisgICAgICAgIGlu
dDY0X3QgdmFsdWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIWlzVG9w
KCkpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlSW1wbCgpOworICAgICAgICB9CisgICAgICAg
IGludDY0X3QgdmFsdWVJbXBsKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBQYXlsb2FkJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1faXNUb3AgPT0gb3RoZXIubV9pc1RvcAorICAgICAgICAgICAgICAgICYmIG1fdmFsdWUgPT0g
b3RoZXIubV92YWx1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFBheWxvYWQmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IFBheWxvYWQmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gIW90aGVyLmlzVG9w
KCk7CisgICAgICAgICAgICBpZiAob3RoZXIuaXNUb3AoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUoKSA8IG90aGVyLnZhbHVlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNEaXNqb2ludChjb25zdCBQYXlsb2Fk
JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlzVG9wKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1fdmFs
dWUgIT0gb3RoZXIubV92YWx1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBv
dmVybGFwcyhjb25zdCBQYXlsb2FkJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuICFpc0Rpc2pvaW50KG90aGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgICAgIAorICAgIHByaXZhdGU6
CisgICAgICAgIGJvb2wgbV9pc1RvcDsKKyAgICAgICAgaW50NjRfdCBtX3ZhbHVlOworICAgIH07
CisgICAgCisgICAgQWJzdHJhY3RIZWFwKCkKKyAgICB7CisgICAgICAgIG1fdmFsdWUgPSBlbmNv
ZGUoSW52YWxpZEFic3RyYWN0SGVhcCwgUGF5bG9hZCgpKTsKKyAgICB9CisgICAgCisgICAgQWJz
dHJhY3RIZWFwKEFic3RyYWN0SGVhcEtpbmQga2luZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kICE9IEludmFsaWRBYnN0cmFjdEhlYXApOworICAgICAgICBtX3ZhbHVlID0gZW5jb2RlKGtp
bmQsIFBheWxvYWQ6OnRvcCgpKTsKKyAgICB9CisgICAgCisgICAgQWJzdHJhY3RIZWFwKEFic3Ry
YWN0SGVhcEtpbmQga2luZCwgUGF5bG9hZCBwYXlsb2FkKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQgIT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBraW5kICE9IFdvcmxkKTsKKyAgICAgICAg
bV92YWx1ZSA9IGVuY29kZShraW5kLCBwYXlsb2FkKTsKKyAgICB9CisgICAgCisgICAgQWJzdHJh
Y3RIZWFwKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICB7CisgICAgICAgIG1f
dmFsdWUgPSBlbmNvZGUoSW52YWxpZEFic3RyYWN0SGVhcCwgUGF5bG9hZDo6dG9wKCkpOworICAg
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBJ
bnZhbGlkQWJzdHJhY3RIZWFwICYmICFwYXlsb2FkSW1wbCgpLmlzVG9wKCk7IH0KKyAgICAKKyAg
ICBBYnN0cmFjdEhlYXBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxBYnN0
cmFjdEhlYXBLaW5kPihtX3ZhbHVlICYgKCgxIDw8IHRvcFNoaWZ0KSAtIDEpKTsgfQorICAgIFBh
eWxvYWQgcGF5bG9hZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpICE9IFdv
cmxkICYmIGtpbmQoKSAhPSBJbnZhbGlkQWJzdHJhY3RIZWFwKTsKKyAgICAgICAgcmV0dXJuIHBh
eWxvYWRJbXBsKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNEaXNqb2ludChjb25zdCBBYnN0
cmFjdEhlYXAmIG90aGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBJbnZhbGlk
QWJzdHJhY3RIZWFwKTsKKyAgICAgICAgQVNTRVJUKG90aGVyLmtpbmQoKSAhPSBJbnZhbGlkQWJz
dHJhY3RIZWFwKTsKKyAgICAgICAgaWYgKGtpbmQoKSA9PSBXb3JsZCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG90aGVyLmtpbmQoKSA9PSBXb3JsZCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGtpbmQoKSAhPSBvdGhlci5raW5kKCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHBheWxvYWQoKS5pc0Rpc2pv
aW50KG90aGVyLnBheWxvYWQoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3ZlcmxhcHMoY29u
c3QgQWJzdHJhY3RIZWFwJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAhaXNEaXNqb2lu
dChvdGhlcik7CisgICAgfQorICAgIAorICAgIEFic3RyYWN0SGVhcCBzdXBlcnR5cGUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBJbnZhbGlkQWJzdHJhY3RIZWFwKTsK
KyAgICAgICAgaWYgKGtpbmQoKSA9PSBXb3JsZCkKKyAgICAgICAgICAgIHJldHVybiBBYnN0cmFj
dEhlYXAoKTsKKyAgICAgICAgaWYgKHBheWxvYWQoKS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0
dXJuIFdvcmxkOworICAgICAgICByZXR1cm4gQWJzdHJhY3RIZWFwKGtpbmQoKSk7CisgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6SW50SGFzaDxpbnQ2NF90Pjo6aGFzaChtX3ZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEFic3RyYWN0SGVhcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgQWJzdHJhY3RIZWFwJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvcjwoY29uc3QgQWJzdHJhY3RIZWFwJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChraW5kKCkgIT0gb3RoZXIua2luZCgpKQorICAgICAgICAgICAgcmV0dXJuIGtpbmQoKSA8
IG90aGVyLmtpbmQoKTsKKyAgICAgICAgcmV0dXJuIHBheWxvYWQoKSA8IG90aGVyLnBheWxvYWQo
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEludmFsaWRBYnN0cmFjdEhlYXAgJiYg
cGF5bG9hZEltcGwoKS5pc1RvcCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCB2YWx1ZVNoaWZ0ID0gMTU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHRvcFNoaWZ0
ID0gMTQ7CisgICAgCisgICAgUGF5bG9hZCBwYXlsb2FkSW1wbCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gUGF5bG9hZCgobV92YWx1ZSA+PiB0b3BTaGlmdCkgJiAxLCBtX3ZhbHVlID4+
IHZhbHVlU2hpZnQpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgaW50NjRfdCBlbmNvZGUoQWJz
dHJhY3RIZWFwS2luZCBraW5kLCBQYXlsb2FkIHBheWxvYWQpCisgICAgeworICAgICAgICBpbnQ2
NF90IGtpbmRBc0ludCA9IHN0YXRpY19jYXN0PGludDY0X3Q+KGtpbmQpOworICAgICAgICBBU1NF
UlQoa2luZEFzSW50IDwgKDEgPDwgdG9wU2hpZnQpKTsKKyAgICAgICAgcmV0dXJuIGtpbmRBc0lu
dCB8IChwYXlsb2FkLmlzVG9wKCkgPDwgdG9wU2hpZnQpIHwgKHBheWxvYWQudmFsdWVJbXBsKCkg
PDwgdmFsdWVTaGlmdCk7CisgICAgfQorICAgIAorICAgIGludDY0X3QgbV92YWx1ZTsKK307CisK
K3N0cnVjdCBBYnN0cmFjdEhlYXBIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBBYnN0cmFjdEhlYXAmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IEFic3RyYWN0SGVhcCYgYSwgY29uc3QgQWJzdHJhY3RIZWFwJiBiKSB7
IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9F
bXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
K25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OkRGRzo6QWJzdHJhY3RIZWFwS2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBE
ZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpBYnN0
cmFjdEhlYXA+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpBYnN0cmFjdEhlYXBIYXNoIEhhc2g7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRl
PD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkFic3RyYWN0SGVhcD4gOiBTaW1wbGVDbGFz
c0hhc2hUcmFpdHM8SlNDOjpERkc6OkFic3RyYWN0SGVhcD4geyB9OworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQWJzdHJh
Y3RIZWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJT
ZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiREZHQ2xvYmJlclNldC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQ2xvYmJlclNldDo6Q2xvYmJlclNldCgpIHsg
fQorQ2xvYmJlclNldDo6fkNsb2JiZXJTZXQoKSB7IH0KKwordm9pZCBDbG9iYmVyU2V0OjphZGQo
QWJzdHJhY3RIZWFwIGhlYXApCit7CisgICAgSGFzaE1hcDxBYnN0cmFjdEhlYXAsIGJvb2w+OjpB
ZGRSZXN1bHQgcmVzdWx0ID0gbV9jbG9iYmVycy5hZGQoaGVhcCwgdHJ1ZSk7CisgICAgaWYgKHJl
c3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIGlmIChyZXN1bHQuaXRlcmF0b3ItPnZhbHVlKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gdHJ1
ZTsKKyAgICB9CisgICAgd2hpbGUgKGhlYXAua2luZCgpICE9IFdvcmxkKSB7CisgICAgICAgIGhl
YXAgPSBoZWFwLnN1cGVydHlwZSgpOworICAgICAgICBpZiAoIW1fY2xvYmJlcnMuYWRkKGhlYXAs
IGZhbHNlKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworYm9v
bCBDbG9iYmVyU2V0Ojpjb250YWlucyhBYnN0cmFjdEhlYXAgaGVhcCkgY29uc3QKK3sKKyAgICBI
YXNoTWFwPEFic3RyYWN0SGVhcCwgYm9vbD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX2Nsb2Ji
ZXJzLmZpbmQoaGVhcCk7CisgICAgaWYgKGl0ZXIgPT0gbV9jbG9iYmVycy5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpdGVyLT52YWx1ZTsKK30KKworYm9vbCBDbG9i
YmVyU2V0OjpvdmVybGFwcyhBYnN0cmFjdEhlYXAgaGVhcCkgY29uc3QKK3sKKyAgICBpZiAobV9j
bG9iYmVycy5maW5kKGhlYXApICE9IG1fY2xvYmJlcnMuZW5kKCkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIHdoaWxlIChoZWFwLmtpbmQoKSAhPSBXb3JsZCkgeworICAgICAgICBoZWFwID0g
aGVhcC5zdXBlcnR5cGUoKTsKKyAgICAgICAgaWYgKGNvbnRhaW5zKGhlYXApKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDbG9i
YmVyU2V0OjpjbGVhcigpCit7CisgICAgbV9jbG9iYmVycy5jbGVhcigpOworfQorCitIYXNoU2V0
PEFic3RyYWN0SGVhcD4gQ2xvYmJlclNldDo6ZGlyZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
c2V0T2YodHJ1ZSk7Cit9CisKK0hhc2hTZXQ8QWJzdHJhY3RIZWFwPiBDbG9iYmVyU2V0OjpzdXBl
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNldE9mKGZhbHNlKTsKK30KKwordm9pZCBDbG9iYmVy
U2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCIoRGly
ZWN0OlsiLCBzb3J0ZWRMaXN0RHVtcChkaXJlY3QoKSksICJdLCBTdXBlcjpbIiwgc29ydGVkTGlz
dER1bXAoc3VwZXIoKSksICJdKSIpOworfQorCitIYXNoU2V0PEFic3RyYWN0SGVhcD4gQ2xvYmJl
clNldDo6c2V0T2YoYm9vbCBkaXJlY3QpIGNvbnN0Cit7CisgICAgSGFzaFNldDxBYnN0cmFjdEhl
YXA+IHJlc3VsdDsKKyAgICBmb3IgKEhhc2hNYXA8QWJzdHJhY3RIZWFwLCBib29sPjo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IG1fY2xvYmJlcnMuYmVnaW4oKTsgaXRlciAhPSBtX2Nsb2JiZXJzLmVu
ZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXItPnZhbHVlID09IGRpcmVjdCkKKyAgICAg
ICAgICAgIHJlc3VsdC5hZGQoaXRlci0+a2V5KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCBhZGRSZWFkcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJTZXQm
IHJlYWRTZXQpCit7CisgICAgQ2xvYmJlclNldEFkZCBhZGRSZWFkKHJlYWRTZXQpOworICAgIE5v
T3BDbG9iYmVyaXplIGFkZFdyaXRlOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJl
YWQsIGFkZFdyaXRlKTsKK30KKwordm9pZCBhZGRXcml0ZXMoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlLCBDbG9iYmVyU2V0JiB3cml0ZVNldCkKK3sKKyAgICBOb09wQ2xvYmJlcml6ZSBhZGRSZWFk
OworICAgIENsb2JiZXJTZXRBZGQgYWRkV3JpdGUod3JpdGVTZXQpOworICAgIGNsb2JiZXJpemUo
Z3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKK30KKwordm9pZCBhZGRSZWFkc0FuZFdy
aXRlcyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJTZXQmIHJlYWRTZXQsIENsb2Ji
ZXJTZXQmIHdyaXRlU2V0KQoreworICAgIENsb2JiZXJTZXRBZGQgYWRkUmVhZChyZWFkU2V0KTsK
KyAgICBDbG9iYmVyU2V0QWRkIGFkZFdyaXRlKHdyaXRlU2V0KTsKKyAgICBjbG9iYmVyaXplKGdy
YXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7Cit9CisKK2Jvb2wgb3ZlcmxhcHNSZWFkcyhH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIENsb2JiZXJTZXQmIHJlYWRTZXQpCit7CisgICAgQ2xv
YmJlclNldE92ZXJsYXBzIGFkZFJlYWQocmVhZFNldCk7CisgICAgTm9PcENsb2JiZXJpemUgYWRk
V3JpdGU7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRkUmVhZCwgYWRkV3JpdGUpOwor
ICAgIHJldHVybiBhZGRSZWFkLnJlc3VsdCgpOworfQorCitib29sIG92ZXJsYXBzV3JpdGVzKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgd3JpdGVTZXQpCit7CisgICAgTm9P
cENsb2JiZXJpemUgYWRkUmVhZDsKKyAgICBDbG9iYmVyU2V0T3ZlcmxhcHMgYWRkV3JpdGUod3Jp
dGVTZXQpOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsK
KyAgICByZXR1cm4gYWRkV3JpdGUucmVzdWx0KCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgREZHQ2xvYmJlclNldF9oCisjZGVmaW5lIERGR0Nsb2JiZXJTZXRfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Fic3RyYWN0SGVhcC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKK3N0cnVjdCBOb2RlOworCisvLyBG
SVhNRTogSWYgd2UgZXZlciB3YW50IHRvIGNvbXBhcmUgaWYgdHdvIG5vZGVzIGNsb2JiZXIgZWFj
aCBvdGhlciwgd2Ugc2hvdWxkCisvLyBoYXZlIGEgU21hbGxDbG9iYmVyU2V0LCB3aGljaCBqdXN0
IGtlZXBzIGFuIGFycmF5IG9mIHRoZSBBYnN0cmFjdEhlYXBzIGFuZAorLy8gc2F0aXNmaWVzIG92
ZXJsYXBzKCkgcmVxdWVzdHMgYnkgbG9vcGluZyBvdmVyIGFsbCBvZiB0aGVtLiBUaGlzIHdpbGwg
cHJvYmFibHkKKy8vIGJlIGZhc3RlciB0aGFuIGEgZnVsbCBIYXNoTWFwIGluIGEgbG90IG9mIGNh
c2VzLiBPciwgbWF5YmUsIHdlIGNvdWxkIGhhdmUKKy8vIENsb2JiZXJTZXQgYmUgc21hcnQgYW5k
IHVzZSBhIHZlY3RvciBzbyBsb25nIGFzIGl0IHdhcyBzbWFsbC4KKworY2xhc3MgQ2xvYmJlclNl
dCB7CitwdWJsaWM6CisgICAgQ2xvYmJlclNldCgpOworICAgIH5DbG9iYmVyU2V0KCk7CisgICAg
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9jbG9iYmVycy5pc0VtcHR5KCk7
IH0KKyAgICAKKyAgICB2b2lkIGFkZChBYnN0cmFjdEhlYXApOworICAgIGJvb2wgY29udGFpbnMo
QWJzdHJhY3RIZWFwKSBjb25zdDsKKyAgICBib29sIG92ZXJsYXBzKEFic3RyYWN0SGVhcCkgY29u
c3Q7CisgICAgdm9pZCBjbGVhcigpOworICAgIAorICAgIC8vIENhbGxzIHVzZWZ1bCBmb3IgZGVi
dWdnaW5nIHRoZSBDbG9iYmVyU2V0LgorICAgIAorICAgIEhhc2hTZXQ8QWJzdHJhY3RIZWFwPiBk
aXJlY3QoKSBjb25zdDsKKyAgICBIYXNoU2V0PEFic3RyYWN0SGVhcD4gc3VwZXIoKSBjb25zdDsK
KyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6
CisgICAgSGFzaFNldDxBYnN0cmFjdEhlYXA+IHNldE9mKGJvb2wgZGlyZWN0KSBjb25zdDsKKyAg
ICAKKyAgICAvLyBNYXBzIGhlYXAgdG86CisgICAgLy8gdHJ1ZSAtLT4gaXQncyBhIGRpcmVjdCBj
bG9iYmVyCisgICAgLy8gZmFsc2UgLS0+IGl0J3MganVzdCBhIHN1cGVydHlwZSBvZiBhIGRpcmVj
dCBjbG9iYmVyCisgICAgSGFzaE1hcDxBYnN0cmFjdEhlYXAsIGJvb2w+IG1fY2xvYmJlcnM7Cit9
OworCitjbGFzcyBDbG9iYmVyU2V0QWRkIHsKK3B1YmxpYzoKKyAgICBDbG9iYmVyU2V0QWRkKENs
b2JiZXJTZXQmIHNldCkKKyAgICAgICAgOiBtX3NldChzZXQpCisgICAgeworICAgIH0KKyAgICAK
KyAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgeworICAgICAgICBt
X3NldC5hZGQoaGVhcCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBDbG9iYmVyU2V0JiBtX3NldDsK
K307CisKK2NsYXNzIENsb2JiZXJTZXRPdmVybGFwcyB7CitwdWJsaWM6CisgICAgQ2xvYmJlclNl
dE92ZXJsYXBzKGNvbnN0IENsb2JiZXJTZXQmIHNldCkKKyAgICAgICAgOiBtX3NldChzZXQpCisg
ICAgICAgICwgbV9yZXN1bHQoZmFsc2UpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIG9w
ZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgeworICAgICAgICBtX3Jlc3VsdCB8PSBt
X3NldC5vdmVybGFwcyhoZWFwKTsKKyAgICB9CisgICAgCisgICAgYm9vbCByZXN1bHQoKSBjb25z
dCB7IHJldHVybiBtX3Jlc3VsdDsgfQorICAgIAorcHJpdmF0ZToKKyAgICBjb25zdCBDbG9iYmVy
U2V0JiBtX3NldDsKKyAgICBib29sIG1fcmVzdWx0OworfTsKKwordm9pZCBhZGRSZWFkcyhHcmFw
aCYsIE5vZGUqLCBDbG9iYmVyU2V0Jik7Cit2b2lkIGFkZFdyaXRlcyhHcmFwaCYsIE5vZGUqLCBD
bG9iYmVyU2V0Jik7Cit2b2lkIGFkZFJlYWRzQW5kV3JpdGVzKEdyYXBoJiwgTm9kZSosIENsb2Ji
ZXJTZXQmIHJlYWRzLCBDbG9iYmVyU2V0JiB3cml0ZXMpOworCitib29sIG92ZXJsYXBzUmVhZHMo
R3JhcGgmLCBOb2RlKiwgQ2xvYmJlclNldCYpOworYm9vbCBvdmVybGFwc1dyaXRlcyhHcmFwaCYs
IE5vZGUqLCBDbG9iYmVyU2V0Jik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ2xvYmJlclNldF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDbG9iYmVyaXplX2gKKyNkZWZpbmUgREZHQ2xvYmJl
cml6ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisjaW5jbHVkZSAiREZHRWRnZVVzZXNT
dHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFtZSBX
cml0ZUZ1bmN0b3I+Cit2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBS
ZWFkRnVuY3RvciYgcmVhZCwgV3JpdGVGdW5jdG9yJiB3cml0ZSkKK3sKKyAgICAvLyBTb21lIG5v
dGVzOgorICAgIC8vCisgICAgLy8gLSBXZSBjYW5ub3QgaG9pc3QsIG9yIHNpbmssIGFueXRoaW5n
IHRoYXQgaGFzIGVmZmVjdHMuIFRoaXMgbWVhbnMgdGhhdCB0aGUKKyAgICAvLyAgIGVhc2llc3Qg
d2F5IG9mIGluZGljYXRpbmcgdGhhdCBzb21ldGhpbmcgY2Fubm90IGJlIGhvaXN0ZWQgaXMgdG8g
Y2xhaW0KKyAgICAvLyAgIHRoYXQgaXQgc2lkZS1lZmZlY3RzIHNvbWUgbWlzY2VsbGFuZW91cyB0
aGluZy4KKyAgICAvLworICAgIC8vIC0gV2UgY2Fubm90IGhvaXN0IGZvcndhcmQtZXhpdGluZyBu
b2RlcyB3aXRob3V0IHNvbWUgYWRkaXRpb25hbCBlZmZvcnQuIEkKKyAgICAvLyAgIGJlbGlldmUg
dGhhdCB3aGF0IGl0IGNvbWVzIGRvd24gdG8gaXMgdGhhdCBmb3J3YXJkLWV4aXRpbmcgZ2VuZXJh
bGx5IGhhdmUKKyAgICAvLyAgIHRoZWlyIE5vZGVFeGl0c0ZvcndhcmQgY2xlYXJlZCB1cG9uIGhv
aXN0LCBleGNlcHQgZm9yIGZvcndhcmQtZXhpdGluZworICAgIC8vICAgbm9kZXMgdGhhdCB0YWtl
IGJvZ3VzIHN0YXRlIGFzIHRoZWlyIGlucHV0LiBUaG9zZSBhcmUgc3Vic3RhbnRpYWxseQorICAg
IC8vICAgaGFyZGVyLiBXZSBkaXNhYmxlIGl0IGZvciBub3cuIEluIHRoZSBmdXR1cmUgd2UgY291
bGQgZW5hYmxlIGl0IGJ5IGhhdmluZworICAgIC8vICAgdmVyc2lvbnMgb2YgdGhvc2Ugbm9kZXMg
dGhhdCBiYWNrd2FyZC1leGl0IGluc3RlYWQsIGJ1dCBJJ20gbm90IGNvbnZpbmNlZAorICAgIC8v
ICAgb2YgdGhlIHNvdW5kbmVzcy4KKyAgICAvLworICAgIC8vIC0gU29tZSBub2RlcyBsaWUsIGFu
ZCBjbGFpbSB0aGF0IHRoZXkgZG8gbm90IHJlYWQgdGhlIEpTQ2VsbF9zdHJ1Y3R1cmUuCisgICAg
Ly8gICBUaGVzZSBhcmUgbm9kZXMgdGhhdCB1c2UgdGhlIHN0cnVjdHVyZSBpbiBhIHdheSB0aGF0
IGRvZXMgbm90IGRlcGVuZCBvbgorICAgIC8vICAgdGhpbmdzIHRoYXQgY2hhbmdlIHVuZGVyIHN0
cnVjdHVyZSB0cmFuc2l0aW9ucy4KKyAgICAvLworICAgIC8vIC0gSXQncyBpbXBsaWNpdGx5IHVu
ZGVyc3Rvb2QgdGhhdCBPU1IgZXhpdHMgcmVhZCB0aGUgd29ybGQuIFRoaXMgaXMgd2h5IHdlCisg
ICAgLy8gICBnZW5lcmFsbHkgZG9uJ3QgbW92ZSBvciBlbGltaW5hdGUgc3RvcmVzLiBFdmVyeSBu
b2RlIGNhbiBleGl0LCBzbyB0aGUKKyAgICAvLyAgIHJlYWQgc2V0IGRvZXMgbm90IHJlZmxlY3Qg
dGhpbmdzIHRoYXQgd291bGQgYmUgcmVhZCBpZiB3ZSBleGl0ZWQuCisgICAgLy8gICBJbnN0ZWFk
LCB0aGUgcmVhZCBzZXQgcmVmbGVjdHMgd2hhdCB0aGUgbm9kZSB3aWxsIGhhdmUgdG8gcmVhZCBp
ZiBpdAorICAgIC8vICAgKmRvZXNuJ3QqIGV4aXQuCisgICAgLy8KKyAgICAvLyAtIEJyb2FkbHks
IHdlIGRvbid0IHNheSB0aGF0IHdlJ3JlIHJlYWRpbmcgc29tZXRoaW5nIGlmIHRoYXQgc29tZXRo
aW5nIGlzCisgICAgLy8gICBpbW11dGFibGUuCisgICAgLy8KKyAgICAvLyAtIFdlIHRyeSB0byBt
YWtlIHRoaXMgd29yayBldmVuIHByaW9yIHRvIHR5cGUgaW5mZXJlbmNlLCBqdXN0IHNvIHRoYXQg
d2UKKyAgICAvLyAgIGNhbiB1c2UgaXQgZm9yIElSIGR1bXBzLiBObyBwcm9taXNlcyBvbiB3aGV0
aGVyIHRoZSBhbnN3ZXJzIGFyZSBzb3VuZAorICAgIC8vICAgcHJpb3IgdG8gdHlwZSBpbmZlcmVu
Y2UgLSB0aG91Z2ggdGhleSBwcm9iYWJseSBjb3VsZCBiZSBpZiB3ZSBkaWQgc29tZQorICAgIC8v
ICAgc21hbGwgaGFja2luZy4KKyAgICAKKyAgICBpZiAoZWRnZXNVc2VTdHJ1Y3R1cmUoZ3JhcGgs
IG5vZGUpKQorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmUpOworICAgIAorICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICBjYXNlIFdlYWtKU0Nv
bnN0YW50OgorICAgIGNhc2UgSWRlbnRpdHk6CisgICAgY2FzZSBQaGFudG9tOgorICAgIGNhc2Ug
Qml0QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBCaXRM
U2hpZnQ6CisgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgY2FzZSBCaXRVUlNoaWZ0OgorICAgIGNh
c2UgVmFsdWVUb0ludDMyOgorICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgY2FzZSBBcml0aFN1YjoK
KyAgICBjYXNlIEFyaXRoTmVnYXRlOgorICAgIGNhc2UgQXJpdGhNdWw6CisgICAgY2FzZSBBcml0
aERpdjoKKyAgICBjYXNlIEFyaXRoTW9kOgorICAgIGNhc2UgQXJpdGhBYnM6CisgICAgY2FzZSBB
cml0aE1pbjoKKyAgICBjYXNlIEFyaXRoTWF4OgorICAgIGNhc2UgQXJpdGhTcXJ0OgorICAgIGNh
c2UgR2V0U2NvcGU6CisgICAgY2FzZSBTa2lwU2NvcGU6CisgICAgY2FzZSBDaGVja0Z1bmN0aW9u
OgorICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKKyAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50
OgorICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQ6CisgICAgY2FzZSBDb21wYXJlU3Ry
aWN0RXE6CisgICAgY2FzZSBJc1VuZGVmaW5lZDoKKyAgICBjYXNlIElzQm9vbGVhbjoKKyAgICBj
YXNlIElzTnVtYmVyOgorICAgIGNhc2UgSXNTdHJpbmc6CisgICAgY2FzZSBMb2dpY2FsTm90Ogor
ICAgIGNhc2UgSW50MzJUb0RvdWJsZToKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBj
YXNlIE1vdkhpbnRBbmRDaGVjazoKKyAgICBjYXNlIE1vdkhpbnQ6CisgICAgY2FzZSBab21iaWVI
aW50OgorICAgIGNhc2UgVXBzaWxvbjoKKyAgICBjYXNlIFBoaToKKyAgICBjYXNlIEZsdXNoOgor
ICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgY2FzZSBJ
bmxpbmVTdGFydDoKKyAgICBjYXNlIEJyZWFrcG9pbnQ6CisgICAgY2FzZSBDcmVhdGVBY3RpdmF0
aW9uOgorICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgorICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50
czoKKyAgICBjYXNlIEp1bXA6CisgICAgY2FzZSBCcmFuY2g6CisgICAgY2FzZSBTd2l0Y2g6Cisg
ICAgY2FzZSBUaHJvdzoKKyAgICBjYXNlIEZvcmNlT1NSRXhpdDoKKyAgICBjYXNlIEZvcndhcmRG
b3JjZU9TUkV4aXQ6CisgICAgY2FzZSBSZXR1cm46CisgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZXNlIGFyZSBmb3J3YXJkLWV4aXRpbmcgbm9k
ZXMgdGhhdCBhc3N1bWUgdGhhdCB0aGUgc3Vic2VxdWVudCBpbnN0cnVjdGlvbgorICAgIC8vIGlz
IGEgTW92SGludCwgYW5kIHRoZXkgdHJ5IHRvIHJvbGwgZm9yd2FyZCBvdmVyIHRoaXMgTW92SGlu
dCBpbiB0aGVpcgorICAgIC8vIGV4ZWN1dGlvbi4gVGhpcyBtYWtlcyBob2lzdGluZyB0aGVtIGlt
cG9zc2libGUgd2l0aG91dCBhZGRpdGlvbmFsIG1hZ2ljLiBXZQorICAgIC8vIG1heSBhZGQgc3Vj
aCBtYWdpYyBldmVudHVhbGx5LCBidXQganVzdCBub3QgeWV0LgorICAgIGNhc2UgVUludDMyVG9O
dW1iZXI6CisgICAgY2FzZSBGb3J3YXJkSW50MzJUb0RvdWJsZToKKyAgICBjYXNlIERvdWJsZUFz
SW50MzI6CisgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBDcmVhdGVUaGlzOgorICAgIGNhc2UgVG9UaGlzOgorICAgIGNhc2UgVmFy
SW5qZWN0aW9uV2F0Y2hwb2ludDoKKyAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2lu
dDoKKyAgICBjYXNlIElzT2JqZWN0OgorICAgIGNhc2UgSXNGdW5jdGlvbjoKKyAgICBjYXNlIFR5
cGVPZjoKKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBjYXNlIEdldEJ5SWQ6CisgICAgY2FzZSBHZXRCeUlkRmx1c2g6CisgICAgY2FzZSBQ
dXRCeUlkOgorICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICBjYXNlIEFycmF5UHVzaDoKKyAg
ICBjYXNlIEFycmF5UG9wOgorICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIENvbnN0cnVjdDoKKyAg
ICBjYXNlIFRvUHJpbWl0aXZlOgorICAgIGNhc2UgSW46CisgICAgY2FzZSBHZXRNeUFyZ3VtZW50
c0xlbmd0aFNhZmU6CisgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgorICAgICAgICBy
ZWFkKFdvcmxkKTsKKyAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNl
S2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgIGNhc2UgTnVtYmVyVXNl
OgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAg
ICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgY2FzZSBHZXRDYWxsZWU6CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywg
SlNTdGFjazo6Q2FsbGVlKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBT
ZXRDYWxsZWU6CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6
OkNhbGxlZSkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgR2V0TG9jYWw6
CisgICAgY2FzZSBHZXRBcmd1bWVudDoKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFi
bGVzLCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2Fz
ZSBTZXRMb2NhbDoKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+
bG9jYWwoKSkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgR2V0TG9jYWxV
bmxpbmtlZDoKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxp
bmtlZExvY2FsKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEdldEJ5
VmFsOiB7CisgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAg
ICAgIHN3aXRjaCAobW9kZS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNp
bmdQcmVkaWN0aW9uczoKKyAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAg
Y2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICAgICAgLy8gQXNzdW1lIHRoZSB3b3JzdCBz
aW5jZSB3ZSBkb24ndCBoYXZlIHByb2ZpbGluZyB5ZXQuCisgICAgICAgICAgICByZWFkKFdvcmxk
KTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgICAgICB3cml0
ZShTaWRlU3RhdGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAg
ICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICBpZiAobW9kZS5pc091dE9mQm91
bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgICAgICB3
cml0ZShXb3JsZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgbm90aGluZyBiZWNhdXNlIGl0J3Mgb25s
eSByZWFkaW5nIGltbXV0YWJsZSBkYXRhLgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgICAgIHJlYWQoQXJn
dW1lbnRzX3JlZ2lzdGVycyk7CisgICAgICAgICAgICByZWFkKFZhcmlhYmxlcyk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Cisg
ICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFk
KEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5
X3ZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkSW50MzJQcm9wZXJ0
aWVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAg
ICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRl
cmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rv
ckxlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkRG91YmxlUHJvcGVydGllcyk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVh
ZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAg
ICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVy
Zmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9y
TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGll
cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAg
ICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgLy8gR2l2
ZSB1cCBvbiBsaWZlIGZvciBub3cuCisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAg
ICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJy
YXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQ4QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAg
ICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDMy
QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgY2FzZSBB
cnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICAgICAgcmVhZChUeXBlZEFycmF5UHJvcGVydGll
cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBQdXRCeVZhbDoKKyAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgQXJyYXlN
b2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dpdGNoIChtb2RlLm1vZGVG
b3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0
aW9uczoKKyAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgY2FzZSBBcnJh
eTo6VW5kZWNpZGVkOgorICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICAv
LyBBc3N1bWUgdGhlIHdvcnN0IHNpbmNlIHdlIGRvbid0IGhhdmUgcHJvZmlsaW5nIHlldC4KKyAg
ICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhp
dDoKKyAgICAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgIHJl
YWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAg
ICAgIHJlYWQoQXJndW1lbnRzX3JlZ2lzdGVycyk7CisgICAgICAgICAgICByZWFkKEFyZ3VtZW50
c19udW1Bcmd1bWVudHMpOworICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfc2xvd0FyZ3VtZW50
cyk7CisgICAgICAgICAgICB3cml0ZShWYXJpYWJsZXMpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJl
YWQoV29ybGQpOworICAgICAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJs
aWNMZW5ndGgpOworICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAg
ICAgICAgICAgIHJlYWQoSW5kZXhlZEludDMyUHJvcGVydGllcyk7CisgICAgICAgICAgICB3cml0
ZShJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICBpZiAobm9kZS0+
YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChXb3Js
ZCk7CisgICAgICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0
aCk7CisgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAgICAg
ICAgcmVhZChJbmRleGVkRG91YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICB3cml0ZShJbmRl
eGVkRG91YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKFdvcmxk
KTsKKyAgICAgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3Ro
KTsKKyAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAgICAgICAg
ICByZWFkKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICB3cml0ZShJ
bmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBB
cnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIC8vIEdpdmUgdXAgb24gbGlm
ZSBmb3Igbm93LgorICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShX
b3JsZCk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBBcnJheTo6SW50OEFy
cmF5OgorICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMkFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAgICBj
YXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDE2
QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgICAgICBjYXNlIEFy
cmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAg
ICAgICAgICAgIHdyaXRlKFR5cGVkQXJyYXlQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlOgor
ICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgorICAgIGNhc2UgU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQ6CisgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQ6CisgICAgY2FzZSBDaGVja0FycmF5OgorICAgIGNhc2UgRm9yd2FyZENoZWNrQXJyYXk6
CisgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgorICAgIGNhc2UgSW5zdGFuY2VPZjoKKyAgICAg
ICAgcmVhZChKU0NlbGxfc3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICBjYXNlIENoZWNrRXhlY3V0YWJsZToKKyAgICAgICAgcmVhZChKU0Z1bmN0aW9uX2V4ZWN1dGFi
bGUpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgUHV0U3RydWN0dXJlOgor
ICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKKyAgICAgICAgd3JpdGUoSlNDZWxsX3N0cnVj
dHVyZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBBbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZToKKyAgICAgICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Cisg
ICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgd3JpdGUoSlNPYmplY3Rf
YnV0dGVyZmx5KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEdldEJ1dHRl
cmZseToKKyAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlpZnk6CisgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0
dXJlOgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmUpOworICAgICAgICByZWFkKEpTT2Jq
ZWN0X2J1dHRlcmZseSk7CisgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1cmUpOworICAgICAg
ICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6U3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZWFkKFR5cGVkQXJyYXlTdG9yYWdlUG9pbnRlcik7CisgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgcmVhZChBYnN0cmFjdEhl
YXAoTmFtZWRQcm9wZXJ0aWVzLCBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3Jh
Z2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlcikpOworICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAgIHdyaXRlKEFic3RyYWN0
SGVhcChOYW1lZFByb3BlcnRpZXMsIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgY2FzZSBHZXRBcnJheUxlbmd0aDogeworICAgICAgICBBcnJheU1v
ZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOworICAgICAgICBzd2l0Y2ggKG1vZGUudHlwZSgp
KSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToK
KyAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50
czoKKyAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX292ZXJyaWRlTGVuZ3RoKTsKKyAgICAgICAg
ICAgIHJlYWQoQXJndW1lbnRzX251bUFyZ3VtZW50cyk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJlYWQoVHlwZWRBcnJh
eUxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgICAg
IAorICAgIGNhc2UgR2V0TXlTY29wZToKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFi
bGVzLCBKU1N0YWNrOjpTY29wZUNoYWluKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBTZXRNeVNjb3BlOgorICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoVmFyaWFibGVz
LCBKU1N0YWNrOjpTY29wZUNoYWluKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBTa2lwVG9wU2NvcGU6CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywg
Z3JhcGgubV9jb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgY2FzZSBHZXRDbG9zdXJlUmVnaXN0ZXJzOgorICAgICAgICByZWFk
KEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBjYXNlIEdldENsb3N1cmVWYXI6CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlh
Ymxlcywgbm9kZS0+dmFyTnVtYmVyKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICBjYXNlIFB1dENsb3N1cmVWYXI6CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIG5vZGUtPnZhck51bWJlcigpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBHZXRHbG9iYWxWYXI6CisgICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OgorICAgICAg
ICByZWFkKEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKTsK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFB1dEdsb2JhbFZhcjoKKyAgICAg
ICAgd3JpdGUoQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkp
OworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIE5ld09iamVjdDoKKyAgICBjYXNlIE5ld0Fy
cmF5OgorICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKKyAgICBjYXNlIE5ld0FycmF5QnVmZmVy
OgorICAgIGNhc2UgTmV3UmVnZXhwOgorICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgorICAgIGNh
c2UgTWFrZVJvcGU6CisgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6CisgICAgY2FzZSBOZXdG
dW5jdGlvbjoKKyAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKKyAgICAgICAgcmVhZChH
Q1N0YXRlKTsKKyAgICAgICAgd3JpdGUoR0NTdGF0ZSk7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBSZWdFeHBFeGVjOgorICAgIGNhc2UgUmVnRXhwVGVzdDoKKyAgICAgICAg
cmVhZChSZWdFeHBTdGF0ZSk7CisgICAgICAgIHdyaXRlKFJlZ0V4cFN0YXRlKTsKKyAgICAgICAg
cmV0dXJuOworCisgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAg
ICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICBjYXNl
IENvbXBhcmVMZXNzRXE6CisgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICBjYXNlIENvbXBh
cmVHcmVhdGVyRXE6CisgICAgICAgIGlmIChncmFwaC5pc1ByZWRpY3RlZE51bWVyaWNhbChub2Rl
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgIHdy
aXRlKFdvcmxkKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENvbXBhcmVF
cToKKyAgICAgICAgaWYgKGdyYXBoLmlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpCisgICAgICAg
ICAgICB8fCBub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nVXNlKQorICAgICAgICAgICAgfHwg
bm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN0cmluZ0lkZW50VXNlKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIGlmICgobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9i
amVjdFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhlclVzZSkK
KyAgICAgICAgICAgICYmIChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlIHx8
IG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0
ZShXb3JsZCk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUb1N0cmluZzoK
KyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBTdHJpbmdPYmplY3RVc2U6CisgICAgICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDZWxsVXNl
OgorICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAg
ICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgY2FzZSBUZWFyT2Zm
QWN0aXZhdGlvbjoKKyAgICAgICAgd3JpdGUoSlNWYXJpYWJsZU9iamVjdF9yZWdpc3RlcnMpOwor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czoKKyAg
ICAgICAgd3JpdGUoQXJndW1lbnRzX3JlZ2lzdGVycyk7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoKKyAgICAgICAgcmVhZChBYnN0cmFj
dEhlYXAoVmFyaWFibGVzLCBncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3Jp
Z2luKSkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbDoKKyAgICAgICAgcmVhZChWYXJpYWJsZXMpOworICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOgorICAgICAgICBy
ZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIGdyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5v
ZGUtPmNvZGVPcmlnaW4pKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgVGhyb3dSZWZl
cmVuY2VFcnJvcjoKKyAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKKyAgICAgICAgcmVhZChHQ1N0
YXRlKTsKKyAgICAgICAgd3JpdGUoR0NTdGF0ZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKKyAgICBjYXNlIENoZWNrV2F0Y2hkb2dUaW1lcjoK
KyAgICAgICAgcmVhZChJbnRlcm5hbFN0YXRlKTsKKyAgICAgICAgd3JpdGUoSW50ZXJuYWxTdGF0
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBMYXN0Tm9kZVR5cGU6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworY2xhc3Mg
Tm9PcENsb2JiZXJpemUgeworcHVibGljOgorICAgIE5vT3BDbG9iYmVyaXplKCkgeyB9CisgICAg
dm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCkgeyB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Ns
b2JiZXJpemVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gMTUyOTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCisjaW5jbHVkZSAiREZHQ2xv
YmJlclNldC5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIKICNpbmNs
dWRlICJGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpA
QCAtMjU4LDYgKzI1OSwxMyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNv
bnN0CiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPmNhc2VzW2ldLnZhbHVlLCAi
OiIsICpkYXRhLT5jYXNlc1tpXS50YXJnZXQpOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJk
ZWZhdWx0OiIsICpkYXRhLT5mYWxsVGhyb3VnaCk7CiAgICAgfQorICAgIENsb2JiZXJTZXQgcmVh
ZHM7CisgICAgQ2xvYmJlclNldCB3cml0ZXM7CisgICAgYWRkUmVhZHNBbmRXcml0ZXMoKnRoaXMs
IG5vZGUsIHJlYWRzLCB3cml0ZXMpOworICAgIGlmICghcmVhZHMuaXNFbXB0eSgpKQorICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJSOiIsIHNvcnRlZExpc3REdW1wKHJlYWRzLmRpcmVjdCgpLCAi
LCIpKTsKKyAgICBpZiAoIXdyaXRlcy5pc0VtcHR5KCkpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgIlc6Iiwgc29ydGVkTGlzdER1bXAod3JpdGVzLmRpcmVjdCgpLCAiLCIpKTsKICAgICBvdXQu
cHJpbnQoY29tbWEsICJiYyMiLCBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAg
IAogICAgIG91dC5wcmludCgiKSIpOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Mjk0NSkKKysrIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDct
MjAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBmb3VydGhUaWVy
OiBERkcgTm9kZXMgc2hvdWxkIGJlIGFibGUgdG8gYWJzdHJhY3RseSB0ZWxsIHlvdSB3aGF0IHRo
ZXkgcmVhZCBhbmQgd2hhdCB0aGV5IHdyaXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg5MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEZpeCBjb21waWxlIGdvb2YgaW4gc29ydGVkTGlz
dER1bXAoKS4KKworICAgICAgICAqIHd0Zi9MaXN0RHVtcC5oOgorICAgICAgICAoV1RGOjpzb3J0
ZWRMaXN0RHVtcCk6CisKIDIwMTMtMDctMTYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KIAogICAgICAgICBmb3VydGhUaWVyOiBOYXR1cmFsTG9vcHMgc2hvdWxkIGJlIGFibGUgdG8g
cXVpY2tseSBhbnN3ZXIgcXVlc3Rpb25zIGxpa2UgIndoYXQgbG9vcHMgb3duIHRoaXMgYmFzaWMg
YmxvY2siCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0xpc3REdW1wLmgJKHJldmlzaW9uIDE1Mjk0NSkKKysrIFNvdXJjZS9XVEYv
d3RmL0xpc3REdW1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBpbmxpbmUg
Ym9vbCBsZXNzVGhhbihjb25zdCBUJiBhLCBjb25zdCBUCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
Q1N0cmluZyBzb3J0ZWRMaXN0RHVtcChjb25zdCBUJiBsaXN0LCBjb25zdCBjaGFyKiBjb21tYSA9
ICIsICIpCiB7Ci0gICAgcmV0dXJuIHNvcnRlZExpc3REdW1wKGxpc3QsIGxlc3NUaGFuPFQ6OlZh
bHVlVHlwZT4sIGNvbW1hKTsKKyAgICByZXR1cm4gc29ydGVkTGlzdER1bXAobGlzdCwgbGVzc1Ro
YW48dHlwZW5hbWUgVDo6VmFsdWVUeXBlPiwgY29tbWEpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207213</attachid>
            <date>2013-07-21 15:01:53 -0700</date>
            <delta_ts>2013-07-21 15:19:00 -0700</delta_ts>
            <desc>cleanups</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59479</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyOTUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OSBA
QAorMjAxMy0wNy0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBOb2RlcyBzaG91bGQgYmUgYWJsZSB0byBhYnN0cmFjdGx5IHRlbGwg
eW91IHdoYXQgdGhleSByZWFkIGFuZCB3aGF0IHRoZXkgd3JpdGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODkxMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRkIHRoZSBub3Rpb24gb2Yg
QWJzdHJhY3RIZWFwIHRvIHRoZSBERkcuIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHRoZSBBYnN0cmFj
dEhlYXAgaW4KKyAgICAgICAgdGhlIEZUTCwgZXhjZXB0IHRoYXQgdGhlIEZUTCdzIEFic3RyYWN0
SGVhcHMgYXJlIHVzZWQgZHVyaW5nIExMVk0gbG93ZXJpbmcgYW5kIGFyZQorICAgICAgICBlbmdp
bmVlcmVkIHRvIG9iZXkgTExWTSBUQkFBIGxvZ2ljLiBUaGUgRlRMJ3MgQWJzdHJhY3RIZWFwcyBh
cmUgYWxzbyBlbmdpbmVlcmVkIHRvCisgICAgICAgIGJlIGluZXhwZW5zaXZlIHRvIHVzZSAodGhl
eSBqdXN0IGdpdmUgeW91IGEgVEJBQSBub2RlKSBidXQgZXhwZW5zaXZlIHRvIGNyZWF0ZSAoeW91
CisgICAgICAgIGNyZWF0ZSB0aGVtIGFsbCB1cCBmcm9udCkuIEZUTCBBYnN0cmFjdEhlYXBzIGFs
c28gZG9uJ3QgYWN0dWFsbHkgZ2l2ZSB5b3UgdGhlCisgICAgICAgIGFiaWxpdHkgdG8gcmVhc29u
IGFib3V0IGFsaWFzaW5nOyB0aGV5IGFyZSAqanVzdCogYSBtZWNoYW5pc20gZm9yIGxvd2VyaW5n
IHRvIFRCQUEuCisgICAgICAgIFRoZSBERkcncyBBYnN0cmFjdEhlYXBzIGFyZSBlbmdpbmVlcmVk
IHRvIGJlIGJvdGggY2hlYXAgdG8gY3JlYXRlIGFuZCBjaGVhcCB0byB1c2UuCisgICAgICAgIFRo
ZXkgYWxzbyBnaXZlIHlvdSBhbGlhc2luZyBtYWNoaW5lcnkuIFRoZSBERkcgQWJzdHJhY3RIZWFw
cyBhcmUgcmVwcmVzZW50ZWQKKyAgICAgICAgaW50ZXJuYWxseSBieSBhIGludDY0X3QuIE1hbnkg
Y29tcGFyaXNvbnMgYmV0d2VlbiB0aGVtIGFyZSBqdXN0IGludGVnZXIgY29tYXByaXNvbnMuCisg
ICAgICAgIEFic3RyYWN0SGVhcHMgZm9ybSBhIHRocmVlLWxldmVsIGhpZXJhcmNoeSAoV29ybGQg
aXMgdGhlIHN1cGVydHlwZSBvZiBldmVyeXRoaW5nLAorICAgICAgICBLaW5kIHdpdGggYSBUT1Ag
cGF5bG9hZCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLCBhbmQgS2luZCB3aXRoIGEgbm9u
LVRPUAorICAgICAgICBwYXlsb2FkIGlzIHRoZSBkaXJlY3Qgc3VidHlwZSBvZiBpdHMgY29ycmVz
cG9uZGluZyBUT1AgS2luZCkuCisgICAgICAgIAorICAgICAgICBBZGQgdGhlIG5vdGlvbiBvZiBh
IENsb2JiZXJTZXQuIFRoaXMgaXMgdGhlIHNldCBvZiBBYnN0cmFjdEhlYXBzIHRoYXQgeW91IGhh
ZAorICAgICAgICBjbG9iYmVyZWQuIEl0IHJlcHJlc2VudHMgdGhlIHNldCB0aGF0IHJlc3VsdHMg
ZnJvbSB1bmlmeWluZyBhIGJ1bmNoIG9mCisgICAgICAgIEFic3RyYWN0SGVhcHMsIGFuZCBpcyBp
bnRlbmRlZCB0byBxdWlja2x5IGFuc3dlciBvdmVybGFwIHF1ZXN0aW9uczogZG9lcyB0aGUgZ2l2
ZW4KKyAgICAgICAgQWJzdHJhY3RIZWFwIG92ZXJsYXAgYW55IEFic3RyYWN0SGVhcCBpbiB0aGUg
Q2xvYmJlclNldD8gVG8gdGhpcyBlbmQsIGlmIHlvdSBhZGQgYW4KKyAgICAgICAgQWJzdHJhY3RI
ZWFwIHRvIGEgc2V0LCBpdCAiZGlyZWN0bHkiIGFkZHMgdGhlIGhlYXAgaXRzZWxmLCBhbmQgInN1
cGVyIiBhZGRzIGFsbCBvZgorICAgICAgICBpdHMgYW5jZXN0b3JzLiBBbiBBYnN0cmFjdEhlYXAg
aXMgc2FpZCB0byBvdmVybGFwIGEgc2V0IGlmIGFueSBkaXJlY3Qgb3Igc3VwZXIKKyAgICAgICAg
bWVtYmVyIGlzIGVxdWFsIHRvIGl0LCBvciBpZiBhbnkgb2YgaXRzIGFuY2VzdG9ycyBhcmUgZXF1
YWwgdG8gYSBkaXJlY3QgbWVtYmVyLgorICAgICAgICAKKyAgICAgICAgRXhhbXBsZSAjMToKKyAg
ICAgICAgCisgICAgICAgICAgICAtIEkgYWRkIFZhcmlhYmxlcyg1KS4gSS5lLiBWYXJpYWJsZXMg
aXMgdGhlIEtpbmQgYW5kIDUgaXMgdGhlIHBheWxvYWQuIFRoaXMKKyAgICAgICAgICAgICAgaXMg
YSBzdWJ0eXBlIG9mIFZhcmlhYmxlcywgd2hpY2ggaXMgYSBzdWJ0eXBlIG9mIFdvcmxkLgorICAg
ICAgICAgICAgLSBZb3UgcXVlcnkgVmFyaWFibGVzLiBJLmUuIFZhcmlhYmxlcyB3aXRoIGEgVE9Q
IHBheWxvYWQsIHdoaWNoIGlzIHRoZQorICAgICAgICAgICAgICBzdXBlcnR5cGUgb2YgVmFyaWFi
bGVzKFgpIGZvciBhbnkgWCwgYW5kIGEgc3VidHlwZSBvZiBXb3JsZC4KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgVGhlIHNldCB3aWxsIGhhdmUgVmFyaWFibGVzKDUpIGFzIGEgZGlyZWN0IG1l
bWJlciwgYW5kIFZhcmlhYmxlcyBhbmQgV29ybGQgYXMKKyAgICAgICAgICAgIHN1cGVyIG1lbWJl
cnMuIFRoZSBWYXJpYWJsZXMgcXVlcnkgd2lsbCBpbW1lZGlhdGVseSByZXR1cm4gdHJ1ZSwgYmVj
YXVzZQorICAgICAgICAgICAgVmFyaWFibGVzIGlzIGluZGVlZCBhIHN1cGVyIG1lbWJlci4KKyAg
ICAgICAgCisgICAgICAgIEV4YW1wbGUgIzI6CisgICAgICAgIAorICAgICAgICAgICAgLSBJIGFk
ZCBWYXJpYWJsZXMoNSkKKyAgICAgICAgICAgIC0gWW91IHF1ZXJ5IE5hbWVkUHJvcGVydGllcwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBOYW1lZFByb3BlcnRpZXMgaXMgbm90IGEgbWVtYmVy
IGF0IGFsbCAobmVpdGhlciBkaXJlY3Qgb3Igc3VwZXIpLiBXZSBuZXh0CisgICAgICAgICAgICBx
dWVyeSBXb3JsZC4gV29ybGQgaXMgYSBtZW1iZXIsIGJ1dCBpdCdzIGEgc3VwZXIgbWVtYmVyLCBz
byB3ZSByZXR1cm4gZmFsc2UuCisgICAgICAgIAorICAgICAgICBFeGFtcGxlICMzOgorICAgICAg
ICAKKyAgICAgICAgICAgIC0gSSBhZGQgVmFyaWFibGVzCisgICAgICAgICAgICAtIFlvdSBxdWVy
eSBWYXJpYWJsZXMoNSkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVGhlIHNldCB3aWxsIGhh
dmUgVmFyaWFibGVzIGFzIGEgZGlyZWN0IG1lbWJlciwgYW5kIFdvcmxkIGFzIGEgc3VwZXIgbWVt
YmVyLgorICAgICAgICAgICAgVGhlIFZhcmlhYmxlcyg1KSBxdWVyeSB3aWxsIG5vdCBmaW5kIFZh
cmlhYmxlcyg1KSBpbiB0aGUgc2V0LCBidXQgdGhlbiBpdAorICAgICAgICAgICAgd2lsbCBxdWVy
eSBWYXJpYWJsZXMuIFZhcmlhYmxlcyBpcyBhIGRpcmVjdCBtZW1iZXIsIHNvIHdlIHJldHVybiB0
cnVlLgorICAgICAgICAKKyAgICAgICAgRXhhbXBsZSAjNDoKKyAgICAgICAgCisgICAgICAgICAg
ICAtIEkgYWRkIFZhcmlhYmxlcworICAgICAgICAgICAgLSBZb3UgcXVlcnkgTmFtZWRQcm9wZXJ0
aWVzKDUpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5laXRoZXIgTmFtZWRQcm9wZXJ0aWVz
IG5vciBOYW1lZFByb3BlcnRpZXMoNSkgYXJlIG1lbWJlcnMuIFdlIG5leHQgcXVlcnkKKyAgICAg
ICAgICAgIFdvcmxkLiBXb3JsZCBpcyBhIG1lbWJlciwgYnV0IGl0J3MgYSBzdXBlciBtZW1iZXIs
IHNvIHdlIHJldHVybiBmYWxzZS4KKyAgICAgICAgCisgICAgICAgIE92ZXJsYXAgcXVlcmllcyBy
ZXF1aXJlIHRoYXQgZWl0aGVyIHRoZSBoZWFwIGJlaW5nIHF1ZXJpZWQgaXMgaW4gdGhlIHNldCAo
ZWl0aGVyCisgICAgICAgIGRpcmVjdCBvciBzdXBlciksIG9yIHRoYXQgb25lIG9mIGl0cyBhbmNl
c3RvcnMgaXMgYSBkaXJlY3QgbWVtYmVyLiBBbm90aGVyIHdheSB0bworICAgICAgICB0aGluayBh
Ym91dCBob3cgdGhpcyB3b3JrcyBpcyB0aGF0IHR3byBoZWFwcyBBIGFuZCBCIGFyZSBzYWlkIHRv
IG92ZXJsYXAgaWYKKyAgICAgICAgQS5pc1N1YnR5cGVPZihCKSBvciBCLmlzU3VidHlwZU9mKEEp
LiBUaGlzIGlzIHNvdW5kIHNpbmNlIGhlYXBzIGZvcm0gYQorICAgICAgICBzaW5nbGUtaW5oZXJp
dGFuY2UgaGVpcmFyY2h5LiBDb25zaWRlciB0aGF0IHdlIHdhbnRlZCB0byBpbXBsZW1lbnQgYSBz
ZXQgdGhhdCBob2xkcworICAgICAgICBoZWFwcyBhbmQgYW5zd2VycyB0aGUgcXVlc3Rpb24sICJp
cyBhbnkgbWVtYmVyIGluIHRoZSBzZXQgYW4gYW5jZXN0b3IgKGkuZS4KKyAgICAgICAgc3VwZXJ0
eXBlKSBvZiBzb21lIG90aGVyIGhlYXAiLiBXZSB3b3VsZCBoYXZlIHRoZSBzZXQgY29udGFpbiB0
aGUgaGVhcHMgdGhlbXNlbHZlcywKKyAgICAgICAgYW5kIHdlIHdvdWxkIHNhdGlzZnkgdGhlIHF1
ZXJ5ICJBLmlzU3VidHlwZU9mQW55KHNldCkiIGJ5IHdhbGtpbmcgdGhlIGFuY2VzdG9yCisgICAg
ICAgIGNoYWluIG9mIEEsIGFuZCByZXBlYXRlZGx5IHF1ZXJ5aW5nIGl0cyBtZW1iZXJzaGlwIGlu
IHRoZSBzZXQuIFRoaXMgaXMgd2hhdCB0aGUKKyAgICAgICAgImRpcmVjdCIgbWVtYmVycyBvZiBv
dXIgc2V0IGRvLiBOb3cgY29uc2lkZXIgdGhlIG90aGVyIHBhcnQsIHdoZXJlIHdlIHdhbnQgdG8g
YXNrIGlmCisgICAgICAgIGFueSBtZW1iZXIgb2YgdGhlIHNldCBpcyBhIGRlc2NlbmRlbnQgb2Yg
YSBoZWFwLCBvciAiQS5pc1N1cGVydHlwZU9mQW55KHNldCkiLiBXZQorICAgICAgICB3b3VsZCBp
bXBsZW1lbnQgdGhpcyBieSBpbXBsZW1lbnRpbmcgc2V0LmFkZChCKSBhcyBhZGRpbmcgbm90IGp1
c3QgQiBidXQgYWxzbyBhbGwgb2YKKyAgICAgICAgQidzIGFuY2VzdG9yczsgdGhlbiB3ZSB3b3Vs
ZCBhbnN3ZXIgQS5pc1N1cGVydHlwZU9mQW55KHNldCkgYnkganVzdCBjaGVja2luZyBpZiBBIGlz
CisgICAgICAgIGluIHRoZSBzZXQuIFdpdGggdHdvIHN1Y2ggc2V0cyAtIG9uZSB0aGF0IGFuc3dl
cnMgaXNTdWJ0eXBlT2ZBbnkoKSBhbmQgYW5vdGhlciB0aGF0CisgICAgICAgIGFuc3dlcnMgaXNT
dXBlcnR5cGVPZkFueSgpIC0gd2UgY291bGQgYW5zd2VyIHRoZSAiZG8gYW55IG9mIG15IGhlYXBz
IG92ZXJsYXAgeW91cgorICAgICAgICBoZWFwIiBxdWVzdGlvbi4gQ2xvYmJlclNldCBkb2VzIHRo
aXMsIGJ1dCBjb21iaW5lcyB0aGUgdHdvIHNldHMgaW50byBhIHNpbmdsZQorICAgICAgICBIYXNo
TWFwLiBUaGUgSGFzaE1hcCdzIHZhbHVlLCAiZGlyZWN0IiwgbWVhbnMgdGhhdCB0aGUga2V5IGlz
IGEgbWVtYmVyIG9mIGJvdGggdGhlCisgICAgICAgIHN1cGVydHlwZSBzZXQgYW5kIHRoZSBzdWJ0
eXBlIHNldDsgaWYgaXQncyBmYWxzZSB0aGVuIGl0J3Mgb25seSBhIG1lbWJlciBvZiBvbmUgb2YK
KyAgICAgICAgdGhlbS4KKyAgICAgICAgCisgICAgICAgIEZpbmFsbHksIHRoaXMgYWRkcyBhIGZ1
bmN0b3JpemVkIGNsb2JiZXJpemUoKSBtZXRob2QgdGhhdCBhZGRzIHRoZSByZWFkIGFuZCB3cml0
ZQorICAgICAgICBjbG9iYmVycyBvZiBhIERGRzo6Tm9kZSB0byByZWFkIGFuZCB3cml0ZSBmdW5j
dG9ycy4gQ29tbW9uIGZ1bmN0b3JzIGZvciBhZGRpbmcgdG8KKyAgICAgICAgQ2xvYmJlclNldHMs
IHF1ZXJ5aW5nIG92ZXJsYXAsIGFuZCBkb2luZyBub3RoaW5nIGFyZSBwcm92aWRlZC4gQ29udmVu
aWVudCB3cmFwcGVycworICAgICAgICBhcmUgYWxzbyBwcm92aWRlZC4gVGhpcyBhbGxvd3MgeW91
IHRvIHNheSB0aGluZ3MgbGlrZToKKyAgICAgICAgCisgICAgICAgICAgICBDbG9iYmVyU2V0IHNl
dDsKKyAgICAgICAgICAgIGFkZFdyaXRlcyhncmFwaCwgbm9kZTEsIHNldCk7CisgICAgICAgICAg
ICBpZiAocmVhZHNPdmVybGFwKGdyYXBoLCBub2RlMiwgc2V0KSkKKyAgICAgICAgICAgICAgICAv
LyBXZSBrbm93IHRoYXQgbm9kZTEgbWF5IHdyaXRlIHRvIHNvbWV0aGluZyB0aGF0IG5vZGUyIG1h
eSByZWFkIGZyb20uCisgICAgICAgIAorICAgICAgICBDdXJyZW50bHkgdGhpcyBmYWNpbGl0eSBp
cyBvbmx5IHVzZWQgdG8gaW1wcm92ZSBncmFwaCBkdW1waW5nLCBidXQgaXQgd2lsbCBiZQorICAg
ICAgICBpbnN0cnVtZW50YWwgaW4gYm90aCBMSUNNIGFuZCBHVk4uIEluIHRoZSBmdXR1cmUsIEkg
d2FudCB0byBjb21wbGV0ZWx5IGtpbGwgdGhlCisgICAgICAgIE5vZGVDbG9iYmVyc1dvcmxkIGFu
ZCBOb2RlTWlnaHRDbG9iYmVyIGZsYWdzLCBhbmQgZXJhZGljYXRlIENTRVBoYXNlJ3MgaGFja2lz
aCB3YXkKKyAgICAgICAgb2YgYWNjb21wbGlzaGluZyBhbG1vc3QgZXhhY3RseSB3aGF0IEFic3Ry
YWN0SGVhcCBnaXZlcyB5b3UuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXls
b2FkOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OmR1bXApOgorICAg
ICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0SGVhcC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChBYnN0
cmFjdEhlYXApOgorICAgICAgICAoUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJh
Y3RIZWFwOjpQYXlsb2FkOjpQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhl
YXA6OlBheWxvYWQ6OnRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXls
b2FkOjppc1RvcCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjp2
YWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjp2YWx1ZUlt
cGwpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6Om9wZXJhdG9yPCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjppc0Rpc2pvaW50KToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6Om92ZXJsYXBzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0SGVhcDo6a2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpwYXls
b2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OmlzRGlzam9pbnQpOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6b3ZlcmxhcHMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0SGVhcDo6c3VwZXJ0eXBlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEhlYXA6Omhhc2gpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6Om9wZXJhdG9yPCk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RIZWFwOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RIZWFwOjpwYXlsb2FkSW1wbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RIZWFwOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcEhhc2g6
Omhhc2gpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcEhhc2g6OmVxdWFsKToKKyAg
ICAgICAgKEFic3RyYWN0SGVhcEhhc2gpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKiBkZmcv
REZHQ2xvYmJlclNldC5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjpDbG9iYmVyU2V0OjpDbG9iYmVyU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVy
U2V0Ojp+Q2xvYmJlclNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q2xvYmJlclNldDo6YWRkKToK
KyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0Ojpjb250YWlucyk6CisgICAgICAgIChKU0M6
OkRGRzo6Q2xvYmJlclNldDo6b3ZlcmxhcHMpOgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJT
ZXQ6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0OjpkaXJlY3QpOgorICAg
ICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXQ6OnN1cGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpD
bG9iYmVyU2V0OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0OjpzZXRPZik6
CisgICAgICAgIChKU0M6OkRGRzo6YWRkUmVhZHMpOgorICAgICAgICAoSlNDOjpERkc6OmFkZFdy
aXRlcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRkUmVhZHNBbmRXcml0ZXMpOgorICAgICAgICAo
SlNDOjpERkc6OnJlYWRzT3ZlcmxhcCk6CisgICAgICAgIChKU0M6OkRGRzo6d3JpdGVzT3Zlcmxh
cCk6CisgICAgICAgIChKU0M6OkRGRzo6ZGlkV3JpdGVzKToKKyAgICAgICAgKiBkZmcvREZHQ2xv
YmJlclNldC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChDbG9iYmVyU2V0KToK
KyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0Ojppc0VtcHR5KToKKyAgICAgICAgKENsb2Ji
ZXJTZXRBZGQpOgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXRBZGQ6OkNsb2JiZXJTZXRB
ZGQpOgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXRBZGQ6Om9wZXJhdG9yKCkpOgorICAg
ICAgICAoQ2xvYmJlclNldE92ZXJsYXBzKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0
T3ZlcmxhcHM6OkNsb2JiZXJTZXRPdmVybGFwcyk6CisgICAgICAgIChKU0M6OkRGRzo6Q2xvYmJl
clNldE92ZXJsYXBzOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0
T3ZlcmxhcHM6OnJlc3VsdCk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDogQWRkZWQu
CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAg
ICAoTm9PcENsb2JiZXJpemUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vT3BDbG9iYmVyaXplOjpO
b09wQ2xvYmJlcml6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9PcENsb2JiZXJpemU6Om9wZXJh
dG9yKCkpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmR1bXApOgorCiAyMDEzLTA3LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgZm91cnRoVGllcjogZWFjaCBERkcgbm9kZSB0aGF0IHJlbGllcyBvbiBv
dGhlciBub2RlcyB0byBkbyB0aGVpciB0eXBlIGNoZWNrcyBzaG91bGQgYmUgYWJsZSB0byB0ZWxs
IHlvdSBpZiB0aG9zZSB0eXBlIGNoZWNrcyBoYXBwZW5lZApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE1Mjk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzgsNiArMzc4LDExIEBACiAJCTBGRTUwNTlGMTc5QjRBMjMwMEIzNUY4QyAvKiBERkdTYWZl
VG9FeGVjdXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkU1MDU5RTE3OUI0QTIwMDBCMzVGOEMgLyogREZHU2FmZVRvRXhlY3V0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTUwNUEyMTc5QjYw
RUQwMEIzNUY4QyAvKiBGVExGYWlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRTUwNUEwMTc5QjYwRUQwMEIzNUY4QyAvKiBGVExGYWlsLmNwcCAq
LzsgfTsKIAkJMEZFNTA1QTMxNzlCNjBFRDAwQjM1RjhDIC8qIEZUTEZhaWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNUExMTc5QjYwRUQwMEIz
NUY4QyAvKiBGVExGYWlsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZFNTA1OTkxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SGVhcC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU5
NDE3OUIwRjcyMDBCMzVGOEMgLyogREZHQWJzdHJhY3RIZWFwLmNwcCAqLzsgfTsKKwkJMEZFNTA1
OUExNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SGVhcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1OTUxNzlCMEY3MjAwQjM1RjhDIC8q
IERGR0Fic3RyYWN0SGVhcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGRTUwNTlCMTc5QjBGNzIwMEIzNUY4QyAvKiBERkdDbG9iYmVyaXplLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU1MDU5NjE3
OUIwRjcyMDBCMzVGOEMgLyogREZHQ2xvYmJlcml6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTUwNTlDMTc5QjBGNzIwMEIzNUY4QyAvKiBE
RkdDbG9iYmVyU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTUwNTk3MTc5QjBGNzIwMEIzNUY4QyAvKiBERkdDbG9iYmVyU2V0LmNwcCAqLzsg
fTsKKwkJMEZFNTA1OUQxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Nsb2JiZXJTZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTk4MTc5QjBGNzIw
MEIzNUY4QyAvKiBERkdDbG9iYmVyU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFODUzNEIxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRz
LmNwcCAqLzsgfTsKIAkJMEZFODUzNEMxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRj
aHBvaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTA4MTcw
NTEzREIwMEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMDlGRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
QWJicmV2aWF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xNDM0LDYgKzE0MzksMTEgQEAKIAkJMEZFNTA1OUUxNzlCNEEyMDAwQjM1RjhD
IC8qIERGR1NhZmVUb0V4ZWN1dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2FmZVRvRXhlY3V0ZS5o
OyBwYXRoID0gZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFNTA1QTAxNzlCNjBFRDAwQjM1RjhDIC8qIEZUTEZhaWwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRmFpbC5jcHA7IHBhdGggPSBmdGwvRlRMRmFp
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTUwNUExMTc5QjYwRUQwMEIz
NUY4QyAvKiBGVExGYWlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEZh
aWwuaDsgcGF0aCA9IGZ0bC9GVExGYWlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRTUwNTk0MTc5QjBGNzIwMEIzNUY4QyAvKiBERkdBYnN0cmFjdEhlYXAuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWJzdHJhY3RIZWFwLmNwcDsgcGF0aCA9
IGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkU1MDU5NTE3OUIwRjcyMDBCMzVGOEMgLyogREZHQWJzdHJhY3RIZWFwLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0SGVhcC5oOyBwYXRoID0gZGZnL0RGR0Fi
c3RyYWN0SGVhcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU5NjE3OUIw
RjcyMDBCMzVGOEMgLyogREZHQ2xvYmJlcml6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdDbG9iYmVyaXplLmg7IHBhdGggPSBkZmcvREZHQ2xvYmJlcml6ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU1MDU5NzE3OUIwRjcyMDBCMzVGOEMgLyogREZH
Q2xvYmJlclNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdD
bG9iYmVyU2V0LmNwcDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVyU2V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1OTgxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Nsb2JiZXJT
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2xvYmJlclNldC5oOyBw
YXRoID0gZGZnL0RGR0Nsb2JiZXJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZFdh
dGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExBYmJy
ZXZpYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFiYnJldmlh
dGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yOTk3LDYgKzMwMDcsOCBAQAogCQk4NkVDOURCMzEzMjhERjQ0MDAyQjJB
RDcgLyogZGZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJ
CQkwRkU1MDU5NDE3OUIwRjcyMDBCMzVGOEMgLyogREZHQWJzdHJhY3RIZWFwLmNwcCAqLywKKwkJ
CQkwRkU1MDU5NTE3OUIwRjcyMDBCMzVGOEMgLyogREZHQWJzdHJhY3RIZWFwLmggKi8sCiAJCQkJ
MEZFNTA1ODYxNzk4QUJGNTAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCAqLywK
IAkJCQkwRkU1MDU4NzE3OThBQkY1MDBCMzVGOEMgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaCAqLywKIAkJCQkwRjU1QzE5MzE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RW
YWx1ZS5jcHAgKi8sCkBAIC0zMDMyLDYgKzMwNDQsOSBAQAogCQkJCTBGRkZDOTRDMTRFRjkwOTUw
MEM3MjUzMiAvKiBERkdDRkFQaGFzZS5oICovLAogCQkJCTBGM0IzQTI0MTU0NEM5OTEwMDNFRDBG
RiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjNCM0EyNTE1NDRD
OTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oICovLAorCQkJCTBGRTUw
NTk2MTc5QjBGNzIwMEIzNUY4QyAvKiBERkdDbG9iYmVyaXplLmggKi8sCisJCQkJMEZFNTA1OTcx
NzlCMEY3MjAwQjM1RjhDIC8qIERGR0Nsb2JiZXJTZXQuY3BwICovLAorCQkJCTBGRTUwNTk4MTc5
QjBGNzIwMEIzNUY4QyAvKiBERkdDbG9iYmVyU2V0LmggKi8sCiAJCQkJMEZCNEI1MUExNkI2Mjc3
MjAwM0Y2OTZCIC8qIERGR0NvbW1vbi5jcHAgKi8sCiAJCQkJMEZDMDk3N0UxNDY5RUJDNDAwQ0Yy
NDQyIC8qIERGR0NvbW1vbi5oICovLAogCQkJCTBGRUEwQTJEMTcwRDQwQkYwMEJCNzIyQyAvKiBE
RkdDb21tb25EYXRhLmNwcCAqLywKQEAgLTMzODksNiArMzQwNCw3IEBACiAJCQkJMEZFNTA1OEYx
Nzk4QUU3MTAwQjM1RjhDIC8qIERGR01lcmdlTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVG
NjgzNUYxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNdjcuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZFMjQ1OTYyMTc2MDFENTgwMDc0RkNFMCAvKiBDYWxsRnJhbWVJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkU1MDU5QTE3OUIwRjcyMDBCMzVGOEMgLyogREZHQWJzdHJhY3RIZWFw
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUY2ODM2MDE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1
YnNYODZfNjQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRjY4MzVFMTc0MzQzQ0MwMEEzMkUyNSAv
KiBKSVRTdHVic0FSTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU5NDAzMjIxNzQ0NDI1OTAwNDdD
RjZFIC8qIEpJVFN0dWJzWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTM1ODAsNiArMzU5
Niw3IEBACiAJCQkJMEZFQTBBMUYxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk5MEVEMUQzQUUwMEYxRjY4MSAv
KiBJbnN0cnVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxMTY2N0IwRTE5OUMwNTAwODA2
NkREIC8qIEludGVybmFsRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTUwNTlEMTc5
QjBGNzIwMEIzNUY4QyAvKiBERkdDbG9iYmVyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5
RDc3QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUEwQTA4MTcwNTEzREIwMEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjBCRDgwMTE0OEVBNkYyMDAxMTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM2MjUsNiArMzY0Miw3IEBACiAJCQkJMTQ4Q0QxRDgxMDhDRjkwMjAwODE2
M0M2IC8qIEpTQ29udGV4dFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3ODgwMTQx
MTQ3MUFEOTIwMDQxQjAxNiAvKiBKU0RhdGVNYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkE3
RjY4ODE2MDQzMkQ0MDBGNzZCOTggLyogSlNEZXN0cnVjdGlibGVPYmplY3QuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRTUwNTlCMTc5QjBGNzIwMEIzNUY4QyAvKiBERkdDbG9iYmVyaXplLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGREIyQ0RDMTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdGaW5hbGl6
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QjRBQ0FGMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4
cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCkBAIC00MzA0LDYgKzQzMjIsNyBAQAogCQkJCTBG
RUEwQTBCMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDb21waWxlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUMzMTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlQ29uc3RydWN0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzQxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVDb252ZXJzaW9u
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNTk5MTc5QjBGNzIwMEIzNUY4QyAvKiBERkdB
YnN0cmFjdEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzUxMDdFQzM3NjAwNDI3
QTQ4IC8qIERhdGVJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNjEwN0VD
Mzc2MDA0MjdBNDggLyogRGF0ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4
MDgyMzEwN0VDMDJDMDAxM0U3QjIgLyogRGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00
NDYzLDYgKzQ0ODIsNyBAQAogCQkJCTBGNEUxQTBFMTczQUVEREMwMDdFRTJEMyAvKiBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJCNzRFMEE0MzAzMjgw
MDUxN0NGQyAvKiBKU1N0cmluZ1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZBQUIzODBC
NjZBOTQ0MDBFNTVGMTYgLyogSlNTdHJpbmdSZWZDRi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkU1MDU5QzE3OUIwRjcyMDBCMzVGOEMgLyogREZHQ2xvYmJlclNldC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjkxOUQwQzE1N0VFMDlGMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxQTE2N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1
ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0QkQ1QTMyMEEzRTkxRjYwMEJBRjU5QyAvKiBKU1Zh
bHVlUmVmLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEhlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBYnN0cmFjdEhlYXAuaCIKKworI2lmIEVO
QUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQg
QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgaWYgKGlzVG9wKCkpCisgICAgICAgIG91dC5wcmludCgiVE9QIik7CisgICAgZWxzZQorICAg
ICAgICBvdXQucHJpbnQodmFsdWUoKSk7Cit9CisKK3ZvaWQgQWJzdHJhY3RIZWFwOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGtpbmQoKSk7CisgICAgaWYg
KGtpbmQoKSA9PSBJbnZhbGlkQWJzdHJhY3RIZWFwIHx8IGtpbmQoKSA9PSBXb3JsZCB8fCBwYXls
b2FkKCkuaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG91dC5wcmludCgiKCIsIHBheWxv
YWQoKSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2Ug
V1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgQWJzdHJhY3RIZWFwS2luZCBraW5kKQoreworICAgIHN3aXRjaCAo
a2luZCkgeworI2RlZmluZSBBQlNUUkFDVF9IRUFQX0RVTVAobmFtZSkgICAgICAgICAgICBcCisg
ICAgY2FzZSBuYW1lOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgb3V0
LnByaW50KCNuYW1lKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm47CisgICAg
Rk9SX0VBQ0hfQUJTVFJBQ1RfSEVBUF9LSU5EKEFCU1RSQUNUX0hFQVBfRFVNUCkKKyN1bmRlZiBB
QlNUUkFDVF9IRUFQX0RVTVAKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Fic3RyYWN0SGVhcF9oCisjZGVm
aW5lIERGR0Fic3RyYWN0SGVhcF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBJbXBsZW1lbnRzIGEgdGhyZWUtbGV2ZWwg
dHlwZSBoaWVyYXJjaHk6CisvLyAtIFdvcmxkIGlzIHRoZSBzdXBlcnR5cGUgb2YgYWxsIG9mIHRo
ZSB0aGluZ3MuCisvLyAtIEtpbmQgd2l0aCBUT1AgcGF5bG9hZCBpcyB0aGUgZGlyZWN0IHN1YnR5
cGUgb2YgV29ybGQuCisvLyAtIEtpbmQgd2l0aCBub24tVE9QIHBheWxvYWQgaXMgdGhlIGRpcmVj
dCBzdWJ0eXBlIG9mIGl0cyBjb3JyZXNwb25kaW5nIFRPUCBLaW5kLgorCisjZGVmaW5lIEZPUl9F
QUNIX0FCU1RSQUNUX0hFQVBfS0lORChtYWNybykgXAorICAgIG1hY3JvKEludmFsaWRBYnN0cmFj
dEhlYXApIFwKKyAgICBtYWNybyhXb3JsZCkgXAorICAgIG1hY3JvKEFyZ3VtZW50c19udW1Bcmd1
bWVudHMpIFwKKyAgICBtYWNybyhBcmd1bWVudHNfb3ZlcnJpZGVMZW5ndGgpIFwKKyAgICBtYWNy
byhBcmd1bWVudHNfcmVnaXN0ZXJzKSBcCisgICAgbWFjcm8oQXJndW1lbnRzX3Nsb3dBcmd1bWVu
dHMpIFwKKyAgICBtYWNybyhCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSBcCisgICAgbWFjcm8oQnV0
dGVyZmx5X3ZlY3Rvckxlbmd0aCkgXAorICAgIG1hY3JvKEpTQ2VsbF9zdHJ1Y3R1cmUpIFwKKyAg
ICBtYWNybyhKU0Z1bmN0aW9uX2V4ZWN1dGFibGUpIFwKKyAgICBtYWNybyhKU0Z1bmN0aW9uX3Nj
b3BlQ2hhaW4pIFwKKyAgICBtYWNybyhKU09iamVjdF9idXR0ZXJmbHkpIFwKKyAgICBtYWNybyhK
U1ZhcmlhYmxlT2JqZWN0X3JlZ2lzdGVycykgXAorICAgIG1hY3JvKE5hbWVkUHJvcGVydGllcykg
XAorICAgIG1hY3JvKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpIFwKKyAgICBtYWNybyhJbmRleGVk
RG91YmxlUHJvcGVydGllcykgXAorICAgIG1hY3JvKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGll
cykgXAorICAgIG1hY3JvKEFycmF5U3RvcmFnZVByb3BlcnRpZXMpIFwKKyAgICBtYWNybyhWYXJp
YWJsZXMpIFwKKyAgICBtYWNybyhUeXBlZEFycmF5U3RvcmFnZVBvaW50ZXIpIFwKKyAgICBtYWNy
byhUeXBlZEFycmF5UHJvcGVydGllcykgXAorICAgIG1hY3JvKFR5cGVkQXJyYXlMZW5ndGgpIFwK
KyAgICBtYWNybyhHQ1N0YXRlKSBcCisgICAgbWFjcm8oUmVnRXhwU3RhdGUpIFwKKyAgICBtYWNy
byhJbnRlcm5hbFN0YXRlKSBcCisgICAgbWFjcm8oQWJzb2x1dGUpIFwKKyAgICAvKiBVc2UgdGhp
cyBmb3IgcmVhZHMgb25seSwganVzdCB0byBpbmRpY2F0ZSB0aGF0IGlmIHRoZSB3b3JsZCBnb3Qg
Y2xvYmJlcmVkLCB0aGVuIHRoaXMgb3BlcmF0aW9uIHdpbGwgbm90IHdvcmsuICovXAorICAgIG1h
Y3JvKE1pc2NGaWVsZHMpIFwKKyAgICAvKiBVc2UgdGhpcyBmb3Igd3JpdGVzIG9ubHksIGp1c3Qg
dG8gaW5kaWNhdGUgdGhhdCBob2lzdGluZyB0aGUgbm9kZSBpcyBpbnZhbGlkLiBUaGlzIHdvcmtz
IGJlY2F1c2Ugd2UgZG9uJ3QgaG9pc3QgYW55dGhpbmcgdGhhdCBoYXMgYW55IHNpZGUgZWZmZWN0
cyBhdCBhbGwuICovXAorICAgIG1hY3JvKFNpZGVTdGF0ZSkKKworZW51bSBBYnN0cmFjdEhlYXBL
aW5kIHsKKyNkZWZpbmUgQUJTVFJBQ1RfSEVBUF9ERUNMQVJBVElPTihuYW1lKSBuYW1lLAorICAg
IEZPUl9FQUNIX0FCU1RSQUNUX0hFQVBfS0lORChBQlNUUkFDVF9IRUFQX0RFQ0xBUkFUSU9OKQor
I3VuZGVmIEFCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04KK307CisKK2NsYXNzIEFic3RyYWN0SGVh
cCB7CitwdWJsaWM6CisgICAgY2xhc3MgUGF5bG9hZCB7CisgICAgcHVibGljOgorICAgICAgICBQ
YXlsb2FkKCkKKyAgICAgICAgICAgIDogbV9pc1RvcChmYWxzZSkKKyAgICAgICAgICAgICwgbV92
YWx1ZSgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFBheWxvYWQo
Ym9vbCBpc1RvcCwgaW50NjRfdCB2YWx1ZSkKKyAgICAgICAgICAgIDogbV9pc1RvcChpc1RvcCkK
KyAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKCEoaXNUb3AgJiYgdmFsdWUpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUGF5
bG9hZChpbnQ2NF90IHZhbHVlKQorICAgICAgICAgICAgOiBtX2lzVG9wKGZhbHNlKQorICAgICAg
ICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIFBheWxvYWQoY29uc3Qgdm9pZCogcG9pbnRlcikKKyAgICAgICAgICAgIDogbV9pc1Rv
cChmYWxzZSkKKyAgICAgICAgICAgICwgbV92YWx1ZShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHBv
aW50ZXIpKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFBheWxvYWQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgICAgICAgICA6IG1faXNUb3AoZmFsc2UpCisg
ICAgICAgICAgICAsIG1fdmFsdWUoc3RhdGljX2Nhc3Q8aW50PihvcGVyYW5kKSkKKyAgICAgICAg
eworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgUGF5bG9hZCB0b3AoKSB7IHJl
dHVybiBQYXlsb2FkKHRydWUsIDApOyB9CisgICAgICAgIAorICAgICAgICBib29sIGlzVG9wKCkg
Y29uc3QgeyByZXR1cm4gbV9pc1RvcDsgfQorICAgICAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKKyAgICAgICAgICAgIHJl
dHVybiB2YWx1ZUltcGwoKTsKKyAgICAgICAgfQorICAgICAgICBpbnQ2NF90IHZhbHVlSW1wbCgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGF5bG9hZCYgb3RoZXIp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2lzVG9wID09IG90aGVyLm1f
aXNUb3AKKyAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQYXlsb2FkJiBv
dGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBQ
YXlsb2FkJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlzVG9wKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuICFvdGhlci5pc1RvcCgpOworICAgICAgICAgICAgaWYg
KG90aGVyLmlzVG9wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlKCkgPCBvdGhlci52YWx1ZSgpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBib29sIGlzRGlzam9pbnQoY29uc3QgUGF5bG9hZCYgb3RoZXIpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWU7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgUGF5bG9h
ZCYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhaXNEaXNqb2lu
dChvdGhlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBib29sIG1faXNU
b3A7CisgICAgICAgIGludDY0X3QgbV92YWx1ZTsKKyAgICB9OworICAgIAorICAgIEFic3RyYWN0
SGVhcCgpCisgICAgeworICAgICAgICBtX3ZhbHVlID0gZW5jb2RlKEludmFsaWRBYnN0cmFjdEhl
YXAsIFBheWxvYWQoKSk7CisgICAgfQorICAgIAorICAgIEFic3RyYWN0SGVhcChBYnN0cmFjdEhl
YXBLaW5kIGtpbmQpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCAhPSBJbnZhbGlkQWJzdHJh
Y3RIZWFwKTsKKyAgICAgICAgbV92YWx1ZSA9IGVuY29kZShraW5kLCBQYXlsb2FkOjp0b3AoKSk7
CisgICAgfQorICAgIAorICAgIEFic3RyYWN0SGVhcChBYnN0cmFjdEhlYXBLaW5kIGtpbmQsIFBh
eWxvYWQgcGF5bG9hZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kICE9IEludmFsaWRBYnN0
cmFjdEhlYXAgJiYga2luZCAhPSBXb3JsZCk7CisgICAgICAgIG1fdmFsdWUgPSBlbmNvZGUoa2lu
ZCwgcGF5bG9hZCk7CisgICAgfQorICAgIAorICAgIEFic3RyYWN0SGVhcChXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgeworICAgICAgICBtX3ZhbHVlID0gZW5jb2RlKEludmFs
aWRBYnN0cmFjdEhlYXAsIFBheWxvYWQ6OnRvcCgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gSW52YWxpZEFic3RyYWN0SGVhcCAm
JiAhcGF5bG9hZEltcGwoKS5pc1RvcCgpOyB9CisgICAgCisgICAgQWJzdHJhY3RIZWFwS2luZCBr
aW5kKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QWJzdHJhY3RIZWFwS2luZD4obV92YWx1
ZSAmICgoMSA8PCB0b3BTaGlmdCkgLSAxKSk7IH0KKyAgICBQYXlsb2FkIHBheWxvYWQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBXb3JsZCAmJiBraW5kKCkgIT0gSW52
YWxpZEFic3RyYWN0SGVhcCk7CisgICAgICAgIHJldHVybiBwYXlsb2FkSW1wbCgpOworICAgIH0K
KyAgICAKKyAgICBib29sIGlzRGlzam9pbnQoY29uc3QgQWJzdHJhY3RIZWFwJiBvdGhlcikKKyAg
ICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgIT0gSW52YWxpZEFic3RyYWN0SGVhcCk7CisgICAg
ICAgIEFTU0VSVChvdGhlci5raW5kKCkgIT0gSW52YWxpZEFic3RyYWN0SGVhcCk7CisgICAgICAg
IGlmIChraW5kKCkgPT0gV29ybGQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmIChvdGhlci5raW5kKCkgPT0gV29ybGQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmIChraW5kKCkgIT0gb3RoZXIua2luZCgpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBwYXlsb2FkKCkuaXNEaXNqb2ludChvdGhlci5wYXlsb2FkKCkp
OworICAgIH0KKyAgICAKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IEFic3RyYWN0SGVhcCYgb3Ro
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gIWlzRGlzam9pbnQob3RoZXIpOworICAgIH0KKyAg
ICAKKyAgICBBYnN0cmFjdEhlYXAgc3VwZXJ0eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChraW5kKCkgIT0gSW52YWxpZEFic3RyYWN0SGVhcCk7CisgICAgICAgIGlmIChraW5kKCkg
PT0gV29ybGQpCisgICAgICAgICAgICByZXR1cm4gQWJzdHJhY3RIZWFwKCk7CisgICAgICAgIGlm
IChwYXlsb2FkKCkuaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBXb3JsZDsKKyAgICAgICAg
cmV0dXJuIEFic3RyYWN0SGVhcChraW5kKCkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OkludEhhc2g8aW50NjRfdD46
Omhhc2gobV92YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBB
YnN0cmFjdEhlYXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUg
PT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEFic3RyYWN0SGVhcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEFic3Ry
YWN0SGVhcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoa2luZCgpICE9IG90aGVy
LmtpbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBraW5kKCkgPCBvdGhlci5raW5kKCk7CisgICAg
ICAgIHJldHVybiBwYXlsb2FkKCkgPCBvdGhlci5wYXlsb2FkKCk7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGtpbmQoKSA9PSBJbnZhbGlkQWJzdHJhY3RIZWFwICYmIHBheWxvYWRJbXBsKCkuaXNUb3Ao
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owor
ICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWVTaGlmdCA9IDE1
OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB0b3BTaGlmdCA9IDE0OworICAgIAorICAgIFBh
eWxvYWQgcGF5bG9hZEltcGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFBheWxvYWQo
KG1fdmFsdWUgPj4gdG9wU2hpZnQpICYgMSwgbV92YWx1ZSA+PiB2YWx1ZVNoaWZ0KTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIGludDY0X3QgZW5jb2RlKEFic3RyYWN0SGVhcEtpbmQga2luZCwg
UGF5bG9hZCBwYXlsb2FkKQorICAgIHsKKyAgICAgICAgaW50NjRfdCBraW5kQXNJbnQgPSBzdGF0
aWNfY2FzdDxpbnQ2NF90PihraW5kKTsKKyAgICAgICAgQVNTRVJUKGtpbmRBc0ludCA8ICgxIDw8
IHRvcFNoaWZ0KSk7CisgICAgICAgIHJldHVybiBraW5kQXNJbnQgfCAocGF5bG9hZC5pc1RvcCgp
IDw8IHRvcFNoaWZ0KSB8IChwYXlsb2FkLnZhbHVlSW1wbCgpIDw8IHZhbHVlU2hpZnQpOworICAg
IH0KKyAgICAKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCitzdHJ1Y3QgQWJzdHJhY3RIZWFw
SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQWJzdHJhY3RIZWFwJiBrZXkp
IHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBBYnN0
cmFjdEhlYXAmIGEsIGNvbnN0IEFic3RyYWN0SGVhcCYgYikgeyByZXR1cm4gYSA9PSBiOyB9Cisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVl
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkFic3RyYWN0SGVhcEtp
bmQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6QWJzdHJhY3RIZWFwPiB7CisgICAgdHlw
ZWRlZiBKU0M6OkRGRzo6QWJzdHJhY3RIZWFwSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRz
PEpTQzo6REZHOjpBYnN0cmFjdEhlYXA+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZH
OjpBYnN0cmFjdEhlYXA+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Fic3RyYWN0SGVhcF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJT
ZXQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5o
IgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitDbG9iYmVyU2V0OjpDbG9iYmVyU2V0
KCkgeyB9CitDbG9iYmVyU2V0Ojp+Q2xvYmJlclNldCgpIHsgfQorCit2b2lkIENsb2JiZXJTZXQ6
OmFkZChBYnN0cmFjdEhlYXAgaGVhcCkKK3sKKyAgICBIYXNoTWFwPEFic3RyYWN0SGVhcCwgYm9v
bD46OkFkZFJlc3VsdCByZXN1bHQgPSBtX2Nsb2JiZXJzLmFkZChoZWFwLCB0cnVlKTsKKyAgICBp
ZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgaWYgKHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSB0cnVlOworICAgIH0KKyAgICB3aGlsZSAoaGVhcC5raW5kKCkgIT0gV29ybGQpIHsKKyAgICAg
ICAgaGVhcCA9IGhlYXAuc3VwZXJ0eXBlKCk7CisgICAgICAgIGlmICghbV9jbG9iYmVycy5hZGQo
aGVhcCwgZmFsc2UpLmlzTmV3RW50cnkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQor
Citib29sIENsb2JiZXJTZXQ6OmNvbnRhaW5zKEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAorewor
ICAgIEhhc2hNYXA8QWJzdHJhY3RIZWFwLCBib29sPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1f
Y2xvYmJlcnMuZmluZChoZWFwKTsKKyAgICBpZiAoaXRlciA9PSBtX2Nsb2JiZXJzLmVuZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworfQorCitib29s
IENsb2JiZXJTZXQ6Om92ZXJsYXBzKEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAoreworICAgIGlm
IChtX2Nsb2JiZXJzLmZpbmQoaGVhcCkgIT0gbV9jbG9iYmVycy5lbmQoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgd2hpbGUgKGhlYXAua2luZCgpICE9IFdvcmxkKSB7CisgICAgICAgIGhl
YXAgPSBoZWFwLnN1cGVydHlwZSgpOworICAgICAgICBpZiAoY29udGFpbnMoaGVhcCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IENsb2JiZXJTZXQ6OmNsZWFyKCkKK3sKKyAgICBtX2Nsb2JiZXJzLmNsZWFyKCk7Cit9CisKK0hh
c2hTZXQ8QWJzdHJhY3RIZWFwPiBDbG9iYmVyU2V0OjpkaXJlY3QoKSBjb25zdAoreworICAgIHJl
dHVybiBzZXRPZih0cnVlKTsKK30KKworSGFzaFNldDxBYnN0cmFjdEhlYXA+IENsb2JiZXJTZXQ6
OnN1cGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2V0T2YoZmFsc2UpOworfQorCit2b2lkIENs
b2JiZXJTZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
IihEaXJlY3Q6WyIsIHNvcnRlZExpc3REdW1wKGRpcmVjdCgpKSwgIl0sIFN1cGVyOlsiLCBzb3J0
ZWRMaXN0RHVtcChzdXBlcigpKSwgIl0pIik7Cit9CisKK0hhc2hTZXQ8QWJzdHJhY3RIZWFwPiBD
bG9iYmVyU2V0OjpzZXRPZihib29sIGRpcmVjdCkgY29uc3QKK3sKKyAgICBIYXNoU2V0PEFic3Ry
YWN0SGVhcD4gcmVzdWx0OworICAgIGZvciAoSGFzaE1hcDxBYnN0cmFjdEhlYXAsIGJvb2w+Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gbV9jbG9iYmVycy5iZWdpbigpOyBpdGVyICE9IG1fY2xvYmJl
cnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBpZiAoaXRlci0+dmFsdWUgPT0gZGlyZWN0KQor
ICAgICAgICAgICAgcmVzdWx0LmFkZChpdGVyLT5rZXkpOworICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIGFkZFJlYWRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJl
clNldCYgcmVhZFNldCkKK3sKKyAgICBDbG9iYmVyU2V0QWRkIGFkZFJlYWQocmVhZFNldCk7Cisg
ICAgTm9PcENsb2JiZXJpemUgYWRkV3JpdGU7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwg
YWRkUmVhZCwgYWRkV3JpdGUpOworfQorCit2b2lkIGFkZFdyaXRlcyhHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIENsb2JiZXJTZXQmIHdyaXRlU2V0KQoreworICAgIE5vT3BDbG9iYmVyaXplIGFk
ZFJlYWQ7CisgICAgQ2xvYmJlclNldEFkZCBhZGRXcml0ZSh3cml0ZVNldCk7CisgICAgY2xvYmJl
cml6ZShncmFwaCwgbm9kZSwgYWRkUmVhZCwgYWRkV3JpdGUpOworfQorCit2b2lkIGFkZFJlYWRz
QW5kV3JpdGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgcmVhZFNldCwg
Q2xvYmJlclNldCYgd3JpdGVTZXQpCit7CisgICAgQ2xvYmJlclNldEFkZCBhZGRSZWFkKHJlYWRT
ZXQpOworICAgIENsb2JiZXJTZXRBZGQgYWRkV3JpdGUod3JpdGVTZXQpOworICAgIGNsb2JiZXJp
emUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKK30KKworYm9vbCByZWFkc092ZXJs
YXAoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0JiByZWFkU2V0KQoreworICAg
IENsb2JiZXJTZXRPdmVybGFwcyBhZGRSZWFkKHJlYWRTZXQpOworICAgIE5vT3BDbG9iYmVyaXpl
IGFkZFdyaXRlOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRl
KTsKKyAgICByZXR1cm4gYWRkUmVhZC5yZXN1bHQoKTsKK30KKworYm9vbCB3cml0ZXNPdmVybGFw
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgd3JpdGVTZXQpCit7CisgICAg
Tm9PcENsb2JiZXJpemUgYWRkUmVhZDsKKyAgICBDbG9iYmVyU2V0T3ZlcmxhcHMgYWRkV3JpdGUo
d3JpdGVTZXQpOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRl
KTsKKyAgICByZXR1cm4gYWRkV3JpdGUucmVzdWx0KCk7Cit9CisKK2Jvb2wgZGlkV3JpdGVzKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSkKK3sKKyAgICBOb09wQ2xvYmJlcml6ZSBhZGRSZWFkOwor
ICAgIENoZWNrQ2xvYmJlcml6ZSBhZGRXcml0ZTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2Rl
LCBhZGRSZWFkLCBhZGRXcml0ZSk7CisgICAgcmV0dXJuIGFkZFdyaXRlLnJlc3VsdCgpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Nsb2JiZXJTZXRfaAorI2RlZmluZSBERkdD
bG9iYmVyU2V0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7
CitzdHJ1Y3QgTm9kZTsKKworLy8gRklYTUU6IElmIHdlIGV2ZXIgd2FudCB0byBjb21wYXJlIGlm
IHR3byBub2RlcyBjbG9iYmVyIGVhY2ggb3RoZXIsIHdlIHNob3VsZAorLy8gaGF2ZSBhIFNtYWxs
Q2xvYmJlclNldCwgd2hpY2gganVzdCBrZWVwcyBhbiBhcnJheSBvZiB0aGUgQWJzdHJhY3RIZWFw
cyBhbmQKKy8vIHNhdGlzZmllcyBvdmVybGFwcygpIHJlcXVlc3RzIGJ5IGxvb3Bpbmcgb3ZlciBh
bGwgb2YgdGhlbS4gVGhpcyB3aWxsIHByb2JhYmx5CisvLyBiZSBmYXN0ZXIgdGhhbiBhIGZ1bGwg
SGFzaE1hcCBpbiBhIGxvdCBvZiBjYXNlcy4gT3IsIG1heWJlLCB3ZSBjb3VsZCBoYXZlCisvLyBD
bG9iYmVyU2V0IGJlIHNtYXJ0IGFuZCB1c2UgYSB2ZWN0b3Igc28gbG9uZyBhcyBpdCB3YXMgc21h
bGwuCisKK2NsYXNzIENsb2JiZXJTZXQgeworcHVibGljOgorICAgIENsb2JiZXJTZXQoKTsKKyAg
ICB+Q2xvYmJlclNldCgpOworICAgIAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fY2xvYmJlcnMuaXNFbXB0eSgpOyB9CisgICAgCisgICAgdm9pZCBhZGQoQWJzdHJhY3RIZWFw
KTsKKyAgICBib29sIGNvbnRhaW5zKEFic3RyYWN0SGVhcCkgY29uc3Q7CisgICAgYm9vbCBvdmVy
bGFwcyhBYnN0cmFjdEhlYXApIGNvbnN0OworICAgIHZvaWQgY2xlYXIoKTsKKyAgICAKKyAgICAv
LyBDYWxscyB1c2VmdWwgZm9yIGRlYnVnZ2luZyB0aGUgQ2xvYmJlclNldC4KKyAgICAKKyAgICBI
YXNoU2V0PEFic3RyYWN0SGVhcD4gZGlyZWN0KCkgY29uc3Q7CisgICAgSGFzaFNldDxBYnN0cmFj
dEhlYXA+IHN1cGVyKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEhhc2hTZXQ8QWJzdHJhY3RIZWFwPiBzZXRPZihi
b29sIGRpcmVjdCkgY29uc3Q7CisgICAgCisgICAgLy8gTWFwcyBoZWFwIHRvOgorICAgIC8vIHRy
dWUgLS0+IGl0J3MgYSBkaXJlY3QgY2xvYmJlcgorICAgIC8vIGZhbHNlIC0tPiBpdCdzIGp1c3Qg
YSBzdXBlcnR5cGUgb2YgYSBkaXJlY3QgY2xvYmJlcgorICAgIEhhc2hNYXA8QWJzdHJhY3RIZWFw
LCBib29sPiBtX2Nsb2JiZXJzOworfTsKKworY2xhc3MgQ2xvYmJlclNldEFkZCB7CitwdWJsaWM6
CisgICAgQ2xvYmJlclNldEFkZChDbG9iYmVyU2V0JiBzZXQpCisgICAgICAgIDogbV9zZXQoc2V0
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBo
ZWFwKQorICAgIHsKKyAgICAgICAgbV9zZXQuYWRkKGhlYXApOworICAgIH0KK3ByaXZhdGU6Cisg
ICAgQ2xvYmJlclNldCYgbV9zZXQ7Cit9OworCitjbGFzcyBDbG9iYmVyU2V0T3ZlcmxhcHMgewor
cHVibGljOgorICAgIENsb2JiZXJTZXRPdmVybGFwcyhjb25zdCBDbG9iYmVyU2V0JiBzZXQpCisg
ICAgICAgIDogbV9zZXQoc2V0KQorICAgICAgICAsIG1fcmVzdWx0KGZhbHNlKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsK
KyAgICAgICAgbV9yZXN1bHQgfD0gbV9zZXQub3ZlcmxhcHMoaGVhcCk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHQ7IH0KKyAgICAKK3ByaXZh
dGU6CisgICAgY29uc3QgQ2xvYmJlclNldCYgbV9zZXQ7CisgICAgYm9vbCBtX3Jlc3VsdDsKK307
CisKK3ZvaWQgYWRkUmVhZHMoR3JhcGgmLCBOb2RlKiwgQ2xvYmJlclNldCYpOwordm9pZCBhZGRX
cml0ZXMoR3JhcGgmLCBOb2RlKiwgQ2xvYmJlclNldCYpOwordm9pZCBhZGRSZWFkc0FuZFdyaXRl
cyhHcmFwaCYsIE5vZGUqLCBDbG9iYmVyU2V0JiByZWFkcywgQ2xvYmJlclNldCYgd3JpdGVzKTsK
KworYm9vbCByZWFkc092ZXJsYXAoR3JhcGgmLCBOb2RlKiwgQ2xvYmJlclNldCYpOworYm9vbCB3
cml0ZXNPdmVybGFwKEdyYXBoJiwgTm9kZSosIENsb2JiZXJTZXQmKTsKKworYm9vbCBkaWRXcml0
ZXMoR3JhcGgmLCBOb2RlKik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ2xvYmJlclNldF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdDbG9iYmVyaXplX2gKKyNkZWZpbmUgREZHQ2xvYmJlcml6
ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisjaW5jbHVkZSAiREZHRWRnZVVzZXNTdHJ1
Y3R1cmUuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFtZSBXcml0
ZUZ1bmN0b3I+Cit2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBSZWFk
RnVuY3RvciYgcmVhZCwgV3JpdGVGdW5jdG9yJiB3cml0ZSkKK3sKKyAgICAvLyBTb21lIG5vdGVz
OgorICAgIC8vCisgICAgLy8gLSBXZSBjYW5ub3QgaG9pc3QsIG9yIHNpbmssIGFueXRoaW5nIHRo
YXQgaGFzIGVmZmVjdHMuIFRoaXMgbWVhbnMgdGhhdCB0aGUKKyAgICAvLyAgIGVhc2llc3Qgd2F5
IG9mIGluZGljYXRpbmcgdGhhdCBzb21ldGhpbmcgY2Fubm90IGJlIGhvaXN0ZWQgaXMgdG8gY2xh
aW0KKyAgICAvLyAgIHRoYXQgaXQgc2lkZS1lZmZlY3RzIHNvbWUgbWlzY2VsbGFuZW91cyB0aGlu
Zy4KKyAgICAvLworICAgIC8vIC0gV2UgY2Fubm90IGhvaXN0IGZvcndhcmQtZXhpdGluZyBub2Rl
cyB3aXRob3V0IHNvbWUgYWRkaXRpb25hbCBlZmZvcnQuIEkKKyAgICAvLyAgIGJlbGlldmUgdGhh
dCB3aGF0IGl0IGNvbWVzIGRvd24gdG8gaXMgdGhhdCBmb3J3YXJkLWV4aXRpbmcgZ2VuZXJhbGx5
IGhhdmUKKyAgICAvLyAgIHRoZWlyIE5vZGVFeGl0c0ZvcndhcmQgY2xlYXJlZCB1cG9uIGhvaXN0
LCBleGNlcHQgZm9yIGZvcndhcmQtZXhpdGluZworICAgIC8vICAgbm9kZXMgdGhhdCB0YWtlIGJv
Z3VzIHN0YXRlIGFzIHRoZWlyIGlucHV0LiBUaG9zZSBhcmUgc3Vic3RhbnRpYWxseQorICAgIC8v
ICAgaGFyZGVyLiBXZSBkaXNhYmxlIGl0IGZvciBub3cuIEluIHRoZSBmdXR1cmUgd2UgY291bGQg
ZW5hYmxlIGl0IGJ5IGhhdmluZworICAgIC8vICAgdmVyc2lvbnMgb2YgdGhvc2Ugbm9kZXMgdGhh
dCBiYWNrd2FyZC1leGl0IGluc3RlYWQsIGJ1dCBJJ20gbm90IGNvbnZpbmNlZAorICAgIC8vICAg
b2YgdGhlIHNvdW5kbmVzcy4KKyAgICAvLworICAgIC8vIC0gU29tZSBub2RlcyBsaWUsIGFuZCBj
bGFpbSB0aGF0IHRoZXkgZG8gbm90IHJlYWQgdGhlIEpTQ2VsbF9zdHJ1Y3R1cmUuCisgICAgLy8g
ICBUaGVzZSBhcmUgbm9kZXMgdGhhdCB1c2UgdGhlIHN0cnVjdHVyZSBpbiBhIHdheSB0aGF0IGRv
ZXMgbm90IGRlcGVuZCBvbgorICAgIC8vICAgdGhpbmdzIHRoYXQgY2hhbmdlIHVuZGVyIHN0cnVj
dHVyZSB0cmFuc2l0aW9ucy4KKyAgICAvLworICAgIC8vIC0gSXQncyBpbXBsaWNpdGx5IHVuZGVy
c3Rvb2QgdGhhdCBPU1IgZXhpdHMgcmVhZCB0aGUgd29ybGQuIFRoaXMgaXMgd2h5IHdlCisgICAg
Ly8gICBnZW5lcmFsbHkgZG9uJ3QgbW92ZSBvciBlbGltaW5hdGUgc3RvcmVzLiBFdmVyeSBub2Rl
IGNhbiBleGl0LCBzbyB0aGUKKyAgICAvLyAgIHJlYWQgc2V0IGRvZXMgbm90IHJlZmxlY3QgdGhp
bmdzIHRoYXQgd291bGQgYmUgcmVhZCBpZiB3ZSBleGl0ZWQuCisgICAgLy8gICBJbnN0ZWFkLCB0
aGUgcmVhZCBzZXQgcmVmbGVjdHMgd2hhdCB0aGUgbm9kZSB3aWxsIGhhdmUgdG8gcmVhZCBpZiBp
dAorICAgIC8vICAgKmRvZXNuJ3QqIGV4aXQuCisgICAgLy8KKyAgICAvLyAtIEJyb2FkbHksIHdl
IGRvbid0IHNheSB0aGF0IHdlJ3JlIHJlYWRpbmcgc29tZXRoaW5nIGlmIHRoYXQgc29tZXRoaW5n
IGlzCisgICAgLy8gICBpbW11dGFibGUuCisgICAgLy8KKyAgICAvLyAtIFdlIHRyeSB0byBtYWtl
IHRoaXMgd29yayBldmVuIHByaW9yIHRvIHR5cGUgaW5mZXJlbmNlLCBqdXN0IHNvIHRoYXQgd2UK
KyAgICAvLyAgIGNhbiB1c2UgaXQgZm9yIElSIGR1bXBzLiBObyBwcm9taXNlcyBvbiB3aGV0aGVy
IHRoZSBhbnN3ZXJzIGFyZSBzb3VuZAorICAgIC8vICAgcHJpb3IgdG8gdHlwZSBpbmZlcmVuY2Ug
LSB0aG91Z2ggdGhleSBwcm9iYWJseSBjb3VsZCBiZSBpZiB3ZSBkaWQgc29tZQorICAgIC8vICAg
c21hbGwgaGFja2luZy4KKyAgICAKKyAgICBpZiAoZWRnZXNVc2VTdHJ1Y3R1cmUoZ3JhcGgsIG5v
ZGUpKQorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmUpOworICAgIAorICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgeworICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICBjYXNlIFdlYWtKU0NvbnN0
YW50OgorICAgIGNhc2UgSWRlbnRpdHk6CisgICAgY2FzZSBQaGFudG9tOgorICAgIGNhc2UgQml0
QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBCaXRMU2hp
ZnQ6CisgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgY2FzZSBCaXRVUlNoaWZ0OgorICAgIGNhc2Ug
VmFsdWVUb0ludDMyOgorICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgY2FzZSBBcml0aFN1YjoKKyAg
ICBjYXNlIEFyaXRoTmVnYXRlOgorICAgIGNhc2UgQXJpdGhNdWw6CisgICAgY2FzZSBBcml0aERp
djoKKyAgICBjYXNlIEFyaXRoTW9kOgorICAgIGNhc2UgQXJpdGhBYnM6CisgICAgY2FzZSBBcml0
aE1pbjoKKyAgICBjYXNlIEFyaXRoTWF4OgorICAgIGNhc2UgQXJpdGhTcXJ0OgorICAgIGNhc2Ug
R2V0U2NvcGU6CisgICAgY2FzZSBTa2lwU2NvcGU6CisgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgor
ICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKKyAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50Ogor
ICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQ6CisgICAgY2FzZSBDb21wYXJlU3RyaWN0
RXE6CisgICAgY2FzZSBJc1VuZGVmaW5lZDoKKyAgICBjYXNlIElzQm9vbGVhbjoKKyAgICBjYXNl
IElzTnVtYmVyOgorICAgIGNhc2UgSXNTdHJpbmc6CisgICAgY2FzZSBMb2dpY2FsTm90OgorICAg
IGNhc2UgSW50MzJUb0RvdWJsZToKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNl
IE1vdkhpbnRBbmRDaGVjazoKKyAgICBjYXNlIE1vdkhpbnQ6CisgICAgY2FzZSBab21iaWVIaW50
OgorICAgIGNhc2UgVXBzaWxvbjoKKyAgICBjYXNlIFBoaToKKyAgICBjYXNlIEZsdXNoOgorICAg
IGNhc2UgUGhhbnRvbUxvY2FsOgorICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgY2FzZSBJbmxp
bmVTdGFydDoKKyAgICBjYXNlIEJyZWFrcG9pbnQ6CisgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9u
OgorICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgorICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoK
KyAgICBjYXNlIEp1bXA6CisgICAgY2FzZSBCcmFuY2g6CisgICAgY2FzZSBTd2l0Y2g6CisgICAg
Y2FzZSBUaHJvdzoKKyAgICBjYXNlIEZvcmNlT1NSRXhpdDoKKyAgICBjYXNlIEZvcndhcmRGb3Jj
ZU9TUkV4aXQ6CisgICAgY2FzZSBSZXR1cm46CisgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7Cisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZXNlIGFyZSBmb3J3YXJkLWV4aXRpbmcgbm9kZXMg
dGhhdCBhc3N1bWUgdGhhdCB0aGUgc3Vic2VxdWVudCBpbnN0cnVjdGlvbgorICAgIC8vIGlzIGEg
TW92SGludCwgYW5kIHRoZXkgdHJ5IHRvIHJvbGwgZm9yd2FyZCBvdmVyIHRoaXMgTW92SGludCBp
biB0aGVpcgorICAgIC8vIGV4ZWN1dGlvbi4gVGhpcyBtYWtlcyBob2lzdGluZyB0aGVtIGltcG9z
c2libGUgd2l0aG91dCBhZGRpdGlvbmFsIG1hZ2ljLiBXZQorICAgIC8vIG1heSBhZGQgc3VjaCBt
YWdpYyBldmVudHVhbGx5LCBidXQganVzdCBub3QgeWV0LgorICAgIGNhc2UgVUludDMyVG9OdW1i
ZXI6CisgICAgY2FzZSBGb3J3YXJkSW50MzJUb0RvdWJsZToKKyAgICBjYXNlIERvdWJsZUFzSW50
MzI6CisgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBDcmVhdGVUaGlzOgorICAgIGNhc2UgVG9UaGlzOgorICAgIGNhc2UgVmFySW5q
ZWN0aW9uV2F0Y2hwb2ludDoKKyAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDoK
KyAgICBjYXNlIElzT2JqZWN0OgorICAgIGNhc2UgSXNGdW5jdGlvbjoKKyAgICBjYXNlIFR5cGVP
ZjoKKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBjYXNlIEdldEJ5SWQ6CisgICAgY2FzZSBHZXRCeUlkRmx1c2g6CisgICAgY2FzZSBQdXRC
eUlkOgorICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICBjYXNlIEFycmF5UHVzaDoKKyAgICBj
YXNlIEFycmF5UG9wOgorICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBj
YXNlIFRvUHJpbWl0aXZlOgorICAgIGNhc2UgSW46CisgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xl
bmd0aFNhZmU6CisgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgorICAgICAgICByZWFk
KFdvcmxkKTsKKyAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAgIHN3aXRjaCAobm9kZS0+YmluYXJ5VXNlS2lu
ZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgIGNhc2UgTnVtYmVyVXNlOgor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAg
ICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBHZXRDYWxsZWU6CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNT
dGFjazo6Q2FsbGVlKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTZXRD
YWxsZWU6CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkNh
bGxlZSkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgR2V0TG9jYWw6Cisg
ICAgY2FzZSBHZXRBcmd1bWVudDoKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVz
LCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBT
ZXRMb2NhbDoKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9j
YWwoKSkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgR2V0TG9jYWxVbmxp
bmtlZDoKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT51bmxpbmtl
ZExvY2FsKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEdldEJ5VmFs
OiB7CisgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAg
IHN3aXRjaCAobW9kZS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQ
cmVkaWN0aW9uczoKKyAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgY2Fz
ZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICAgICAgLy8gQXNzdW1lIHRoZSB3b3JzdCBzaW5j
ZSB3ZSBkb24ndCBoYXZlIHByb2ZpbGluZyB5ZXQuCisgICAgICAgICAgICByZWFkKFdvcmxkKTsK
KyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgICAgICB3cml0ZShT
aWRlU3RhdGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAg
IHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICBpZiAobW9kZS5pc091dE9mQm91bmRz
KCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgICAgICB3cml0
ZShXb3JsZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgbm90aGluZyBiZWNhdXNlIGl0J3Mgb25seSBy
ZWFkaW5nIGltbXV0YWJsZSBkYXRhLgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgICAgIHJlYWQoQXJndW1l
bnRzX3JlZ2lzdGVycyk7CisgICAgICAgICAgICByZWFkKFZhcmlhYmxlcyk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAg
ICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1
dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3Zl
Y3Rvckxlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkSW50MzJQcm9wZXJ0aWVz
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAg
ICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZs
eV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxl
bmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkRG91YmxlUHJvcGVydGllcyk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVhZChX
b3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgICAg
IGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5
X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVu
Z3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcyk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVh
ZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAg
ICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgLy8gR2l2ZSB1
cCBvbiBsaWZlIGZvciBub3cuCisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAg
IHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6
CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQ4QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgICAg
ICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJy
YXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgY2FzZSBBcnJh
eTo6RmxvYXQ2NEFycmF5OgorICAgICAgICAgICAgcmVhZChUeXBlZEFycmF5UHJvcGVydGllcyk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBQdXRCeVZhbDoKKyAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgQXJyYXlNb2Rl
IG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dpdGNoIChtb2RlLm1vZGVGb3JQ
dXQoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9u
czoKKyAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgY2FzZSBBcnJheTo6
VW5kZWNpZGVkOgorICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICAvLyBB
c3N1bWUgdGhlIHdvcnN0IHNpbmNlIHdlIGRvbid0IGhhdmUgcHJvZmlsaW5nIHlldC4KKyAgICAg
ICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoK
KyAgICAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgIHJlYWQo
V29ybGQpOworICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgICAg
IHJlYWQoQXJndW1lbnRzX3JlZ2lzdGVycyk7CisgICAgICAgICAgICByZWFkKEFyZ3VtZW50c19u
dW1Bcmd1bWVudHMpOworICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfc2xvd0FyZ3VtZW50cyk7
CisgICAgICAgICAgICB3cml0ZShWYXJpYWJsZXMpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgICAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQo
V29ybGQpOworICAgICAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNM
ZW5ndGgpOworICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAg
ICAgICAgIHJlYWQoSW5kZXhlZEludDMyUHJvcGVydGllcyk7CisgICAgICAgICAgICB3cml0ZShJ
bmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChXb3JsZCk7
CisgICAgICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7
CisgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAg
cmVhZChJbmRleGVkRG91YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICB3cml0ZShJbmRleGVk
RG91YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKFdvcmxkKTsK
KyAgICAgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsK
KyAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBy
ZWFkKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICB3cml0ZShJbmRl
eGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJh
eTo6U2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIC8vIEdpdmUgdXAgb24gbGlmZSBm
b3Igbm93LgorICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3Js
ZCk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5
OgorICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpJ
bnQzMkFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAgICBjYXNl
IEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJy
YXk6CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgICAgICBjYXNlIEFycmF5
OjpGbG9hdDMyQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAg
ICAgICAgIHdyaXRlKFR5cGVkQXJyYXlQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAg
IGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgorICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQ6CisgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQ6CisgICAgY2FzZSBDaGVja0FycmF5OgorICAgIGNhc2UgRm9yd2FyZENoZWNrQXJyYXk6Cisg
ICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgorICAgIGNhc2UgSW5zdGFuY2VPZjoKKyAgICAgICAg
cmVhZChKU0NlbGxfc3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBj
YXNlIENoZWNrRXhlY3V0YWJsZToKKyAgICAgICAgcmVhZChKU0Z1bmN0aW9uX2V4ZWN1dGFibGUp
OworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAg
IGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKKyAgICAgICAgd3JpdGUoSlNDZWxsX3N0cnVjdHVy
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZToKKyAgICAgICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CisgICAg
ICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgd3JpdGUoSlNPYmplY3RfYnV0
dGVyZmx5KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEdldEJ1dHRlcmZs
eToKKyAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgQXJyYXlpZnk6CisgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJl
OgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmUpOworICAgICAgICByZWFkKEpTT2JqZWN0
X2J1dHRlcmZseSk7CisgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1cmUpOworICAgICAgICB3
cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
IGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6U3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICByZWFkKFR5cGVkQXJyYXlTdG9yYWdlUG9pbnRlcik7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAo
TmFtZWRQcm9wZXJ0aWVzLCBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VB
Y2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlcikpOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVh
cChOYW1lZFByb3BlcnRpZXMsIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFn
ZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgY2FzZSBHZXRBcnJheUxlbmd0aDogeworICAgICAgICBBcnJheU1vZGUg
bW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOworICAgICAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7
CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6
CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoK
KyAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX292ZXJyaWRlTGVuZ3RoKTsKKyAgICAgICAgICAg
IHJlYWQoQXJndW1lbnRzX251bUFyZ3VtZW50cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJlYWQoVHlwZWRBcnJheUxl
bmd0aCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgR2V0TXlTY29wZToKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVz
LCBKU1N0YWNrOjpTY29wZUNoYWluKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBTZXRNeVNjb3BlOgorICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBK
U1N0YWNrOjpTY29wZUNoYWluKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2Fz
ZSBTa2lwVG9wU2NvcGU6CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgZ3Jh
cGgubV9jb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKSk7CisgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgY2FzZSBHZXRDbG9zdXJlUmVnaXN0ZXJzOgorICAgICAgICByZWFkKEpT
VmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICBjYXNlIEdldENsb3N1cmVWYXI6CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxl
cywgbm9kZS0+dmFyTnVtYmVyKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBj
YXNlIFB1dENsb3N1cmVWYXI6CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMs
IG5vZGUtPnZhck51bWJlcigpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2Fz
ZSBHZXRHbG9iYWxWYXI6CisgICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OgorICAgICAgICBy
ZWFkKEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFB1dEdsb2JhbFZhcjoKKyAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpOwor
ICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIE5ld09iamVjdDoKKyAgICBjYXNlIE5ld0FycmF5
OgorICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKKyAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgor
ICAgIGNhc2UgTmV3UmVnZXhwOgorICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgorICAgIGNhc2Ug
TWFrZVJvcGU6CisgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6CisgICAgY2FzZSBOZXdGdW5j
dGlvbjoKKyAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKKyAgICAgICAgcmVhZChHQ1N0
YXRlKTsKKyAgICAgICAgd3JpdGUoR0NTdGF0ZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBSZWdFeHBFeGVjOgorICAgIGNhc2UgUmVnRXhwVGVzdDoKKyAgICAgICAgcmVh
ZChSZWdFeHBTdGF0ZSk7CisgICAgICAgIHdyaXRlKFJlZ0V4cFN0YXRlKTsKKyAgICAgICAgcmV0
dXJuOworCisgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAg
ICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICBjYXNlIENv
bXBhcmVMZXNzRXE6CisgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICBjYXNlIENvbXBhcmVH
cmVhdGVyRXE6CisgICAgICAgIGlmIChncmFwaC5pc1ByZWRpY3RlZE51bWVyaWNhbChub2RlKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgIHdyaXRl
KFdvcmxkKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIENvbXBhcmVFcToK
KyAgICAgICAgaWYgKGdyYXBoLmlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpCisgICAgICAgICAg
ICB8fCBub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nVXNlKQorICAgICAgICAgICAgfHwgbm9k
ZS0+aXNCaW5hcnlVc2VLaW5kKFN0cmluZ0lkZW50VXNlKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIGlmICgobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE9iamVj
dFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gT2JqZWN0T3JPdGhlclVzZSkKKyAg
ICAgICAgICAgICYmIChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlIHx8IG5v
ZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0ZShX
b3JsZCk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBUb1N0cmluZzoKKyAg
ICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBT
dHJpbmdPYmplY3RVc2U6CisgICAgICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDZWxsVXNlOgor
ICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAg
ICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgY2FzZSBUZWFyT2ZmQWN0
aXZhdGlvbjoKKyAgICAgICAgd3JpdGUoSlNWYXJpYWJsZU9iamVjdF9yZWdpc3RlcnMpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czoKKyAgICAg
ICAgd3JpdGUoQXJndW1lbnRzX3JlZ2lzdGVycyk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoKKyAgICAgICAgcmVhZChBYnN0cmFjdEhl
YXAoVmFyaWFibGVzLCBncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2lu
KSkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIEdldE15QXJn
dW1lbnRCeVZhbDoKKyAgICAgICAgcmVhZChWYXJpYWJsZXMpOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOgorICAgICAgICByZWFk
KEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIGdyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUt
PmNvZGVPcmlnaW4pKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgVGhyb3dSZWZlcmVu
Y2VFcnJvcjoKKyAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKKyAgICAgICAgcmVhZChHQ1N0YXRl
KTsKKyAgICAgICAgd3JpdGUoR0NTdGF0ZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKKyAgICBjYXNlIENoZWNrV2F0Y2hkb2dUaW1lcjoKKyAg
ICAgICAgcmVhZChJbnRlcm5hbFN0YXRlKTsKKyAgICAgICAgd3JpdGUoSW50ZXJuYWxTdGF0ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworY2xhc3MgTm9P
cENsb2JiZXJpemUgeworcHVibGljOgorICAgIE5vT3BDbG9iYmVyaXplKCkgeyB9CisgICAgdm9p
ZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCkgeyB9Cit9OworCitjbGFzcyBDaGVja0Nsb2JiZXJp
emUgeworcHVibGljOgorICAgIENoZWNrQ2xvYmJlcml6ZSgpCisgICAgICAgIDogbV9yZXN1bHQo
ZmFsc2UpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RI
ZWFwKSB7IG1fcmVzdWx0ID0gdHJ1ZTsgfQorICAgIAorICAgIGJvb2wgcmVzdWx0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZXN1bHQ7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgYm9vbCBtX3Jlc3VsdDsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHQ2xvYmJlcml6ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTI5NTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBA
QAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5
cGUuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVB
Y2Nlc3NEYXRhRHVtcC5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCIKICNp
bmNsdWRlICJPcGVyYXRpb25zLmgiCkBAIC0yNTgsNiArMjU5LDEzIEBAIHZvaWQgR3JhcGg6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwg
ZGF0YS0+Y2FzZXNbaV0udmFsdWUsICI6IiwgKmRhdGEtPmNhc2VzW2ldLnRhcmdldCk7CiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgImRlZmF1bHQ6IiwgKmRhdGEtPmZhbGxUaHJvdWdoKTsKICAg
ICB9CisgICAgQ2xvYmJlclNldCByZWFkczsKKyAgICBDbG9iYmVyU2V0IHdyaXRlczsKKyAgICBh
ZGRSZWFkc0FuZFdyaXRlcygqdGhpcywgbm9kZSwgcmVhZHMsIHdyaXRlcyk7CisgICAgaWYgKCFy
ZWFkcy5pc0VtcHR5KCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIlI6Iiwgc29ydGVkTGlz
dER1bXAocmVhZHMuZGlyZWN0KCksICIsIikpOworICAgIGlmICghd3JpdGVzLmlzRW1wdHkoKSkK
KyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVzoiLCBzb3J0ZWRMaXN0RHVtcCh3cml0ZXMuZGly
ZWN0KCksICIsIikpOwogICAgIG91dC5wcmludChjb21tYSwgImJjIyIsIG5vZGUtPmNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgb3V0LnByaW50KCIpIik7CkluZGV4OiBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2
aXNpb24gMTUyOTUzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAxMy0wNy0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgIGZvdXJ0aFRpZXI6IERGRyBOb2RlcyBzaG91bGQgYmUgYWJsZSB0byBhYnN0
cmFjdGx5IHRlbGwgeW91IHdoYXQgdGhleSByZWFkIGFuZCB3aGF0IHRoZXkgd3JpdGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODkxMAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgRml4IGNv
bXBpbGUgZ29vZiBpbiBzb3J0ZWRMaXN0RHVtcCgpLgorCisgICAgICAgICogd3RmL0xpc3REdW1w
Lmg6CisgICAgICAgIChXVEY6OnNvcnRlZExpc3REdW1wKToKKwogMjAxMy0wNy0xNiAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRpZXI6IE5hdHVyYWxM
b29wcyBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IGFuc3dlciBxdWVzdGlvbnMgbGlrZSAid2hh
dCBsb29wcyBvd24gdGhpcyBiYXNpYyBibG9jayIKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xpc3RE
dW1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkocmV2aXNpb24g
MTUyOTUzKQorKysgU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MTAyLDcgKzEwMiw3IEBAIGlubGluZSBib29sIGxlc3NUaGFuKGNvbnN0IFQmIGEsIGNvbnN0IFQK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBDU3RyaW5nIHNvcnRlZExpc3REdW1wKGNvbnN0IFQmIGxp
c3QsIGNvbnN0IGNoYXIqIGNvbW1hID0gIiwgIikKIHsKLSAgICByZXR1cm4gc29ydGVkTGlzdER1
bXAobGlzdCwgbGVzc1RoYW48VDo6VmFsdWVUeXBlPiwgY29tbWEpOworICAgIHJldHVybiBzb3J0
ZWRMaXN0RHVtcChsaXN0LCBsZXNzVGhhbjx0eXBlbmFtZSBUOjpWYWx1ZVR5cGU+LCBjb21tYSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207214</attachid>
            <date>2013-07-21 15:19:00 -0700</date>
            <delta_ts>2013-07-21 18:11:43 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>60175</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyOTUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MCBA
QAorMjAxMy0wNy0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBOb2RlcyBzaG91bGQgYmUgYWJsZSB0byBhYnN0cmFjdGx5IHRlbGwg
eW91IHdoYXQgdGhleSByZWFkIGFuZCB3aGF0IHRoZXkgd3JpdGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODkxMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRkIHRoZSBub3Rpb24gb2Yg
QWJzdHJhY3RIZWFwIHRvIHRoZSBERkcuIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHRoZSBBYnN0cmFj
dEhlYXAgaW4KKyAgICAgICAgdGhlIEZUTCwgZXhjZXB0IHRoYXQgdGhlIEZUTCdzIEFic3RyYWN0
SGVhcHMgYXJlIHVzZWQgZHVyaW5nIExMVk0gbG93ZXJpbmcgYW5kIGFyZQorICAgICAgICBlbmdp
bmVlcmVkIHRvIG9iZXkgTExWTSBUQkFBIGxvZ2ljLiBUaGUgRlRMJ3MgQWJzdHJhY3RIZWFwcyBh
cmUgYWxzbyBlbmdpbmVlcmVkIHRvCisgICAgICAgIGJlIGluZXhwZW5zaXZlIHRvIHVzZSAodGhl
eSBqdXN0IGdpdmUgeW91IGEgVEJBQSBub2RlKSBidXQgZXhwZW5zaXZlIHRvIGNyZWF0ZSAoeW91
CisgICAgICAgIGNyZWF0ZSB0aGVtIGFsbCB1cCBmcm9udCkuIEZUTCBBYnN0cmFjdEhlYXBzIGFs
c28gZG9uJ3QgYWN0dWFsbHkgZ2l2ZSB5b3UgdGhlCisgICAgICAgIGFiaWxpdHkgdG8gcmVhc29u
IGFib3V0IGFsaWFzaW5nOyB0aGV5IGFyZSAqanVzdCogYSBtZWNoYW5pc20gZm9yIGxvd2VyaW5n
IHRvIFRCQUEuCisgICAgICAgIFRoZSBERkcncyBBYnN0cmFjdEhlYXBzIGFyZSBlbmdpbmVlcmVk
IHRvIGJlIGJvdGggY2hlYXAgdG8gY3JlYXRlIGFuZCBjaGVhcCB0byB1c2UuCisgICAgICAgIFRo
ZXkgYWxzbyBnaXZlIHlvdSBhbGlhc2luZyBtYWNoaW5lcnkuIFRoZSBERkcgQWJzdHJhY3RIZWFw
cyBhcmUgcmVwcmVzZW50ZWQKKyAgICAgICAgaW50ZXJuYWxseSBieSBhIGludDY0X3QuIE1hbnkg
Y29tcGFyaXNvbnMgYmV0d2VlbiB0aGVtIGFyZSBqdXN0IGludGVnZXIgY29tYXByaXNvbnMuCisg
ICAgICAgIEFic3RyYWN0SGVhcHMgZm9ybSBhIHRocmVlLWxldmVsIGhpZXJhcmNoeSAoV29ybGQg
aXMgdGhlIHN1cGVydHlwZSBvZiBldmVyeXRoaW5nLAorICAgICAgICBLaW5kIHdpdGggYSBUT1Ag
cGF5bG9hZCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLCBhbmQgS2luZCB3aXRoIGEgbm9u
LVRPUAorICAgICAgICBwYXlsb2FkIGlzIHRoZSBkaXJlY3Qgc3VidHlwZSBvZiBpdHMgY29ycmVz
cG9uZGluZyBUT1AgS2luZCkuCisgICAgICAgIAorICAgICAgICBBZGQgdGhlIG5vdGlvbiBvZiBh
IENsb2JiZXJTZXQuIFRoaXMgaXMgdGhlIHNldCBvZiBBYnN0cmFjdEhlYXBzIHRoYXQgeW91IGhh
ZAorICAgICAgICBjbG9iYmVyZWQuIEl0IHJlcHJlc2VudHMgdGhlIHNldCB0aGF0IHJlc3VsdHMg
ZnJvbSB1bmlmeWluZyBhIGJ1bmNoIG9mCisgICAgICAgIEFic3RyYWN0SGVhcHMsIGFuZCBpcyBp
bnRlbmRlZCB0byBxdWlja2x5IGFuc3dlciBvdmVybGFwIHF1ZXN0aW9uczogZG9lcyB0aGUgZ2l2
ZW4KKyAgICAgICAgQWJzdHJhY3RIZWFwIG92ZXJsYXAgYW55IEFic3RyYWN0SGVhcCBpbiB0aGUg
Q2xvYmJlclNldD8gVG8gdGhpcyBlbmQsIGlmIHlvdSBhZGQgYW4KKyAgICAgICAgQWJzdHJhY3RI
ZWFwIHRvIGEgc2V0LCBpdCAiZGlyZWN0bHkiIGFkZHMgdGhlIGhlYXAgaXRzZWxmLCBhbmQgInN1
cGVyIiBhZGRzIGFsbCBvZgorICAgICAgICBpdHMgYW5jZXN0b3JzLiBBbiBBYnN0cmFjdEhlYXAg
aXMgc2FpZCB0byBvdmVybGFwIGEgc2V0IGlmIGFueSBkaXJlY3Qgb3Igc3VwZXIKKyAgICAgICAg
bWVtYmVyIGlzIGVxdWFsIHRvIGl0LCBvciBpZiBhbnkgb2YgaXRzIGFuY2VzdG9ycyBhcmUgZXF1
YWwgdG8gYSBkaXJlY3QgbWVtYmVyLgorICAgICAgICAKKyAgICAgICAgRXhhbXBsZSAjMToKKyAg
ICAgICAgCisgICAgICAgICAgICAtIEkgYWRkIFZhcmlhYmxlcyg1KS4gSS5lLiBWYXJpYWJsZXMg
aXMgdGhlIEtpbmQgYW5kIDUgaXMgdGhlIHBheWxvYWQuIFRoaXMKKyAgICAgICAgICAgICAgaXMg
YSBzdWJ0eXBlIG9mIFZhcmlhYmxlcywgd2hpY2ggaXMgYSBzdWJ0eXBlIG9mIFdvcmxkLgorICAg
ICAgICAgICAgLSBZb3UgcXVlcnkgVmFyaWFibGVzLiBJLmUuIFZhcmlhYmxlcyB3aXRoIGEgVE9Q
IHBheWxvYWQsIHdoaWNoIGlzIHRoZQorICAgICAgICAgICAgICBzdXBlcnR5cGUgb2YgVmFyaWFi
bGVzKFgpIGZvciBhbnkgWCwgYW5kIGEgc3VidHlwZSBvZiBXb3JsZC4KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgVGhlIHNldCB3aWxsIGhhdmUgVmFyaWFibGVzKDUpIGFzIGEgZGlyZWN0IG1l
bWJlciwgYW5kIFZhcmlhYmxlcyBhbmQgV29ybGQgYXMKKyAgICAgICAgICAgIHN1cGVyIG1lbWJl
cnMuIFRoZSBWYXJpYWJsZXMgcXVlcnkgd2lsbCBpbW1lZGlhdGVseSByZXR1cm4gdHJ1ZSwgYmVj
YXVzZQorICAgICAgICAgICAgVmFyaWFibGVzIGlzIGluZGVlZCBhIHN1cGVyIG1lbWJlci4KKyAg
ICAgICAgCisgICAgICAgIEV4YW1wbGUgIzI6CisgICAgICAgIAorICAgICAgICAgICAgLSBJIGFk
ZCBWYXJpYWJsZXMoNSkKKyAgICAgICAgICAgIC0gWW91IHF1ZXJ5IE5hbWVkUHJvcGVydGllcwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBOYW1lZFByb3BlcnRpZXMgaXMgbm90IGEgbWVtYmVy
IGF0IGFsbCAobmVpdGhlciBkaXJlY3Qgb3Igc3VwZXIpLiBXZSBuZXh0CisgICAgICAgICAgICBx
dWVyeSBXb3JsZC4gV29ybGQgaXMgYSBtZW1iZXIsIGJ1dCBpdCdzIGEgc3VwZXIgbWVtYmVyLCBz
byB3ZSByZXR1cm4gZmFsc2UuCisgICAgICAgIAorICAgICAgICBFeGFtcGxlICMzOgorICAgICAg
ICAKKyAgICAgICAgICAgIC0gSSBhZGQgVmFyaWFibGVzCisgICAgICAgICAgICAtIFlvdSBxdWVy
eSBWYXJpYWJsZXMoNSkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVGhlIHNldCB3aWxsIGhh
dmUgVmFyaWFibGVzIGFzIGEgZGlyZWN0IG1lbWJlciwgYW5kIFdvcmxkIGFzIGEgc3VwZXIgbWVt
YmVyLgorICAgICAgICAgICAgVGhlIFZhcmlhYmxlcyg1KSBxdWVyeSB3aWxsIG5vdCBmaW5kIFZh
cmlhYmxlcyg1KSBpbiB0aGUgc2V0LCBidXQgdGhlbiBpdAorICAgICAgICAgICAgd2lsbCBxdWVy
eSBWYXJpYWJsZXMuIFZhcmlhYmxlcyBpcyBhIGRpcmVjdCBtZW1iZXIsIHNvIHdlIHJldHVybiB0
cnVlLgorICAgICAgICAKKyAgICAgICAgRXhhbXBsZSAjNDoKKyAgICAgICAgCisgICAgICAgICAg
ICAtIEkgYWRkIFZhcmlhYmxlcworICAgICAgICAgICAgLSBZb3UgcXVlcnkgTmFtZWRQcm9wZXJ0
aWVzKDUpCisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5laXRoZXIgTmFtZWRQcm9wZXJ0aWVz
IG5vciBOYW1lZFByb3BlcnRpZXMoNSkgYXJlIG1lbWJlcnMuIFdlIG5leHQgcXVlcnkKKyAgICAg
ICAgICAgIFdvcmxkLiBXb3JsZCBpcyBhIG1lbWJlciwgYnV0IGl0J3MgYSBzdXBlciBtZW1iZXIs
IHNvIHdlIHJldHVybiBmYWxzZS4KKyAgICAgICAgCisgICAgICAgIE92ZXJsYXAgcXVlcmllcyBy
ZXF1aXJlIHRoYXQgZWl0aGVyIHRoZSBoZWFwIGJlaW5nIHF1ZXJpZWQgaXMgaW4gdGhlIHNldCAo
ZWl0aGVyCisgICAgICAgIGRpcmVjdCBvciBzdXBlciksIG9yIHRoYXQgb25lIG9mIGl0cyBhbmNl
c3RvcnMgaXMgYSBkaXJlY3QgbWVtYmVyLiBBbm90aGVyIHdheSB0bworICAgICAgICB0aGluayBh
Ym91dCBob3cgdGhpcyB3b3JrcyBpcyB0aGF0IHR3byBoZWFwcyBBIGFuZCBCIGFyZSBzYWlkIHRv
IG92ZXJsYXAgaWYKKyAgICAgICAgQS5pc1N1YnR5cGVPZihCKSBvciBCLmlzU3VidHlwZU9mKEEp
LiBUaGlzIGlzIHNvdW5kIHNpbmNlIGhlYXBzIGZvcm0gYQorICAgICAgICBzaW5nbGUtaW5oZXJp
dGFuY2UgaGVpcmFyY2h5LiBDb25zaWRlciB0aGF0IHdlIHdhbnRlZCB0byBpbXBsZW1lbnQgYSBz
ZXQgdGhhdCBob2xkcworICAgICAgICBoZWFwcyBhbmQgYW5zd2VycyB0aGUgcXVlc3Rpb24sICJp
cyBhbnkgbWVtYmVyIGluIHRoZSBzZXQgYW4gYW5jZXN0b3IgKGkuZS4KKyAgICAgICAgc3VwZXJ0
eXBlKSBvZiBzb21lIG90aGVyIGhlYXAiLiBXZSB3b3VsZCBoYXZlIHRoZSBzZXQgY29udGFpbiB0
aGUgaGVhcHMgdGhlbXNlbHZlcywKKyAgICAgICAgYW5kIHdlIHdvdWxkIHNhdGlzZnkgdGhlIHF1
ZXJ5ICJBLmlzU3VidHlwZU9mQW55KHNldCkiIGJ5IHdhbGtpbmcgdGhlIGFuY2VzdG9yCisgICAg
ICAgIGNoYWluIG9mIEEsIGFuZCByZXBlYXRlZGx5IHF1ZXJ5aW5nIGl0cyBtZW1iZXJzaGlwIGlu
IHRoZSBzZXQuIFRoaXMgaXMgd2hhdCB0aGUKKyAgICAgICAgImRpcmVjdCIgbWVtYmVycyBvZiBv
dXIgc2V0IGRvLiBOb3cgY29uc2lkZXIgdGhlIG90aGVyIHBhcnQsIHdoZXJlIHdlIHdhbnQgdG8g
YXNrIGlmCisgICAgICAgIGFueSBtZW1iZXIgb2YgdGhlIHNldCBpcyBhIGRlc2NlbmRlbnQgb2Yg
YSBoZWFwLCBvciAiQS5pc1N1cGVydHlwZU9mQW55KHNldCkiLiBXZQorICAgICAgICB3b3VsZCBp
bXBsZW1lbnQgdGhpcyBieSBpbXBsZW1lbnRpbmcgc2V0LmFkZChCKSBhcyBhZGRpbmcgbm90IGp1
c3QgQiBidXQgYWxzbyBhbGwgb2YKKyAgICAgICAgQidzIGFuY2VzdG9yczsgdGhlbiB3ZSB3b3Vs
ZCBhbnN3ZXIgQS5pc1N1cGVydHlwZU9mQW55KHNldCkgYnkganVzdCBjaGVja2luZyBpZiBBIGlz
CisgICAgICAgIGluIHRoZSBzZXQuIFdpdGggdHdvIHN1Y2ggc2V0cyAtIG9uZSB0aGF0IGFuc3dl
cnMgaXNTdWJ0eXBlT2ZBbnkoKSBhbmQgYW5vdGhlciB0aGF0CisgICAgICAgIGFuc3dlcnMgaXNT
dXBlcnR5cGVPZkFueSgpIC0gd2UgY291bGQgYW5zd2VyIHRoZSAiZG8gYW55IG9mIG15IGhlYXBz
IG92ZXJsYXAgeW91cgorICAgICAgICBoZWFwIiBxdWVzdGlvbi4gQ2xvYmJlclNldCBkb2VzIHRo
aXMsIGJ1dCBjb21iaW5lcyB0aGUgdHdvIHNldHMgaW50byBhIHNpbmdsZQorICAgICAgICBIYXNo
TWFwLiBUaGUgSGFzaE1hcCdzIHZhbHVlLCAiZGlyZWN0IiwgbWVhbnMgdGhhdCB0aGUga2V5IGlz
IGEgbWVtYmVyIG9mIGJvdGggdGhlCisgICAgICAgIHN1cGVydHlwZSBzZXQgYW5kIHRoZSBzdWJ0
eXBlIHNldDsgaWYgaXQncyBmYWxzZSB0aGVuIGl0J3Mgb25seSBhIG1lbWJlciBvZiBvbmUgb2YK
KyAgICAgICAgdGhlbS4KKyAgICAgICAgCisgICAgICAgIEZpbmFsbHksIHRoaXMgYWRkcyBhIGZ1
bmN0b3JpemVkIGNsb2JiZXJpemUoKSBtZXRob2QgdGhhdCBhZGRzIHRoZSByZWFkIGFuZCB3cml0
ZQorICAgICAgICBjbG9iYmVycyBvZiBhIERGRzo6Tm9kZSB0byByZWFkIGFuZCB3cml0ZSBmdW5j
dG9ycy4gQ29tbW9uIGZ1bmN0b3JzIGZvciBhZGRpbmcgdG8KKyAgICAgICAgQ2xvYmJlclNldHMs
IHF1ZXJ5aW5nIG92ZXJsYXAsIGFuZCBkb2luZyBub3RoaW5nIGFyZSBwcm92aWRlZC4gQ29udmVu
aWVudCB3cmFwcGVycworICAgICAgICBhcmUgYWxzbyBwcm92aWRlZC4gVGhpcyBhbGxvd3MgeW91
IHRvIHNheSB0aGluZ3MgbGlrZToKKyAgICAgICAgCisgICAgICAgICAgICBDbG9iYmVyU2V0IHNl
dDsKKyAgICAgICAgICAgIGFkZFdyaXRlcyhncmFwaCwgbm9kZTEsIHNldCk7CisgICAgICAgICAg
ICBpZiAocmVhZHNPdmVybGFwKGdyYXBoLCBub2RlMiwgc2V0KSkKKyAgICAgICAgICAgICAgICAv
LyBXZSBrbm93IHRoYXQgbm9kZTEgbWF5IHdyaXRlIHRvIHNvbWV0aGluZyB0aGF0IG5vZGUyIG1h
eSByZWFkIGZyb20uCisgICAgICAgIAorICAgICAgICBDdXJyZW50bHkgdGhpcyBmYWNpbGl0eSBp
cyBvbmx5IHVzZWQgdG8gaW1wcm92ZSBncmFwaCBkdW1waW5nLCBidXQgaXQgd2lsbCBiZQorICAg
ICAgICBpbnN0cnVtZW50YWwgaW4gYm90aCBMSUNNIGFuZCBHVk4uIEluIHRoZSBmdXR1cmUsIEkg
d2FudCB0byBjb21wbGV0ZWx5IGtpbGwgdGhlCisgICAgICAgIE5vZGVDbG9iYmVyc1dvcmxkIGFu
ZCBOb2RlTWlnaHRDbG9iYmVyIGZsYWdzLCBhbmQgZXJhZGljYXRlIENTRVBoYXNlJ3MgaGFja2lz
aCB3YXkKKyAgICAgICAgb2YgYWNjb21wbGlzaGluZyBhbG1vc3QgZXhhY3RseSB3aGF0IEFic3Ry
YWN0SGVhcCBnaXZlcyB5b3UuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXls
b2FkOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OmR1bXApOgorICAg
ICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0SGVhcC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChBYnN0
cmFjdEhlYXApOgorICAgICAgICAoUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJh
Y3RIZWFwOjpQYXlsb2FkOjpQYXlsb2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhl
YXA6OlBheWxvYWQ6OnRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXls
b2FkOjppc1RvcCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjp2
YWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjp2YWx1ZUlt
cGwpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6UGF5bG9hZDo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6Om9wZXJhdG9yPCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpQYXlsb2FkOjppc0Rpc2pvaW50KToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OlBheWxvYWQ6Om92ZXJsYXBzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0SGVhcDo6a2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpwYXls
b2FkKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6OmlzRGlzam9pbnQpOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6b3ZlcmxhcHMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0SGVhcDo6c3VwZXJ0eXBlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEhlYXA6Omhhc2gpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcDo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwOjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdEhlYXA6Om9wZXJhdG9yPCk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RIZWFwOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RIZWFwOjpwYXlsb2FkSW1wbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RIZWFwOjplbmNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcEhhc2g6
Omhhc2gpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcEhhc2g6OmVxdWFsKToKKyAg
ICAgICAgKEFic3RyYWN0SGVhcEhhc2gpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKiBkZmcv
REZHQ2xvYmJlclNldC5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjpDbG9iYmVyU2V0OjpDbG9iYmVyU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVy
U2V0Ojp+Q2xvYmJlclNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q2xvYmJlclNldDo6YWRkKToK
KyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0OjphZGRBbGwpOgorICAgICAgICAoSlNDOjpE
Rkc6OkNsb2JiZXJTZXQ6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0
OjpvdmVybGFwcyk6CisgICAgICAgIChKU0M6OkRGRzo6Q2xvYmJlclNldDo6Y2xlYXIpOgorICAg
ICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXQ6OmRpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6
Q2xvYmJlclNldDo6c3VwZXIpOgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXQ6OmR1bXAp
OgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXQ6OnNldE9mKToKKyAgICAgICAgKEpTQzo6
REZHOjphZGRSZWFkcyk6CisgICAgICAgIChKU0M6OkRGRzo6YWRkV3JpdGVzKToKKyAgICAgICAg
KEpTQzo6REZHOjphZGRSZWFkc0FuZFdyaXRlcyk6CisgICAgICAgIChKU0M6OkRGRzo6cmVhZHNP
dmVybGFwKToKKyAgICAgICAgKEpTQzo6REZHOjp3cml0ZXNPdmVybGFwKToKKyAgICAgICAgKEpT
Qzo6REZHOjpkaWRXcml0ZXMpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyU2V0Lmg6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKENsb2JiZXJTZXQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkNsb2JiZXJTZXQ6OmlzRW1wdHkpOgorICAgICAgICAoQ2xvYmJlclNldEFkZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q2xvYmJlclNldEFkZDo6Q2xvYmJlclNldEFkZCk6CisgICAgICAgIChK
U0M6OkRGRzo6Q2xvYmJlclNldEFkZDo6b3BlcmF0b3IoKSk6CisgICAgICAgIChDbG9iYmVyU2V0
T3ZlcmxhcHMpOgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXRPdmVybGFwczo6Q2xvYmJl
clNldE92ZXJsYXBzKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0T3ZlcmxhcHM6Om9w
ZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpERkc6OkNsb2JiZXJTZXRPdmVybGFwczo6cmVzdWx0
KToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6
CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgIChOb09wQ2xvYmJlcml6
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9PcENsb2JiZXJpemU6Ok5vT3BDbG9iYmVyaXplKToK
KyAgICAgICAgKEpTQzo6REZHOjpOb09wQ2xvYmJlcml6ZTo6b3BlcmF0b3IoKSk6CisgICAgICAg
ICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisK
IDIwMTMtMDctMjAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBm
b3VydGhUaWVyOiBlYWNoIERGRyBub2RlIHRoYXQgcmVsaWVzIG9uIG90aGVyIG5vZGVzIHRvIGRv
IHRoZWlyIHR5cGUgY2hlY2tzIHNob3VsZCBiZSBhYmxlIHRvIHRlbGwgeW91IGlmIHRob3NlIHR5
cGUgY2hlY2tzIGhhcHBlbmVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTUyOTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM3OCw2ICszNzgsMTEg
QEAKIAkJMEZFNTA1OUYxNzlCNEEyMzAwQjM1RjhDIC8qIERGR1NhZmVUb0V4ZWN1dGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTlFMTc5QjRB
MjAwMEIzNUY4QyAvKiBERkdTYWZlVG9FeGVjdXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFNTA1QTIxNzlCNjBFRDAwQjM1RjhDIC8qIEZU
TEZhaWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFNTA1QTAxNzlCNjBFRDAwQjM1RjhDIC8qIEZUTEZhaWwuY3BwICovOyB9OwogCQkwRkU1MDVB
MzE3OUI2MEVEMDBCMzVGOEMgLyogRlRMRmFpbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1QTExNzlCNjBFRDAwQjM1RjhDIC8qIEZUTEZhaWwu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU1
MDU5OTE3OUIwRjcyMDBCMzVGOEMgLyogREZHQWJzdHJhY3RIZWFwLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTk0MTc5QjBGNzIwMEIzNUY4
QyAvKiBERkdBYnN0cmFjdEhlYXAuY3BwICovOyB9OworCQkwRkU1MDU5QTE3OUIwRjcyMDBCMzVG
OEMgLyogREZHQWJzdHJhY3RIZWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU1MDU5NTE3OUIwRjcyMDBCMzVGOEMgLyogREZHQWJzdHJhY3RIZWFw
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZF
NTA1OUIxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTUwNTk2MTc5QjBGNzIwMEIzNUY4QyAv
KiBERkdDbG9iYmVyaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZFNTA1OUMxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Nsb2JiZXJTZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1OTcx
NzlCMEY3MjAwQjM1RjhDIC8qIERGR0Nsb2JiZXJTZXQuY3BwICovOyB9OworCQkwRkU1MDU5RDE3
OUIwRjcyMDBCMzVGOEMgLyogREZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNTA1OTgxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Ns
b2JiZXJTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkU4NTM0QjE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzQ5
MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovOyB9OwogCQkw
RkU4NTM0QzE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4NTM0QTE3MjNDREE1
MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQTBBMDgxNzA1MTNEQjAwQkI3MjJDIC8q
IEZUTEFiYnJldmlhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0MzQs
NiArMTQzOSwxMSBAQAogCQkwRkU1MDU5RTE3OUI0QTIwMDBCMzVGOEMgLyogREZHU2FmZVRvRXhl
Y3V0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTYWZlVG9FeGVjdXRlLmg7IHBhdGggPSBkZmcvREZH
U2FmZVRvRXhlY3V0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU1MDVBMDE3
OUI2MEVEMDBCMzVGOEMgLyogRlRMRmFpbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBGVExGYWlsLmNwcDsgcGF0aCA9IGZ0bC9GVExGYWlsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNTA1QTExNzlCNjBFRDAwQjM1RjhDIC8qIEZUTEZhaWwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRmFpbC5oOyBwYXRoID0gZnRs
L0ZUTEZhaWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNTA1OTQxNzlCMEY3
MjAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdBYnN0cmFjdEhlYXAuY3BwOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0
SGVhcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTk1MTc5QjBGNzIw
MEIzNUY4QyAvKiBERkdBYnN0cmFjdEhlYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQWJzdHJhY3RIZWFwLmg7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RIZWFwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTUwNTk2MTc5QjBGNzIwMEIzNUY4QyAvKiBE
RkdDbG9iYmVyaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Nsb2Ji
ZXJpemUuaDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVyaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRTUwNTk3MTc5QjBGNzIwMEIzNUY4QyAvKiBERkdDbG9iYmVyU2V0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Nsb2JiZXJTZXQuY3BwOyBw
YXRoID0gZGZnL0RGR0Nsb2JiZXJTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkU1MDU5ODE3OUIwRjcyMDBCMzVGOEMgLyogREZHQ2xvYmJlclNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDbG9iYmVyU2V0Lmg7IHBhdGggPSBkZmcvREZHQ2xv
YmJlclNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0OTE3MjNDREE1
MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHBhdGggPSBkZmcv
REZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgcGF0
aCA9IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0aW9ucy5oOyBwYXRoID0g
ZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5
OTcsNiArMzAwNyw4IEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRTUwNTk0MTc5QjBG
NzIwMEIzNUY4QyAvKiBERkdBYnN0cmFjdEhlYXAuY3BwICovLAorCQkJCTBGRTUwNTk1MTc5QjBG
NzIwMEIzNUY4QyAvKiBERkdBYnN0cmFjdEhlYXAuaCAqLywKIAkJCQkwRkU1MDU4NjE3OThBQkY1
MDBCMzVGOEMgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5oICovLAogCQkJCTBGRTUwNTg3MTc5
OEFCRjUwMEIzNUY4QyAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oICovLAogCQkJ
CTBGNTVDMTkzMTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLywKQEAg
LTMwMzIsNiArMzA0NCw5IEBACiAJCQkJMEZGRkM5NEMxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NG
QVBoYXNlLmggKi8sCiAJCQkJMEYzQjNBMjQxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGM0IzQTI1MTU0NEM5OTEwMDNFRDBGRiAvKiBE
RkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggKi8sCisJCQkJMEZFNTA1OTYxNzlCMEY3MjAwQjM1
RjhDIC8qIERGR0Nsb2JiZXJpemUuaCAqLywKKwkJCQkwRkU1MDU5NzE3OUIwRjcyMDBCMzVGOEMg
LyogREZHQ2xvYmJlclNldC5jcHAgKi8sCisJCQkJMEZFNTA1OTgxNzlCMEY3MjAwQjM1RjhDIC8q
IERGR0Nsb2JiZXJTZXQuaCAqLywKIAkJCQkwRkI0QjUxQTE2QjYyNzcyMDAzRjY5NkIgLyogREZH
Q29tbW9uLmNwcCAqLywKIAkJCQkwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIgLyogREZHQ29tbW9u
LmggKi8sCiAJCQkJMEZFQTBBMkQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuY3Bw
ICovLApAQCAtMzM4OSw2ICszNDA0LDcgQEAKIAkJCQkwRkU1MDU4RjE3OThBRTcxMDBCMzVGOEMg
LyogREZHTWVyZ2VNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUY2ODM1RjE3NDM0M0NDMDBB
MzJFMjUgLyogSklUU3R1YnNBUk12Ny5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyNDU5NjIxNzYw
MUQ1ODAwNzRGQ0UwIC8qIENhbGxGcmFtZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RTUwNTlBMTc5QjBGNzIwMEIzNUY4QyAvKiBERkdBYnN0cmFjdEhlYXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFRjY4MzYwMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic1g4Nl82NC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkVGNjgzNUUxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRTk0MDMyMjE3NDQ0MjU5MDA0N0NGNkUgLyogSklUU3R1YnNY
ODZDb21tb24uaCBpbiBIZWFkZXJzICovLApAQCAtMzU4MCw2ICszNTk2LDcgQEAKIAkJCQkwRkVB
MEExRjE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTY5QTA3OTkwRUQxRDNBRTAwRjFGNjgxIC8qIEluc3RydWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjY3QjBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJuYWxG
dW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1OUQxNzlCMEY3MjAwQjM1RjhDIC8q
IERGR0Nsb2JiZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlENzdDMEVEMjBENzMwMEI4
OTYxOSAvKiBJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMDgxNzA1MTNE
QjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJE
ODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLApAQCAtMzYy
NSw2ICszNjQyLDcgQEAKIAkJCQkxNDhDRDFEODEwOENGOTAyMDA4MTYzQzYgLyogSlNDb250ZXh0
UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc4ODAxNDExNDcxQUQ5MjAwNDFCMDE2
IC8qIEpTRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQTdGNjg4MTYwNDMyRDQwMEY3
NkI5OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFNTA1
OUIxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2RTNDNjE0MTY3QkFCRDcwMDZENzYwQSAvKiBKU0V4cG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEQjJDREMxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdCNEFDQUYxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggaW4g
SGVhZGVycyAqLywKQEAgLTQzMDQsNiArNDMyMiw3IEBACiAJCQkJMEZFQTBBMEIxNzA1MTNEQjAw
QkI3MjJDIC8qIEZUTENvbXBpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzMxMDdF
QzM3NjAwNDI3QTQ4IC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlDNDEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUNvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFNTA1OTkxNzlCMEY3MjAwQjM1RjhDIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNTEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUluc3Rh
bmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM2MTA3RUMzNzYwMDQyN0E0OCAvKiBE
YXRlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODIzMTA3RUMwMkMwMDEz
RTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ0NjMsNiArNDQ4Miw3IEBA
CiAJCQkJMEY0RTFBMEUxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4MkI3NEUwQTQzMDMyODAwNTE3Q0ZDIC8qIEpTU3Ry
aW5nUmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NkFBQjM4MEI2NkE5NDQwMEU1NUYxNiAv
KiBKU1N0cmluZ1JlZkNGLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTUwNTlDMTc5QjBGNzIw
MEIzNUY4QyAvKiBERkdDbG9iYmVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDBD
MTU3RUUwOUYwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2RTNDNjFBMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVlLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTRCRDVBMzIwQTNFOTFGNjAwQkFGNTlDIC8qIEpTVmFsdWVSZWYuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVh
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEhlYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR0Fic3RyYWN0SGVhcC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBBYnN0cmFjdEhlYXA6OlBh
eWxvYWQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkK
KyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCh2
YWx1ZSgpKTsKK30KKwordm9pZCBBYnN0cmFjdEhlYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoa2luZCgpKTsKKyAgICBpZiAoa2luZCgpID09IEludmFs
aWRBYnN0cmFjdEhlYXAgfHwga2luZCgpID09IFdvcmxkIHx8IHBheWxvYWQoKS5pc1RvcCgpKQor
ICAgICAgICByZXR1cm47CisgICAgb3V0LnByaW50KCIoIiwgcGF5bG9hZCgpLCAiKSIpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBu
YW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0
LCBBYnN0cmFjdEhlYXBLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisjZGVmaW5l
IEFCU1RSQUNUX0hFQVBfRFVNUChuYW1lKSAgICAgICAgICAgIFwKKyAgICBjYXNlIG5hbWU6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBvdXQucHJpbnQoI25hbWUpOyAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVybjsKKyAgICBGT1JfRUFDSF9BQlNUUkFD
VF9IRUFQX0tJTkQoQUJTVFJBQ1RfSEVBUF9EVU1QKQorI3VuZGVmIEFCU1RSQUNUX0hFQVBfRFVN
UAorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHQWJzdHJhY3RIZWFwX2gKKyNkZWZpbmUgREZHQWJzdHJhY3RI
ZWFwX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKKy8vIEltcGxlbWVudHMgYSB0aHJlZS1sZXZlbCB0eXBlIGhpZXJhcmNoeToK
Ky8vIC0gV29ybGQgaXMgdGhlIHN1cGVydHlwZSBvZiBhbGwgb2YgdGhlIHRoaW5ncy4KKy8vIC0g
S2luZCB3aXRoIFRPUCBwYXlsb2FkIGlzIHRoZSBkaXJlY3Qgc3VidHlwZSBvZiBXb3JsZC4KKy8v
IC0gS2luZCB3aXRoIG5vbi1UT1AgcGF5bG9hZCBpcyB0aGUgZGlyZWN0IHN1YnR5cGUgb2YgaXRz
IGNvcnJlc3BvbmRpbmcgVE9QIEtpbmQuCisKKyNkZWZpbmUgRk9SX0VBQ0hfQUJTVFJBQ1RfSEVB
UF9LSU5EKG1hY3JvKSBcCisgICAgbWFjcm8oSW52YWxpZEFic3RyYWN0SGVhcCkgXAorICAgIG1h
Y3JvKFdvcmxkKSBcCisgICAgbWFjcm8oQXJndW1lbnRzX251bUFyZ3VtZW50cykgXAorICAgIG1h
Y3JvKEFyZ3VtZW50c19vdmVycmlkZUxlbmd0aCkgXAorICAgIG1hY3JvKEFyZ3VtZW50c19yZWdp
c3RlcnMpIFwKKyAgICBtYWNybyhBcmd1bWVudHNfc2xvd0FyZ3VtZW50cykgXAorICAgIG1hY3Jv
KEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpIFwKKyAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVu
Z3RoKSBcCisgICAgbWFjcm8oSlNDZWxsX3N0cnVjdHVyZSkgXAorICAgIG1hY3JvKEpTRnVuY3Rp
b25fZXhlY3V0YWJsZSkgXAorICAgIG1hY3JvKEpTRnVuY3Rpb25fc2NvcGVDaGFpbikgXAorICAg
IG1hY3JvKEpTT2JqZWN0X2J1dHRlcmZseSkgXAorICAgIG1hY3JvKEpTVmFyaWFibGVPYmplY3Rf
cmVnaXN0ZXJzKSBcCisgICAgbWFjcm8oTmFtZWRQcm9wZXJ0aWVzKSBcCisgICAgbWFjcm8oSW5k
ZXhlZEludDMyUHJvcGVydGllcykgXAorICAgIG1hY3JvKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVz
KSBcCisgICAgbWFjcm8oSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKSBcCisgICAgbWFjcm8o
QXJyYXlTdG9yYWdlUHJvcGVydGllcykgXAorICAgIG1hY3JvKFZhcmlhYmxlcykgXAorICAgIG1h
Y3JvKFR5cGVkQXJyYXlTdG9yYWdlUG9pbnRlcikgXAorICAgIG1hY3JvKFR5cGVkQXJyYXlQcm9w
ZXJ0aWVzKSBcCisgICAgbWFjcm8oVHlwZWRBcnJheUxlbmd0aCkgXAorICAgIG1hY3JvKEdDU3Rh
dGUpIFwKKyAgICBtYWNybyhSZWdFeHBTdGF0ZSkgXAorICAgIG1hY3JvKEludGVybmFsU3RhdGUp
IFwKKyAgICBtYWNybyhBYnNvbHV0ZSkgXAorICAgIC8qIFVzZSB0aGlzIGZvciByZWFkcyBvbmx5
LCBqdXN0IHRvIGluZGljYXRlIHRoYXQgaWYgdGhlIHdvcmxkIGdvdCBjbG9iYmVyZWQsIHRoZW4g
dGhpcyBvcGVyYXRpb24gd2lsbCBub3Qgd29yay4gKi9cCisgICAgbWFjcm8oTWlzY0ZpZWxkcykg
XAorICAgIC8qIFVzZSB0aGlzIGZvciB3cml0ZXMgb25seSwganVzdCB0byBpbmRpY2F0ZSB0aGF0
IGhvaXN0aW5nIHRoZSBub2RlIGlzIGludmFsaWQuIFRoaXMgd29ya3MgYmVjYXVzZSB3ZSBkb24n
dCBob2lzdCBhbnl0aGluZyB0aGF0IGhhcyBhbnkgc2lkZSBlZmZlY3RzIGF0IGFsbC4gKi9cCisg
ICAgbWFjcm8oU2lkZVN0YXRlKQorCitlbnVtIEFic3RyYWN0SGVhcEtpbmQgeworI2RlZmluZSBB
QlNUUkFDVF9IRUFQX0RFQ0xBUkFUSU9OKG5hbWUpIG5hbWUsCisgICAgRk9SX0VBQ0hfQUJTVFJB
Q1RfSEVBUF9LSU5EKEFCU1RSQUNUX0hFQVBfREVDTEFSQVRJT04pCisjdW5kZWYgQUJTVFJBQ1Rf
SEVBUF9ERUNMQVJBVElPTgorfTsKKworY2xhc3MgQWJzdHJhY3RIZWFwIHsKK3B1YmxpYzoKKyAg
ICBjbGFzcyBQYXlsb2FkIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBheWxvYWQoKQorICAgICAg
ICAgICAgOiBtX2lzVG9wKGZhbHNlKQorICAgICAgICAgICAgLCBtX3ZhbHVlKDApCisgICAgICAg
IHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUGF5bG9hZChib29sIGlzVG9wLCBpbnQ2
NF90IHZhbHVlKQorICAgICAgICAgICAgOiBtX2lzVG9wKGlzVG9wKQorICAgICAgICAgICAgLCBt
X3ZhbHVlKHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIShpc1RvcCAmJiB2
YWx1ZSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBQYXlsb2FkKGludDY0X3QgdmFs
dWUpCisgICAgICAgICAgICA6IG1faXNUb3AoZmFsc2UpCisgICAgICAgICAgICAsIG1fdmFsdWUo
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUGF5bG9hZChj
b25zdCB2b2lkKiBwb2ludGVyKQorICAgICAgICAgICAgOiBtX2lzVG9wKGZhbHNlKQorICAgICAg
ICAgICAgLCBtX3ZhbHVlKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCisgICAgICAg
IHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCkKKyAgICAgICAgICAgIDogbV9pc1RvcChmYWxzZSkKKyAgICAgICAgICAgICwgbV92
YWx1ZShzdGF0aWNfY2FzdDxpbnQ+KG9wZXJhbmQpKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHN0YXRpYyBQYXlsb2FkIHRvcCgpIHsgcmV0dXJuIFBheWxvYWQodHJ1
ZSwgMCk7IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNUb3AoKSBjb25zdCB7IHJldHVybiBt
X2lzVG9wOyB9CisgICAgICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQoIWlzVG9wKCkpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlSW1wbCgp
OworICAgICAgICB9CisgICAgICAgIGludDY0X3QgdmFsdWVJbXBsKCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQYXlsb2FkJiBvdGhlcikgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1faXNUb3AgPT0gb3RoZXIubV9pc1RvcAorICAgICAgICAg
ICAgICAgICYmIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBheWxvYWQmIG90aGVyKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFBheWxvYWQmIG90aGVyKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gIW90aGVyLmlzVG9wKCk7CisgICAgICAgICAgICBpZiAob3RoZXIuaXNUb3AoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUo
KSA8IG90aGVyLnZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNE
aXNqb2ludChjb25zdCBQYXlsb2FkJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgaWYgKG90aGVyLmlzVG9wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgYm9vbCBvdmVybGFwcyhjb25zdCBQYXlsb2FkJiBvdGhlcikgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICFpc0Rpc2pvaW50KG90aGVyKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cisg
ICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgbV9pc1RvcDsKKyAgICAgICAgaW50
NjRfdCBtX3ZhbHVlOworICAgIH07CisgICAgCisgICAgQWJzdHJhY3RIZWFwKCkKKyAgICB7Cisg
ICAgICAgIG1fdmFsdWUgPSBlbmNvZGUoSW52YWxpZEFic3RyYWN0SGVhcCwgUGF5bG9hZCgpKTsK
KyAgICB9CisgICAgCisgICAgQWJzdHJhY3RIZWFwKEFic3RyYWN0SGVhcEtpbmQga2luZCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChraW5kICE9IEludmFsaWRBYnN0cmFjdEhlYXApOworICAgICAg
ICBtX3ZhbHVlID0gZW5jb2RlKGtpbmQsIFBheWxvYWQ6OnRvcCgpKTsKKyAgICB9CisgICAgCisg
ICAgQWJzdHJhY3RIZWFwKEFic3RyYWN0SGVhcEtpbmQga2luZCwgUGF5bG9hZCBwYXlsb2FkKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgIT0gSW52YWxpZEFic3RyYWN0SGVhcCAmJiBraW5k
ICE9IFdvcmxkKTsKKyAgICAgICAgbV92YWx1ZSA9IGVuY29kZShraW5kLCBwYXlsb2FkKTsKKyAg
ICB9CisgICAgCisgICAgQWJzdHJhY3RIZWFwKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlw
ZSkKKyAgICB7CisgICAgICAgIG1fdmFsdWUgPSBlbmNvZGUoSW52YWxpZEFic3RyYWN0SGVhcCwg
UGF5bG9hZDo6dG9wKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuIGtpbmQoKSA9PSBJbnZhbGlkQWJzdHJhY3RIZWFwICYmICFwYXlsb2FkSW1wbCgp
LmlzVG9wKCk7IH0KKyAgICAKKyAgICBBYnN0cmFjdEhlYXBLaW5kIGtpbmQoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxBYnN0cmFjdEhlYXBLaW5kPihtX3ZhbHVlICYgKCgxIDw8IHRvcFNo
aWZ0KSAtIDEpKTsgfQorICAgIFBheWxvYWQgcGF5bG9hZCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCgpICE9IFdvcmxkICYmIGtpbmQoKSAhPSBJbnZhbGlkQWJzdHJhY3RIZWFw
KTsKKyAgICAgICAgcmV0dXJuIHBheWxvYWRJbXBsKCk7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNEaXNqb2ludChjb25zdCBBYnN0cmFjdEhlYXAmIG90aGVyKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGtpbmQoKSAhPSBJbnZhbGlkQWJzdHJhY3RIZWFwKTsKKyAgICAgICAgQVNTRVJUKG90aGVy
LmtpbmQoKSAhPSBJbnZhbGlkQWJzdHJhY3RIZWFwKTsKKyAgICAgICAgaWYgKGtpbmQoKSA9PSBX
b3JsZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG90aGVyLmtpbmQo
KSA9PSBXb3JsZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGtpbmQo
KSAhPSBvdGhlci5raW5kKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIHBheWxvYWQoKS5pc0Rpc2pvaW50KG90aGVyLnBheWxvYWQoKSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgQWJzdHJhY3RIZWFwJiBvdGhlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiAhaXNEaXNqb2ludChvdGhlcik7CisgICAgfQorICAgIAorICAgIEFic3RyYWN0
SGVhcCBzdXBlcnR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBJ
bnZhbGlkQWJzdHJhY3RIZWFwKTsKKyAgICAgICAgaWYgKGtpbmQoKSA9PSBXb3JsZCkKKyAgICAg
ICAgICAgIHJldHVybiBBYnN0cmFjdEhlYXAoKTsKKyAgICAgICAgaWYgKHBheWxvYWQoKS5pc1Rv
cCgpKQorICAgICAgICAgICAgcmV0dXJuIFdvcmxkOworICAgICAgICByZXR1cm4gQWJzdHJhY3RI
ZWFwKGtpbmQoKSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDxpbnQ2NF90Pjo6aGFzaChtX3ZhbHVlKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFic3RyYWN0SGVhcCYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVl
OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQWJzdHJhY3RIZWFwJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgQWJzdHJhY3RIZWFwJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChraW5kKCkgIT0gb3RoZXIua2luZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGtpbmQoKSA8IG90aGVyLmtpbmQoKTsKKyAgICAgICAgcmV0dXJuIHBheWxv
YWQoKSA8IG90aGVyLnBheWxvYWQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IElu
dmFsaWRBYnN0cmFjdEhlYXAgJiYgcGF5bG9hZEltcGwoKS5pc1RvcCgpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZVNoaWZ0ID0gMTU7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHRvcFNoaWZ0ID0gMTQ7CisgICAgCisgICAgUGF5bG9hZCBwYXlsb2FkSW1w
bCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gUGF5bG9hZCgobV92YWx1ZSA+PiB0b3BT
aGlmdCkgJiAxLCBtX3ZhbHVlID4+IHZhbHVlU2hpZnQpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgaW50NjRfdCBlbmNvZGUoQWJzdHJhY3RIZWFwS2luZCBraW5kLCBQYXlsb2FkIHBheWxvYWQp
CisgICAgeworICAgICAgICBpbnQ2NF90IGtpbmRBc0ludCA9IHN0YXRpY19jYXN0PGludDY0X3Q+
KGtpbmQpOworICAgICAgICBBU1NFUlQoa2luZEFzSW50IDwgKDEgPDwgdG9wU2hpZnQpKTsKKyAg
ICAgICAgcmV0dXJuIGtpbmRBc0ludCB8IChwYXlsb2FkLmlzVG9wKCkgPDwgdG9wU2hpZnQpIHwg
KHBheWxvYWQudmFsdWVJbXBsKCkgPDwgdmFsdWVTaGlmdCk7CisgICAgfQorICAgIAorICAgIGlu
dDY0X3QgbV92YWx1ZTsKK307CisKK3N0cnVjdCBBYnN0cmFjdEhlYXBIYXNoIHsKKyAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBBYnN0cmFjdEhlYXAmIGtleSkgeyByZXR1cm4ga2V5Lmhh
c2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEFic3RyYWN0SGVhcCYgYSwgY29u
c3QgQWJzdHJhY3RIZWFwJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6QWJzdHJhY3RIZWFwS2luZCk7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1
bHRIYXNoPEpTQzo6REZHOjpBYnN0cmFjdEhlYXA+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpB
YnN0cmFjdEhlYXBIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkFic3Ry
YWN0SGVhcD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OkFic3RyYWN0SGVhcD4g
eyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZW5kaWYgLy8gREZHQWJzdHJhY3RIZWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlclNldC5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK0Nsb2JiZXJTZXQ6OkNsb2JiZXJTZXQoKSB7IH0KK0Nsb2JiZXJT
ZXQ6On5DbG9iYmVyU2V0KCkgeyB9CisKK3ZvaWQgQ2xvYmJlclNldDo6YWRkKEFic3RyYWN0SGVh
cCBoZWFwKQoreworICAgIEhhc2hNYXA8QWJzdHJhY3RIZWFwLCBib29sPjo6QWRkUmVzdWx0IHJl
c3VsdCA9IG1fY2xvYmJlcnMuYWRkKGhlYXAsIHRydWUpOworICAgIGlmIChyZXN1bHQuaXNOZXdF
bnRyeSkgeworICAgICAgICBpZiAocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IHRydWU7CisgICAgfQor
ICAgIHdoaWxlIChoZWFwLmtpbmQoKSAhPSBXb3JsZCkgeworICAgICAgICBoZWFwID0gaGVhcC5z
dXBlcnR5cGUoKTsKKyAgICAgICAgaWYgKCFtX2Nsb2JiZXJzLmFkZChoZWFwLCBmYWxzZSkuaXNO
ZXdFbnRyeSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgQ2xvYmJlclNl
dDo6YWRkQWxsKGNvbnN0IENsb2JiZXJTZXQmIG90aGVyKQoreworICAgIC8vIElmIHRoZSBvdGhl
ciBzZXQgaGFzIGEgZGlyZWN0IGhlYXAsIHdlIG1ha2Ugc3VyZSB3ZSBoYXZlIGl0IGFuZCB3ZSBz
ZXQgaXRzCisgICAgLy8gdmFsdWUgdG8gYmUgdHJ1ZS4KKyAgICAvLworICAgIC8vIElmIHRoZSBv
dGhlciBoZWFwIGhhcyBhIHN1cGVyIGhlYXAsIHdlIG1ha2Ugc3VyZSBpdCdzIHByZXNlbnQgYnV0
IGRvbid0CisgICAgLy8gbW9kaWZ5IGl0cyB2YWx1ZSAtIHNvIHdlIGhhZCBpdCBkaXJlY3RseSBh
bHJlYWR5IHRoZW4gdGhpcyBkb2Vzbid0IGNoYW5nZS4KKyAgICAKKyAgICBIYXNoTWFwPEFic3Ry
YWN0SGVhcCwgYm9vbD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBvdGhlci5tX2Nsb2JiZXJzLmJl
Z2luKCk7CisgICAgSGFzaE1hcDxBYnN0cmFjdEhlYXAsIGJvb2w+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBvdGhlci5tX2Nsb2JiZXJzLmVuZCgpOworICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytp
dGVyKQorICAgICAgICBtX2Nsb2JiZXJzLmFkZChpdGVyLT5rZXksIGl0ZXItPnZhbHVlKS5pdGVy
YXRvci0+dmFsdWUgfD0gaXRlci0+dmFsdWU7Cit9CisKK2Jvb2wgQ2xvYmJlclNldDo6Y29udGFp
bnMoQWJzdHJhY3RIZWFwIGhlYXApIGNvbnN0Cit7CisgICAgSGFzaE1hcDxBYnN0cmFjdEhlYXAs
IGJvb2w+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9jbG9iYmVycy5maW5kKGhlYXApOworICAg
IGlmIChpdGVyID09IG1fY2xvYmJlcnMuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gaXRlci0+dmFsdWU7Cit9CisKK2Jvb2wgQ2xvYmJlclNldDo6b3ZlcmxhcHMoQWJz
dHJhY3RIZWFwIGhlYXApIGNvbnN0Cit7CisgICAgaWYgKG1fY2xvYmJlcnMuZmluZChoZWFwKSAh
PSBtX2Nsb2JiZXJzLmVuZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB3aGlsZSAoaGVh
cC5raW5kKCkgIT0gV29ybGQpIHsKKyAgICAgICAgaGVhcCA9IGhlYXAuc3VwZXJ0eXBlKCk7Cisg
ICAgICAgIGlmIChjb250YWlucyhoZWFwKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ2xvYmJlclNldDo6Y2xlYXIoKQorewor
ICAgIG1fY2xvYmJlcnMuY2xlYXIoKTsKK30KKworSGFzaFNldDxBYnN0cmFjdEhlYXA+IENsb2Ji
ZXJTZXQ6OmRpcmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNldE9mKHRydWUpOworfQorCitI
YXNoU2V0PEFic3RyYWN0SGVhcD4gQ2xvYmJlclNldDo6c3VwZXIoKSBjb25zdAoreworICAgIHJl
dHVybiBzZXRPZihmYWxzZSk7Cit9CisKK3ZvaWQgQ2xvYmJlclNldDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiKERpcmVjdDpbIiwgc29ydGVkTGlzdER1
bXAoZGlyZWN0KCkpLCAiXSwgU3VwZXI6WyIsIHNvcnRlZExpc3REdW1wKHN1cGVyKCkpLCAiXSki
KTsKK30KKworSGFzaFNldDxBYnN0cmFjdEhlYXA+IENsb2JiZXJTZXQ6OnNldE9mKGJvb2wgZGly
ZWN0KSBjb25zdAoreworICAgIEhhc2hTZXQ8QWJzdHJhY3RIZWFwPiByZXN1bHQ7CisgICAgZm9y
IChIYXNoTWFwPEFic3RyYWN0SGVhcCwgYm9vbD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX2Ns
b2JiZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jbG9iYmVycy5lbmQoKTsgKytpdGVyKSB7CisgICAg
ICAgIGlmIChpdGVyLT52YWx1ZSA9PSBkaXJlY3QpCisgICAgICAgICAgICByZXN1bHQuYWRkKGl0
ZXItPmtleSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgYWRkUmVhZHMo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBDbG9iYmVyU2V0JiByZWFkU2V0KQoreworICAgIENs
b2JiZXJTZXRBZGQgYWRkUmVhZChyZWFkU2V0KTsKKyAgICBOb09wQ2xvYmJlcml6ZSBhZGRXcml0
ZTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFkLCBhZGRXcml0ZSk7Cit9CisK
K3ZvaWQgYWRkV3JpdGVzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQ2xvYmJlclNldCYgd3Jp
dGVTZXQpCit7CisgICAgTm9PcENsb2JiZXJpemUgYWRkUmVhZDsKKyAgICBDbG9iYmVyU2V0QWRk
IGFkZFdyaXRlKHdyaXRlU2V0KTsKKyAgICBjbG9iYmVyaXplKGdyYXBoLCBub2RlLCBhZGRSZWFk
LCBhZGRXcml0ZSk7Cit9CisKK3ZvaWQgYWRkUmVhZHNBbmRXcml0ZXMoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlLCBDbG9iYmVyU2V0JiByZWFkU2V0LCBDbG9iYmVyU2V0JiB3cml0ZVNldCkKK3sK
KyAgICBDbG9iYmVyU2V0QWRkIGFkZFJlYWQocmVhZFNldCk7CisgICAgQ2xvYmJlclNldEFkZCBh
ZGRXcml0ZSh3cml0ZVNldCk7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRkUmVhZCwg
YWRkV3JpdGUpOworfQorCitib29sIHJlYWRzT3ZlcmxhcChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIENsb2JiZXJTZXQmIHJlYWRTZXQpCit7CisgICAgQ2xvYmJlclNldE92ZXJsYXBzIGFkZFJl
YWQocmVhZFNldCk7CisgICAgTm9PcENsb2JiZXJpemUgYWRkV3JpdGU7CisgICAgY2xvYmJlcml6
ZShncmFwaCwgbm9kZSwgYWRkUmVhZCwgYWRkV3JpdGUpOworICAgIHJldHVybiBhZGRSZWFkLnJl
c3VsdCgpOworfQorCitib29sIHdyaXRlc092ZXJsYXAoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBDbG9iYmVyU2V0JiB3cml0ZVNldCkKK3sKKyAgICBOb09wQ2xvYmJlcml6ZSBhZGRSZWFkOwor
ICAgIENsb2JiZXJTZXRPdmVybGFwcyBhZGRXcml0ZSh3cml0ZVNldCk7CisgICAgY2xvYmJlcml6
ZShncmFwaCwgbm9kZSwgYWRkUmVhZCwgYWRkV3JpdGUpOworICAgIHJldHVybiBhZGRXcml0ZS5y
ZXN1bHQoKTsKK30KKworYm9vbCBkaWRXcml0ZXMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQor
eworICAgIE5vT3BDbG9iYmVyaXplIGFkZFJlYWQ7CisgICAgQ2hlY2tDbG9iYmVyaXplIGFkZFdy
aXRlOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkZFJlYWQsIGFkZFdyaXRlKTsKKyAg
ICByZXR1cm4gYWRkV3JpdGUucmVzdWx0KCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHQ2xvYmJlclNldF9oCisjZGVmaW5lIERGR0Nsb2JiZXJTZXRfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fi
c3RyYWN0SGVhcC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKK3N0cnVjdCBOb2RlOworCisvLyBGSVhN
RTogSWYgd2UgZXZlciB3YW50IHRvIGNvbXBhcmUgaWYgdHdvIG5vZGVzIGNsb2JiZXIgZWFjaCBv
dGhlciwgd2Ugc2hvdWxkCisvLyBoYXZlIGEgU21hbGxDbG9iYmVyU2V0LCB3aGljaCBqdXN0IGtl
ZXBzIGFuIGFycmF5IG9mIHRoZSBBYnN0cmFjdEhlYXBzIGFuZAorLy8gc2F0aXNmaWVzIG92ZXJs
YXBzKCkgcmVxdWVzdHMgYnkgbG9vcGluZyBvdmVyIGFsbCBvZiB0aGVtLiBUaGlzIHdpbGwgcHJv
YmFibHkKKy8vIGJlIGZhc3RlciB0aGFuIGEgZnVsbCBIYXNoTWFwIGluIGEgbG90IG9mIGNhc2Vz
LiBPciwgbWF5YmUsIHdlIGNvdWxkIGhhdmUKKy8vIENsb2JiZXJTZXQgYmUgc21hcnQgYW5kIHVz
ZSBhIHZlY3RvciBzbyBsb25nIGFzIGl0IHdhcyBzbWFsbC4KKworY2xhc3MgQ2xvYmJlclNldCB7
CitwdWJsaWM6CisgICAgQ2xvYmJlclNldCgpOworICAgIH5DbG9iYmVyU2V0KCk7CisgICAgCisg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9jbG9iYmVycy5pc0VtcHR5KCk7IH0K
KyAgICAKKyAgICB2b2lkIGFkZChBYnN0cmFjdEhlYXApOworICAgIHZvaWQgYWRkQWxsKGNvbnN0
IENsb2JiZXJTZXQmKTsKKyAgICBib29sIGNvbnRhaW5zKEFic3RyYWN0SGVhcCkgY29uc3Q7Cisg
ICAgYm9vbCBvdmVybGFwcyhBYnN0cmFjdEhlYXApIGNvbnN0OworICAgIHZvaWQgY2xlYXIoKTsK
KyAgICAKKyAgICAvLyBDYWxscyB1c2VmdWwgZm9yIGRlYnVnZ2luZyB0aGUgQ2xvYmJlclNldC4K
KyAgICAKKyAgICBIYXNoU2V0PEFic3RyYWN0SGVhcD4gZGlyZWN0KCkgY29uc3Q7CisgICAgSGFz
aFNldDxBYnN0cmFjdEhlYXA+IHN1cGVyKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEhhc2hTZXQ8QWJzdHJhY3RI
ZWFwPiBzZXRPZihib29sIGRpcmVjdCkgY29uc3Q7CisgICAgCisgICAgLy8gTWFwcyBoZWFwIHRv
OgorICAgIC8vIHRydWUgLS0+IGl0J3MgYSBkaXJlY3QgY2xvYmJlcgorICAgIC8vIGZhbHNlIC0t
PiBpdCdzIGp1c3QgYSBzdXBlcnR5cGUgb2YgYSBkaXJlY3QgY2xvYmJlcgorICAgIEhhc2hNYXA8
QWJzdHJhY3RIZWFwLCBib29sPiBtX2Nsb2JiZXJzOworfTsKKworY2xhc3MgQ2xvYmJlclNldEFk
ZCB7CitwdWJsaWM6CisgICAgQ2xvYmJlclNldEFkZChDbG9iYmVyU2V0JiBzZXQpCisgICAgICAg
IDogbV9zZXQoc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKEFi
c3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgbV9zZXQuYWRkKGhlYXApOworICAgIH0K
K3ByaXZhdGU6CisgICAgQ2xvYmJlclNldCYgbV9zZXQ7Cit9OworCitjbGFzcyBDbG9iYmVyU2V0
T3ZlcmxhcHMgeworcHVibGljOgorICAgIENsb2JiZXJTZXRPdmVybGFwcyhjb25zdCBDbG9iYmVy
U2V0JiBzZXQpCisgICAgICAgIDogbV9zZXQoc2V0KQorICAgICAgICAsIG1fcmVzdWx0KGZhbHNl
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBo
ZWFwKQorICAgIHsKKyAgICAgICAgbV9yZXN1bHQgfD0gbV9zZXQub3ZlcmxhcHMoaGVhcCk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHQ7IH0K
KyAgICAKK3ByaXZhdGU6CisgICAgY29uc3QgQ2xvYmJlclNldCYgbV9zZXQ7CisgICAgYm9vbCBt
X3Jlc3VsdDsKK307CisKK3ZvaWQgYWRkUmVhZHMoR3JhcGgmLCBOb2RlKiwgQ2xvYmJlclNldCYp
Owordm9pZCBhZGRXcml0ZXMoR3JhcGgmLCBOb2RlKiwgQ2xvYmJlclNldCYpOwordm9pZCBhZGRS
ZWFkc0FuZFdyaXRlcyhHcmFwaCYsIE5vZGUqLCBDbG9iYmVyU2V0JiByZWFkcywgQ2xvYmJlclNl
dCYgd3JpdGVzKTsKKworYm9vbCByZWFkc092ZXJsYXAoR3JhcGgmLCBOb2RlKiwgQ2xvYmJlclNl
dCYpOworYm9vbCB3cml0ZXNPdmVybGFwKEdyYXBoJiwgTm9kZSosIENsb2JiZXJTZXQmKTsKKwor
Ym9vbCBkaWRXcml0ZXMoR3JhcGgmLCBOb2RlKik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ2xvYmJlclNl
dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDbG9iYmVyaXplX2gKKyNkZWZpbmUg
REZHQ2xvYmJlcml6ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisjaW5jbHVkZSAiREZH
RWRnZVVzZXNTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0
eXBlbmFtZSBXcml0ZUZ1bmN0b3I+Cit2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlLCBSZWFkRnVuY3RvciYgcmVhZCwgV3JpdGVGdW5jdG9yJiB3cml0ZSkKK3sKKyAgICAv
LyBTb21lIG5vdGVzOgorICAgIC8vCisgICAgLy8gLSBXZSBjYW5ub3QgaG9pc3QsIG9yIHNpbmss
IGFueXRoaW5nIHRoYXQgaGFzIGVmZmVjdHMuIFRoaXMgbWVhbnMgdGhhdCB0aGUKKyAgICAvLyAg
IGVhc2llc3Qgd2F5IG9mIGluZGljYXRpbmcgdGhhdCBzb21ldGhpbmcgY2Fubm90IGJlIGhvaXN0
ZWQgaXMgdG8gY2xhaW0KKyAgICAvLyAgIHRoYXQgaXQgc2lkZS1lZmZlY3RzIHNvbWUgbWlzY2Vs
bGFuZW91cyB0aGluZy4KKyAgICAvLworICAgIC8vIC0gV2UgY2Fubm90IGhvaXN0IGZvcndhcmQt
ZXhpdGluZyBub2RlcyB3aXRob3V0IHNvbWUgYWRkaXRpb25hbCBlZmZvcnQuIEkKKyAgICAvLyAg
IGJlbGlldmUgdGhhdCB3aGF0IGl0IGNvbWVzIGRvd24gdG8gaXMgdGhhdCBmb3J3YXJkLWV4aXRp
bmcgZ2VuZXJhbGx5IGhhdmUKKyAgICAvLyAgIHRoZWlyIE5vZGVFeGl0c0ZvcndhcmQgY2xlYXJl
ZCB1cG9uIGhvaXN0LCBleGNlcHQgZm9yIGZvcndhcmQtZXhpdGluZworICAgIC8vICAgbm9kZXMg
dGhhdCB0YWtlIGJvZ3VzIHN0YXRlIGFzIHRoZWlyIGlucHV0LiBUaG9zZSBhcmUgc3Vic3RhbnRp
YWxseQorICAgIC8vICAgaGFyZGVyLiBXZSBkaXNhYmxlIGl0IGZvciBub3cuIEluIHRoZSBmdXR1
cmUgd2UgY291bGQgZW5hYmxlIGl0IGJ5IGhhdmluZworICAgIC8vICAgdmVyc2lvbnMgb2YgdGhv
c2Ugbm9kZXMgdGhhdCBiYWNrd2FyZC1leGl0IGluc3RlYWQsIGJ1dCBJJ20gbm90IGNvbnZpbmNl
ZAorICAgIC8vICAgb2YgdGhlIHNvdW5kbmVzcy4KKyAgICAvLworICAgIC8vIC0gU29tZSBub2Rl
cyBsaWUsIGFuZCBjbGFpbSB0aGF0IHRoZXkgZG8gbm90IHJlYWQgdGhlIEpTQ2VsbF9zdHJ1Y3R1
cmUuCisgICAgLy8gICBUaGVzZSBhcmUgbm9kZXMgdGhhdCB1c2UgdGhlIHN0cnVjdHVyZSBpbiBh
IHdheSB0aGF0IGRvZXMgbm90IGRlcGVuZCBvbgorICAgIC8vICAgdGhpbmdzIHRoYXQgY2hhbmdl
IHVuZGVyIHN0cnVjdHVyZSB0cmFuc2l0aW9ucy4KKyAgICAvLworICAgIC8vIC0gSXQncyBpbXBs
aWNpdGx5IHVuZGVyc3Rvb2QgdGhhdCBPU1IgZXhpdHMgcmVhZCB0aGUgd29ybGQuIFRoaXMgaXMg
d2h5IHdlCisgICAgLy8gICBnZW5lcmFsbHkgZG9uJ3QgbW92ZSBvciBlbGltaW5hdGUgc3RvcmVz
LiBFdmVyeSBub2RlIGNhbiBleGl0LCBzbyB0aGUKKyAgICAvLyAgIHJlYWQgc2V0IGRvZXMgbm90
IHJlZmxlY3QgdGhpbmdzIHRoYXQgd291bGQgYmUgcmVhZCBpZiB3ZSBleGl0ZWQuCisgICAgLy8g
ICBJbnN0ZWFkLCB0aGUgcmVhZCBzZXQgcmVmbGVjdHMgd2hhdCB0aGUgbm9kZSB3aWxsIGhhdmUg
dG8gcmVhZCBpZiBpdAorICAgIC8vICAgKmRvZXNuJ3QqIGV4aXQuCisgICAgLy8KKyAgICAvLyAt
IEJyb2FkbHksIHdlIGRvbid0IHNheSB0aGF0IHdlJ3JlIHJlYWRpbmcgc29tZXRoaW5nIGlmIHRo
YXQgc29tZXRoaW5nIGlzCisgICAgLy8gICBpbW11dGFibGUuCisgICAgLy8KKyAgICAvLyAtIFdl
IHRyeSB0byBtYWtlIHRoaXMgd29yayBldmVuIHByaW9yIHRvIHR5cGUgaW5mZXJlbmNlLCBqdXN0
IHNvIHRoYXQgd2UKKyAgICAvLyAgIGNhbiB1c2UgaXQgZm9yIElSIGR1bXBzLiBObyBwcm9taXNl
cyBvbiB3aGV0aGVyIHRoZSBhbnN3ZXJzIGFyZSBzb3VuZAorICAgIC8vICAgcHJpb3IgdG8gdHlw
ZSBpbmZlcmVuY2UgLSB0aG91Z2ggdGhleSBwcm9iYWJseSBjb3VsZCBiZSBpZiB3ZSBkaWQgc29t
ZQorICAgIC8vICAgc21hbGwgaGFja2luZy4KKyAgICAKKyAgICBpZiAoZWRnZXNVc2VTdHJ1Y3R1
cmUoZ3JhcGgsIG5vZGUpKQorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmUpOworICAgIAor
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICBjYXNl
IFdlYWtKU0NvbnN0YW50OgorICAgIGNhc2UgSWRlbnRpdHk6CisgICAgY2FzZSBQaGFudG9tOgor
ICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAg
Y2FzZSBCaXRMU2hpZnQ6CisgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgY2FzZSBCaXRVUlNoaWZ0
OgorICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgY2FzZSBB
cml0aFN1YjoKKyAgICBjYXNlIEFyaXRoTmVnYXRlOgorICAgIGNhc2UgQXJpdGhNdWw6CisgICAg
Y2FzZSBBcml0aERpdjoKKyAgICBjYXNlIEFyaXRoTW9kOgorICAgIGNhc2UgQXJpdGhBYnM6Cisg
ICAgY2FzZSBBcml0aE1pbjoKKyAgICBjYXNlIEFyaXRoTWF4OgorICAgIGNhc2UgQXJpdGhTcXJ0
OgorICAgIGNhc2UgR2V0U2NvcGU6CisgICAgY2FzZSBTa2lwU2NvcGU6CisgICAgY2FzZSBDaGVj
a0Z1bmN0aW9uOgorICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKKyAgICBjYXNlIENvbXBhcmVF
cUNvbnN0YW50OgorICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQ6CisgICAgY2FzZSBD
b21wYXJlU3RyaWN0RXE6CisgICAgY2FzZSBJc1VuZGVmaW5lZDoKKyAgICBjYXNlIElzQm9vbGVh
bjoKKyAgICBjYXNlIElzTnVtYmVyOgorICAgIGNhc2UgSXNTdHJpbmc6CisgICAgY2FzZSBMb2dp
Y2FsTm90OgorICAgIGNhc2UgSW50MzJUb0RvdWJsZToKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKKyAgICBjYXNlIE1vdkhpbnQ6CisgICAgY2Fz
ZSBab21iaWVIaW50OgorICAgIGNhc2UgVXBzaWxvbjoKKyAgICBjYXNlIFBoaToKKyAgICBjYXNl
IEZsdXNoOgorICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgIGNhc2UgU2V0QXJndW1lbnQ6Cisg
ICAgY2FzZSBJbmxpbmVTdGFydDoKKyAgICBjYXNlIEJyZWFrcG9pbnQ6CisgICAgY2FzZSBDcmVh
dGVBY3RpdmF0aW9uOgorICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgorICAgIGNhc2UgUGhhbnRv
bUFyZ3VtZW50czoKKyAgICBjYXNlIEp1bXA6CisgICAgY2FzZSBCcmFuY2g6CisgICAgY2FzZSBT
d2l0Y2g6CisgICAgY2FzZSBUaHJvdzoKKyAgICBjYXNlIEZvcmNlT1NSRXhpdDoKKyAgICBjYXNl
IEZvcndhcmRGb3JjZU9TUkV4aXQ6CisgICAgY2FzZSBSZXR1cm46CisgICAgICAgIHdyaXRlKFNp
ZGVTdGF0ZSk7CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZXNlIGFyZSBmb3J3YXJkLWV4
aXRpbmcgbm9kZXMgdGhhdCBhc3N1bWUgdGhhdCB0aGUgc3Vic2VxdWVudCBpbnN0cnVjdGlvbgor
ICAgIC8vIGlzIGEgTW92SGludCwgYW5kIHRoZXkgdHJ5IHRvIHJvbGwgZm9yd2FyZCBvdmVyIHRo
aXMgTW92SGludCBpbiB0aGVpcgorICAgIC8vIGV4ZWN1dGlvbi4gVGhpcyBtYWtlcyBob2lzdGlu
ZyB0aGVtIGltcG9zc2libGUgd2l0aG91dCBhZGRpdGlvbmFsIG1hZ2ljLiBXZQorICAgIC8vIG1h
eSBhZGQgc3VjaCBtYWdpYyBldmVudHVhbGx5LCBidXQganVzdCBub3QgeWV0LgorICAgIGNhc2Ug
VUludDMyVG9OdW1iZXI6CisgICAgY2FzZSBGb3J3YXJkSW50MzJUb0RvdWJsZToKKyAgICBjYXNl
IERvdWJsZUFzSW50MzI6CisgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgY2FzZSBDcmVhdGVUaGlzOgorICAgIGNhc2UgVG9UaGlzOgorICAg
IGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDoKKyAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxl
V2F0Y2hwb2ludDoKKyAgICBjYXNlIElzT2JqZWN0OgorICAgIGNhc2UgSXNGdW5jdGlvbjoKKyAg
ICBjYXNlIFR5cGVPZjoKKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBjYXNlIEdldEJ5SWQ6CisgICAgY2FzZSBHZXRCeUlkRmx1c2g6Cisg
ICAgY2FzZSBQdXRCeUlkOgorICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICBjYXNlIEFycmF5
UHVzaDoKKyAgICBjYXNlIEFycmF5UG9wOgorICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIENvbnN0
cnVjdDoKKyAgICBjYXNlIFRvUHJpbWl0aXZlOgorICAgIGNhc2UgSW46CisgICAgY2FzZSBHZXRN
eUFyZ3VtZW50c0xlbmd0aFNhZmU6CisgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgor
ICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAgIHN3aXRjaCAobm9kZS0+
YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgIGNhc2Ug
TnVtYmVyVXNlOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6
CisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgY2FzZSBHZXRDYWxsZWU6CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZh
cmlhYmxlcywgSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBTZXRDYWxsZWU6CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMs
IEpTU3RhY2s6OkNhbGxlZSkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
R2V0TG9jYWw6CisgICAgY2FzZSBHZXRBcmd1bWVudDoKKyAgICAgICAgcmVhZChBYnN0cmFjdEhl
YXAoVmFyaWFibGVzLCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFZhcmlhYmxl
cywgbm9kZS0+bG9jYWwoKSkpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
R2V0TG9jYWxVbmxpbmtlZDoKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBu
b2RlLT51bmxpbmtlZExvY2FsKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBj
YXNlIEdldEJ5VmFsOiB7CisgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2Rl
KCk7CisgICAgICAgIHN3aXRjaCAobW9kZS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6
U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoK
KyAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICAgICAgLy8gQXNzdW1lIHRo
ZSB3b3JzdCBzaW5jZSB3ZSBkb24ndCBoYXZlIHByb2ZpbGluZyB5ZXQuCisgICAgICAgICAgICBy
ZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAg
ICAgICB3cml0ZShTaWRlU3RhdGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgICAgICByZWFkKFdvcmxkKTsK
KyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICBpZiAobW9kZS5p
c091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAg
ICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gVGhpcyBhcHBlYXJzIHRvIHJlYWQgbm90aGluZyBiZWNhdXNl
IGl0J3Mgb25seSByZWFkaW5nIGltbXV0YWJsZSBkYXRhLgorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgICAg
IHJlYWQoQXJndW1lbnRzX3JlZ2lzdGVycyk7CisgICAgICAgICAgICByZWFkKFZhcmlhYmxlcyk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6
SW50MzI6CisgICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAg
ICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQo
QnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkSW50
MzJQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6
CisgICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICBy
ZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVy
Zmx5X3ZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkRG91YmxlUHJv
cGVydGllcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoK
KyAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJl
YWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJm
bHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRDb250aWd1b3Vz
UHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgorICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICAg
ICAgLy8gR2l2ZSB1cCBvbiBsaWZlIGZvciBub3cuCisgICAgICAgICAgICByZWFkKFdvcmxkKTsK
KyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6
OkludDE2QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFy
cmF5OgorICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgY2FzZSBBcnJh
eTo6VWludDMyQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAg
ICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICAgICAgcmVhZChUeXBlZEFycmF5
UHJvcGVydGllcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAg
ICAgCisgICAgY2FzZSBQdXRCeVZhbDoKKyAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAg
ICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dpdGNoICht
b2RlLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNp
bmdQcmVkaWN0aW9uczoKKyAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAg
Y2FzZSBBcnJheTo6VW5kZWNpZGVkOgorICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAg
ICAgICAgICAvLyBBc3N1bWUgdGhlIHdvcnN0IHNpbmNlIHdlIGRvbid0IGhhdmUgcHJvZmlsaW5n
IHlldC4KKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUoV29ybGQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6
OkZvcmNlRXhpdDoKKyAgICAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAg
ICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoK
KyAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX3JlZ2lzdGVycyk7CisgICAgICAgICAgICByZWFk
KEFyZ3VtZW50c19udW1Bcmd1bWVudHMpOworICAgICAgICAgICAgcmVhZChBcmd1bWVudHNfc2xv
d0FyZ3VtZW50cyk7CisgICAgICAgICAgICB3cml0ZShWYXJpYWJsZXMpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgICAg
ICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgeworICAgICAgICAg
ICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWFkKEJ1dHRl
cmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVu
Z3RoKTsKKyAgICAgICAgICAgIHJlYWQoSW5kZXhlZEludDMyUHJvcGVydGllcyk7CisgICAgICAg
ICAgICB3cml0ZShJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAg
cmVhZChXb3JsZCk7CisgICAgICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1
YmxpY0xlbmd0aCk7CisgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwor
ICAgICAgICAgICAgcmVhZChJbmRleGVkRG91YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICB3
cml0ZShJbmRleGVkRG91YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgICAgIGlm
IChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICBy
ZWFkKFdvcmxkKTsKKyAgICAgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVi
bGljTGVuZ3RoKTsKKyAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7Cisg
ICAgICAgICAgICByZWFkKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAg
ICB3cml0ZShJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAg
ICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIC8vIEdpdmUg
dXAgb24gbGlmZSBmb3Igbm93LgorICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAg
ICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBBcnJh
eTo6SW50OEFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5Ogor
ICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgY2FzZSBBcnJh
eTo6VWludDE2QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgICAg
ICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRB
cnJheToKKyAgICAgICAgICAgIHdyaXRlKFR5cGVkQXJyYXlQcm9wZXJ0aWVzKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIENoZWNrU3Ry
dWN0dXJlOgorICAgIGNhc2UgRm9yd2FyZENoZWNrU3RydWN0dXJlOgorICAgIGNhc2UgU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CisgICAgY2FzZSBGb3J3YXJkU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQ6CisgICAgY2FzZSBDaGVja0FycmF5OgorICAgIGNhc2UgRm9yd2FyZENo
ZWNrQXJyYXk6CisgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgorICAgIGNhc2UgSW5zdGFuY2VP
ZjoKKyAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKKyAgICAgICAgcmVhZChKU0Z1bmN0aW9u
X2V4ZWN1dGFibGUpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgorICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKKyAgICAgICAgd3JpdGUoSlND
ZWxsX3N0cnVjdHVyZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBBbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6CisgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgd3JpdGUo
SlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNl
IEdldEJ1dHRlcmZseToKKyAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlpZnk6CisgICAgY2FzZSBBcnJheWlm
eVRvU3RydWN0dXJlOgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmUpOworICAgICAgICBy
ZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1cmUp
OworICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6U3RyaW5nKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICByZWFkKFR5cGVkQXJyYXlTdG9yYWdlUG9pbnRlcik7CisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgcmVhZChB
YnN0cmFjdEhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25v
ZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlcikpOworICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAgIHdyaXRl
KEFic3RyYWN0SGVhcChOYW1lZFByb3BlcnRpZXMsIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFb
bm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHZXRBcnJheUxlbmd0aDogeworICAgICAg
ICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOworICAgICAgICBzd2l0Y2ggKG1v
ZGUudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgICAgICBjYXNlIEFy
cmF5OjpEb3VibGU6CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5n
OgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6
OkFyZ3VtZW50czoKKyAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX292ZXJyaWRlTGVuZ3RoKTsK
KyAgICAgICAgICAgIHJlYWQoQXJndW1lbnRzX251bUFyZ3VtZW50cyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJlYWQo
VHlwZWRBcnJheUxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisgICAgICAgIAorICAgIGNhc2UgR2V0TXlTY29wZToKKyAgICAgICAgcmVhZChBYnN0cmFjdEhl
YXAoVmFyaWFibGVzLCBKU1N0YWNrOjpTY29wZUNoYWluKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgY2FzZSBTZXRNeVNjb3BlOgorICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAo
VmFyaWFibGVzLCBKU1N0YWNrOjpTY29wZUNoYWluKSk7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBTa2lwVG9wU2NvcGU6CisgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZh
cmlhYmxlcywgZ3JhcGgubV9jb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBHZXRDbG9zdXJlUmVnaXN0ZXJzOgorICAg
ICAgICByZWFkKEpTVmFyaWFibGVPYmplY3RfcmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICBjYXNlIEdldENsb3N1cmVWYXI6CisgICAgICAgIHJlYWQoQWJzdHJhY3RI
ZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVtYmVyKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIFB1dENsb3N1cmVWYXI6CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVh
cChWYXJpYWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSk7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgY2FzZSBHZXRHbG9iYWxWYXI6CisgICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50
OgorICAgICAgICByZWFkKEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+cmVnaXN0ZXJQb2lu
dGVyKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFB1dEdsb2JhbFZh
cjoKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBv
aW50ZXIoKSkpOworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIE5ld09iamVjdDoKKyAgICBj
YXNlIE5ld0FycmF5OgorICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKKyAgICBjYXNlIE5ld0Fy
cmF5QnVmZmVyOgorICAgIGNhc2UgTmV3UmVnZXhwOgorICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0
OgorICAgIGNhc2UgTWFrZVJvcGU6CisgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6CisgICAg
Y2FzZSBOZXdGdW5jdGlvbjoKKyAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKKyAgICAg
ICAgcmVhZChHQ1N0YXRlKTsKKyAgICAgICAgd3JpdGUoR0NTdGF0ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgY2FzZSBSZWdFeHBFeGVjOgorICAgIGNhc2UgUmVnRXhwVGVzdDoK
KyAgICAgICAgcmVhZChSZWdFeHBTdGF0ZSk7CisgICAgICAgIHdyaXRlKFJlZ0V4cFN0YXRlKTsK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAgIGlmIChu
b2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgICAgIHJlYWQoV29y
bGQpOworICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBDb21wYXJlTGVzczoK
KyAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICBj
YXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgICAgIGlmIChncmFwaC5pc1ByZWRpY3RlZE51bWVy
aWNhbChub2RlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmVhZChXb3JsZCk7Cisg
ICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNl
IENvbXBhcmVFcToKKyAgICAgICAgaWYgKGdyYXBoLmlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUp
CisgICAgICAgICAgICB8fCBub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nVXNlKQorICAgICAg
ICAgICAgfHwgbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN0cmluZ0lkZW50VXNlKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmICgobm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IE9iamVjdFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gT2JqZWN0T3JP
dGhlclVzZSkKKyAgICAgICAgICAgICYmIChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT2Jq
ZWN0VXNlIHx8IG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNlKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHJlYWQoV29ybGQpOworICAg
ICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBU
b1N0cmluZzoKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CisgICAgICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdP
YmplY3RVc2U6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBDZWxsVXNlOgorICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICByZWFkKFdv
cmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgY2Fz
ZSBUZWFyT2ZmQWN0aXZhdGlvbjoKKyAgICAgICAgd3JpdGUoSlNWYXJpYWJsZU9iamVjdF9yZWdp
c3RlcnMpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVGVhck9mZkFyZ3Vt
ZW50czoKKyAgICAgICAgd3JpdGUoQXJndW1lbnRzX3JlZ2lzdGVycyk7CisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoKKyAgICAgICAgcmVh
ZChBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2Rl
LT5jb2RlT3JpZ2luKSkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBj
YXNlIEdldE15QXJndW1lbnRCeVZhbDoKKyAgICAgICAgcmVhZChWYXJpYWJsZXMpOworICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkOgor
ICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIGdyYXBoLmFyZ3VtZW50c1JlZ2lz
dGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKSk7CisgICAgICAgIHJldHVybjsKKworICAgIGNhc2Ug
VGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKKyAgICAgICAg
cmVhZChHQ1N0YXRlKTsKKyAgICAgICAgd3JpdGUoR0NTdGF0ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKKyAgICBjYXNlIENoZWNrV2F0Y2hk
b2dUaW1lcjoKKyAgICAgICAgcmVhZChJbnRlcm5hbFN0YXRlKTsKKyAgICAgICAgd3JpdGUoSW50
ZXJuYWxTdGF0ZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBMYXN0Tm9k
ZVR5cGU6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworY2xhc3MgTm9PcENsb2JiZXJpemUgeworcHVibGljOgorICAgIE5vT3BDbG9iYmVyaXplKCkg
eyB9CisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCkgeyB9Cit9OworCitjbGFzcyBD
aGVja0Nsb2JiZXJpemUgeworcHVibGljOgorICAgIENoZWNrQ2xvYmJlcml6ZSgpCisgICAgICAg
IDogbV9yZXN1bHQoZmFsc2UpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIG9wZXJhdG9y
KCkoQWJzdHJhY3RIZWFwKSB7IG1fcmVzdWx0ID0gdHJ1ZTsgfQorICAgIAorICAgIGJvb2wgcmVz
dWx0KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHQ7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgYm9v
bCBtX3Jlc3VsdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ2xvYmJlcml6ZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTI5NTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUJs
b2NrV2l0aEpJVFR5cGUuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCiAjaW5jbHVkZSAi
REZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJs
ZUR1bXAuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCkBAIC0yNTgsNiArMjU5LDEzIEBAIHZv
aWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgICAgIG91dC5w
cmludChjb21tYSwgZGF0YS0+Y2FzZXNbaV0udmFsdWUsICI6IiwgKmRhdGEtPmNhc2VzW2ldLnRh
cmdldCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImRlZmF1bHQ6IiwgKmRhdGEtPmZhbGxU
aHJvdWdoKTsKICAgICB9CisgICAgQ2xvYmJlclNldCByZWFkczsKKyAgICBDbG9iYmVyU2V0IHdy
aXRlczsKKyAgICBhZGRSZWFkc0FuZFdyaXRlcygqdGhpcywgbm9kZSwgcmVhZHMsIHdyaXRlcyk7
CisgICAgaWYgKCFyZWFkcy5pc0VtcHR5KCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIlI6
Iiwgc29ydGVkTGlzdER1bXAocmVhZHMuZGlyZWN0KCksICIsIikpOworICAgIGlmICghd3JpdGVz
LmlzRW1wdHkoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVzoiLCBzb3J0ZWRMaXN0RHVt
cCh3cml0ZXMuZGlyZWN0KCksICIsIikpOwogICAgIG91dC5wcmludChjb21tYSwgImJjIyIsIG5v
ZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgb3V0LnByaW50KCIpIik7
CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0No
YW5nZUxvZwkocmV2aXNpb24gMTUyOTUzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMy0wNy0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgorCisgICAgICAgIGZvdXJ0aFRpZXI6IERGRyBOb2RlcyBzaG91bGQgYmUg
YWJsZSB0byBhYnN0cmFjdGx5IHRlbGwgeW91IHdoYXQgdGhleSByZWFkIGFuZCB3aGF0IHRoZXkg
d3JpdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
ODkxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgRml4IGNvbXBpbGUgZ29vZiBpbiBzb3J0ZWRMaXN0RHVtcCgpLgorCisgICAgICAgICog
d3RmL0xpc3REdW1wLmg6CisgICAgICAgIChXVEY6OnNvcnRlZExpc3REdW1wKToKKwogMjAxMy0w
Ny0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRp
ZXI6IE5hdHVyYWxMb29wcyBzaG91bGQgYmUgYWJsZSB0byBxdWlja2x5IGFuc3dlciBxdWVzdGlv
bnMgbGlrZSAid2hhdCBsb29wcyBvd24gdGhpcyBiYXNpYyBibG9jayIKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0xpc3REdW1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTGlzdER1bXAu
aAkocmV2aXNpb24gMTUyOTUzKQorKysgU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIGlubGluZSBib29sIGxlc3NUaGFuKGNvbnN0IFQm
IGEsIGNvbnN0IFQKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBDU3RyaW5nIHNvcnRlZExpc3REdW1w
KGNvbnN0IFQmIGxpc3QsIGNvbnN0IGNoYXIqIGNvbW1hID0gIiwgIikKIHsKLSAgICByZXR1cm4g
c29ydGVkTGlzdER1bXAobGlzdCwgbGVzc1RoYW48VDo6VmFsdWVUeXBlPiwgY29tbWEpOworICAg
IHJldHVybiBzb3J0ZWRMaXN0RHVtcChsaXN0LCBsZXNzVGhhbjx0eXBlbmFtZSBUOjpWYWx1ZVR5
cGU+LCBjb21tYSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cg==
</data>
<flag name="review"
          id="228978"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>