<?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>137565</bug_id>
          
          <creation_ts>2014-10-09 13:12:49 -0700</creation_ts>
          <short_desc>Avoid defaulting to capture-by-value for C++11 lambdas in WebCore</short_desc>
          <delta_ts>2014-10-10 03:28:52 -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>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1040655</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-10-09 13:12:49 -0700</bug_when>
    <thetext>Using the default capture-by-value should be avoided as it can produce various negative side effects, e.g. capturing the this pointer when a member variable is used inside the lambda, and thus failing to make the lambda object self-contained.

It also requires the author to explicitly list the variables she intends to use inside the lambda, providing one additional checkpoint at ensuring that the correct variables are used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040659</commentid>
    <comment_count>1</comment_count>
      <attachid>239563</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-10-09 13:25:36 -0700</bug_when>
    <thetext>Created attachment 239563
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040663</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-09 13:28:10 -0700</bug_when>
    <thetext>Attachment 239563 did not pass style-queue:


ERROR: Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:227:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp:333:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp:375:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/js/JSDOMGlobalObjectTask.cpp:86:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webdatabase/SQLCallbackWrapper.h:78:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 5 in 16 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>1040665</commentid>
    <comment_count>3</comment_count>
      <attachid>239563</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-10-09 13:28:37 -0700</bug_when>
    <thetext>Comment on attachment 239563
Patch

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

Outlined a few problems that could have been avoided, most likely of my doing.

&gt; Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp:422
&gt; -    m_loaderProxy.postTaskToLoader([=](ScriptExecutionContext&amp; context) {
&gt; +    m_loaderProxy.postTaskToLoader([peer, urlCopy, protocolCopy] (ScriptExecutionContext&amp; context) {
&gt;          ASSERT(isMainThread());
&gt;          ASSERT_UNUSED(context, context.isDocument());
&gt;          ASSERT(peer);
&gt;  
&gt; -        peer-&gt;connect(url, protocol);
&gt; +        peer-&gt;connect(urlCopy, protocolCopy);

Case in point.

&gt; Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp:439
&gt; -    m_loaderProxy.postTaskToLoader([=](ScriptExecutionContext&amp; context) {
&gt; +    m_loaderProxy.postTaskToLoader([peer, messageCopy] (ScriptExecutionContext&amp; context) {
&gt;          ASSERT(isMainThread());
&gt;          ASSERT_UNUSED(context, context.isDocument());
&gt;          ASSERT(peer);
&gt;  
&gt; -        peer-&gt;send(message);
&gt; +        peer-&gt;send(messageCopy);

Ditto.

&gt; Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp:558
&gt; -    m_loaderProxy.postTaskToLoader([=] (ScriptExecutionContext&amp; context) {
&gt; +    m_loaderProxy.postTaskToLoader([peer, reasonCopy] (ScriptExecutionContext&amp; context) {
&gt;          ASSERT(isMainThread());
&gt;          ASSERT_UNUSED(context, context.isDocument());
&gt;          ASSERT(peer);
&gt;  
&gt; -        peer-&gt;fail(reason);
&gt; +        peer-&gt;fail(reasonCopy);

Ditto.

&gt; Source/WebCore/dom/StringCallback.cpp:43
&gt;      RefPtr&lt;StringCallback&gt; protector(this);
&gt; -    context-&gt;postTask([=] (ScriptExecutionContext&amp;) {
&gt; -        this-&gt;handleEvent(data);
&gt; +    context-&gt;postTask([protector, data] (ScriptExecutionContext&amp;) {
&gt; +        protector-&gt;handleEvent(data);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040699</commentid>
    <comment_count>4</comment_count>
      <attachid>239563</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-09 14:52:26 -0700</bug_when>
    <thetext>Comment on attachment 239563
Patch

I like this better. I remember being a little puzzled by the [=] syntax earlier, since I have always used the exhaustive list of what to capture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040875</commentid>
    <comment_count>5</comment_count>
      <attachid>239563</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-10-10 03:28:43 -0700</bug_when>
    <thetext>Comment on attachment 239563
Patch

Clearing flags on attachment: 239563

Committed r174581: &lt;http://trac.webkit.org/changeset/174581&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1040877</commentid>
    <comment_count>6</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-10-10 03:28:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239563</attachid>
            <date>2014-10-09 13:25:36 -0700</date>
            <delta_ts>2014-10-10 03:28:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137565-20141009222536.patch</filename>
            <type>text/plain</type>
            <size>41451</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NTE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2ZlNzlkODk2ZTdlNGU0
MGIwMmZlZjNkMjFjMGQxNjMzNzdlNDE1Mi4uZjUzZGY4MTI3OTNjZjc1M2VhMmI1NTVjNjA0YjUy
MGI0YWM2MTA1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDE0LTEwLTA5ICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBBdm9pZCBkZWZhdWx0
aW5nIHRvIGNhcHR1cmUtYnktdmFsdWUgZm9yIEMrKzExIGxhbWJkYXMgaW4gV2ViQ29yZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3NTY1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQysrMTEgbGFtYmFz
IHNob3VsZCBhdm9pZCBkZWZhdWx0aW5nIHRvIGNhcHR1cmluZyB1c2VkIHZhcmlhYmxlcyBieSB2
YWx1ZSBhcyB0aGF0CisgICAgICAgIGNhbiBsZWFkIHRvIHVuaW50ZW5kZWQgY2FwdHVyZXMgdGhh
dCwgaW4gd29yc3QgY2FzZXMsIHJlc3VsdCBpbiBsYW1iZGFzIHRoYXQgYXJlCisgICAgICAgIG5v
dCBzZWxmLWNvbnRhaW5lZCBhbmQgZW5kIHVwIG9wZXJhdGluZyBvbiBkYW5nbGluZyBwb2ludGVy
cy4KKworICAgICAgICBFeHBsaWNpdGx5IHN0YXRpbmcgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSB0
byBiZSBjb3BpZWQgYnkgdmFsdWUgY2FuIGFsc28gc2VydmUgYXMKKyAgICAgICAgYSBjaGVja2xp
c3Qgb2YgdmFyaWFibGVzIHRoYXQgYXJlIGFjdHVhbGx5IGludGVudGVkIGZvciB1c2UgaW4gdGhl
IGxhbWJkYSBib2R5LiAKKworICAgICAgICAqIE1vZHVsZXMvcXVvdGEvU3RvcmFnZUVycm9yQ2Fs
bGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUVycm9yQ2FsbGJhY2s6OkNhbGxi
YWNrVGFzazo6Q2FsbGJhY2tUYXNrKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjp+RGF0YWJhc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnJ1blRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2spOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlTWFuYWdlcjo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTENhbGxiYWNrV3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6U1FMQ2FsbGJh
Y2tXcmFwcGVyOjpjbGVhcik6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6OmRpZENvbm5lY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpk
aWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXI6OmRpZFJlY2VpdmVCaW5hcnlEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcjo6ZGlkVXBkYXRl
QnVmZmVyZWRBbW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWxDbGllbnRXcmFwcGVyOjpkaWRTdGFydENsb3NpbmdIYW5kc2hha2UpOgorICAgICAgICAo
V2ViQ29yZTo6VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpkaWRDbG9z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdy
YXBwZXI6OmRpZFJlY2VpdmVNZXNzYWdlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpwcm9jZXNzUGVuZGluZ1Rhc2tzKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWw6OlBlZXI6OnNlbmQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWw6OlBlZXI6OmJ1ZmZlcmVkQW1vdW50KToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpkaWRDb25uZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpk
aWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbDo6UGVlcjo6ZGlkUmVjZWl2ZUJpbmFyeURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmRpZFVwZGF0ZUJ1
ZmZlcmVkQW1vdW50KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsOjpQZWVyOjpkaWRTdGFydENsb3NpbmdIYW5kc2hha2UpOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmRpZENsb3NlKToK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVy
OjpkaWRSZWNlaXZlTWVzc2FnZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6Om1haW5UaHJlYWRJbml0aWFsaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6
OmNvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWw6OkJyaWRnZTo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpidWZmZXJlZEFtb3VudCk6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpjbG9zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdl
OjpmYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsOjpCcmlkZ2U6OmRpc2Nvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpyZXN1bWUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpE
ZWxldGVDYWxsYmFja0RhdGFUYXNrOjpEZWxldGVDYWxsYmFja0RhdGFUYXNrKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdFRhc2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNHbG9iYWxPYmplY3RUYXNrOjpKU0dsb2JhbE9iamVjdFRhc2spOgorICAgICAgICAqIGRv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpBZGRDb25zb2xlTWVzc2FnZVRhc2s6OkFkZENvbnNvbGVNZXNzYWdlVGFz
ayk6CisgICAgICAgICogZG9tL1N0cmluZ0NhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0cmluZ0NhbGxiYWNrOjpzY2hlZHVsZUNhbGxiYWNrKToKKyAgICAgICAgKiBmaWxlYXBpL0Zp
bGVSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6YWJvcnQpOgorICAg
ICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpwb3N0TGlzdGVuZXJUYXNrKToKKyAg
ICAgICAgKiB3b3JrZXJzL0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclByb3h5Ojpwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUHJveHk6OnBvc3RDb25zb2xlTWVz
c2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlckNvbm5l
Y3RUYXNrOjpTaGFyZWRXb3JrZXJDb25uZWN0VGFzayk6CisgICAgICAgICogd29ya2Vycy9Xb3Jr
ZXJFdmVudFF1ZXVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckV2ZW50UXVldWU6OmVu
cXVldWVFdmVudCk6CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VUb1dv
cmtlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9z
dE1lc3NhZ2VUb1dvcmtlckdsb2JhbFNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1l
c3NhZ2luZ1Byb3h5Ojpwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5Ojpub3RpZnlOZXR3
b3JrU3RhdGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6
OnBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1l
c3NhZ2luZ1Byb3h5Ojpjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6OnJlcG9ydFBlbmRpbmdBY3Rpdml0eSk6CisK
IDIwMTQtMTAtMDkgIEJlYXIgVHJhdmlzICA8YmV0cmF2aXNAYWRvYmUuY29tPgogCiAgICAgICAg
IFtDU1MgRm9udCBMb2FkaW5nXSBEZWNyZW1lbnQgdGhlIGZvbnQgbG9hZGluZyBjb3VudCBiZWZv
cmUgbm90aWZ5aW5nIGNhbGxiYWNrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9xdW90YS9TdG9yYWdlRXJyb3JDYWxsYmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3F1b3RhL1N0b3JhZ2VFcnJvckNhbGxiYWNrLmNwcAppbmRleCAxZjUzYjAzNDA2YTI5N2MyYjU2
YjE2OTNkZTQzYjhhMjE5ZmEzYjNiLi5jOWZlY2Q0MTMzNjY5NzU0MDIyZWI2OTNhMzVhMjY3Y2Fk
Zjg1Njg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3F1b3RhL1N0b3JhZ2VF
cnJvckNhbGxiYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3F1b3RhL1N0b3Jh
Z2VFcnJvckNhbGxiYWNrLmNwcApAQCAtNDAsNyArNDAsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBTdG9yYWdlRXJyb3JDYWxsYmFjazo6Q2FsbGJhY2tUYXNrOjpDYWxsYmFja1Rhc2soUGFz
c1JlZlB0cjxTdG9yYWdlRXJyb3JDYWxsYmFjaz4gY2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUgZWMp
Ci0gICAgOiBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrKFs9XSAoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCopIHsKKyAgICA6IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2soW2NhbGxiYWNr
LCBlY10gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSB7CiAgICAgICAgIGlmIChjYWxsYmFjaykK
ICAgICAgICAgICAgIGNhbGxiYWNrLT5oYW5kbGVFdmVudChET01Db3JlRXhjZXB0aW9uOjpjcmVh
dGUoRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uKGVjKSkuZ2V0KCkpOwogICAgIH0pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCmluZGV4IDBhYWRh
YjkxMGE0ZDY0NDk3YjU4ZTc3YzEwZWMwMDc0NjU5N2E1Y2YuLmYyZTE1Zjg2YTg0NWYzZDFhMmZi
ZGI4ODAwZDBiYjdjZjc2NzZmNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2UuY3BwCkBAIC05MSw3ICs5MSw3IEBAIERhdGFiYXNlOjp+RGF0YWJh
c2UoKQogICAgICAgICAvLyBHcmFiIGEgcG9pbnRlciB0byB0aGUgc2NyaXB0IGV4ZWN1dGlvbiBo
ZXJlIGJlY2F1c2Ugd2UncmUgcmVsZWFzaW5nIGl0IHdoZW4gd2UgcGFzcyBpdCB0bwogICAgICAg
ICAvLyBEZXJlZkNvbnRleHRUYXNrOjpjcmVhdGUuCiAgICAgICAgIFBhc3NSZWZQdHI8U2NyaXB0
RXhlY3V0aW9uQ29udGV4dD4gcGFzc2VkQ29udGV4dCA9IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5yZWxlYXNlKCk7Ci0gICAgICAgIHBhc3NlZENvbnRleHQtPnBvc3RUYXNrKHtTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrOjpDbGVhbnVwVGFzaywgWz1dIChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0KSB7CisgICAgICAgIHBhc3NlZENvbnRleHQtPnBvc3RUYXNrKHtTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrOjpDbGVhbnVwVGFzaywgW3Bhc3NlZENvbnRleHRdIChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KGNvbnRleHQsICZjb250ZXh0ID09IHBhc3NlZENvbnRleHQpOwogICAgICAgICAgICAgUmVmUHRy
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQocGFzc2VkQ29u
dGV4dCk7CiAgICAgICAgIH19KTsKQEAgLTE3MCw3ICsxNzAsNyBAQCB2b2lkIERhdGFiYXNlOjpy
dW5UcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNr
LCBQYXNzUgogCiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uQmFja2VuZD4gdHJhbnNhY3Rpb25C
YWNrZW5kKGJhY2tlbmQoKS0+cnVuVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24ucmVsZWFzZSgpLCBy
ZWFkT25seSwgY2hhbmdlVmVyc2lvbkRhdGEpKTsKICAgICBpZiAoIXRyYW5zYWN0aW9uQmFja2Vu
ZCAmJiBlcnJvckNhbGxiYWNrUHJvdGVjdG9yKQotICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPnBvc3RUYXNrKFs9XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKKyAgICAgICAg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhbZXJyb3JDYWxsYmFja1Byb3RlY3Rv
cl0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CiAgICAgICAgICAgICBlcnJvckNhbGxiYWNr
UHJvdGVjdG9yLT5oYW5kbGVFdmVudChTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dO
X0VSUiwgImRhdGFiYXNlIGhhcyBiZWVuIGNsb3NlZCIpLmdldCgpKTsKICAgICAgICAgfSk7CiB9
CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBEYXRhYmFzZTo6cnVuVHJhbnNhY3Rpb24oUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1IKIHZvaWQgRGF0YWJh
c2U6OnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24pCiB7CiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvblByb3RlY3Rvcih0
cmFuc2FjdGlvbik7Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhbPV0g
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5wb3N0VGFzayhbdHJhbnNhY3Rpb25Qcm90ZWN0b3JdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JikgewogICAgICAgICB0cmFuc2FjdGlvblByb3RlY3Rvci0+cGVyZm9ybVBlbmRpbmdDYWxsYmFj
aygpOwogICAgIH0pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCmluZGV4IGM5NzIyM2IwYzAyZTdiOWY4NTZmMjJi
ZGU2ZDRkOGFjYzg3Mjg5M2QuLmI5ZDU5MTI5MmFmMDUyNTQ2NTdhYTdiN2RlZTRlNzI0ZWQ2ZjJj
ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlTWFuYWdlci5jcHAKQEAgLTMxMSw3ICszMTEsNyBAQCBQYXNzUmVmUHRyPERhdGFiYXNl
PiBEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZQogCiAgICAgaWYgKGJhY2tlbmQtPmlzTmV3KCkgJiYgY3JlYXRpb25DYWxsYmFjay5nZXQo
KSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgRGF0YWJhc2VDcmVhdGlv
bkNhbGxiYWNrVGFzayBmb3IgZGF0YWJhc2UgJXBcbiIsIGRhdGFiYXNlLmdldCgpKTsKLSAgICAg
ICAgZGF0YWJhc2UtPm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soWz1dIChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JikgeworICAgICAgICBkYXRhYmFzZS0+bV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5wb3N0VGFzayhbY3JlYXRpb25DYWxsYmFjaywgZGF0YWJhc2VdIChTY3JpcHRF
eGVjdXRpb25Db250ZXh0JikgewogICAgICAgICAgICAgY3JlYXRpb25DYWxsYmFjay0+aGFuZGxl
RXZlbnQoZGF0YWJhc2UuZ2V0KCkpOwogICAgICAgICB9KTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTENhbGxiYWNrV3JhcHBlci5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxDYWxsYmFja1dyYXBwZXIuaApp
bmRleCAxNDJjZDU1NTE3Y2ZkNzBhNzg1OWJiMDQ2ZTRjMWJkMWQyNzU5YWU3Li5jNWI0NzdmNzcx
ZmQ3NThmZGIzZDAxYjA2ZGJmN2E5YjA4OTE2NDg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTENhbGxiYWNrV3JhcHBlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmgKQEAgLTczLDEx
ICs3MywxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0UHRy
ID0gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LnJlbGVhc2UoKS5sZWFrUmVmKCk7CiAgICAgICAg
ICAgICBjYWxsYmFjayA9IG1fY2FsbGJhY2sucmVsZWFzZSgpLmxlYWtSZWYoKTsKICAgICAgICAg
fQotICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0UHRyLT5wb3N0VGFzayh7IFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2s6OkNsZWFudXBUYXNrLCBbPV0gKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgJmNv
bnRleHQgPT0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dFB0ciAmJiBjb250ZXh0LmlzQ29udGV4dFRo
cmVhZCgpKTsKLSAgICAgICAgICAgIGNhbGxiYWNrLT5kZXJlZigpOwotICAgICAgICAgICAgc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dFB0ci0+ZGVyZWYoKTsKLSAgICAgICAgfSB9KTsKKyAgICAgICAg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dFB0ci0+cG9zdFRhc2soeworICAgICAgICAgICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzazo6Q2xlYW51cFRhc2ssCisgICAgICAgICAgICBbY2FsbGJh
Y2ssIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRQdHJdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCAmY29udGV4
dCA9PSBzY3JpcHRFeGVjdXRpb25Db250ZXh0UHRyICYmIGNvbnRleHQuaXNDb250ZXh0VGhyZWFk
KCkpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrLT5kZXJlZigpOworICAgICAgICAgICAgICAg
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRQdHItPmRlcmVmKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOwogICAgIH0KIAogICAgIFBhc3NSZWZQdHI8VD4gdW53cmFwKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbENsaWVudFdyYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5jcHAKaW5kZXggYTU2NTAx
OTk5N2ZjMmE3NTNjNWNlYWVkMmExZDAyY2ZlY2Y2Yjk0Zi4uZDJhNDE4OGMwOGY0NTM0OGExOWEx
OTA1MzdhZThlY2FlNjQyODdjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsQ2xpZW50V3JhcHBlci5jcHAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIFRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcjo6Y2xlYXJDbGllbnQoKQogdm9pZCBUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6OmRpZENvbm5lY3QoKQogewogICAg
IHJlZigpOwotICAgIG1fcGVuZGluZ1Rhc2tzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KFs9XShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jikgewor
ICAgIG1fcGVuZGluZ1Rhc2tzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2s+KFt0aGlzXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKICAgICAg
ICAgaWYgKG1fY2xpZW50KQogICAgICAgICAgICAgbV9jbGllbnQtPmRpZENvbm5lY3QoKTsKICAg
ICAgICAgZGVyZWYoKTsKQEAgLTE3MCw3ICsxNzAsNyBAQCB2b2lkIFRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZQogewogICAgIHJlZigpOwogICAgIFN0cmluZyBtZXNzYWdlQ29weSA9IG1lc3NhZ2UuaXNvbGF0
ZWRDb3B5KCk7Ci0gICAgbV9wZW5kaW5nVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4oWz1dKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7
CisgICAgbV9wZW5kaW5nVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4oW3RoaXMsIG1lc3NhZ2VdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JikgewogICAgICAgICBpZiAobV9jbGllbnQpCiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVj
ZWl2ZU1lc3NhZ2UobWVzc2FnZSk7CiAgICAgICAgIGRlcmVmKCk7CkBAIC0xODMsNyArMTgzLDcg
QEAgdm9pZCBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6OmRpZFJlY2Vp
dmVNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWUKIHZvaWQgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWxDbGllbnRXcmFwcGVyOjpkaWRSZWNlaXZlQmluYXJ5RGF0YShQYXNzT3duUHRyPFZlY3Rvcjxj
aGFyPj4gYmluYXJ5RGF0YSkKIHsKICAgICByZWYoKTsKLSAgICBtX3BlbmRpbmdUYXNrcy5hcHBl
bmQoc3RkOjptYWtlX3VuaXF1ZTxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPihbPV0oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKKyAgICBtX3BlbmRpbmdUYXNrcy5hcHBlbmQoc3RkOjpt
YWtlX3VuaXF1ZTxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPihbdGhpcywgYmluYXJ5RGF0
YV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CiAgICAgICAgIGlmIChtX2NsaWVudCkKICAg
ICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQmluYXJ5RGF0YShiaW5hcnlEYXRhKTsKICAg
ICAgICAgZGVyZWYoKTsKQEAgLTE5Niw3ICsxOTYsNyBAQCB2b2lkIFRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZUJpbmFyeURhdGEoUGFzc093blB0cjxW
ZQogdm9pZCBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6OmRpZFVwZGF0
ZUJ1ZmZlcmVkQW1vdW50KHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQpCiB7CiAgICAgcmVm
KCk7Ci0gICAgbV9wZW5kaW5nVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4oWz1dKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CisgICAg
bV9wZW5kaW5nVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzaz4oW3RoaXMsIGJ1ZmZlcmVkQW1vdW50XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYpIHsKICAgICAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICAgICAgbV9jbGllbnQtPmRpZFVw
ZGF0ZUJ1ZmZlcmVkQW1vdW50KGJ1ZmZlcmVkQW1vdW50KTsKICAgICAgICAgZGVyZWYoKTsKQEAg
LTIwOSw3ICsyMDksNyBAQCB2b2lkIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3Jh
cHBlcjo6ZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQodW5zaWduZWQgbAogdm9pZCBUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6OmRpZFN0YXJ0Q2xvc2luZ0hhbmRzaGFrZSgp
CiB7CiAgICAgcmVmKCk7Ci0gICAgbV9wZW5kaW5nVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV91bmlx
dWU8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4oWz1dKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmKSB7CisgICAgbV9wZW5kaW5nVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8U2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4oW3RoaXNdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jikg
ewogICAgICAgICBpZiAobV9jbGllbnQpCiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkU3RhcnRD
bG9zaW5nSGFuZHNoYWtlKCk7CiAgICAgICAgIGRlcmVmKCk7CkBAIC0yMjMsMTEgKzIyMywxMiBA
QCB2b2lkIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcjo6ZGlkQ2xvc2Uo
dW5zaWduZWQgbG9uZyB1bmhhbmRsZWRCdQogewogICAgIHJlZigpOwogICAgIFN0cmluZyByZWFz
b25Db3B5ID0gcmVhc29uLmlzb2xhdGVkQ29weSgpOwotICAgIG1fcGVuZGluZ1Rhc2tzLmFwcGVu
ZChzdGQ6Om1ha2VfdW5pcXVlPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KFs9XShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JikgewotICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAg
ICBtX2NsaWVudC0+ZGlkQ2xvc2UodW5oYW5kbGVkQnVmZmVyZWRBbW91bnQsIGNsb3NpbmdIYW5k
c2hha2VDb21wbGV0aW9uLCBjb2RlLCByZWFzb25Db3B5KTsKLSAgICAgICAgZGVyZWYoKTsKLSAg
ICB9KSk7CisgICAgbV9wZW5kaW5nVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8U2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4oCisgICAgICAgIFt0aGlzLCB1bmhhbmRsZWRCdWZmZXJl
ZEFtb3VudCwgY2xvc2luZ0hhbmRzaGFrZUNvbXBsZXRpb24sIGNvZGUsIHJlYXNvbkNvcHldIChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JikgeworICAgICAgICAgICAgaWYgKG1fY2xpZW50KQorICAg
ICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRDbG9zZSh1bmhhbmRsZWRCdWZmZXJlZEFtb3VudCwg
Y2xvc2luZ0hhbmRzaGFrZUNvbXBsZXRpb24sIGNvZGUsIHJlYXNvbkNvcHkpOworICAgICAgICAg
ICAgZGVyZWYoKTsKKyAgICAgICAgfSkpOwogCiAgICAgaWYgKCFtX3N1c3BlbmRlZCkKICAgICAg
ICAgcHJvY2Vzc1BlbmRpbmdUYXNrcygpOwpAQCAtMjM2LDcgKzIzNyw3IEBAIHZvaWQgVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpkaWRDbG9zZSh1bnNpZ25lZCBsb25n
IHVuaGFuZGxlZEJ1CiB2b2lkIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBl
cjo6ZGlkUmVjZWl2ZU1lc3NhZ2VFcnJvcigpCiB7CiAgICAgcmVmKCk7Ci0gICAgbV9wZW5kaW5n
VGFza3MuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFz
az4oWz1dKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CisgICAgbV9wZW5kaW5nVGFza3MuYXBw
ZW5kKHN0ZDo6bWFrZV91bmlxdWU8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4oW3RoaXNd
IChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgewogICAgICAgICBpZiAobV9jbGllbnQpCiAgICAg
ICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2VFcnJvcigpOwogICAgICAgICBkZXJl
ZigpOwpAQCAtMjY1LDcgKzI2Niw3IEBAIHZvaWQgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyOjpwcm9jZXNzUGVuZGluZ1Rhc2tzKCkKICAgICAgICAgLy8gV2hlbiBhIHN5
bmNocm9ub3VzIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyAoaS5lLiB0aGUgZXhlY3V0aW9uIHN0
YWNrIGNvbnRhaW5zCiAgICAgICAgIC8vIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
Ojp3YWl0Rm9yTWV0aG9kQ29tcGxldGlvbigpKSwgd2UgY2Fubm90IGludm9rZSBjYWxsYmFja3Mg
aW4gdGhpcyBydW4gbG9vcC4KICAgICAgICAgcmVmKCk7Ci0gICAgICAgIG1fY29udGV4dC0+cG9z
dFRhc2soWz1dKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgbV9j
b250ZXh0LT5wb3N0VGFzayhbdGhpc10gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQp
IHsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC5pc1dvcmtlckds
b2JhbFNjb3BlKCkpOwogICAgICAgICAgICAgcHJvY2Vzc1BlbmRpbmdUYXNrcygpOwogICAgICAg
ICAgICAgZGVyZWYoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3Bw
CmluZGV4IDg5MGNiMWQ2ZDE2ZTRhZjY1NThkZGEzODg3OGQxMjBkODM3NDBiNjguLmZmZTY5YzEx
ZmI2YmRkOWIyODBjYzhkYTcwZmIzYjAyOThhMWE4MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsLmNwcApAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgV29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OnNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQogCiAgICAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlNlbmRSZXN1bHQgc2VuZFJlcXVl
c3RSZXN1bHQgPSBtX21haW5XZWJTb2NrZXRDaGFubmVsLT5zZW5kKG1lc3NhZ2UpOwogICAgIFJl
ZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVu
dFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXI7Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0
VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKFs9XShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JikgeworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29w
ZShbd29ya2VyQ2xpZW50V3JhcHBlciwgc2VuZFJlcXVlc3RSZXN1bHRdIChTY3JpcHRFeGVjdXRp
b25Db250ZXh0JikgewogICAgICAgICB3b3JrZXJDbGllbnRXcmFwcGVyLT5zZXRTZW5kUmVxdWVz
dFJlc3VsdChzZW5kUmVxdWVzdFJlc3VsdCk7CiAgICAgfSwgbV90YXNrTW9kZSk7CiB9CkBAIC0x
ODksNyArMTg5LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVl
cjo6c2VuZChjb25zdCBBcnJheUJ1ZmZlciYgYmluYXJ5RGF0YSkKIAogICAgIFRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsOjpTZW5kUmVzdWx0IHNlbmRSZXF1ZXN0UmVzdWx0ID0gbV9tYWluV2Vi
U29ja2V0Q2hhbm5lbC0+c2VuZChiaW5hcnlEYXRhLCAwLCBiaW5hcnlEYXRhLmJ5dGVMZW5ndGgo
KSk7CiAgICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4g
d29ya2VyQ2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKLSAgICBtX2xvYWRl
clByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoWz1dKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmKSB7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtl
ckdsb2JhbFNjb3BlKFt3b3JrZXJDbGllbnRXcmFwcGVyLCBzZW5kUmVxdWVzdFJlc3VsdF0gKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CiAgICAgICAgIHdvcmtlckNsaWVudFdyYXBwZXItPnNl
dFNlbmRSZXF1ZXN0UmVzdWx0KHNlbmRSZXF1ZXN0UmVzdWx0KTsKICAgICB9LCBtX3Rhc2tNb2Rl
KTsKIH0KQEAgLTIwMiw3ICsyMDIsNyBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsOjpQZWVyOjpzZW5kKEJsb2ImIGJpbmFyeURhdGEpCiAKICAgICBUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBzZW5kUmVxdWVzdFJlc3VsdCA9IG1fbWFpbldlYlNv
Y2tldENoYW5uZWwtPnNlbmQoYmluYXJ5RGF0YSk7CiAgICAgUmVmUHRyPFRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciA9IG1fd29ya2Vy
Q2xpZW50V3JhcHBlcjsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2Vy
R2xvYmFsU2NvcGUoWz1dKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CisgICAgbV9sb2FkZXJQ
cm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKFt3b3JrZXJDbGllbnRXcmFw
cGVyLCBzZW5kUmVxdWVzdFJlc3VsdF0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CiAgICAg
ICAgIHdvcmtlckNsaWVudFdyYXBwZXItPnNldFNlbmRSZXF1ZXN0UmVzdWx0KHNlbmRSZXF1ZXN0
UmVzdWx0KTsKICAgICB9LCBtX3Rhc2tNb2RlKTsKIH0KQEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lk
IFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpidWZmZXJlZEFtb3VudCgp
CiAKICAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3
b3JrZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyOwogICAgIHVuc2lnbmVk
IGxvbmcgYnVmZmVyZWRBbW91bnQgPSBtX21haW5XZWJTb2NrZXRDaGFubmVsLT5idWZmZXJlZEFt
b3VudCgpOwotICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxT
Y29wZShbPV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgIG1fbG9hZGVy
UHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShbd29ya2VyQ2xpZW50V3Jh
cHBlciwgYnVmZmVyZWRBbW91bnRdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7
CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC5pc1dvcmtlckdsb2JhbFNj
b3BlKCkpOwogICAgICAgICB3b3JrZXJDbGllbnRXcmFwcGVyLT5zZXRCdWZmZXJlZEFtb3VudChi
dWZmZXJlZEFtb3VudCk7CiAgICAgfSwgbV90YXNrTW9kZSk7CkBAIC0yNjksNyArMjY5LDcgQEAg
dm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6ZGlkQ29ubmVjdCgp
CiAgICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29y
a2VyQ2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKICAgICBTdHJpbmcgc3Vi
cHJvdG9jb2xDb3B5ID0gbV9tYWluV2ViU29ja2V0Q2hhbm5lbC0+c3VicHJvdG9jb2woKS5pc29s
YXRlZENvcHkoKTsKICAgICBTdHJpbmcgZXh0ZW5zaW9uc0NvcHkgPSBtX21haW5XZWJTb2NrZXRD
aGFubmVsLT5leHRlbnNpb25zKCkuaXNvbGF0ZWRDb3B5KCk7Ci0gICAgbV9sb2FkZXJQcm94eS5w
b3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKFs9XShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0KSB7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtl
ckdsb2JhbFNjb3BlKFt3b3JrZXJDbGllbnRXcmFwcGVyLCBzdWJwcm90b2NvbENvcHksIGV4dGVu
c2lvbnNDb3B5XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewogICAgICAgICBB
U1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQuaXNXb3JrZXJHbG9iYWxTY29wZSgpKTsKICAg
ICAgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+c2V0U3VicHJvdG9jb2woc3VicHJvdG9jb2xDb3B5
KTsKICAgICAgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+c2V0RXh0ZW5zaW9ucyhleHRlbnNpb25z
Q29weSk7CkBAIC0yODMsNyArMjgzLDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDo6UGVlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXMKIAogICAg
IFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdvcmtlckNs
aWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXI7CiAgICAgU3RyaW5nIG1lc3NhZ2VD
b3B5ID0gbWVzc2FnZS5pc29sYXRlZENvcHkoKTsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNr
Rm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoWz1dKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQpIHsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFs
U2NvcGUoW3dvcmtlckNsaWVudFdyYXBwZXIsIG1lc3NhZ2VDb3B5XSAoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCkgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRl
eHQuaXNXb3JrZXJHbG9iYWxTY29wZSgpKTsKICAgICAgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+
ZGlkUmVjZWl2ZU1lc3NhZ2UobWVzc2FnZUNvcHkpOwogICAgIH0sIG1fdGFza01vZGUpOwpAQCAt
Mjk0LDcgKzI5NCw3IEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBl
ZXI6OmRpZFJlY2VpdmVCaW5hcnlEYXRhKFBhc3NPd25QdHI8VmVjCiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKIAogICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVu
dFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXI7Ci0g
ICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKFs9XShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0
VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKFt3b3JrZXJDbGllbnRXcmFwcGVyLCBiaW5h
cnlEYXRhXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewogICAgICAgICBBU1NF
UlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQuaXNXb3JrZXJHbG9iYWxTY29wZSgpKTsKICAgICAg
ICAgd29ya2VyQ2xpZW50V3JhcHBlci0+ZGlkUmVjZWl2ZUJpbmFyeURhdGEoYmluYXJ5RGF0YSk7
CiAgICAgfSwgbV90YXNrTW9kZSk7CkBAIC0zMDUsNyArMzA1LDcgQEAgdm9pZCBXb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6ZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQodW5z
aWduZWQgbG8KICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgUmVmUHRyPFRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciA9
IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9k
ZVRvV29ya2VyR2xvYmFsU2NvcGUoWz1dKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQp
IHsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUo
W3dvcmtlckNsaWVudFdyYXBwZXIsIGJ1ZmZlcmVkQW1vdW50XSAoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCkgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQu
aXNXb3JrZXJHbG9iYWxTY29wZSgpKTsKICAgICAgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+ZGlk
VXBkYXRlQnVmZmVyZWRBbW91bnQoYnVmZmVyZWRBbW91bnQpOwogICAgIH0sIG1fdGFza01vZGUp
OwpAQCAtMzE2LDcgKzMxNiw3IEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWw6OlBlZXI6OmRpZFN0YXJ0Q2xvc2luZ0hhbmRzaGFrZSgpCiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKIAogICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdy
YXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXI7Ci0gICAg
bV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKFs9XShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFz
a0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKFt3b3JrZXJDbGllbnRXcmFwcGVyXSAoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRl
eHQsIGNvbnRleHQuaXNXb3JrZXJHbG9iYWxTY29wZSgpKTsKICAgICAgICAgd29ya2VyQ2xpZW50
V3JhcHBlci0+ZGlkU3RhcnRDbG9zaW5nSGFuZHNoYWtlKCk7CiAgICAgfSwgbV90YXNrTW9kZSk7
CkBAIC0zMjksMTAgKzMyOSwxMSBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsOjpQZWVyOjpkaWRDbG9zZSh1bnNpZ25lZCBsb25nIHVuaGFuZGxlZEJ1ZgogCiAgICAgUmVm
UHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50
V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKICAgICBTdHJpbmcgcmVhc29uQ29weSA9
IHJlYXNvbi5pc29sYXRlZENvcHkoKTsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9k
ZVRvV29ya2VyR2xvYmFsU2NvcGUoWz1dKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQp
IHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LmlzV29ya2VyR2xvYmFs
U2NvcGUoKSk7Ci0gICAgICAgIHdvcmtlckNsaWVudFdyYXBwZXItPmRpZENsb3NlKHVuaGFuZGxl
ZEJ1ZmZlcmVkQW1vdW50LCBjbG9zaW5nSGFuZHNoYWtlQ29tcGxldGlvbiwgY29kZSwgcmVhc29u
Q29weSk7Ci0gICAgfSwgbV90YXNrTW9kZSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zv
ck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKAorICAgICAgICBbd29ya2VyQ2xpZW50V3JhcHBlciwg
dW5oYW5kbGVkQnVmZmVyZWRBbW91bnQsIGNsb3NpbmdIYW5kc2hha2VDb21wbGV0aW9uLCBjb2Rl
LCByZWFzb25Db3B5XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAg
ICAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LmlzV29ya2VyR2xvYmFsU2NvcGUo
KSk7CisgICAgICAgICAgICB3b3JrZXJDbGllbnRXcmFwcGVyLT5kaWRDbG9zZSh1bmhhbmRsZWRC
dWZmZXJlZEFtb3VudCwgY2xvc2luZ0hhbmRzaGFrZUNvbXBsZXRpb24sIGNvZGUsIHJlYXNvbkNv
cHkpOworICAgICAgICB9LCBtX3Rhc2tNb2RlKTsKIH0KIAogdm9pZCBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2VFcnJvcigpCkBAIC0zNDAs
NyArMzQxLDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6
ZGlkUmVjZWl2ZU1lc3NhZ2VFcnJvcigpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAog
ICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdvcmtl
ckNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXI7Ci0gICAgbV9sb2FkZXJQcm94
eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKFs9XShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0KSB7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dv
cmtlckdsb2JhbFNjb3BlKFt3b3JrZXJDbGllbnRXcmFwcGVyXSAoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCkgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQu
aXNXb3JrZXJHbG9iYWxTY29wZSgpKTsKICAgICAgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+ZGlk
UmVjZWl2ZU1lc3NhZ2VFcnJvcigpOwogICAgIH0sIG1fdGFza01vZGUpOwpAQCAtMzY5LDE4ICsz
NzAsMjIgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpt
YWluVGhyZWFkSW5pdGlhbGl6ZShTY3JpcHRFeGVjdXQKICAgICBSZWZQdHI8VGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiBjbGllbnRXcmFwcGVyID0gcHJwQ2xpZW50V3Jh
cHBlcjsKIAogICAgIFBlZXIqIHBlZXJQdHIgPSBQZWVyOjpjcmVhdGUoY2xpZW50V3JhcHBlciwg
KmxvYWRlclByb3h5LCAmY29udGV4dCwgdGFza01vZGUpOwotICAgIGJvb2wgc2VudCA9IGxvYWRl
clByb3h5LT5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKHsgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzazo6Q2xlYW51cFRhc2ssIFs9XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCkgewotICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQuaXNX
b3JrZXJHbG9iYWxTY29wZSgpKTsKLSAgICAgICAgaWYgKGNsaWVudFdyYXBwZXItPmZhaWxlZFdl
YlNvY2tldENoYW5uZWxDcmVhdGlvbigpKSB7Ci0gICAgICAgICAgICAvLyBJZiBCcmlkZ2U6Omlu
aXRpYWxpemUoKSBxdWl0dGVkIGVhcmxpZXIsIHdlIG5lZWQgdG8ga2ljayBtYWluVGhyZWFkRGVz
dHJveSgpIHRvIGRlbGV0ZSB0aGUgcGVlci4KLSAgICAgICAgICAgIGxvYWRlclByb3h5LT5wb3N0
VGFza1RvTG9hZGVyKFs9XShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAgICAgICAgICAgICBBU1NF
UlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQuaXNEb2N1bWVudCgpKTsKLSAgICAgICAgICAgICAg
ICBkZWxldGUgcGVlclB0cjsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGNsaWVudFdyYXBwZXItPmRpZENyZWF0ZVdlYlNvY2tldENoYW5uZWwocGVlclB0cik7
Ci0gICAgfSB9LCB0YXNrTW9kZSk7CisgICAgYm9vbCBzZW50ID0gbG9hZGVyUHJveHktPnBvc3RU
YXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoeworICAgICAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpUYXNrOjpDbGVhbnVwVGFzaywKKyAgICAgICAgW2NsaWVudFdyYXBwZXIsIGxvYWRl
clByb3h5LCBwZWVyUHRyXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LmlzV29ya2VyR2xvYmFsU2Nv
cGUoKSk7CisgICAgICAgICAgICBpZiAoY2xpZW50V3JhcHBlci0+ZmFpbGVkV2ViU29ja2V0Q2hh
bm5lbENyZWF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiBCcmlkZ2U6OmluaXRpYWxp
emUoKSBxdWl0dGVkIGVhcmxpZXIsIHdlIG5lZWQgdG8ga2ljayBtYWluVGhyZWFkRGVzdHJveSgp
IHRvIGRlbGV0ZSB0aGUgcGVlci4KKyAgICAgICAgICAgICAgICBsb2FkZXJQcm94eS0+cG9zdFRh
c2tUb0xvYWRlcihbcGVlclB0cl0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LmlzRG9jdW1lbnQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwZWVyUHRyOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgY2xpZW50V3JhcHBlci0+ZGlkQ3Jl
YXRlV2ViU29ja2V0Q2hhbm5lbChwZWVyUHRyKTsKKyAgICAgICAgfQorICAgIH0sIHRhc2tNb2Rl
KTsKKwogICAgIGlmICghc2VudCkgewogICAgICAgICBjbGllbnRXcmFwcGVyLT5jbGVhclBlZXIo
KTsKICAgICAgICAgZGVsZXRlIHBlZXJQdHI7CkBAIC00MDksMTIgKzQxNCwxMiBAQCB2b2lkIFdv
cmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OmNvbm5lY3QoY29uc3QgVVJM
JiB1cmwsIGNvbnN0IFN0cgogICAgIFBlZXIqIHBlZXIgPSBtX3BlZXI7CiAgICAgVVJMIHVybENv
cHkgPSB1cmwuY29weSgpOwogICAgIFN0cmluZyBwcm90b2NvbENvcHkgPSBwcm90b2NvbC5pc29s
YXRlZENvcHkoKTsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoWz1dKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNr
VG9Mb2FkZXIoW3BlZXIsIHVybENvcHksIHByb3RvY29sQ29weV0gKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQpIHsKICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICAg
ICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LmlzRG9jdW1lbnQoKSk7CiAgICAgICAg
IEFTU0VSVChwZWVyKTsKIAotICAgICAgICBwZWVyLT5jb25uZWN0KHVybCwgcHJvdG9jb2wpOwor
ICAgICAgICBwZWVyLT5jb25uZWN0KHVybENvcHksIHByb3RvY29sQ29weSk7CiAgICAgfSk7CiB9
CiAKQEAgLTQyNiwxMiArNDMxLDEyIEBAIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpTZW5k
UmVzdWx0IFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6CiAKICAgICBQ
ZWVyKiBwZWVyID0gbV9wZWVyOwogICAgIFN0cmluZyBtZXNzYWdlQ29weSA9IG1lc3NhZ2UuaXNv
bGF0ZWRDb3B5KCk7Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza1RvTG9hZGVyKFs9XShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFz
a1RvTG9hZGVyKFtwZWVyLCBtZXNzYWdlQ29weV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQpIHsKICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICAgICAgQVNTRVJU
X1VOVVNFRChjb250ZXh0LCBjb250ZXh0LmlzRG9jdW1lbnQoKSk7CiAgICAgICAgIEFTU0VSVChw
ZWVyKTsKIAotICAgICAgICBwZWVyLT5zZW5kKG1lc3NhZ2UpOworICAgICAgICBwZWVyLT5zZW5k
KG1lc3NhZ2VDb3B5KTsKICAgICB9KTsKIAogICAgIFJlZjxCcmlkZ2U+IHByb3RlY3QoKnRoaXMp
OwpAQCAtNDU0LDcgKzQ1OSw3IEBAIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpTZW5kUmVz
dWx0IFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6CiAgICAgc2V0TWV0
aG9kTm90Q29tcGxldGVkKCk7CiAKICAgICBQZWVyKiBwZWVyID0gbV9wZWVyOwotICAgIG1fbG9h
ZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihbPV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCkgeworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihbcGVlciwgZGF0YVB0
cl0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKICAgICAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0Lmlz
RG9jdW1lbnQoKSk7CiAgICAgICAgIEFTU0VSVChwZWVyKTsKQEAgLTQ4Miw3ICs0ODcsNyBAQCBU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXb3JrZXJUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbDo6QnJpZGdlOgogICAgIFVSTCB1cmxDb3B5ID0gYmluYXJ5RGF0YS51cmwo
KS5jb3B5KCk7CiAgICAgU3RyaW5nIHR5cGVDb3B5ID0gYmluYXJ5RGF0YS50eXBlKCkuaXNvbGF0
ZWRDb3B5KCk7CiAgICAgbG9uZyBsb25nIHNpemUgPSBiaW5hcnlEYXRhLnNpemUoKTsKLSAgICBt
X2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoWz1dKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQpIHsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoW3BlZXIsIHVy
bENvcHksIHR5cGVDb3B5LCBzaXplXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkg
ewogICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgICAgICBBU1NFUlRfVU5VU0VE
KGNvbnRleHQsIGNvbnRleHQuaXNEb2N1bWVudCgpKTsKICAgICAgICAgQVNTRVJUKHBlZXIpOwpA
QCAtNTA2LDcgKzUxMSw3IEBAIHVuc2lnbmVkIGxvbmcgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWw6OkJyaWRnZTo6YnVmZmVyZWRBbW91bnQoKQogICAgIHNldE1ldGhvZE5vdENvbXBs
ZXRlZCgpOwogCiAgICAgUGVlciogcGVlciA9IG1fcGVlcjsKLSAgICBtX2xvYWRlclByb3h5LnBv
c3RUYXNrVG9Mb2FkZXIoWz1dKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAg
ICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoW3BlZXJdIChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0KSB7CiAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC5pc0RvY3VtZW50KCkpOwogICAgICAg
ICBBU1NFUlQocGVlcik7CkBAIC01MjksNyArNTM0LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpjbG9zZShpbnQgY29kZSwgY29uc3QgU3RyaW5nJiBy
ZWEKIAogICAgIFBlZXIqIHBlZXIgPSBtX3BlZXI7CiAgICAgU3RyaW5nIHJlYXNvbkNvcHkgPSBy
ZWFzb24uaXNvbGF0ZWRDb3B5KCk7Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza1RvTG9hZGVy
KFs9XShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgbV9sb2FkZXJQcm94
eS5wb3N0VGFza1RvTG9hZGVyKFtwZWVyLCBjb2RlLCByZWFzb25Db3B5XSAoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCkgewogICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQuaXNEb2N1bWVudCgpKTsKICAg
ICAgICAgQVNTRVJUKHBlZXIpOwpAQCAtNTQ1LDEyICs1NTAsMTIgQEAgdm9pZCBXb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpmYWlsKGNvbnN0IFN0cmluZyYgcmVhc29u
KQogCiAgICAgUGVlciogcGVlciA9IG1fcGVlcjsKICAgICBTdHJpbmcgcmVhc29uQ29weSA9IHJl
YXNvbi5pc29sYXRlZENvcHkoKTsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIo
Wz1dIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgbV9sb2FkZXJQcm94
eS5wb3N0VGFza1RvTG9hZGVyKFtwZWVyLCByZWFzb25Db3B5XSAoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCkgewogICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgICAg
ICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQuaXNEb2N1bWVudCgpKTsKICAgICAgICAg
QVNTRVJUKHBlZXIpOwogCi0gICAgICAgIHBlZXItPmZhaWwocmVhc29uKTsKKyAgICAgICAgcGVl
ci0+ZmFpbChyZWFzb25Db3B5KTsKICAgICB9KTsKIH0KIApAQCAtNTU5LDcgKzU2NCw3IEBAIHZv
aWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6ZGlzY29ubmVjdCgp
CiAgICAgY2xlYXJDbGllbnRXcmFwcGVyKCk7CiAgICAgaWYgKG1fcGVlcikgewogICAgICAgICBQ
ZWVyKiBwZWVyID0gbV9wZWVyOwotICAgICAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2Fk
ZXIoWz1dKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgbV9sb2Fk
ZXJQcm94eS5wb3N0VGFza1RvTG9hZGVyKFtwZWVyXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCkgewogICAgICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC5pc0RvY3VtZW50KCkpOwogICAgICAg
ICAgICAgZGVsZXRlIHBlZXI7CkBAIC01NzUsNyArNTgwLDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpzdXNwZW5kKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgUGVlciogcGVlciA9IG1fcGVlcjsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9M
b2FkZXIoWz1dKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICBtX2xvYWRl
clByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoW3BlZXJdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0KSB7CiAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgICAgIEFTU0VS
VF9VTlVTRUQoY29udGV4dCwgY29udGV4dC5pc0RvY3VtZW50KCkpOwogICAgICAgICBBU1NFUlQo
cGVlcik7CkBAIC01OTAsNyArNTk1LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDo6QnJpZGdlOjpyZXN1bWUoKQogICAgICAgICByZXR1cm47CiAKICAgICBQZWVyKiBw
ZWVyID0gbV9wZWVyOwotICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihbPV0oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgIG1fbG9hZGVyUHJveHkucG9zdFRh
c2tUb0xvYWRlcihbcGVlcl0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKICAg
ICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChjb250
ZXh0LCBjb250ZXh0LmlzRG9jdW1lbnQoKSk7CiAgICAgICAgIEFTU0VSVChwZWVyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCmluZGV4IDZjZjM5ZWY3MTQ4
YmFhN2NiYjE5NDRhODc1NjI3MTc3MDdiZTI0YzkuLjE5YzAwYzIzMmZkY2NhMTk2ZjAxMTE4NDEw
MDc0MmUzOWYxYzE2NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2FsbGJhY2tEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFj
a0RhdGEuaApAQCAtODAsNyArODAsNyBAQCBwcml2YXRlOgogY2xhc3MgRGVsZXRlQ2FsbGJhY2tE
YXRhVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoK
ICAgICBEZWxldGVDYWxsYmFja0RhdGFUYXNrKEpTQ2FsbGJhY2tEYXRhKiBkYXRhKQotICAgICAg
ICA6IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2soeyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrOjpDbGVhbnVwVGFzaywgWz1dIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgeworICAg
ICAgICA6IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2soeyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpUYXNrOjpDbGVhbnVwVGFzaywgW2RhdGFdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jikg
ewogICAgICAgICAgICAgZGVsZXRlIGRhdGE7CiAgICAgICAgIH0gfSkKICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdFRhc2suY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3RUYXNrLmNwcApp
bmRleCA0M2NkNzdmMWUyYmFmNjA0Zjk3ZTMxN2U0ODQ1Mzg2YTJmOTc4ODliLi4yNDIwNTBiYzUz
YWM5ZDgyNzY1YzdmMzllZjM4YWRjNTQwYTMwZmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdFRhc2suY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0VGFzay5jcHAKQEAgLTgzLDcgKzgzLDcg
QEAgSlNHbG9iYWxPYmplY3RUYXNrOjpKU0dsb2JhbE9iamVjdFRhc2soSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlAKICAgICA6IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2sobnVsbHB0cikKIHsKICAgICBSZWZQdHI8SlNHbG9iYWxPYmplY3RDYWxsYmFjaz4gY2Fs
bGJhY2sgPSBKU0dsb2JhbE9iamVjdENhbGxiYWNrOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCB0YXNr
KTsKLSAgICBtX3Rhc2sgPSBbPV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CisgICAgbV90
YXNrID0gW2NhbGxiYWNrXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKICAgICAgICAgY2Fs
bGJhY2stPmNhbGwoKTsKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgKaW5kZXggM2VkMjcyODBiZDVhOTA3YmRjMzU2YWRlZDZiYTIwMzJiZDY3
MTljZC4uNTBjZTg0YjIyODZjZTUyODQzYzUxN2M0YjQxMmIyNWMzZTQ0NWI3YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCkBAIC0xODUsNyArMTg1LDcg
QEAgcHJvdGVjdGVkOgogICAgIGNsYXNzIEFkZENvbnNvbGVNZXNzYWdlVGFzayA6IHB1YmxpYyBU
YXNrIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEFkZENvbnNvbGVNZXNzYWdlVGFzayhNZXNzYWdl
U291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Ci0gICAgICAgICAgICA6IFRhc2soWz1dIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
KSB7CisgICAgICAgICAgICA6IFRhc2soW3NvdXJjZSwgbGV2ZWwsIG1lc3NhZ2VdIChTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgY29udGV4dC5hZGRD
b25zb2xlTWVzc2FnZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlKTsKICAgICAgICAgICAgIH0pCiAg
ICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHJpbmdDYWxsYmFjay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3RyaW5nQ2FsbGJhY2suY3BwCmluZGV4IGU2ZTZhYWRk
NmFhY2ZkZDJmMDVkMzJlMDI3MWQ4ZWY0NTA0ZTk5NGQuLmIzZjk0Y2VhZDcxZjRhNzcyYWJmY2Qy
NjBmZTU2YjQwMDdiZjFhZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHJpbmdD
YWxsYmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0cmluZ0NhbGxiYWNrLmNwcApA
QCAtMzksOCArMzksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB2b2lkIFN0cmluZ0NhbGxiYWNr
OjpzY2hlZHVsZUNhbGxiYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFN0cmluZyYgZGF0YSkKIHsKICAgICBSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IHByb3RlY3Rvcih0
aGlzKTsKLSAgICBjb250ZXh0LT5wb3N0VGFzayhbPV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
KSB7Ci0gICAgICAgIHRoaXMtPmhhbmRsZUV2ZW50KGRhdGEpOworICAgIGNvbnRleHQtPnBvc3RU
YXNrKFtwcm90ZWN0b3IsIGRhdGFdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgeworICAgICAg
ICBwcm90ZWN0b3ItPmhhbmRsZUV2ZW50KGRhdGEpOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAppbmRleCBjMDZjNmFiNmMyNmI5MjNjZDI0ZjQ1OWE1MjE4
OGIzZGRhMzU1ZTNhLi4wNmYzMDViODE5NGUzZDYxYWFjYzk0ZWNiMGRkY2UzMjVlYjI2M2RhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKQEAgLTE1Miw3ICsxNTIsNyBAQCB2
b2lkIEZpbGVSZWFkZXI6OmFib3J0KCkKICAgICBtX2Fib3J0aW5nID0gdHJ1ZTsKIAogICAgIC8v
IFNjaGVkdWxlIHRvIGhhdmUgdGhlIGFib3J0IGRvbmUgbGF0ZXIgc2luY2UgYWJvcnQoKSBtaWdo
dCBiZSBjYWxsZWQgZnJvbSB0aGUgZXZlbnQgaGFuZGxlciBhbmQgd2UgZG8gbm90IHdhbnQgdGhl
IHJlc291cmNlIGxvYWRpbmcgY29kZSB0byBiZSBpbiB0aGUgc3RhY2suCi0gICAgc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhbPV0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsK
KyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKFt0aGlzXSAoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYpIHsKICAgICAgICAgQVNTRVJUKG1fc3RhdGUgIT0gRE9ORSk7CiAKICAg
ICAgICAgdGVybWluYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCmluZGV4IGM2YTIzZjIzMThlZDUwMTMy
NGExZTNiZWQ2NDVhZGUxNmZlOTMwNzAuLjYzNDIxOTRjZTc4ZjEwNWZlMzNhYWZlNDljMWE2NTRk
YjU1MDY2NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBs
aWNhdGlvbkNhY2hlR3JvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCkBAIC0xMTE3LDcgKzExMTcsNyBAQCB2b2lkIEFw
cGxpY2F0aW9uQ2FjaGVHcm91cDo6cG9zdExpc3RlbmVyVGFzayhBcHBsaWNhdGlvbkNhY2hlSG9z
dDo6RXZlbnRJRCBldmVudAogICAgIEFTU0VSVChmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2Fk
ZXIoKSA9PSBsb2FkZXIpOwogCiAgICAgUmVmUHRyPERvY3VtZW50TG9hZGVyPiBsb2FkZXJQcm90
ZWN0b3IobG9hZGVyKTsKLSAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cG9zdFRhc2soWz1dIChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgZnJhbWUtPmRvY3VtZW50KCktPnBv
c3RUYXNrKFtsb2FkZXJQcm90ZWN0b3IsIGV2ZW50SUQsIHByb2dyZXNzVG90YWwsIHByb2dyZXNz
RG9uZV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKICAgICAgICAgQVNTRVJU
X1VOVVNFRChjb250ZXh0LCBjb250ZXh0LmlzRG9jdW1lbnQoKSk7CiAgICAgICAgIEZyYW1lKiBm
cmFtZSA9IGxvYWRlclByb3RlY3Rvci0+ZnJhbWUoKTsKICAgICAgICAgaWYgKCFmcmFtZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9z
aXRvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVw
b3NpdG9yeS5jcHAKaW5kZXggMDQ2NDgyNzUwMWYzOTU1M2Y1Y2EzYjczZDJhZjhhMTg1N2YxOTJm
MC4uOTM3NTY4NGU5OThkMmVhYmVmNDhhMDExNTVlN2I1NGMyZjI1YzU5NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9y
eS5jcHAKQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIFNoYXJlZFdvcmtlclByb3h5Ojpwb3N0RXhj
ZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsCiAgICAgU3Ry
aW5nIHNvdXJjZVVSTENvcHkgPSBzb3VyY2VVUkwuaXNvbGF0ZWRDb3B5KCk7CiAKICAgICBmb3Ig
KGF1dG8mIGRvY3VtZW50IDogbV93b3JrZXJEb2N1bWVudHMpCi0gICAgICAgIGRvY3VtZW50LT5w
b3N0VGFzayhbPV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAg
ZG9jdW1lbnQtPnBvc3RUYXNrKFtlcnJvck1lc3NhZ2VDb3B5LCBsaW5lTnVtYmVyLCBjb2x1bW5O
dW1iZXIsIHNvdXJjZVVSTENvcHldIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7
CiAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydEV4Y2VwdGlvbihlcnJvck1lc3NhZ2VDb3B5LCBs
aW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHNvdXJjZVVSTENvcHksIG51bGxwdHIpOwogICAgICAg
ICB9KTsKIH0KQEAgLTE5Nyw3ICsxOTcsNyBAQCB2b2lkIFNoYXJlZFdvcmtlclByb3h5Ojpwb3N0
Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChNZXNzYWdlU291cmNlIHNvdXJjZSwgTQogICAg
IFN0cmluZyBzb3VyY2VVUkxDb3B5ID0gc291cmNlVVJMLmlzb2xhdGVkQ29weSgpOwogCiAgICAg
Zm9yIChhdXRvJiBkb2N1bWVudCA6IG1fd29ya2VyRG9jdW1lbnRzKQotICAgICAgICBkb2N1bWVu
dC0+cG9zdFRhc2soWz1dIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAg
ICAgIGRvY3VtZW50LT5wb3N0VGFzayhbc291cmNlLCBsZXZlbCwgbWVzc2FnZUNvcHksIHNvdXJj
ZVVSTENvcHksIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcl0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQpIHsKICAgICAgICAgICAgIGNvbnRleHQuYWRkQ29uc29sZU1lc3NhZ2Uoc291
cmNlLCBsZXZlbCwgbWVzc2FnZUNvcHksIHNvdXJjZVVSTENvcHksIGxpbmVOdW1iZXIsIGNvbHVt
bk51bWJlcik7CiAgICAgICAgIH0pOwogfQpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgU2hhcmVk
V29ya2VyUHJveHk6OmNsb3NlKCkKIGNsYXNzIFNoYXJlZFdvcmtlckNvbm5lY3RUYXNrIDogcHVi
bGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGljOgogICAgIFNoYXJlZFdv
cmtlckNvbm5lY3RUYXNrKE1lc3NhZ2VQb3J0Q2hhbm5lbCogY2hhbm5lbCkKLSAgICAgICAgOiBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrKFs9XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCkgeworICAgICAgICA6IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2soW2NoYW5u
ZWxdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CiAgICAgICAgICAgICBSZWZQ
dHI8TWVzc2FnZVBvcnQ+IHBvcnQgPSBNZXNzYWdlUG9ydDo6Y3JlYXRlKGNvbnRleHQpOwogICAg
ICAgICAgICAgcG9ydC0+ZW50YW5nbGUoc3RkOjp1bmlxdWVfcHRyPE1lc3NhZ2VQb3J0Q2hhbm5l
bD4oY2hhbm5lbCkpOwogICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oaXM8V29ya2VyR2xvYmFsU2NvcGU+KGNvbnRleHQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwCmluZGV4IGRlODk1ZjU0Nzk2YzJiN2FmMDNjODEyYTY5
OGNmODhjZTAzNDMyOWQuLmY1MjBjMWRlZWZhYjFlYjE0ZjFiN2ZkOTI0MGZlODY0N2FjMjRhODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcApAQCAtOTAs
NyArOTAsNyBAQCBib29sIFdvcmtlckV2ZW50UXVldWU6OmVucXVldWVFdmVudChQYXNzUmVmUHRy
PEV2ZW50PiBldmVudCkKIAogICAgIEV2ZW50RGlzcGF0Y2hlciogZXZlbnREaXNwYXRjaGVyUHRy
ID0gbmV3IEV2ZW50RGlzcGF0Y2hlcihldmVudC5nZXQoKSwgKnRoaXMpOwogICAgIG1fZXZlbnRE
aXNwYXRjaGVyTWFwLmFkZChldmVudCwgZXZlbnREaXNwYXRjaGVyUHRyKTsKLSAgICBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQucG9zdFRhc2soWz1dIChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jikg
eworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5wb3N0VGFzayhbZXZlbnREaXNwYXRjaGVy
UHRyXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PEV2ZW50RGlzcGF0Y2hlcj4gZXZlbnREaXNwYXRjaGVyKGV2ZW50RGlzcGF0Y2hlclB0cik7CiAg
ICAgICAgIGV2ZW50RGlzcGF0Y2hlci0+ZGlzcGF0Y2goKTsKICAgICB9KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwIGIvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKaW5kZXggMmE1MDE4ODk0
OGU4MWU5ODM3MTQxY2MxNDdkMWZlYTcwYjY4YWQ1OS4uMmQ1MTAyOTc3NzUzNDA1OGNkMDYyZjU1
MTYyYzhlNzU1Y2M2OTUyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJNZXNzYWdpbmdQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJN
ZXNzYWdpbmdQcm94eS5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBXb3JrZXJNZXNzYWdpbmdQ
cm94eTo6c3RhcnRXb3JrZXJHbG9iYWxTY29wZShjb25zdCBVUkwmIHNjcmlwdFVSTCwgY29uc3Qg
U3QKIHZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3Qo
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UsIHN0ZDo6dW5pcXVlX3B0
cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCiB7CiAgICAgTWVzc2FnZVBvcnRD
aGFubmVsQXJyYXkqIGNoYW5uZWxzUHRyID0gY2hhbm5lbHMucmVsZWFzZSgpOwotICAgIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soWz1dIChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0KSB7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhbdGhp
cywgY2hhbm5lbHNQdHIsIG1lc3NhZ2VdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
KSB7CiAgICAgICAgIFdvcmtlciogd29ya2VyT2JqZWN0ID0gdGhpcy0+d29ya2VyT2JqZWN0KCk7
CiAgICAgICAgIGlmICghd29ya2VyT2JqZWN0IHx8IGFza2VkVG9UZXJtaW5hdGUoKSkKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIFdvcmtlck1lc3NhZ2luZ1By
b3h5Ojpwb3N0TWVzc2FnZVRvV29ya2VyR2xvYmFsU2NvcGUoUGFzc1JlZlB0cjxTZXJpYWxpemVk
UwogICAgICAgICByZXR1cm47CiAKICAgICBNZXNzYWdlUG9ydENoYW5uZWxBcnJheSogY2hhbm5l
bHNQdHIgPSBjaGFubmVscy5yZWxlYXNlKCk7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzayB0YXNrKFs9XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0Q29udGV4dCkgewor
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgdGFzayhbY2hhbm5lbHNQdHIsIG1lc3Nh
Z2VdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRDb250ZXh0KSB7CiAgICAgICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHNjcmlwdENvbnRleHQuaXNXb3JrZXJHbG9i
YWxTY29wZSgpKTsKICAgICAgICAgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUmIGNvbnRleHQg
PSBzdGF0aWNfY2FzdDxEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSY+KHNjcmlwdENvbnRleHQp
OwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMgPSBNZXNz
YWdlUG9ydDo6ZW50YW5nbGVQb3J0cyhzY3JpcHRDb250ZXh0LCBzdGQ6OnVuaXF1ZV9wdHI8TWVz
c2FnZVBvcnRDaGFubmVsQXJyYXk+KGNoYW5uZWxzUHRyKSk7CkBAIC0xNDgsNyArMTQ4LDcgQEAg
dm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWcKIHsKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlQ29weSA9
IGVycm9yTWVzc2FnZS5pc29sYXRlZENvcHkoKTsKICAgICBTdHJpbmcgc291cmNlVVJMQ29weSA9
IHNvdXJjZVVSTC5pc29sYXRlZENvcHkoKTsKLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PnBvc3RUYXNrKFs9XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgIG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soW3RoaXMsIGVycm9yTWVzc2FnZUNvcHks
IHNvdXJjZVVSTENvcHksIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcl0gKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQpIHsKICAgICAgICAgV29ya2VyKiB3b3JrZXJPYmplY3QgPSB0aGlz
LT53b3JrZXJPYmplY3QoKTsKICAgICAgICAgaWYgKCF3b3JrZXJPYmplY3QpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6
cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoTWVzc2FnZVNvdXJjZSBzb3VyY2UKIHsK
ICAgICBTdHJpbmcgbWVzc2FnZUNvcHkgPSBtZXNzYWdlLmlzb2xhdGVkQ29weSgpOwogICAgIFN0
cmluZyBzb3VyY2VVUkxDb3B5ID0gc291cmNlVVJMLmlzb2xhdGVkQ29weSgpOwotICAgIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soWz1dIChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0KSB7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhbdGhp
cywgc291cmNlLCBsZXZlbCwgbWVzc2FnZUNvcHksIHNvdXJjZVVSTENvcHksIGxpbmVOdW1iZXIs
IGNvbHVtbk51bWJlcl0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKICAgICAg
ICAgaWYgKGFza2VkVG9UZXJtaW5hdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Y29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlQ29weSwgc291
cmNlVVJMQ29weSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKQEAgLTIxMSw3ICsyMTEsNyBA
QCB2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpub3RpZnlOZXR3b3JrU3RhdGVDaGFuZ2UoYm9v
bCBpc09ubGluZSkKICAgICBpZiAoIW1fd29ya2VyVGhyZWFkKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrKFs9XSAoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgIG1fd29ya2VyVGhyZWFkLT5ydW5Mb29wKCkucG9z
dFRhc2soW2lzT25saW5lXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgewogICAg
ICAgICBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oY29udGV4dCkuZGlzcGF0Y2hFdmVudChF
dmVudDo6Y3JlYXRlKGlzT25saW5lID8gZXZlbnROYW1lcygpLm9ubGluZUV2ZW50IDogZXZlbnRO
YW1lcygpLm9mZmxpbmVFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiAgICAgfSk7CiB9CkBAIC0yOTUs
NyArMjk1LDcgQEAgdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6dGVybWluYXRlV29ya2VyR2xv
YmFsU2NvcGUoKQogdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VUb1BhZ2VJ
bnNwZWN0b3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIFN0cmluZyBtZXNzYWdlQ29w
eSA9IG1lc3NhZ2UuaXNvbGF0ZWRDb3B5KCk7Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5wb3N0VGFzayhbPV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CisgICAgbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhbdGhpcywgbWVzc2FnZUNvcHldIChTY3JpcHRFeGVj
dXRpb25Db250ZXh0JikgewogICAgICAgICBtX3BhZ2VJbnNwZWN0b3ItPmRpc3BhdGNoTWVzc2Fn
ZUZyb21Xb3JrZXIobWVzc2FnZUNvcHkpOwogICAgIH0pOwogfQpAQCAtMzAzLDcgKzMwMyw3IEBA
IHZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKIAogdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6Y29uZmly
bU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQogewotICAg
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soWz1dIChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JikgeworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soW3RoaXMs
IGhhc1BlbmRpbmdBY3Rpdml0eV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CiAgICAgICAg
IHJlcG9ydFBlbmRpbmdBY3Rpdml0eUludGVybmFsKHRydWUsIGhhc1BlbmRpbmdBY3Rpdml0eSk7
CiAgICAgfSk7CiAgICAgLy8gV2lsbCBleGVjdXRlIHJlcG9ydFBlbmRpbmdBY3Rpdml0eUludGVy
bmFsKCkgb24gY29udGV4dCdzIHRocmVhZC4KQEAgLTMxMSw3ICszMTEsNyBAQCB2b2lkIFdvcmtl
ck1lc3NhZ2luZ1Byb3h5Ojpjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoYm9vbCBoYXNQ
ZW5kaW5nQWN0aXZpdAogCiB2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5OjpyZXBvcnRQZW5kaW5n
QWN0aXZpdHkoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCiB7Ci0gICAgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5wb3N0VGFzayhbPV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSB7CisgICAg
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhbdGhpcywgaGFzUGVuZGluZ0FjdGl2
aXR5XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIHsKICAgICAgICAgcmVwb3J0UGVuZGluZ0Fj
dGl2aXR5SW50ZXJuYWwoZmFsc2UsIGhhc1BlbmRpbmdBY3Rpdml0eSk7CiAgICAgfSk7CiAgICAg
Ly8gV2lsbCBleGVjdXRlIHJlcG9ydFBlbmRpbmdBY3Rpdml0eUludGVybmFsKCkgb24gY29udGV4
dCdzIHRocmVhZC4K
</data>

          </attachment>
      

    </bug>

</bugzilla>