<?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>175083</bug_id>
          
          <creation_ts>2017-08-02 11:56:31 -0700</creation_ts>
          <short_desc>REGRESSION (r219895-219897): Number of leaks on Open Source went from 9240 to 235983 and is now at 302372</short_desc>
          <delta_ts>2017-08-06 09:40:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=175082</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Matt Lewis">jlewis3</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1334330</commentid>
    <comment_count>0</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2017-08-02 11:56:31 -0700</bug_when>
    <thetext>After the build:
https://build.webkit.org/builders/Apple%20Sierra%20%28Leaks%29/builds/2321

The number of reported leaks on the Sierra leaks tester went from 9240 to 235983 according to the archive:
https://build.webkit.org/builders/Apple%20Sierra%20%28Leaks%29?numbuilds=200</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334333</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-08-02 12:04:02 -0700</bug_when>
    <thetext>I&apos;ll double check but my cleanup patch is unlikely to be the culprit. Phil should probably take a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334347</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-02 12:35:25 -0700</bug_when>
    <thetext>Also likely to have the same root cause as https://bugs.webkit.org/show_bug.cgi?id=175082</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334671</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-08-02 22:56:17 -0700</bug_when>
    <thetext>Bug 175082 was fixed, but we still have all those leaks as of r220178.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334672</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-02 22:57:03 -0700</bug_when>
    <thetext>&lt;rdar://problem/33693778&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334873</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-08-03 12:10:33 -0700</bug_when>
    <thetext>I guess it has to be due to https://trac.webkit.org/r219897 (GC should be fine with trading blocks between destructor and non-destructor blocks)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334923</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-03 13:42:03 -0700</bug_when>
    <thetext>(In reply to Alexey Proskuryakov from comment #5)
&gt; I guess it has to be due to https://trac.webkit.org/r219897 (GC should be
&gt; fine with trading blocks between destructor and non-destructor blocks)

I think so too.  I&apos;m looking at this now.

I already tried reproducing obvious things.  It appears that destructors are still called exactly like they should be in simple tests.  I&apos;m currently waiting to run the full tests...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335554</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-04 15:47:00 -0700</bug_when>
    <thetext>I can repro this by just running fast/events/gc-freeze-with-attribute-listeners.html.

In that test, the entire leak is SparseArrayValueMap-related.  It looks like some destructor is not running.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335723</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-05 13:22:33 -0700</bug_when>
    <thetext>This is so strange!  It looks as if all of the leak is that we&apos;re not GCing at the end, and `leaks` thinks that everything we allocated is a leak (because it kinda is, since we didn&apos;t GC).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335725</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-05 13:46:36 -0700</bug_when>
    <thetext>I just ran into a bug where run-webkit-tests does not clear out the leaks files from previous runs.  I was getting totally nonsensical results.

Now I&apos;m running with &quot;rm -rf WebKitBuild/Release/layout-test-results&quot; before each test run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335734</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-05 14:47:43 -0700</bug_when>
    <thetext>When I run locally, I can get a massive amount of leaks if I can get tests to timeout.  This is because the leaks tool works best when we are quiet.  If you run leaks at the moment that you are killing the process due to timeout, then things get very confusing.

On the leaks bot, there are many timeouts.

I wonder if this is the issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335736</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-05 14:49:45 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #10)
&gt; When I run locally, I can get a massive amount of leaks if I can get tests
&gt; to timeout.  This is because the leaks tool works best when we are quiet. 
&gt; If you run leaks at the moment that you are killing the process due to
&gt; timeout, then things get very confusing.
&gt; 
&gt; On the leaks bot, there are many timeouts.
&gt; 
&gt; I wonder if this is the issue.

No, there were many timeouts both before and after the regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335743</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-05 15:24:36 -0700</bug_when>
    <thetext>I think I&apos;m onto it.

workers/bomb.html has a massive leak.  If you turn off timeout, it leaks ~50MB.  It leaks less than that on the bots only because it times out.  Crazy!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335754</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-05 17:17:10 -0700</bug_when>
    <thetext>A huge chunk of the leak was that we would measure leaks while VM destruction was in progress.  This meant that as the Heap::lastChanceToFinalize() proceeds through the object graph in basically a random order and destroys objects, at some point we will have something that looks like a massive leak because lastChanceToFinalize() will have cut off some subgraphs from the roots.  I fixed this issue by making sure that DumpRenderTree waits for VM shutdown to complete before going to the next test.

Once I did that, I could easily reproduce the actual leak.  Also, if I disable the ability to trade destructor blocks, the leak goes away.

Still for why...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335756</commentid>
    <comment_count>14</comment_count>
      <attachid>317353</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-05 18:05:21 -0700</bug_when>
    <thetext>Created attachment 317353
the patch

Maybe this&apos;ll do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335757</commentid>
    <comment_count>15</comment_count>
      <attachid>317354</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-05 18:13:27 -0700</bug_when>
    <thetext>Created attachment 317354
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335758</commentid>
    <comment_count>16</comment_count>
      <attachid>317355</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-05 18:31:49 -0700</bug_when>
    <thetext>Created attachment 317355
the patch

Fix debug build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335762</commentid>
    <comment_count>17</comment_count>
      <attachid>317355</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2017-08-05 20:45:53 -0700</bug_when>
    <thetext>Comment on attachment 317355
the patch

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

r=me assuming perf is clean

&gt; Source/WTF/ChangeLog:9
&gt; +        Adds a classic ReadWriteLock class. I wrote my own because I can never remember if the pthread one is
&gt; +        guaranted to bias in favor of writers or not.

the best rationale :P

&gt; Source/WTF/wtf/Condition.h:177
&gt;      Atomic&lt;bool&gt; m_hasWaiters;

Any idea why this was protected in the first place? no matter, not relevant to this patch, just curious</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335766</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-05 21:44:03 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/220322/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335767</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-05 21:44:40 -0700</bug_when>
    <thetext>(In reply to Oliver Hunt from comment #17)
&gt; Comment on attachment 317355 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=317355&amp;action=review
&gt; 
&gt; r=me assuming perf is clean
&gt; 
&gt; &gt; Source/WTF/ChangeLog:9
&gt; &gt; +        Adds a classic ReadWriteLock class. I wrote my own because I can never remember if the pthread one is
&gt; &gt; +        guaranted to bias in favor of writers or not.
&gt; 
&gt; the best rationale :P
&gt; 
&gt; &gt; Source/WTF/wtf/Condition.h:177
&gt; &gt;      Atomic&lt;bool&gt; m_hasWaiters;
&gt; 
&gt; Any idea why this was protected in the first place? no matter, not relevant
&gt; to this patch, just curious

Because there was no construct() function, so Condition&apos;s constructor had to set ConditionBase::m_hasWaiters directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335785</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-06 09:40:04 -0700</bug_when>
    <thetext>Down to 5540 leaks on https://build.webkit.org/builders/Apple%20Sierra%20%28Leaks%29?numbuilds=200 as of build 2498, the first one to have this change.

Woohoo!!!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317353</attachid>
            <date>2017-08-05 18:05:21 -0700</date>
            <delta_ts>2017-08-05 18:13:27 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>24972</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwMjIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDE3LTA4LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UkVHUkVTU0lPTiAocjIxOTg5NS0yMTk4OTcpOiBOdW1iZXIgb2YgbGVha3Mgb24gT3BlbiBTb3Vy
Y2Ugd2VudCBmcm9tIDkyNDAgdG8gMjM1OTgzIGFuZCBpcyBub3cgYXQgMzAyMzcyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUwODMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZml4
ZXMgdGhlIGxlYWsgYnkgbWFraW5nIE1hcmtlZEJsb2NrOjpzcGVjaWFsaXplZFN3ZWVwIGNhbGwg
ZGVzdHJ1Y3RvcnMgd2hlbiB0aGUgYmxvY2sgaXMgZW1wdHksCisgICAgICAgIGV2ZW4gaWYgd2Ug
YXJlIHVzaW5nIHRoZSBwb3AgcGF0aC4KKyAgICAgICAgCisgICAgICAgIEFsc28sIHRoaXMgZml4
ZXMgSGVhcENlbGxJbmxpbmVzLmggdG8gbm8gbG9uZ2VyIGluY2x1ZGUgTWFya2VkQmxvY2tJbmxp
bmVzLmguIFRoYXQncyBwcmV0dHkKKyAgICAgICAgaW1wb3J0YW50LCBzaW5jZSBNYXJrZWRCbG9j
a0lubGluZXMuaCBpcyB0aGUgR0MncyBpbnRlcm5hbCBndXRzIC0gd2UgZG9uJ3Qgd2FudCB0byBo
YXZlIHRvIHJlY29tcGlsZQorICAgICAgICB0aGUgd29ybGQganVzdCBiZWNhdXNlIHdlIGNoYW5n
ZWQgaXQuCisgICAgICAgIAorICAgICAgICBGaW5hbGx5LCB0aGlzIGFkZHMgYSBuZXcgdGVzdGlu
ZyBTUEkgZm9yIHdhaXRpbmcgZm9yIGFsbCBWTXMgdG8gZmluaXNoIGRlc3RydWN0aW5nLiBUaGlz
IG1ha2VzIGl0CisgICAgICAgIGVhc2llciB0byBkZWJ1ZyBsZWFrcy4KKworICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXBDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SGVh
cENlbGw6OmlzTGl2ZSk6CisgICAgICAgICogaGVhcC9IZWFwQ2VsbElubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6SGVhcENlbGw6OmlzTGl2ZSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9j
YXRlV2l0aG91dENvbGxlY3RpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmVu
ZE1hcmtpbmcpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXApOgorICAgICAgICAq
IGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0u
Y3BwOgorICAgICAgICAoSlNDOjp3YWl0Rm9yVk1EZXN0cnVjdGlvbik6CisgICAgICAgIChKU0M6
OlZNOjp+Vk0pOgorCiAyMDE3LTA4LTAzICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgU1cgSURMcyBhbmQgc3R1YiBvdXQgYmFzaWMgZnVuY3Rpb25hbGl0
eS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAJKHJldmlzaW9uIDIyMDIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUg
IlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5l
cy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSAiU3VwZXJTYW1w
bGVyLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMjAyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICsz
OCw3IEBACiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2lu
Y2x1ZGUgIlN1cGVyU2FtcGxlci5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcENlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBDZWxsLmNwcAkocmV2aXNpb24gMjIwMjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcENlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsMjIgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIZWFwQ2VsbC5oIgogCisjaW5jbHVkZSAiSGVh
cENlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCitib29sIEhlYXBDZWxs
Ojppc0xpdmUoKQoreworICAgIGlmIChpc0xhcmdlQWxsb2NhdGlvbigpKQorICAgICAgICByZXR1
cm4gbGFyZ2VBbGxvY2F0aW9uKCkuaXNMaXZlKCk7CisgICAgYXV0byYgbWFya2VkQmxvY2tIYW5k
bGUgPSBtYXJrZWRCbG9jaygpLmhhbmRsZSgpOworICAgIGlmIChtYXJrZWRCbG9ja0hhbmRsZS5p
c0ZyZWVMaXN0ZWQoKSkKKyAgICAgICAgcmV0dXJuICFtYXJrZWRCbG9ja0hhbmRsZS5pc0ZyZWVM
aXN0ZWRDZWxsKHRoaXMpOworICAgIHJldHVybiBtYXJrZWRCbG9ja0hhbmRsZS5pc0xpdmUodGhp
cyk7Cit9CisKICNpZiAhQ09NUElMRVIoR0NDX09SX0NMQU5HKQogdm9pZCBIZWFwQ2VsbDo6dXNl
KCkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxs
SW5saW5lcy5oCShyZXZpc2lvbiAyMjAyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjEgKzI4LDEwIEBACiAj
aW5jbHVkZSAiQ2VsbENvbnRhaW5lci5oIgogI2luY2x1ZGUgIkhlYXBDZWxsLmgiCiAjaW5jbHVk
ZSAiTGFyZ2VBbGxvY2F0aW9uLmgiCi0jaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBI
ZWFwQ2VsbDo6aXNMaXZlKCkKLXsKLSAgICBpZiAoaXNMYXJnZUFsbG9jYXRpb24oKSkKLSAgICAg
ICAgcmV0dXJuIGxhcmdlQWxsb2NhdGlvbigpLmlzTGl2ZSgpOwotICAgIGF1dG8mIG1hcmtlZEJs
b2NrSGFuZGxlID0gbWFya2VkQmxvY2soKS5oYW5kbGUoKTsKLSAgICBpZiAobWFya2VkQmxvY2tI
YW5kbGUuaXNGcmVlTGlzdGVkKCkpCi0gICAgICAgIHJldHVybiAhbWFya2VkQmxvY2tIYW5kbGUu
aXNGcmVlTGlzdGVkQ2VsbCh0aGlzKTsKLSAgICByZXR1cm4gbWFya2VkQmxvY2tIYW5kbGUuaXNM
aXZlKHRoaXMpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcENlbGw6OmlzTGFyZ2VBbGxv
Y2F0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gTGFyZ2VBbGxvY2F0aW9uOjppc0xhcmdlQWxs
b2NhdGlvbihjb25zdF9jYXN0PEhlYXBDZWxsKj4odGhpcykpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjAyMjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzdGF0aWMg
Y29uc3RleHByIGJvb2wgdHJhZGVEZXN0cnVjdG9yQmxvY2tzID0gdHJ1ZTsKKwogTWFya2VkQWxs
b2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IoSGVhcCogaGVhcCwgU3Vic3BhY2UqIHN1YnNwYWNlLCBz
aXplX3QgY2VsbFNpemUpCiAgICAgOiBtX2ZyZWVMaXN0KGNlbGxTaXplKQogICAgICwgbV9jdXJy
ZW50QmxvY2soMCkKQEAgLTEwMiw3ICsxMDQsOCBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRy
eUFsbG9jYXRlV2l0aG91CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAK
LSAgICBpZiAoT3B0aW9uczo6c3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKSkg
eworICAgIGlmIChPcHRpb25zOjpzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygp
CisgICAgICAgICYmICh0cmFkZURlc3RydWN0b3JCbG9ja3MgfHwgIW5lZWRzRGVzdHJ1Y3Rpb24o
KSkpIHsKICAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9zdWJzcGFj
ZS0+ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGJsb2NrLT5zdWJzcGFjZSgpLT5jYW5UcmFkZUJsb2Nrc1dpdGgobV9zdWJzcGFjZSkpOwogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9zdWJzcGFjZS0+Y2FuVHJhZGVCbG9ja3NXaXRoKGJs
b2NrLT5zdWJzcGFjZSgpKSk7CkBAIC0zODIsOCArMzg1LDE0IEBAIHZvaWQgTWFya2VkQWxsb2Nh
dG9yOjplbmRNYXJraW5nKCkKICAgICAvLyBrbm93IHdoYXQga2luZCBvZiBjb2xsZWN0aW9uIGl0
IGlzLiBUaGF0IGtub3dsZWRnZSBpcyBhbHJlYWR5IGVuY29kZWQgaW4gdGhlIG1fbWFya2luZ1hZ
WgogICAgIC8vIHZlY3RvcnMuCiAgICAgCi0gICAgbV9lbXB0eSA9IG1fbGl2ZSAmIH5tX21hcmtp
bmdOb3RFbXB0eTsKLSAgICBtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgPSBtX2xpdmUgJiBtX21h
cmtpbmdOb3RFbXB0eSAmIH5tX21hcmtpbmdSZXRpcmVkOworICAgIGlmICghdHJhZGVEZXN0cnVj
dG9yQmxvY2tzICYmIG5lZWRzRGVzdHJ1Y3Rpb24oKSkgeworICAgICAgICBBU1NFUlQobV9lbXBy
dHkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5ID0gbV9saXZl
ICYgfm1fbWFya2luZ1JldGlyZWQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9lbXB0eSA9IG1f
bGl2ZSAmIH5tX21hcmtpbmdOb3RFbXB0eTsKKyAgICAgICAgbV9jYW5BbGxvY2F0ZUJ1dE5vdEVt
cHR5ID0gbV9saXZlICYgbV9tYXJraW5nTm90RW1wdHkgJiB+bV9tYXJraW5nUmV0aXJlZDsKKyAg
ICB9CisgICAgCiAgICAgaWYgKG5lZWRzRGVzdHJ1Y3Rpb24oKSkgewogICAgICAgICAvLyBUaGVy
ZSBhcmUgc29tZSBibG9ja3MgdGhhdCB3ZSBkaWRuJ3QgYWxsb2NhdGUgb3V0IG9mIGluIHRoZSBs
YXN0IGN5Y2xlLCBidXQgd2Ugc3dlcHQgdGhlbS4gVGhpcwogICAgICAgICAvLyB3aWxsIGZvcmdl
dCB0aGF0IHdlIGRpZCB0aGF0IGFuZCB3ZSB3aWxsIGVuZCB1cCBzd2VlcGluZyB0aGVtIGFnYWlu
IGFuZCBhdHRlbXB0aW5nIHRvIGNhbGwgdGhlaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyMjAyMjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjIzLDcgKzIyMyw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lh
bGl6ZWRTd2UKICAgICBhdXRvIGhhbmRsZURlYWRDZWxsID0gWyZdIChzaXplX3QgaSkgewogICAg
ICAgICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJmJs
b2NrLmF0b21zKClbaV0pOwogCi0gICAgICAgIGlmIChkZXN0cnVjdGlvbk1vZGUgIT0gQmxvY2tI
YXNOb0Rlc3RydWN0b3JzICYmIGVtcHR5TW9kZSA9PSBOb3RFbXB0eSkKKyAgICAgICAgaWYgKGRl
c3RydWN0aW9uTW9kZSAhPSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMpCiAgICAgICAgICAgICBkZXN0
cm95KGNlbGwpOwogCiAgICAgICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
CShyZXZpc2lvbiAyMjAyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1heEZyYW1l
RXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCisjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5j
bHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDIyMDIyMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkluZm8uaCIKKyNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJU
aHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL0xpc3REdW1wLmg+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
ZXN0UnVubmVyVXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZXN0UnVubmVyVXRpbHMuaAkocmV2aXNpb24gMjIwMjIzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
NCw0ICs1NCw2IEBAIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIG51bWJlck9mT1NSRXgKIAog
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5hbGl6ZVN0YXRzQXRFbmRPZlRlc3RpbmcoKTsKIAor
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3YWl0Rm9yVk1EZXN0cnVjdGlvbigpOworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlz
aW9uIDIyMDIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTksNiArOTksNyBAQAogI2luY2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0
aW9uLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlu
bGluZXMuaCIKKyNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMuaCIKICNpbmNsdWRlICJUaHVua0dl
bmVyYXRvcnMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNsdWRlICJUeXBlUHJv
ZmlsZXJMb2cuaCIKQEAgLTExMSw2ICsxMTIsNyBAQAogI2luY2x1ZGUgIldlYWtNYXBEYXRhLmgi
CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWFkV3JpdGVMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1NpbXBsZVN0
YXRzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgpAQCAtMzM5LDggKzM0MSwxNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwg
SGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgVk1JbnNwZWN0b3I6Omluc3RhbmNlKCkuYWRkKHRoaXMp
OwogfQogCitzdGF0aWMgU3RhdGljUmVhZFdyaXRlTG9jayBzX2Rlc3RydWN0aW9uTG9jazsKKwor
dm9pZCB3YWl0Rm9yVk1EZXN0cnVjdGlvbigpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhzX2Rlc3RydWN0aW9uTG9jay53cml0ZSgpKTsKK30KKwogVk06On5WTSgpCiB7CisgICAgYXV0
byBkZXN0cnVjdGlvbkxvY2tlciA9IGhvbGRMb2NrKHNfZGVzdHJ1Y3Rpb25Mb2NrLnJlYWQoKSk7
CisgICAgCiAgICAgR2lnYWNhZ2U6OnJlbW92ZURpc2FibGVDYWxsYmFjayhnaWdhY2FnZURpc2Fi
bGVkQ2FsbGJhY2ssIHRoaXMpOwogICAgIHByb21pc2VEZWZlcnJlZFRpbWVyLT5zdG9wUnVubmlu
Z1Rhc2tzKCk7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL1dURi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDIy
MykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTctMDgtMDUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAg
ICBSRUdSRVNTSU9OIChyMjE5ODk1LTIxOTg5Nyk6IE51bWJlciBvZiBsZWFrcyBvbiBPcGVuIFNv
dXJjZSB3ZW50IGZyb20gOTI0MCB0byAyMzU5ODMgYW5kIGlzIG5vdyBhdCAzMDIzNzIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTA4MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRkcyBh
IGNsYXNzaWMgUmVhZFdyaXRlTG9jayBjbGFzcy4gSSB3cm90ZSBteSBvd24gYmVjYXVzZSBJIGNh
biBuZXZlciByZW1lbWJlciBpZiB0aGUgcHRocmVhZCBvbmUgaXMKKyAgICAgICAgZ3VhcmFudGVk
IHRvIGJpYXMgaW4gZmF2b3Igb2Ygd3JpdGVycyBvciBub3QuCisKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ29uZGl0aW9uLmg6CisgICAg
ICAgIChXVEY6OkNvbmRpdGlvbkJhc2U6OmNvbnN0cnVjdCk6CisgICAgICAgIChXVEY6OkNvbmRp
dGlvbjo6Q29uZGl0aW9uKToKKyAgICAgICAgKiB3dGYvTG9jay5oOgorICAgICAgICAoV1RGOjpM
b2NrQmFzZTo6Y29uc3RydWN0KToKKyAgICAgICAgKFdURjo6TG9jazo6TG9jayk6CisgICAgICAg
ICogd3RmL1JlYWRXcml0ZUxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6UmVhZFdyaXRl
TG9ja0Jhc2U6OmNvbnN0cnVjdCk6CisgICAgICAgIChXVEY6OlJlYWRXcml0ZUxvY2tCYXNlOjpy
ZWFkTG9jayk6CisgICAgICAgIChXVEY6OlJlYWRXcml0ZUxvY2tCYXNlOjpyZWFkVW5sb2NrKToK
KyAgICAgICAgKFdURjo6UmVhZFdyaXRlTG9ja0Jhc2U6OndyaXRlTG9jayk6CisgICAgICAgIChX
VEY6OlJlYWRXcml0ZUxvY2tCYXNlOjp3cml0ZVVubG9jayk6CisgICAgICAgICogd3RmL1JlYWRX
cml0ZUxvY2suaDogQWRkZWQuCisgICAgICAgIChXVEY6OlJlYWRXcml0ZUxvY2tCYXNlOjpSZWFk
TG9jazo6dHJ5TG9jayk6CisgICAgICAgIChXVEY6OlJlYWRXcml0ZUxvY2tCYXNlOjpSZWFkTG9j
azo6bG9jayk6CisgICAgICAgIChXVEY6OlJlYWRXcml0ZUxvY2tCYXNlOjpSZWFkTG9jazo6dW5s
b2NrKToKKyAgICAgICAgKFdURjo6UmVhZFdyaXRlTG9ja0Jhc2U6OldyaXRlTG9jazo6dHJ5TG9j
ayk6CisgICAgICAgIChXVEY6OlJlYWRXcml0ZUxvY2tCYXNlOjpXcml0ZUxvY2s6OmxvY2spOgor
ICAgICAgICAoV1RGOjpSZWFkV3JpdGVMb2NrQmFzZTo6V3JpdGVMb2NrOjp1bmxvY2spOgorICAg
ICAgICAoV1RGOjpSZWFkV3JpdGVMb2NrQmFzZTo6cmVhZCk6CisgICAgICAgIChXVEY6OlJlYWRX
cml0ZUxvY2tCYXNlOjp3cml0ZSk6CisgICAgICAgIChXVEY6OlJlYWRXcml0ZUxvY2s6OlJlYWRX
cml0ZUxvY2spOgorCiAyMDE3LTA4LTAzICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgU1cgSURMcyBhbmQgc3R1YiBvdXQgYmFzaWMgZnVuY3Rpb25hbGl0
eS4KSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjIwMjIzKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogCQkwRkREQkZBNzE2NjZERkEzMDBDNTVG
RUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50
U3RyZWFtLmNwcCAqLzsgfTsKIAkJMEZFMTY0NkExQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMTY0Njgx
QjZGRkM5NjAwNDAwRTdDIC8qIExvY2suY3BwICovOyB9OwogCQkwRkU0NDc5QzFCN0FBQTAzMDA5
NDk4RUIgLyogV29yZExvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFNDQ3OUExQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmNwcCAqLzsg
fTsKKwkJMEZFQzNDNUUxRjM2OEE5NzAwRjU5QjZDIC8qIFJlYWRXcml0ZUxvY2suY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzNDNUMxRjM2OEE5
NzAwRjU5QjZDIC8qIFJlYWRXcml0ZUxvY2suY3BwICovOyB9OwogCQkwRkZGMTlEQzFCQjMzNEVC
MDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkYxOURBMUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJh
bGxlbEhlbHBlclBvb2wuY3BwICovOyB9OwogCQkxNDAyMkY0MTE4RjVDM0ZDMDA3RkYwRUIgLyog
bGliYm1hbGxvYy5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQwMjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSAqLzsgfTsKIAkJ
MTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8q
IFJBTVNpemUuY3BwICovOyB9OwpAQCAtMjI1LDYgKzIyNiw4IEBACiAJCTBGRUIzRENFMUJCNUQ2
ODQwMDlEN0FBRCAvKiBTaGFyZWRUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNoYXJlZFRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNERDAx
QkI3MzY2QjAwOUQ3QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkVDM0M0RjFGMzIzQzY4MDBGNTlCNkMgLyogQ2FnZWRQdHIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ2FnZWRQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzNDNUMxRjM2OEE5NzAwRjU5QjZDIC8qIFJlYWRXcml0ZUxvY2suY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVhZFdyaXRlTG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUMzQzVEMUYzNjhBOTcwMEY1OUI2QyAvKiBSZWFkV3JpdGVMb2NrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlYWRXcml0ZUxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZF
Qzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoTm9kZVdvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NvcGVkTGFtYmRhLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55
UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkwOSw2ICs5MTIsOCBAQAogCQkJCTBGMkFD
NTYwMUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5nZS5oICovLAogCQkJCTBGNzI1Q0FCMUM1MDQ2MTYw
MEFEOTQzQSAvKiBSYW5nZVNldC5oICovLAogCQkJCTBGODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAv
KiBSYXdQb2ludGVyLmggKi8sCisJCQkJMEZFQzNDNUMxRjM2OEE5NzAwRjU5QjZDIC8qIFJlYWRX
cml0ZUxvY2suY3BwICovLAorCQkJCTBGRUMzQzVEMUYzNjhBOTcwMEY1OUI2QyAvKiBSZWFkV3Jp
dGVMb2NrLmggKi8sCiAJCQkJMEZERTg3RjYxREZEMDdDQzAwNjRDMzkwIC8qIFJlY3Vyc2l2ZUxv
Y2tBZGFwdGVyLmggKi8sCiAJCQkJQThBNDcyRkUxNTFBODI1QjAwNDEyM0ZGIC8qIFJlZEJsYWNr
VHJlZS5oICovLAogCQkJCTI2Mjk5QjZEMTdBOUU1QjgwMEFERUJFNSAvKiBSZWYuaCAqLywKQEAg
LTEzMzcsNiArMTM0Miw3IEBACiAJCQkJQThBNDczRDgxNTFBODI1QjAwNDEyM0ZGIC8qIEhhc2hU
YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUxNjQ2QTFCNkZGQzk2MDA0MDBFN0MgLyog
TG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYwRjMyRjFERkNCRDFCMDA0MTZENkMgLyog
TG9ja2VkUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzNDNUUxRjM2OEE5
NzAwRjU5QjZDIC8qIFJlYWRXcml0ZUxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM1MzRG
MkExRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgaW4gU291cmNlcyAqLywK
IAkJCQlBOEE0NzNFNTE1MUE4MjVCMDA0MTIzRkYgLyogTWFpblRocmVhZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzNFNDE1MUE4MjVCMDA0MTIzRkYgLyogTWFpblRocmVhZE1hYy5tbSBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dURi93dGYvQ29uZGl0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvQ29uZGl0aW9uLmgJKHJldmlzaW9uIDIyMDIyMykKKysrIFNv
dXJjZS9XVEYvd3RmL0NvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCwxMSBA
QCBzdHJ1Y3QgQ29uZGl0aW9uQmFzZSB7CiAgICAgLy8gYXJlIHVubGlrZWx5IHRvIGJlIGFmZmVj
dGVkIGJ5IHRoZSBjb3N0IG9mIGNvbnZlcnNpb25zLCBpdCBpcyBiZXR0ZXIgdG8gdXNlIE1vbm90
b25pY1RpbWUuCiAgICAgdHlwZWRlZiBQYXJraW5nTG90OjpUaW1lIFRpbWU7CiAgICAgCisgICAg
dm9pZCBjb25zdHJ1Y3QoKQorICAgIHsKKyAgICAgICAgbV9oYXNXYWl0ZXJzLnN0b3JlKGZhbHNl
KTsKKyAgICB9CisgICAgCiAgICAgLy8gV2FpdCBvbiBhIHBhcmtpbmcgcXVldWUgd2hpbGUgcmVs
ZWFzaW5nIHRoZSBnaXZlbiBsb2NrLiBJdCB3aWxsIHVubG9jayB0aGUgbG9jayBqdXN0IGJlZm9y
ZQogICAgIC8vIHBhcmtpbmcsIGFuZCByZWxvY2sgaXQgdXBvbiB3YWtldXAuIFJldHVybnMgdHJ1
ZSBpZiB3ZSB3b2tlIHVwIGR1ZSB0byBzb21lIGNhbGwgdG8KICAgICAvLyBub3RpZnlPbmUoKSBv
ciBub3RpZnlBbGwoKS4gUmV0dXJucyBmYWxzZSBpZiB3ZSB3b2tlIHVwIGR1ZSB0byBhIHRpbWVv
dXQuIE5vdGUgdGhhdCB0aGlzIGZvcm0KQEAgLTE2OCw3ICsxNzMsNyBAQCBzdHJ1Y3QgQ29uZGl0
aW9uQmFzZSB7CiAgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya0FsbCgmbV9oYXNXYWl0ZXJzKTsK
ICAgICB9CiAgICAgCi1wcm90ZWN0ZWQ6Citwcml2YXRlOgogICAgIEF0b21pYzxib29sPiBtX2hh
c1dhaXRlcnM7CiB9OwogCkBAIC0xNzcsNyArMTgyLDcgQEAgY2xhc3MgQ29uZGl0aW9uIDogcHVi
bGljIENvbmRpdGlvbkJhc2UgewogcHVibGljOgogICAgIENvbmRpdGlvbigpCiAgICAgewotICAg
ICAgICBtX2hhc1dhaXRlcnMuc3RvcmUoZmFsc2UpOworICAgICAgICBjb25zdHJ1Y3QoKTsKICAg
ICB9CiB9OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvTG9jay5oCShyZXZpc2lvbiAyMjAyMjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9M
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDExIEBAIHR5cGVkZWYgTG9ja0FsZ29y
aXRobTx1aW50OF90LCAxLCAyPiBEZWYKIC8vIFRoaXMgaXMgYSBzdHJ1Y3Qgd2l0aG91dCBhIGNv
bnN0cnVjdG9yIG9yIGRlc3RydWN0b3Igc28gdGhhdCBpdCBjYW4gYmUgc3RhdGljYWxseSBpbml0
aWFsaXplZC4KIC8vIFVzZSBMb2NrIGluIGluc3RhbmNlIHZhcmlhYmxlcy4KIHN0cnVjdCBMb2Nr
QmFzZSB7CisgICAgdm9pZCBjb25zdHJ1Y3QoKQorICAgIHsKKyAgICAgICAgbV9ieXRlLnN0b3Jl
KDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIH0KKyAgICAKICAgICB2b2lkIGxv
Y2soKQogICAgIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6
bG9ja0Zhc3RBc3N1bWluZ1plcm8obV9ieXRlKSkpCkBAIC0xMTAsNyArMTE1LDcgQEAgc3RydWN0
IExvY2tCYXNlIHsKICAgICAgICAgcmV0dXJuIGlzSGVsZCgpOwogICAgIH0KIAotcHJvdGVjdGVk
OgorcHJpdmF0ZToKICAgICBmcmllbmQgc3RydWN0IFRlc3RXZWJLaXRBUEk6OkxvY2tJbnNwZWN0
b3I7CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgaXNIZWxkQml0ID0gMTsKQEAgLTEz
Niw3ICsxNDEsNyBAQCBjbGFzcyBMb2NrIDogcHVibGljIExvY2tCYXNlIHsKIHB1YmxpYzoKICAg
ICBMb2NrKCkKICAgICB7Ci0gICAgICAgIG1fYnl0ZS5zdG9yZSgwLCBzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxheGVkKTsKKyAgICAgICAgY29uc3RydWN0KCk7CiAgICAgfQogfTsKIApJbmRleDogU291
cmNlL1dURi93dGYvUmVhZFdyaXRlTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvUmVhZFdyaXRlTG9jay5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvUmVh
ZFdyaXRlTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVhZFdyaXRlTG9jay5oIgorCisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgor
CituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBSZWFkV3JpdGVMb2NrQmFzZTo6Y29uc3RydWN0KCkK
K3sKKyAgICBtX2xvY2suY29uc3RydWN0KCk7CisgICAgbV9jb25kLmNvbnN0cnVjdCgpOworICAg
IG1faXNXcml0ZUxvY2tlZCA9IGZhbHNlOworICAgIG1fbnVtUmVhZGVycyA9IDA7CisgICAgbV9u
dW1XYWl0aW5nV3JpdGVycyA9IDA7Cit9CisKK3ZvaWQgUmVhZFdyaXRlTG9ja0Jhc2U6OnJlYWRM
b2NrKCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgd2hpbGUg
KG1faXNXcml0ZUxvY2tlZCB8fCBtX251bVdhaXRpbmdXcml0ZXJzKQorICAgICAgICBtX2NvbmQu
d2FpdChtX2xvY2spOworICAgIG1fbnVtUmVhZGVycysrOworfQorCit2b2lkIFJlYWRXcml0ZUxv
Y2tCYXNlOjpyZWFkVW5sb2NrKCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9j
ayk7CisgICAgbV9udW1SZWFkZXJzLS07CisgICAgaWYgKCFtX251bVJlYWRlcnMpCisgICAgICAg
IG1fY29uZC5ub3RpZnlBbGwoKTsKK30KKwordm9pZCBSZWFkV3JpdGVMb2NrQmFzZTo6d3JpdGVM
b2NrKCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgd2hpbGUg
KG1faXNXcml0ZUxvY2tlZCB8fCBtX251bVJlYWRlcnMpIHsKKyAgICAgICAgbV9udW1XYWl0aW5n
V3JpdGVycysrOworICAgICAgICBtX2NvbmQud2FpdChtX2xvY2spOworICAgICAgICBtX251bVdh
aXRpbmdXcml0ZXJzLS07CisgICAgfQorICAgIG1faXNXcml0ZUxvY2tlZCA9IHRydWU7Cit9CisK
K3ZvaWQgUmVhZFdyaXRlTG9ja0Jhc2U6OndyaXRlVW5sb2NrKCkKK3sKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgbV9pc1dyaXRlTG9ja2VkID0gZmFsc2U7CisgICAg
bV9jb25kLm5vdGlmeUFsbCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291
cmNlL1dURi93dGYvUmVhZFdyaXRlTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1JlYWRXcml0ZUxvY2suaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9SZWFkV3Jp
dGVMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKworbmFtZXNwYWNlIFdU
RiB7CisKKy8vIFRoaXMgaXMgYSB0cmFkaXRpb25hbCByZWFkLXdyaXRlIGxvY2sgaW1wbGVtZW50
YXRpb24gdGhhdCBlbmFibGVzIGNvbmN1cnJlbmN5IGJldHdlZW4gcmVhZGVycyBzbyBsb25nIGFz
CisvLyB0aGUgcmVhZCBjcml0aWNhbCBzZWN0aW9uIGlzIGxvbmcuIENvbmN1cnJlbnQgcmVhZGVy
cyB3aWxsIGV4cGVyaWVuY2UgY29udGVudGlvbiBvbiByZWFkKCkubG9jaygpIGFuZAorLy8gcmVh
ZCgpLnVubG9jaygpIGlmIHRoZSB3b3JrIGluc2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbiBpcyBz
aG9ydC4gVGhlIG1vcmUgY29yZXMgcGFydGljaXBhdGUgaW4gcmVhZGluZywKKy8vIHRoZSBsb25n
ZXIgdGhlIHJlYWQgY3JpdGljYWwgc2VjdGlvbiBoYXMgdG8gYmUgZm9yIHRoaXMgbG9ja2luZyBz
Y2hlbWUgdG8gYmUgcHJvZml0YWJsZS4KKworc3RydWN0IFJlYWRXcml0ZUxvY2tCYXNlIHsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb25zdHJ1Y3QoKTsKKyAgICAKKyAgICAvLyBJdCdz
IGVhc2llc3QgdG8gcmVhZCBsb2NrIGxpa2UgdGhpczoKKyAgICAvLyAKKyAgICAvLyAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhyd0xvY2sucmVhZCgpKTsKKyAgICAvLworICAgIC8vIEl0J3Mg
ZWFzaWVzdCB0byB3cml0ZSBsb2NrIGxpa2UgdGhpczoKKyAgICAvLyAKKyAgICAvLyAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhyd0xvY2sud3JpdGUoKSk7CisgICAgLy8KKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCByZWFkTG9jaygpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IHJlYWRVbmxvY2soKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZUxvY2soKTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB3cml0ZVVubG9jaygpOworICAgIAorICAgIGNs
YXNzIFJlYWRMb2NrOworICAgIGNsYXNzIFdyaXRlTG9jazsKKworICAgIFJlYWRMb2NrJiByZWFk
KCk7CisgICAgV3JpdGVMb2NrJiB3cml0ZSgpOworCitwcml2YXRlOgorICAgIC8vIFRoZXNlIGZp
ZWxkcyBtdXN0IHdvcmsgd2hlbiB6ZXJvLWZpbGxlZCwgc28gdGhhdCBTdGF0aWNSZWFkV3JpdGVM
b2NrIHdvcmtzLgorICAgIExvY2tCYXNlIG1fbG9jazsKKyAgICBDb25kaXRpb25CYXNlIG1fY29u
ZDsKKyAgICBib29sIG1faXNXcml0ZUxvY2tlZDsKKyAgICB1bnNpZ25lZCBtX251bVJlYWRlcnM7
CisgICAgdW5zaWduZWQgbV9udW1XYWl0aW5nV3JpdGVyczsKK307CisKK2NsYXNzIFJlYWRXcml0
ZUxvY2tCYXNlOjpSZWFkTG9jayA6IHB1YmxpYyBSZWFkV3JpdGVMb2NrQmFzZSB7CitwdWJsaWM6
CisgICAgYm9vbCB0cnlMb2NrKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIGxvY2soKSB7
IHJlYWRMb2NrKCk7IH0KKyAgICB2b2lkIHVubG9jaygpIHsgcmVhZFVubG9jaygpOyB9Cit9Owor
CitjbGFzcyBSZWFkV3JpdGVMb2NrQmFzZTo6V3JpdGVMb2NrIDogcHVibGljIFJlYWRXcml0ZUxv
Y2tCYXNlIHsKK3B1YmxpYzoKKyAgICBib29sIHRyeUxvY2soKSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZvaWQgbG9jaygpIHsgd3JpdGVMb2NrKCk7IH0KKyAgICB2b2lkIHVubG9jaygpIHsgd3Jp
dGVVbmxvY2soKTsgfQorfTsKKyAgICAKK2lubGluZSBSZWFkV3JpdGVMb2NrQmFzZTo6UmVhZExv
Y2smIFJlYWRXcml0ZUxvY2tCYXNlOjpyZWFkKCkgeyByZXR1cm4gKnN0YXRpY19jYXN0PFJlYWRM
b2NrKj4odGhpcyk7IH0KK2lubGluZSBSZWFkV3JpdGVMb2NrQmFzZTo6V3JpdGVMb2NrJiBSZWFk
V3JpdGVMb2NrQmFzZTo6d3JpdGUoKSB7IHJldHVybiAqc3RhdGljX2Nhc3Q8V3JpdGVMb2NrKj4o
dGhpcyk7IH0KKworY2xhc3MgUmVhZFdyaXRlTG9jayA6IHB1YmxpYyBSZWFkV3JpdGVMb2NrQmFz
ZSB7CitwdWJsaWM6CisgICAgUmVhZFdyaXRlTG9jaygpCisgICAgeworICAgICAgICBjb25zdHJ1
Y3QoKTsKKyAgICB9Cit9OworCit0eXBlZGVmIFJlYWRXcml0ZUxvY2tCYXNlIFN0YXRpY1JlYWRX
cml0ZUxvY2s7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlJlYWRXcml0ZUxv
Y2s7Cit1c2luZyBXVEY6OlN0YXRpY1JlYWRXcml0ZUxvY2s7CisKSW5kZXg6IFRvb2xzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDMyMSkKKysr
IFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE3LTA4
LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lP
TiAocjIxOTg5NS0yMTk4OTcpOiBOdW1iZXIgb2YgbGVha3Mgb24gT3BlbiBTb3VyY2Ugd2VudCBm
cm9tIDkyNDAgdG8gMjM1OTgzIGFuZCBpcyBub3cgYXQgMzAyMzcyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUwODMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIExlYWtzIHJlc3VsdHMgYXJl
IHN1cGVyIGNvbmZ1c2luZyBpZiBsZWFrcyBydW5zIHdoaWxlIHNvbWUgVk1zIGFyZSBkZXN0cnVj
dGluZy4gVGhpcyBjYWxscyBhIG5ldyBTUEkKKyAgICAgICAgdG8gd2FpdCBmb3IgVk0gZGVzdHJ1
Y3Rpb25zIHRvIGZpbmlzaCBiZWZvcmUgcnVubmluZyB0aGUgbmV4dCB0ZXN0LiBUaGlzIG1ha2Vz
IGl0IGVhc2llciB0byAKKyAgICAgICAgdW5kZXJzdGFuZCBsZWFrcyByZXN1bHRzIGZyb20gd29y
a2VycyB0ZXN0cywgYW5kIGxlYWRzIHRvIGZld2VyIHJlcG9ydGVkIGxlYWtzLgorCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAocnVuVGVz
dCk6CisKIDIwMTctMDgtMDUgIFlvc2hpYWtpIEppdHN1a2F3YSAgPFlvc2hpYWtpLkppdHN1a2F3
YUBzb255LmNvbT4KIAogICAgICAgICBjaGVjay13ZWJraXQtc3R5bGU6IGZpeCBwYXRoLXNwZWNp
ZmljIHJ1bGVzIGZvciBXZWJLaXQyIHJlbmFtZQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0R1bXBSZW5kZXJUcmVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9EdW1wUmVuZGVyVHJlZS5tbQkocmV2aXNpb24gMjIwMjIzKQorKysgVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMDg1LDYg
KzIwODUsOCBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMCiAKICAg
ICBpZiAoZ2NCZXR3ZWVuVGVzdHMpCiAgICAgICAgIFtXZWJDb3JlU3RhdGlzdGljcyBnYXJiYWdl
Q29sbGVjdEphdmFTY3JpcHRPYmplY3RzXTsKKyAgICAKKyAgICBKU0M6OndhaXRGb3JWTURlc3Ry
dWN0aW9uKCk7CiAKICAgICBmcHV0cygiI0VPRlxuIiwgc3RkZXJyKTsKICAgICBmZmx1c2goc3Rk
ZXJyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317354</attachid>
            <date>2017-08-05 18:13:27 -0700</date>
            <delta_ts>2017-08-05 18:31:49 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>25523</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwMjIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDE3LTA4LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UkVHUkVTU0lPTiAocjIxOTg5NS0yMTk4OTcpOiBOdW1iZXIgb2YgbGVha3Mgb24gT3BlbiBTb3Vy
Y2Ugd2VudCBmcm9tIDkyNDAgdG8gMjM1OTgzIGFuZCBpcyBub3cgYXQgMzAyMzcyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUwODMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZml4
ZXMgdGhlIGxlYWsgYnkgbWFraW5nIE1hcmtlZEJsb2NrOjpzcGVjaWFsaXplZFN3ZWVwIGNhbGwg
ZGVzdHJ1Y3RvcnMgd2hlbiB0aGUgYmxvY2sgaXMgZW1wdHksCisgICAgICAgIGV2ZW4gaWYgd2Ug
YXJlIHVzaW5nIHRoZSBwb3AgcGF0aC4KKyAgICAgICAgCisgICAgICAgIEFsc28sIHRoaXMgZml4
ZXMgSGVhcENlbGxJbmxpbmVzLmggdG8gbm8gbG9uZ2VyIGluY2x1ZGUgTWFya2VkQmxvY2tJbmxp
bmVzLmguIFRoYXQncyBwcmV0dHkKKyAgICAgICAgaW1wb3J0YW50LCBzaW5jZSBNYXJrZWRCbG9j
a0lubGluZXMuaCBpcyB0aGUgR0MncyBpbnRlcm5hbCBndXRzIC0gd2UgZG9uJ3Qgd2FudCB0byBo
YXZlIHRvIHJlY29tcGlsZQorICAgICAgICB0aGUgd29ybGQganVzdCBiZWNhdXNlIHdlIGNoYW5n
ZWQgaXQuCisgICAgICAgIAorICAgICAgICBGaW5hbGx5LCB0aGlzIGFkZHMgYSBuZXcgdGVzdGlu
ZyBTUEkgZm9yIHdhaXRpbmcgZm9yIGFsbCBWTXMgdG8gZmluaXNoIGRlc3RydWN0aW5nLiBUaGlz
IG1ha2VzIGl0CisgICAgICAgIGVhc2llciB0byBkZWJ1ZyBsZWFrcy4KKworICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXBDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SGVh
cENlbGw6OmlzTGl2ZSk6CisgICAgICAgICogaGVhcC9IZWFwQ2VsbElubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6SGVhcENlbGw6OmlzTGl2ZSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9j
YXRlV2l0aG91dENvbGxlY3RpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmVu
ZE1hcmtpbmcpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXApOgorICAgICAgICAq
IGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0u
Y3BwOgorICAgICAgICAoSlNDOjp3YWl0Rm9yVk1EZXN0cnVjdGlvbik6CisgICAgICAgIChKU0M6
OlZNOjp+Vk0pOgorCiAyMDE3LTA4LTAzICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgU1cgSURMcyBhbmQgc3R1YiBvdXQgYmFzaWMgZnVuY3Rpb25hbGl0
eS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAJKHJldmlzaW9uIDIyMDIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUg
IlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5l
cy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSAiU3VwZXJTYW1w
bGVyLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMjAyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICsz
OCw3IEBACiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2lu
Y2x1ZGUgIlN1cGVyU2FtcGxlci5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcENlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBDZWxsLmNwcAkocmV2aXNpb24gMjIwMjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcENlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsMjIgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIZWFwQ2VsbC5oIgogCisjaW5jbHVkZSAiSGVh
cENlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCitib29sIEhlYXBDZWxs
Ojppc0xpdmUoKQoreworICAgIGlmIChpc0xhcmdlQWxsb2NhdGlvbigpKQorICAgICAgICByZXR1
cm4gbGFyZ2VBbGxvY2F0aW9uKCkuaXNMaXZlKCk7CisgICAgYXV0byYgbWFya2VkQmxvY2tIYW5k
bGUgPSBtYXJrZWRCbG9jaygpLmhhbmRsZSgpOworICAgIGlmIChtYXJrZWRCbG9ja0hhbmRsZS5p
c0ZyZWVMaXN0ZWQoKSkKKyAgICAgICAgcmV0dXJuICFtYXJrZWRCbG9ja0hhbmRsZS5pc0ZyZWVM
aXN0ZWRDZWxsKHRoaXMpOworICAgIHJldHVybiBtYXJrZWRCbG9ja0hhbmRsZS5pc0xpdmUodGhp
cyk7Cit9CisKICNpZiAhQ09NUElMRVIoR0NDX09SX0NMQU5HKQogdm9pZCBIZWFwQ2VsbDo6dXNl
KCkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxs
SW5saW5lcy5oCShyZXZpc2lvbiAyMjAyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjEgKzI4LDEwIEBACiAj
aW5jbHVkZSAiQ2VsbENvbnRhaW5lci5oIgogI2luY2x1ZGUgIkhlYXBDZWxsLmgiCiAjaW5jbHVk
ZSAiTGFyZ2VBbGxvY2F0aW9uLmgiCi0jaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBI
ZWFwQ2VsbDo6aXNMaXZlKCkKLXsKLSAgICBpZiAoaXNMYXJnZUFsbG9jYXRpb24oKSkKLSAgICAg
ICAgcmV0dXJuIGxhcmdlQWxsb2NhdGlvbigpLmlzTGl2ZSgpOwotICAgIGF1dG8mIG1hcmtlZEJs
b2NrSGFuZGxlID0gbWFya2VkQmxvY2soKS5oYW5kbGUoKTsKLSAgICBpZiAobWFya2VkQmxvY2tI
YW5kbGUuaXNGcmVlTGlzdGVkKCkpCi0gICAgICAgIHJldHVybiAhbWFya2VkQmxvY2tIYW5kbGUu
aXNGcmVlTGlzdGVkQ2VsbCh0aGlzKTsKLSAgICByZXR1cm4gbWFya2VkQmxvY2tIYW5kbGUuaXNM
aXZlKHRoaXMpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcENlbGw6OmlzTGFyZ2VBbGxv
Y2F0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gTGFyZ2VBbGxvY2F0aW9uOjppc0xhcmdlQWxs
b2NhdGlvbihjb25zdF9jYXN0PEhlYXBDZWxsKj4odGhpcykpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjAyMjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzdGF0aWMg
Y29uc3RleHByIGJvb2wgdHJhZGVEZXN0cnVjdG9yQmxvY2tzID0gdHJ1ZTsKKwogTWFya2VkQWxs
b2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IoSGVhcCogaGVhcCwgU3Vic3BhY2UqIHN1YnNwYWNlLCBz
aXplX3QgY2VsbFNpemUpCiAgICAgOiBtX2ZyZWVMaXN0KGNlbGxTaXplKQogICAgICwgbV9jdXJy
ZW50QmxvY2soMCkKQEAgLTEwMiw3ICsxMDQsOCBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRy
eUFsbG9jYXRlV2l0aG91CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAK
LSAgICBpZiAoT3B0aW9uczo6c3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKSkg
eworICAgIGlmIChPcHRpb25zOjpzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygp
CisgICAgICAgICYmICh0cmFkZURlc3RydWN0b3JCbG9ja3MgfHwgIW5lZWRzRGVzdHJ1Y3Rpb24o
KSkpIHsKICAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9zdWJzcGFj
ZS0+ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGJsb2NrLT5zdWJzcGFjZSgpLT5jYW5UcmFkZUJsb2Nrc1dpdGgobV9zdWJzcGFjZSkpOwogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9zdWJzcGFjZS0+Y2FuVHJhZGVCbG9ja3NXaXRoKGJs
b2NrLT5zdWJzcGFjZSgpKSk7CkBAIC0zODIsOCArMzg1LDE0IEBAIHZvaWQgTWFya2VkQWxsb2Nh
dG9yOjplbmRNYXJraW5nKCkKICAgICAvLyBrbm93IHdoYXQga2luZCBvZiBjb2xsZWN0aW9uIGl0
IGlzLiBUaGF0IGtub3dsZWRnZSBpcyBhbHJlYWR5IGVuY29kZWQgaW4gdGhlIG1fbWFya2luZ1hZ
WgogICAgIC8vIHZlY3RvcnMuCiAgICAgCi0gICAgbV9lbXB0eSA9IG1fbGl2ZSAmIH5tX21hcmtp
bmdOb3RFbXB0eTsKLSAgICBtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgPSBtX2xpdmUgJiBtX21h
cmtpbmdOb3RFbXB0eSAmIH5tX21hcmtpbmdSZXRpcmVkOworICAgIGlmICghdHJhZGVEZXN0cnVj
dG9yQmxvY2tzICYmIG5lZWRzRGVzdHJ1Y3Rpb24oKSkgeworICAgICAgICBBU1NFUlQobV9lbXBy
dHkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9jYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5ID0gbV9saXZl
ICYgfm1fbWFya2luZ1JldGlyZWQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9lbXB0eSA9IG1f
bGl2ZSAmIH5tX21hcmtpbmdOb3RFbXB0eTsKKyAgICAgICAgbV9jYW5BbGxvY2F0ZUJ1dE5vdEVt
cHR5ID0gbV9saXZlICYgbV9tYXJraW5nTm90RW1wdHkgJiB+bV9tYXJraW5nUmV0aXJlZDsKKyAg
ICB9CisgICAgCiAgICAgaWYgKG5lZWRzRGVzdHJ1Y3Rpb24oKSkgewogICAgICAgICAvLyBUaGVy
ZSBhcmUgc29tZSBibG9ja3MgdGhhdCB3ZSBkaWRuJ3QgYWxsb2NhdGUgb3V0IG9mIGluIHRoZSBs
YXN0IGN5Y2xlLCBidXQgd2Ugc3dlcHQgdGhlbS4gVGhpcwogICAgICAgICAvLyB3aWxsIGZvcmdl
dCB0aGF0IHdlIGRpZCB0aGF0IGFuZCB3ZSB3aWxsIGVuZCB1cCBzd2VlcGluZyB0aGVtIGFnYWlu
IGFuZCBhdHRlbXB0aW5nIHRvIGNhbGwgdGhlaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAyMjAyMjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjIzLDcgKzIyMyw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lh
bGl6ZWRTd2UKICAgICBhdXRvIGhhbmRsZURlYWRDZWxsID0gWyZdIChzaXplX3QgaSkgewogICAg
ICAgICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJmJs
b2NrLmF0b21zKClbaV0pOwogCi0gICAgICAgIGlmIChkZXN0cnVjdGlvbk1vZGUgIT0gQmxvY2tI
YXNOb0Rlc3RydWN0b3JzICYmIGVtcHR5TW9kZSA9PSBOb3RFbXB0eSkKKyAgICAgICAgaWYgKGRl
c3RydWN0aW9uTW9kZSAhPSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMpCiAgICAgICAgICAgICBkZXN0
cm95KGNlbGwpOwogCiAgICAgICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
CShyZXZpc2lvbiAyMjAyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1heEZyYW1l
RXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCisjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5j
bHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDIyMDIyMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkluZm8uaCIKKyNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJU
aHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAjaW5jbHVk
ZSA8d3RmL0xpc3REdW1wLmg+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
ZXN0UnVubmVyVXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZXN0UnVubmVyVXRpbHMuaAkocmV2aXNpb24gMjIwMjIzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
NCw0ICs1NCw2IEBAIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIG51bWJlck9mT1NSRXgKIAog
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5hbGl6ZVN0YXRzQXRFbmRPZlRlc3RpbmcoKTsKIAor
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3YWl0Rm9yVk1EZXN0cnVjdGlvbigpOworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlz
aW9uIDIyMDIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTksNiArOTksNyBAQAogI2luY2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0
aW9uLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlu
bGluZXMuaCIKKyNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMuaCIKICNpbmNsdWRlICJUaHVua0dl
bmVyYXRvcnMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNsdWRlICJUeXBlUHJv
ZmlsZXJMb2cuaCIKQEAgLTExMSw2ICsxMTIsNyBAQAogI2luY2x1ZGUgIldlYWtNYXBEYXRhLmgi
CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWFkV3JpdGVMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1NpbXBsZVN0
YXRzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgpAQCAtMzM5LDggKzM0MSwxNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwg
SGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgVk1JbnNwZWN0b3I6Omluc3RhbmNlKCkuYWRkKHRoaXMp
OwogfQogCitzdGF0aWMgU3RhdGljUmVhZFdyaXRlTG9jayBzX2Rlc3RydWN0aW9uTG9jazsKKwor
dm9pZCB3YWl0Rm9yVk1EZXN0cnVjdGlvbigpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhzX2Rlc3RydWN0aW9uTG9jay53cml0ZSgpKTsKK30KKwogVk06On5WTSgpCiB7CisgICAgYXV0
byBkZXN0cnVjdGlvbkxvY2tlciA9IGhvbGRMb2NrKHNfZGVzdHJ1Y3Rpb25Mb2NrLnJlYWQoKSk7
CisgICAgCiAgICAgR2lnYWNhZ2U6OnJlbW92ZURpc2FibGVDYWxsYmFjayhnaWdhY2FnZURpc2Fi
bGVkQ2FsbGJhY2ssIHRoaXMpOwogICAgIHByb21pc2VEZWZlcnJlZFRpbWVyLT5zdG9wUnVubmlu
Z1Rhc2tzKCk7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL1dURi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDIy
MykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMTctMDgtMDUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAg
ICBSRUdSRVNTSU9OIChyMjE5ODk1LTIxOTg5Nyk6IE51bWJlciBvZiBsZWFrcyBvbiBPcGVuIFNv
dXJjZSB3ZW50IGZyb20gOTI0MCB0byAyMzU5ODMgYW5kIGlzIG5vdyBhdCAzMDIzNzIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTA4MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRkcyBh
IGNsYXNzaWMgUmVhZFdyaXRlTG9jayBjbGFzcy4gSSB3cm90ZSBteSBvd24gYmVjYXVzZSBJIGNh
biBuZXZlciByZW1lbWJlciBpZiB0aGUgcHRocmVhZCBvbmUgaXMKKyAgICAgICAgZ3VhcmFudGVk
IHRvIGJpYXMgaW4gZmF2b3Igb2Ygd3JpdGVycyBvciBub3QuCisKKyAgICAgICAgKiBXVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ29uZGl0aW9uLmg6CisgICAg
ICAgIChXVEY6OkNvbmRpdGlvbkJhc2U6OmNvbnN0cnVjdCk6CisgICAgICAgIChXVEY6OkNvbmRp
dGlvbjo6Q29uZGl0aW9uKToKKyAgICAgICAgKiB3dGYvTG9jay5oOgorICAgICAgICAoV1RGOjpM
b2NrQmFzZTo6Y29uc3RydWN0KToKKyAgICAgICAgKFdURjo6TG9jazo6TG9jayk6CisgICAgICAg
ICogd3RmL1JlYWRXcml0ZUxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6UmVhZFdyaXRl
TG9ja0Jhc2U6OmNvbnN0cnVjdCk6CisgICAgICAgIChXVEY6OlJlYWRXcml0ZUxvY2tCYXNlOjpy
ZWFkTG9jayk6CisgICAgICAgIChXVEY6OlJlYWRXcml0ZUxvY2tCYXNlOjpyZWFkVW5sb2NrKToK
KyAgICAgICAgKFdURjo6UmVhZFdyaXRlTG9ja0Jhc2U6OndyaXRlTG9jayk6CisgICAgICAgIChX
VEY6OlJlYWRXcml0ZUxvY2tCYXNlOjp3cml0ZVVubG9jayk6CisgICAgICAgICogd3RmL1JlYWRX
cml0ZUxvY2suaDogQWRkZWQuCisgICAgICAgIChXVEY6OlJlYWRXcml0ZUxvY2tCYXNlOjpSZWFk
TG9jazo6dHJ5TG9jayk6CisgICAgICAgIChXVEY6OlJlYWRXcml0ZUxvY2tCYXNlOjpSZWFkTG9j
azo6bG9jayk6CisgICAgICAgIChXVEY6OlJlYWRXcml0ZUxvY2tCYXNlOjpSZWFkTG9jazo6dW5s
b2NrKToKKyAgICAgICAgKFdURjo6UmVhZFdyaXRlTG9ja0Jhc2U6OldyaXRlTG9jazo6dHJ5TG9j
ayk6CisgICAgICAgIChXVEY6OlJlYWRXcml0ZUxvY2tCYXNlOjpXcml0ZUxvY2s6OmxvY2spOgor
ICAgICAgICAoV1RGOjpSZWFkV3JpdGVMb2NrQmFzZTo6V3JpdGVMb2NrOjp1bmxvY2spOgorICAg
ICAgICAoV1RGOjpSZWFkV3JpdGVMb2NrQmFzZTo6cmVhZCk6CisgICAgICAgIChXVEY6OlJlYWRX
cml0ZUxvY2tCYXNlOjp3cml0ZSk6CisgICAgICAgIChXVEY6OlJlYWRXcml0ZUxvY2s6OlJlYWRX
cml0ZUxvY2spOgorCiAyMDE3LTA4LTAzICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgU1cgSURMcyBhbmQgc3R1YiBvdXQgYmFzaWMgZnVuY3Rpb25hbGl0
eS4KSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjIwMjIzKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogCQkwRkREQkZBNzE2NjZERkEzMDBDNTVG
RUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50
U3RyZWFtLmNwcCAqLzsgfTsKIAkJMEZFMTY0NkExQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMTY0Njgx
QjZGRkM5NjAwNDAwRTdDIC8qIExvY2suY3BwICovOyB9OwogCQkwRkU0NDc5QzFCN0FBQTAzMDA5
NDk4RUIgLyogV29yZExvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFNDQ3OUExQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmNwcCAqLzsg
fTsKKwkJMEZFQzNDNUUxRjM2OEE5NzAwRjU5QjZDIC8qIFJlYWRXcml0ZUxvY2suY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzNDNUMxRjM2OEE5
NzAwRjU5QjZDIC8qIFJlYWRXcml0ZUxvY2suY3BwICovOyB9OwogCQkwRkZGMTlEQzFCQjMzNEVC
MDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkYxOURBMUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJh
bGxlbEhlbHBlclBvb2wuY3BwICovOyB9OwogCQkxNDAyMkY0MTE4RjVDM0ZDMDA3RkYwRUIgLyog
bGliYm1hbGxvYy5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQwMjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSAqLzsgfTsKIAkJ
MTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8q
IFJBTVNpemUuY3BwICovOyB9OwpAQCAtMjI1LDYgKzIyNiw4IEBACiAJCTBGRUIzRENFMUJCNUQ2
ODQwMDlEN0FBRCAvKiBTaGFyZWRUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNoYXJlZFRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNERDAx
QkI3MzY2QjAwOUQ3QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkVDM0M0RjFGMzIzQzY4MDBGNTlCNkMgLyogQ2FnZWRQdHIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ2FnZWRQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzNDNUMxRjM2OEE5NzAwRjU5QjZDIC8qIFJlYWRXcml0ZUxvY2suY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVhZFdyaXRlTG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUMzQzVEMUYzNjhBOTcwMEY1OUI2QyAvKiBSZWFkV3JpdGVMb2NrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlYWRXcml0ZUxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZF
Qzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoTm9kZVdvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NvcGVkTGFtYmRhLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55
UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkwOSw2ICs5MTIsOCBAQAogCQkJCTBGMkFD
NTYwMUU4OUY3MEMwMDAxRUUzRiAvKiBSYW5nZS5oICovLAogCQkJCTBGNzI1Q0FCMUM1MDQ2MTYw
MEFEOTQzQSAvKiBSYW5nZVNldC5oICovLAogCQkJCTBGODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAv
KiBSYXdQb2ludGVyLmggKi8sCisJCQkJMEZFQzNDNUMxRjM2OEE5NzAwRjU5QjZDIC8qIFJlYWRX
cml0ZUxvY2suY3BwICovLAorCQkJCTBGRUMzQzVEMUYzNjhBOTcwMEY1OUI2QyAvKiBSZWFkV3Jp
dGVMb2NrLmggKi8sCiAJCQkJMEZERTg3RjYxREZEMDdDQzAwNjRDMzkwIC8qIFJlY3Vyc2l2ZUxv
Y2tBZGFwdGVyLmggKi8sCiAJCQkJQThBNDcyRkUxNTFBODI1QjAwNDEyM0ZGIC8qIFJlZEJsYWNr
VHJlZS5oICovLAogCQkJCTI2Mjk5QjZEMTdBOUU1QjgwMEFERUJFNSAvKiBSZWYuaCAqLywKQEAg
LTEzMzcsNiArMTM0Miw3IEBACiAJCQkJQThBNDczRDgxNTFBODI1QjAwNDEyM0ZGIC8qIEhhc2hU
YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUxNjQ2QTFCNkZGQzk2MDA0MDBFN0MgLyog
TG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYwRjMyRjFERkNCRDFCMDA0MTZENkMgLyog
TG9ja2VkUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzNDNUUxRjM2OEE5
NzAwRjU5QjZDIC8qIFJlYWRXcml0ZUxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM1MzRG
MkExRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgaW4gU291cmNlcyAqLywK
IAkJCQlBOEE0NzNFNTE1MUE4MjVCMDA0MTIzRkYgLyogTWFpblRocmVhZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzNFNDE1MUE4MjVCMDA0MTIzRkYgLyogTWFpblRocmVhZE1hYy5tbSBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIyMDIyMykK
KysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMTAs
NiArMTEwLDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgUmFuZ2UuaAogICAgIFJhbmdlU2V0LmgK
ICAgICBSYXdQb2ludGVyLmgKKyAgICBSZWFkV3JpdGVMb2NrLmgKICAgICBSZWN1cnNpdmVMb2Nr
QWRhcHRlci5oCiAgICAgUmVkQmxhY2tUcmVlLmgKICAgICBSZWYuaApAQCAtMjQxLDYgKzI0Miw3
IEBAIHNldChXVEZfU09VUkNFUwogICAgIFJBTVNpemUuY3BwCiAgICAgUmFuZG9tRGV2aWNlLmNw
cAogICAgIFJhbmRvbU51bWJlci5jcHAKKyAgICBSZWFkV3JpdGVMb2NrLmNwcAogICAgIFJlZkNv
dW50ZWRMZWFrQ291bnRlci5jcHAKICAgICBSdW5Mb29wLmNwcAogICAgIFNIQTEuY3BwCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9Db25kaXRpb24uaAkocmV2aXNpb24gMjIwMjIzKQorKysgU291cmNlL1dURi93dGYvQ29uZGl0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDExIEBAIHN0cnVjdCBDb25kaXRpb25C
YXNlIHsKICAgICAvLyBhcmUgdW5saWtlbHkgdG8gYmUgYWZmZWN0ZWQgYnkgdGhlIGNvc3Qgb2Yg
Y29udmVyc2lvbnMsIGl0IGlzIGJldHRlciB0byB1c2UgTW9ub3RvbmljVGltZS4KICAgICB0eXBl
ZGVmIFBhcmtpbmdMb3Q6OlRpbWUgVGltZTsKICAgICAKKyAgICB2b2lkIGNvbnN0cnVjdCgpCisg
ICAgeworICAgICAgICBtX2hhc1dhaXRlcnMuc3RvcmUoZmFsc2UpOworICAgIH0KKyAgICAKICAg
ICAvLyBXYWl0IG9uIGEgcGFya2luZyBxdWV1ZSB3aGlsZSByZWxlYXNpbmcgdGhlIGdpdmVuIGxv
Y2suIEl0IHdpbGwgdW5sb2NrIHRoZSBsb2NrIGp1c3QgYmVmb3JlCiAgICAgLy8gcGFya2luZywg
YW5kIHJlbG9jayBpdCB1cG9uIHdha2V1cC4gUmV0dXJucyB0cnVlIGlmIHdlIHdva2UgdXAgZHVl
IHRvIHNvbWUgY2FsbCB0bwogICAgIC8vIG5vdGlmeU9uZSgpIG9yIG5vdGlmeUFsbCgpLiBSZXR1
cm5zIGZhbHNlIGlmIHdlIHdva2UgdXAgZHVlIHRvIGEgdGltZW91dC4gTm90ZSB0aGF0IHRoaXMg
Zm9ybQpAQCAtMTY4LDcgKzE3Myw3IEBAIHN0cnVjdCBDb25kaXRpb25CYXNlIHsKICAgICAgICAg
UGFya2luZ0xvdDo6dW5wYXJrQWxsKCZtX2hhc1dhaXRlcnMpOwogICAgIH0KICAgICAKLXByb3Rl
Y3RlZDoKK3ByaXZhdGU6CiAgICAgQXRvbWljPGJvb2w+IG1faGFzV2FpdGVyczsKIH07CiAKQEAg
LTE3Nyw3ICsxODIsNyBAQCBjbGFzcyBDb25kaXRpb24gOiBwdWJsaWMgQ29uZGl0aW9uQmFzZSB7
CiBwdWJsaWM6CiAgICAgQ29uZGl0aW9uKCkKICAgICB7Ci0gICAgICAgIG1faGFzV2FpdGVycy5z
dG9yZShmYWxzZSk7CisgICAgICAgIGNvbnN0cnVjdCgpOwogICAgIH0KIH07CiAKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0xvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJ
KHJldmlzaW9uIDIyMDIyMykKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtNTIsNiArNTIsMTEgQEAgdHlwZWRlZiBMb2NrQWxnb3JpdGhtPHVpbnQ4X3QsIDEsIDI+
IERlZgogLy8gVGhpcyBpcyBhIHN0cnVjdCB3aXRob3V0IGEgY29uc3RydWN0b3Igb3IgZGVzdHJ1
Y3RvciBzbyB0aGF0IGl0IGNhbiBiZSBzdGF0aWNhbGx5IGluaXRpYWxpemVkLgogLy8gVXNlIExv
Y2sgaW4gaW5zdGFuY2UgdmFyaWFibGVzLgogc3RydWN0IExvY2tCYXNlIHsKKyAgICB2b2lkIGNv
bnN0cnVjdCgpCisgICAgeworICAgICAgICBtX2J5dGUuc3RvcmUoMCwgc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsYXhlZCk7CisgICAgfQorICAgIAogICAgIHZvaWQgbG9jaygpCiAgICAgewogICAgICAg
ICBpZiAoVU5MSUtFTFkoIURlZmF1bHRMb2NrQWxnb3JpdGhtOjpsb2NrRmFzdEFzc3VtaW5nWmVy
byhtX2J5dGUpKSkKQEAgLTExMCw3ICsxMTUsNyBAQCBzdHJ1Y3QgTG9ja0Jhc2UgewogICAgICAg
ICByZXR1cm4gaXNIZWxkKCk7CiAgICAgfQogCi1wcm90ZWN0ZWQ6Citwcml2YXRlOgogICAgIGZy
aWVuZCBzdHJ1Y3QgVGVzdFdlYktpdEFQSTo6TG9ja0luc3BlY3RvcjsKICAgICAKICAgICBzdGF0
aWMgY29uc3QgdWludDhfdCBpc0hlbGRCaXQgPSAxOwpAQCAtMTM2LDcgKzE0MSw3IEBAIGNsYXNz
IExvY2sgOiBwdWJsaWMgTG9ja0Jhc2UgewogcHVibGljOgogICAgIExvY2soKQogICAgIHsKLSAg
ICAgICAgbV9ieXRlLnN0b3JlKDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAg
ICBjb25zdHJ1Y3QoKTsKICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SZWFkV3Jp
dGVMb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SZWFkV3JpdGVMb2NrLmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9SZWFkV3JpdGVMb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFkV3Jp
dGVMb2NrLmgiCisKKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisKK25hbWVzcGFjZSBXVEYgewor
Cit2b2lkIFJlYWRXcml0ZUxvY2tCYXNlOjpjb25zdHJ1Y3QoKQoreworICAgIG1fbG9jay5jb25z
dHJ1Y3QoKTsKKyAgICBtX2NvbmQuY29uc3RydWN0KCk7CisgICAgbV9pc1dyaXRlTG9ja2VkID0g
ZmFsc2U7CisgICAgbV9udW1SZWFkZXJzID0gMDsKKyAgICBtX251bVdhaXRpbmdXcml0ZXJzID0g
MDsKK30KKwordm9pZCBSZWFkV3JpdGVMb2NrQmFzZTo6cmVhZExvY2soKQoreworICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICB3aGlsZSAobV9pc1dyaXRlTG9ja2VkIHx8
IG1fbnVtV2FpdGluZ1dyaXRlcnMpCisgICAgICAgIG1fY29uZC53YWl0KG1fbG9jayk7CisgICAg
bV9udW1SZWFkZXJzKys7Cit9CisKK3ZvaWQgUmVhZFdyaXRlTG9ja0Jhc2U6OnJlYWRVbmxvY2so
KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBtX251bVJlYWRl
cnMtLTsKKyAgICBpZiAoIW1fbnVtUmVhZGVycykKKyAgICAgICAgbV9jb25kLm5vdGlmeUFsbCgp
OworfQorCit2b2lkIFJlYWRXcml0ZUxvY2tCYXNlOjp3cml0ZUxvY2soKQoreworICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICB3aGlsZSAobV9pc1dyaXRlTG9ja2VkIHx8
IG1fbnVtUmVhZGVycykgeworICAgICAgICBtX251bVdhaXRpbmdXcml0ZXJzKys7CisgICAgICAg
IG1fY29uZC53YWl0KG1fbG9jayk7CisgICAgICAgIG1fbnVtV2FpdGluZ1dyaXRlcnMtLTsKKyAg
ICB9CisgICAgbV9pc1dyaXRlTG9ja2VkID0gdHJ1ZTsKK30KKwordm9pZCBSZWFkV3JpdGVMb2Nr
QmFzZTo6d3JpdGVVbmxvY2soKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKKyAgICBtX2lzV3JpdGVMb2NrZWQgPSBmYWxzZTsKKyAgICBtX2NvbmQubm90aWZ5QWxsKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SZWFkV3Jp
dGVMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUmVhZFdyaXRlTG9jay5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1JlYWRXcml0ZUxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4K
KyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBpcyBh
IHRyYWRpdGlvbmFsIHJlYWQtd3JpdGUgbG9jayBpbXBsZW1lbnRhdGlvbiB0aGF0IGVuYWJsZXMg
Y29uY3VycmVuY3kgYmV0d2VlbiByZWFkZXJzIHNvIGxvbmcgYXMKKy8vIHRoZSByZWFkIGNyaXRp
Y2FsIHNlY3Rpb24gaXMgbG9uZy4gQ29uY3VycmVudCByZWFkZXJzIHdpbGwgZXhwZXJpZW5jZSBj
b250ZW50aW9uIG9uIHJlYWQoKS5sb2NrKCkgYW5kCisvLyByZWFkKCkudW5sb2NrKCkgaWYgdGhl
IHdvcmsgaW5zaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlzIHNob3J0LiBUaGUgbW9yZSBjb3Jl
cyBwYXJ0aWNpcGF0ZSBpbiByZWFkaW5nLAorLy8gdGhlIGxvbmdlciB0aGUgcmVhZCBjcml0aWNh
bCBzZWN0aW9uIGhhcyB0byBiZSBmb3IgdGhpcyBsb2NraW5nIHNjaGVtZSB0byBiZSBwcm9maXRh
YmxlLgorCitzdHJ1Y3QgUmVhZFdyaXRlTG9ja0Jhc2UgeworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGNvbnN0cnVjdCgpOworICAgIAorICAgIC8vIEl0J3MgZWFzaWVzdCB0byByZWFkIGxv
Y2sgbGlrZSB0aGlzOgorICAgIC8vIAorICAgIC8vICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KHJ3TG9jay5yZWFkKCkpOworICAgIC8vCisgICAgLy8gSXQncyBlYXNpZXN0IHRvIHdyaXRlIGxv
Y2sgbGlrZSB0aGlzOgorICAgIC8vIAorICAgIC8vICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KHJ3TG9jay53cml0ZSgpKTsKKyAgICAvLworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJl
YWRMb2NrKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVhZFVubG9jaygpOworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHdyaXRlTG9jaygpOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIHdyaXRlVW5sb2NrKCk7CisgICAgCisgICAgY2xhc3MgUmVhZExvY2s7CisgICAg
Y2xhc3MgV3JpdGVMb2NrOworCisgICAgUmVhZExvY2smIHJlYWQoKTsKKyAgICBXcml0ZUxvY2sm
IHdyaXRlKCk7CisKK3ByaXZhdGU6CisgICAgLy8gVGhlc2UgZmllbGRzIG11c3Qgd29yayB3aGVu
IHplcm8tZmlsbGVkLCBzbyB0aGF0IFN0YXRpY1JlYWRXcml0ZUxvY2sgd29ya3MuCisgICAgTG9j
a0Jhc2UgbV9sb2NrOworICAgIENvbmRpdGlvbkJhc2UgbV9jb25kOworICAgIGJvb2wgbV9pc1dy
aXRlTG9ja2VkOworICAgIHVuc2lnbmVkIG1fbnVtUmVhZGVyczsKKyAgICB1bnNpZ25lZCBtX251
bVdhaXRpbmdXcml0ZXJzOworfTsKKworY2xhc3MgUmVhZFdyaXRlTG9ja0Jhc2U6OlJlYWRMb2Nr
IDogcHVibGljIFJlYWRXcml0ZUxvY2tCYXNlIHsKK3B1YmxpYzoKKyAgICBib29sIHRyeUxvY2so
KSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgbG9jaygpIHsgcmVhZExvY2soKTsgfQorICAg
IHZvaWQgdW5sb2NrKCkgeyByZWFkVW5sb2NrKCk7IH0KK307CisKK2NsYXNzIFJlYWRXcml0ZUxv
Y2tCYXNlOjpXcml0ZUxvY2sgOiBwdWJsaWMgUmVhZFdyaXRlTG9ja0Jhc2UgeworcHVibGljOgor
ICAgIGJvb2wgdHJ5TG9jaygpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBsb2NrKCkgeyB3
cml0ZUxvY2soKTsgfQorICAgIHZvaWQgdW5sb2NrKCkgeyB3cml0ZVVubG9jaygpOyB9Cit9Owor
ICAgIAoraW5saW5lIFJlYWRXcml0ZUxvY2tCYXNlOjpSZWFkTG9jayYgUmVhZFdyaXRlTG9ja0Jh
c2U6OnJlYWQoKSB7IHJldHVybiAqc3RhdGljX2Nhc3Q8UmVhZExvY2sqPih0aGlzKTsgfQoraW5s
aW5lIFJlYWRXcml0ZUxvY2tCYXNlOjpXcml0ZUxvY2smIFJlYWRXcml0ZUxvY2tCYXNlOjp3cml0
ZSgpIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxXcml0ZUxvY2sqPih0aGlzKTsgfQorCitjbGFzcyBS
ZWFkV3JpdGVMb2NrIDogcHVibGljIFJlYWRXcml0ZUxvY2tCYXNlIHsKK3B1YmxpYzoKKyAgICBS
ZWFkV3JpdGVMb2NrKCkKKyAgICB7CisgICAgICAgIGNvbnN0cnVjdCgpOworICAgIH0KK307CisK
K3R5cGVkZWYgUmVhZFdyaXRlTG9ja0Jhc2UgU3RhdGljUmVhZFdyaXRlTG9jazsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UmVhZFdyaXRlTG9jazsKK3VzaW5nIFdURjo6U3Rh
dGljUmVhZFdyaXRlTG9jazsKKwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwMzIxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMDgtMDUgIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OIChyMjE5ODk1LTIxOTg5Nyk6
IE51bWJlciBvZiBsZWFrcyBvbiBPcGVuIFNvdXJjZSB3ZW50IGZyb20gOTI0MCB0byAyMzU5ODMg
YW5kIGlzIG5vdyBhdCAzMDIzNzIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NTA4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgTGVha3MgcmVzdWx0cyBhcmUgc3VwZXIgY29uZnVzaW5nIGlm
IGxlYWtzIHJ1bnMgd2hpbGUgc29tZSBWTXMgYXJlIGRlc3RydWN0aW5nLiBUaGlzIGNhbGxzIGEg
bmV3IFNQSQorICAgICAgICB0byB3YWl0IGZvciBWTSBkZXN0cnVjdGlvbnMgdG8gZmluaXNoIGJl
Zm9yZSBydW5uaW5nIHRoZSBuZXh0IHRlc3QuIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIAorICAg
ICAgICB1bmRlcnN0YW5kIGxlYWtzIHJlc3VsdHMgZnJvbSB3b3JrZXJzIHRlc3RzLCBhbmQgbGVh
ZHMgdG8gZmV3ZXIgcmVwb3J0ZWQgbGVha3MuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9t
YWMvRHVtcFJlbmRlclRyZWUubW06CisgICAgICAgIChydW5UZXN0KToKKwogMjAxNy0wOC0wNSAg
WW9zaGlha2kgSml0c3VrYXdhICA8WW9zaGlha2kuSml0c3VrYXdhQHNvbnkuY29tPgogCiAgICAg
ICAgIGNoZWNrLXdlYmtpdC1zdHlsZTogZml4IHBhdGgtc3BlY2lmaWMgcnVsZXMgZm9yIFdlYktp
dDIgcmVuYW1lCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVl
Lm1tCShyZXZpc2lvbiAyMjAyMjMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJl
bmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwODUsNiArMjA4NSw4IEBAIHN0YXRpYyB2
b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dEwKIAogICAgIGlmIChnY0JldHdlZW5UZXN0
cykKICAgICAgICAgW1dlYkNvcmVTdGF0aXN0aWNzIGdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9i
amVjdHNdOworICAgIAorICAgIEpTQzo6d2FpdEZvclZNRGVzdHJ1Y3Rpb24oKTsKIAogICAgIGZw
dXRzKCIjRU9GXG4iLCBzdGRlcnIpOwogICAgIGZmbHVzaChzdGRlcnIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317355</attachid>
            <date>2017-08-05 18:31:49 -0700</date>
            <delta_ts>2017-08-05 20:45:53 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>25522</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwMjIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDE3LTA4LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UkVHUkVTU0lPTiAocjIxOTg5NS0yMTk4OTcpOiBOdW1iZXIgb2YgbGVha3Mgb24gT3BlbiBTb3Vy
Y2Ugd2VudCBmcm9tIDkyNDAgdG8gMjM1OTgzIGFuZCBpcyBub3cgYXQgMzAyMzcyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUwODMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZml4
ZXMgdGhlIGxlYWsgYnkgbWFraW5nIE1hcmtlZEJsb2NrOjpzcGVjaWFsaXplZFN3ZWVwIGNhbGwg
ZGVzdHJ1Y3RvcnMgd2hlbiB0aGUgYmxvY2sgaXMgZW1wdHksCisgICAgICAgIGV2ZW4gaWYgd2Ug
YXJlIHVzaW5nIHRoZSBwb3AgcGF0aC4KKyAgICAgICAgCisgICAgICAgIEFsc28sIHRoaXMgZml4
ZXMgSGVhcENlbGxJbmxpbmVzLmggdG8gbm8gbG9uZ2VyIGluY2x1ZGUgTWFya2VkQmxvY2tJbmxp
bmVzLmguIFRoYXQncyBwcmV0dHkKKyAgICAgICAgaW1wb3J0YW50LCBzaW5jZSBNYXJrZWRCbG9j
a0lubGluZXMuaCBpcyB0aGUgR0MncyBpbnRlcm5hbCBndXRzIC0gd2UgZG9uJ3Qgd2FudCB0byBo
YXZlIHRvIHJlY29tcGlsZQorICAgICAgICB0aGUgd29ybGQganVzdCBiZWNhdXNlIHdlIGNoYW5n
ZWQgaXQuCisgICAgICAgIAorICAgICAgICBGaW5hbGx5LCB0aGlzIGFkZHMgYSBuZXcgdGVzdGlu
ZyBTUEkgZm9yIHdhaXRpbmcgZm9yIGFsbCBWTXMgdG8gZmluaXNoIGRlc3RydWN0aW5nLiBUaGlz
IG1ha2VzIGl0CisgICAgICAgIGVhc2llciB0byBkZWJ1ZyBsZWFrcy4KKworICAgICAgICAqIGJ5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXBDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SGVh
cENlbGw6OmlzTGl2ZSk6CisgICAgICAgICogaGVhcC9IZWFwQ2VsbElubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6SGVhcENlbGw6OmlzTGl2ZSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9j
YXRlV2l0aG91dENvbGxlY3RpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmVu
ZE1hcmtpbmcpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXApOgorICAgICAgICAq
IGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0u
Y3BwOgorICAgICAgICAoSlNDOjp3YWl0Rm9yVk1EZXN0cnVjdGlvbik6CisgICAgICAgIChKU0M6
OlZNOjp+Vk0pOgorCiAyMDE3LTA4LTAzICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgU1cgSURMcyBhbmQgc3R1YiBvdXQgYmFzaWMgZnVuY3Rpb25hbGl0
eS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAJKHJldmlzaW9uIDIyMDIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUg
IlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5l
cy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSAiU3VwZXJTYW1w
bGVyLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMjAyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICsz
OCw3IEBACiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2lu
Y2x1ZGUgIlN1cGVyU2FtcGxlci5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcENlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBDZWxsLmNwcAkocmV2aXNpb24gMjIwMjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcENlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsMjIgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIZWFwQ2VsbC5oIgogCisjaW5jbHVkZSAiSGVh
cENlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCitib29sIEhlYXBDZWxs
Ojppc0xpdmUoKQoreworICAgIGlmIChpc0xhcmdlQWxsb2NhdGlvbigpKQorICAgICAgICByZXR1
cm4gbGFyZ2VBbGxvY2F0aW9uKCkuaXNMaXZlKCk7CisgICAgYXV0byYgbWFya2VkQmxvY2tIYW5k
bGUgPSBtYXJrZWRCbG9jaygpLmhhbmRsZSgpOworICAgIGlmIChtYXJrZWRCbG9ja0hhbmRsZS5p
c0ZyZWVMaXN0ZWQoKSkKKyAgICAgICAgcmV0dXJuICFtYXJrZWRCbG9ja0hhbmRsZS5pc0ZyZWVM
aXN0ZWRDZWxsKHRoaXMpOworICAgIHJldHVybiBtYXJrZWRCbG9ja0hhbmRsZS5pc0xpdmUodGhp
cyk7Cit9CisKICNpZiAhQ09NUElMRVIoR0NDX09SX0NMQU5HKQogdm9pZCBIZWFwQ2VsbDo6dXNl
KCkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxsSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBDZWxs
SW5saW5lcy5oCShyZXZpc2lvbiAyMjAyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjEgKzI4LDEwIEBACiAj
aW5jbHVkZSAiQ2VsbENvbnRhaW5lci5oIgogI2luY2x1ZGUgIkhlYXBDZWxsLmgiCiAjaW5jbHVk
ZSAiTGFyZ2VBbGxvY2F0aW9uLmgiCi0jaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBI
ZWFwQ2VsbDo6aXNMaXZlKCkKLXsKLSAgICBpZiAoaXNMYXJnZUFsbG9jYXRpb24oKSkKLSAgICAg
ICAgcmV0dXJuIGxhcmdlQWxsb2NhdGlvbigpLmlzTGl2ZSgpOwotICAgIGF1dG8mIG1hcmtlZEJs
b2NrSGFuZGxlID0gbWFya2VkQmxvY2soKS5oYW5kbGUoKTsKLSAgICBpZiAobWFya2VkQmxvY2tI
YW5kbGUuaXNGcmVlTGlzdGVkKCkpCi0gICAgICAgIHJldHVybiAhbWFya2VkQmxvY2tIYW5kbGUu
aXNGcmVlTGlzdGVkQ2VsbCh0aGlzKTsKLSAgICByZXR1cm4gbWFya2VkQmxvY2tIYW5kbGUuaXNM
aXZlKHRoaXMpOwotfQotCiBBTFdBWVNfSU5MSU5FIGJvb2wgSGVhcENlbGw6OmlzTGFyZ2VBbGxv
Y2F0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gTGFyZ2VBbGxvY2F0aW9uOjppc0xhcmdlQWxs
b2NhdGlvbihjb25zdF9jYXN0PEhlYXBDZWxsKj4odGhpcykpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMjAyMjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzdGF0aWMg
Y29uc3RleHByIGJvb2wgdHJhZGVEZXN0cnVjdG9yQmxvY2tzID0gdHJ1ZTsKKwogTWFya2VkQWxs
b2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IoSGVhcCogaGVhcCwgU3Vic3BhY2UqIHN1YnNwYWNlLCBz
aXplX3QgY2VsbFNpemUpCiAgICAgOiBtX2ZyZWVMaXN0KGNlbGxTaXplKQogICAgICwgbV9jdXJy
ZW50QmxvY2soMCkKQEAgLTEwMiw3ICsxMDQsOCBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRy
eUFsbG9jYXRlV2l0aG91CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAK
LSAgICBpZiAoT3B0aW9uczo6c3RlYWxFbXB0eUJsb2Nrc0Zyb21PdGhlckFsbG9jYXRvcnMoKSkg
eworICAgIGlmIChPcHRpb25zOjpzdGVhbEVtcHR5QmxvY2tzRnJvbU90aGVyQWxsb2NhdG9ycygp
CisgICAgICAgICYmICh0cmFkZURlc3RydWN0b3JCbG9ja3MgfHwgIW5lZWRzRGVzdHJ1Y3Rpb24o
KSkpIHsKICAgICAgICAgaWYgKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrID0gbV9zdWJzcGFj
ZS0+ZmluZEVtcHR5QmxvY2tUb1N0ZWFsKCkpIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGJsb2NrLT5zdWJzcGFjZSgpLT5jYW5UcmFkZUJsb2Nrc1dpdGgobV9zdWJzcGFjZSkpOwogICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9zdWJzcGFjZS0+Y2FuVHJhZGVCbG9ja3NXaXRoKGJs
b2NrLT5zdWJzcGFjZSgpKSk7CkBAIC0zODIsOCArMzg1LDE0IEBAIHZvaWQgTWFya2VkQWxsb2Nh
dG9yOjplbmRNYXJraW5nKCkKICAgICAvLyBrbm93IHdoYXQga2luZCBvZiBjb2xsZWN0aW9uIGl0
IGlzLiBUaGF0IGtub3dsZWRnZSBpcyBhbHJlYWR5IGVuY29kZWQgaW4gdGhlIG1fbWFya2luZ1hZ
WgogICAgIC8vIHZlY3RvcnMuCiAgICAgCi0gICAgbV9lbXB0eSA9IG1fbGl2ZSAmIH5tX21hcmtp
bmdOb3RFbXB0eTsKLSAgICBtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgPSBtX2xpdmUgJiBtX21h
cmtpbmdOb3RFbXB0eSAmIH5tX21hcmtpbmdSZXRpcmVkOworICAgIGlmICghdHJhZGVEZXN0cnVj
dG9yQmxvY2tzICYmIG5lZWRzRGVzdHJ1Y3Rpb24oKSkgeworICAgICAgICBBU1NFUlQobV9lbXB0
eS5pc0VtcHR5KCkpOworICAgICAgICBtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgPSBtX2xpdmUg
JiB+bV9tYXJraW5nUmV0aXJlZDsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2VtcHR5ID0gbV9s
aXZlICYgfm1fbWFya2luZ05vdEVtcHR5OworICAgICAgICBtX2NhbkFsbG9jYXRlQnV0Tm90RW1w
dHkgPSBtX2xpdmUgJiBtX21hcmtpbmdOb3RFbXB0eSAmIH5tX21hcmtpbmdSZXRpcmVkOworICAg
IH0KKyAgICAKICAgICBpZiAobmVlZHNEZXN0cnVjdGlvbigpKSB7CiAgICAgICAgIC8vIFRoZXJl
IGFyZSBzb21lIGJsb2NrcyB0aGF0IHdlIGRpZG4ndCBhbGxvY2F0ZSBvdXQgb2YgaW4gdGhlIGxh
c3QgY3ljbGUsIGJ1dCB3ZSBzd2VwdCB0aGVtLiBUaGlzCiAgICAgICAgIC8vIHdpbGwgZm9yZ2V0
IHRoYXQgd2UgZGlkIHRoYXQgYW5kIHdlIHdpbGwgZW5kIHVwIHN3ZWVwaW5nIHRoZW0gYWdhaW4g
YW5kIGF0dGVtcHRpbmcgdG8gY2FsbCB0aGVpcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDIyMDIyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFs
aXplZFN3ZQogICAgIGF1dG8gaGFuZGxlRGVhZENlbGwgPSBbJl0gKHNpemVfdCBpKSB7CiAgICAg
ICAgIEhlYXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmYmxv
Y2suYXRvbXMoKVtpXSk7CiAKLSAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSAhPSBCbG9ja0hh
c05vRGVzdHJ1Y3RvcnMgJiYgZW1wdHlNb2RlID09IE5vdEVtcHR5KQorICAgICAgICBpZiAoZGVz
dHJ1Y3Rpb25Nb2RlICE9IEJsb2NrSGFzTm9EZXN0cnVjdG9ycykKICAgICAgICAgICAgIGRlc3Ry
b3koY2VsbCk7CiAKICAgICAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHJldmlzaW9uIDIyMDIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNs
dWRlICJUaHVua0dlbmVyYXRvcnMuaCIKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMjIwMjIzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTgsNiArNTgsNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgogI2luY2x1ZGUgIlRo
dW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRl
IDx3dGYvTGlzdER1bXAuaD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
c3RSdW5uZXJVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Rlc3RSdW5uZXJVdGlscy5oCShyZXZpc2lvbiAyMjAyMjMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVyVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0
LDQgKzU0LDYgQEAgSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgbnVtYmVyT2ZPU1JFeAogCiBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmFsaXplU3RhdHNBdEVuZE9mVGVzdGluZygpOwogCitK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHdhaXRGb3JWTURlc3RydWN0aW9uKCk7CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNp
b24gMjIwMjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OSw2ICs5OSw3IEBACiAjaW5jbHVkZSAiU3RyaWN0RXZhbEFjdGl2YXRp
b24uaCIKICNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlRlc3RSdW5uZXJVdGlscy5oIgogI2luY2x1ZGUgIlRodW5rR2Vu
ZXJhdG9ycy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9m
aWxlckxvZy5oIgpAQCAtMTExLDYgKzExMiw3IEBACiAjaW5jbHVkZSAiV2Vha01hcERhdGEuaCIK
ICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvUHJvY2Vzc0lELmg+
CisjaW5jbHVkZSA8d3RmL1JlYWRXcml0ZUxvY2suaD4KICNpbmNsdWRlIDx3dGYvU2ltcGxlU3Rh
dHMuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CkBAIC0zMzksOCArMzQxLDE3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBI
ZWFwVHlwZSBoZWFwVHlwZSkKICAgICBWTUluc3BlY3Rvcjo6aW5zdGFuY2UoKS5hZGQodGhpcyk7
CiB9CiAKK3N0YXRpYyBTdGF0aWNSZWFkV3JpdGVMb2NrIHNfZGVzdHJ1Y3Rpb25Mb2NrOworCit2
b2lkIHdhaXRGb3JWTURlc3RydWN0aW9uKCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KHNfZGVzdHJ1Y3Rpb25Mb2NrLndyaXRlKCkpOworfQorCiBWTTo6flZNKCkKIHsKKyAgICBhdXRv
IGRlc3RydWN0aW9uTG9ja2VyID0gaG9sZExvY2soc19kZXN0cnVjdGlvbkxvY2sucmVhZCgpKTsK
KyAgICAKICAgICBHaWdhY2FnZTo6cmVtb3ZlRGlzYWJsZUNhbGxiYWNrKGdpZ2FjYWdlRGlzYWJs
ZWRDYWxsYmFjaywgdGhpcyk7CiAgICAgcHJvbWlzZURlZmVycmVkVGltZXItPnN0b3BSdW5uaW5n
VGFza3MoKTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwMjIz
KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBA
QAorMjAxNy0wOC0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFJFR1JFU1NJT04gKHIyMTk4OTUtMjE5ODk3KTogTnVtYmVyIG9mIGxlYWtzIG9uIE9wZW4gU291
cmNlIHdlbnQgZnJvbSA5MjQwIHRvIDIzNTk4MyBhbmQgaXMgbm93IGF0IDMwMjM3MgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MDgzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRzIGEg
Y2xhc3NpYyBSZWFkV3JpdGVMb2NrIGNsYXNzLiBJIHdyb3RlIG15IG93biBiZWNhdXNlIEkgY2Fu
IG5ldmVyIHJlbWVtYmVyIGlmIHRoZSBwdGhyZWFkIG9uZSBpcworICAgICAgICBndWFyYW50ZWQg
dG8gYmlhcyBpbiBmYXZvciBvZiB3cml0ZXJzIG9yIG5vdC4KKworICAgICAgICAqIFdURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9Db25kaXRpb24uaDoKKyAgICAg
ICAgKFdURjo6Q29uZGl0aW9uQmFzZTo6Y29uc3RydWN0KToKKyAgICAgICAgKFdURjo6Q29uZGl0
aW9uOjpDb25kaXRpb24pOgorICAgICAgICAqIHd0Zi9Mb2NrLmg6CisgICAgICAgIChXVEY6Okxv
Y2tCYXNlOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV1RGOjpMb2NrOjpMb2NrKToKKyAgICAgICAg
KiB3dGYvUmVhZFdyaXRlTG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpSZWFkV3JpdGVM
b2NrQmFzZTo6Y29uc3RydWN0KToKKyAgICAgICAgKFdURjo6UmVhZFdyaXRlTG9ja0Jhc2U6OnJl
YWRMb2NrKToKKyAgICAgICAgKFdURjo6UmVhZFdyaXRlTG9ja0Jhc2U6OnJlYWRVbmxvY2spOgor
ICAgICAgICAoV1RGOjpSZWFkV3JpdGVMb2NrQmFzZTo6d3JpdGVMb2NrKToKKyAgICAgICAgKFdU
Rjo6UmVhZFdyaXRlTG9ja0Jhc2U6OndyaXRlVW5sb2NrKToKKyAgICAgICAgKiB3dGYvUmVhZFdy
aXRlTG9jay5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6UmVhZFdyaXRlTG9ja0Jhc2U6OlJlYWRM
b2NrOjp0cnlMb2NrKToKKyAgICAgICAgKFdURjo6UmVhZFdyaXRlTG9ja0Jhc2U6OlJlYWRMb2Nr
Ojpsb2NrKToKKyAgICAgICAgKFdURjo6UmVhZFdyaXRlTG9ja0Jhc2U6OlJlYWRMb2NrOjp1bmxv
Y2spOgorICAgICAgICAoV1RGOjpSZWFkV3JpdGVMb2NrQmFzZTo6V3JpdGVMb2NrOjp0cnlMb2Nr
KToKKyAgICAgICAgKFdURjo6UmVhZFdyaXRlTG9ja0Jhc2U6OldyaXRlTG9jazo6bG9jayk6Cisg
ICAgICAgIChXVEY6OlJlYWRXcml0ZUxvY2tCYXNlOjpXcml0ZUxvY2s6OnVubG9jayk6CisgICAg
ICAgIChXVEY6OlJlYWRXcml0ZUxvY2tCYXNlOjpyZWFkKToKKyAgICAgICAgKFdURjo6UmVhZFdy
aXRlTG9ja0Jhc2U6OndyaXRlKToKKyAgICAgICAgKFdURjo6UmVhZFdyaXRlTG9jazo6UmVhZFdy
aXRlTG9jayk6CisKIDIwMTctMDgtMDMgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBTVyBJRExzIGFuZCBzdHViIG91dCBiYXNpYyBmdW5jdGlvbmFsaXR5
LgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyMjAyMjMpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAJCTBGRERCRkE3MTY2NkRGQTMwMEM1NUZF
RiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNTE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRT
dHJlYW0uY3BwICovOyB9OwogCQkwRkUxNjQ2QTFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUxNjQ2ODFC
NkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgKi87IH07CiAJCTBGRTQ0NzlDMUI3QUFBMDMwMDk0
OThFQiAvKiBXb3JkTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suY3BwICovOyB9
OworCQkwRkVDM0M1RTFGMzY4QTk3MDBGNTlCNkMgLyogUmVhZFdyaXRlTG9jay5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDM0M1QzFGMzY4QTk3
MDBGNTlCNkMgLyogUmVhZFdyaXRlTG9jay5jcHAgKi87IH07CiAJCTBGRkYxOURDMUJCMzM0RUIw
MDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRjE5REExQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFs
bGVsSGVscGVyUG9vbC5jcHAgKi87IH07CiAJCTE0MDIyRjQxMThGNUMzRkMwMDdGRjBFQiAvKiBs
aWJibWFsbG9jLmEgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDAyMkY0MDE4RjVDM0ZDMDA3RkYwRUIgLyogbGliYm1hbGxvYy5hICovOyB9OwogCQkx
NDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyog
UkFNU2l6ZS5jcHAgKi87IH07CkBAIC0yMjUsNiArMjI2LDggQEAKIAkJMEZFQjNEQ0UxQkI1RDY4
NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2hhcmVkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0REMDFC
QjczNjZCMDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRUMzQzRGMUYzMjNDNjgwMEY1OUI2QyAvKiBDYWdlZFB0ci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDYWdlZFB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDM0M1QzFGMzY4QTk3MDBGNTlCNkMgLyogUmVhZFdyaXRlTG9jay5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZWFkV3JpdGVMb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzNDNUQxRjM2OEE5NzAwRjU5QjZDIC8qIFJlYWRXcml0ZUxvY2suaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVhZFdyaXRlTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVD
ODRBRTFCRDgyNTMxMDA4MEZGNzQgLyogR3JhcGhOb2RlV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhOb2RlV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29wZWRMYW1iZGEuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQ
dHJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueVB0clNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTA5LDYgKzkxMiw4IEBACiAJCQkJMEYyQUM1
NjAxRTg5RjcwQzAwMDFFRTNGIC8qIFJhbmdlLmggKi8sCiAJCQkJMEY3MjVDQUIxQzUwNDYxNjAw
QUQ5NDNBIC8qIFJhbmdlU2V0LmggKi8sCiAJCQkJMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8q
IFJhd1BvaW50ZXIuaCAqLywKKwkJCQkwRkVDM0M1QzFGMzY4QTk3MDBGNTlCNkMgLyogUmVhZFdy
aXRlTG9jay5jcHAgKi8sCisJCQkJMEZFQzNDNUQxRjM2OEE5NzAwRjU5QjZDIC8qIFJlYWRXcml0
ZUxvY2suaCAqLywKIAkJCQkwRkRFODdGNjFERkQwN0NDMDA2NEMzOTAgLyogUmVjdXJzaXZlTG9j
a0FkYXB0ZXIuaCAqLywKIAkJCQlBOEE0NzJGRTE1MUE4MjVCMDA0MTIzRkYgLyogUmVkQmxhY2tU
cmVlLmggKi8sCiAJCQkJMjYyOTlCNkQxN0E5RTVCODAwQURFQkU1IC8qIFJlZi5oICovLApAQCAt
MTMzNyw2ICsxMzQyLDcgQEAKIAkJCQlBOEE0NzNEODE1MUE4MjVCMDA0MTIzRkYgLyogSGFzaFRh
YmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTE2NDZBMUI2RkZDOTYwMDQwMEU3QyAvKiBM
b2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjBGMzJGMURGQ0JEMUIwMDQxNkQ2QyAvKiBM
b2NrZWRQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDM0M1RTFGMzY4QTk3
MDBGNTlCNkMgLyogUmVhZFdyaXRlTG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzUzNEYy
QTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyBpbiBTb3VyY2VzICovLAog
CQkJCUE4QTQ3M0U1MTUxQTgyNUIwMDQxMjNGRiAvKiBNYWluVGhyZWFkLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE4QTQ3M0U0MTUxQTgyNUIwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjIwMjIzKQor
KysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTExMCw2
ICsxMTAsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBSYW5nZS5oCiAgICAgUmFuZ2VTZXQuaAog
ICAgIFJhd1BvaW50ZXIuaAorICAgIFJlYWRXcml0ZUxvY2suaAogICAgIFJlY3Vyc2l2ZUxvY2tB
ZGFwdGVyLmgKICAgICBSZWRCbGFja1RyZWUuaAogICAgIFJlZi5oCkBAIC0yNDEsNiArMjQyLDcg
QEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgUkFNU2l6ZS5jcHAKICAgICBSYW5kb21EZXZpY2UuY3Bw
CiAgICAgUmFuZG9tTnVtYmVyLmNwcAorICAgIFJlYWRXcml0ZUxvY2suY3BwCiAgICAgUmVmQ291
bnRlZExlYWtDb3VudGVyLmNwcAogICAgIFJ1bkxvb3AuY3BwCiAgICAgU0hBMS5jcHAKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0NvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0NvbmRpdGlvbi5oCShyZXZpc2lvbiAyMjAyMjMpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25kaXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsMTEgQEAgc3RydWN0IENvbmRpdGlvbkJh
c2UgewogICAgIC8vIGFyZSB1bmxpa2VseSB0byBiZSBhZmZlY3RlZCBieSB0aGUgY29zdCBvZiBj
b252ZXJzaW9ucywgaXQgaXMgYmV0dGVyIHRvIHVzZSBNb25vdG9uaWNUaW1lLgogICAgIHR5cGVk
ZWYgUGFya2luZ0xvdDo6VGltZSBUaW1lOwogICAgIAorICAgIHZvaWQgY29uc3RydWN0KCkKKyAg
ICB7CisgICAgICAgIG1faGFzV2FpdGVycy5zdG9yZShmYWxzZSk7CisgICAgfQorICAgIAogICAg
IC8vIFdhaXQgb24gYSBwYXJraW5nIHF1ZXVlIHdoaWxlIHJlbGVhc2luZyB0aGUgZ2l2ZW4gbG9j
ay4gSXQgd2lsbCB1bmxvY2sgdGhlIGxvY2sganVzdCBiZWZvcmUKICAgICAvLyBwYXJraW5nLCBh
bmQgcmVsb2NrIGl0IHVwb24gd2FrZXVwLiBSZXR1cm5zIHRydWUgaWYgd2Ugd29rZSB1cCBkdWUg
dG8gc29tZSBjYWxsIHRvCiAgICAgLy8gbm90aWZ5T25lKCkgb3Igbm90aWZ5QWxsKCkuIFJldHVy
bnMgZmFsc2UgaWYgd2Ugd29rZSB1cCBkdWUgdG8gYSB0aW1lb3V0LiBOb3RlIHRoYXQgdGhpcyBm
b3JtCkBAIC0xNjgsNyArMTczLDcgQEAgc3RydWN0IENvbmRpdGlvbkJhc2UgewogICAgICAgICBQ
YXJraW5nTG90Ojp1bnBhcmtBbGwoJm1faGFzV2FpdGVycyk7CiAgICAgfQogICAgIAotcHJvdGVj
dGVkOgorcHJpdmF0ZToKICAgICBBdG9taWM8Ym9vbD4gbV9oYXNXYWl0ZXJzOwogfTsKIApAQCAt
MTc3LDcgKzE4Miw3IEBAIGNsYXNzIENvbmRpdGlvbiA6IHB1YmxpYyBDb25kaXRpb25CYXNlIHsK
IHB1YmxpYzoKICAgICBDb25kaXRpb24oKQogICAgIHsKLSAgICAgICAgbV9oYXNXYWl0ZXJzLnN0
b3JlKGZhbHNlKTsKKyAgICAgICAgY29uc3RydWN0KCk7CiAgICAgfQogfTsKIApJbmRleDogU291
cmNlL1dURi93dGYvTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suaAko
cmV2aXNpb24gMjIwMjIzKQorKysgU291cmNlL1dURi93dGYvTG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw2ICs1MiwxMSBAQCB0eXBlZGVmIExvY2tBbGdvcml0aG08dWludDhfdCwgMSwgMj4g
RGVmCiAvLyBUaGlzIGlzIGEgc3RydWN0IHdpdGhvdXQgYSBjb25zdHJ1Y3RvciBvciBkZXN0cnVj
dG9yIHNvIHRoYXQgaXQgY2FuIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuCiAvLyBVc2UgTG9j
ayBpbiBpbnN0YW5jZSB2YXJpYWJsZXMuCiBzdHJ1Y3QgTG9ja0Jhc2UgeworICAgIHZvaWQgY29u
c3RydWN0KCkKKyAgICB7CisgICAgICAgIG1fYnl0ZS5zdG9yZSgwLCBzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxheGVkKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBsb2NrKCkKICAgICB7CiAgICAgICAg
IGlmIChVTkxJS0VMWSghRGVmYXVsdExvY2tBbGdvcml0aG06OmxvY2tGYXN0QXNzdW1pbmdaZXJv
KG1fYnl0ZSkpKQpAQCAtMTEwLDcgKzExNSw3IEBAIHN0cnVjdCBMb2NrQmFzZSB7CiAgICAgICAg
IHJldHVybiBpc0hlbGQoKTsKICAgICB9CiAKLXByb3RlY3RlZDoKK3ByaXZhdGU6CiAgICAgZnJp
ZW5kIHN0cnVjdCBUZXN0V2ViS2l0QVBJOjpMb2NrSW5zcGVjdG9yOwogICAgIAogICAgIHN0YXRp
YyBjb25zdCB1aW50OF90IGlzSGVsZEJpdCA9IDE7CkBAIC0xMzYsNyArMTQxLDcgQEAgY2xhc3Mg
TG9jayA6IHB1YmxpYyBMb2NrQmFzZSB7CiBwdWJsaWM6CiAgICAgTG9jaygpCiAgICAgewotICAg
ICAgICBtX2J5dGUuc3RvcmUoMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAg
IGNvbnN0cnVjdCgpOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JlYWRXcml0
ZUxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1JlYWRXcml0ZUxvY2suY3Bw
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL1JlYWRXcml0ZUxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWRXcml0
ZUxvY2suaCIKKworI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
K3ZvaWQgUmVhZFdyaXRlTG9ja0Jhc2U6OmNvbnN0cnVjdCgpCit7CisgICAgbV9sb2NrLmNvbnN0
cnVjdCgpOworICAgIG1fY29uZC5jb25zdHJ1Y3QoKTsKKyAgICBtX2lzV3JpdGVMb2NrZWQgPSBm
YWxzZTsKKyAgICBtX251bVJlYWRlcnMgPSAwOworICAgIG1fbnVtV2FpdGluZ1dyaXRlcnMgPSAw
OworfQorCit2b2lkIFJlYWRXcml0ZUxvY2tCYXNlOjpyZWFkTG9jaygpCit7CisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIHdoaWxlIChtX2lzV3JpdGVMb2NrZWQgfHwg
bV9udW1XYWl0aW5nV3JpdGVycykKKyAgICAgICAgbV9jb25kLndhaXQobV9sb2NrKTsKKyAgICBt
X251bVJlYWRlcnMrKzsKK30KKwordm9pZCBSZWFkV3JpdGVMb2NrQmFzZTo6cmVhZFVubG9jaygp
Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIG1fbnVtUmVhZGVy
cy0tOworICAgIGlmICghbV9udW1SZWFkZXJzKQorICAgICAgICBtX2NvbmQubm90aWZ5QWxsKCk7
Cit9CisKK3ZvaWQgUmVhZFdyaXRlTG9ja0Jhc2U6OndyaXRlTG9jaygpCit7CisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIHdoaWxlIChtX2lzV3JpdGVMb2NrZWQgfHwg
bV9udW1SZWFkZXJzKSB7CisgICAgICAgIG1fbnVtV2FpdGluZ1dyaXRlcnMrKzsKKyAgICAgICAg
bV9jb25kLndhaXQobV9sb2NrKTsKKyAgICAgICAgbV9udW1XYWl0aW5nV3JpdGVycy0tOworICAg
IH0KKyAgICBtX2lzV3JpdGVMb2NrZWQgPSB0cnVlOworfQorCit2b2lkIFJlYWRXcml0ZUxvY2tC
YXNlOjp3cml0ZVVubG9jaygpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OworICAgIG1faXNXcml0ZUxvY2tlZCA9IGZhbHNlOworICAgIG1fY29uZC5ub3RpZnlBbGwoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JlYWRXcml0
ZUxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SZWFkV3JpdGVMb2NrLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvUmVhZFdyaXRlTG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgor
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlzIGEg
dHJhZGl0aW9uYWwgcmVhZC13cml0ZSBsb2NrIGltcGxlbWVudGF0aW9uIHRoYXQgZW5hYmxlcyBj
b25jdXJyZW5jeSBiZXR3ZWVuIHJlYWRlcnMgc28gbG9uZyBhcworLy8gdGhlIHJlYWQgY3JpdGlj
YWwgc2VjdGlvbiBpcyBsb25nLiBDb25jdXJyZW50IHJlYWRlcnMgd2lsbCBleHBlcmllbmNlIGNv
bnRlbnRpb24gb24gcmVhZCgpLmxvY2soKSBhbmQKKy8vIHJlYWQoKS51bmxvY2soKSBpZiB0aGUg
d29yayBpbnNpZGUgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMgc2hvcnQuIFRoZSBtb3JlIGNvcmVz
IHBhcnRpY2lwYXRlIGluIHJlYWRpbmcsCisvLyB0aGUgbG9uZ2VyIHRoZSByZWFkIGNyaXRpY2Fs
IHNlY3Rpb24gaGFzIHRvIGJlIGZvciB0aGlzIGxvY2tpbmcgc2NoZW1lIHRvIGJlIHByb2ZpdGFi
bGUuCisKK3N0cnVjdCBSZWFkV3JpdGVMb2NrQmFzZSB7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgY29uc3RydWN0KCk7CisgICAgCisgICAgLy8gSXQncyBlYXNpZXN0IHRvIHJlYWQgbG9j
ayBsaWtlIHRoaXM6CisgICAgLy8gCisgICAgLy8gICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
cndMb2NrLnJlYWQoKSk7CisgICAgLy8KKyAgICAvLyBJdCdzIGVhc2llc3QgdG8gd3JpdGUgbG9j
ayBsaWtlIHRoaXM6CisgICAgLy8gCisgICAgLy8gICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
cndMb2NrLndyaXRlKCkpOworICAgIC8vCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVh
ZExvY2soKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCByZWFkVW5sb2NrKCk7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgd3JpdGVMb2NrKCk7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgd3JpdGVVbmxvY2soKTsKKyAgICAKKyAgICBjbGFzcyBSZWFkTG9jazsKKyAgICBj
bGFzcyBXcml0ZUxvY2s7CisKKyAgICBSZWFkTG9jayYgcmVhZCgpOworICAgIFdyaXRlTG9jayYg
d3JpdGUoKTsKKworcHJpdmF0ZToKKyAgICAvLyBUaGVzZSBmaWVsZHMgbXVzdCB3b3JrIHdoZW4g
emVyby1maWxsZWQsIHNvIHRoYXQgU3RhdGljUmVhZFdyaXRlTG9jayB3b3Jrcy4KKyAgICBMb2Nr
QmFzZSBtX2xvY2s7CisgICAgQ29uZGl0aW9uQmFzZSBtX2NvbmQ7CisgICAgYm9vbCBtX2lzV3Jp
dGVMb2NrZWQ7CisgICAgdW5zaWduZWQgbV9udW1SZWFkZXJzOworICAgIHVuc2lnbmVkIG1fbnVt
V2FpdGluZ1dyaXRlcnM7Cit9OworCitjbGFzcyBSZWFkV3JpdGVMb2NrQmFzZTo6UmVhZExvY2sg
OiBwdWJsaWMgUmVhZFdyaXRlTG9ja0Jhc2UgeworcHVibGljOgorICAgIGJvb2wgdHJ5TG9jaygp
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBsb2NrKCkgeyByZWFkTG9jaygpOyB9CisgICAg
dm9pZCB1bmxvY2soKSB7IHJlYWRVbmxvY2soKTsgfQorfTsKKworY2xhc3MgUmVhZFdyaXRlTG9j
a0Jhc2U6OldyaXRlTG9jayA6IHB1YmxpYyBSZWFkV3JpdGVMb2NrQmFzZSB7CitwdWJsaWM6Cisg
ICAgYm9vbCB0cnlMb2NrKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIGxvY2soKSB7IHdy
aXRlTG9jaygpOyB9CisgICAgdm9pZCB1bmxvY2soKSB7IHdyaXRlVW5sb2NrKCk7IH0KK307Cisg
ICAgCitpbmxpbmUgUmVhZFdyaXRlTG9ja0Jhc2U6OlJlYWRMb2NrJiBSZWFkV3JpdGVMb2NrQmFz
ZTo6cmVhZCgpIHsgcmV0dXJuICpzdGF0aWNfY2FzdDxSZWFkTG9jayo+KHRoaXMpOyB9Citpbmxp
bmUgUmVhZFdyaXRlTG9ja0Jhc2U6OldyaXRlTG9jayYgUmVhZFdyaXRlTG9ja0Jhc2U6OndyaXRl
KCkgeyByZXR1cm4gKnN0YXRpY19jYXN0PFdyaXRlTG9jayo+KHRoaXMpOyB9CisKK2NsYXNzIFJl
YWRXcml0ZUxvY2sgOiBwdWJsaWMgUmVhZFdyaXRlTG9ja0Jhc2UgeworcHVibGljOgorICAgIFJl
YWRXcml0ZUxvY2soKQorICAgIHsKKyAgICAgICAgY29uc3RydWN0KCk7CisgICAgfQorfTsKKwor
dHlwZWRlZiBSZWFkV3JpdGVMb2NrQmFzZSBTdGF0aWNSZWFkV3JpdGVMb2NrOworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpSZWFkV3JpdGVMb2NrOwordXNpbmcgV1RGOjpTdGF0
aWNSZWFkV3JpdGVMb2NrOworCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjAzMjEpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNy0wOC0wNSAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJT04gKHIyMTk4OTUtMjE5ODk3KTog
TnVtYmVyIG9mIGxlYWtzIG9uIE9wZW4gU291cmNlIHdlbnQgZnJvbSA5MjQwIHRvIDIzNTk4MyBh
bmQgaXMgbm93IGF0IDMwMjM3MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc1MDgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIAorICAgICAgICBMZWFrcyByZXN1bHRzIGFyZSBzdXBlciBjb25mdXNpbmcgaWYg
bGVha3MgcnVucyB3aGlsZSBzb21lIFZNcyBhcmUgZGVzdHJ1Y3RpbmcuIFRoaXMgY2FsbHMgYSBu
ZXcgU1BJCisgICAgICAgIHRvIHdhaXQgZm9yIFZNIGRlc3RydWN0aW9ucyB0byBmaW5pc2ggYmVm
b3JlIHJ1bm5pbmcgdGhlIG5leHQgdGVzdC4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gCisgICAg
ICAgIHVuZGVyc3RhbmQgbGVha3MgcmVzdWx0cyBmcm9tIHdvcmtlcnMgdGVzdHMsIGFuZCBsZWFk
cyB0byBmZXdlciByZXBvcnRlZCBsZWFrcy4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAgKHJ1blRlc3QpOgorCiAyMDE3LTA4LTA1ICBZ
b3NoaWFraSBKaXRzdWthd2EgIDxZb3NoaWFraS5KaXRzdWthd2FAc29ueS5jb20+CiAKICAgICAg
ICAgY2hlY2std2Via2l0LXN0eWxlOiBmaXggcGF0aC1zcGVjaWZpYyBydWxlcyBmb3IgV2ViS2l0
MiByZW5hbWUKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUu
bW0JKHJldmlzaW9uIDIyMDIyMykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVu
ZGVyVHJlZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjA4NSw2ICsyMDg1LDggQEAgc3RhdGljIHZv
aWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TAogCiAgICAgaWYgKGdjQmV0d2VlblRlc3Rz
KQogICAgICAgICBbV2ViQ29yZVN0YXRpc3RpY3MgZ2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2Jq
ZWN0c107CisgICAgCisgICAgSlNDOjp3YWl0Rm9yVk1EZXN0cnVjdGlvbigpOwogCiAgICAgZnB1
dHMoIiNFT0ZcbiIsIHN0ZGVycik7CiAgICAgZmZsdXNoKHN0ZGVycik7Cg==
</data>
<flag name="review"
          id="337933"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>