<?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>157626</bug_id>
          
          <creation_ts>2016-05-12 09:31:34 -0700</creation_ts>
          <short_desc>Modern IDB: Website data store management</short_desc>
          <delta_ts>2016-05-19 15:57:36 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>157757</dependson>
    
    <dependson>157823</dependson>
    
    <dependson>157843</dependson>
          <blocked>149117</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1192355</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-12 09:31:34 -0700</bug_when>
    <thetext>Modern IDB: Website data store management

This is to support the browser feature of viewing which websites store data and removing all website data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192356</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-12 09:32:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/25446044&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192899</commentid>
    <comment_count>2</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-13 15:03:49 -0700</bug_when>
    <thetext>The &quot;Deleting files&quot; part of this will basically be existing WK2 code ported over to WebCore.

But we&apos;re doing one better over that - We&apos;ll also shut down currently open UniqueIDBDatabases.

This task is relatively straightforward.

Testing it is not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1192952</commentid>
    <comment_count>3</comment_count>
      <attachid>278892</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-13 16:35:16 -0700</bug_when>
    <thetext>Created attachment 278892
WIP patch

This is a WIP patch, not ready for review - I just want access to it from a different machine later.

It is functionally complete, if not without bugs. I&apos;ll find out more about those bugs as I work on the harder task - Testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193532</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-16 14:28:11 -0700</bug_when>
    <thetext>In testing, it became apparently that I&apos;ll need a refactor first to be sure to get things right.

Filed https://bugs.webkit.org/show_bug.cgi?id=157757 for that</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194041</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-17 16:09:58 -0700</bug_when>
    <thetext>This got bigger, because a lot more bookkeeping and message passing became necessary.
*sigh*

Patch incoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194049</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-17 16:24:18 -0700</bug_when>
    <thetext>Never mind - I&apos;m going to have to start splitting into multiple patches to keep it sane.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194532</commentid>
    <comment_count>7</comment_count>
      <attachid>279323</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-18 17:08:55 -0700</bug_when>
    <thetext>Created attachment 279323
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194568</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-18 18:45:40 -0700</bug_when>
    <thetext>Yep, you moved the code.  LGTM.
Do we need more reviewers because this touches the filesystem?
It looks like Mac-debug is asserting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194576</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-18 19:11:13 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Yep, you moved the code.  LGTM.
&gt; Do we need more reviewers because this touches the filesystem?

I don&apos;t think so - it&apos;s literally a move of existing code

&gt; It looks like Mac-debug is asserting.

I&apos;ll have to take a look in the AM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194595</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-18 20:42:13 -0700</bug_when>
    <thetext>Yikes, those tests were in terrible shape - Not only 1 or 2 IDB tests asserting, but lots of other failures.

Well, I&apos;ll try to dig in to the bot and get those crash logs (since they weren&apos;t packaged up in any report that I could find) and also try to repro locally (in the morning)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194786</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-19 09:45:31 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Yikes, those tests were in terrible shape - Not only 1 or 2 IDB tests
&gt; asserting, but lots of other failures.
&gt; 
&gt; Well, I&apos;ll try to dig in to the bot and get those crash logs (since they
&gt; weren&apos;t packaged up in any report that I could find) and also try to repro
&gt; locally (in the morning)

Was able to reproduce the DRT crash locally... once. But the crash log should be enough to help fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194797</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-19 10:03:56 -0700</bug_when>
    <thetext>Actually, it&apos;s a mysterious hashing issue, not an automatic easy fix. Ugh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194854</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-19 12:08:33 -0700</bug_when>
    <thetext>Alexey has pointed out on IRC that this crash is already in the tree.
https://build.webkit.org/results/Apple%20El%20Capitan%20Release%20WK1%20(Tests)/r201160%20(6374)/storage/websql/database-lock-after-reload-crash-log.txt for example.

So it&apos;s unrelated to this patch.

So this patch can be reviewed as-is</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195010</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-19 15:36:14 -0700</bug_when>
    <thetext>I added some nice asserts in addition to what was reviewed here, while trying to explore the other asserts that EWS was seeing.

Yay asserts!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195014</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-19 15:57:36 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/201195</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278892</attachid>
            <date>2016-05-13 16:35:16 -0700</date>
            <delta_ts>2016-05-18 17:08:53 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>24227</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
SWRlbnRpZmllci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VJZGVudGlmaWVyLmgKaW5kZXggMzFlNDFhYS4uZWExZWZlMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VJZGVudGlmaWVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VJZGVudGlmaWVyLmgK
QEAgLTEwMiw2ICsxMDIsMTEgQEAgcHVibGljOgogICAgIFN0cmluZyBkZWJ1Z1N0cmluZygpIGNv
bnN0OwogI2VuZGlmCiAKKyAgICBib29sIGlzUmVsYXRlZFRvT3JpZ2luKGNvbnN0IFNlY3VyaXR5
T3JpZ2luRGF0YSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vcGVuaW5n
T3JpZ2luID09IG90aGVyIHx8IG1fbWFpbkZyYW1lT3JpZ2luID09IG90aGVyOworICAgIH0KKwog
cHJpdmF0ZToKICAgICBTdHJpbmcgbV9kYXRhYmFzZU5hbWU7CiAgICAgU2VjdXJpdHlPcmlnaW5E
YXRhIG1fb3BlbmluZ09yaWdpbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKaW5kZXggM2ZkNjBhNy4uZjg4ZTVhMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cnZlci5jcHAKQEAgLTMzLDcgKzMzLDkgQEAKICNpbmNsdWRlICJJREJSZXN1bHREYXRhLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lbW9yeUlEQkJhY2tpbmdTdG9yZS5oIgor
I2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxpdGVJREJCYWNraW5n
U3RvcmUuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9Mb2Nr
ZXIuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC00NjgsNiArNDcwLDExNCBA
QCB2b2lkIElEQlNlcnZlcjo6aGFuZGxlVGFza1JlcGxpZXNPbk1haW5UaHJlYWQoKQogICAgICAg
ICB0YXNrLT5wZXJmb3JtVGFzaygpOwogfQogCitzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVEZWxl
dGVDYWxsYmFja0lEKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHN0YXRp
YyB1aW50NjRfdCBjdXJyZW50SUQgPSAwOworICAgIHJldHVybiArK2N1cnJlbnRJRDsKK30KKwor
dm9pZCBJREJTZXJ2ZXI6OmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZShzdGQ6
OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWNhdGlvblRpbWUsIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgdWludDY0X3QgY2Fs
bGJhY2tJRCA9IGdlbmVyYXRlRGVsZXRlQ2FsbGJhY2tJRCgpOworICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV9kZWxldGVEYXRhYmFzZUNvbXBsZXRpb25IYW5kbGVycy5hZGQoY2FsbGJhY2tJRCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBh
ZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisKKyAgICAvLyBJZiB0aGUgbW9kaWZpY2F0aW9uIHRpbWUg
aXMgaW4gdGhlIGZ1dHVyZSwgZG9uJ3QgYm90aCBkb2luZyBhbnl0aGluZy4KKyAgICBpZiAobW9k
aWZpY2F0aW9uVGltZSA+IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpKSB7CisgICAg
ICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJ
REJTZXJ2ZXI6OmRpZFBlcmZvcm1DbG9zZUFuZERlbGV0ZURhdGFiYXNlcywgY2FsbGJhY2tJRCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSGFzaFNldDxVbmlxdWVJREJEYXRhYmFz
ZSo+IG9wZW5EYXRhYmFzZXM7CisgICAgZm9yIChhdXRvKiBjb25uZWN0aW9uIDogbV9kYXRhYmFz
ZUNvbm5lY3Rpb25zLnZhbHVlcygpKQorICAgICAgICBvcGVuRGF0YWJhc2VzLmFkZCgmY29ubmVj
dGlvbi0+ZGF0YWJhc2UoKSk7CisKKyAgICBmb3IgKGF1dG8qIGRhdGFiYXNlIDogb3BlbkRhdGFi
YXNlcykKKyAgICAgICAgZGF0YWJhc2UtPmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSgpOwor
CisgICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJREJT
ZXJ2ZXI6OnBlcmZvcm1DbG9zZUFuZERlbGV0ZURhdGFiYXNlc01vZGlmaWVkU2luY2UsIG1vZGlm
aWNhdGlvblRpbWUsIGNhbGxiYWNrSUQpKTsKK30KKwordm9pZCBJREJTZXJ2ZXI6OmNsb3NlQW5k
RGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRh
PiYgb3JpZ2lucywgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gZ2VuZXJhdGVEZWxldGVDYWxsYmFja0lEKCk7Cisg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX2RlbGV0ZURhdGFiYXNlQ29tcGxldGlvbkhhbmRsZXJzLmFk
ZChjYWxsYmFja0lELCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKworICAgIEhhc2hTZXQ8VW5p
cXVlSURCRGF0YWJhc2UqPiBvcGVuRGF0YWJhc2VzOworICAgIGZvciAoYXV0byogY29ubmVjdGlv
biA6IG1fZGF0YWJhc2VDb25uZWN0aW9ucy52YWx1ZXMoKSkgeworICAgICAgICBjb25zdCBhdXRv
JiBpZGVudGlmaWVyID0gY29ubmVjdGlvbi0+ZGF0YWJhc2UoKS5pZGVudGlmaWVyKCk7CisgICAg
ICAgIGZvciAoYXV0byYgb3JpZ2luIDogb3JpZ2lucykgeworICAgICAgICAgICAgaWYgKGlkZW50
aWZpZXIuaXNSZWxhdGVkVG9PcmlnaW4ob3JpZ2luKSkgeworICAgICAgICAgICAgICAgIG9wZW5E
YXRhYmFzZXMuYWRkKCZjb25uZWN0aW9uLT5kYXRhYmFzZSgpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byog
ZGF0YWJhc2UgOiBvcGVuRGF0YWJhc2VzKQorICAgICAgICBkYXRhYmFzZS0+aW1tZWRpYXRlQ2xv
c2VGb3JVc2VyRGVsZXRlKCk7CisKKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhy
ZWFkVGFzaygqdGhpcywgJklEQlNlcnZlcjo6cGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2Vz
Rm9yT3JpZ2lucywgb3JpZ2lucywgY2FsbGJhY2tJRCkpOworfQorCitzdGF0aWMgdm9pZCByZW1v
dmVBbGxEYXRhYmFzZXNGb3JPcmlnaW5QYXRoKGNvbnN0IFN0cmluZyYgb3JpZ2luUGF0aCwgc3Rk
OjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlKQoreworICAg
IFZlY3RvcjxTdHJpbmc+IGRhdGFiYXNlUGF0aHMgPSBsaXN0RGlyZWN0b3J5KG9yaWdpblBhdGgs
ICIqIik7CisKKyAgICBmb3IgKGF1dG8mIGRhdGFiYXNlUGF0aCA6IGRhdGFiYXNlUGF0aHMpIHsK
KyAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChk
YXRhYmFzZVBhdGgsICJJbmRleGVkREIuc3FsaXRlMyIpOworCisgICAgICAgIGlmICghZmlsZUV4
aXN0cyhkYXRhYmFzZUZpbGUpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYg
KG1vZGlmaWVkU2luY2UgPiBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50Ojpt
aW4oKSkgeworICAgICAgICAgICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7CisgICAgICAgICAg
ICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKGRhdGFiYXNlRmlsZSwgbW9kaWZpY2F0aW9u
VGltZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChzdGQ6
OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpmcm9tX3RpbWVfdChtb2RpZmljYXRpb25UaW1lKSA8IG1v
ZGlmaWVkU2luY2UpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAg
ICAgICBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoZGF0YWJhc2VGaWxlKTsK
KyAgICAgICAgZGVsZXRlRW1wdHlEaXJlY3RvcnkoZGF0YWJhc2VQYXRoKTsKKyAgICB9CisKKyAg
ICBkZWxldGVFbXB0eURpcmVjdG9yeShvcmlnaW5QYXRoKTsKK30KKwordm9pZCBJREJTZXJ2ZXI6
OnBlcmZvcm1DbG9zZUFuZERlbGV0ZURhdGFiYXNlc01vZGlmaWVkU2luY2Uoc3RkOjpjaHJvbm86
OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCB1aW50NjRfdCBjYWxsYmFj
a0lEKQoreworICAgIGlmICghbV9kYXRhYmFzZURpcmVjdG9yeVBhdGguaXNFbXB0eSgpKSB7Cisg
ICAgICAgIFZlY3RvcjxTdHJpbmc+IG9yaWdpblBhdGhzID0gbGlzdERpcmVjdG9yeShtX2RhdGFi
YXNlRGlyZWN0b3J5UGF0aCwgIioiKTsKKyAgICAgICAgZm9yIChhdXRvJiBvcmlnaW5QYXRoIDog
b3JpZ2luUGF0aHMpCisgICAgICAgICAgICByZW1vdmVBbGxEYXRhYmFzZXNGb3JPcmlnaW5QYXRo
KG9yaWdpblBhdGgsIG1vZGlmaWVkU2luY2UpOworICAgIH0KKworICAgIHBvc3REYXRhYmFzZVRh
c2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZJREJTZXJ2ZXI6OmRpZFBlcmZv
cm1DbG9zZUFuZERlbGV0ZURhdGFiYXNlcywgY2FsbGJhY2tJRCkpOworfQorCit2b2lkIElEQlNl
cnZlcjo6cGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0
b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2lucywgdWludDY0X3QgY2FsbGJhY2tJRCkKK3sK
KyAgICBpZiAoIW1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkgeworICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIG9yaWdpbiA6IG9yaWdpbnMpIHsKKyAgICAgICAgICAgIFN0cmluZyBv
cmlnaW5QYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoLCBvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKS0+ZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAg
ICAgICAgICAgcmVtb3ZlQWxsRGF0YWJhc2VzRm9yT3JpZ2luUGF0aChvcmlnaW5QYXRoLCBzdGQ6
OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50OjptaW4oKSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmSURCU2VydmVyOjpkaWRQZXJmb3JtQ2xvc2VBbmREZWxldGVEYXRhYmFzZXMsIGNhbGxi
YWNrSUQpKTsKK30KKwordm9pZCBJREJTZXJ2ZXI6OmRpZFBlcmZvcm1DbG9zZUFuZERlbGV0ZURh
dGFiYXNlcyh1aW50NjRfdCBjYWxsYmFja0lEKQoreworICAgIGF1dG8gY2FsbGJhY2sgPSBtX2Rl
bGV0ZURhdGFiYXNlQ29tcGxldGlvbkhhbmRsZXJzLnRha2UoY2FsbGJhY2tJRCk7CisgICAgQVNT
RVJUKGNhbGxiYWNrKTsKKyAgICBjYWxsYmFjaygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBJREJT
ZXJ2ZXIKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCmluZGV4IGVmZmE4MDcuLmZhMzUy
OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmgKQEAgLTk2LDYgKzk2LDkgQEAgcHVibGljOgogCiAgICAgc3RkOjp1bmlxdWVf
cHRyPElEQkJhY2tpbmdTdG9yZT4gY3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNl
SWRlbnRpZmllciYpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbG9zZUFuZERlbGV0ZURh
dGFiYXNlc01vZGlmaWVkU2luY2Uoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2lu
dCwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBjbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9yaWdpbnMoY29uc3QgVmVj
dG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRp
b25IYW5kbGVyKTsKKwogcHJpdmF0ZToKICAgICBJREJTZXJ2ZXIoSURCQmFja2luZ1N0b3JlVGVt
cG9yYXJ5RmlsZUhhbmRsZXImKTsKICAgICBJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZURpcmVjdG9yeVBhdGgsIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJik7CkBA
IC0xMDUsNiArMTA4LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBwZXJmb3JtR2V0QWxsRGF0YWJh
c2VOYW1lcyh1aW50NjRfdCBzZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllciwgY29uc3QgU2VjdXJp
dHlPcmlnaW5EYXRhJiBtYWluRnJhbWVPcmlnaW4sIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYg
b3BlbmluZ09yaWdpbiwgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAgICAgdm9pZCBkaWRHZXRBbGxE
YXRhYmFzZU5hbWVzKHVpbnQ2NF90IHNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyLCB1aW50NjRf
dCBjYWxsYmFja0lELCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZGF0YWJhc2VOYW1lcyk7CiAKKyAg
ICB2b2lkIHBlcmZvcm1DbG9zZUFuZERlbGV0ZURhdGFiYXNlc01vZGlmaWVkU2luY2Uoc3RkOjpj
aHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCwgdWludDY0X3QgY2FsbGJhY2tJRCk7Cisg
ICAgdm9pZCBwZXJmb3JtQ2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKGNvbnN0IFZl
Y3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiwgdWludDY0X3QgY2FsbGJhY2tJRCk7CisgICAgdm9p
ZCBkaWRQZXJmb3JtQ2xvc2VBbmREZWxldGVEYXRhYmFzZXModWludDY0X3QgY2FsbGJhY2tJRCk7
CisKICAgICBzdGF0aWMgdm9pZCBkYXRhYmFzZVRocmVhZEVudHJ5KHZvaWQqKTsKICAgICB2b2lk
IGRhdGFiYXNlUnVuTG9vcCgpOwogICAgIHZvaWQgaGFuZGxlVGFza1JlcGxpZXNPbk1haW5UaHJl
YWQoKTsKQEAgLTEyMyw2ICsxMzAsOCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8dWludDY0X3Qs
IFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbio+IG1fZGF0YWJhc2VDb25uZWN0aW9uczsKICAg
ICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRpZmllciwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbio+IG1fdHJhbnNhY3Rpb25zOwogCisgICAgSGFzaE1hcDx1aW50NjRfdCwgc3RkOjpmdW5j
dGlvbjx2b2lkICgpPj4gbV9kZWxldGVEYXRhYmFzZUNvbXBsZXRpb25IYW5kbGVyczsKKwogICAg
IFN0cmluZyBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aDsKICAgICBJREJCYWNraW5nU3RvcmVUZW1w
b3JhcnlGaWxlSGFuZGxlciYgbV9iYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlcjsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5p
cXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCA4Zjg2M2RiLi5hM2E4YTdjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTc0LDYgKzc0LDkgQEAgY29uc3QgSURCRGF0YWJhc2VJ
bmZvJiBVbmlxdWVJREJEYXRhYmFzZTo6aW5mbygpIGNvbnN0CiAKIHZvaWQgVW5pcXVlSURCRGF0
YWJhc2U6Om9wZW5EYXRhYmFzZUNvbm5lY3Rpb24oSURCQ29ubmVjdGlvblRvQ2xpZW50JiBjb25u
ZWN0aW9uLCBjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEpCiB7CisgICAgTE9HKElu
ZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuRGF0YWJhc2VDb25uZWN0aW9uIik7Cisg
ICAgQVNTRVJUKCFtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKTsKKwogICAgIG1fcGVuZGluZ09w
ZW5EQlJlcXVlc3RzLmFkZChTZXJ2ZXJPcGVuREJSZXF1ZXN0OjpjcmVhdGUoY29ubmVjdGlvbiwg
cmVxdWVzdERhdGEpKTsKIAogICAgIC8vIEFuIG9wZW4gb3BlcmF0aW9uIGlzIGFscmVhZHkgaW4g
cHJvZ3Jlc3MsIHNvIHdlIGNhbid0IHBvc3NpYmx5IGhhbmRsZSB0aGlzIG9uZSB5ZXQuCkBAIC0y
ODMsNiArMjg2LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6aGFuZGxlRGF0YWJhc2VPcGVy
YXRpb25zKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIExPRyhJbmRleGVk
REIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmhhbmRsZURhdGFiYXNlT3BlcmF0aW9ucyAt
IFRoZXJlIGFyZSAldSBwZW5kaW5nIiwgbV9wZW5kaW5nT3BlbkRCUmVxdWVzdHMuc2l6ZSgpKTsK
KyAgICBBU1NFUlQoIW1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpOwogCiAgICAgaWYgKG1fZGVs
ZXRlQmFja2luZ1N0b3JlSW5Qcm9ncmVzcykKICAgICAgICAgcmV0dXJuOwpAQCAtMzExLDcgKzMx
NSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmhhbmRsZURhdGFiYXNlT3BlcmF0aW9ucygp
CiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpoYW5kbGVDdXJyZW50T3BlcmF0aW9uKCkKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiKG1haW4pIFVuaXF1ZUlEQkRhdGFiYXNlOjpoYW5kbGVDdXJyZW50
T3BlcmF0aW9uIik7Ci0KKyAgICBBU1NFUlQoIW1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpOwog
ICAgIEFTU0VSVChtX2N1cnJlbnRPcGVuREJSZXF1ZXN0KTsKIAogICAgIFJlZlB0cjxVbmlxdWVJ
REJEYXRhYmFzZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKQEAgLTM0MSw2ICszNDUsOCBAQCBzdGF0
aWMgdWludDY0X3QgZ2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKQogCiB1aW50NjRf
dCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFjayhFcnJvckNhbGxiYWNrIGNhbGxiYWNr
KQogeworICAgIEFTU0VSVCghbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSk7CisKICAgICB1aW50
NjRfdCBpZGVudGlmaWVyID0gZ2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKTsKICAg
ICBBU1NFUlQoIW1fZXJyb3JDYWxsYmFja3MuY29udGFpbnMoaWRlbnRpZmllcikpOwogICAgIG1f
ZXJyb3JDYWxsYmFja3MuYWRkKGlkZW50aWZpZXIsIGNhbGxiYWNrKTsKQEAgLTM0OSw2ICszNTUs
OCBAQCB1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFjayhFcnJvckNhbGxi
YWNrIGNhbGxiYWNrKQogCiB1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFj
ayhLZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2spCiB7CisgICAgQVNTRVJUKCFtX2hhcmRDbG9zZWRG
b3JVc2VyRGVsZXRlKTsKKwogICAgIHVpbnQ2NF90IGlkZW50aWZpZXIgPSBnZW5lcmF0ZVVuaXF1
ZUNhbGxiYWNrSWRlbnRpZmllcigpOwogICAgIEFTU0VSVCghbV9rZXlEYXRhQ2FsbGJhY2tzLmNv
bnRhaW5zKGlkZW50aWZpZXIpKTsKICAgICBtX2tleURhdGFDYWxsYmFja3MuYWRkKGlkZW50aWZp
ZXIsIGNhbGxiYWNrKTsKQEAgLTM1Nyw2ICszNjUsOCBAQCB1aW50NjRfdCBVbmlxdWVJREJEYXRh
YmFzZTo6c3RvcmVDYWxsYmFjayhLZXlEYXRhQ2FsbGJhY2sgY2FsbGJhY2spCiAKIHVpbnQ2NF90
IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNrKEdldFJlc3VsdENhbGxiYWNrIGNhbGxi
YWNrKQogeworICAgIEFTU0VSVCghbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSk7CisKICAgICB1
aW50NjRfdCBpZGVudGlmaWVyID0gZ2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKTsK
ICAgICBBU1NFUlQoIW1fZ2V0UmVzdWx0Q2FsbGJhY2tzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsK
ICAgICBtX2dldFJlc3VsdENhbGxiYWNrcy5hZGQoaWRlbnRpZmllciwgY2FsbGJhY2spOwpAQCAt
MzY1LDYgKzM3NSw4IEBAIHVpbnQ2NF90IFVuaXF1ZUlEQkRhdGFiYXNlOjpzdG9yZUNhbGxiYWNr
KEdldFJlc3VsdENhbGxiYWNrIGNhbGxiYWNrKQogCiB1aW50NjRfdCBVbmlxdWVJREJEYXRhYmFz
ZTo6c3RvcmVDYWxsYmFjayhDb3VudENhbGxiYWNrIGNhbGxiYWNrKQogeworICAgIEFTU0VSVCgh
bV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSk7CisKICAgICB1aW50NjRfdCBpZGVudGlmaWVyID0g
Z2VuZXJhdGVVbmlxdWVDYWxsYmFja0lkZW50aWZpZXIoKTsKICAgICBBU1NFUlQoIW1fY291bnRD
YWxsYmFja3MuY29udGFpbnMoaWRlbnRpZmllcikpOwogICAgIG1fY291bnRDYWxsYmFja3MuYWRk
KGlkZW50aWZpZXIsIGNhbGxiYWNrKTsKQEAgLTM3NCw2ICszODYsNyBAQCB1aW50NjRfdCBVbmlx
dWVJREJEYXRhYmFzZTo6c3RvcmVDYWxsYmFjayhDb3VudENhbGxiYWNrIGNhbGxiYWNrKQogdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6aGFuZGxlRGVsZXRlKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYg
Y29ubmVjdGlvbiwgY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhKQogewogICAgIExP
RyhJbmRleGVkREIsICIobWFpbikgVW5pcXVlSURCRGF0YWJhc2U6OmhhbmRsZURlbGV0ZSIpOwor
ICAgIEFTU0VSVCghbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSk7CiAKICAgICBtX3BlbmRpbmdP
cGVuREJSZXF1ZXN0cy5hZGQoU2VydmVyT3BlbkRCUmVxdWVzdDo6Y3JlYXRlKGNvbm5lY3Rpb24s
IHJlcXVlc3REYXRhKSk7CiAgICAgaGFuZGxlRGF0YWJhc2VPcGVyYXRpb25zKCk7CkBAIC0xMTg4
LDYgKzEyMDEsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpjb25uZWN0aW9uQ2xvc2VkRnJv
bUNsaWVudChVbmlxdWVJREJEYXRhYmFzZUNvbm5lY3Rpb24mCiB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjplbnF1ZXVlVHJhbnNhY3Rpb24oUmVmPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24+
JiYgdHJhbnNhY3Rpb24pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlVuaXF1ZUlEQkRhdGFiYXNl
OjplbnF1ZXVlVHJhbnNhY3Rpb24gLSAlcyIsIHRyYW5zYWN0aW9uLT5pbmZvKCkubG9nZ2luZ1N0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIEFTU0VSVCghbV9oYXJkQ2xvc2VkRm9yVXNlckRl
bGV0ZSk7CiAKICAgICBBU1NFUlQodHJhbnNhY3Rpb24tPmluZm8oKS5tb2RlKCkgIT0gSW5kZXhl
ZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpOwogCkBAIC0xMjA5LDYgKzEyMjMs
OCBAQCBib29sIFVuaXF1ZUlEQkRhdGFiYXNlOjpoYXNVbmZpbmlzaGVkVHJhbnNhY3Rpb25zKCkg
Y29uc3QKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6Omludm9rZU9wZXJhdGlvbkFuZFRyYW5zYWN0
aW9uVGltZXIoKQogewogICAgIExPRyhJbmRleGVkREIsICJVbmlxdWVJREJEYXRhYmFzZTo6aW52
b2tlT3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1lcigpIik7CisgICAgQVNTRVJUKCFtX2hhcmRD
bG9zZWRGb3JVc2VyRGVsZXRlKTsKKwogICAgIGlmICghbV9vcGVyYXRpb25BbmRUcmFuc2FjdGlv
blRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fb3BlcmF0aW9uQW5kVHJhbnNhY3Rpb25UaW1l
ci5zdGFydE9uZVNob3QoMCk7CiB9CkBAIC0xMjE2LDYgKzEyMzIsNyBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjppbnZva2VPcGVyYXRpb25BbmRUcmFuc2FjdGlvblRpbWVyKCkKIHZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6Om9wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXJGaXJlZCgpCiB7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIihtYWluKSBVbmlxdWVJREJEYXRhYmFzZTo6b3BlcmF0aW9uQW5k
VHJhbnNhY3Rpb25UaW1lckZpcmVkIik7CisgICAgQVNTRVJUKCFtX2hhcmRDbG9zZWRGb3JVc2Vy
RGVsZXRlKTsKIAogICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZT4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKIApAQCAtMTM4OSwzMiArMTQwNiwxMTYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6
dHJhbnNhY3Rpb25Db21wbGV0ZWQoUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24K
ICAgICBpbnZva2VPcGVyYXRpb25BbmRUcmFuc2FjdGlvblRpbWVyKCk7CiB9CiAKK3N0YXRpYyBJ
REJFcnJvciB1c2VyRGVsZXRlRXJyb3IoKQoreworICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UgZGVsZXRlZCBieSBy
ZXF1ZXN0IG9mIHRoZSB1c2VyIikgfTsKK30KKworc3RhdGljIHZvaWQgZXJyb3JPcGVuREJSZXF1
ZXN0Rm9yVXNlckRlbGV0ZShTZXJ2ZXJPcGVuREJSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGF1
dG8gcmVzdWx0ID0gSURCUmVzdWx0RGF0YTo6ZXJyb3IocmVxdWVzdC5yZXF1ZXN0RGF0YSgpLnJl
cXVlc3RJZGVudGlmaWVyKCksIHVzZXJEZWxldGVFcnJvcigpKTsKKyAgICBpZiAocmVxdWVzdC5p
c09wZW5SZXF1ZXN0KCkpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbigpLmRpZE9wZW5EYXRh
YmFzZShyZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uKCkuZGlk
RGVsZXRlRGF0YWJhc2UocmVzdWx0KTsKK30KKwordm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6aW1t
ZWRpYXRlQ2xvc2VGb3JVc2VyRGVsZXRlKCkKK3sKKyAgICAvLyBFcnJvciBvdXQgYWxsIHBlbmRp
bmcgY2FsbGJhY2tzCisgICAgVmVjdG9yPHVpbnQ2NF90PiBjYWxsYmFja0lkZW50aWZpZXJzOwor
ICAgIElEQkVycm9yIGVycm9yID0geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9y
LCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIGRlbGV0ZWQgYnkgcmVxdWVzdCBvZiB0aGUgdXNlciIp
IH07CisgICAgSURCS2V5RGF0YSBrZXlEYXRhOworICAgIElEQkdldFJlc3VsdCBnZXRSZXN1bHQ7
CisKKyAgICBjb3B5S2V5c1RvVmVjdG9yKG1fZXJyb3JDYWxsYmFja3MsIGNhbGxiYWNrSWRlbnRp
ZmllcnMpOworICAgIGZvciAoYXV0byBpZGVudGlmaWVyIDogY2FsbGJhY2tJZGVudGlmaWVycykK
KyAgICAgICAgcGVyZm9ybUVycm9yQ2FsbGJhY2soaWRlbnRpZmllciwgZXJyb3IpOworCisgICAg
Y2FsbGJhY2tJZGVudGlmaWVycy5jbGVhcigpOworICAgIGNvcHlLZXlzVG9WZWN0b3IobV9rZXlE
YXRhQ2FsbGJhY2tzLCBjYWxsYmFja0lkZW50aWZpZXJzKTsKKyAgICBmb3IgKGF1dG8gaWRlbnRp
ZmllciA6IGNhbGxiYWNrSWRlbnRpZmllcnMpCisgICAgICAgIHBlcmZvcm1LZXlEYXRhQ2FsbGJh
Y2soaWRlbnRpZmllciwgZXJyb3IsIGtleURhdGEpOworCisgICAgY2FsbGJhY2tJZGVudGlmaWVy
cy5jbGVhcigpOworICAgIGNvcHlLZXlzVG9WZWN0b3IobV9nZXRSZXN1bHRDYWxsYmFja3MsIGNh
bGxiYWNrSWRlbnRpZmllcnMpOworICAgIGZvciAoYXV0byBpZGVudGlmaWVyIDogY2FsbGJhY2tJ
ZGVudGlmaWVycykKKyAgICAgICAgcGVyZm9ybUdldFJlc3VsdENhbGxiYWNrKGlkZW50aWZpZXIs
IGVycm9yLCBnZXRSZXN1bHQpOworCisgICAgY2FsbGJhY2tJZGVudGlmaWVycy5jbGVhcigpOwor
ICAgIGNvcHlLZXlzVG9WZWN0b3IobV9jb3VudENhbGxiYWNrcywgY2FsbGJhY2tJZGVudGlmaWVy
cyk7CisgICAgZm9yIChhdXRvIGlkZW50aWZpZXIgOiBjYWxsYmFja0lkZW50aWZpZXJzKQorICAg
ICAgICBwZXJmb3JtQ291bnRDYWxsYmFjayhpZGVudGlmaWVyLCBlcnJvciwgMCk7CisKKyAgICAv
LyBFcnJvciBvdXQgYWxsIElEQk9wZW5EQlJlcXVlc3RzCisgICAgaWYgKG1fY3VycmVudE9wZW5E
QlJlcXVlc3QpIHsKKyAgICAgICAgZXJyb3JPcGVuREJSZXF1ZXN0Rm9yVXNlckRlbGV0ZSgqbV9j
dXJyZW50T3BlbkRCUmVxdWVzdCk7CisgICAgICAgIG1fY3VycmVudE9wZW5EQlJlcXVlc3QgPSBu
dWxscHRyOworICAgIH0KKworICAgIGZvciAoYXV0byYgcmVxdWVzdCA6IG1fcGVuZGluZ09wZW5E
QlJlcXVlc3RzKQorICAgICAgICBlcnJvck9wZW5EQlJlcXVlc3RGb3JVc2VyRGVsZXRlKCpyZXF1
ZXN0KTsKKworICAgIG1fcGVuZGluZ09wZW5EQlJlcXVlc3RzLmNsZWFyKCk7CisKKyAgICAvLyBF
cnJvciBvdXQgYWxsIHRyYW5zYWN0aW9ucworICAgIFZlY3RvcjxJREJSZXNvdXJjZUlkZW50aWZp
ZXI+IGluUHJvZ3Jlc3NJZGVudGlmaWVyczsKKyAgICBjb3B5S2V5c1RvVmVjdG9yKG1faW5Qcm9n
cmVzc1RyYW5zYWN0aW9ucywgaW5Qcm9ncmVzc0lkZW50aWZpZXJzKTsKKyAgICBmb3IgKGF1dG8m
IGlkZW50aWZpZXIgOiBpblByb2dyZXNzSWRlbnRpZmllcnMpCisgICAgICAgIG1faW5Qcm9ncmVz
c1RyYW5zYWN0aW9ucy5nZXQoaWRlbnRpZmllciktPmFib3J0V2l0aG91dENhbGxiYWNrKCk7CisK
KyAgICBBU1NFUlQobV9pblByb2dyZXNzVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7CisKKyAgICBt
X3BlbmRpbmdUcmFuc2FjdGlvbnMuY2xlYXIoKTsKKyAgICBtX29iamVjdFN0b3JlVHJhbnNhY3Rp
b25Db3VudHMuY2xlYXIoKTsKKyAgICBtX29iamVjdFN0b3JlV3JpdGVUcmFuc2FjdGlvbnMuY2xl
YXIoKTsKKworICAgIC8vIENsb3NlIGFsbCBvcGVuIGNvbm5lY3Rpb25zCisgICAgTGlzdEhhc2hT
ZXQ8UmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlQ29ubmVjdGlvbj4+IG9wZW5EYXRhYmFzZUNvbm5l
Y3Rpb25zID0gbV9vcGVuRGF0YWJhc2VDb25uZWN0aW9uczsKKyAgICBmb3IgKGF1dG8mIGNvbm5l
Y3Rpb24gOiBvcGVuRGF0YWJhc2VDb25uZWN0aW9ucykKKyAgICAgICAgY29ubmVjdGlvbkNsb3Nl
ZEZyb21DbGllbnQoKmNvbm5lY3Rpb24pOworCisgICAgLy8gQ2FuY2VsIHRoZSBvcGVyYXRpb24g
dGltZXIKKyAgICBtX29wZXJhdGlvbkFuZFRyYW5zYWN0aW9uVGltZXIuc3RvcCgpOworCisgICAg
Ly8gU2V0IHRoZSBmbGFnIHRvIG1ha2UgdGhpcyBkYXRhYmFzZSBpbmVydCB1bnRpbCBhbGwgb2Yg
aXRzIGJhY2tncm91bmQgYWN0aXZpdHkgZmluaXNoZXMuCisgICAgbV9oYXJkQ2xvc2VkRm9yVXNl
ckRlbGV0ZSA9IHRydWU7CisKKyAgICAvLyBSZW1vdmUgdGhlIGRhdGFiYXNlIGZyb20gdGhlIElE
QlNlcnZlcidzIHNldCBvZiBvcGVuIGRhdGFiYXNlcy4KKyAgICAvLyBJZiB0aGVyZSBpcyBubyBp
bi1wcm9ncmVzcyBiYWNrZ3JvdW5kIHRocmVhZCBhY3Rpdml0eSBmb3IgdGhpcyBkYXRhYmFzZSwg
aXQgd2lsbCBiZSBkZWxldGVkIGhlcmUuCisgICAgbV9zZXJ2ZXIuY2xvc2VVbmlxdWVJREJEYXRh
YmFzZSgqdGhpcyk7Cit9CisKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1FcnJvckNh
bGxiYWNrKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCRXJyb3ImIGVycm9y
KQogewogICAgIGF1dG8gY2FsbGJhY2sgPSBtX2Vycm9yQ2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJ
ZGVudGlmaWVyKTsKLSAgICBBU1NFUlQoY2FsbGJhY2spOwotICAgIGNhbGxiYWNrKGVycm9yKTsK
KyAgICBBU1NFUlQoY2FsbGJhY2sgfHwgbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSk7CisgICAg
aWYgKGNhbGxiYWNrKQorICAgICAgICBjYWxsYmFjayhlcnJvcik7CiB9CiAKIHZvaWQgVW5pcXVl
SURCRGF0YWJhc2U6OnBlcmZvcm1LZXlEYXRhQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIGNvbnN0IElEQktleURhdGEmIHJlc3VsdEtl
eSkKIHsKICAgICBhdXRvIGNhbGxiYWNrID0gbV9rZXlEYXRhQ2FsbGJhY2tzLnRha2UoY2FsbGJh
Y2tJZGVudGlmaWVyKTsKLSAgICBBU1NFUlQoY2FsbGJhY2spOwotICAgIGNhbGxiYWNrKGVycm9y
LCByZXN1bHRLZXkpOworICAgIEFTU0VSVChjYWxsYmFjayB8fCBtX2hhcmRDbG9zZWRGb3JVc2Vy
RGVsZXRlKTsKKyAgICBpZiAoY2FsbGJhY2spCisgICAgICAgIGNhbGxiYWNrKGVycm9yLCByZXN1
bHRLZXkpOwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtR2V0UmVzdWx0Q2Fs
bGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3Is
IGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0RGF0YSkKIHsKICAgICBhdXRvIGNhbGxiYWNrID0g
bV9nZXRSZXN1bHRDYWxsYmFja3MudGFrZShjYWxsYmFja0lkZW50aWZpZXIpOwotICAgIEFTU0VS
VChjYWxsYmFjayk7Ci0gICAgY2FsbGJhY2soZXJyb3IsIHJlc3VsdERhdGEpOworICAgIEFTU0VS
VChjYWxsYmFjayB8fCBtX2hhcmRDbG9zZWRGb3JVc2VyRGVsZXRlKTsKKyAgICBpZiAoY2FsbGJh
Y2spCisgICAgICAgIGNhbGxiYWNrKGVycm9yLCByZXN1bHREYXRhKTsKIH0KIAogdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybUNvdW50Q2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVu
dGlmaWVyLCBjb25zdCBJREJFcnJvciYgZXJyb3IsIHVpbnQ2NF90IGNvdW50KQogewogICAgIGF1
dG8gY2FsbGJhY2sgPSBtX2NvdW50Q2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJZGVudGlmaWVyKTsK
LSAgICBBU1NFUlQoY2FsbGJhY2spOwotICAgIGNhbGxiYWNrKGVycm9yLCBjb3VudCk7CisgICAg
QVNTRVJUKGNhbGxiYWNrIHx8IG1faGFyZENsb3NlZEZvclVzZXJEZWxldGUpOworICAgIGlmIChj
YWxsYmFjaykKKyAgICAgICAgY2FsbGJhY2soZXJyb3IsIGNvdW50KTsKIH0KIAogdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6Zm9yZ2V0RXJyb3JDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50
aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IGI4MzdlMTkuLmJlNTY3NjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9V
bmlxdWVJREJEYXRhYmFzZS5oCkBAIC0xMDUsNiArMTA1LDcgQEAgcHVibGljOgogICAgIHZvaWQg
ZW5xdWV1ZVRyYW5zYWN0aW9uKFJlZjxVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uPiYmKTsK
IAogICAgIHZvaWQgaGFuZGxlRGVsZXRlKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYsIGNvbnN0IElE
QlJlcXVlc3REYXRhJik7CisgICAgdm9pZCBpbW1lZGlhdGVDbG9zZUZvclVzZXJEZWxldGUoKTsK
IAogICAgIHN0YXRpYyBKU0M6OlZNJiBkYXRhYmFzZVRocmVhZFZNKCk7CiAgICAgc3RhdGljIEpT
Qzo6RXhlY1N0YXRlJiBkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpOwpAQCAtMjI1LDYgKzIyNiw3
IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDx1aW50NjRfdD4gbV9vYmplY3RTdG9yZVdyaXRlVHJh
bnNhY3Rpb25zOwogCiAgICAgYm9vbCBtX2RlbGV0ZUJhY2tpbmdTdG9yZUluUHJvZ3Jlc3MgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9oYXJkQ2xvc2VkRm9yVXNlckRlbGV0ZSB7IGZhbHNlIH07CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0Nyb3NzVGhyZWFkQ29waWVyLmNwcAppbmRleCA0ZmYzMzRkLi5hMGQ3MzljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCkBAIC04NSw2ICs4NSwx
MSBAQCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBUaHJlYWRTYWZlRGF0YUJ1
ZmZlcj46OlR5cGUgQ3Jvc3NUaHJlYWRDb3BpZQogICAgIHJldHVybiBUaHJlYWRTYWZlRGF0YUJ1
ZmZlcihidWZmZXIpOwogfQogCitDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBz
dGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50Pjo6VHlwZSBDcm9zc1RocmVhZENv
cGllckJhc2U8ZmFsc2UsIGZhbHNlLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3Bv
aW50Pjo6Y29weShjb25zdCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50JiB0
aW1lUG9pbnQpCit7CisgICAgcmV0dXJuIHRpbWVQb2ludDsKK30KKwogLy8gVGVzdCBDcm9zc1Ro
cmVhZENvcGllciB1c2luZyBDT01QSUxFX0FTU0VSVC4KIAogLy8gVmVyaWZ5IHRoYXQgVGhyZWFk
U2FmZVJlZkNvdW50ZWQgb2JqZWN0cyBnZXQgaGFuZGxlZCBjb3JyZWN0bHkuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAppbmRleCA4NDk0YmY1Li5mYTgzYzY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKQEAgLTE2
MCw2ICsxNjAsMTEgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZh
bHNlLCBmYWxzZSwgVGhyZWFkU2FmZURhdGFCdWZmZXI+IHsKICAgICBzdGF0aWMgVHlwZSBjb3B5
KGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJik7CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
cm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Ns
b2NrOjp0aW1lX3BvaW50PiB7CisgICAgdHlwZWRlZiBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2Nr
Ojp0aW1lX3BvaW50IFR5cGU7CisgICAgc3RhdGljIFR5cGUgY29weShjb25zdCBUeXBlJiBzb3Vy
Y2UpOworfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHN0cnVjdCBDcm9zc1RocmVhZENvcGll
ciA6IHB1YmxpYyBDcm9zc1RocmVhZENvcGllckJhc2U8Q3Jvc3NUaHJlYWRDb3BpZXJCYXNlSGVs
cGVyOjpJc0VudW1PckNvbnZlcnRpYmxlVG9JbnRlZ2VyPFQ+Ojp2YWx1ZSwgQ3Jvc3NUaHJlYWRD
b3BpZXJCYXNlSGVscGVyOjpJc1RocmVhZFNhZmVSZWZDb3VudGVkUG9pbnRlcjxUPjo6dmFsdWUs
IFQ+IHsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0
YWJhc2VQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFz
ZVByb2Nlc3MuY3BwCmluZGV4IGQwY2JiNDYuLjgzNWZjMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCkBAIC0yNTksMTMgKzI1
OSw4IEBAIHZvaWQgRGF0YWJhc2VQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YShXZWJDb3JlOjpT
ZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0CiAgICAgfSkpOwogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0
ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpKSB7Ci0gICAgICAgIHBvc3REYXRhYmFzZVRh
c2soc3RkOjptYWtlX3VuaXF1ZTxDcm9zc1RocmVhZFRhc2s+KFt0aGlzLCBjYWxsYmFja0FnZ3Jl
Z2F0b3IsIG1vZGlmaWVkU2luY2VdIHsKLQotICAgICAgICAgICAgZGVsZXRlSW5kZXhlZERhdGFi
YXNlRW50cmllc01vZGlmaWVkU2luY2UobW9kaWZpZWRTaW5jZSk7Ci0gICAgICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLSAgICAgICAg
fSkpOwotICAgIH0KKyAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0
YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykpCisgICAgICAgIGlkYlNlcnZlcigpLmNsb3NlQW5k
RGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZShtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yXSB7IH0pOwogI2VuZGlmCiB9CiAKQEAgLTI5MiwxNyArMjg3LDggQEAgdm9pZCBEYXRh
YmFzZVByb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhXZWJDb3JlOjpTZXNzaW9u
SUQsIE9wdGlvblNldDwKICAgICB9KSk7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
LSAgICBpZiAod2Vic2l0ZURhdGFUeXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4
ZWREQkRhdGFiYXNlcykpIHsKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbj4+IHNlY3VyaXR5T3JpZ2luczsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzZWN1
cml0eU9yaWdpbkRhdGEgOiBzZWN1cml0eU9yaWdpbkRhdGFzKQotICAgICAgICAgICAgc2VjdXJp
dHlPcmlnaW5zLmFwcGVuZChzZWN1cml0eU9yaWdpbkRhdGEuc2VjdXJpdHlPcmlnaW4oKSk7Ci0K
LSAgICAgICAgcG9zdERhdGFiYXNlVGFzayhzdGQ6Om1ha2VfdW5pcXVlPENyb3NzVGhyZWFkVGFz
az4oW3RoaXMsIHNlY3VyaXR5T3JpZ2lucywgY2FsbGJhY2tBZ2dyZWdhdG9yXSB7Ci0gICAgICAg
ICAgICBkZWxldGVJbmRleGVkRGF0YWJhc2VFbnRyaWVzRm9yT3JpZ2lucyhzZWN1cml0eU9yaWdp
bnMpOwotCi0gICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLSAgICAgICAgfSkpOwotICAgIH0KKyAgICBpZiAod2Vic2l0ZURhdGFU
eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlcykpCisgICAg
ICAgIGlkYlNlcnZlcigpLmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhzZWN1cml0
eU9yaWdpbkRhdGFzLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOwogI2VuZGlmCiB9CiAKQEAg
LTM1MCw1OSArMzM2LDYgQEAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4+
IERhdGFiYXNlUHJvY2Vzczo6aW5kZXhlZERhdGFiYXNlT3JpZ2lucygKICAgICByZXR1cm4gc2Vj
dXJpdHlPcmlnaW5zOwogfQogCi1zdGF0aWMgdm9pZCByZW1vdmVBbGxEYXRhYmFzZXNGb3JPcmln
aW5QYXRoKGNvbnN0IFN0cmluZyYgb3JpZ2luUGF0aCwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9j
azo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlKQotewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YWxzbyBjbG9zZS9pbnZhbGlkYXRlIGFueSBsaXZlIGhhbmRsZXMgdG8gdGhlIGRhdGFiYXNlIGZp
bGVzIHdlIGFyZSBhYm91dCB0byBkZWxldGUuCi0gICAgLy8gUmlnaHQgbm93OgotICAgIC8vICAg
ICAtIEZvciByZWFkLW9ubHkgb3BlcmF0aW9ucywgdGhleSB3aWxsIGNvbnRpbnVlIGZ1bmN0aW9u
aW5nIGFzIG5vcm1hbCBvbiB0aGUgdW5saW5rZWQgZmlsZS4KLSAgICAvLyAgICAgLSBGb3Igd3Jp
dGUgb3BlcmF0aW9ucywgdGhleSB3aWxsIHN0YXJ0IHByb2R1Y2luZyBlcnJvcnMgYXMgU1FMaXRl
IG5vdGljZXMgdGhlIG1pc3NpbmcgYmFja2luZyBzdG9yZS4KLSAgICAvLyBUaGlzIGlzIHRyYWNr
ZWQgYnkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTM0NwotCi0g
ICAgVmVjdG9yPFN0cmluZz4gZGF0YWJhc2VQYXRocyA9IGxpc3REaXJlY3Rvcnkob3JpZ2luUGF0
aCwgIioiKTsKLQotICAgIGZvciAoYXV0byYgZGF0YWJhc2VQYXRoIDogZGF0YWJhc2VQYXRocykg
ewotICAgICAgICBTdHJpbmcgZGF0YWJhc2VGaWxlID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KGRhdGFiYXNlUGF0aCwgIkluZGV4ZWREQi5zcWxpdGUzIik7Ci0KLSAgICAgICAgaWYgKCFmaWxl
RXhpc3RzKGRhdGFiYXNlRmlsZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBp
ZiAobW9kaWZpZWRTaW5jZSA+IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQ6
Om1pbigpKSB7Ci0gICAgICAgICAgICB0aW1lX3QgbW9kaWZpY2F0aW9uVGltZTsKLSAgICAgICAg
ICAgIGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoZGF0YWJhc2VGaWxlLCBtb2RpZmljYXRp
b25UaW1lKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKHN0
ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OmZyb21fdGltZV90KG1vZGlmaWNhdGlvblRpbWUpIDwg
bW9kaWZpZWRTaW5jZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGRlbGV0ZUZpbGUoZGF0YWJhc2VGaWxlKTsKLSAgICAgICAgZGVsZXRlRW1wdHlEaXJl
Y3RvcnkoZGF0YWJhc2VQYXRoKTsKLSAgICB9Ci0KLSAgICBkZWxldGVFbXB0eURpcmVjdG9yeShv
cmlnaW5QYXRoKTsKLX0KLQotdm9pZCBEYXRhYmFzZVByb2Nlc3M6OmRlbGV0ZUluZGV4ZWREYXRh
YmFzZUVudHJpZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW4+PiYgc2VjdXJpdHlPcmlnaW5zKQotewotICAgIGlmIChtX2luZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoY29uc3Qg
YXV0byYgc2VjdXJpdHlPcmlnaW4gOiBzZWN1cml0eU9yaWdpbnMpIHsKLSAgICAgICAgU3RyaW5n
IG9yaWdpblBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9pbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnksIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSk7Ci0KLSAgICAg
ICAgcmVtb3ZlQWxsRGF0YWJhc2VzRm9yT3JpZ2luUGF0aChvcmlnaW5QYXRoLCBzdGQ6OmNocm9u
bzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50OjptaW4oKSk7Ci0gICAgfQotfQotCi12b2lkIERh
dGFiYXNlUHJvY2Vzczo6ZGVsZXRlSW5kZXhlZERhdGFiYXNlRW50cmllc01vZGlmaWVkU2luY2Uo
c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlKQotewot
ICAgIGlmIChtX2luZGV4ZWREYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFZlY3RvcjxTdHJpbmc+IG9yaWdpblBhdGhzID0gbGlzdERpcmVjdG9yeSht
X2luZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgIioiKTsKLSAgICBmb3IgKGF1dG8mIG9yaWdpblBh
dGggOiBvcmlnaW5QYXRocykKLSAgICAgICAgcmVtb3ZlQWxsRGF0YWJhc2VzRm9yT3JpZ2luUGF0
aChvcmlnaW5QYXRoLCBtb2RpZmllZFNpbmNlKTsKLX0KICNlbmRpZgogCiB2b2lkIERhdGFiYXNl
UHJvY2Vzczo6Z2V0U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9iRmlsZXMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGZpbGVuYW1lcywgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGVBcnJheSYpPiBjb21wbGV0aW9uSGFuZGxlcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuaCBiL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuaAppbmRleCBlNzg5MDIyLi43MWUx
ZWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQ
cm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJv
Y2Vzcy5oCkBAIC0xMTAsOCArMTEwLDYgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+PiBp
bmRleGVkRGF0YWJhc2VPcmlnaW5zKCk7Ci0gICAgdm9pZCBkZWxldGVJbmRleGVkRGF0YWJhc2VF
bnRyaWVzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luPj4mKTsKLSAgICB2b2lkIGRlbGV0ZUluZGV4ZWREYXRhYmFzZUVudHJpZXNNb2RpZmllZFNp
bmNlKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZSk7
CiAjZW5kaWYKIAogICAgIC8vIEZvciBleGVjdXRpb24gb24gd29yayBxdWV1ZSB0aHJlYWQgb25s
eQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279323</attachid>
            <date>2016-05-18 17:08:55 -0700</date>
            <delta_ts>2016-05-19 15:23:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157626-20160518170954.patch</filename>
            <type>text/plain</type>
            <size>19389</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjJhODdmNGJhZDVhMDU2
ZjkyMDZiNDdjZGZhYmExMzI0ODJlZTBlNC4uZThiY2MzMTI3MTc1NjA2YjgyMWNkZjFjNTMyMTEx
YjM4MjIyYjczNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE2LTA1LTE4ICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBGaW5pc2hpbmcgb2ZmOiBN
b2Rlcm4gSURCOiBXZWJzaXRlIGRhdGEgc3RvcmUgbWFuYWdlbWVudC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzYyNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHN0b3JhZ2UvaW5kZXhlZGRi
L21vZGVybi9uZXctZGF0YWJhc2UtYWZ0ZXItdXNlci1kZWxldGUuaHRtbAorCisgICAgICAgIFRo
aXMgcGF0Y2ggZG9lcyB0d28gcHJpbWFyeSB0aGluZ3M6CisgICAgICAgIDEgLSBJbXBsZW1lbnRz
IHRoZSBhY3R1YWwgImRlbGV0ZSBmaWxlcyBvbiBkaXNrIiBjb2RlIGZvciB1bm9wZW5lZCBkYXRh
YmFzZXMsCisgICAgICAgICAgICB0YWtlbiBmcm9tIGV4aXN0aW5nIFdLMiBjb2RlLgorCisgICAg
ICAgIDIgLSBXaGVuIGEgVW5pcXVlSUJERGF0YWJhc2UgaXMgdG9sZCB0byBjbG9zZSBpbW1lZGlh
dGVseSBmb3IgdXNlciBkZWxldGUsIGl0IGFsc28KKyAgICAgICAgICAgIHF1ZXVlcyB1cCBhICJk
ZWxldGUgYmFja2luZyBzdG9yZSB1bmNvbmRpdGlvbmFsbHkiIG9wZXJhdGlvbiBpbiB0aGUgZGF0
YWJhc2UgdGFzayBxdWV1ZS4KKworICAgICAgICAgICAgVGhhdCB3YXksIGFsbCBvZiB0aGUgb3Bl
biBkYXRhYmFzZXMgYXJlIGRlbGV0ZWQgYmVmb3JlIHRoZSBwcmltYXJ5ICJkZWxldGUgYWxsIGZp
bGVzIgorICAgICAgICAgICAgcGFzcywgYW5kIHRoZXkgYXJlIGFsc28gZGVsZXRlZCBiZWZvcmUg
YW55IGZ1dHVyZSBvcGVuREIgcmVxdWVzdHMgYXJlIGhhbmRsZWQgdGhhdCBtaWdodAorICAgICAg
ICAgICAgcmVjcmVhdGUgdGhlIGZpbGVzLgorICAgICAgICAgICAgCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6Y2xvc2VVbmlxdWVJREJEYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OnJlbW92ZUFsbERhdGFiYXNlc0Zvck9yaWdpblBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnBlcmZvcm1DbG9zZUFuZERlbGV0ZURh
dGFiYXNlc01vZGlmaWVkU2luY2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJT
ZXJ2ZXI6OnBlcmZvcm1DbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9yaWdpbnMpOgorCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1VbmNv
bmRpdGlvbmFsRGVsZXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6VW5pcXVlSURCRGF0YWJhc2U6OmltbWVkaWF0ZUNsb3NlRm9yVXNlckRlbGV0ZSk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisKIDIw
MTYtMDUtMTggIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUGxh
eWJhY2sgc2Vzc2lvbiBzZW5kcyBhdWRpbyBhbmQgdGV4dCB0cmFjayBsaXN0cyB3aGVuIG1lZGlh
IGRvZXMgbm90IGhhdmUgYXVkaW8gb3IgdGV4dCB0cmFja3MuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOTM3OGYz
OTYxNGYyMmNiZGYxM2RmMjQxMmU5NDRlN2UzYTJmNzYxNC4uNGMxYjVlZDhmMzZhMTNmM2RiOWY3
YTFlYTE2MDRhMmMzYjVlNTE2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE5IEBACiAyMDE2LTA1
LTE4ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAorICAgICAgICBGaW5pc2hp
bmcgb2ZmOiBNb2Rlcm4gSURCOiBXZWJzaXRlIGRhdGEgc3RvcmUgbWFuYWdlbWVudC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzYyNgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRGF0YWJhc2VQcm9j
ZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vz
czo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKToKKyAgICAgICAgKFdlYktpdDo6cmVtb3Zl
QWxsRGF0YWJhc2VzRm9yT3JpZ2luUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkRh
dGFiYXNlUHJvY2Vzczo6ZGVsZXRlSW5kZXhlZERhdGFiYXNlRW50cmllc0Zvck9yaWdpbnMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6OmRlbGV0ZUluZGV4ZWRE
YXRhYmFzZUVudHJpZXNNb2RpZmllZFNpbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBEYXRhYmFz
ZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmg6CisKKzIwMTYtMDUtMTggIEJyYWR5IEVpZHNvbiAg
PGJlaWRzb25AYXBwbGUuY29tPgorCiAgICAgICAgIEZpeCBudWxsLWRlcmVmIGNyYXNoIHNwb3Jh
ZGljYWxseSBzZWVuIGFmdGVyIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIwMTA5
OAogCiAgICAgICAgIE5vIHJldmlldy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKaW5kZXggNDFjMGQwNjllZTZhODY4M2Rk
MzFlOTU2NWM2ZTU2NjQ2YjU5MGI1YS4uOWJhZTNiZDI1MDIyZjY4NGJlZDk3YWI5MWYwYmE5MWIz
ZDAyNWY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQlNlcnZlci5jcHAKQEAgLTE2Niw4ICsxNjYsNyBAQCB2b2lkIElEQlNlcnZlcjo6
Y2xvc2VVbmlxdWVJREJEYXRhYmFzZShVbmlxdWVJREJEYXRhYmFzZSYgZGF0YWJhc2UpCiB7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIklEQlNlcnZlcjo6Y2xvc2VVbmlxdWVJREJEYXRhYmFzZSIpOwog
Ci0gICAgYXV0byBkZWxldGVkRGF0YWJhc2UgPSBtX3VuaXF1ZUlEQkRhdGFiYXNlTWFwLnRha2Uo
ZGF0YWJhc2UuaWRlbnRpZmllcigpKTsKLSAgICBBU1NFUlRfVU5VU0VEKGRlbGV0ZWREYXRhYmFz
ZSwgZGVsZXRlZERhdGFiYXNlLmdldCgpID09ICZkYXRhYmFzZSk7CisgICAgbV91bmlxdWVJREJE
YXRhYmFzZU1hcC5yZW1vdmUoZGF0YWJhc2UuaWRlbnRpZmllcigpKTsKIH0KIAogdm9pZCBJREJT
ZXJ2ZXI6OmFib3J0VHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIpCkBAIC01MzAsMTUgKzUyOSw1MiBAQCB2b2lkIElEQlNlcnZlcjo6
Y2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9y
aWdpbkRhdAogICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmSURCU2VydmVyOjpwZXJmb3JtQ2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zLCBv
cmlnaW5zLCBjYWxsYmFja0lEKSk7CiB9CiAKLXZvaWQgSURCU2VydmVyOjpwZXJmb3JtQ2xvc2VB
bmREZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6
OnRpbWVfcG9pbnQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCitzdGF0aWMgdm9pZCByZW1vdmVBbGxE
YXRhYmFzZXNGb3JPcmlnaW5QYXRoKGNvbnN0IFN0cmluZyYgb3JpZ2luUGF0aCwgc3RkOjpjaHJv
bm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlKQogewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgZGVsZXRpbmcgdGhlIGZpbGVzLgorICAgIFZlY3RvcjxTdHJpbmc+IGRh
dGFiYXNlUGF0aHMgPSBsaXN0RGlyZWN0b3J5KG9yaWdpblBhdGgsICIqIik7CisKKyAgICBmb3Ig
KGF1dG8mIGRhdGFiYXNlUGF0aCA6IGRhdGFiYXNlUGF0aHMpIHsKKyAgICAgICAgU3RyaW5nIGRh
dGFiYXNlRmlsZSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChkYXRhYmFzZVBhdGgsICJJbmRl
eGVkREIuc3FsaXRlMyIpOworCisgICAgICAgIGlmICghZmlsZUV4aXN0cyhkYXRhYmFzZUZpbGUp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKG1vZGlmaWVkU2luY2UgPiBz
dGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50OjptaW4oKSkgeworICAgICAgICAg
ICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7CisgICAgICAgICAgICBpZiAoIWdldEZpbGVNb2Rp
ZmljYXRpb25UaW1lKGRhdGFiYXNlRmlsZSwgbW9kaWZpY2F0aW9uVGltZSkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChzdGQ6OmNocm9ubzo6c3lzdGVtX2Ns
b2NrOjpmcm9tX3RpbWVfdChtb2RpZmljYXRpb25UaW1lKSA8IG1vZGlmaWVkU2luY2UpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBTUUxpdGVGaWxlU3lz
dGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoZGF0YWJhc2VGaWxlKTsKKyAgICAgICAgZGVsZXRlRW1w
dHlEaXJlY3RvcnkoZGF0YWJhc2VQYXRoKTsKKyAgICB9CisKKyAgICBkZWxldGVFbXB0eURpcmVj
dG9yeShvcmlnaW5QYXRoKTsKK30KKwordm9pZCBJREJTZXJ2ZXI6OnBlcmZvcm1DbG9zZUFuZERl
bGV0ZURhdGFiYXNlc01vZGlmaWVkU2luY2Uoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGlt
ZV9wb2ludCBtb2RpZmllZFNpbmNlLCB1aW50NjRfdCBjYWxsYmFja0lEKQoreworICAgIGlmICgh
bV9kYXRhYmFzZURpcmVjdG9yeVBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgIFZlY3RvcjxTdHJp
bmc+IG9yaWdpblBhdGhzID0gbGlzdERpcmVjdG9yeShtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwg
IioiKTsKKyAgICAgICAgZm9yIChhdXRvJiBvcmlnaW5QYXRoIDogb3JpZ2luUGF0aHMpCisgICAg
ICAgICAgICByZW1vdmVBbGxEYXRhYmFzZXNGb3JPcmlnaW5QYXRoKG9yaWdpblBhdGgsIG1vZGlm
aWVkU2luY2UpOworICAgIH0KKwogICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZJREJTZXJ2ZXI6OmRpZFBlcmZvcm1DbG9zZUFuZERlbGV0ZURh
dGFiYXNlcywgY2FsbGJhY2tJRCkpOwogfQogCi12b2lkIElEQlNlcnZlcjo6cGVyZm9ybUNsb3Nl
QW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5E
YXRhPiYsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCit2b2lkIElEQlNlcnZlcjo6cGVyZm9ybUNsb3Nl
QW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5E
YXRhPiYgb3JpZ2lucywgdWludDY0X3QgY2FsbGJhY2tJRCkKIHsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IGRlbGV0aW5nIHRoZSBmaWxlcy4KKyAgICBpZiAoIW1fZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG9yaWdpbiA6IG9yaWdp
bnMpIHsKKyAgICAgICAgICAgIFN0cmluZyBvcmlnaW5QYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKS0+
ZGF0YWJhc2VJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgcmVtb3ZlQWxsRGF0YWJhc2VzRm9y
T3JpZ2luUGF0aChvcmlnaW5QYXRoLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3Bv
aW50OjptaW4oKSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBwb3N0RGF0YWJhc2VUYXNrUmVw
bHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmSURCU2VydmVyOjpkaWRQZXJmb3JtQ2xv
c2VBbmREZWxldGVEYXRhYmFzZXMsIGNhbGxiYWNrSUQpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRh
YmFzZS5jcHAKaW5kZXggZDRiZDY1ZGZiMTgxOWExNWY2ZGUzZGNkMTUxOGNjMzk2NDM4NWM1YS4u
MTg2YzM0MDI5MjRlNGZjMDM0N2Y1MzcxM2Q2NjJlYmFiN2Q1YTk4NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2UuY3BwCkBAIC0yNDUsNiArMjQ1LDIwIEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmRlbGV0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZp
CiAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywg
JlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWREZWxldGVCYWNraW5nU3RvcmUsIGRlbGV0ZWRWZXJzaW9u
KSk7CiB9CiAKK3ZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1VbmNvbmRpdGlvbmFsRGVs
ZXRlQmFja2luZ1N0b3JlKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBM
T0coSW5kZXhlZERCLCAiKGRiKSBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVVuY29uZGl0aW9u
YWxEZWxldGVCYWNraW5nU3RvcmUiKTsKKworICAgIGlmICghbV9iYWNraW5nU3RvcmUpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fYmFja2luZ1N0b3JlLT5kZWxldGVCYWNraW5nU3RvcmUoKTsK
KyAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CisgICAgbV9iYWNraW5nU3RvcmVTdXBwb3J0
c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucyA9IGZhbHNlOworICAgIG1fYmFja2luZ1N0b3JlSXNF
cGhlbWVyYWwgPSBmYWxzZTsKK30KKwogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRl
QmFja2luZ1N0b3JlKHVpbnQ2NF90IGRlbGV0ZWRWZXJzaW9uKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CkBAIC0xNjAxLDggKzE2MTUsMTAgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6aW1tZWRpYXRlQ2xvc2VGb3JVc2VyRGVsZXRlKCkKICAgICAvLyBTZXQgdXAgdGhlIGRhdGFi
YXNlIHRvIHJlbWFpbiBhbGl2ZS1idXQtaW5lcnQgdW50aWwgYWxsIG9mIGl0cyBiYWNrZ3JvdW5k
IGFjdGl2aXR5IGZpbmlzaGVzIGFuZCBhbGwKICAgICAvLyBkYXRhYmFzZSBjb25uZWN0aW9ucyBj
b25maXJtIHRoYXQgdGhleSBoYXZlIGNsb3NlZC4KICAgICBtX2hhcmRDbG9zZWRGb3JVc2VyRGVs
ZXRlID0gdHJ1ZTsKLSAgICBpZiAoIWRvbmVXaXRoSGFyZENsb3NlKCkpCi0gICAgICAgIG1faGFy
ZENsb3NlUHJvdGVjdG9yID0gdGhpczsKKyAgICBtX2hhcmRDbG9zZVByb3RlY3RvciA9IHRoaXM7
CisKKyAgICAvLyBIYXZlIHRoZSBkYXRhYmFzZSB1bmNvbmRpdGlvbmFsbHkgZGVsZXRlIGl0c2Vs
ZiBvbiB0aGUgZGF0YWJhc2UgdGFzayBxdWV1ZS4KKyAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtVW5jb25k
aXRpb25hbERlbGV0ZUJhY2tpbmdTdG9yZSkpOwogCiAgICAgLy8gUmVtb3ZlIHRoZSBkYXRhYmFz
ZSBmcm9tIHRoZSBJREJTZXJ2ZXIncyBzZXQgb2Ygb3BlbiBkYXRhYmFzZXMuCiAgICAgLy8gSWYg
dGhlcmUgaXMgbm8gaW4tcHJvZ3Jlc3MgYmFja2dyb3VuZCB0aHJlYWQgYWN0aXZpdHkgZm9yIHRo
aXMgZGF0YWJhc2UsIGl0IHdpbGwgYmUgZGVsZXRlZCBoZXJlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
aAppbmRleCBhZTUwNGQ2ZGRkNTIzOTAxZWU3MTM3MzI0OTdiNDBkNDJjODMyZWMzLi4wMTFkNjRm
MDQ1M2QwNmRlN2I3MmViNDU2YzAxMTdhYmFiNzkzYWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
aApAQCAtMTUzLDYgKzE1Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwZXJmb3JtT3BlbkN1cnNv
cih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJDdXJzb3JJbmZvJik7CiAgICAgdm9p
ZCBwZXJmb3JtSXRlcmF0ZUN1cnNvcih1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJS
ZXNvdXJjZUlkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIGNvbnN0IElEQktleURhdGEmLCB1
bnNpZ25lZCBsb25nIGNvdW50KTsKICAgICB2b2lkIHBlcmZvcm1BY3RpdmF0ZVRyYW5zYWN0aW9u
SW5CYWNraW5nU3RvcmUodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyLCBjb25zdCBJREJUcmFu
c2FjdGlvbkluZm8mKTsKKyAgICB2b2lkIHBlcmZvcm1VbmNvbmRpdGlvbmFsRGVsZXRlQmFja2lu
Z1N0b3JlKCk7CiAKICAgICAvLyBNYWluIHRocmVhZCBjYWxsYmFja3MKICAgICB2b2lkIGRpZERl
bGV0ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVkVmVyc2lvbik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCmluZGV4IDdlODMx
Y2Y0ZWVkYmZiN2YyZGI0ZTJhMWE2MWExYTUwMDIyOTIyN2QuLmJlZWI4YTg5MDgwZTM2NzViYTQ5
NTZmYmMzYjk4YTM3NzkzMThmZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCkBAIC0yODcsMTcgKzI4Nyw4IEBAIHZvaWQgRGF0
YWJhc2VQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoV2ViQ29yZTo6U2Vzc2lv
bklELCBPcHRpb25TZXQ8CiAgICAgfSkpOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0gICAgaWYgKHdlYnNpdGVEYXRhVHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRl
eGVkREJEYXRhYmFzZXMpKSB7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW4+PiBzZWN1cml0eU9yaWdpbnM7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgc2Vj
dXJpdHlPcmlnaW5EYXRhIDogc2VjdXJpdHlPcmlnaW5EYXRhcykKLSAgICAgICAgICAgIHNlY3Vy
aXR5T3JpZ2lucy5hcHBlbmQoc2VjdXJpdHlPcmlnaW5EYXRhLnNlY3VyaXR5T3JpZ2luKCkpOwot
Ci0gICAgICAgIHBvc3REYXRhYmFzZVRhc2soc3RkOjptYWtlX3VuaXF1ZTxDcm9zc1RocmVhZFRh
c2s+KFt0aGlzLCBzZWN1cml0eU9yaWdpbnMsIGNhbGxiYWNrQWdncmVnYXRvcl0gewotICAgICAg
ICAgICAgZGVsZXRlSW5kZXhlZERhdGFiYXNlRW50cmllc0Zvck9yaWdpbnMoc2VjdXJpdHlPcmln
aW5zKTsKLQotICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtjYWxsYmFja0Fn
Z3JlZ2F0b3JdIHsgfSk7Ci0gICAgICAgIH0pKTsKLSAgICB9CisgICAgaWYgKHdlYnNpdGVEYXRh
VHlwZXMuY29udGFpbnMoV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXMpKQorICAg
ICAgICBpZGJTZXJ2ZXIoKS5jbG9zZUFuZERlbGV0ZURhdGFiYXNlc0Zvck9yaWdpbnMoc2VjdXJp
dHlPcmlnaW5EYXRhcywgW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKICNlbmRpZgogfQogCkBA
IC0zNDUsNTkgKzMzNiw2IEBAIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+
PiBEYXRhYmFzZVByb2Nlc3M6OmluZGV4ZWREYXRhYmFzZU9yaWdpbnMoCiAgICAgcmV0dXJuIHNl
Y3VyaXR5T3JpZ2luczsKIH0KIAotc3RhdGljIHZvaWQgcmVtb3ZlQWxsRGF0YWJhc2VzRm9yT3Jp
Z2luUGF0aChjb25zdCBTdHJpbmcmIG9yaWdpblBhdGgsIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xv
Y2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZSkKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGFsc28gY2xvc2UvaW52YWxpZGF0ZSBhbnkgbGl2ZSBoYW5kbGVzIHRvIHRoZSBkYXRhYmFzZSBm
aWxlcyB3ZSBhcmUgYWJvdXQgdG8gZGVsZXRlLgotICAgIC8vIFJpZ2h0IG5vdzoKLSAgICAvLyAg
ICAgLSBGb3IgcmVhZC1vbmx5IG9wZXJhdGlvbnMsIHRoZXkgd2lsbCBjb250aW51ZSBmdW5jdGlv
bmluZyBhcyBub3JtYWwgb24gdGhlIHVubGlua2VkIGZpbGUuCi0gICAgLy8gICAgIC0gRm9yIHdy
aXRlIG9wZXJhdGlvbnMsIHRoZXkgd2lsbCBzdGFydCBwcm9kdWNpbmcgZXJyb3JzIGFzIFNRTGl0
ZSBub3RpY2VzIHRoZSBtaXNzaW5nIGJhY2tpbmcgc3RvcmUuCi0gICAgLy8gVGhpcyBpcyB0cmFj
a2VkIGJ5IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUzNDcKLQot
ICAgIFZlY3RvcjxTdHJpbmc+IGRhdGFiYXNlUGF0aHMgPSBsaXN0RGlyZWN0b3J5KG9yaWdpblBh
dGgsICIqIik7Ci0KLSAgICBmb3IgKGF1dG8mIGRhdGFiYXNlUGF0aCA6IGRhdGFiYXNlUGF0aHMp
IHsKLSAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZSA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChkYXRhYmFzZVBhdGgsICJJbmRleGVkREIuc3FsaXRlMyIpOwotCi0gICAgICAgIGlmICghZmls
ZUV4aXN0cyhkYXRhYmFzZUZpbGUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
aWYgKG1vZGlmaWVkU2luY2UgPiBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50
OjptaW4oKSkgewotICAgICAgICAgICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7Ci0gICAgICAg
ICAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKGRhdGFiYXNlRmlsZSwgbW9kaWZpY2F0
aW9uVGltZSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmIChz
dGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpmcm9tX3RpbWVfdChtb2RpZmljYXRpb25UaW1lKSA8
IG1vZGlmaWVkU2luY2UpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBkZWxldGVGaWxlKGRhdGFiYXNlRmlsZSk7Ci0gICAgICAgIGRlbGV0ZUVtcHR5RGly
ZWN0b3J5KGRhdGFiYXNlUGF0aCk7Ci0gICAgfQotCi0gICAgZGVsZXRlRW1wdHlEaXJlY3Rvcnko
b3JpZ2luUGF0aCk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VQcm9jZXNzOjpkZWxldGVJbmRleGVkRGF0
YWJhc2VFbnRyaWVzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luPj4mIHNlY3VyaXR5T3JpZ2lucykKLXsKLSAgICBpZiAobV9pbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNvbnN0
IGF1dG8mIHNlY3VyaXR5T3JpZ2luIDogc2VjdXJpdHlPcmlnaW5zKSB7Ci0gICAgICAgIFN0cmlu
ZyBvcmlnaW5QYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1faW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5LCBzZWN1cml0eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkpOwotCi0gICAg
ICAgIHJlbW92ZUFsbERhdGFiYXNlc0Zvck9yaWdpblBhdGgob3JpZ2luUGF0aCwgc3RkOjpjaHJv
bm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludDo6bWluKCkpOwotICAgIH0KLX0KLQotdm9pZCBE
YXRhYmFzZVByb2Nlc3M6OmRlbGV0ZUluZGV4ZWREYXRhYmFzZUVudHJpZXNNb2RpZmllZFNpbmNl
KHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZSkKLXsK
LSAgICBpZiAobV9pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBvcmlnaW5QYXRocyA9IGxpc3REaXJlY3Rvcnko
bV9pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnksICIqIik7Ci0gICAgZm9yIChhdXRvJiBvcmlnaW5Q
YXRoIDogb3JpZ2luUGF0aHMpCi0gICAgICAgIHJlbW92ZUFsbERhdGFiYXNlc0Zvck9yaWdpblBh
dGgob3JpZ2luUGF0aCwgbW9kaWZpZWRTaW5jZSk7Ci19CiAjZW5kaWYKIAogdm9pZCBEYXRhYmFz
ZVByb2Nlc3M6OmdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBmaWxlbmFtZXMsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlQXJyYXkmKT4gY29tcGxldGlvbkhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKaW5kZXggZTc4OTAyMjBhMmVk
M2EzMWU5N2U3ZjUzMjEyODFhOTE0MDVkOGZlYi4uNzFlMWVkMDMyMWY0NDI4NTU5N2RhY2I5MzA1
NjFlMTI1MzUzYjIyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0RhdGFiYXNlUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9E
YXRhYmFzZVByb2Nlc3MuaApAQCAtMTEwLDggKzExMCw2IEBAIHByaXZhdGU6CiAKICNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luPj4gaW5kZXhlZERhdGFiYXNlT3JpZ2lucygpOwotICAgIHZvaWQgZGVsZXRlSW5kZXhl
ZERhdGFiYXNlRW50cmllc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbj4+Jik7Ci0gICAgdm9pZCBkZWxldGVJbmRleGVkRGF0YWJhc2VFbnRyaWVz
TW9kaWZpZWRTaW5jZShzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlm
aWVkU2luY2UpOwogI2VuZGlmCiAKICAgICAvLyBGb3IgZXhlY3V0aW9uIG9uIHdvcmsgcXVldWUg
dGhyZWFkIG9ubHkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCA5YWQxYmM1YzUyMDI1ZmM4NzI0MGI0NzZkMzQ3NWZlOTU0YTBm
Yzk0Li42YzE5MDFiNjRhNDA3NDNkZjUxOGI1NmM5ZmRlMWViOWJlYWNhN2I1IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTYtMDUtMTggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29t
PgorCisgICAgICAgIEZpbmlzaGluZyBvZmY6IE1vZGVybiBJREI6IFdlYnNpdGUgZGF0YSBzdG9y
ZSBtYW5hZ2VtZW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU3NjI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vbmV3LWRhdGFiYXNlLWFmdGVyLXVzZXIt
ZGVsZXRlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIv
bW9kZXJuL25ldy1kYXRhYmFzZS1hZnRlci11c2VyLWRlbGV0ZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vcmVzb3VyY2VzL25ldy1kYXRhYmFzZS1hZnRl
ci11c2VyLWRlbGV0ZS5qczogQWRkZWQuCisgICAgICAgIAogMjAxNi0wNS0xOCAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMTg2NTY5KTog
bWVkaWEvcmVzdG9yZS1mcm9tLXBhZ2UtY2FjaGUuaHRtbCBpcyB2ZXJ5IGZsYWt5CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vbmV3LWRhdGFiYXNlLWFm
dGVyLXVzZXItZGVsZXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL21vZGVybi9uZXctZGF0YWJhc2UtYWZ0ZXItdXNlci1kZWxldGUtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjVjMzhjNWNjMTg5M2MzYTc0MTg2NmUyYTdlMjg5ZDNkOTZiYzI2MzYKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vbmV3LWRh
dGFiYXNlLWFmdGVyLXVzZXItZGVsZXRlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIxIEBACitU
ZXN0cyB0aGF0IGlmIHlvdSBwZXJmb3JtIGEgdXNlciBkZWxldGUgd2l0aCBhbiBvcGVuIGRhdGFi
YXNlIGNvbm5lY3Rpb24sIGFuZCB0aGVuIHlvdSByZS1vcGVuIHRoZSBzYW1lIGRhdGFiYXNlLCB0
aGF0IHRoZSBuZXcgZGF0YWJhc2UgaXMgYWN0dWFsbHkgbmV3LgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworaW5kZXhlZERCID0gc2VsZi5pbmRleGVkREIgfHwgc2VsZi53ZWJraXRJ
bmRleGVkREIgfHwgc2VsZi5tb3pJbmRleGVkREIgfHwgc2VsZi5tc0luZGV4ZWREQiB8fCBzZWxm
Lk9JbmRleGVkREI7CisKK2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYm5hbWUpCitpbmRleGVk
REIub3BlbihkYm5hbWUpCitJbml0aWFsIHVwZ3JhZGUgbmVlZGVkOiBPbGQgdmVyc2lvbiAtIDAg
TmV3IHZlcnNpb24gLSAxCitDcmVhdGVkIGFuIG9iamVjdFN0b3JlIGFuIHB1dCBhIHZhbHVlIGlu
IGl0CitWYWx1ZSB3YXMgc3RvcmVkIGluIG9iamVjdFN0b3JlCitWZXJzaW9uIGNoYW5nZSB0cmFu
c2FjdGlvbiBjb21wbGV0ZWQuIFZlcnNpb24gaXMgbm93IDEuIEFib3V0IHRvIHJlcXVlc3QgY2xl
YXJBbGxEYXRhYmFzZXMKK1JlcXVlc3RlZCBjbGVhckFsbERhdGFiYXNlcworRGF0YWJhc2UgY29u
bmVjdGlvbiBlcnJvcidlZCBvdXQuIE9wZW5pbmcgYSBuZXcgY29ubmVjdGlvbi4KK1Jlb3BlbmVk
IHVwZ3JhZGUgbmVlZGVkOiBPbGQgdmVyc2lvbiAtIDAgTmV3IHZlcnNpb24gLSAxCitbUEFTU10g
VGhlIGRhdGFiYXNlIGhhcyBubyBvYmplY3Qgc3RvcmVzLCBtZWFuaW5nIGl0IGlzIG5ldworUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9uZXctZGF0YWJhc2UtYWZ0
ZXItdXNlci1kZWxldGUuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVy
bi9uZXctZGF0YWJhc2UtYWZ0ZXItdXNlci1kZWxldGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ODgwZTkx
NWJiYTI5YmFiZDBjZGRkOWI3YmM3NGNkY2MyYmYyNjlmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL25ldy1kYXRhYmFzZS1hZnRlci11c2Vy
LWRlbGV0ZS5odG1sCkBAIC0wLDAgKzEsMTAgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvbmV3LWRhdGFiYXNlLWFmdGVyLXVzZXItZGVsZXRlLmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL21vZGVybi9yZXNvdXJjZXMvbmV3LWRhdGFiYXNlLWFmdGVyLXVzZXItZGVs
ZXRlLmpzIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3Jlc291cmNlcy9u
ZXctZGF0YWJhc2UtYWZ0ZXItdXNlci1kZWxldGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2M4ZTRiYzZmM2M3
MzNjYzUwNTIxMzRiMTk2ZmNmZWFkYTJkOTEwZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9yZXNvdXJjZXMvbmV3LWRhdGFiYXNlLWFmdGVy
LXVzZXItZGVsZXRlLmpzCkBAIC0wLDAgKzEsNzcgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0
IGlmIHlvdSBwZXJmb3JtIGEgdXNlciBkZWxldGUgd2l0aCBhbiBvcGVuIGRhdGFiYXNlIGNvbm5l
Y3Rpb24sIGFuZCB0aGVuIHlvdSByZS1vcGVuIHRoZSBzYW1lIGRhdGFiYXNlLCB0aGF0IHRoZSBu
ZXcgZGF0YWJhc2UgaXMgYWN0dWFsbHkgbmV3LiIpOworCitpbmRleGVkREJUZXN0KHByZXBhcmVE
YXRhYmFzZSk7CisKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIGZpbmlzaEpTVGVzdCgpOworfQor
CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkZWJ1ZyhtZXNzYWdlKTsKK30KKwordmFy
IGRiTmFtZTsKK2Z1bmN0aW9uIHByZXBhcmVEYXRhYmFzZShldmVudCkKK3sKKyAgICBsb2coIklu
aXRpYWwgdXBncmFkZSBuZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gIiArIGV2ZW50Lm9sZFZlcnNpb24g
KyAiIE5ldyB2ZXJzaW9uIC0gIiArIGV2ZW50Lm5ld1ZlcnNpb24pOworCisgICAgdmFyIHZlcnNp
b25UcmFuc2FjdGlvbiA9IGV2ZW50LnRhcmdldC50cmFuc2FjdGlvbjsKKyAgICB2YXIgZGF0YWJh
c2UgPSBldmVudC50YXJnZXQucmVzdWx0OworICAgIGRiTmFtZSA9IGRhdGFiYXNlLm5hbWU7Cisg
ICAgCisgICAgdmFyIG9iamVjdFN0b3JlID0gZGF0YWJhc2UuY3JlYXRlT2JqZWN0U3RvcmUoIlRl
c3RPYmplY3RTdG9yZSIpOworICAgIG9iamVjdFN0b3JlLnB1dCgiYmFyIiwgImZvbyIpLm9uc3Vj
Y2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBsb2coIlZhbHVlIHdhcyBzdG9yZWQgaW4gb2Jq
ZWN0U3RvcmUiKTsKKyAgICB9OworICAgIAorICAgIGxvZygiQ3JlYXRlZCBhbiBvYmplY3RTdG9y
ZSBhbiBwdXQgYSB2YWx1ZSBpbiBpdCIpOworICAgIAorICAgIGRhdGFiYXNlLm9uZXJyb3IgPSBm
dW5jdGlvbihldmVudCkgeworICAgICAgICBsb2coIkRhdGFiYXNlIGNvbm5lY3Rpb24gZXJyb3In
ZWQgb3V0LiBPcGVuaW5nIGEgbmV3IGNvbm5lY3Rpb24uIik7CisgICAgICAgIGNvbnRpbnVlVGVz
dCgpOworICAgIH0KKworICAgIHZlcnNpb25UcmFuc2FjdGlvbi5vbmFib3J0ID0gZnVuY3Rpb24o
ZXZlbnQpIHsKKyAgICAgICAgbG9nKCJJbml0aWFsIHVwZ3JhZGUgdmVyc2lvbmNoYW5nZSB0cmFu
c2FjdGlvbiB1bmV4cGVjdGVkIGFib3J0OiAiICsgZXZlbnQudHlwZSArICIgIiArIHZlcnNpb25U
cmFuc2FjdGlvbi5lcnJvci5uYW1lICsgIiwgIiArIHZlcnNpb25UcmFuc2FjdGlvbi5lcnJvci5t
ZXNzYWdlKTsKKyAgICAgICAgZG9uZSgpOworICAgIH0KKworICAgIHZlcnNpb25UcmFuc2FjdGlv
bi5vbmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGxvZygiVmVyc2lvbiBjaGFuZ2Ug
dHJhbnNhY3Rpb24gY29tcGxldGVkLiBWZXJzaW9uIGlzIG5vdyAiICsgZGF0YWJhc2UudmVyc2lv
biArICIuIEFib3V0IHRvIHJlcXVlc3QgY2xlYXJBbGxEYXRhYmFzZXMiKTsKKyAgICAgICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAgICBzZXRUaW1lb3V0KCJ0ZXN0UnVubmVy
LmNsZWFyQWxsRGF0YWJhc2VzKCk7IiwgMCk7CisgICAgICAgICAgICBsb2coIlJlcXVlc3RlZCBj
bGVhckFsbERhdGFiYXNlcyIpOworICAgICAgICB9CisgICAgfQorCisgICAgdmVyc2lvblRyYW5z
YWN0aW9uLm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBsb2coIkluaXRpYWwg
dXBncmFkZSB2ZXJzaW9uY2hhbmdlIHRyYW5zYWN0aW9uIHVuZXhwZWN0ZWQgZXJyb3I6ICIgKyBl
dmVudC50eXBlICsgIiAiICsgdmVyc2lvblRyYW5zYWN0aW9uLmVycm9yLm5hbWUgKyAiLCAiICsg
dmVyc2lvblRyYW5zYWN0aW9uLmVycm9yLm1lc3NhZ2UpOworICAgICAgICBkb25lKCk7CisgICAg
fQorfQorCitmdW5jdGlvbiBjb250aW51ZVRlc3QoKQoreworICAgIHZhciBvcGVuUmVxID0gaW5k
ZXhlZERCLm9wZW4oZGJOYW1lKTsKKyAgICAKKyAgICBvcGVuUmVxLm9uYmxvY2tlZCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICBsb2coIlNlY29uZCBvcGVuIHJlcXVlc3QgdW5leHBlY3RlZCBibG9j
a2VkIik7CisgICAgICAgIGRvbmUoKTsKKyAgICB9CisKKyAgICBvcGVuUmVxLm9udXBncmFkZW5l
ZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGxvZygiUmVvcGVuZWQgdXBncmFkZSBu
ZWVkZWQ6IE9sZCB2ZXJzaW9uIC0gIiArIGV2ZW50Lm9sZFZlcnNpb24gKyAiIE5ldyB2ZXJzaW9u
IC0gIiArIGV2ZW50Lm5ld1ZlcnNpb24pOworICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnJlc3Vs
dC5vYmplY3RTdG9yZU5hbWVzLmxlbmd0aCkKKyAgICAgICAgICAgIGxvZygiW0ZBSUxdIFRoZSBk
YXRhYmFzZSBoYXMgb2JqZWN0IHN0b3JlcyBhbHJlYWR5LCBidXQgc2hvdWxkbid0Iik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGxvZygiW1BBU1NdIFRoZSBkYXRhYmFzZSBoYXMgbm8gb2Jq
ZWN0IHN0b3JlcywgbWVhbmluZyBpdCBpcyBuZXciKTsKKyAgICAgICAgZG9uZSgpOworICAgIH0K
KworICAgIG9wZW5SZXEub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGxvZygiU2Vj
b25kIG9wZW4gcmVxdWVzdCB1bmV4cGVjdGVkIHN1Y2Nlc3MiKTsKKyAgICAgICAgZG9uZSgpOwor
ICAgIH0KK30K
</data>
<flag name="review"
          id="303384"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>