<?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>167656</bug_id>
          
          <creation_ts>2017-01-31 11:47:20 -0800</creation_ts>
          <short_desc>[Mac] Update CARingBuffer class</short_desc>
          <delta_ts>2017-02-01 17:50:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>Other</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>jer.noble</cc>
    
    <cc>thiago.lacerda</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1271813</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-01-31 11:47:20 -0800</bug_when>
    <thetext>Update class to be able to copy or mix input, and to allocate storage from the information in a stream description.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271841</commentid>
    <comment_count>1</comment_count>
      <attachid>300248</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-01-31 12:48:45 -0800</bug_when>
    <thetext>Created attachment 300248
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271843</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-31 12:51:16 -0800</bug_when>
    <thetext>Attachment 300248 did not pass style-queue:


ERROR: Source/WebCore/platform/audio/mac/CARingBuffer.h:58:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271891</commentid>
    <comment_count>3</comment_count>
      <attachid>300248</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-01-31 14:17:22 -0800</bug_when>
    <thetext>Comment on attachment 300248
Proposed patch

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

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:140
&gt; +        case CARingBuffer::Mix:
&gt; +            float* destination = static_cast&lt;float*&gt;(dest-&gt;mData);
&gt; +            vadd(destination, 1, reinterpret_cast&lt;float*&gt;(*buffers + srcOffset), 1, destination, 1, std::min&lt;size_t&gt;(nbytes, dest-&gt;mDataByteSize - destOffset));
&gt; +            break;

This doesn&apos;t feel right. A float is not the same size as a byte, so I feel like this is going to overrun outside the bounds of the passed in list. (Well, the std::min will keep that from happening, but it&apos;ll still not behave correctly.)

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:163
&gt; +    ZeroRange(static_cast&lt;Byte**&gt;(m_buffers-&gt;data()), m_channelCount, 0, m_capacityBytes);

You shouldn&apos;t have to zero anything here. Rather, just update the bounds below.

&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:184
&gt; +    uint64_t start, end;
&gt; +    getCurrentFrameBounds(start, end);
&gt; +    if (start == end)
&gt; +        setCurrentFrameBounds(startFrame, startFrame);
&gt; +

What&apos;s this for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272299</commentid>
    <comment_count>4</comment_count>
      <attachid>300248</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-02-01 15:12:40 -0800</bug_when>
    <thetext>Comment on attachment 300248
Proposed patch

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

&gt;&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:140
&gt;&gt; +            break;
&gt; 
&gt; This doesn&apos;t feel right. A float is not the same size as a byte, so I feel like this is going to overrun outside the bounds of the passed in list. (Well, the std::min will keep that from happening, but it&apos;ll still not behave correctly.)

Good point. While we the upcoming patches only use it with floats, we might as well support other the formats.

&gt;&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:163
&gt;&gt; +    ZeroRange(static_cast&lt;Byte**&gt;(m_buffers-&gt;data()), m_channelCount, 0, m_capacityBytes);
&gt; 
&gt; You shouldn&apos;t have to zero anything here. Rather, just update the bounds below.

Fixed.

&gt;&gt; Source/WebCore/platform/audio/mac/CARingBuffer.cpp:184
&gt;&gt; +
&gt; 
&gt; What&apos;s this for?

Oops, leftover testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272300</commentid>
    <comment_count>5</comment_count>
      <attachid>300359</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-02-01 15:13:29 -0800</bug_when>
    <thetext>Created attachment 300359
Updated patch, with API test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272302</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-01 15:16:36 -0800</bug_when>
    <thetext>Attachment 300359 did not pass style-queue:


ERROR: Source/WebCore/platform/audio/mac/CARingBuffer.h:59:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272303</commentid>
    <comment_count>7</comment_count>
      <attachid>300359</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-02-01 15:20:08 -0800</bug_when>
    <thetext>Comment on attachment 300359
Updated patch, with API test.

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

r=me, with nit

&gt; LayoutTests/webaudio/mediastreamaudiosourcenode.html:32
&gt; -                stream.getAudioTracks()[0].stop();
&gt; +//                stream.getAudioTracks()[0].stop();

We probably still need this. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272310</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-02-01 15:51:59 -0800</bug_when>
    <thetext>Committed r211539 and r211540: https://trac.webkit.org/r211539, https://trac.webkit.org/r211540</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272311</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-02-01 15:53:25 -0800</bug_when>
    <thetext>&lt;rdar://problem/30318329&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272349</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-02-01 17:50:39 -0800</bug_when>
    <thetext>Plus https://trac.webkit.org/r211545 to fix the 32-bit build.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300248</attachid>
            <date>2017-01-31 12:48:45 -0800</date>
            <delta_ts>2017-02-01 15:13:29 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>ring_buffer_patch_2.txt</filename>
            <type>text/plain</type>
            <size>6780</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTQ0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE3LTAxLTMxICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIFVwZGF0ZSBD
QVJpbmdCdWZmZXIgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NzY1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhlIG5ldyBjb2RlIGlzbid0IHVzZWQgeWV0LgorCisg
ICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmFsbG9jYXRlKTogR2V0IGFsbG9jYXRpb24gaW5mbyBmcm9t
IGEgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hBQkwp
OiBBZGQgYSBtb2RlIHBhcmFtZXRlciB0byBhbGxvdyBzYW1wbGVzIHRvIHJlcGxhY2Ugb3IgbWl4
IGludG8gZGVzdGluYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmZsdXNo
KTogTmV3LCBmbHVzaCBidWZmZXIgY29udGVudHMuCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdC
dWZmZXI6OnN0b3JlKTogSWYgc3RhcnQgPT0gZW1wdHksIHVwZGF0ZSBib3RoIHRvIHRoZSB0aW1l
c3RhbXAgcGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjpmZXRjaCk6
IEFkZCBtb2RlIHBhcmFtZXRlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5n
QnVmZmVyLmg6CisKIDIwMTctMDEtMzEgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtXZWJSVENdIEFkZCBhIGxpYndlYnJ0YyBBdWRpb01vZHVsZSBzcGVjaWZp
YyB0byBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJp
bmdCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L21hYy9DQVJpbmdCdWZmZXIuY3BwCShyZXZpc2lvbiAyMTE0MzcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsOCBAQAogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKE1FRElBVE9PTEJP
WCkKIAorI2luY2x1ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIlZl
Y3Rvck1hdGguaCIKICNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCkBAIC0zNiw2ICszOCw4IEBAIGNvbnN0IHVpbnQzMl90
IGtHZW5lcmFsUmluZ1RpbWVCb3VuZHNRdWUKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2lu
ZyBuYW1lc3BhY2UgVmVjdG9yTWF0aDsKKwogQ0FSaW5nQnVmZmVyOjpDQVJpbmdCdWZmZXIoKQog
ICAgIDogbV9jaGFubmVsQ291bnQoMCkKICAgICAsIG1fZnJhbWVDb3VudCgwKQpAQCAtNTAsNiAr
NTQsMTEgQEAgQ0FSaW5nQnVmZmVyOjp+Q0FSaW5nQnVmZmVyKCkKICAgICBkZWFsbG9jYXRlKCk7
CiB9CiAKK3ZvaWQgQ0FSaW5nQnVmZmVyOjphbGxvY2F0ZShjb25zdCBDQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24mIGZvcm1hdCwgc2l6ZV90IGZyYW1lQ291bnQpCit7CisgICAgYWxsb2NhdGUoZm9y
bWF0Lm51bWJlck9mQ2hhbm5lbFN0cmVhbXMoKSwgZm9ybWF0LmJ5dGVzUGVyRnJhbWUoKSwgZnJh
bWVDb3VudCk7Cit9CisKIHZvaWQgQ0FSaW5nQnVmZmVyOjphbGxvY2F0ZSh1aW50MzJfdCBjaGFu
bmVsQ291bnQsIHNpemVfdCBieXRlc1BlckZyYW1lLCBzaXplX3QgZnJhbWVDb3VudCkKIHsKICAg
ICBkZWFsbG9jYXRlKCk7CkBAIC0xMTMsMTQgKzEyMiwyNCBAQCBzdGF0aWMgdm9pZCBTdG9yZUFC
TChCeXRlKiogYnVmZmVycywgc2l6CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBGZXRjaEFCTChB
dWRpb0J1ZmZlckxpc3QqIGxpc3QsIHNpemVfdCBkZXN0T2Zmc2V0LCBCeXRlKiogYnVmZmVycywg
c2l6ZV90IHNyY09mZnNldCwgc2l6ZV90IG5ieXRlcykKK3N0YXRpYyB2b2lkIEZldGNoQUJMKEF1
ZGlvQnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IGRlc3RPZmZzZXQsIEJ5dGUqKiBidWZmZXJzLCBz
aXplX3Qgc3JjT2Zmc2V0LCBzaXplX3QgbmJ5dGVzLCBDQVJpbmdCdWZmZXI6OkZldGNoTW9kZSBt
b2RlKQogewogICAgIGludCBjaGFubmVsQ291bnQgPSBsaXN0LT5tTnVtYmVyQnVmZmVyczsKICAg
ICBBdWRpb0J1ZmZlciogZGVzdCA9IGxpc3QtPm1CdWZmZXJzOwogICAgIHdoaWxlICgtLWNoYW5u
ZWxDb3VudCA+PSAwKSB7CiAgICAgICAgIGlmIChkZXN0T2Zmc2V0ID4gZGVzdC0+bURhdGFCeXRl
U2l6ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8
Qnl0ZSo+KGRlc3QtPm1EYXRhKSArIGRlc3RPZmZzZXQsICpidWZmZXJzICsgc3JjT2Zmc2V0LCBz
dGQ6Om1pbjxzaXplX3Q+KG5ieXRlcywgZGVzdC0+bURhdGFCeXRlU2l6ZSAtIGRlc3RPZmZzZXQp
KTsKKworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBDQVJpbmdCdWZmZXI6
OkNvcHk6CisgICAgICAgICAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Qnl0ZSo+KGRlc3QtPm1EYXRh
KSArIGRlc3RPZmZzZXQsICpidWZmZXJzICsgc3JjT2Zmc2V0LCBzdGQ6Om1pbjxzaXplX3Q+KG5i
eXRlcywgZGVzdC0+bURhdGFCeXRlU2l6ZSAtIGRlc3RPZmZzZXQpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENBUmluZ0J1ZmZlcjo6TWl4OgorICAgICAgICAgICAgZmxvYXQq
IGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQqPihkZXN0LT5tRGF0YSk7CisgICAgICAg
ICAgICB2YWRkKGRlc3RpbmF0aW9uLCAxLCByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oKmJ1ZmZl
cnMgKyBzcmNPZmZzZXQpLCAxLCBkZXN0aW5hdGlvbiwgMSwgc3RkOjptaW48c2l6ZV90PihuYnl0
ZXMsIGRlc3QtPm1EYXRhQnl0ZVNpemUgLSBkZXN0T2Zmc2V0KSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCiAgICAgICAgICsrYnVmZmVyczsKICAgICAgICAgKytkZXN0OwogICAg
IH0KQEAgLTEzOCw2ICsxNTcsMTggQEAgaW5saW5lIHZvaWQgWmVyb0FCTChBdWRpb0J1ZmZlckxp
c3QqIGxpcwogICAgIH0KIH0KIAordm9pZCBDQVJpbmdCdWZmZXI6OmZsdXNoKCkKK3sKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2N1cnJlbnRGcmFtZUJvdW5kc0xvY2spOworICAgIFplcm9SYW5n
ZShzdGF0aWNfY2FzdDxCeXRlKio+KG1fYnVmZmVycy0+ZGF0YSgpKSwgbV9jaGFubmVsQ291bnQs
IDAsIG1fY2FwYWNpdHlCeXRlcyk7CisgICAgZm9yIChhdXRvIHRpbWVCb3VuZHMgOiBtX3RpbWVC
b3VuZHNRdWV1ZSkgeworICAgICAgICB0aW1lQm91bmRzLm1fc3RhcnRGcmFtZSA9IDA7CisgICAg
ICAgIHRpbWVCb3VuZHMubV9lbmRGcmFtZSA9IDA7CisgICAgICAgIHRpbWVCb3VuZHMubV91cGRh
dGVDb3VudGVyID0gMDsKKyAgICB9CisgICAgbV90aW1lQm91bmRzUXVldWVQdHIgPSAwOworfQor
CiBDQVJpbmdCdWZmZXI6OkVycm9yIENBUmluZ0J1ZmZlcjo6c3RvcmUoY29uc3QgQXVkaW9CdWZm
ZXJMaXN0KiBsaXN0LCBzaXplX3QgZnJhbWVzVG9Xcml0ZSwgdWludDY0X3Qgc3RhcnRGcmFtZSkK
IHsKICAgICBpZiAoIWZyYW1lc1RvV3JpdGUpCkBAIC0xNDYsNiArMTc3LDExIEBAIENBUmluZ0J1
ZmZlcjo6RXJyb3IgQ0FSaW5nQnVmZmVyOjpzdG9yZSgKICAgICBpZiAoZnJhbWVzVG9Xcml0ZSA+
IG1fZnJhbWVDb3VudCkKICAgICAgICAgcmV0dXJuIFRvb011Y2g7CiAKKyAgICB1aW50NjRfdCBz
dGFydCwgZW5kOworICAgIGdldEN1cnJlbnRGcmFtZUJvdW5kcyhzdGFydCwgZW5kKTsKKyAgICBp
ZiAoc3RhcnQgPT0gZW5kKQorICAgICAgICBzZXRDdXJyZW50RnJhbWVCb3VuZHMoc3RhcnRGcmFt
ZSwgc3RhcnRGcmFtZSk7CisKICAgICB1aW50NjRfdCBlbmRGcmFtZSA9IHN0YXJ0RnJhbWUgKyBm
cmFtZXNUb1dyaXRlOwogCiAgICAgaWYgKHN0YXJ0RnJhbWUgPCBjdXJyZW50RW5kRnJhbWUoKSkg
ewpAQCAtMjQ5LDcgKzI4NSw3IEBAIHVpbnQ2NF90IENBUmluZ0J1ZmZlcjo6Y3VycmVudEVuZEZy
YW1lKCkKICAgICByZXR1cm4gbV90aW1lQm91bmRzUXVldWVbaW5kZXhdLm1fZW5kRnJhbWU7CiB9
CiAKLUNBUmluZ0J1ZmZlcjo6RXJyb3IgQ0FSaW5nQnVmZmVyOjpmZXRjaChBdWRpb0J1ZmZlckxp
c3QqIGxpc3QsIHNpemVfdCBuRnJhbWVzLCB1aW50NjRfdCBzdGFydFJlYWQpCitDQVJpbmdCdWZm
ZXI6OkVycm9yIENBUmluZ0J1ZmZlcjo6ZmV0Y2goQXVkaW9CdWZmZXJMaXN0KiBsaXN0LCBzaXpl
X3QgbkZyYW1lcywgdWludDY0X3Qgc3RhcnRSZWFkLCBGZXRjaE1vZGUgbW9kZSkKIHsKICAgICBp
ZiAoIW5GcmFtZXMpCiAgICAgICAgIHJldHVybiBPazsKQEAgLTI4NiwxMSArMzIyLDExIEBAIENB
UmluZ0J1ZmZlcjo6RXJyb3IgQ0FSaW5nQnVmZmVyOjpmZXRjaCgKICAgICAKICAgICBpZiAob2Zm
c2V0MCA8IG9mZnNldDEpIHsKICAgICAgICAgbmJ5dGVzID0gb2Zmc2V0MSAtIG9mZnNldDA7Ci0g
ICAgICAgIEZldGNoQUJMKGxpc3QsIGRlc3RTdGFydEJ5dGVPZmZzZXQsIGJ1ZmZlcnMsIG9mZnNl
dDAsIG5ieXRlcyk7CisgICAgICAgIEZldGNoQUJMKGxpc3QsIGRlc3RTdGFydEJ5dGVPZmZzZXQs
IGJ1ZmZlcnMsIG9mZnNldDAsIG5ieXRlcywgbW9kZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
bmJ5dGVzID0gbV9jYXBhY2l0eUJ5dGVzIC0gb2Zmc2V0MDsKLSAgICAgICAgRmV0Y2hBQkwobGlz
dCwgZGVzdFN0YXJ0Qnl0ZU9mZnNldCwgYnVmZmVycywgb2Zmc2V0MCwgbmJ5dGVzKTsKLSAgICAg
ICAgRmV0Y2hBQkwobGlzdCwgZGVzdFN0YXJ0Qnl0ZU9mZnNldCArIG5ieXRlcywgYnVmZmVycywg
MCwgb2Zmc2V0MSk7CisgICAgICAgIEZldGNoQUJMKGxpc3QsIGRlc3RTdGFydEJ5dGVPZmZzZXQs
IGJ1ZmZlcnMsIG9mZnNldDAsIG5ieXRlcywgbW9kZSk7CisgICAgICAgIEZldGNoQUJMKGxpc3Qs
IGRlc3RTdGFydEJ5dGVPZmZzZXQgKyBuYnl0ZXMsIGJ1ZmZlcnMsIDAsIG9mZnNldDEsIG1vZGUp
OwogICAgICAgICBuYnl0ZXMgKz0gb2Zmc2V0MTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5oCShyZXZpc2lv
biAyMTE0MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIENBUmluZ0J1ZmZlcl9oCi0jZGVmaW5l
IENBUmluZ0J1ZmZlcl9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShXRUJfQVVESU8pICYm
IFVTRShNRURJQVRPT0xCT1gpCiAKQEAgLTM2LDYgKzM1LDggQEAgdHlwZWRlZiBzdHJ1Y3QgQXVk
aW9CdWZmZXJMaXN0IEF1ZGlvQnVmZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKKwogY2xhc3MgQ0FSaW5nQnVmZmVyIHsKIHB1YmxpYzoK
ICAgICBDQVJpbmdCdWZmZXIoKTsKQEAgLTQ4LDkgKzQ5LDE2IEBAIHB1YmxpYzoKICAgICB9Owog
CiAgICAgdm9pZCBhbGxvY2F0ZSh1aW50MzJfdCBtX2NoYW5uZWxDb3VudCwgc2l6ZV90IGJ5dGVz
UGVyRnJhbWUsIHNpemVfdCBmcmFtZUNvdW50KTsKKyAgICB2b2lkIGFsbG9jYXRlKGNvbnN0IENB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCk7CiAgICAgdm9pZCBkZWFsbG9jYXRlKCk7
CisKICAgICBFcnJvciBzdG9yZShjb25zdCBBdWRpb0J1ZmZlckxpc3QqLCBzaXplX3QgZnJhbWVD
b3VudCwgdWludDY0X3Qgc3RhcnRGcmFtZSk7Ci0gICAgRXJyb3IgZmV0Y2goQXVkaW9CdWZmZXJM
aXN0Kiwgc2l6ZV90IGZyYW1lQ291bnQsIHVpbnQ2NF90IHN0YXJ0RnJhbWUpOworCisgICAgZW51
bSBGZXRjaE1vZGUgeyBDb3B5LCBNaXggfTsKKyAgICBFcnJvciBmZXRjaChBdWRpb0J1ZmZlckxp
c3QqLCBzaXplX3QgZnJhbWVDb3VudCwgdWludDY0X3Qgc3RhcnRGcmFtZSwgRmV0Y2hNb2RlIG1v
ZGUgPSBDb3B5KTsKKworICAgIHZvaWQgZmx1c2goKTsKKwogICAgIHZvaWQgZ2V0Q3VycmVudEZy
YW1lQm91bmRzKHVpbnQ2NF90ICZzdGFydFRpbWUsIHVpbnQ2NF90ICZlbmRUaW1lKTsKIAogICAg
IHVpbnQzMl90IGNoYW5uZWxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbm5lbENvdW50OyB9
CkBAIC05MSw1ICs5OSwzIEBAIHByaXZhdGU6CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FV
RElPKSAmJiBVU0UoTUVESUFUT09MQk9YKQotCi0jZW5kaWYgLy8gQ0FSaW5nQnVmZmVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300359</attachid>
            <date>2017-02-01 15:13:29 -0800</date>
            <delta_ts>2017-02-01 15:52:20 -0800</delta_ts>
            <desc>Updated patch, with API test.</desc>
            <filename>caringbuffer_patch_4.txt</filename>
            <type>text/plain</type>
            <size>46084</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE3LTAyLTAxICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIFVwZGF0ZSBD
QVJpbmdCdWZmZXIgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NzY1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFQSSB0ZXN0IENBUmluZ0J1ZmZlclRlc3QgYWRkZWQuCisKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZCBoZWFkZXJzIHRvIGZyYW1ld29y
ayBzbyB0aGV5IGNhbiBiZSB1c2VkIGZyb20gdGhlIEFQSSB0ZXN0LgorCisgICAgICAgICogcGxh
dGZvcm0vYXVkaW8vQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oOiBBZGQgSW50MzIuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6
fkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb246OmZvcm1hdCk6IFN1cHBvcnQgSW50MzIuCisgICAgICAgIChXZWJDb3Jl
OjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Om9wZXJhdG9yPT0pOiBNYWtlIGlubGluZS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmg6CisK
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6Q0FSaW5nQnVmZmVyKTogTW92ZSBpbml0aWFsaXplcnMg
aW50byBjbGFzcyBkZWNsYXJhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6
YWxsb2NhdGUpOiBVc2UgZmx1c2ggbWV0aG9kLCBnZXQgYWxsb2NhdGlvbiBpbmZvIGZyb20gYSBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uCisgICAgICAgIChXZWJDb3JlOjpGZXRjaEFCTCk6IEFk
ZCBhIG1vZGUgcGFyYW1ldGVyIHRvIGFsbG93IHNhbXBsZXMgdG8gcmVwbGFjZSBvciBtaXggaW50
byBkZXN0aW5hdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkNBUmluZ0J1ZmZlcjo6Zmx1c2gpOiBO
ZXcuCisgICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6OmZldGNoKTogQWRkIG1vZGUgcGFy
YW1ldGVyLgorICAgICAgICAoV2ViQ29yZTo6Q0FSaW5nQnVmZmVyOjp+Q0FSaW5nQnVmZmVyKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDQVJpbmdCdWZmZXI6On5DQVJpbmdCdWZmZXIpOgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0F1ZGlvU291cmNlUHJvdmlkZXJBVkZP
YmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnBy
ZXBhcmUpOiBVc2UgbmV3IENBUmluZ0J1ZmZlciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNv
cmU6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3IhPSk6
IERlbGV0ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2ViQXVkaW9T
b3VyY2VQcm92aWRlckFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpXZWJBdWRpb1NvdXJj
ZVByb3ZpZGVyQVZGT2JqQzo6cHJlcGFyZSk6IFVzZSBuZXcgQ0FSaW5nQnVmZmVyIGNvbnN0cnVj
dG9yCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorCiAyMDE3LTAxLTMxICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IGRlYnVnIGxpYndl
YnJ0YyBidWlsZCBhZnRlciByMjExNDM5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTE0NjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTI3OCw2ICsyNzgsMTEgQEAKIAkJMDdCNzExNkQxRDg5OUU2MzAwOUYwRkZCIC8qIENh
cHR1cmVEZXZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3QjcxMTZBMUQ4OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDdCNzExNkUxRDg5OUU2
MzAwOUYwRkZCIC8qIENhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QjcxMTZCMUQ4OTlFNjMwMDlGMEZGQiAvKiBD
YXB0dXJlRGV2aWNlTWFuYWdlci5jcHAgKi87IH07CiAJCTA3QjcxMTZGMUQ4OTlFNjMwMDlGMEZG
QiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDdCNzExNkMxRDg5OUU2MzAwOUYwRkZCIC8qIENhcHR1cmVEZXZp
Y2VNYW5hZ2VyLmggKi87IH07CisJCTA3QzA0NkMzMUU0MjUwOEIwMDcyMDFFNyAvKiBDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDczQjg3NTcxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbi5jcHAgKi87IH07CisJCTA3QzA0NkM0MUU0MjUwOEIwMDcyMDFFNyAvKiBDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3M0I4NzU4MUU0MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwN0MwNDZDNzFFNDI1MTU1MDA3MjAxRTcgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVh
bUNvY29hLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA3QzA0NkM1MUU0MjUxMkYwMDcyMDFFNyAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFt
Q29jb2EuY3BwICovOyB9OworCQkwN0MwNDZDODFFNDI1MTU1MDA3MjAxRTcgLyogQXVkaW9UcmFj
a1ByaXZhdGVNZWRpYVN0cmVhbUNvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwN0MwNDZDNjFFNDI1MTJGMDA3MjAxRTcgLyogQXVkaW9UcmFja1By
aXZhdGVNZWRpYVN0cmVhbUNvY29hLmggKi87IH07CisJCTA3QzA0NkNCMUU0MjY0MTMwMDcyMDFF
NyAvKiBBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwNzNCODc1NjFFNDBEQ0U1MDA3MUMwRUMgLyogQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTA3QzFDMEUyMUJGQjYwMDEwMEJEMjI1NiAvKiBNZWRpYVRyYWNrU3VwcG9ydGVk
Q29uc3RyYWludHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3QzFDMEUwMUJGQjYwMDEwMEJEMjI1NiAvKiBNZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3Ry
YWludHMuaCAqLzsgfTsKIAkJMDdDMUMwRTUxQkZCNjBFRDAwQkQyMjU2IC8qIFJlYWx0aW1lTWVk
aWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDdDMUMwRTQxQkZCNjBFRDAwQkQyMjU2IC8qIFJlYWx0aW1l
TWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3Q0U3N0Q1MTY3MTJBNkEwMEM1NUE0NyAvKiBJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwN0NFNzdENDE2NzEyQTZBMDBDNTVBNDcgLyogSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC01ODk2LDcgKzU5MDEsNyBAQAogCQlDREM2OUREQTE2MzcxRkQ0MDA3
QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY5REQ4MTYzNzFGRDMwMDdDMzhE
RiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEQzY5RERCMTYzNzFGRDQwMDdDMzhE
RiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY5REQ5MTYzNzFGRDMwMDdDMzhERiAv
KiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSAqLzsgfTsKIAkJQ0RDNzM0MTQx
OTc3ODk2QzAwNDZCRkM1IC8qIENBUmluZ0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM3MzQxMjE5Nzc4OTZDMDA0NkJGQzUgLyogQ0FS
aW5nQnVmZmVyLmNwcCAqLzsgfTsKLQkJQ0RDNzM0MTUxOTc3ODk2RDAwNDZCRkM1IC8qIENBUmlu
Z0J1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RDNzM0MTMxOTc3ODk2QzAwNDZCRkM1IC8qIENBUmluZ0J1ZmZlci5oICovOyB9OworCQlDREM3
MzQxNTE5Nzc4OTZEMDA0NkJGQzUgLyogQ0FSaW5nQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM3MzQxMzE5Nzc4OTZDMDA0NkJGQzUgLyog
Q0FSaW5nQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQ0RDOEI1QTIxODA0NjM0NzAwMTZFNjg1IC8qIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQzhCNUEwMTgwNDYzNDcwMDE2RTY4NSAvKiBNZWRpYVBsYXllclByaXZhdGVN
ZWRpYVNvdXJjZUFWRk9iakMubW0gKi87IH07CiAJCUNEQzhCNUEzMTgwNDYzNDcwMDE2RTY4NSAv
KiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzhCNUExMTgwNDYzNDcwMDE2RTY4NSAv
KiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCAqLzsgfTsKIAkJQ0RDOEI1
QTYxODA0NzRGNzAwMTZFNjg1IC8qIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM4QjVBNDE4MDQ3NEY3
MDAxNkU2ODUgLyogTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbSAqLzsgfTsKQEAgLTE1MzQ5
LDYgKzE1MzU0LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTA3NzA3Q0IxMUUyMDY0OUMwMDAw
NUJGNyAvKiBBdWRpb0NhcHR1cmVTb3VyY2VQcm92aWRlck9iakMuaCAqLywKIAkJCQkwNzcwN0NB
RjFFMjA1RUM0MDAwMDVCRjcgLyogQXVkaW9Tb3VyY2VPYnNlcnZlck9iakMuaCAqLywKKwkJCQkw
N0MwNDZDNTFFNDI1MTJGMDA3MjAxRTcgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbUNv
Y29hLmNwcCAqLywKKwkJCQkwN0MwNDZDNjFFNDI1MTJGMDA3MjAxRTcgLyogQXVkaW9UcmFja1By
aXZhdGVNZWRpYVN0cmVhbUNvY29hLmggKi8sCiAJCQkJMDcwMzYzRDgxODFBMUNEQzAwQzA3NEE1
IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLmggKi8sCiAJCQkJMDcwMzYzRDkxODFBMUNEQzAwQzA3
NEE1IC8qIEFWQXVkaW9DYXB0dXJlU291cmNlLm1tICovLAogCQkJCTA3MDM2M0RBMTgxQTFDREMw
MEMwNzRBNSAvKiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi8sCkBAIC0yNDg4Niw4ICsyNDg5
Myw2IEBACiAJCUZEMzE2MEIwMTJCMDI3MDcwMEMxQTM1OSAvKiBtYWMgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTA3M0I4NzU3MUU0MERDRkQwMDcxQzBF
QyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwICovLAotCQkJCTA3M0I4NzU4MUU0MERD
RkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCAqLywKIAkJCQlGRDMxNjBC
NTEyQjAyNzJBMDBDMUEzNTkgLyogQXVkaW9CdXNNYWMubW0gKi8sCiAJCQkJRkQzMTYwQjYxMkIw
MjcyQTAwQzFBMzU5IC8qIEF1ZGlvRGVzdGluYXRpb25NYWMuY3BwICovLAogCQkJCUZEMzE2MEI3
MTJCMDI3MkEwMEMxQTM1OSAvKiBBdWRpb0Rlc3RpbmF0aW9uTWFjLmggKi8sCkBAIC0yNDg5OCw2
ICsyNDkwMyw4IEBACiAJCQkJQ0Q1NERFNDkxNzQ2OUM2RDAwNUU1QjM2IC8qIEF1ZGlvU2Vzc2lv
bk1hYy5jcHAgKi8sCiAJCQkJQ0RDNzM0MTIxOTc3ODk2QzAwNDZCRkM1IC8qIENBUmluZ0J1ZmZl
ci5jcHAgKi8sCiAJCQkJQ0RDNzM0MTMxOTc3ODk2QzAwNDZCRkM1IC8qIENBUmluZ0J1ZmZlci5o
ICovLAorCQkJCTA3M0I4NzU3MUU0MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24uY3BwICovLAorCQkJCTA3M0I4NzU4MUU0MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24uaCAqLywKIAkJCQlGRDMxNjBCQTEyQjAyNzJBMDBDMUEzNTkgLyogRkZU
RnJhbWVNYWMuY3BwICovLAogCQkJCUNENjY5RDY3MUQyMzJFMTAwMDREMTg2NiAvKiBNZWRpYVNl
c3Npb25NYW5hZ2VyTWFjLmggKi8sCiAJCQkJMDdFREMzRUQxQUFDQjc1RDAwOTgzRUI1IC8qIE1l
ZGlhU2Vzc2lvbk1hbmFnZXJNYWMubW0gKi8sCkBAIC0yNjU2Nyw2ICsyNjU3NCw3IEBACiAJCQkJ
RTEwNzQwMEUwRTc3QkRDMDAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTc1NzkzRUM5MEQwQ0U3MkQwMDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTFBREVEREEwRTc2QkQ5MzAwNEExQTVFIC8qIEpTTWVzc2FnZVBv
cnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3QzA0NkNCMUU0MjY0MTMwMDcyMDFFNyAvKiBBdWRp
b1N0cmVhbURlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREY0QjczMDFFMDNDQTRB
MDBFMjM1QTIgLyogSlNNb2NrQ0RNRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ2RjNF
OTUxQzFGODU1NTAwNjFEQkQ0IC8qIEpTTW9ja1BhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBODY2MjlEMTA5REEyQjQ4MDA5NjMzQTUgLyogSlNNb3VzZUV2ZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI3NjkxLDYgKzI3Njk5LDcgQEAKIAkJCQlBNzlCQURBNDE2MUU3RjNGMDBDMkU2
NTIgLyogUnVsZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ3NkJCODIxOTQ1NjMyNDAwQ0ZE
MjlBIC8qIFJ1bkxvb3BPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMUYwRDdF
MkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfYXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3QzA0
NkM0MUU0MjUwOEIwMDcyMDFFNyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBNTY5RDIxMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX21ldGhvZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMjMwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVf
b2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQyNTBEN0UyQjgyMDA3QzM5ODMgLyog
cnVudGltZV9yb290LmggaW4gSGVhZGVycyAqLywKQEAgLTI3NzU2LDYgKzI3NzY1LDcgQEAKIAkJ
CQkxQUFBRERFNDE0REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUEzRTgwMTkxQjMxNjkwMDBGMUI1NSAvKiBTY3JvbGxpbmdUcmVlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzkxQTk5RDE2MjlENzAw
MDAyOTczMzAgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTA3QzA0NkM4MUU0MjUxNTUwMDcyMDFFNyAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3Ry
ZWFtQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjg4OTBBMTY3RDJGQTEwMDEwQ0RBNSAv
KiBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0FBRkU4RDAx
OUNCODY3MjAwMEY1NkQ4IC8qIFNjcm9sbExhdGNoaW5nU3RhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUY0Nzg3NTU0MTk5ODNBRkYwMDI0QTI4NyAvKiBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yODMxMSw2ICsyODMyMSw3IEBACiAJCQkJQkU5MTNEODAxODFF
RjkyNDAwRENCMDlFIC8qIFRyYWNrUHJpdmF0ZUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUZG
QUMzMEZFMTg0RkIxNDUwMDhDNEYxRSAvKiBUcmFpbGluZ09iamVjdHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxNjA3MTMyMUJEODMwOEIwMERCQzRGMiAvKiBUcmFuc2FjdGlvbk9wZXJhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMDdDMDQ2QzIxRTQyNTAyMjAwNzIwMUU3IC8qIEF1ZGlvU2Ft
cGxlRGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFOTExQzQwRUY4NkQ0NzAwOUQw
Q0FGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4LmggaW4gSGVhZGVycyAqLywKIAkJCQlGQjQ4NEY0
RDE3MUY4MjFFMDAwNDA3NTUgLyogVHJhbnNmb3JtRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0OUU5MTFDRTBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4g
SGVhZGVycyAqLywKQEAgLTMwNDE4LDYgKzMwNDI5LDcgQEAKIAkJCQlFMTI4NEJCMjEwNDQ5RkZB
MDBFQUVCNTIgLyogSlNQYWdlVHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZEQTE1RUIxMTJCMDNFRTEwMDNBNTgzQSAvKiBKU1Bhbm5lck5vZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRTUxQTgxREYxNzI5OEQ3NzAwQkZDQTYxIC8qIEpTUGVyZm9ybWFuY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMDdDMDQ2QzExRTQyNTAyMjAwNzIwMUU3IC8qIEF1ZGlvU2FtcGxl
RGF0YVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDQjM4RkQ1MTFDQ0Y5Mzg5MDA1OTJB
M0YgLyogSlNQZXJmb3JtYW5jZUVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNCMzhGRDU3
MUNEMjFFMkEwMDU5MkEzRiAvKiBKU1BlcmZvcm1hbmNlRW50cnlDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTU4QzU5RDAxRTM4MkVBQzAwNDc4NTlDIC8qIEpTUGVyZm9ybWFuY2VNYXJr
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzA3NjMsNiArMzA3NzUsNyBAQAogCQkJCTUxN0E2M0M0
MUI3NDMxOEIwMEU3RENEQyAvKiBLZXllZEVuY29kZXJDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNTEzQjNEODExNEIxNjZBMDAxQzQyOUIgLyogS2V5RXZlbnRDb2NvYS5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTI2NTU0MTNBMTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlFdmVudElPUy5tbSBpbiBT
b3VyY2VzICovLAorCQkJCTA3QzA0NkMzMUU0MjUwOEIwMDcyMDFFNyAvKiBDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1QzQ3NzAwOUFDNEQ3MzAwQTZB
QUI0IC8qIEtleUV2ZW50TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE2RkUxMTkwRTZFMURB
NzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTEy
QTI1M0RCMUM4RkY3REMwMEMyMjI5NSAvKiBLZXlmcmFtZUVmZmVjdC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTMyMDA5LDYgKzMyMDIyLDcgQEAKIAkJCQk0OUM3QjlFNTEwNDJEMzJGMDAwOUQ0NDcg
LyogV2ViR0xUZXh0dXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZGOTk1QTIzMUE3MDc4QjEw
MEE3MzVGNCAvKiBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBDM0YxRjVBMTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwN0MwNDZDNzFFNDI1MTU1MDA3MjAxRTcgLyogQXVkaW9UcmFja1By
aXZhdGVNZWRpYVN0cmVhbUNvY29hLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZGOTk1QTI1MUE3
MDc4QjEwMEE3MzVGNCAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTZGMjIyQjc2MUFCNTJEOEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0
QmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3N0ExN0E3NzEyRjI4NjQyMDA0RTAyRjYgLyog
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVhbURlc2NyaXB0
aW9uLmgJKHJldmlzaW9uIDIxMTQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBA
QCBwdWJsaWM6CiAgICAgZW51bSBQQ01Gb3JtYXQgewogICAgICAgICBOb25lLAogICAgICAgICBJ
bnQxNiwKKyAgICAgICAgSW50MzIsCiAgICAgICAgIEZsb2F0MzIsCiAgICAgICAgIEZsb2F0NjQK
ICAgICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vbWFjL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5jcHAJKHJldmlzaW9uIDIxMTQ2
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCwxNSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uKCkKKyAgICA6IG1fc3RyZWFtRGVzY3JpcHRpb24oeyB9KQoreworfQorICAgIAor
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjp+Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKCkKK3sK
K30KKwogQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24o
Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uICZkZXNjKQogICAgIDogbV9zdHJlYW1E
ZXNjcmlwdGlvbihkZXNjKQogewpAQCAtNDYsNiArNTUsMTQgQEAgQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uOjpDQUF1ZGlvU3RyZWFtRAogCiAgICAgaW50IHdvcmRzaXplOwogICAgIHN3aXRjaCAo
Zm9ybWF0KSB7CisgICAgY2FzZSBJbnQxNjoKKyAgICAgICAgd29yZHNpemUgPSAyOworICAgICAg
ICBtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9Gb3JtYXRGbGFnSXNT
aWduZWRJbnRlZ2VyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludDMyOgorICAgICAgICB3
b3Jkc2l6ZSA9IDQ7CisgICAgICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzIHw9
IGtBdWRpb0Zvcm1hdEZsYWdJc1NpZ25lZEludGVnZXI7CisgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgRmxvYXQzMjoKICAgICAgICAgd29yZHNpemUgPSA0OwogICAgICAgICBtX3N0cmVhbURlc2Ny
aXB0aW9uLm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9Gb3JtYXRGbGFnSXNGbG9hdDsKQEAgLTU0LDEw
ICs3MSw2IEBAIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVhbUQKICAgICAg
ICAgd29yZHNpemUgPSA4OwogICAgICAgICBtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFn
cyB8PSBrQXVkaW9Gb3JtYXRGbGFnSXNGbG9hdDsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
bnQxNjoKLSAgICAgICAgd29yZHNpemUgPSAyOwotICAgICAgICBtX3N0cmVhbURlc2NyaXB0aW9u
Lm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9Gb3JtYXRGbGFnSXNTaWduZWRJbnRlZ2VyOwotICAgICAg
ICBicmVhazsKICAgICBjYXNlIE5vbmU6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIH0KQEAgLTEwOSw3ICsxMjIsNyBAQCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpQQ01Gb3Jt
YXQgQ0FBdWRpCiAKICAgICAgICAgICAgIGlmICh3b3Jkc2l6ZSA9PSBzaXplb2YoZmxvYXQpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBtX2Zvcm1hdCA9IEZsb2F0MzI7Ci0gICAgICAgICAgICBl
bHNlIGlmICh3b3Jkc2l6ZSA9PSBzaXplb2YoZG91YmxlKSkKKyAgICAgICAgICAgIGlmICh3b3Jk
c2l6ZSA9PSBzaXplb2YoZG91YmxlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbV9mb3JtYXQg
PSBGbG9hdDY0OwogCiAgICAgICAgICAgICByZXR1cm4gTm9uZTsKQEAgLTExNywyMiArMTMwLDE4
IEBAIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OlBDTUZvcm1hdCBDQUF1ZGkKIAogICAgICAgICBp
ZiAobV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0RmxhZ3MgJiBrTGluZWFyUENNRm9ybWF0Rmxh
Z0lzU2lnbmVkSW50ZWdlcikgewogICAgICAgICAgICAgdW5zaWduZWQgZnJhY3Rpb25CaXRzID0g
KG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzICYga0xpbmVhclBDTUZvcm1hdEZsYWdz
U2FtcGxlRnJhY3Rpb25NYXNrKSA+PiBrTGluZWFyUENNRm9ybWF0RmxhZ3NTYW1wbGVGcmFjdGlv
blNoaWZ0OwotICAgICAgICAgICAgaWYgKHdvcmRzaXplID09IDIgJiYgIWZyYWN0aW9uQml0cykK
LSAgICAgICAgICAgICAgICByZXR1cm4gbV9mb3JtYXQgPSBJbnQxNjsKKyAgICAgICAgICAgIGlm
ICghZnJhY3Rpb25CaXRzKSB7CisgICAgICAgICAgICAgICAgaWYgKHdvcmRzaXplID09IHNpemVv
ZihpbnQxNl90KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fZm9ybWF0ID0gSW50MTY7
CisgICAgICAgICAgICAgICAgaWYgKHdvcmRzaXplID09IHNpemVvZihpbnQzMl90KSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fZm9ybWF0ID0gSW50MzI7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gTm9uZTsKIH0KIAotYm9vbCBDQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb246Om9wZXJhdG9yPT0oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYg
b3RoZXIpCi17Ci0gICAgaWYgKG90aGVyLnBsYXRmb3JtRGVzY3JpcHRpb24oKS50eXBlICE9IFBs
YXRmb3JtRGVzY3JpcHRpb246OkNBQXVkaW9TdHJlYW1CYXNpY1R5cGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiBvcGVyYXRvcj09KCpXVEY6OmdldDxjb25zdCBBdWRpb1N0
cmVhbUJhc2ljRGVzY3JpcHRpb24qPihvdGhlci5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3Jp
cHRpb24pKTsKLX0KLQogYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNj
cmlwdGlvbiYgYSwgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBiKQogewogICAg
IHJldHVybiBhLm1TYW1wbGVSYXRlID09IGIubVNhbXBsZVJhdGUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uLmgJKHJldmlzaW9uIDIxMTQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsMTUgKzM1LDE4IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXVkaW9TdHJlYW0K
IAogY2xhc3MgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIGZpbmFsIDogcHVibGljIEF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24gewogcHVibGljOgotICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihj
b25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mKTsKLSAgICBDQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24oZG91YmxlLCB1aW50MzJfdCwgUENNRm9ybWF0LCBib29sKTsKKworICAgIFdFQkNP
UkVfRVhQT1JUIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbigpOworICAgIFdFQkNPUkVfRVhQT1JU
IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24mKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oZG91Ymxl
LCB1aW50MzJfdCwgUENNRm9ybWF0LCBib29sKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB+Q0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uKCk7CiAKICAgICBjb25zdCBQbGF0Zm9ybURlc2NyaXB0aW9uJiBw
bGF0Zm9ybURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7CiAKICAgICBQQ01Gb3JtYXQgZm9ybWF0
KCkgY29uc3QgZmluYWw7CiAKICAgICBkb3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fc3RyZWFtRGVzY3JpcHRpb24ubVNhbXBsZVJhdGU7IH0KLQorICAgIGJvb2wgaXNQ
Q00oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRJRCA9
PSBrQXVkaW9Gb3JtYXRMaW5lYXJQQ007IH0KICAgICBib29sIGlzSW50ZXJsZWF2ZWQoKSBjb25z
dCBmaW5hbCB7IHJldHVybiAhKG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzICYga0F1
ZGlvRm9ybWF0RmxhZ0lzTm9uSW50ZXJsZWF2ZWQpOyB9CiAgICAgYm9vbCBpc1NpZ25lZEludGVn
ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBpc1BDTSgpICYmIChtX3N0cmVhbURlc2NyaXB0aW9u
Lm1Gb3JtYXRGbGFncyAmIGtBdWRpb0Zvcm1hdEZsYWdJc1NpZ25lZEludGVnZXIpOyB9CiAgICAg
Ym9vbCBpc0Zsb2F0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gaXNQQ00oKSAmJiAobV9zdHJlYW1E
ZXNjcmlwdGlvbi5tRm9ybWF0RmxhZ3MgJiBrQXVkaW9Gb3JtYXRGbGFnSXNGbG9hdCk7IH0KQEAg
LTYxLDcgKzY0LDEzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdWRp
b1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIG90aGVyKSB7IHJldHVybiBtX3N0cmVhbURlc2NyaXB0
aW9uID09IG90aGVyOyB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF1ZGlvU3RyZWFtQmFz
aWNEZXNjcmlwdGlvbiYgb3RoZXIpIHsgcmV0dXJuICFvcGVyYXRvciA9PSAob3RoZXIpOyB9Ci0g
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mKTsKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3RoZXIpCisgICAg
eworICAgICAgICBpZiAob3RoZXIucGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgIT0gUGxhdGZv
cm1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVhbUJhc2ljVHlwZSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICByZXR1cm4gb3BlcmF0b3I9PSgqV1RGOjpnZXQ8Y29uc3QgQXVk
aW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4ob3RoZXIucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRl
c2NyaXB0aW9uKSk7CisgICAgfQogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdWRpb1N0cmVh
bURlc2NyaXB0aW9uJiBvdGhlcikgeyByZXR1cm4gIW9wZXJhdG9yID09IChvdGhlcik7IH0KIAog
ICAgIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgc3RyZWFtRGVzY3JpcHRpb24o
KSB7IHJldHVybiBtX3N0cmVhbURlc2NyaXB0aW9uOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmNwcAkocmV2aXNpb24gMjEx
NDY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBUmluZ0J1ZmZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShXRUJfQVVE
SU8pICYmIFVTRShNRURJQVRPT0xCT1gpCiAKKyNpbmNsdWRlICJDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24uaCIKKyNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KICNpbmNsdWRlIDxD
b3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
CkBAIC0zNywxNyArMzksMTQgQEAgY29uc3QgdWludDMyX3Qga0dlbmVyYWxSaW5nVGltZUJvdW5k
c1F1ZQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDQVJpbmdCdWZmZXI6OkNBUmluZ0J1ZmZlcigp
Ci0gICAgOiBtX2NoYW5uZWxDb3VudCgwKQotICAgICwgbV9mcmFtZUNvdW50KDApCi0gICAgLCBt
X2NhcGFjaXR5Qnl0ZXMoMCkKLSAgICAsIG1fdGltZUJvdW5kc1F1ZXVlKGtHZW5lcmFsUmluZ1Rp
bWVCb3VuZHNRdWV1ZVNpemUpCi0gICAgLCBtX3RpbWVCb3VuZHNRdWV1ZVB0cigwKQorICAgIDog
bV90aW1lQm91bmRzUXVldWUoa0dlbmVyYWxSaW5nVGltZUJvdW5kc1F1ZXVlU2l6ZSkKIHsKIH0K
IAotQ0FSaW5nQnVmZmVyOjp+Q0FSaW5nQnVmZmVyKCkKK3ZvaWQgQ0FSaW5nQnVmZmVyOjphbGxv
Y2F0ZShjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGZvcm1hdCwgc2l6ZV90IGZyYW1l
Q291bnQpCiB7Ci0gICAgZGVhbGxvY2F0ZSgpOworICAgIG1fZGVzY3JpcHRpb24gPSBmb3JtYXQ7
CisgICAgYWxsb2NhdGUoZm9ybWF0Lm51bWJlck9mQ2hhbm5lbFN0cmVhbXMoKSwgZm9ybWF0LmJ5
dGVzUGVyRnJhbWUoKSwgZnJhbWVDb3VudCk7CiB9CiAKIHZvaWQgQ0FSaW5nQnVmZmVyOjphbGxv
Y2F0ZSh1aW50MzJfdCBjaGFubmVsQ291bnQsIHNpemVfdCBieXRlc1BlckZyYW1lLCBzaXplX3Qg
ZnJhbWVDb3VudCkKQEAgLTc0LDEyICs3Myw3IEBAIHZvaWQgQ0FSaW5nQnVmZmVyOjphbGxvY2F0
ZSh1aW50MzJfdCBjaGEKICAgICAgICAgY2hhbm5lbERhdGEgKz0gbV9jYXBhY2l0eUJ5dGVzOwog
ICAgIH0KIAotICAgIGZvciAoYXV0byB0aW1lQm91bmRzIDogbV90aW1lQm91bmRzUXVldWUpIHsK
LSAgICAgICAgdGltZUJvdW5kcy5tX3N0YXJ0RnJhbWUgPSAwOwotICAgICAgICB0aW1lQm91bmRz
Lm1fZW5kRnJhbWUgPSAwOwotICAgICAgICB0aW1lQm91bmRzLm1fdXBkYXRlQ291bnRlciA9IDA7
Ci0gICAgfQotICAgIG1fdGltZUJvdW5kc1F1ZXVlUHRyID0gMDsKKyAgICBmbHVzaCgpOwogfQog
CiB2b2lkIENBUmluZ0J1ZmZlcjo6ZGVhbGxvY2F0ZSgpCkBAIC0xMTMsMTQgKzEwNyw0NiBAQCBz
dGF0aWMgdm9pZCBTdG9yZUFCTChCeXRlKiogYnVmZmVycywgc2l6CiAgICAgfQogfQogCi1zdGF0
aWMgdm9pZCBGZXRjaEFCTChBdWRpb0J1ZmZlckxpc3QqIGxpc3QsIHNpemVfdCBkZXN0T2Zmc2V0
LCBCeXRlKiogYnVmZmVycywgc2l6ZV90IHNyY09mZnNldCwgc2l6ZV90IG5ieXRlcykKK3N0YXRp
YyB2b2lkIEZldGNoQUJMKEF1ZGlvQnVmZmVyTGlzdCogbGlzdCwgc2l6ZV90IGRlc3RPZmZzZXQs
IEJ5dGUqKiBidWZmZXJzLCBzaXplX3Qgc3JjT2Zmc2V0LCBzaXplX3QgbmJ5dGVzLCBBdWRpb1N0
cmVhbURlc2NyaXB0aW9uOjpQQ01Gb3JtYXQgZm9ybWF0LCBDQVJpbmdCdWZmZXI6OkZldGNoTW9k
ZSBtb2RlKQogewogICAgIGludCBjaGFubmVsQ291bnQgPSBsaXN0LT5tTnVtYmVyQnVmZmVyczsK
ICAgICBBdWRpb0J1ZmZlciogZGVzdCA9IGxpc3QtPm1CdWZmZXJzOwogICAgIHdoaWxlICgtLWNo
YW5uZWxDb3VudCA+PSAwKSB7CiAgICAgICAgIGlmIChkZXN0T2Zmc2V0ID4gZGVzdC0+bURhdGFC
eXRlU2l6ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtZW1jcHkoc3RhdGljX2Nh
c3Q8Qnl0ZSo+KGRlc3QtPm1EYXRhKSArIGRlc3RPZmZzZXQsICpidWZmZXJzICsgc3JjT2Zmc2V0
LCBzdGQ6Om1pbjxzaXplX3Q+KG5ieXRlcywgZGVzdC0+bURhdGFCeXRlU2l6ZSAtIGRlc3RPZmZz
ZXQpKTsKKworICAgICAgICBuYnl0ZXMgPSBzdGQ6Om1pbjxzaXplX3Q+KG5ieXRlcywgZGVzdC0+
bURhdGFCeXRlU2l6ZSAtIGRlc3RPZmZzZXQpOworICAgICAgICBpZiAobW9kZSA9PSBDQVJpbmdC
dWZmZXI6OkNvcHkpCisgICAgICAgICAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Qnl0ZSo+KGRlc3Qt
Pm1EYXRhKSArIGRlc3RPZmZzZXQsICpidWZmZXJzICsgc3JjT2Zmc2V0LCBuYnl0ZXMpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgICAgICBj
YXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OkludDE2OiB7CisgICAgICAgICAgICAgICAgaW50
MTZfdCogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxpbnQxNl90Kj4oZGVzdC0+bURhdGEpOwor
ICAgICAgICAgICAgICAgIGludDE2X3QqIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MTZf
dCo+KCpidWZmZXJzICsgc3JjT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG5ieXRlcyAvIHNpemVvZihpbnQxNl90KTsgaSsrKQorICAgICAgICAgICAgICAg
ICAgICBkZXN0aW5hdGlvbltpXSArPSBzb3VyY2VbaV07CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246
OkludDMyOiB7CisgICAgICAgICAgICAgICAgaW50MzJfdCogZGVzdGluYXRpb24gPSBzdGF0aWNf
Y2FzdDxpbnQzMl90Kj4oZGVzdC0+bURhdGEpOworICAgICAgICAgICAgICAgIHZEU1BfdmFkZGko
ZGVzdGluYXRpb24sIDEsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KCpidWZmZXJzICsgc3Jj
T2Zmc2V0KSwgMSwgZGVzdGluYXRpb24sIDEsIG5ieXRlcyAvIHNpemVvZihpbnQzMl90KSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEF1
ZGlvU3RyZWFtRGVzY3JpcHRpb246OkZsb2F0MzI6IHsKKyAgICAgICAgICAgICAgICBmbG9hdCog
ZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdCo+KGRlc3QtPm1EYXRhKTsKKyAgICAgICAg
ICAgICAgICB2RFNQX3ZhZGQoZGVzdGluYXRpb24sIDEsIHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQq
PigqYnVmZmVycyArIHNyY09mZnNldCksIDEsIGRlc3RpbmF0aW9uLCAxLCBuYnl0ZXMgLyBzaXpl
b2YoZmxvYXQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6RmxvYXQ2NDogeworICAgICAgICAg
ICAgICAgIGRvdWJsZSogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxkb3VibGUqPihkZXN0LT5t
RGF0YSk7CisgICAgICAgICAgICAgICAgdkRTUF92YWRkRChkZXN0aW5hdGlvbiwgMSwgcmVpbnRl
cnByZXRfY2FzdDxkb3VibGUqPigqYnVmZmVycyArIHNyY09mZnNldCksIDEsIGRlc3RpbmF0aW9u
LCAxLCBuYnl0ZXMgLyBzaXplb2YoZG91YmxlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Ok5v
bmU6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgKytidWZmZXJzOwog
ICAgICAgICArK2Rlc3Q7CiAgICAgfQpAQCAtMTM4LDYgKzE2NCwxNyBAQCBpbmxpbmUgdm9pZCBa
ZXJvQUJMKEF1ZGlvQnVmZmVyTGlzdCogbGlzCiAgICAgfQogfQogCit2b2lkIENBUmluZ0J1ZmZl
cjo6Zmx1c2goKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY3VycmVudEZyYW1lQm91bmRz
TG9jayk7CisgICAgZm9yIChhdXRvJiB0aW1lQm91bmRzIDogbV90aW1lQm91bmRzUXVldWUpIHsK
KyAgICAgICAgdGltZUJvdW5kcy5tX3N0YXJ0RnJhbWUgPSAwOworICAgICAgICB0aW1lQm91bmRz
Lm1fZW5kRnJhbWUgPSAwOworICAgICAgICB0aW1lQm91bmRzLm1fdXBkYXRlQ291bnRlciA9IDA7
CisgICAgfQorICAgIG1fdGltZUJvdW5kc1F1ZXVlUHRyID0gMDsKK30KKwogQ0FSaW5nQnVmZmVy
OjpFcnJvciBDQVJpbmdCdWZmZXI6OnN0b3JlKGNvbnN0IEF1ZGlvQnVmZmVyTGlzdCogbGlzdCwg
c2l6ZV90IGZyYW1lc1RvV3JpdGUsIHVpbnQ2NF90IHN0YXJ0RnJhbWUpCiB7CiAgICAgaWYgKCFm
cmFtZXNUb1dyaXRlKQpAQCAtMjQ5LDcgKzI4Niw3IEBAIHVpbnQ2NF90IENBUmluZ0J1ZmZlcjo6
Y3VycmVudEVuZEZyYW1lKCkKICAgICByZXR1cm4gbV90aW1lQm91bmRzUXVldWVbaW5kZXhdLm1f
ZW5kRnJhbWU7CiB9CiAKLUNBUmluZ0J1ZmZlcjo6RXJyb3IgQ0FSaW5nQnVmZmVyOjpmZXRjaChB
dWRpb0J1ZmZlckxpc3QqIGxpc3QsIHNpemVfdCBuRnJhbWVzLCB1aW50NjRfdCBzdGFydFJlYWQp
CitDQVJpbmdCdWZmZXI6OkVycm9yIENBUmluZ0J1ZmZlcjo6ZmV0Y2goQXVkaW9CdWZmZXJMaXN0
KiBsaXN0LCBzaXplX3QgbkZyYW1lcywgdWludDY0X3Qgc3RhcnRSZWFkLCBGZXRjaE1vZGUgbW9k
ZSkKIHsKICAgICBpZiAoIW5GcmFtZXMpCiAgICAgICAgIHJldHVybiBPazsKQEAgLTI4NiwxMSAr
MzIzLDEyIEBAIENBUmluZ0J1ZmZlcjo6RXJyb3IgQ0FSaW5nQnVmZmVyOjpmZXRjaCgKICAgICAK
ICAgICBpZiAob2Zmc2V0MCA8IG9mZnNldDEpIHsKICAgICAgICAgbmJ5dGVzID0gb2Zmc2V0MSAt
IG9mZnNldDA7Ci0gICAgICAgIEZldGNoQUJMKGxpc3QsIGRlc3RTdGFydEJ5dGVPZmZzZXQsIGJ1
ZmZlcnMsIG9mZnNldDAsIG5ieXRlcyk7CisgICAgICAgIEZldGNoQUJMKGxpc3QsIGRlc3RTdGFy
dEJ5dGVPZmZzZXQsIGJ1ZmZlcnMsIG9mZnNldDAsIG5ieXRlcywgbV9kZXNjcmlwdGlvbi5mb3Jt
YXQoKSwgbW9kZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbmJ5dGVzID0gbV9jYXBhY2l0eUJ5
dGVzIC0gb2Zmc2V0MDsKLSAgICAgICAgRmV0Y2hBQkwobGlzdCwgZGVzdFN0YXJ0Qnl0ZU9mZnNl
dCwgYnVmZmVycywgb2Zmc2V0MCwgbmJ5dGVzKTsKLSAgICAgICAgRmV0Y2hBQkwobGlzdCwgZGVz
dFN0YXJ0Qnl0ZU9mZnNldCArIG5ieXRlcywgYnVmZmVycywgMCwgb2Zmc2V0MSk7CisgICAgICAg
IEZldGNoQUJMKGxpc3QsIGRlc3RTdGFydEJ5dGVPZmZzZXQsIGJ1ZmZlcnMsIG9mZnNldDAsIG5i
eXRlcywgbV9kZXNjcmlwdGlvbi5mb3JtYXQoKSwgbW9kZSk7CisgICAgICAgIGlmIChvZmZzZXQx
KQorICAgICAgICAgICAgRmV0Y2hBQkwobGlzdCwgZGVzdFN0YXJ0Qnl0ZU9mZnNldCArIG5ieXRl
cywgYnVmZmVycywgMCwgb2Zmc2V0MSwgbV9kZXNjcmlwdGlvbi5mb3JtYXQoKSwgbW9kZSk7CiAg
ICAgICAgIG5ieXRlcyArPSBvZmZzZXQxOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FSaW5nQnVmZmVyLmgJKHJldmlzaW9uIDIx
MTQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQVJpbmdCdWZmZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDEyIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBDQVJpbmdCdWZmZXJfaAotI2RlZmluZSBD
QVJpbmdCdWZmZXJfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBV
U0UoTUVESUFUT09MQk9YKQogCisjaW5jbHVkZSAiQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgor
I2luY2x1ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPHJ1bnRpbWUv
QXJyYXlCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KQEAgLTM4LDI0ICszOSwzMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENB
UmluZ0J1ZmZlciB7CiBwdWJsaWM6Ci0gICAgQ0FSaW5nQnVmZmVyKCk7Ci0gICAgfkNBUmluZ0J1
ZmZlcigpOworICAgIFdFQkNPUkVfRVhQT1JUIENBUmluZ0J1ZmZlcigpOworICAgIFdFQkNPUkVf
RVhQT1JUIH5DQVJpbmdCdWZmZXIoKQorICAgIHsKKyAgICAgICAgZGVhbGxvY2F0ZSgpOworICAg
IH0KIAogICAgIGVudW0gRXJyb3IgewogICAgICAgICBPaywKICAgICAgICAgVG9vTXVjaCwgLy8g
ZmV0Y2ggc3RhcnQgdGltZSBpcyBlYXJsaWVyIHRoYW4gYnVmZmVyIHN0YXJ0IHRpbWUgYW5kIGZl
dGNoIGVuZCB0aW1lIGlzIGxhdGVyIHRoYW4gYnVmZmVyIGVuZCB0aW1lCi0gICAgICAgIENQVU92
ZXJsb2FkLCAvLyB0aGUgcmVhZGVyIGlzIHVuYWJsZSB0byBnZXQgZW5vdWdoIENQVSBjeWNsZXMg
dG8gY2FwdHVyZSBhIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YgdGhlIHRpbWUgYm91bmRzCiAgICAg
fTsKIAotICAgIHZvaWQgYWxsb2NhdGUodWludDMyX3QgbV9jaGFubmVsQ291bnQsIHNpemVfdCBi
eXRlc1BlckZyYW1lLCBzaXplX3QgZnJhbWVDb3VudCk7Ci0gICAgdm9pZCBkZWFsbG9jYXRlKCk7
Ci0gICAgRXJyb3Igc3RvcmUoY29uc3QgQXVkaW9CdWZmZXJMaXN0Kiwgc2l6ZV90IGZyYW1lQ291
bnQsIHVpbnQ2NF90IHN0YXJ0RnJhbWUpOwotICAgIEVycm9yIGZldGNoKEF1ZGlvQnVmZmVyTGlz
dCosIHNpemVfdCBmcmFtZUNvdW50LCB1aW50NjRfdCBzdGFydEZyYW1lKTsKLSAgICB2b2lkIGdl
dEN1cnJlbnRGcmFtZUJvdW5kcyh1aW50NjRfdCAmc3RhcnRUaW1lLCB1aW50NjRfdCAmZW5kVGlt
ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhbGxvY2F0ZShjb25zdCBDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24mLCBzaXplX3QpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZGVhbGxvY2F0
ZSgpOworCisgICAgV0VCQ09SRV9FWFBPUlQgRXJyb3Igc3RvcmUoY29uc3QgQXVkaW9CdWZmZXJM
aXN0Kiwgc2l6ZV90IGZyYW1lQ291bnQsIHVpbnQ2NF90IHN0YXJ0RnJhbWUpOworCisgICAgZW51
bSBGZXRjaE1vZGUgeyBDb3B5LCBNaXggfTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFcnJvciBmZXRj
aChBdWRpb0J1ZmZlckxpc3QqLCBzaXplX3QgZnJhbWVDb3VudCwgdWludDY0X3Qgc3RhcnRGcmFt
ZSwgRmV0Y2hNb2RlIG1vZGUgPSBDb3B5KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmx1
c2goKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0Q3VycmVudEZyYW1lQm91bmRzKHVp
bnQ2NF90ICZzdGFydFRpbWUsIHVpbnQ2NF90ICZlbmRUaW1lKTsKIAogICAgIHVpbnQzMl90IGNo
YW5uZWxDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbm5lbENvdW50OyB9CiAKIHByaXZhdGU6
CisgICAgdm9pZCBhbGxvY2F0ZSh1aW50MzJfdCBtX2NoYW5uZWxDb3VudCwgc2l6ZV90IGJ5dGVz
UGVyRnJhbWUsIHNpemVfdCBmcmFtZUNvdW50KTsKICAgICBzaXplX3QgZnJhbWVPZmZzZXQodWlu
dDY0X3QgZnJhbWVOdW1iZXIpIHsgcmV0dXJuIChmcmFtZU51bWJlciAmIG1fZnJhbWVDb3VudE1h
c2spICogbV9ieXRlc1BlckZyYW1lOyB9CiAKICAgICB2b2lkIGNsaXBUaW1lQm91bmRzKHVpbnQ2
NF90JiBzdGFydFJlYWQsIHVpbnQ2NF90JiBlbmRSZWFkKTsKQEAgLTY1LDExICs3NSwxMSBAQCBw
cml2YXRlOgogICAgIHZvaWQgc2V0Q3VycmVudEZyYW1lQm91bmRzKHVpbnQ2NF90IHN0YXJ0RnJh
bWUsIHVpbnQ2NF90IGVuZEZyYW1lKTsKIAogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9idWZm
ZXJzOwotICAgIHVpbnQzMl90IG1fY2hhbm5lbENvdW50OwotICAgIHNpemVfdCBtX2J5dGVzUGVy
RnJhbWU7Ci0gICAgdWludDMyX3QgbV9mcmFtZUNvdW50OwotICAgIHVpbnQzMl90IG1fZnJhbWVD
b3VudE1hc2s7Ci0gICAgc2l6ZV90IG1fY2FwYWNpdHlCeXRlczsKKyAgICB1aW50MzJfdCBtX2No
YW5uZWxDb3VudCB7IDAgfTsKKyAgICBzaXplX3QgbV9ieXRlc1BlckZyYW1lIHsgMCB9OworICAg
IHVpbnQzMl90IG1fZnJhbWVDb3VudCB7IDAgfTsKKyAgICB1aW50MzJfdCBtX2ZyYW1lQ291bnRN
YXNrIHsgMCB9OworICAgIHNpemVfdCBtX2NhcGFjaXR5Qnl0ZXMgeyAwIH07CiAKICAgICBzdHJ1
Y3QgVGltZUJvdW5kcyB7CiAgICAgICAgIFRpbWVCb3VuZHMoKQpAQCAtODIsMTQgKzkyLDEzIEBA
IHByaXZhdGU6CiAgICAgICAgIHZvbGF0aWxlIHVpbnQ2NF90IG1fZW5kRnJhbWU7CiAgICAgICAg
IHZvbGF0aWxlIHVpbnQzMl90IG1fdXBkYXRlQ291bnRlcjsKICAgICB9OwotICAgIAorCisgICAg
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIG1fZGVzY3JpcHRpb247CiAgICAgVmVjdG9yPFRpbWVC
b3VuZHM+IG1fdGltZUJvdW5kc1F1ZXVlOwogICAgIExvY2sgbV9jdXJyZW50RnJhbWVCb3VuZHNM
b2NrOwotICAgIHN0ZDo6YXRvbWljPGludDMyX3Q+IG1fdGltZUJvdW5kc1F1ZXVlUHRyOworICAg
IHN0ZDo6YXRvbWljPGludDMyX3Q+IG1fdGltZUJvdW5kc1F1ZXVlUHRyIHsgMCB9OwogfTsKIAog
fQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKE1FRElBVE9PTEJPWCkKLQot
I2VuZGlmIC8vIENBUmluZ0J1ZmZlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0F1
ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tCShyZXZpc2lvbiAyMTE0NjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQcm92aWRl
ckFWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2NCwyMyArMjY0LDYgQEAgdm9pZCBBdWRp
b1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6ZmluYWxpegogewogfQogCi1zdGF0aWMgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgYSwgY29uc3QgQXVkaW9T
dHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBiKQotewotICAgIHJldHVybiBhLm1TYW1wbGVSYXRlID09
IGIubVNhbXBsZVJhdGUKLSAgICAgICAgJiYgYS5tRm9ybWF0SUQgPT0gYi5tRm9ybWF0SUQKLSAg
ICAgICAgJiYgYS5tRm9ybWF0RmxhZ3MgPT0gYi5tRm9ybWF0RmxhZ3MKLSAgICAgICAgJiYgYS5t
Qnl0ZXNQZXJQYWNrZXQgPT0gYi5tQnl0ZXNQZXJQYWNrZXQKLSAgICAgICAgJiYgYS5tRnJhbWVz
UGVyUGFja2V0ID09IGIubUZyYW1lc1BlclBhY2tldAotICAgICAgICAmJiBhLm1CeXRlc1BlckZy
YW1lID09IGIubUJ5dGVzUGVyRnJhbWUKLSAgICAgICAgJiYgYS5tQ2hhbm5lbHNQZXJGcmFtZSA9
PSBiLm1DaGFubmVsc1BlckZyYW1lCi0gICAgICAgICYmIGEubUJpdHNQZXJDaGFubmVsID09IGIu
bUJpdHNQZXJDaGFubmVsOwotfQotCi1zdGF0aWMgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF1ZGlv
U3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgYSwgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uJiBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0KIHZvaWQgQXVkaW9Tb3VyY2VQ
cm92aWRlckFWRk9iakM6OnByZXBhcmUoQ01JdGVtQ291bnQgbWF4RnJhbWVzLCBjb25zdCBBdWRp
b1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gKnByb2Nlc3NpbmdGb3JtYXQpCiB7CiAgICAgQVNTRVJU
KG1heEZyYW1lcyA+PSAwKTsKQEAgLTI4OSw3ICsyNzIsNiBAQCB2b2lkIEF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDOjpwcmVwYXJlCiAKICAgICBtX3RhcERlc2NyaXB0aW9uID0gc3RkOjptYWtl
X3VuaXF1ZTxBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24+KCpwcm9jZXNzaW5nRm9ybWF0KTsK
ICAgICBpbnQgbnVtYmVyT2ZDaGFubmVscyA9IHByb2Nlc3NpbmdGb3JtYXQtPm1DaGFubmVsc1Bl
ckZyYW1lOwotICAgIHNpemVfdCBieXRlc1BlckZyYW1lID0gcHJvY2Vzc2luZ0Zvcm1hdC0+bUJ5
dGVzUGVyRnJhbWU7CiAgICAgZG91YmxlIHNhbXBsZVJhdGUgPSBwcm9jZXNzaW5nRm9ybWF0LT5t
U2FtcGxlUmF0ZTsKICAgICBBU1NFUlQoc2FtcGxlUmF0ZSA+PSAwKTsKIApAQCAtMzE0LDcgKzI5
Niw3IEBAIHZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByZXBhcmUKICAgICBzaXpl
X3QgY2FwYWNpdHkgPSBzdGQ6Om1heChzdGF0aWNfY2FzdDxzaXplX3Q+KDIgKiBtYXhGcmFtZXMp
LCBzdGF0aWNfY2FzdDxzaXplX3Q+KGtSaW5nQnVmZmVyRHVyYXRpb24gKiBzYW1wbGVSYXRlKSk7
CiAKICAgICBtX3JpbmdCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENBUmluZ0J1ZmZlcj4oKTsK
LSAgICBtX3JpbmdCdWZmZXItPmFsbG9jYXRlKG51bWJlck9mQ2hhbm5lbHMsIGJ5dGVzUGVyRnJh
bWUsIGNhcGFjaXR5KTsKKyAgICBtX3JpbmdCdWZmZXItPmFsbG9jYXRlKENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbigqcHJvY2Vzc2luZ0Zvcm1hdCksIGNhcGFjaXR5KTsKIAogICAgIC8vIEF1ZGlv
QnVmZmVyTGlzdCBpcyBhIHZhcmlhYmxlLWxlbmd0aCBzdHJ1Y3QsIHNvIGNyZWF0ZSBvbiB0aGUg
aGVhcCB3aXRoIGEgZ2VuZXJpYyBuZXcoKSBvcGVyYXRvcgogICAgIC8vIHdpdGggYSBjdXN0b20g
c2l6ZSwgYW5kIGluaXRpYWxpemUgdGhlIHN0cnVjdCBtYW51YWxseS4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZG
T2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvV2ViQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0JKHJldmlzaW9uIDIxMTQ2NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XZWJBdWRpb1NvdXJj
ZVByb3ZpZGVyQVZGT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM0LDIzICsxMzQsNiBAQCB2
b2lkIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpzZXRDCiAgICAgfQogfQogCi1zdGF0
aWMgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgYSwg
Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBiKQotewotICAgIHJldHVybiBhLm1T
YW1wbGVSYXRlID09IGIubVNhbXBsZVJhdGUKLSAgICAgICAgJiYgYS5tRm9ybWF0SUQgPT0gYi5t
Rm9ybWF0SUQKLSAgICAgICAgJiYgYS5tRm9ybWF0RmxhZ3MgPT0gYi5tRm9ybWF0RmxhZ3MKLSAg
ICAgICAgJiYgYS5tQnl0ZXNQZXJQYWNrZXQgPT0gYi5tQnl0ZXNQZXJQYWNrZXQKLSAgICAgICAg
JiYgYS5tRnJhbWVzUGVyUGFja2V0ID09IGIubUZyYW1lc1BlclBhY2tldAotICAgICAgICAmJiBh
Lm1CeXRlc1BlckZyYW1lID09IGIubUJ5dGVzUGVyRnJhbWUKLSAgICAgICAgJiYgYS5tQ2hhbm5l
bHNQZXJGcmFtZSA9PSBiLm1DaGFubmVsc1BlckZyYW1lCi0gICAgICAgICYmIGEubUJpdHNQZXJD
aGFubmVsID09IGIubUJpdHNQZXJDaGFubmVsOwotfQotCi1zdGF0aWMgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgYSwgY29uc3QgQXVkaW9TdHJlYW1C
YXNpY0Rlc2NyaXB0aW9uJiBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0KIHZvaWQg
V2ViQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByZXBhcmUoY29uc3QgQXVkaW9TdHJlYW1C
YXNpY0Rlc2NyaXB0aW9uKiBmb3JtYXQpCiB7CiAgICAgTE9HKE1lZGlhLCAiV2ViQXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakM6OnByZXBhcmUoJXApIiwgdGhpcyk7CkBAIC0yMDEsNyArMTg0LDcg
QEAgdm9pZCBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJlcAogICAgICAgICByZXR1
cm47CiAKICAgICBtX3JpbmdCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENBUmluZ0J1ZmZlcj4o
KTsKLSAgICBtX3JpbmdCdWZmZXItPmFsbG9jYXRlKG51bWJlck9mQ2hhbm5lbHMsIGZvcm1hdC0+
bUJ5dGVzUGVyRnJhbWUsIHN0YXRpY19jYXN0PHNpemVfdD4oY2FwYWNpdHkpKTsKKyAgICBtX3Jp
bmdCdWZmZXItPmFsbG9jYXRlKENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbigqZm9ybWF0KSwgc3Rh
dGljX2Nhc3Q8c2l6ZV90PihjYXBhY2l0eSkpOwogCiAgICAgbV9saXN0QnVmZmVyU2l6ZSA9IHN0
YXRpY19jYXN0PHNpemVfdD4oYnVmZmVyTGlzdFNpemUpOwogICAgIG1fbGlzdCA9IHN0ZDo6dW5p
cXVlX3B0cjxBdWRpb0J1ZmZlckxpc3Q+KHN0YXRpY19jYXN0PEF1ZGlvQnVmZmVyTGlzdCo+KDo6
b3BlcmF0b3IgbmV3IChtX2xpc3RCdWZmZXJTaXplKSkpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjExNTM0KQorKysgVG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTctMDItMDEg
IEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgW01hY10g
VXBkYXRlIENBUmluZ0J1ZmZlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY3NjU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Q0FSaW5nQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDQVJpbmdC
dWZmZXJUZXN0OjpTZXRVcCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDQVJpbmdCdWZmZXJU
ZXN0OjpzZXR1cCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDQVJpbmdCdWZmZXJUZXN0Ojpz
ZXRMaXN0RGF0YUJ1ZmZlcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDQVJpbmdCdWZmZXJU
ZXN0OjpkZXNjcmlwdGlvbik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDQVJpbmdCdWZmZXJU
ZXN0OjpidWZmZXJMaXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkNBUmluZ0J1ZmZlclRl
c3Q6OnJpbmdCdWZmZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q0FSaW5nQnVmZmVyVGVz
dDo6Y2FwYWNpdHkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Q0FSaW5nQnVmZmVyVGVzdDo6
YXVkaW9CdWZmZXJMaXN0U2l6ZUZvclN0cmVhbSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpD
QVJpbmdCdWZmZXJUZXN0Ojpjb25maWd1cmVCdWZmZXJMaXN0Rm9yU3RyZWFtKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpNaXhpbmdU
ZXN0OjpydW4pOgorCiAyMDE3LTAyLTAxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtNYWNdIFRlc3RXZWJLaXRBUEkgaW5jbHVkZXMgc3lzdGVtIGZyYW1l
d29ya3MgaW5jb3JyZWN0bHkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MTE0NjUpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogLyogQmVnaW4g
UEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAkJMDc0OTJCM0IxREY4QjE0QzAwNjMzREUxIC8qIEVu
dW1lcmF0ZU1lZGlhRGV2aWNlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzQ5MkIzQTFERjhBRTJEMDA2MzNERTEgLyogRW51bWVyYXRlTWVkaWFE
ZXZpY2VzLmNwcCAqLzsgfTsKIAkJMDc0OTJCM0MxREY4Qjg2NjAwNjMzREUxIC8qIGVudW1lcmF0
ZU1lZGlhRGV2aWNlcy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3NDkyQjM5MURGOEFEQTQwMDYzM0RFMSAvKiBlbnVtZXJhdGVNZWRp
YURldmljZXMuaHRtbCAqLzsgfTsKKwkJMDdDMDQ2Q0ExRTQyNjJBODAwNzIwMUU3IC8qIENBUmlu
Z0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwN0MwNDZDOTFFNDI1NzNFMDA3MjAxRTcgLyogQ0FSaW5nQnVmZmVyLmNwcCAqLzsgfTsKIAkJ
MEYxMzlFNzcxQTQyM0E1QjAwRjU5MEY1IC8qIFdlYWtPYmpDUHRyLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzlFNzUxQTQyM0E1MzAwRjU5MEY1
IC8qIFdlYWtPYmpDUHRyLm1tICovOyB9OwogCQkwRjEzOUU3ODFBNDIzQTZCMDBGNTkwRjUgLyog
UGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxp
dGllc0NvY29hLm1tICovOyB9OwogCQkwRjEzOUU3OTFBNDI0NTcwMDBGNTkwRjUgLyogUGxhdGZv
cm1VdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0Nv
Y29hLm1tICovOyB9OwpAQCAtNzg1LDYgKzc4Niw3IEBACiAJCTA3NDkyQjM5MURGOEFEQTQwMDYz
M0RFMSAvKiBlbnVtZXJhdGVNZWRpYURldmljZXMuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsg
cGF0aCA9IGVudW1lcmF0ZU1lZGlhRGV2aWNlcy5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzQ5MkIzQTFERjhBRTJEMDA2MzNERTEgLyogRW51bWVyYXRlTWVkaWFEZXZpY2Vz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVudW1lcmF0ZU1lZGlh
RGV2aWNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NjZERDFGMUE1QUQ1
MjAwMDIzRTNCQiAvKiBQZW5kaW5nQVBJUmVxdWVzdFVSTC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQZW5kaW5nQVBJUmVxdWVzdFVSTC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTA3QzA0NkM5MUU0MjU3M0UwMDcyMDFFNyAvKiBDQVJpbmdCdWZm
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ0FSaW5nQnVmZmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJDRDgzMzQxNDg1N0NFNDAwRUEy
MDAzIC8qIEhhc2hNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SGFzaE1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCQ0Q4NTY5MTQ4NUM5
OEIwMEVBMjAwMyAvKiBTZXRGb3JTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTZXRGb3JTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUGxhdGZvcm1VdGlsaXRpZXND
b2NvYS5tbTsgcGF0aCA9IGNvY29hL1BsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTkwLDYgKzE1OTIsNyBAQAogCQkJCThFNEE4NTM2MUUx
RDFBQTEwMEY1M0IwRiAvKiBHcmlkUG9zaXRpb24uY3BwICovLAogCQkJCUNEODlEMDM3MUM0RURC
MTMwMDA0MEEwNCAvKiBjb2NvYSAqLywKIAkJCQk3QTkwOUE2RjFEODc3NDc1MDA3RTEwRjggLyog
QWZmaW5lVHJhbnNmb3JtLmNwcCAqLywKKwkJCQkwN0MwNDZDOTFFNDI1NzNFMDA3MjAxRTcgLyog
Q0FSaW5nQnVmZmVyLmNwcCAqLywKIAkJCQk3QTkwOUE3MDFEODc3NDc1MDA3RTEwRjggLyogRmxv
YXRQb2ludC5jcHAgKi8sCiAJCQkJN0E5MDlBNzExRDg3NzQ3NTAwN0UxMEY4IC8qIEZsb2F0UmVj
dC5jcHAgKi8sCiAJCQkJN0E5MDlBNzIxRDg3NzQ3NTAwN0UxMEY4IC8qIEZsb2F0U2l6ZS5jcHAg
Ki8sCkBAIC0yNjcxLDYgKzI2NzQsNyBAQAogCQkJCTdDQ0U3RjBEMUE0MTFBRTYwMDQ0N0M0QyAv
KiBSZWxvYWRQYWdlQWZ0ZXJDcmFzaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzRTBDMzFE
MEE2NTNBMDBGRUJDRjMgLyogUmVtb3RlT2JqZWN0UmVnaXN0cnkubW0gaW4gU291cmNlcyAqLywK
IAkJCQk3Q0NFN0VDOTFBNDExQTdFMDA0NDdDNEMgLyogUmVuZGVyZWRJbWFnZUZyb21ET01Ob2Rl
Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMDdDMDQ2Q0ExRTQyNjJBODAwNzIwMUU3IC8qIENBUmlu
Z0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QTkwOUE3RDFEODc3NDgwMDA3RTEwRjgg
LyogQWZmaW5lVHJhbnNmb3JtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUNBMUE0MTFB
N0UwMDQ0N0M0QyAvKiBSZW5kZXJlZEltYWdlRnJvbURPTVJhbmdlLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0M4M0UwQzQxRDBBNjU0MjAwRkVCQ0YzIC8qIFJlcXVpcmVzVXNlckFjdGlvbkZvclBs
YXliYWNrLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ0FSaW5nQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvQ0FSaW5nQnVmZmVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ0FSaW5nQnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFBMQVRGT1JNKE1BQykKKworI2luY2x1ZGUgIlRlc3QuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0NBUmluZ0J1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2NsYXNz
IENBUmluZ0J1ZmZlclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisKKyAg
ICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgV1RGOjppbml0aWFsaXplTWFp
blRocmVhZCgpOworICAgICAgICBtX3JpbmdCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENBUmlu
Z0J1ZmZlcj4oKTsKKyAgICB9CisKKyAgICAvLyBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oZG91
YmxlIHNhbXBsZVJhdGUsIFVJbnQzMiBudW1DaGFubmVscywgUENNRm9ybWF0IGZvcm1hdCwgYm9v
bCBpc0ludGVybGVhdmVkLCBzaXplX3QgY2FwYWNpdHkpCisgICAgdm9pZCBzZXR1cChkb3VibGUg
c2FtcGxlUmF0ZSwgVUludDMyIG51bUNoYW5uZWxzLCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246
OlBDTUZvcm1hdCBmb3JtYXQsIGJvb2wgaXNJbnRlcmxlYXZlZCwgc2l6ZV90IGNhcGFjaXR5KQor
ICAgIHsKKyAgICAgICAgbV9kZXNjcmlwdGlvbiA9IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihz
YW1wbGVSYXRlLCBudW1DaGFubmVscywgZm9ybWF0LCBpc0ludGVybGVhdmVkKTsKKyAgICAgICAg
bV9jYXBhY2l0eSA9IGNhcGFjaXR5OworICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBvZmZzZXRv
ZihBdWRpb0J1ZmZlckxpc3QsIG1CdWZmZXJzKSArIChzaXplb2YoQXVkaW9CdWZmZXIpICogc3Rk
OjptYXg8dWludDMyX3Q+KDEsIG1fZGVzY3JpcHRpb24ubnVtYmVyT2ZDaGFubmVsU3RyZWFtcygp
KSk7CisgICAgICAgIG1fYnVmZmVyTGlzdCA9IHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0J1ZmZlckxp
c3Q+KHN0YXRpY19jYXN0PEF1ZGlvQnVmZmVyTGlzdCo+KDo6b3BlcmF0b3IgbmV3IChsaXN0U2l6
ZSkpKTsKKyAgICAgICAgbV9yaW5nQnVmZmVyLT5hbGxvY2F0ZShtX2Rlc2NyaXB0aW9uLCBjYXBh
Y2l0eSk7CisgICAgfQorCisgICAgdm9pZCBzZXRMaXN0RGF0YUJ1ZmZlcih1aW50OF90KiBidWZm
ZXJEYXRhLCBzaXplX3Qgc2FtcGxlQ291bnQpCisgICAgeworICAgICAgICBzaXplX3QgYnVmZmVy
Q291bnQgPSBtX2Rlc2NyaXB0aW9uLm51bWJlck9mQ2hhbm5lbFN0cmVhbXMoKTsKKyAgICAgICAg
c2l6ZV90IGNoYW5uZWxDb3VudCA9IG1fZGVzY3JpcHRpb24ubnVtYmVyT2ZJbnRlcmxlYXZlZENo
YW5uZWxzKCk7CisgICAgICAgIHNpemVfdCBieXRlc1BlckNoYW5uZWwgPSBzYW1wbGVDb3VudCAq
IG1fZGVzY3JpcHRpb24uYnl0ZXNQZXJGcmFtZSgpOworCisgICAgICAgIG1fYnVmZmVyTGlzdC0+
bU51bWJlckJ1ZmZlcnMgPSBidWZmZXJDb3VudDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJ1ZmZlckNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIG1fYnVmZmVyTGlzdC0+bUJ1
ZmZlcnNbaV0ubU51bWJlckNoYW5uZWxzID0gY2hhbm5lbENvdW50OworICAgICAgICAgICAgbV9i
dWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplID0gYnl0ZXNQZXJDaGFubmVsOwor
ICAgICAgICAgICAgbV9idWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tRGF0YSA9IGJ1ZmZlckRhdGE7
CisgICAgICAgICAgICBpZiAoYnVmZmVyRGF0YSkKKyAgICAgICAgICAgICAgICBidWZmZXJEYXRh
ID0gYnVmZmVyRGF0YSArIGJ5dGVzUGVyQ2hhbm5lbDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2Rlc2NyaXB0aW9uOyB9CisgICAgQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXN0KCkg
Y29uc3QgeyByZXR1cm4gKm1fYnVmZmVyTGlzdC5nZXQoKTsgfQorICAgIENBUmluZ0J1ZmZlciYg
cmluZ0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuICptX3JpbmdCdWZmZXIuZ2V0KCk7IH0KKyAgICBz
aXplX3QgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2NhcGFjaXR5OyB9CisKK3ByaXZhdGU6
CisgICAgc2l6ZV90IGF1ZGlvQnVmZmVyTGlzdFNpemVGb3JTdHJlYW0oY29uc3QgQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uJiBmb3JtYXQpCisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0b2Yo
QXVkaW9CdWZmZXJMaXN0LCBtQnVmZmVycykgKyAoc2l6ZW9mKEF1ZGlvQnVmZmVyKSAqIHN0ZDo6
bWF4PHVpbnQzMl90PigxLCBmb3JtYXQubnVtYmVyT2ZDaGFubmVsU3RyZWFtcygpKSk7CisgICAg
fQorCisgICAgdm9pZCBjb25maWd1cmVCdWZmZXJMaXN0Rm9yU3RyZWFtKEF1ZGlvQnVmZmVyTGlz
dCYgYnVmZmVyTGlzdCwgY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBmb3JtYXQsIHVp
bnQ4X3QqIGJ1ZmZlckRhdGEsIHNpemVfdCBzYW1wbGVDb3VudCkKKyAgICB7CisgICAgICAgIHNp
emVfdCBidWZmZXJDb3VudCA9IGZvcm1hdC5udW1iZXJPZkNoYW5uZWxTdHJlYW1zKCk7CisgICAg
ICAgIHNpemVfdCBjaGFubmVsQ291bnQgPSBmb3JtYXQubnVtYmVyT2ZJbnRlcmxlYXZlZENoYW5u
ZWxzKCk7CisgICAgICAgIHNpemVfdCBieXRlc1BlckNoYW5uZWwgPSBzYW1wbGVDb3VudCAqIGZv
cm1hdC5ieXRlc1BlckZyYW1lKCk7CisKKyAgICAgICAgYnVmZmVyTGlzdC5tTnVtYmVyQnVmZmVy
cyA9IGJ1ZmZlckNvdW50OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVy
Q291bnQ7ICsraSkgeworICAgICAgICAgICAgYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tTnVtYmVy
Q2hhbm5lbHMgPSBjaGFubmVsQ291bnQ7CisgICAgICAgICAgICBidWZmZXJMaXN0Lm1CdWZmZXJz
W2ldLm1EYXRhQnl0ZVNpemUgPSBieXRlc1BlckNoYW5uZWw7CisgICAgICAgICAgICBidWZmZXJM
aXN0Lm1CdWZmZXJzW2ldLm1EYXRhID0gYnVmZmVyRGF0YTsKKyAgICAgICAgICAgIGlmIChidWZm
ZXJEYXRhKQorICAgICAgICAgICAgICAgIGJ1ZmZlckRhdGEgPSBidWZmZXJEYXRhICsgYnl0ZXNQ
ZXJDaGFubmVsOworICAgICAgICB9CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlv
QnVmZmVyTGlzdD4gbV9idWZmZXJMaXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDQVJpbmdCdWZm
ZXI+IG1fcmluZ0J1ZmZlcjsKKyAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gbV9kZXNjcmlw
dGlvbiA9IHsgfTsKKyAgICBzaXplX3QgbV9jYXBhY2l0eSA9IHsgMCB9OworfTsKKworVEVTVF9G
KENBUmluZ0J1ZmZlclRlc3QsIEJhc2ljcykKK3sKKyAgICBjb25zdCBpbnQgY2FwYWNpdHkgPSAz
MjsKKworICAgIHNldHVwKDQ0MTAwLCAxLCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OlBDTUZv
cm1hdDo6RmxvYXQzMiwgdHJ1ZSwgY2FwYWNpdHkpOworCisgICAgZmxvYXQgc291cmNlQnVmZmVy
W2NhcGFjaXR5XTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhcGFjaXR5OyBpKyspCisgICAg
ICAgIHNvdXJjZUJ1ZmZlcltpXSA9IGkgKyAwLjU7CisKKyAgICBzZXRMaXN0RGF0YUJ1ZmZlcihy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzb3VyY2VCdWZmZXIpLCBjYXBhY2l0eSk7CisKKyAg
ICAvLyBGaWxsIHRoZSBmaXJzdCBoYWxmIG9mIHRoZSBidWZmZXIgLi4uCisgICAgaW50IHNhbXBs
ZUNvdW50ID0gY2FwYWNpdHkgLyAyOworICAgIENBUmluZ0J1ZmZlcjo6RXJyb3IgZXJyID0gcmlu
Z0J1ZmZlcigpLnN0b3JlKCZidWZmZXJMaXN0KCksIHNhbXBsZUNvdW50LCAwKTsKKyAgICBFWFBF
Q1RfRVEoZXJyLCBDQVJpbmdCdWZmZXI6OkVycm9yOjpPayk7CisKKyAgICB1aW50NjRfdCBzdGFy
dFRpbWU7CisgICAgdWludDY0X3QgZW5kVGltZTsKKyAgICByaW5nQnVmZmVyKCkuZ2V0Q3VycmVu
dEZyYW1lQm91bmRzKHN0YXJ0VGltZSwgZW5kVGltZSk7CisgICAgRVhQRUNUX0VRKDAsIChpbnQp
c3RhcnRUaW1lKTsKKyAgICBFWFBFQ1RfRVEoKGludClzYW1wbGVDb3VudCwgKGludCllbmRUaW1l
KTsKKworICAgIGZsb2F0IHNjcmF0Y2hCdWZmZXJbY2FwYWNpdHldOworICAgIHNldExpc3REYXRh
QnVmZmVyKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNjcmF0Y2hCdWZmZXIpLCBjYXBhY2l0
eSk7CisKKyAgICBlcnIgPSByaW5nQnVmZmVyKCkuZmV0Y2goJmJ1ZmZlckxpc3QoKSwgc2FtcGxl
Q291bnQsIDApOworICAgIEVYUEVDVF9FUShlcnIsIENBUmluZ0J1ZmZlcjo6RXJyb3I6Ok9rKTsK
KyAgICBFWFBFQ1RfVFJVRSghbWVtY21wKHNvdXJjZUJ1ZmZlciwgc2NyYXRjaEJ1ZmZlciwgc2Ft
cGxlQ291bnQgKiBkZXNjcmlwdGlvbigpLnNhbXBsZVdvcmRTaXplKCkpKTsKKworICAgIC8vIC4u
LiBhbmQgdGhlIHNlY29uZCBoYWxmLgorICAgIGVyciA9IHJpbmdCdWZmZXIoKS5zdG9yZSgmYnVm
ZmVyTGlzdCgpLCBjYXBhY2l0eSAvIDIsIGNhcGFjaXR5IC8gMik7CisgICAgRVhQRUNUX0VRKGVy
ciwgQ0FSaW5nQnVmZmVyOjpFcnJvcjo6T2spOworCisgICAgcmluZ0J1ZmZlcigpLmdldEN1cnJl
bnRGcmFtZUJvdW5kcyhzdGFydFRpbWUsIGVuZFRpbWUpOworICAgIEVYUEVDVF9FUSgwLCAoaW50
KXN0YXJ0VGltZSk7CisgICAgRVhQRUNUX0VRKGNhcGFjaXR5LCAoaW50KWVuZFRpbWUpOworCisg
ICAgbWVtc2V0KHNjcmF0Y2hCdWZmZXIsIDAsIHNhbXBsZUNvdW50ICogZGVzY3JpcHRpb24oKS5z
YW1wbGVXb3JkU2l6ZSgpKTsKKyAgICBlcnIgPSByaW5nQnVmZmVyKCkuZmV0Y2goJmJ1ZmZlckxp
c3QoKSwgc2FtcGxlQ291bnQsIDApOworICAgIEVYUEVDVF9FUShlcnIsIENBUmluZ0J1ZmZlcjo6
RXJyb3I6Ok9rKTsKKyAgICBFWFBFQ1RfVFJVRSghbWVtY21wKHNvdXJjZUJ1ZmZlciwgc2NyYXRj
aEJ1ZmZlciwgc2FtcGxlQ291bnQgKiBkZXNjcmlwdGlvbigpLnNhbXBsZVdvcmRTaXplKCkpKTsK
KworICAgIC8vIEZvcmNlIHRoZSBidWZmZXIgdG8gd3JhcCBhcm91bmQKKyAgICBlcnIgPSByaW5n
QnVmZmVyKCkuc3RvcmUoJmJ1ZmZlckxpc3QoKSwgY2FwYWNpdHksIGNhcGFjaXR5IC0gMSk7Cisg
ICAgRVhQRUNUX0VRKGVyciwgQ0FSaW5nQnVmZmVyOjpFcnJvcjo6T2spOworCisgICAgcmluZ0J1
ZmZlcigpLmdldEN1cnJlbnRGcmFtZUJvdW5kcyhzdGFydFRpbWUsIGVuZFRpbWUpOworICAgIEVY
UEVDVF9FUSgoaW50KWNhcGFjaXR5IC0gMSwgKGludClzdGFydFRpbWUpOworICAgIEVYUEVDVF9F
UShjYXBhY2l0eSAtIDEgKyBjYXBhY2l0eSwgKGludCllbmRUaW1lKTsKKworICAgIC8vIE1ha2Ug
c3VyZSBpdCByZXR1cm5zIGFuIGVycm9yIHdoZW4gYXNrZWQgdG8gc3RvcmUgdG9vIG11Y2ggLi4u
CisgICAgZXJyID0gcmluZ0J1ZmZlcigpLnN0b3JlKCZidWZmZXJMaXN0KCksIGNhcGFjaXR5ICog
MywgY2FwYWNpdHkgLyAyKTsKKyAgICBFWFBFQ1RfRVEoZXJyLCBDQVJpbmdCdWZmZXI6OkVycm9y
OjpUb29NdWNoKTsKKworICAgIC8vIC4uLiBhbmQgZG9lc24ndCBtb2RpZnkgdGhlIGJ1ZmZlcgor
ICAgIHJpbmdCdWZmZXIoKS5nZXRDdXJyZW50RnJhbWVCb3VuZHMoc3RhcnRUaW1lLCBlbmRUaW1l
KTsKKyAgICBFWFBFQ1RfRVEoKGludCljYXBhY2l0eSAtIDEsIChpbnQpc3RhcnRUaW1lKTsKKyAg
ICBFWFBFQ1RfRVEoY2FwYWNpdHkgLSAxICsgY2FwYWNpdHksIChpbnQpZW5kVGltZSk7CisKKyAg
ICByaW5nQnVmZmVyKCkuZmx1c2goKTsKKyAgICByaW5nQnVmZmVyKCkuZ2V0Q3VycmVudEZyYW1l
Qm91bmRzKHN0YXJ0VGltZSwgZW5kVGltZSk7CisgICAgRVhQRUNUX0VRKDAsIChpbnQpc3RhcnRU
aW1lKTsKKyAgICBFWFBFQ1RfRVEoMCwgKGludCllbmRUaW1lKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIHR5cGU+CitjbGFzcyBNaXhpbmdUZXN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9p
ZCBydW4oQ0FSaW5nQnVmZmVyVGVzdCYgdGVzdCkKKyAgICB7CisgICAgICAgIGNvbnN0IGludCBz
YW1wbGVDb3VudCA9IDY0OworCisgICAgICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6UENN
Rm9ybWF0IGZvcm1hdDsKKyAgICAgICAgaWYgKHN0ZDo6aXNfc2FtZTx0eXBlLCBmbG9hdD46OnZh
bHVlKQorICAgICAgICAgICAgZm9ybWF0ID0gQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpQQ01G
b3JtYXQ6OkZsb2F0MzI7CisgICAgICAgIGVsc2UgaWYgKHN0ZDo6aXNfc2FtZTx0eXBlLCBkb3Vi
bGU+Ojp2YWx1ZSkKKyAgICAgICAgICAgIGZvcm1hdCA9IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bjo6UENNRm9ybWF0OjpGbG9hdDY0OworICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3NhbWU8dHlw
ZSwgaW50MzJfdD46OnZhbHVlKQorICAgICAgICAgICAgZm9ybWF0ID0gQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uOjpQQ01Gb3JtYXQ6OkludDMyOworICAgICAgICBlbHNlIGlmIChzdGQ6OmlzX3Nh
bWU8dHlwZSwgaW50MTZfdD46OnZhbHVlKQorICAgICAgICAgICAgZm9ybWF0ID0gQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uOjpQQ01Gb3JtYXQ6OkludDE2OworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICB0ZXN0LnNldHVwKDQ0MTAwLCAx
LCBmb3JtYXQsIHRydWUsIHNhbXBsZUNvdW50KTsKKworICAgICAgICB0eXBlIHJlZmVyZW5jZUJ1
ZmZlcltzYW1wbGVDb3VudF07CisgICAgICAgIHR5cGUgc291cmNlQnVmZmVyW3NhbXBsZUNvdW50
XTsKKyAgICAgICAgdHlwZSByZWFkQnVmZmVyW3NhbXBsZUNvdW50XTsKKworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNhbXBsZUNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIHNvdXJjZUJ1
ZmZlcltpXSA9IGkgKiAwLjU7CisgICAgICAgICAgICByZWZlcmVuY2VCdWZmZXJbaV0gPSBzb3Vy
Y2VCdWZmZXJbaV07CisgICAgICAgIH0KKworICAgICAgICB0ZXN0LnNldExpc3REYXRhQnVmZmVy
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNvdXJjZUJ1ZmZlciksIHNhbXBsZUNvdW50KTsK
KyAgICAgICAgQ0FSaW5nQnVmZmVyOjpFcnJvciBlcnIgPSB0ZXN0LnJpbmdCdWZmZXIoKS5zdG9y
ZSgmdGVzdC5idWZmZXJMaXN0KCksIHNhbXBsZUNvdW50LCAwKTsKKyAgICAgICAgRVhQRUNUX0VR
KGVyciwgQ0FSaW5nQnVmZmVyOjpFcnJvcjo6T2spOworCisgICAgICAgIG1lbXNldChyZWFkQnVm
ZmVyLCAwLCBzYW1wbGVDb3VudCAqIHRlc3QuZGVzY3JpcHRpb24oKS5zYW1wbGVXb3JkU2l6ZSgp
KTsKKyAgICAgICAgdGVzdC5zZXRMaXN0RGF0YUJ1ZmZlcihyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihyZWFkQnVmZmVyKSwgc2FtcGxlQ291bnQpOworICAgICAgICBlcnIgPSB0ZXN0LnJpbmdC
dWZmZXIoKS5mZXRjaCgmdGVzdC5idWZmZXJMaXN0KCksIHNhbXBsZUNvdW50LCAwLCBDQVJpbmdC
dWZmZXI6OkZldGNoTW9kZTo6TWl4KTsKKyAgICAgICAgRVhQRUNUX0VRKGVyciwgQ0FSaW5nQnVm
ZmVyOjpFcnJvcjo6T2spOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2FtcGxlQ291
bnQ7IGkrKykKKyAgICAgICAgICAgIEVYUEVDVF9FUShyZWFkQnVmZmVyW2ldLCByZWZlcmVuY2VC
dWZmZXJbaV0pIDw8ICJSaW5nIGJ1ZmZlciB2YWx1ZSBkaWZmZXJzIGF0IGluZGV4ICIgPDwgaTsK
KworICAgICAgICBlcnIgPSB0ZXN0LnJpbmdCdWZmZXIoKS5mZXRjaCgmdGVzdC5idWZmZXJMaXN0
KCksIHNhbXBsZUNvdW50LCAwLCBDQVJpbmdCdWZmZXI6OkZldGNoTW9kZTo6TWl4KTsKKyAgICAg
ICAgRVhQRUNUX0VRKGVyciwgQ0FSaW5nQnVmZmVyOjpFcnJvcjo6T2spOworICAgICAgICBlcnIg
PSB0ZXN0LnJpbmdCdWZmZXIoKS5mZXRjaCgmdGVzdC5idWZmZXJMaXN0KCksIHNhbXBsZUNvdW50
LCAwLCBDQVJpbmdCdWZmZXI6OkZldGNoTW9kZTo6TWl4KTsKKyAgICAgICAgRVhQRUNUX0VRKGVy
ciwgQ0FSaW5nQnVmZmVyOjpFcnJvcjo6T2spOworICAgICAgICBlcnIgPSB0ZXN0LnJpbmdCdWZm
ZXIoKS5mZXRjaCgmdGVzdC5idWZmZXJMaXN0KCksIHNhbXBsZUNvdW50LCAwLCBDQVJpbmdCdWZm
ZXI6OkZldGNoTW9kZTo6TWl4KTsKKyAgICAgICAgRVhQRUNUX0VRKGVyciwgQ0FSaW5nQnVmZmVy
OjpFcnJvcjo6T2spOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2FtcGxlQ291bnQ7
IGkrKykKKyAgICAgICAgICAgIHJlZmVyZW5jZUJ1ZmZlcltpXSArPSBzb3VyY2VCdWZmZXJbaV0g
KiAzOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzYW1wbGVDb3VudDsg
aSsrKQorICAgICAgICAgICAgRVhQRUNUX0VRKHJlYWRCdWZmZXJbaV0sIHJlZmVyZW5jZUJ1ZmZl
cltpXSkgPDwgIlJpbmcgYnVmZmVyIHZhbHVlIGRpZmZlcnMgYXQgaW5kZXggIiA8PCBpOworICAg
IH0KK307CisKK1RFU1RfRihDQVJpbmdCdWZmZXJUZXN0LCBGbG9hdE1peGluZykKK3sKKyAgICBN
aXhpbmdUZXN0PGZsb2F0Pjo6cnVuKCp0aGlzKTsKK30KKworVEVTVF9GKENBUmluZ0J1ZmZlclRl
c3QsIERvdWJsZU1peGluZykKK3sKKyAgICBNaXhpbmdUZXN0PGRvdWJsZT46OnJ1bigqdGhpcyk7
Cit9CisKK1RFU1RfRihDQVJpbmdCdWZmZXJUZXN0LCBJbnQzMk1peGluZykKK3sKKyAgICBNaXhp
bmdUZXN0PGludDMyX3Q+OjpydW4oKnRoaXMpOworfQorCitURVNUX0YoQ0FSaW5nQnVmZmVyVGVz
dCwgSW50MTZNaXhpbmcpCit7CisgICAgTWl4aW5nVGVzdDxpbnQxNl90Pjo6cnVuKCp0aGlzKTsK
K30KKworfQorCisjZW5kaWYKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTQ2NSkKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE3LTAyLTAx
ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNd
IFVwZGF0ZSBDQVJpbmdCdWZmZXIgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NzY1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogd2ViYXVkaW8vbWVkaWFzdHJlYW1hdWRpb3NvdXJjZW5vZGUu
aHRtbDoKKwogMjAxNy0wMS0zMSAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4K
IAogICAgICAgICBNYXJraW5nIGdhbWVwYWQvZ2FtZXBhZC12aXNpYmlsaXR5LTEuaHRtbCBhcyBm
bGFreS4KSW5kZXg6IExheW91dFRlc3RzL3dlYmF1ZGlvL21lZGlhc3RyZWFtYXVkaW9zb3VyY2Vu
b2RlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViYXVkaW8vbWVkaWFzdHJlYW1h
dWRpb3NvdXJjZW5vZGUuaHRtbAkocmV2aXNpb24gMjExNDY1KQorKysgTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vbWVkaWFzdHJlYW1hdWRpb3NvdXJjZW5vZGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MjksNyArMjksNyBAQAogICAgICAgICAgICAgICAgIGlmIChldmVudC5vdXRwdXRCdWZmZXIubnVt
YmVyT2ZDaGFubmVscyAhPSBudW1iZXJPZk91dHB1dENoYW5uZWxzKQogICAgICAgICAgICAgICAg
ICAgICB0ZXN0RmFpbGVkKGBudW1iZXJPZk91dHB1dENoYW5uZWxzIGRvZXNuJ3QgbWF0Y2g6IGhh
dmUgJHtldmVudC5vdXRwdXRCdWZmZXIubnVtYmVyT2ZDaGFubmVsc30sIGV4cGVjdCAke251bWJl
ck9mT3V0cHV0Q2hhbm5lbHN9IWApOwogCi0gICAgICAgICAgICAgICAgc3RyZWFtLmdldEF1ZGlv
VHJhY2tzKClbMF0uc3RvcCgpOworLy8gICAgICAgICAgICAgICAgc3RyZWFtLmdldEF1ZGlvVHJh
Y2tzKClbMF0uc3RvcCgpOwogICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQoIm9uYXVkaW9wcm9j
ZXNzIHdhcyBjYWxsZWQiKTsKICAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKICAgICAg
ICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>