<?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>150627</bug_id>
          
          <creation_ts>2015-10-28 09:20:55 -0700</creation_ts>
          <short_desc>[Streams API] Rework promises to use @newPromiseCapability</short_desc>
          <delta_ts>2015-11-03 06:53:01 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150835</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Xabier Rodríguez Calvar">calvaris</reporter>
          <assigned_to name="Xabier Rodríguez Calvar">calvaris</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>youennf</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1137137</commentid>
    <comment_count>0</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-10-28 09:20:55 -0700</bug_when>
    <thetext>[Streams API] Rework promises to use @newPromiseCapabilites and as much InternalPromise as possible</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137142</commentid>
    <comment_count>1</comment_count>
      <attachid>264216</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-10-28 09:34:46 -0700</bug_when>
    <thetext>Created attachment 264216
Patch

We can&apos;t use InternalPromise everywhere because if we or the user mix them with any other promises, they should have the Promise constructor, otherwise the chain of promise resolution can be broken and bad things can happen (as my tests showed). InternalPromise can be used only when we are not going to leave the outside world see them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137467</commentid>
    <comment_count>2</comment_count>
      <attachid>264216</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-10-28 23:11:56 -0700</bug_when>
    <thetext>Comment on attachment 264216
Patch

The streams API implementation looks great with the proposed changes!

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        the outside world or mix with it, meaning that can&apos;t resolv them against something coming from the used because

s/resolv/resolve
s/used/user

As an unrelated note, we probably never want any @InternalPromise to reach web page JavaScript code.
I wonder whether we want or can assert that in some ways, like in debug mode.

&gt; Source/JavaScriptCore/builtins/Operations.Promise.js:85
&gt; +    // FIXME: Check isConstructor(constructor).

Do we need constructor parameter?
Is there a use case for newResolvedPromiseCapability(@InternalPromise);?

If we keep newResolvedPromiseCapability like it is, can we share more code between newResolvedPromiseCapability, newRejectedPromiseCapability and newPromiseCapability?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137478</commentid>
    <comment_count>3</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-10-29 01:31:49 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        the outside world or mix with it, meaning that can&apos;t resolv them against something coming from the used because
&gt; 
&gt; s/resolv/resolve
&gt; s/used/user

Yep, good catch. Can I fix this during landing?

&gt; As an unrelated note, we probably never want any @InternalPromise to reach
&gt; web page JavaScript code.
&gt; I wonder whether we want or can assert that in some ways, like in debug mode.

Fixing the generators, probably, to ensure the constructor is always Promise.

&gt; &gt; Source/JavaScriptCore/builtins/Operations.Promise.js:85
&gt; &gt; +    // FIXME: Check isConstructor(constructor).
&gt; 
&gt; Do we need constructor parameter?
&gt; Is there a use case for newResolvedPromiseCapability(@InternalPromise);?
&gt; 
&gt; If we keep newResolvedPromiseCapability like it is, can we share more code
&gt; between newResolvedPromiseCapability, newRejectedPromiseCapability and
&gt; newPromiseCapability?

The idea of adding the constructor was to make newResolvedPromiseCapability and newRejectedPromiseCapability fully compatible with newPromiseCapability and the latter uses the constructor to be able to build Promise and @InternalPromise. So yes, the more shared code, the better, IMHO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137480</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-10-29 01:57:37 -0700</bug_when>
    <thetext>Reading a bit more, I think @newResolvedPromise might not fix everything.
Maybe we should add a test checking that even if a web page tries to observe promise built-ins handling by modifying Promise, it is not happening.
Or patch could be split in two maybe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137486</commentid>
    <comment_count>5</comment_count>
      <attachid>264216</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-10-29 02:58:54 -0700</bug_when>
    <thetext>Comment on attachment 264216
Patch

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

&gt; Source/WebCore/Modules/streams/WritableStream.js:147
&gt; +    return promise.@promise;

Does it accidentally expose @InternalPromise?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137487</commentid>
    <comment_count>6</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-10-29 03:09:30 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; Source/WebCore/Modules/streams/WritableStream.js:147
&gt; &gt; +    return promise.@promise;
&gt; 
&gt; Does it accidentally expose @InternalPromise?

It does, very good catch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137494</commentid>
    <comment_count>7</comment_count>
      <attachid>264216</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-10-29 04:05:40 -0700</bug_when>
    <thetext>Comment on attachment 264216
Patch

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

:) And added notes about InternalPromise.

&gt;&gt; Source/WebCore/ChangeLog:12
&gt;&gt; +        the outside world or mix with it, meaning that can&apos;t resolv them against something coming from the used because
&gt; 
&gt; s/resolv/resolve
&gt; s/used/user
&gt; 
&gt; As an unrelated note, we probably never want any @InternalPromise to reach web page JavaScript code.
&gt; I wonder whether we want or can assert that in some ways, like in debug mode.

Right. @InternalPromise should not be exposed to users.
See the comment in JSInternalPromise.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137604</commentid>
    <comment_count>8</comment_count>
      <attachid>264331</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-10-29 12:13:08 -0700</bug_when>
    <thetext>Created attachment 264331
Patch

Fixed the leak of @InternalPromise in write. Used @Promise to shield the code against the user changing the Promise constructor or its prototype. I kept the constructor parameter to the functions to create the vended capabilities for coherence. I think cabling @Promise or Promise there is a bad idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137703</commentid>
    <comment_count>9</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-10-29 16:17:04 -0700</bug_when>
    <thetext>A test would be good to ensure this is doing the right thing.
For instance, are we sure @Promise cannot be accessed from returned promise objects?

I am not sure we should add the new promise resolved/rejected routines. They can probably be replaced by 1-liner code directly in streams api code. That way, no need to touch JSGlobalObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137865</commentid>
    <comment_count>10</comment_count>
      <attachid>264396</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-10-30 07:52:33 -0700</bug_when>
    <thetext>Created attachment 264396
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137866</commentid>
    <comment_count>11</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-10-30 08:07:45 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; A test would be good to ensure this is doing the right thing.
&gt; For instance, are we sure @Promise cannot be accessed from returned promise
&gt; objects?

After doing more thorough checks, I was able to access and modify thru getting the constructor from the promise both by adding either @Promise or Promise and disrupting the behavior.

It is not possible either to use anything like @Promise.@resolve because those functions are not declared as such internal slots so they can&apos;t be used.

I don&apos;t see any solution so shield the code from interferences from outside.

Besides this, the spec speaks about creating promises according to the promise spec. I understand that it might be interesting to shield the Streams code from users changing their behavior, but considering that it is JS and objects have prototypes and you can change those from JS, I see also reasons to keep it like this and if the user changes the prototype enough to disrupt the promises behavior, then they can get trouble and should accept it.

&gt; I am not sure we should add the new promise resolved/rejected routines. They
&gt; can probably be replaced by 1-liner code directly in streams api code. That
&gt; way, no need to touch JSGlobalObject.

I did a oneliner implementation it in this case. The issue is that we are keeping promise capabilities instead of promises so we have to create them like that and that implies creating an object with the @promise and the empty @resolve and @reject functions. In this case, we can replace those with oneliners, but I don&apos;t think it pays off because it is more error prone (forgetting to set the @reject or @resolve) and you avoid all checks, which are ok, IMHO. That oneliner is more complicated, perform less checks and is more error prone, so I think we should keep the functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137922</commentid>
    <comment_count>12</comment_count>
      <attachid>264396</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-10-30 12:24:42 -0700</bug_when>
    <thetext>Comment on attachment 264396
Patch

LGTM.

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

&gt; Source/WebCore/ChangeLog:14
&gt; +        user, because of the same reason.

Remove this sentence may make sense since the latest patch does not add/remove any @InternalPromise use.
Renaming the bug title to &quot;[Streams API] Rework promises to use @newPromiseCapability&quot; might be nice as well?

&gt; Source/WebCore/Modules/streams/ReadableStreamInternals.js:51
&gt; +        this.@closedPromise = { @promise: Promise.resolve(undefined), @resolve: function() {}, @reject: function() {} };

We should not need @resolve nor @reject fields.
Can you try removing them and see whether that works as is?
If that requires additional changes, let&apos;s do that as a follow-up patch.

&gt; Source/WebCore/Modules/streams/ReadableStreamInternals.js:57
&gt; +    this.@closedPromise = { @promise: Promise.reject(stream.@storedError), @resolve: function() {}, @reject: function() {} };

Ditto.

&gt; Source/WebCore/Modules/streams/WritableStream.js:46
&gt; +    this.@readyPromise = { @promise: Promise.resolve(undefined), @resolve: function() {}, @reject: function() {} };

Ditto.

&gt; Source/WebCore/Modules/streams/WritableStream.js:58
&gt; +    this.@startedPromise = { @promise: Promise.resolve(startResult), @resolve: function() {}, @reject: function() {} };

Ditto.

Also, in that case, we do not need to use a @promise wrapper.
I guess this is done for consistency with other fields.
If code related to startedPromise remains the same or is kept at the same place, removing the wrapper makes sense to me.

Also, the current @XXPromise names are a bit error prone since they no longer store promises directly.
We could use @XXPromiseCapability but this is a bit long.
Any idea?

&gt; Source/WebCore/Modules/streams/WritableStream.js:137
&gt; +    const promise = @newPromiseCapability(Promise);

This is an example of the above issue.

&gt; Source/WebCore/Modules/streams/WritableStream.js:148
&gt; +    return promise.@promise;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137929</commentid>
    <comment_count>13</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-10-30 12:36:00 -0700</bug_when>
    <thetext>As of improving the implementation shield, I did not dig into the issue yet.
Here are some thoughts that might be useful (or not!).

One step is to retrieve the Promise constructor object safely.
Using directly &quot;Promise&quot; is probably not safe.
&quot;@Promise&quot; seems to refer to a different Promise constructor (not sure of its purpose).
Maybe we can change it so as to get the regular Promise constructor safely?

Based on it, we can implement resolve and reject using code like:
var promiseCapability = @newPromiseCapability(@Promise);
promiseCapability.@resolve.@call(undefined, value);
return promiseCapability.@promise;

We may want to add @resolve and @reject slots to the Promise constructor, in which case we would write:
@Promise.@resolve.@call(undefined, value);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138213</commentid>
    <comment_count>14</comment_count>
      <attachid>264396</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-31 15:07:41 -0700</bug_when>
    <thetext>Comment on attachment 264396
Patch

I’m saying review- because I assume you’ll want to address the comments from Youenn and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138881</commentid>
    <comment_count>15</comment_count>
      <attachid>264676</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-11-03 01:51:06 -0800</bug_when>
    <thetext>Created attachment 264676
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138882</commentid>
    <comment_count>16</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-11-03 01:58:21 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; Source/WebCore/ChangeLog:14
&gt; &gt; +        user, because of the same reason.
&gt; 
&gt; Remove this sentence may make sense since the latest patch does not
&gt; add/remove any @InternalPromise use.
&gt; Renaming the bug title to &quot;[Streams API] Rework promises to use
&gt; @newPromiseCapability&quot; might be nice as well?

Done.

&gt; &gt; Source/WebCore/Modules/streams/ReadableStreamInternals.js:51
&gt; &gt; +        this.@closedPromise = { @promise: Promise.resolve(undefined), @resolve: function() {}, @reject: function() {} };
&gt; 
&gt; We should not need @resolve nor @reject fields.
&gt; Can you try removing them and see whether that works as is?
&gt; If that requires additional changes, let&apos;s do that as a follow-up patch.

Those fields can&apos;t be removed because the way the spec is (and the code) relies on vending promises that had been already vended before (or created as vended) so in some cases (both in RS and WS) we hit undefined methods because either @reject or @resolve are missing.

&gt; &gt; Source/WebCore/Modules/streams/WritableStream.js:58
&gt; &gt; +    this.@startedPromise = { @promise: Promise.resolve(startResult), @resolve: function() {}, @reject: function() {} };
&gt; 
&gt; Also, in that case, we do not need to use a @promise wrapper.
&gt; I guess this is done for consistency with other fields.
&gt; If code related to startedPromise remains the same or is kept at the same
&gt; place, removing the wrapper makes sense to me.

This is right, startedPromise does not need the wrapper, though my consistency taste says it was better with it.

&gt; Also, the current @XXPromise names are a bit error prone since they no
&gt; longer store promises directly.
&gt; We could use @XXPromiseCapability but this is a bit long.
&gt; Any idea?

I was more into keeping the Promise name even if it was a capability to keep the original spec names. Anyway I renamed them to *PromiseCapability. I don&apos;t see any problem in name length.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138886</commentid>
    <comment_count>17</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-11-03 02:20:37 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; One step is to retrieve the Promise constructor object safely.
&gt; Using directly &quot;Promise&quot; is probably not safe.
&gt; &quot;@Promise&quot; seems to refer to a different Promise constructor (not sure of
&gt; its purpose).
&gt; Maybe we can change it so as to get the regular Promise constructor safely?

No, we can&apos;t I already tried with @Promise and I manage to modify it from JS, which affects the whole promise behavior. Actually, I suspect that using @Promise can be even worse than using Promise as, I am not sure and I&apos;d love that somebody with deeper JSC knowledge could correct me, but with Promise might refer only to the JS object and @Promise to the WebKit object that will instantiate Promise.

&gt; Based on it, we can implement resolve and reject using code like:
&gt; var promiseCapability = @newPromiseCapability(@Promise);
&gt; promiseCapability.@resolve.@call(undefined, value);
&gt; return promiseCapability.@promise;

If you intention is shielding from a user modifying Promise.prototype.reject and resolve then yes, otherwise I see no point.

I don&apos;t know if this implementation could have any impact in the way callbacks are called or the promise resolution chain.

&gt; We may want to add @resolve and @reject slots to the Promise constructor, in
&gt; which case we would write:
&gt; @Promise.@resolve.@call(undefined, value);

We could do something like that, yes, though I would be more included to solve it inside the capability than adding the slots if possible.

About all this, I still don&apos;t see the need or shielding all this if the spec says that we have to create promises and promises are subject to be changed by the user through the prototype.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138898</commentid>
    <comment_count>18</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-11-03 03:16:07 -0800</bug_when>
    <thetext>r=me

&gt; &gt; &gt; Source/WebCore/Modules/streams/ReadableStreamInternals.js:51
&gt; &gt; &gt; +        this.@closedPromise = { @promise: Promise.resolve(undefined), @resolve: function() {}, @reject: function() {} };
&gt; &gt; 
&gt; &gt; We should not need @resolve nor @reject fields.
&gt; &gt; Can you try removing them and see whether that works as is?
&gt; &gt; If that requires additional changes, let&apos;s do that as a follow-up patch.
&gt; 
&gt; Those fields can&apos;t be removed because the way the spec is (and the code)
&gt; relies on vending promises that had been already vended before (or created
&gt; as vended) so in some cases (both in RS and WS) we hit undefined methods
&gt; because either @reject or @resolve are missing.

Filed bug 150835 to follow on that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138922</commentid>
    <comment_count>19</comment_count>
      <attachid>264676</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-03 06:52:57 -0800</bug_when>
    <thetext>Comment on attachment 264676
Patch

Clearing flags on attachment: 264676

Committed r191950: &lt;http://trac.webkit.org/changeset/191950&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138923</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-03 06:53:01 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264216</attachid>
            <date>2015-10-28 09:34:46 -0700</date>
            <delta_ts>2015-10-29 12:12:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150627-20151028173355.patch</filename>
            <type>text/plain</type>
            <size>23364</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxNjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
NDY0OTE4YTFlZmI5YjMwOTdjYjZmMWE1ZjJiMDlhYzJlNjlhZDU0Li40MWZhOTA2ZDI2NjMyMWFh
ZjNlNTE2ZTQwNjA4OWNjNjhjNGQ5ZmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxNS0xMC0yOCAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJp
c0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtTdHJlYW1zIEFQSV0gUmV3b3JrIHByb21pc2VzIHRv
IHVzZSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkgYW5kIGFzIG11Y2ggQEludGVybmFsUHJvbWlzZSBh
cyBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUwNjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkZWQgdHdvIGZ1bmN0aW9ucyB0byBjcmVhdGUgcHJvbWlzZSBjYXBhYmlsaXRpZXMgdGhh
dCBhcmUgYWxyZWFkeSB2ZW5kZWQuCisKKyAgICAgICAgKiBidWlsdGlucy9PcGVyYXRpb25zLlBy
b21pc2UuanM6CisgICAgICAgIChuZXdSZXNvbHZlZFByb21pc2VDYXBhYmlsaXR5KTogQ3JlYXRl
cyBhIHByb21pc2UgY2FwYWJpbGl0eSB3aXRoIGEgcHJvbWlzZSByZXNvbHZlZCBmcm9tIGNyZWF0
aW9uLiByZXNvbHZlIGFuZAorICAgICAgICByZWplY3Qgc2xvdHMgYXJlIHBob255LgorICAgICAg
ICAobmV3UmVqZWN0ZWRQcm9taXNlQ2FwYWJpbGl0eSk6IENyZWF0ZXMgYSBwcm9taXNlIGNhcGFi
aWxpdHkgd2l0aCBhIHByb21pc2UgcmVqZWN0IGZyb20gY3JlYXRpb24uIHJlc29sdmUgYW5kCisg
ICAgICAgIHJlamVjdCBzbG90cyBhcmUgcGhvbnkuCisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOiBCdWlsZCBp
bmZyYXN0cnVjdHVyZSBmb3IgdGhlIGZ1bmN0aW9ucyBhZGRlZCB0byBPcGVyYXRpb25zLlByb21p
c2UuanMuCisKIDIwMTUtMTAtMjcgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBSZW1vdmUgVGltZWxpbmUgTWFya0RPTUNvbnRl
bnQgYW5kIE1hcmtMb2FkLCBkYXRhIGlzIGFscmVhZHkgYXZhaWxhYmxlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmYwNjZkYzQxZGVkMDZmZGQ5ZGNiNDRlZjEyM2MxMjA3YjYzOTJlZS4uZDIxMDAyNWI2MzIwMGQz
YWFiNzYzMjBkMDg1NTZmY2NhOTQzMzNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ3IEBACiAy
MDE1LTEwLTI4ICBYYWJpZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+
CiAKKyAgICAgICAgW1N0cmVhbXMgQVBJXSBSZXdvcmsgcHJvbWlzZXMgdG8gdXNlIEBuZXdQcm9t
aXNlQ2FwYWJpbGl0eSBhbmQgYXMgbXVjaCBASW50ZXJuYWxQcm9taXNlIGFzIHBvc3NpYmxlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA2MjcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBhcmUgcmVt
b3ZpbmcgdGhlIHN0cmVhbSBwcm9taXNlcyBmdW5jdGlvbnMgaW4gZmF2b3Igb2YgQG5ld1Byb21p
c2VDYXBhYml0eSB3aGljaCBiYXNpY2FsbHkgcHJvdmlkZXMgdGhlIHNhbWUKKyAgICAgICAgZnVu
Y3Rpb25hbGl0eSAoa2VlcGluZyB0aGUgcmVzb2x2ZSBhbmQgcmVqZWN0IGZ1bmN0aW9ucyB3aXRo
b3V0IGV4dGVybmFsIHNsb3RzKS4KKworICAgICAgICBXZSBhbHNvIHdhbnRlZCB0byB1c2UgSW50
ZXJuYWxQcm9taXNlIGFzIG11Y2ggYXMgcG9zc2libGUuIFRoZSBsaW1pdCBpcyBwcm9taXNlcyB0
aGF0IHdlIGFyZSBnb2luZyB0byBzaG93IHRvCisgICAgICAgIHRoZSBvdXRzaWRlIHdvcmxkIG9y
IG1peCB3aXRoIGl0LCBtZWFuaW5nIHRoYXQgY2FuJ3QgcmVzb2x2IHRoZW0gYWdhaW5zdCBzb21l
dGhpbmcgY29taW5nIGZyb20gdGhlIHVzZWQgYmVjYXVzZQorICAgICAgICBpdCBjb3VsZCBiZSBh
IHByb21pc2UgYW5kIHdlIHdvdWxkIGJyZWFrIHRoZSBwcm9taXNlIHJlc29sdXRpb24gY2hhaW4g
b3IgaWYgd2UgYXJlIGdvaW5nIHRvIHNob3cgdGhlbSB0byB0aGUKKyAgICAgICAgdXNlciwgYmVj
YXVzZSBvZiB0aGUgc2FtZSByZWFzb24uCisKKyAgICAgICAgSW50ZXJuYWwgcmV3b3JrLCBubyBu
ZXcgdGVzdHMgbmVlZGVkLgorCisgICAgICAgICogTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3Ry
ZWFtSW50ZXJuYWxzLmpzOgorICAgICAgICAocHJpdmF0ZUluaXRpYWxpemVSZWFkYWJsZVN0cmVh
bVJlYWRlcik6CisgICAgICAgICh0ZWVSZWFkYWJsZVN0cmVhbSk6CisgICAgICAgICh0ZWVSZWFk
YWJsZVN0cmVhbUJyYW5jaDJDYW5jZWxGdW5jdGlvbik6CisgICAgICAgIChlcnJvclJlYWRhYmxl
U3RyZWFtKToKKyAgICAgICAgKGNsb3NlUmVhZGFibGVTdHJlYW1SZWFkZXIpOgorICAgICAgICAo
ZW5xdWV1ZUluUmVhZGFibGVTdHJlYW0pOgorICAgICAgICAocmVhZEZyb21SZWFkYWJsZVN0cmVh
bVJlYWRlcik6CisgICAgICAgICogTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVy
LmpzOgorICAgICAgICAoY2xvc2VkKToKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvU3RyZWFt
SW50ZXJuYWxzLmpzOgorICAgICAgICAoY3JlYXRlTmV3U3RyZWFtc1Byb21pc2UpOiBEZWxldGVk
LgorICAgICAgICAocmVzb2x2ZVN0cmVhbXNQcm9taXNlKTogRGVsZXRlZC4KKyAgICAgICAgKHJl
amVjdFN0cmVhbXNQcm9taXNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMv
V3JpdGFibGVTdHJlYW0uanM6CisgICAgICAgIChpbml0aWFsaXplV3JpdGFibGVTdHJlYW0pOgor
ICAgICAgICAoY2xvc2UpOgorICAgICAgICAod3JpdGUpOgorICAgICAgICAoY2xvc2VkKToKKyAg
ICAgICAgKHJlYWR5KToKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvV3JpdGFibGVTdHJlYW1J
bnRlcm5hbHMuanM6CisgICAgICAgIChzeW5jV3JpdGFibGVTdHJlYW1TdGF0ZVdpdGhRdWV1ZSk6
CisgICAgICAgIChlcnJvcldyaXRhYmxlU3RyZWFtKToKKyAgICAgICAgKGNhbGxPclNjaGVkdWxl
V3JpdGFibGVTdHJlYW1BZHZhbmNlUXVldWUpOgorCisyMDE1LTEwLTI4ICBYYWJpZXIgUm9kcmln
dWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+CisKICAgICAgICAgW1N0cmVhbXMgQVBJ
XSBBZGQgd3JpdGUgbWV0aG9kIHRvIHdyaXRhYmxlIHN0cmVhbQogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTg5CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9PcGVyYXRpb25zLlByb21pc2UuanMgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvT3BlcmF0aW9ucy5Qcm9taXNlLmpzCmluZGV4IGE0MGRh
ODIzNThkNDMzNGUzM2YwZmNkMWE5Mzk4MTk3M2NlZGIwZmUuLmZmODgzMzc1YjkzYTA4YmI4MjQ3
ZGM4OTM5MjRkMGEzZjNjY2FlN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
dWlsdGlucy9PcGVyYXRpb25zLlByb21pc2UuanMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J1aWx0aW5zL09wZXJhdGlvbnMuUHJvbWlzZS5qcwpAQCAtNzgsNiArNzgsNDQgQEAgZnVuY3Rp
b24gbmV3UHJvbWlzZUNhcGFiaWxpdHkoY29uc3RydWN0b3IpCiAgICAgcmV0dXJuIHByb21pc2VD
YXBhYmlsaXR5OwogfQogCitmdW5jdGlvbiBuZXdSZXNvbHZlZFByb21pc2VDYXBhYmlsaXR5KGNv
bnN0cnVjdG9yLCB2YWx1ZSkKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLyBGSVhNRTog
Q2hlY2sgaXNDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikuCisgICAgaWYgKHR5cGVvZiBjb25zdHJ1
Y3RvciAhPT0gImZ1bmN0aW9uIikKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoInByb21p
c2UgY2FwYWJpbGl0eSByZXF1aXJlcyBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIik7CisKKyAgICBj
b25zdCBwcm9taXNlQ2FwYWJpbGl0eSA9IHsKKyAgICAgICAgQHByb21pc2U6IHVuZGVmaW5lZCwK
KyAgICAgICAgQHJlc29sdmU6IGZ1bmN0aW9uKCkgeyB9LAorICAgICAgICBAcmVqZWN0OiBmdW5j
dGlvbigpIHsgfQorICAgIH07CisKKyAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcHJvbWlzZSA9IGNv
bnN0cnVjdG9yLnJlc29sdmUodmFsdWUpOworCisgICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5
OworfQorCitmdW5jdGlvbiBuZXdSZWplY3RlZFByb21pc2VDYXBhYmlsaXR5KGNvbnN0cnVjdG9y
LCByZWFzb24pCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgLy8gRklYTUU6IENoZWNrIGlz
Q29uc3RydWN0b3IoY29uc3RydWN0b3IpLgorICAgIGlmICh0eXBlb2YgY29uc3RydWN0b3IgIT09
ICJmdW5jdGlvbiIpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJwcm9taXNlIGNhcGFi
aWxpdHkgcmVxdWlyZXMgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiIpOworCisgICAgY29uc3QgcHJv
bWlzZUNhcGFiaWxpdHkgPSB7CisgICAgICAgIEBwcm9taXNlOiB1bmRlZmluZWQsCisgICAgICAg
IEByZXNvbHZlOiBmdW5jdGlvbigpIHsgfSwKKyAgICAgICAgQHJlamVjdDogZnVuY3Rpb24oKSB7
IH0KKyAgICB9OworCisgICAgcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2UgPSBjb25zdHJ1Y3Rv
ci5yZWplY3QocmVhc29uKTsKKworICAgIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eTsKK30KKwog
ZnVuY3Rpb24gdHJpZ2dlclByb21pc2VSZWFjdGlvbnMocmVhY3Rpb25zLCBhcmd1bWVudCkKIHsK
ICAgICAidXNlIHN0cmljdCI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAKaW5kZXggYjMwZWJmM2NlZWYxMzYzNzZhYTUzM2IxNDYzNWFjMzI0
MzQzZTc4Yy4uNGUzYTg2N2VhYjNiYTJkNjcwODlhN2VmYjJjOGMxOThlMWI3MjAxZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAt
Mjg4LDYgKzI4OCw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoVk0mIHZtKQogICAgIG1f
YXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uLnNldCh2bSwgdGhpcywgSlNGdW5jdGlvbjo6Y3JlYXRl
KHZtLCB0aGlzLCAwLCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZXMuc3RyaW5nKCksIGFycmF5UHJv
dG9GdW5jVmFsdWVzKSk7CiAgICAgbV9pbml0aWFsaXplUHJvbWlzZUZ1bmN0aW9uLnNldCh2bSwg
dGhpcywgSlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1bmN0aW9uKHZtLCBvcGVyYXRpb25zUHJv
bWlzZUluaXRpYWxpemVQcm9taXNlQ29kZUdlbmVyYXRvcih2bSksIHRoaXMpKTsKICAgICBtX25l
d1Byb21pc2VDYXBhYmlsaXR5RnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVh
dGVCdWlsdGluRnVuY3Rpb24odm0sIG9wZXJhdGlvbnNQcm9taXNlTmV3UHJvbWlzZUNhcGFiaWxp
dHlDb2RlR2VuZXJhdG9yKHZtKSwgdGhpcykpOworICAgIG1fbmV3UmVzb2x2ZWRQcm9taXNlQ2Fw
YWJpbGl0eUZ1bmN0aW9uLnNldCh2bSwgdGhpcywgSlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1
bmN0aW9uKHZtLCBvcGVyYXRpb25zUHJvbWlzZU5ld1Jlc29sdmVkUHJvbWlzZUNhcGFiaWxpdHlD
b2RlR2VuZXJhdG9yKHZtKSwgdGhpcykpOworICAgIG1fbmV3UmVqZWN0ZWRQcm9taXNlQ2FwYWJp
bGl0eUZ1bmN0aW9uLnNldCh2bSwgdGhpcywgSlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1bmN0
aW9uKHZtLCBvcGVyYXRpb25zUHJvbWlzZU5ld1JlamVjdGVkUHJvbWlzZUNhcGFiaWxpdHlDb2Rl
R2VuZXJhdG9yKHZtKSwgdGhpcykpOwogICAgIG1fbnVsbEdldHRlckZ1bmN0aW9uLnNldCh2bSwg
dGhpcywgTnVsbEdldHRlckZ1bmN0aW9uOjpjcmVhdGUodm0sIE51bGxHZXR0ZXJGdW5jdGlvbjo6
Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSkpOwog
ICAgIG1fbnVsbFNldHRlckZ1bmN0aW9uLnNldCh2bSwgdGhpcywgTnVsbFNldHRlckZ1bmN0aW9u
OjpjcmVhdGUodm0sIE51bGxTZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlz
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSkpOwogICAgIG1fb2JqZWN0UHJvdG90eXBlLnNl
dCh2bSwgdGhpcywgT2JqZWN0UHJvdG90eXBlOjpjcmVhdGUodm0sIHRoaXMsIE9iamVjdFByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBqc051bGwoKSkpKTsKQEAgLTU0NCw2ICs1
NDYsOCBAQCBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+
IGpzTmFtZSwgbG93ZXJOYW1lICMjIENvbnN0cnVjdAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUlu
Zm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuaXNQcm9taXNlUHJpdmF0ZU5hbWUo
KSwgSlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1bmN0aW9uKHZtLCBvcGVyYXRpb25zUHJvbWlz
ZUlzUHJvbWlzZUNvZGVHZW5lcmF0b3Iodm0pLCB0aGlzKSwgRG9udEVudW0gfCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkubmV3UHJvbWlzZVJlYWN0aW9uUHJpdmF0ZU5hbWUoKSwgSlNGdW5j
dGlvbjo6Y3JlYXRlQnVpbHRpbkZ1bmN0aW9uKHZtLCBvcGVyYXRpb25zUHJvbWlzZU5ld1Byb21p
c2VSZWFjdGlvbkNvZGVHZW5lcmF0b3Iodm0pLCB0aGlzKSwgRG9udEVudW0gfCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkubmV3UHJvbWlzZUNhcGFiaWxpdHlQcml2YXRlTmFtZSgpLCBtX25l
d1Byb21pc2VDYXBhYmlsaXR5RnVuY3Rpb24uZ2V0KCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KSwKKyAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMt
PmJ1aWx0aW5OYW1lcygpLm5ld1Jlc29sdmVkUHJvbWlzZUNhcGFiaWxpdHlQcml2YXRlTmFtZSgp
LCBtX25ld1Jlc29sdmVkUHJvbWlzZUNhcGFiaWxpdHlGdW5jdGlvbi5nZXQoKSwgRG9udEVudW0g
fCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAorICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0u
cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubmV3UmVqZWN0ZWRQcm9taXNlQ2FwYWJpbGl0
eVByaXZhdGVOYW1lKCksIG1fbmV3UmVqZWN0ZWRQcm9taXNlQ2FwYWJpbGl0eUZ1bmN0aW9uLmdl
dCgpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFBy
b3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS50cmlnZ2VyUHJvbWlz
ZVJlYWN0aW9uc1ByaXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlv
bih2bSwgb3BlcmF0aW9uc1Byb21pc2VUcmlnZ2VyUHJvbWlzZVJlYWN0aW9uc0NvZGVHZW5lcmF0
b3Iodm0pLCB0aGlzKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAg
ICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucmVq
ZWN0UHJvbWlzZVByaXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlv
bih2bSwgb3BlcmF0aW9uc1Byb21pc2VSZWplY3RQcm9taXNlQ29kZUdlbmVyYXRvcih2bSksIHRo
aXMpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFBy
b3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5mdWxmaWxsUHJvbWlz
ZVByaXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbih2bSwgb3Bl
cmF0aW9uc1Byb21pc2VGdWxmaWxsUHJvbWlzZUNvZGVHZW5lcmF0b3Iodm0pLCB0aGlzKSwgRG9u
dEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLApAQCAtODExLDYgKzgxNSw4IEBAIHZvaWQg
SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheVByb3RvVmFs
dWVzRnVuY3Rpb24pOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2luaXRpYWxp
emVQcm9taXNlRnVuY3Rpb24pOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25l
d1Byb21pc2VDYXBhYmlsaXR5RnVuY3Rpb24pOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX25ld1Jlc29sdmVkUHJvbWlzZUNhcGFiaWxpdHlGdW5jdGlvbik7CisgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbmV3UmVqZWN0ZWRQcm9taXNlQ2FwYWJpbGl0eUZ1bmN0
aW9uKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV90aHJvd1R5cGVFcnJvckdl
dHRlclNldHRlcik7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbW9kdWxlTG9h
ZGVyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgKaW5kZXggOGUxNjI5YzViYmVhNjc5NDk0ODNhZDNjYzc4MTg5M2I4NGQ4NTEwNC4uYTRjMjA2
M2E3NTk0YzExOWJlODNmNDZjNmU4YzM2MDY1ZmQzYzRkMSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC0yMjAsNiArMjIwLDggQEAgcHJv
dGVjdGVkOgogICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBtX2FycmF5UHJvdG9WYWx1ZXNG
dW5jdGlvbjsKICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gbV9pbml0aWFsaXplUHJvbWlz
ZUZ1bmN0aW9uOwogICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBtX25ld1Byb21pc2VDYXBh
YmlsaXR5RnVuY3Rpb247CisgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IG1fbmV3UmVzb2x2
ZWRQcm9taXNlQ2FwYWJpbGl0eUZ1bmN0aW9uOworICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9u
PiBtX25ld1JlamVjdGVkUHJvbWlzZUNhcGFiaWxpdHlGdW5jdGlvbjsKICAgICBXcml0ZUJhcnJp
ZXI8R2V0dGVyU2V0dGVyPiBtX3Rocm93VHlwZUVycm9yR2V0dGVyU2V0dGVyOwogCiAgICAgV3Jp
dGVCYXJyaWVyPE1vZHVsZUxvYWRlck9iamVjdD4gbV9tb2R1bGVMb2FkZXI7CkBAIC00MzMsNiAr
NDM1LDggQEAgcHVibGljOgogICAgIEpTRnVuY3Rpb24qIGFycmF5UHJvdG9WYWx1ZXNGdW5jdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uLmdldCgpOyB9CiAg
ICAgSlNGdW5jdGlvbiogaW5pdGlhbGl6ZVByb21pc2VGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1faW5pdGlhbGl6ZVByb21pc2VGdW5jdGlvbi5nZXQoKTsgfQogICAgIEpTRnVuY3Rpb24qIG5l
d1Byb21pc2VDYXBhYmlsaXR5RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX25ld1Byb21pc2VD
YXBhYmlsaXR5RnVuY3Rpb24uZ2V0KCk7IH0KKyAgICBKU0Z1bmN0aW9uKiBuZXdSZXNvbHZlZFBy
b21pc2VDYXBhYmlsaXR5RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX25ld1Jlc29sdmVkUHJv
bWlzZUNhcGFiaWxpdHlGdW5jdGlvbi5nZXQoKTsgfQorICAgIEpTRnVuY3Rpb24qIG5ld1JlamVj
dGVkUHJvbWlzZUNhcGFiaWxpdHlGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbmV3UmVqZWN0
ZWRQcm9taXNlQ2FwYWJpbGl0eUZ1bmN0aW9uLmdldCgpOyB9CiAgICAgR2V0dGVyU2V0dGVyKiB0
aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAoIW1f
dGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanMKaW5kZXggOGFkMTNh
NzA5YTE4MmRkNzUzYjE3YmMwNTZiYmM3MzFlMmQ1OTcwZi4uZGFlODkyOGU2NTI1MTI5MmM2Yjhk
MWViNTgzN2ZiYTRkMWNhZjYzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
dHJlYW1zL1JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbUludGVybmFscy5qcwpAQCAtNDIsMTkgKzQyLDE5
IEBAIGZ1bmN0aW9uIHByaXZhdGVJbml0aWFsaXplUmVhZGFibGVTdHJlYW1SZWFkZXIoc3RyZWFt
KQogICAgICAgICB0aGlzLkBvd25lclJlYWRhYmxlU3RyZWFtID0gc3RyZWFtOwogICAgICAgICB0
aGlzLkBzdG9yZWRFcnJvciA9IHVuZGVmaW5lZDsKICAgICAgICAgc3RyZWFtLkByZWFkZXIgPSB0
aGlzOwotICAgICAgICB0aGlzLkBjbG9zZWRQcm9taXNlID0gQGNyZWF0ZU5ld1N0cmVhbXNQcm9t
aXNlKCk7CisgICAgICAgIHRoaXMuQGNsb3NlZFByb21pc2UgPSBAbmV3UHJvbWlzZUNhcGFiaWxp
dHkoUHJvbWlzZSk7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KICAgICBpZiAoc3RyZWFt
LkBzdGF0ZSA9PT0gQHJlYWRhYmxlU3RyZWFtQ2xvc2VkKSB7CiAgICAgICAgIHRoaXMuQG93bmVy
UmVhZGFibGVTdHJlYW0gPSBudWxsOwogICAgICAgICB0aGlzLkBzdG9yZWRFcnJvciA9IHVuZGVm
aW5lZDsKLSAgICAgICAgdGhpcy5AY2xvc2VkUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpOwor
ICAgICAgICB0aGlzLkBjbG9zZWRQcm9taXNlID0gQG5ld1Jlc29sdmVkUHJvbWlzZUNhcGFiaWxp
dHkoUHJvbWlzZSwgdW5kZWZpbmVkKTsKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQogICAg
IC8vIFRPRE86IEFTU0VSVChzdHJlYW0uQHN0YXRlID09PSBAcmVhZGFibGVTdHJlYW1FcnJvcmVk
KTsKICAgICB0aGlzLkBvd25lclJlYWRhYmxlU3RyZWFtID0gbnVsbDsKICAgICB0aGlzLkBzdG9y
ZWRFcnJvciA9IHN0cmVhbS5Ac3RvcmVkRXJyb3I7Ci0gICAgdGhpcy5AY2xvc2VkUHJvbWlzZSA9
IFByb21pc2UucmVqZWN0KHN0cmVhbS5Ac3RvcmVkRXJyb3IpOworICAgIHRoaXMuQGNsb3NlZFBy
b21pc2UgPSBAbmV3UmVqZWN0ZWRQcm9taXNlQ2FwYWJpbGl0eShQcm9taXNlLCBzdHJlYW0uQHN0
b3JlZEVycm9yKTsKIAogICAgIHJldHVybiB0aGlzOwogfQpAQCAtODksMTAgKzg5LDcgQEAgZnVu
Y3Rpb24gdGVlUmVhZGFibGVTdHJlYW0oc3RyZWFtLCBzaG91bGRDbG9uZSkKICAgICAgICAgcmVh
c29uOiB1bmRlZmluZWQsCiAgICAgfTsKIAotICAgIHRlZVN0YXRlLmNhbmNlbFByb21pc2UgPSBu
ZXcgQEludGVybmFsUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICB0
ZWVTdGF0ZS5yZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7Ci0gICAgICAgdGVlU3RhdGUucmVqZWN0
UHJvbWlzZSA9IHJlamVjdDsKLSAgICB9KTsKKyAgICB0ZWVTdGF0ZS5jYW5jZWxQcm9taXNlID0g
QG5ld1Byb21pc2VDYXBhYmlsaXR5KEBJbnRlcm5hbFByb21pc2UpOwogCiAgICAgbGV0IHB1bGxG
dW5jdGlvbiA9IEB0ZWVSZWFkYWJsZVN0cmVhbVB1bGxGdW5jdGlvbih0ZWVTdGF0ZSwgcmVhZGVy
LCBzaG91bGRDbG9uZSk7CiAKQEAgLTE1Myw5ICsxNTAsOSBAQCBmdW5jdGlvbiB0ZWVSZWFkYWJs
ZVN0cmVhbUJyYW5jaDFDYW5jZWxGdW5jdGlvbih0ZWVTdGF0ZSwgc3RyZWFtKQogICAgICAgICB0
ZWVTdGF0ZS5jYW5jZWxlZDEgPSB0cnVlOwogICAgICAgICB0ZWVTdGF0ZS5yZWFzb24xID0gcjsK
ICAgICAgICAgaWYgKHRlZVN0YXRlLmNhbmNlbGVkMikgewotICAgICAgICAgICAgQGNhbmNlbFJl
YWRhYmxlU3RyZWFtKHN0cmVhbSwgW3RlZVN0YXRlLnJlYXNvbjEsIHRlZVN0YXRlLnJlYXNvbjJd
KS50aGVuKHRlZVN0YXRlLnJlc29sdmVQcm9taXNlLCB0ZWVTdGF0ZS5yZWplY3RQcm9taXNlKTsK
KyAgICAgICAgICAgIEBjYW5jZWxSZWFkYWJsZVN0cmVhbShzdHJlYW0sIFt0ZWVTdGF0ZS5yZWFz
b24xLCB0ZWVTdGF0ZS5yZWFzb24yXSkudGhlbih0ZWVTdGF0ZS5jYW5jZWxQcm9taXNlLkByZXNv
bHZlLCB0ZWVTdGF0ZS5jYW5jZWxQcm9taXNlLkByZWplY3QpOwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0ZWVTdGF0ZS5jYW5jZWxQcm9taXNlOworICAgICAgICByZXR1cm4gdGVlU3RhdGUu
Y2FuY2VsUHJvbWlzZS5AcHJvbWlzZTsKICAgICB9CiB9CiAKQEAgLTE2NSw5ICsxNjIsOSBAQCBm
dW5jdGlvbiB0ZWVSZWFkYWJsZVN0cmVhbUJyYW5jaDJDYW5jZWxGdW5jdGlvbih0ZWVTdGF0ZSwg
c3RyZWFtKQogICAgICAgICB0ZWVTdGF0ZS5jYW5jZWxlZDIgPSB0cnVlOwogICAgICAgICB0ZWVT
dGF0ZS5yZWFzb24yID0gcjsKICAgICAgICAgaWYgKHRlZVN0YXRlLmNhbmNlbGVkMSkgewotICAg
ICAgICAgICAgQGNhbmNlbFJlYWRhYmxlU3RyZWFtKHN0cmVhbSwgW3RlZVN0YXRlLnJlYXNvbjEs
IHRlZVN0YXRlLnJlYXNvbjJdKS50aGVuKHRlZVN0YXRlLnJlc29sdmVQcm9taXNlLCB0ZWVTdGF0
ZS5yZWplY3RQcm9taXNlKTsKKyAgICAgICAgICAgIEBjYW5jZWxSZWFkYWJsZVN0cmVhbShzdHJl
YW0sIFt0ZWVTdGF0ZS5yZWFzb24xLCB0ZWVTdGF0ZS5yZWFzb24yXSkudGhlbih0ZWVTdGF0ZS5j
YW5jZWxQcm9taXNlLkByZXNvbHZlLCB0ZWVTdGF0ZS5jYW5jZWxQcm9taXNlLkByZWplY3QpOwog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0ZWVTdGF0ZS5jYW5jZWxQcm9taXNlOworICAgICAg
ICByZXR1cm4gdGVlU3RhdGUuY2FuY2VsUHJvbWlzZS5AcHJvbWlzZTsKICAgICB9CiB9CiAKQEAg
LTIwNywxNCArMjA0LDE0IEBAIGZ1bmN0aW9uIGVycm9yUmVhZGFibGVTdHJlYW0oc3RyZWFtLCBl
cnJvcikKIAogICAgIHZhciByZXF1ZXN0cyA9IHJlYWRlci5AcmVhZFJlcXVlc3RzOwogICAgIGZv
ciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0gcmVxdWVzdHMubGVuZ3RoOyBpbmRleCA8IGxlbmd0
aDsgKytpbmRleCkKLSAgICAgICAgQHJlamVjdFN0cmVhbXNQcm9taXNlKHJlcXVlc3RzW2luZGV4
XSwgZXJyb3IpOworICAgICAgICByZXF1ZXN0c1tpbmRleF0uQHJlamVjdC5AY2FsbCh1bmRlZmlu
ZWQsIGVycm9yKTsKICAgICByZWFkZXIuQHJlYWRSZXF1ZXN0cyA9IFtdOwogCiAgICAgQHJlbGVh
c2VSZWFkYWJsZVN0cmVhbVJlYWRlcihyZWFkZXIpOwogICAgIHJlYWRlci5Ac3RvcmVkRXJyb3Ig
PSBlcnJvcjsKICAgICByZWFkZXIuQHN0YXRlID0gQHJlYWRhYmxlU3RyZWFtRXJyb3JlZDsKIAot
ICAgIEByZWplY3RTdHJlYW1zUHJvbWlzZShyZWFkZXIuQGNsb3NlZFByb21pc2UsIGVycm9yKTsK
KyAgICByZWFkZXIuQGNsb3NlZFByb21pc2UuQHJlamVjdC5AY2FsbCh1bmRlZmluZWQsIGVycm9y
KTsKIH0KIAogZnVuY3Rpb24gcmVxdWVzdFJlYWRhYmxlU3RyZWFtUHVsbChzdHJlYW0pCkBAIC0z
MTQsMTEgKzMxMSwxMSBAQCBmdW5jdGlvbiBjbG9zZVJlYWRhYmxlU3RyZWFtUmVhZGVyKHJlYWRl
cikKIAogICAgIHZhciByZXF1ZXN0cyA9IHJlYWRlci5AcmVhZFJlcXVlc3RzOwogICAgIGZvciAo
dmFyIGluZGV4ID0gMCwgbGVuZ3RoID0gcmVxdWVzdHMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsg
KytpbmRleCkKLSAgICAgICAgQHJlc29sdmVTdHJlYW1zUHJvbWlzZShyZXF1ZXN0c1tpbmRleF0s
IHt2YWx1ZTp1bmRlZmluZWQsIGRvbmU6IHRydWV9KTsKKyAgICAgICAgcmVxdWVzdHNbaW5kZXhd
LkByZXNvbHZlLkBjYWxsKHVuZGVmaW5lZCwge3ZhbHVlOnVuZGVmaW5lZCwgZG9uZTogdHJ1ZX0p
OwogICAgIHJlYWRlci5AcmVhZFJlcXVlc3RzID0gW107CiAgICAgQHJlbGVhc2VSZWFkYWJsZVN0
cmVhbVJlYWRlcihyZWFkZXIpOwogICAgIHJlYWRlci5Ac3RhdGUgPSBAcmVhZGFibGVTdHJlYW1D
bG9zZWQ7Ci0gICAgQHJlc29sdmVTdHJlYW1zUHJvbWlzZShyZWFkZXIuQGNsb3NlZFByb21pc2Up
OworICAgIHJlYWRlci5AY2xvc2VkUHJvbWlzZS5AcmVzb2x2ZS5AY2FsbCh1bmRlZmluZWQpOwog
fQogCiBmdW5jdGlvbiBlbnF1ZXVlSW5SZWFkYWJsZVN0cmVhbShzdHJlYW0sIGNodW5rKQpAQCAt
MzMwLDcgKzMyNyw3IEBAIGZ1bmN0aW9uIGVucXVldWVJblJlYWRhYmxlU3RyZWFtKHN0cmVhbSwg
Y2h1bmspCiAgICAgaWYgKHN0cmVhbS5Ac3RhdGUgPT09IEByZWFkYWJsZVN0cmVhbUNsb3NlZCkK
ICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICBpZiAoQGlzUmVhZGFibGVTdHJlYW1Mb2Nr
ZWQoc3RyZWFtKSAmJiBzdHJlYW0uQHJlYWRlci5AcmVhZFJlcXVlc3RzLmxlbmd0aCkgewotICAg
ICAgICBAcmVzb2x2ZVN0cmVhbXNQcm9taXNlKHN0cmVhbS5AcmVhZGVyLkByZWFkUmVxdWVzdHMu
c2hpZnQoKSwge3ZhbHVlOiBjaHVuaywgZG9uZTogZmFsc2V9KTsKKyAgICAgICAgc3RyZWFtLkBy
ZWFkZXIuQHJlYWRSZXF1ZXN0cy5zaGlmdCgpLkByZXNvbHZlLkBjYWxsKHVuZGVmaW5lZCwge3Zh
bHVlOiBjaHVuaywgZG9uZTogZmFsc2V9KTsKICAgICAgICAgQHJlcXVlc3RSZWFkYWJsZVN0cmVh
bVB1bGwoc3RyZWFtKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM2OSw4ICszNjYsOCBA
QCBmdW5jdGlvbiByZWFkRnJvbVJlYWRhYmxlU3RyZWFtUmVhZGVyKHJlYWRlcikKICAgICAgICAg
ICAgIEBmaW5pc2hDbG9zaW5nUmVhZGFibGVTdHJlYW0oc3RyZWFtKTsKICAgICAgICAgcmV0dXJu
IFByb21pc2UucmVzb2x2ZSh7dmFsdWU6IGNodW5rLCBkb25lOiBmYWxzZX0pOwogICAgIH0KLSAg
ICB2YXIgcmVhZFByb21pc2UgPSBAY3JlYXRlTmV3U3RyZWFtc1Byb21pc2UoKTsKKyAgICB2YXIg
cmVhZFByb21pc2UgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoUHJvbWlzZSk7CiAgICAgcmVhZGVy
LkByZWFkUmVxdWVzdHMucHVzaChyZWFkUHJvbWlzZSk7CiAgICAgQHJlcXVlc3RSZWFkYWJsZVN0
cmVhbVB1bGwoc3RyZWFtKTsKLSAgICByZXR1cm4gcmVhZFByb21pc2U7CisgICAgcmV0dXJuIHJl
YWRQcm9taXNlLkBwcm9taXNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmpzIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmpzCmluZGV4IGNlMjczYThkOWJlM2ZmNTQz
NDU5MDM1ZjY2NTVmYzExNmQxNWMwY2IuLjMyNjM4ZGQyOWQ5M2E1MjQ2NmVmMzY0NzMxMDlhZGJl
NjIzNjkzMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFk
YWJsZVN0cmVhbVJlYWRlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMv
UmVhZGFibGVTdHJlYW1SZWFkZXIuanMKQEAgLTc2LDUgKzc2LDUgQEAgZnVuY3Rpb24gY2xvc2Vk
KCkKICAgICBpZiAoIUBpc1JlYWRhYmxlU3RyZWFtUmVhZGVyKHRoaXMpKQogICAgICAgICByZXR1
cm4gUHJvbWlzZS5yZWplY3QobmV3IEBUeXBlRXJyb3IoIkNhbGxlZSBvZiBjbG9zZWQgaXMgbm90
IGEgUmVhZGFibGVTdHJlYW1SZWFkZXIiKSk7CiAKLSAgICByZXR1cm4gdGhpcy5AY2xvc2VkUHJv
bWlzZTsKKyAgICByZXR1cm4gdGhpcy5AY2xvc2VkUHJvbWlzZS5AcHJvbWlzZTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9TdHJlYW1JbnRlcm5hbHMuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvU3RyZWFtSW50ZXJuYWxzLmpzCmluZGV4
IDYzMDFmZmQ0MGM2OWViMTg1Y2JmMjNlMThjOTE2MzYwZTNjZTRiZGYuLjgyYzQ0MGVjZmI3NWI4
MDllN2QwMTcwOGQwOTllMjA0MDViNGRhN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvc3RyZWFtcy9TdHJlYW1JbnRlcm5hbHMuanMKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zdHJlYW1zL1N0cmVhbUludGVybmFscy5qcwpAQCAtOTAsNDMgKzkwLDYgQEAgZnVuY3Rp
b24gdmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3koc2l6ZSwgaGlnaFdhdGVyTWFy
aykKICAgICByZXR1cm4gbm9ybWFsaXplZFN0cmF0ZWd5OwogfQogCi1mdW5jdGlvbiBjcmVhdGVO
ZXdTdHJlYW1zUHJvbWlzZSgpCi17Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgdmFyIHJlc29s
dmVGdW5jdGlvbjsKLSAgICB2YXIgcmVqZWN0RnVuY3Rpb247Ci0gICAgdmFyIHByb21pc2UgPSBu
ZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICAgcmVzb2x2ZUZ1
bmN0aW9uID0gcmVzb2x2ZTsKLSAgICAgICAgcmVqZWN0RnVuY3Rpb24gPSByZWplY3Q7Ci0gICAg
fSk7Ci0gICAgcHJvbWlzZS5AcmVzb2x2ZSA9IHJlc29sdmVGdW5jdGlvbjsKLSAgICBwcm9taXNl
LkByZWplY3QgPSByZWplY3RGdW5jdGlvbjsKLSAgICByZXR1cm4gcHJvbWlzZTsKLX0KLQotZnVu
Y3Rpb24gcmVzb2x2ZVN0cmVhbXNQcm9taXNlKHByb21pc2UsIHZhbHVlKQotewotICAgICJ1c2Ug
c3RyaWN0IjsKLQotICAgIGlmIChwcm9taXNlICYmIHByb21pc2UuQHJlc29sdmUpIHsKLSAgICAg
ICAgcHJvbWlzZS5AcmVzb2x2ZSh2YWx1ZSk7Ci0gICAgICAgIHByb21pc2UuQHJlc29sdmUgPSB1
bmRlZmluZWQ7Ci0gICAgICAgIHByb21pc2UuQHJlamVjdCA9IHVuZGVmaW5lZDsKLSAgICB9Ci19
Ci0KLWZ1bmN0aW9uIHJlamVjdFN0cmVhbXNQcm9taXNlKHByb21pc2UsIHZhbHVlKQotewotICAg
ICJ1c2Ugc3RyaWN0IjsKLQotICAgIGlmIChwcm9taXNlICYmIHByb21pc2UuQHJlamVjdCkgewot
ICAgICAgICBwcm9taXNlLkByZWplY3QodmFsdWUpOwotICAgICAgICBwcm9taXNlLkByZXNvbHZl
ID0gdW5kZWZpbmVkOwotICAgICAgICBwcm9taXNlLkByZWplY3QgPSB1bmRlZmluZWQ7Ci0gICAg
fQotfQotCiBmdW5jdGlvbiBuZXdRdWV1ZSgpCiB7CiAgICAgcmV0dXJuIHsgY29udGVudDogW10s
IHNpemU6IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9X
cml0YWJsZVN0cmVhbS5qcyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9Xcml0YWJs
ZVN0cmVhbS5qcwppbmRleCBlZTEyMTMyMjM3NWMwNTc3OWJkNjUyZDcwY2RkMzgzN2U2YmY2NWNh
Li5iNzA5ODcxNjlmNDUxMWMzYzVlYjAyMWVmYTllMGNkMDM3NTU4MTdmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvV3JpdGFibGVTdHJlYW0uanMKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3RyZWFtLmpzCkBAIC00Miw4ICs0
Miw4IEBAIGZ1bmN0aW9uIGluaXRpYWxpemVXcml0YWJsZVN0cmVhbSh1bmRlcmx5aW5nU2luaywg
c3RyYXRlZ3kpCiAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJXcml0YWJsZVN0cmVhbSBj
b25zdHJ1Y3RvciB0YWtlcyBhbiBvYmplY3QgYXMgc2Vjb25kIGFyZ3VtZW50LCBpZiBhbnkiKTsK
IAogICAgIHRoaXMuQHVuZGVybHlpbmdTaW5rID0gdW5kZXJseWluZ1Npbms7Ci0gICAgdGhpcy5A
Y2xvc2VkUHJvbWlzZSA9IEBjcmVhdGVOZXdTdHJlYW1zUHJvbWlzZSgpOwotICAgIHRoaXMuQHJl
YWR5UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpOworICAgIHRoaXMuQGNsb3Nl
ZFByb21pc2UgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoUHJvbWlzZSk7CisgICAgdGhpcy5AcmVh
ZHlQcm9taXNlID0gQG5ld1Jlc29sdmVkUHJvbWlzZUNhcGFiaWxpdHkoUHJvbWlzZSwgdW5kZWZp
bmVkKTsKICAgICB0aGlzLkBxdWV1ZSA9IEBuZXdRdWV1ZSgpOwogICAgIHRoaXMuQHN0YXJ0ZWQg
PSBmYWxzZTsKICAgICB0aGlzLkB3cml0aW5nID0gZmFsc2U7CkBAIC01NCw5ICs1NCw5IEBAIGZ1
bmN0aW9uIGluaXRpYWxpemVXcml0YWJsZVN0cmVhbSh1bmRlcmx5aW5nU2luaywgc3RyYXRlZ3kp
CiAKICAgICB2YXIgZXJyb3IgPSBAZXJyb3JXcml0YWJsZVN0cmVhbS5iaW5kKHRoaXMpOwogICAg
IHZhciBzdGFydFJlc3VsdCA9IEBpbnZva2VPck5vb3AodW5kZXJseWluZ1NpbmssICJzdGFydCIs
IFtlcnJvcl0pOwotICAgIHRoaXMuQHN0YXJ0ZWRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHN0
YXJ0UmVzdWx0KTsKKyAgICB0aGlzLkBzdGFydGVkUHJvbWlzZSA9IEBuZXdSZXNvbHZlZFByb21p
c2VDYXBhYmlsaXR5KFByb21pc2UsIHN0YXJ0UmVzdWx0KTsKICAgICB2YXIgX3RoaXMgPSB0aGlz
OwotICAgIHRoaXMuQHN0YXJ0ZWRQcm9taXNlLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgdGhpcy5A
c3RhcnRlZFByb21pc2UuQHByb21pc2UudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgX3RoaXMu
QHN0YXJ0ZWQgPSB0cnVlOwogICAgICAgICBfdGhpcy5Ac3RhcnRlZFByb21pc2UgPSB1bmRlZmlu
ZWQ7CiAgICAgfSwgZXJyb3IpOwpAQCAtOTgsMTMgKzk4LDEzIEBAIGZ1bmN0aW9uIGNsb3NlKCkK
ICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuQHN0b3JlZEVycm9yKTsKIAogICAg
IGlmICh0aGlzLkBzdGF0ZSA9PT0gIndhaXRpbmciKQotICAgICAgICBAcmVzb2x2ZVN0cmVhbXNQ
cm9taXNlKHRoaXMuQHJlYWR5UHJvbWlzZSwgdW5kZWZpbmVkKTsKKyAgICAgICAgdGhpcy5AcmVh
ZHlQcm9taXNlLkByZXNvbHZlLkBjYWxsKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsKIAogICAgIHRo
aXMuQHN0YXRlID0gImNsb3NpbmciOwogICAgIEBlbnF1ZXVlVmFsdWVXaXRoU2l6ZSh0aGlzLkBx
dWV1ZSwgImNsb3NlIiwgMCk7CiAgICAgQGNhbGxPclNjaGVkdWxlV3JpdGFibGVTdHJlYW1BZHZh
bmNlUXVldWUodGhpcyk7CiAKLSAgICByZXR1cm4gdGhpcy5AY2xvc2VkUHJvbWlzZTsKKyAgICBy
ZXR1cm4gdGhpcy5AY2xvc2VkUHJvbWlzZS5AcHJvbWlzZTsKIH0KIAogZnVuY3Rpb24gd3JpdGUo
Y2h1bmspCkBAIC0xMzMsNyArMTMzLDcgQEAgZnVuY3Rpb24gd3JpdGUoY2h1bmspCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBjb25zdCBwcm9taXNlID0gQGNyZWF0ZU5ld1N0cmVhbXNQcm9taXNl
KCk7CisgICAgY29uc3QgcHJvbWlzZSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShASW50ZXJuYWxQ
cm9taXNlKTsKICAgICB0cnkgewogICAgICAgICBAZW5xdWV1ZVZhbHVlV2l0aFNpemUodGhpcy5A
cXVldWUsIHsgcHJvbWlzZTogcHJvbWlzZSwgY2h1bms6IGNodW5rIH0sIGNodW5rU2l6ZSk7CiAg
ICAgfSBjYXRjaCAoZSkgewpAQCAtMTQ0LDcgKzE0NCw3IEBAIGZ1bmN0aW9uIHdyaXRlKGNodW5r
KQogICAgIEBzeW5jV3JpdGFibGVTdHJlYW1TdGF0ZVdpdGhRdWV1ZSh0aGlzKTsKICAgICBAY2Fs
bE9yU2NoZWR1bGVXcml0YWJsZVN0cmVhbUFkdmFuY2VRdWV1ZSh0aGlzKTsKIAotICAgIHJldHVy
biBwcm9taXNlOworICAgIHJldHVybiBwcm9taXNlLkBwcm9taXNlOwogfQogCiBmdW5jdGlvbiBj
bG9zZWQoKQpAQCAtMTU0LDcgKzE1NCw3IEBAIGZ1bmN0aW9uIGNsb3NlZCgpCiAgICAgaWYgKCFA
aXNXcml0YWJsZVN0cmVhbSh0aGlzKSkKICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5l
dyBAVHlwZUVycm9yKCJUaGUgV3JpdGFibGVTdHJlYW0uY2xvc2VkIGdldHRlciBjYW4gb25seSBi
ZSB1c2VkIG9uIGluc3RhbmNlcyBvZiBXcml0YWJsZVN0cmVhbSIpKTsKIAotICAgIHJldHVybiB0
aGlzLkBjbG9zZWRQcm9taXNlOworICAgIHJldHVybiB0aGlzLkBjbG9zZWRQcm9taXNlLkBwcm9t
aXNlOwogfQogCiBmdW5jdGlvbiByZWFkeSgpCkBAIC0xNjQsNyArMTY0LDcgQEAgZnVuY3Rpb24g
cmVhZHkoKQogICAgIGlmICghQGlzV3JpdGFibGVTdHJlYW0odGhpcykpCiAgICAgICAgIHJldHVy
biBQcm9taXNlLnJlamVjdChuZXcgQFR5cGVFcnJvcigiVGhlIFdyaXRhYmxlU3RyZWFtLnJlYWR5
IGdldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBvZiBXcml0YWJsZVN0cmVhbSIp
KTsKIAotICAgIHJldHVybiB0aGlzLkByZWFkeVByb21pc2U7CisgICAgcmV0dXJuIHRoaXMuQHJl
YWR5UHJvbWlzZS5AcHJvbWlzZTsKIH0KIAogZnVuY3Rpb24gc3RhdGUoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzLmpz
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3RyZWFtSW50ZXJuYWxz
LmpzCmluZGV4IGE5YWVlMzQ0NjBmMGQ5NmI3NDgzMTQ1NjE4YzEwOGNkMDZkOTRkNzEuLjM5ZjYw
NTNmMzlkN2JiMTU0MDE5MTI2OWNhNWM2ZTU2MjY5YjNiNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbUludGVybmFscy5qcworKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvV3JpdGFibGVTdHJlYW1JbnRlcm5hbHMuanMK
QEAgLTQ2LDEwICs0NiwxMCBAQCBmdW5jdGlvbiBzeW5jV3JpdGFibGVTdHJlYW1TdGF0ZVdpdGhR
dWV1ZShzdHJlYW0pCiAKICAgICBpZiAoc3RyZWFtLkBxdWV1ZS5zaXplID4gc3RyZWFtLkBzdHJh
dGVneS5oaWdoV2F0ZXJNYXJrKSB7CiAgICAgICAgIHN0cmVhbS5Ac3RhdGUgPSAid2FpdGluZyI7
Ci0gICAgICAgIHN0cmVhbS5AcmVhZHlQcm9taXNlID0gQGNyZWF0ZU5ld1N0cmVhbXNQcm9taXNl
KCk7CisgICAgICAgIHN0cmVhbS5AcmVhZHlQcm9taXNlID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5
KFByb21pc2UpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHN0cmVhbS5Ac3RhdGUgPSAid3JpdGFi
bGUiOwotICAgICAgICBAcmVzb2x2ZVN0cmVhbXNQcm9taXNlKHN0cmVhbS5AcmVhZHlQcm9taXNl
LCB1bmRlZmluZWQpOworICAgICAgICBzdHJlYW0uQHJlYWR5UHJvbWlzZS5AcmVzb2x2ZS5AY2Fs
bCh1bmRlZmluZWQsIHVuZGVmaW5lZCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHVuZGVmaW5lZDsK
QEAgLTYzLDEzICs2MywxMyBAQCBmdW5jdGlvbiBlcnJvcldyaXRhYmxlU3RyZWFtKGUpCiAgICAg
ICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgd2hpbGUgKHRoaXMuQHF1ZXVlLmNvbnRlbnQubGVu
Z3RoID4gMCkgewogICAgICAgICB2YXIgd3JpdGVSZWNvcmQgPSBAZGVxdWV1ZVZhbHVlKHRoaXMu
QHF1ZXVlKTsKLSAgICAgICAgaWYgKHdyaXRlUmVjb3JkICE9PSAiY2xvc2UiICYmIHdyaXRlUmVj
b3JkLnByb21pc2UpCi0gICAgICAgICAgICBAcmVqZWN0U3RyZWFtc1Byb21pc2Uod3JpdGVSZWNv
cmQucHJvbWlzZSwgZSk7CisgICAgICAgIGlmICh3cml0ZVJlY29yZCAhPT0gImNsb3NlIikKKyAg
ICAgICAgICAgIHdyaXRlUmVjb3JkLnByb21pc2UuQHJlamVjdC5AY2FsbCh1bmRlZmluZWQsIGUp
OwogICAgIH0KICAgICB0aGlzLkBzdG9yZWRFcnJvciA9IGU7CiAgICAgaWYgKHRoaXMuQHN0YXRl
ID09PSAid2FpdGluZyIpCi0gICAgICAgIEByZXNvbHZlU3RyZWFtc1Byb21pc2UodGhpcy5AcmVh
ZHlQcm9taXNlLCB1bmRlZmluZWQpOwotICAgIEByZWplY3RTdHJlYW1zUHJvbWlzZSh0aGlzLkBj
bG9zZWRQcm9taXNlLCBlKTsKKyAgICAgICAgdGhpcy5AcmVhZHlQcm9taXNlLkByZXNvbHZlLkBj
YWxsKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsKKyAgICB0aGlzLkBjbG9zZWRQcm9taXNlLkByZWpl
Y3QuQGNhbGwodW5kZWZpbmVkLCBlKTsKICAgICB0aGlzLkBzdGF0ZSA9ICJlcnJvcmVkIjsKICAg
ICByZXR1cm4gdW5kZWZpbmVkOwogfQpAQCAtNzcsNyArNzcsNyBAQCBmdW5jdGlvbiBlcnJvcldy
aXRhYmxlU3RyZWFtKGUpCiBmdW5jdGlvbiBjYWxsT3JTY2hlZHVsZVdyaXRhYmxlU3RyZWFtQWR2
YW5jZVF1ZXVlKHN0cmVhbSkKIHsKICAgICBpZiAoIXN0cmVhbS5Ac3RhcnRlZCkKLSAgICAgICAg
c3RyZWFtLkBzdGFydGVkUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkgeyBAd3JpdGFibGVTdHJlYW1B
ZHZhbmNlUXVldWUoc3RyZWFtKTsgfSk7CisgICAgICAgIHN0cmVhbS5Ac3RhcnRlZFByb21pc2Uu
QHByb21pc2UudGhlbihmdW5jdGlvbigpIHsgQHdyaXRhYmxlU3RyZWFtQWR2YW5jZVF1ZXVlKHN0
cmVhbSk7IH0pOwogICAgIGVsc2UKICAgICAgICAgQHdyaXRhYmxlU3RyZWFtQWR2YW5jZVF1ZXVl
KHN0cmVhbSk7CiAKQEAgLTEwNiw3ICsxMDYsNyBAQCBmdW5jdGlvbiB3cml0YWJsZVN0cmVhbUFk
dmFuY2VRdWV1ZShzdHJlYW0pCiAgICAgICAgICAgICBpZiAoc3RyZWFtLkBzdGF0ZSA9PT0gImVy
cm9yZWQiKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIHN0cmVhbS5Ad3Jp
dGluZyA9IGZhbHNlOwotICAgICAgICAgICAgQHJlc29sdmVTdHJlYW1zUHJvbWlzZSh3cml0ZVJl
Y29yZC5wcm9taXNlLCB1bmRlZmluZWQpOworICAgICAgICAgICAgd3JpdGVSZWNvcmQucHJvbWlz
ZS5AcmVzb2x2ZS5AY2FsbCh1bmRlZmluZWQsIHVuZGVmaW5lZCk7CiAgICAgICAgICAgICBAZGVx
dWV1ZVZhbHVlKHN0cmVhbS5AcXVldWUpOwogICAgICAgICAgICAgQHN5bmNXcml0YWJsZVN0cmVh
bVN0YXRlV2l0aFF1ZXVlKHN0cmVhbSk7CiAgICAgICAgICAgICBAd3JpdGFibGVTdHJlYW1BZHZh
bmNlUXVldWUoc3RyZWFtKTsKQEAgLTEyOSw3ICsxMjksNyBAQCBmdW5jdGlvbiBjbG9zZVdyaXRh
YmxlU3RyZWFtKHN0cmVhbSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAv
LyBGSVhNRQogICAgICAgICAgICAgLy8gYXNzZXJ0KHN0cmVhbS5Ac3RhdGUgPT09ICJjbG9zaW5n
Iik7Ci0gICAgICAgICAgICBAcmVzb2x2ZVN0cmVhbXNQcm9taXNlKHN0cmVhbS5AY2xvc2VkUHJv
bWlzZSwgdW5kZWZpbmVkKTsKKyAgICAgICAgICAgIHN0cmVhbS5AY2xvc2VkUHJvbWlzZS5AcmVz
b2x2ZS5AY2FsbCh1bmRlZmluZWQsIHVuZGVmaW5lZCk7CiAgICAgICAgICAgICBzdHJlYW0uQHN0
YXRlID0gImNsb3NlZCI7CiAgICAgICAgIH0sCiAgICAgICAgIGZ1bmN0aW9uKHIpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264331</attachid>
            <date>2015-10-29 12:13:08 -0700</date>
            <delta_ts>2015-10-30 07:52:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150627-20151029201215.patch</filename>
            <type>text/plain</type>
            <size>31436</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
MTJkYWNmMWIxNjdmZmI0ZTBiZmVkNzA1ZWM2MmZhZWJjYmZhN2Q1Li5jY2ZlMDhkYzhjMDNmM2Jh
OGQwYmVkOTEwNDUyMmVmMWY2Mzc2NDY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxNS0xMC0yOSAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJp
c0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtTdHJlYW1zIEFQSV0gUmV3b3JrIHByb21pc2VzIHRv
IHVzZSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkgYW5kIGFzIG11Y2ggQEludGVybmFsUHJvbWlzZSBh
cyBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUwNjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkZWQgdHdvIGZ1bmN0aW9ucyB0byBjcmVhdGUgcHJvbWlzZSBjYXBhYmlsaXRpZXMgdGhh
dCBhcmUgYWxyZWFkeSB2ZW5kZWQuCisKKyAgICAgICAgKiBidWlsdGlucy9PcGVyYXRpb25zLlBy
b21pc2UuanM6CisgICAgICAgIChuZXdSZXNvbHZlZFByb21pc2VDYXBhYmlsaXR5KTogQ3JlYXRl
cyBhIHByb21pc2UgY2FwYWJpbGl0eSB3aXRoIGEgcHJvbWlzZSByZXNvbHZlZCBmcm9tIGNyZWF0
aW9uLiByZXNvbHZlIGFuZAorICAgICAgICByZWplY3Qgc2xvdHMgYXJlIHBob255LgorICAgICAg
ICAobmV3UmVqZWN0ZWRQcm9taXNlQ2FwYWJpbGl0eSk6IENyZWF0ZXMgYSBwcm9taXNlIGNhcGFi
aWxpdHkgd2l0aCBhIHByb21pc2UgcmVqZWN0IGZyb20gY3JlYXRpb24uIHJlc29sdmUgYW5kCisg
ICAgICAgIHJlamVjdCBzbG90cyBhcmUgcGhvbnkuCisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOiBCdWlsZCBp
bmZyYXN0cnVjdHVyZSBmb3IgdGhlIGZ1bmN0aW9ucyBhZGRlZCB0byBPcGVyYXRpb25zLlByb21p
c2UuanMuCisKIDIwMTUtMTAtMjggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBSZW5hbWUgSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dCB0byBJbnNwZWN0b3JOZXR3b3JrQWdlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1YjYyMDVlMzY4ODUyYjZm
YzdjMzRhMGM3OWJiYTA4YmJjYzNkYzNhLi4xNTBiNzMzMDY1YThjODJkMjM0NjhhNzE0MjhiZTQ2
ZjcyMzk3ZTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTkgQEAKIDIwMTUtMTAtMjkgIFhhYmll
ciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KIAorICAgICAgICBbU3Ry
ZWFtcyBBUEldIFJld29yayBwcm9taXNlcyB0byB1c2UgQG5ld1Byb21pc2VDYXBhYmlsaXR5IGFu
ZCBhcyBtdWNoIEBJbnRlcm5hbFByb21pc2UgYXMgcG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDYyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFyZSByZW1vdmluZyB0aGUgc3RyZWFt
IHByb21pc2VzIGZ1bmN0aW9ucyBpbiBmYXZvciBvZiBAbmV3UHJvbWlzZUNhcGFiaXR5IHdoaWNo
IGJhc2ljYWxseSBwcm92aWRlcyB0aGUgc2FtZQorICAgICAgICBmdW5jdGlvbmFsaXR5IChrZWVw
aW5nIHRoZSByZXNvbHZlIGFuZCByZWplY3QgZnVuY3Rpb25zIHdpdGhvdXQgZXh0ZXJuYWwgc2xv
dHMpLgorCisgICAgICAgIFdlIGFsc28gd2FudGVkIHRvIHVzZSBJbnRlcm5hbFByb21pc2UgYXMg
bXVjaCBhcyBwb3NzaWJsZS4gVGhlIGxpbWl0IGlzIHByb21pc2VzIHRoYXQgd2UgYXJlIGdvaW5n
IHRvIHNob3cgdG8KKyAgICAgICAgdGhlIG91dHNpZGUgd29ybGQgb3IgbWl4IHdpdGggaXQsIG1l
YW5pbmcgdGhhdCBjYW4ndCByZXNvbHZlIHRoZW0gYWdhaW5zdCBzb21ldGhpbmcgY29taW5nIGZy
b20gdGhlIHVzZXIgYmVjYXVzZQorICAgICAgICBpdCBjb3VsZCBiZSBhIHByb21pc2UgYW5kIHdl
IHdvdWxkIGJyZWFrIHRoZSBwcm9taXNlIHJlc29sdXRpb24gY2hhaW4gb3IgaWYgd2UgYXJlIGdv
aW5nIHRvIHNob3cgdGhlbSB0byB0aGUKKyAgICAgICAgdXNlciwgYmVjYXVzZSBvZiB0aGUgc2Ft
ZSByZWFzb24uCisKKyAgICAgICAgV2UgYWxzbyBzaGllbGRlZCBvdXIgY29kZSBieSB1c2luZyBA
UHJvbWlzZSBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIHBsYWluIFByb21pc2Ugc28gdGhhdCBvdXIg
Y29kZSBpcyBzdGlsbAorICAgICAgICB3b3JraW5nIGV2ZW4gd2hlbiB0aGUgdXNlciBjaGFuZ2Vz
IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIG9yIGl0cyBwcm90b3R5cGUuCisKKyAgICAgICAgSW50
ZXJuYWwgcmV3b3JrLCBubyBuZXcgdGVzdHMgbmVlZGVkLgorCisgICAgICAgICogTW9kdWxlcy9z
dHJlYW1zL1JlYWRhYmxlU3RyZWFtLmpzOgorICAgICAgICAoaW5pdGlhbGl6ZVJlYWRhYmxlU3Ry
ZWFtKToKKyAgICAgICAgKGNhbmNlbCk6CisgICAgICAgICogTW9kdWxlcy9zdHJlYW1zL1JlYWRh
YmxlU3RyZWFtSW50ZXJuYWxzLmpzOgorICAgICAgICAocHJpdmF0ZUluaXRpYWxpemVSZWFkYWJs
ZVN0cmVhbVJlYWRlcik6CisgICAgICAgICh0ZWVSZWFkYWJsZVN0cmVhbSk6CisgICAgICAgICh0
ZWVSZWFkYWJsZVN0cmVhbUJyYW5jaDJDYW5jZWxGdW5jdGlvbik6CisgICAgICAgIChlcnJvclJl
YWRhYmxlU3RyZWFtKToKKyAgICAgICAgKGNhbmNlbFJlYWRhYmxlU3RyZWFtKToKKyAgICAgICAg
KGNsb3NlUmVhZGFibGVTdHJlYW1SZWFkZXIpOgorICAgICAgICAoZW5xdWV1ZUluUmVhZGFibGVT
dHJlYW0pOgorICAgICAgICAocmVhZEZyb21SZWFkYWJsZVN0cmVhbVJlYWRlcik6CisgICAgICAg
ICogTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmpzOgorICAgICAgICAoY2Fu
Y2VsKToKKyAgICAgICAgKHJlYWQpOgorICAgICAgICAoY2xvc2VkKToKKyAgICAgICAgKiBNb2R1
bGVzL3N0cmVhbXMvU3RyZWFtSW50ZXJuYWxzLmpzOgorICAgICAgICAocHJvbWlzZUludm9rZU9y
Tm9vcCk6CisgICAgICAgIChwcm9taXNlSW52b2tlT3JGYWxsYmFja09yTm9vcCk6CisgICAgICAg
IChjcmVhdGVOZXdTdHJlYW1zUHJvbWlzZSk6IERlbGV0ZWQuCisgICAgICAgIChyZXNvbHZlU3Ry
ZWFtc1Byb21pc2UpOiBEZWxldGVkLgorICAgICAgICAocmVqZWN0U3RyZWFtc1Byb21pc2UpOiBE
ZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbS5qczoKKyAg
ICAgICAgKGluaXRpYWxpemVXcml0YWJsZVN0cmVhbSk6CisgICAgICAgIChhYm9ydCk6CisgICAg
ICAgIChjbG9zZSk6CisgICAgICAgICh3cml0ZSk6CisgICAgICAgIChjbG9zZWQpOgorICAgICAg
ICAocmVhZHkpOgorICAgICAgICAqIE1vZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbUludGVy
bmFscy5qczoKKyAgICAgICAgKHN5bmNXcml0YWJsZVN0cmVhbVN0YXRlV2l0aFF1ZXVlKToKKyAg
ICAgICAgKGVycm9yV3JpdGFibGVTdHJlYW0pOgorICAgICAgICAoY2FsbE9yU2NoZWR1bGVXcml0
YWJsZVN0cmVhbUFkdmFuY2VRdWV1ZSk6CisKKzIwMTUtMTAtMjkgIFhhYmllciBSb2RyaWd1ZXog
Q2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKwogICAgICAgICBbU3RyZWFtcyBBUEldIFR1
cm4gV1Mgc3RhdGVzIGludG8gaW50ZWdlcnMgYW5kIGZpeCBzdGF0ZSBpbml0aWFsaXphdGlvbgog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNjY3CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9PcGVyYXRpb25zLlBy
b21pc2UuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvT3BlcmF0aW9ucy5Qcm9t
aXNlLmpzCmluZGV4IGE0MGRhODIzNThkNDMzNGUzM2YwZmNkMWE5Mzk4MTk3M2NlZGIwZmUuLmZm
ODgzMzc1YjkzYTA4YmI4MjQ3ZGM4OTM5MjRkMGEzZjNjY2FlN2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9PcGVyYXRpb25zLlByb21pc2UuanMKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL09wZXJhdGlvbnMuUHJvbWlzZS5qcwpAQCAtNzgs
NiArNzgsNDQgQEAgZnVuY3Rpb24gbmV3UHJvbWlzZUNhcGFiaWxpdHkoY29uc3RydWN0b3IpCiAg
ICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5OwogfQogCitmdW5jdGlvbiBuZXdSZXNvbHZlZFBy
b21pc2VDYXBhYmlsaXR5KGNvbnN0cnVjdG9yLCB2YWx1ZSkKK3sKKyAgICAidXNlIHN0cmljdCI7
CisKKyAgICAvLyBGSVhNRTogQ2hlY2sgaXNDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikuCisgICAg
aWYgKHR5cGVvZiBjb25zdHJ1Y3RvciAhPT0gImZ1bmN0aW9uIikKKyAgICAgICAgdGhyb3cgbmV3
IEBUeXBlRXJyb3IoInByb21pc2UgY2FwYWJpbGl0eSByZXF1aXJlcyBhIGNvbnN0cnVjdG9yIGZ1
bmN0aW9uIik7CisKKyAgICBjb25zdCBwcm9taXNlQ2FwYWJpbGl0eSA9IHsKKyAgICAgICAgQHBy
b21pc2U6IHVuZGVmaW5lZCwKKyAgICAgICAgQHJlc29sdmU6IGZ1bmN0aW9uKCkgeyB9LAorICAg
ICAgICBAcmVqZWN0OiBmdW5jdGlvbigpIHsgfQorICAgIH07CisKKyAgICBwcm9taXNlQ2FwYWJp
bGl0eS5AcHJvbWlzZSA9IGNvbnN0cnVjdG9yLnJlc29sdmUodmFsdWUpOworCisgICAgcmV0dXJu
IHByb21pc2VDYXBhYmlsaXR5OworfQorCitmdW5jdGlvbiBuZXdSZWplY3RlZFByb21pc2VDYXBh
YmlsaXR5KGNvbnN0cnVjdG9yLCByZWFzb24pCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAg
Ly8gRklYTUU6IENoZWNrIGlzQ29uc3RydWN0b3IoY29uc3RydWN0b3IpLgorICAgIGlmICh0eXBl
b2YgY29uc3RydWN0b3IgIT09ICJmdW5jdGlvbiIpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVy
cm9yKCJwcm9taXNlIGNhcGFiaWxpdHkgcmVxdWlyZXMgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiIp
OworCisgICAgY29uc3QgcHJvbWlzZUNhcGFiaWxpdHkgPSB7CisgICAgICAgIEBwcm9taXNlOiB1
bmRlZmluZWQsCisgICAgICAgIEByZXNvbHZlOiBmdW5jdGlvbigpIHsgfSwKKyAgICAgICAgQHJl
amVjdDogZnVuY3Rpb24oKSB7IH0KKyAgICB9OworCisgICAgcHJvbWlzZUNhcGFiaWxpdHkuQHBy
b21pc2UgPSBjb25zdHJ1Y3Rvci5yZWplY3QocmVhc29uKTsKKworICAgIHJldHVybiBwcm9taXNl
Q2FwYWJpbGl0eTsKK30KKwogZnVuY3Rpb24gdHJpZ2dlclByb21pc2VSZWFjdGlvbnMocmVhY3Rp
b25zLCBhcmd1bWVudCkKIHsKICAgICAidXNlIHN0cmljdCI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggYjMwZWJmM2NlZWYxMzYz
NzZhYTUzM2IxNDYzNWFjMzI0MzQzZTc4Yy4uNGUzYTg2N2VhYjNiYTJkNjcwODlhN2VmYjJjOGMx
OThlMWI3MjAxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcApAQCAtMjg4LDYgKzI4OCw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6Omlu
aXQoVk0mIHZtKQogICAgIG1fYXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uLnNldCh2bSwgdGhpcywg
SlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAwLCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZXMu
c3RyaW5nKCksIGFycmF5UHJvdG9GdW5jVmFsdWVzKSk7CiAgICAgbV9pbml0aWFsaXplUHJvbWlz
ZUZ1bmN0aW9uLnNldCh2bSwgdGhpcywgSlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1bmN0aW9u
KHZtLCBvcGVyYXRpb25zUHJvbWlzZUluaXRpYWxpemVQcm9taXNlQ29kZUdlbmVyYXRvcih2bSks
IHRoaXMpKTsKICAgICBtX25ld1Byb21pc2VDYXBhYmlsaXR5RnVuY3Rpb24uc2V0KHZtLCB0aGlz
LCBKU0Z1bmN0aW9uOjpjcmVhdGVCdWlsdGluRnVuY3Rpb24odm0sIG9wZXJhdGlvbnNQcm9taXNl
TmV3UHJvbWlzZUNhcGFiaWxpdHlDb2RlR2VuZXJhdG9yKHZtKSwgdGhpcykpOworICAgIG1fbmV3
UmVzb2x2ZWRQcm9taXNlQ2FwYWJpbGl0eUZ1bmN0aW9uLnNldCh2bSwgdGhpcywgSlNGdW5jdGlv
bjo6Y3JlYXRlQnVpbHRpbkZ1bmN0aW9uKHZtLCBvcGVyYXRpb25zUHJvbWlzZU5ld1Jlc29sdmVk
UHJvbWlzZUNhcGFiaWxpdHlDb2RlR2VuZXJhdG9yKHZtKSwgdGhpcykpOworICAgIG1fbmV3UmVq
ZWN0ZWRQcm9taXNlQ2FwYWJpbGl0eUZ1bmN0aW9uLnNldCh2bSwgdGhpcywgSlNGdW5jdGlvbjo6
Y3JlYXRlQnVpbHRpbkZ1bmN0aW9uKHZtLCBvcGVyYXRpb25zUHJvbWlzZU5ld1JlamVjdGVkUHJv
bWlzZUNhcGFiaWxpdHlDb2RlR2VuZXJhdG9yKHZtKSwgdGhpcykpOwogICAgIG1fbnVsbEdldHRl
ckZ1bmN0aW9uLnNldCh2bSwgdGhpcywgTnVsbEdldHRlckZ1bmN0aW9uOjpjcmVhdGUodm0sIE51
bGxHZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJv
dG90eXBlLmdldCgpKSkpOwogICAgIG1fbnVsbFNldHRlckZ1bmN0aW9uLnNldCh2bSwgdGhpcywg
TnVsbFNldHRlckZ1bmN0aW9uOjpjcmVhdGUodm0sIE51bGxTZXR0ZXJGdW5jdGlvbjo6Y3JlYXRl
U3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSkpOwogICAgIG1f
b2JqZWN0UHJvdG90eXBlLnNldCh2bSwgdGhpcywgT2JqZWN0UHJvdG90eXBlOjpjcmVhdGUodm0s
IHRoaXMsIE9iamVjdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBqc051bGwo
KSkpKTsKQEAgLTU0NCw2ICs1NDYsOCBAQCBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwg
dm0ucHJvcGVydHlOYW1lcy0+IGpzTmFtZSwgbG93ZXJOYW1lICMjIENvbnN0cnVjdAogICAgICAg
ICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuaXNQ
cm9taXNlUHJpdmF0ZU5hbWUoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1bmN0aW9uKHZt
LCBvcGVyYXRpb25zUHJvbWlzZUlzUHJvbWlzZUNvZGVHZW5lcmF0b3Iodm0pLCB0aGlzKSwgRG9u
dEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUlu
Zm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubmV3UHJvbWlzZVJlYWN0aW9uUHJp
dmF0ZU5hbWUoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1bmN0aW9uKHZtLCBvcGVyYXRp
b25zUHJvbWlzZU5ld1Byb21pc2VSZWFjdGlvbkNvZGVHZW5lcmF0b3Iodm0pLCB0aGlzKSwgRG9u
dEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUlu
Zm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubmV3UHJvbWlzZUNhcGFiaWxpdHlQ
cml2YXRlTmFtZSgpLCBtX25ld1Byb21pc2VDYXBhYmlsaXR5RnVuY3Rpb24uZ2V0KCksIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZv
KHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLm5ld1Jlc29sdmVkUHJvbWlzZUNhcGFi
aWxpdHlQcml2YXRlTmFtZSgpLCBtX25ld1Jlc29sdmVkUHJvbWlzZUNhcGFiaWxpdHlGdW5jdGlv
bi5nZXQoKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAorICAgICAgICBHbG9i
YWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubmV3UmVqZWN0
ZWRQcm9taXNlQ2FwYWJpbGl0eVByaXZhdGVOYW1lKCksIG1fbmV3UmVqZWN0ZWRQcm9taXNlQ2Fw
YWJpbGl0eUZ1bmN0aW9uLmdldCgpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSks
CiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS50cmlnZ2VyUHJvbWlzZVJlYWN0aW9uc1ByaXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNy
ZWF0ZUJ1aWx0aW5GdW5jdGlvbih2bSwgb3BlcmF0aW9uc1Byb21pc2VUcmlnZ2VyUHJvbWlzZVJl
YWN0aW9uc0NvZGVHZW5lcmF0b3Iodm0pLCB0aGlzKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkucmVqZWN0UHJvbWlzZVByaXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNy
ZWF0ZUJ1aWx0aW5GdW5jdGlvbih2bSwgb3BlcmF0aW9uc1Byb21pc2VSZWplY3RQcm9taXNlQ29k
ZUdlbmVyYXRvcih2bSksIHRoaXMpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSks
CiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5mdWxmaWxsUHJvbWlzZVByaXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0
aW5GdW5jdGlvbih2bSwgb3BlcmF0aW9uc1Byb21pc2VGdWxmaWxsUHJvbWlzZUNvZGVHZW5lcmF0
b3Iodm0pLCB0aGlzKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLApAQCAtODEx
LDYgKzgxNSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9hcnJheVByb3RvVmFsdWVzRnVuY3Rpb24pOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX2luaXRpYWxpemVQcm9taXNlRnVuY3Rpb24pOwogICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX25ld1Byb21pc2VDYXBhYmlsaXR5RnVuY3Rpb24pOworICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25ld1Jlc29sdmVkUHJvbWlzZUNhcGFiaWxpdHlGdW5j
dGlvbik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbmV3UmVqZWN0ZWRQcm9t
aXNlQ2FwYWJpbGl0eUZ1bmN0aW9uKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV90aHJvd1R5cGVFcnJvckdldHRlclNldHRlcik7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fbW9kdWxlTG9hZGVyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggOGUxNjI5YzViYmVhNjc5NDk0ODNhZDNjYzc4MTg5
M2I4NGQ4NTEwNC4uYTRjMjA2M2E3NTk0YzExOWJlODNmNDZjNmU4YzM2MDY1ZmQzYzRkMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC0y
MjAsNiArMjIwLDggQEAgcHJvdGVjdGVkOgogICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBt
X2FycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbjsKICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4g
bV9pbml0aWFsaXplUHJvbWlzZUZ1bmN0aW9uOwogICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9u
PiBtX25ld1Byb21pc2VDYXBhYmlsaXR5RnVuY3Rpb247CisgICAgV3JpdGVCYXJyaWVyPEpTRnVu
Y3Rpb24+IG1fbmV3UmVzb2x2ZWRQcm9taXNlQ2FwYWJpbGl0eUZ1bmN0aW9uOworICAgIFdyaXRl
QmFycmllcjxKU0Z1bmN0aW9uPiBtX25ld1JlamVjdGVkUHJvbWlzZUNhcGFiaWxpdHlGdW5jdGlv
bjsKICAgICBXcml0ZUJhcnJpZXI8R2V0dGVyU2V0dGVyPiBtX3Rocm93VHlwZUVycm9yR2V0dGVy
U2V0dGVyOwogCiAgICAgV3JpdGVCYXJyaWVyPE1vZHVsZUxvYWRlck9iamVjdD4gbV9tb2R1bGVM
b2FkZXI7CkBAIC00MzMsNiArNDM1LDggQEAgcHVibGljOgogICAgIEpTRnVuY3Rpb24qIGFycmF5
UHJvdG9WYWx1ZXNGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlQcm90b1ZhbHVlc0Z1
bmN0aW9uLmdldCgpOyB9CiAgICAgSlNGdW5jdGlvbiogaW5pdGlhbGl6ZVByb21pc2VGdW5jdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbGl6ZVByb21pc2VGdW5jdGlvbi5nZXQoKTsgfQog
ICAgIEpTRnVuY3Rpb24qIG5ld1Byb21pc2VDYXBhYmlsaXR5RnVuY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBtX25ld1Byb21pc2VDYXBhYmlsaXR5RnVuY3Rpb24uZ2V0KCk7IH0KKyAgICBKU0Z1bmN0
aW9uKiBuZXdSZXNvbHZlZFByb21pc2VDYXBhYmlsaXR5RnVuY3Rpb24oKSBjb25zdCB7IHJldHVy
biBtX25ld1Jlc29sdmVkUHJvbWlzZUNhcGFiaWxpdHlGdW5jdGlvbi5nZXQoKTsgfQorICAgIEpT
RnVuY3Rpb24qIG5ld1JlamVjdGVkUHJvbWlzZUNhcGFiaWxpdHlGdW5jdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fbmV3UmVqZWN0ZWRQcm9taXNlQ2FwYWJpbGl0eUZ1bmN0aW9uLmdldCgpOyB9CiAg
ICAgR2V0dGVyU2V0dGVyKiB0aHJvd1R5cGVFcnJvckdldHRlclNldHRlcihWTSYgdm0pCiAgICAg
ewogICAgICAgICBpZiAoIW1fdGhyb3dUeXBlRXJyb3JHZXR0ZXJTZXR0ZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uanMKaW5kZXggYTM2YTY4
YmUyODFjMWJmNzM1ZGJhYjcxNzQyZjcxMTYxOTY2MmIyNS4uNzg1YTU1ZDFlZGM3ZjkyNzFlYmM1
MzU3Yjg4NGQxN2MzNTRiMTdhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
dHJlYW1zL1JlYWRhYmxlU3RyZWFtLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Ry
ZWFtcy9SZWFkYWJsZVN0cmVhbS5qcwpAQCAtNTYsNyArNTYsNyBAQCBmdW5jdGlvbiBpbml0aWFs
aXplUmVhZGFibGVTdHJlYW0odW5kZXJseWluZ1NvdXJjZSwgc3RyYXRlZ3kpCiAKICAgICB2YXIg
cmVzdWx0ID0gQGludm9rZU9yTm9vcCh1bmRlcmx5aW5nU291cmNlLCAic3RhcnQiLCBbdGhpcy5A
Y29udHJvbGxlcl0pOwogICAgIHZhciBfdGhpcyA9IHRoaXM7Ci0gICAgUHJvbWlzZS5yZXNvbHZl
KHJlc3VsdCkudGhlbihmdW5jdGlvbigpIHsKKyAgICBAUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCku
dGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgX3RoaXMuQHN0YXJ0ZWQgPSB0cnVlOwogICAgICAg
ICBAcmVxdWVzdFJlYWRhYmxlU3RyZWFtUHVsbChfdGhpcyk7CiAgICAgfSwgZnVuY3Rpb24oZXJy
b3IpIHsKQEAgLTcyLDEwICs3MiwxMCBAQCBmdW5jdGlvbiBjYW5jZWwocmVhc29uKQogICAgICJ1
c2Ugc3RyaWN0IjsKIAogICAgIGlmICghQGlzUmVhZGFibGVTdHJlYW0odGhpcykpCi0gICAgICAg
IHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQFR5cGVFcnJvcigiRnVuY3Rpb24gc2hvdWxkIGJl
IGNhbGxlZCBvbiBhIFJlYWRhYmxlU3RyZWFtIikpOworICAgICAgICByZXR1cm4gQFByb21pc2Uu
cmVqZWN0KG5ldyBAVHlwZUVycm9yKCJGdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9uIGEgUmVh
ZGFibGVTdHJlYW0iKSk7CiAKICAgICBpZiAoQGlzUmVhZGFibGVTdHJlYW1Mb2NrZWQodGhpcykp
Ci0gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQFR5cGVFcnJvcigiUmVhZGFibGVT
dHJlYW0gaXMgbG9ja2VkIikpOworICAgICAgICByZXR1cm4gQFByb21pc2UucmVqZWN0KG5ldyBA
VHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbSBpcyBsb2NrZWQiKSk7CiAKICAgICByZXR1cm4gQGNh
bmNlbFJlYWRhYmxlU3RyZWFtKHRoaXMsIHJlYXNvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanMKaW5k
ZXggOWYzZjdjZDY3YTIwOTUzNDA0MGRkODMxMDVlNDAxYTAxZmI5MTNlYy4uN2IwZGZiOGM0YzBh
MTRkNTVkMmZkOTNiYjg5NTQyNzNhMWYxMGYyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbUludGVybmFscy5qcwpAQCAtNDIs
MTkgKzQyLDE5IEBAIGZ1bmN0aW9uIHByaXZhdGVJbml0aWFsaXplUmVhZGFibGVTdHJlYW1SZWFk
ZXIoc3RyZWFtKQogICAgICAgICB0aGlzLkBvd25lclJlYWRhYmxlU3RyZWFtID0gc3RyZWFtOwog
ICAgICAgICB0aGlzLkBzdG9yZWRFcnJvciA9IHVuZGVmaW5lZDsKICAgICAgICAgc3RyZWFtLkBy
ZWFkZXIgPSB0aGlzOwotICAgICAgICB0aGlzLkBjbG9zZWRQcm9taXNlID0gQGNyZWF0ZU5ld1N0
cmVhbXNQcm9taXNlKCk7CisgICAgICAgIHRoaXMuQGNsb3NlZFByb21pc2UgPSBAbmV3UHJvbWlz
ZUNhcGFiaWxpdHkoQFByb21pc2UpOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CiAgICAg
aWYgKHN0cmVhbS5Ac3RhdGUgPT09IEBzdHJlYW1DbG9zZWQpIHsKICAgICAgICAgdGhpcy5Ab3du
ZXJSZWFkYWJsZVN0cmVhbSA9IG51bGw7CiAgICAgICAgIHRoaXMuQHN0b3JlZEVycm9yID0gdW5k
ZWZpbmVkOwotICAgICAgICB0aGlzLkBjbG9zZWRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7
CisgICAgICAgIHRoaXMuQGNsb3NlZFByb21pc2UgPSBAbmV3UmVzb2x2ZWRQcm9taXNlQ2FwYWJp
bGl0eShAUHJvbWlzZSwgdW5kZWZpbmVkKTsKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQog
ICAgIC8vIEZJWE1FOiBBU1NFUlQoc3RyZWFtLkBzdGF0ZSA9PT0gQHN0cmVhbUVycm9yZWQpOwog
ICAgIHRoaXMuQG93bmVyUmVhZGFibGVTdHJlYW0gPSBudWxsOwogICAgIHRoaXMuQHN0b3JlZEVy
cm9yID0gc3RyZWFtLkBzdG9yZWRFcnJvcjsKLSAgICB0aGlzLkBjbG9zZWRQcm9taXNlID0gUHJv
bWlzZS5yZWplY3Qoc3RyZWFtLkBzdG9yZWRFcnJvcik7CisgICAgdGhpcy5AY2xvc2VkUHJvbWlz
ZSA9IEBuZXdSZWplY3RlZFByb21pc2VDYXBhYmlsaXR5KEBQcm9taXNlLCBzdHJlYW0uQHN0b3Jl
ZEVycm9yKTsKIAogICAgIHJldHVybiB0aGlzOwogfQpAQCAtODksMTAgKzg5LDcgQEAgZnVuY3Rp
b24gdGVlUmVhZGFibGVTdHJlYW0oc3RyZWFtLCBzaG91bGRDbG9uZSkKICAgICAgICAgcmVhc29u
OiB1bmRlZmluZWQsCiAgICAgfTsKIAotICAgIHRlZVN0YXRlLmNhbmNlbFByb21pc2UgPSBuZXcg
QEludGVybmFsUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICB0ZWVT
dGF0ZS5yZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7Ci0gICAgICAgdGVlU3RhdGUucmVqZWN0UHJv
bWlzZSA9IHJlamVjdDsKLSAgICB9KTsKKyAgICB0ZWVTdGF0ZS5jYW5jZWxQcm9taXNlID0gQG5l
d1Byb21pc2VDYXBhYmlsaXR5KEBJbnRlcm5hbFByb21pc2UpOwogCiAgICAgbGV0IHB1bGxGdW5j
dGlvbiA9IEB0ZWVSZWFkYWJsZVN0cmVhbVB1bGxGdW5jdGlvbih0ZWVTdGF0ZSwgcmVhZGVyLCBz
aG91bGRDbG9uZSk7CiAKQEAgLTE1Myw5ICsxNTAsOSBAQCBmdW5jdGlvbiB0ZWVSZWFkYWJsZVN0
cmVhbUJyYW5jaDFDYW5jZWxGdW5jdGlvbih0ZWVTdGF0ZSwgc3RyZWFtKQogICAgICAgICB0ZWVT
dGF0ZS5jYW5jZWxlZDEgPSB0cnVlOwogICAgICAgICB0ZWVTdGF0ZS5yZWFzb24xID0gcjsKICAg
ICAgICAgaWYgKHRlZVN0YXRlLmNhbmNlbGVkMikgewotICAgICAgICAgICAgQGNhbmNlbFJlYWRh
YmxlU3RyZWFtKHN0cmVhbSwgW3RlZVN0YXRlLnJlYXNvbjEsIHRlZVN0YXRlLnJlYXNvbjJdKS50
aGVuKHRlZVN0YXRlLnJlc29sdmVQcm9taXNlLCB0ZWVTdGF0ZS5yZWplY3RQcm9taXNlKTsKKyAg
ICAgICAgICAgIEBjYW5jZWxSZWFkYWJsZVN0cmVhbShzdHJlYW0sIFt0ZWVTdGF0ZS5yZWFzb24x
LCB0ZWVTdGF0ZS5yZWFzb24yXSkudGhlbih0ZWVTdGF0ZS5jYW5jZWxQcm9taXNlLkByZXNvbHZl
LCB0ZWVTdGF0ZS5jYW5jZWxQcm9taXNlLkByZWplY3QpOwogICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0ZWVTdGF0ZS5jYW5jZWxQcm9taXNlOworICAgICAgICByZXR1cm4gdGVlU3RhdGUuY2Fu
Y2VsUHJvbWlzZS5AcHJvbWlzZTsKICAgICB9CiB9CiAKQEAgLTE2NSw5ICsxNjIsOSBAQCBmdW5j
dGlvbiB0ZWVSZWFkYWJsZVN0cmVhbUJyYW5jaDJDYW5jZWxGdW5jdGlvbih0ZWVTdGF0ZSwgc3Ry
ZWFtKQogICAgICAgICB0ZWVTdGF0ZS5jYW5jZWxlZDIgPSB0cnVlOwogICAgICAgICB0ZWVTdGF0
ZS5yZWFzb24yID0gcjsKICAgICAgICAgaWYgKHRlZVN0YXRlLmNhbmNlbGVkMSkgewotICAgICAg
ICAgICAgQGNhbmNlbFJlYWRhYmxlU3RyZWFtKHN0cmVhbSwgW3RlZVN0YXRlLnJlYXNvbjEsIHRl
ZVN0YXRlLnJlYXNvbjJdKS50aGVuKHRlZVN0YXRlLnJlc29sdmVQcm9taXNlLCB0ZWVTdGF0ZS5y
ZWplY3RQcm9taXNlKTsKKyAgICAgICAgICAgIEBjYW5jZWxSZWFkYWJsZVN0cmVhbShzdHJlYW0s
IFt0ZWVTdGF0ZS5yZWFzb24xLCB0ZWVTdGF0ZS5yZWFzb24yXSkudGhlbih0ZWVTdGF0ZS5jYW5j
ZWxQcm9taXNlLkByZXNvbHZlLCB0ZWVTdGF0ZS5jYW5jZWxQcm9taXNlLkByZWplY3QpOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0ZWVTdGF0ZS5jYW5jZWxQcm9taXNlOworICAgICAgICBy
ZXR1cm4gdGVlU3RhdGUuY2FuY2VsUHJvbWlzZS5AcHJvbWlzZTsKICAgICB9CiB9CiAKQEAgLTIw
NywxNCArMjA0LDE0IEBAIGZ1bmN0aW9uIGVycm9yUmVhZGFibGVTdHJlYW0oc3RyZWFtLCBlcnJv
cikKIAogICAgIHZhciByZXF1ZXN0cyA9IHJlYWRlci5AcmVhZFJlcXVlc3RzOwogICAgIGZvciAo
dmFyIGluZGV4ID0gMCwgbGVuZ3RoID0gcmVxdWVzdHMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsg
KytpbmRleCkKLSAgICAgICAgQHJlamVjdFN0cmVhbXNQcm9taXNlKHJlcXVlc3RzW2luZGV4XSwg
ZXJyb3IpOworICAgICAgICByZXF1ZXN0c1tpbmRleF0uQHJlamVjdC5AY2FsbCh1bmRlZmluZWQs
IGVycm9yKTsKICAgICByZWFkZXIuQHJlYWRSZXF1ZXN0cyA9IFtdOwogCiAgICAgQHJlbGVhc2VS
ZWFkYWJsZVN0cmVhbVJlYWRlcihyZWFkZXIpOwogICAgIHJlYWRlci5Ac3RvcmVkRXJyb3IgPSBl
cnJvcjsKICAgICByZWFkZXIuQHN0YXRlID0gQHN0cmVhbUVycm9yZWQ7CiAKLSAgICBAcmVqZWN0
U3RyZWFtc1Byb21pc2UocmVhZGVyLkBjbG9zZWRQcm9taXNlLCBlcnJvcik7CisgICAgcmVhZGVy
LkBjbG9zZWRQcm9taXNlLkByZWplY3QuQGNhbGwodW5kZWZpbmVkLCBlcnJvcik7CiB9CiAKIGZ1
bmN0aW9uIHJlcXVlc3RSZWFkYWJsZVN0cmVhbVB1bGwoc3RyZWFtKQpAQCAtMjc2LDkgKzI3Myw5
IEBAIGZ1bmN0aW9uIGNhbmNlbFJlYWRhYmxlU3RyZWFtKHN0cmVhbSwgcmVhc29uKQogICAgICJ1
c2Ugc3RyaWN0IjsKIAogICAgIGlmIChzdHJlYW0uQHN0YXRlID09PSBAc3RyZWFtQ2xvc2VkKQot
ICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIHJldHVybiBAUHJvbWlz
ZS5yZXNvbHZlKCk7CiAgICAgaWYgKHN0cmVhbS5Ac3RhdGUgPT09IEBzdHJlYW1FcnJvcmVkKQot
ICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoc3RyZWFtLkBzdG9yZWRFcnJvcik7CisgICAg
ICAgIHJldHVybiBAUHJvbWlzZS5yZWplY3Qoc3RyZWFtLkBzdG9yZWRFcnJvcik7CiAgICAgc3Ry
ZWFtLkBxdWV1ZSA9IEBuZXdRdWV1ZSgpOwogICAgIEBmaW5pc2hDbG9zaW5nUmVhZGFibGVTdHJl
YW0oc3RyZWFtKTsKICAgICByZXR1cm4gQHByb21pc2VJbnZva2VPck5vb3Aoc3RyZWFtLkB1bmRl
cmx5aW5nU291cmNlLCAiY2FuY2VsIiwgW3JlYXNvbl0pLnRoZW4oZnVuY3Rpb24oKSB7IH0pOwpA
QCAtMzE0LDExICszMTEsMTEgQEAgZnVuY3Rpb24gY2xvc2VSZWFkYWJsZVN0cmVhbVJlYWRlcihy
ZWFkZXIpCiAKICAgICB2YXIgcmVxdWVzdHMgPSByZWFkZXIuQHJlYWRSZXF1ZXN0czsKICAgICBm
b3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IHJlcXVlc3RzLmxlbmd0aDsgaW5kZXggPCBsZW5n
dGg7ICsraW5kZXgpCi0gICAgICAgIEByZXNvbHZlU3RyZWFtc1Byb21pc2UocmVxdWVzdHNbaW5k
ZXhdLCB7dmFsdWU6dW5kZWZpbmVkLCBkb25lOiB0cnVlfSk7CisgICAgICAgIHJlcXVlc3RzW2lu
ZGV4XS5AcmVzb2x2ZS5AY2FsbCh1bmRlZmluZWQsIHt2YWx1ZTp1bmRlZmluZWQsIGRvbmU6IHRy
dWV9KTsKICAgICByZWFkZXIuQHJlYWRSZXF1ZXN0cyA9IFtdOwogICAgIEByZWxlYXNlUmVhZGFi
bGVTdHJlYW1SZWFkZXIocmVhZGVyKTsKICAgICByZWFkZXIuQHN0YXRlID0gQHN0cmVhbUNsb3Nl
ZDsKLSAgICBAcmVzb2x2ZVN0cmVhbXNQcm9taXNlKHJlYWRlci5AY2xvc2VkUHJvbWlzZSk7Cisg
ICAgcmVhZGVyLkBjbG9zZWRQcm9taXNlLkByZXNvbHZlLkBjYWxsKHVuZGVmaW5lZCk7CiB9CiAK
IGZ1bmN0aW9uIGVucXVldWVJblJlYWRhYmxlU3RyZWFtKHN0cmVhbSwgY2h1bmspCkBAIC0zMzAs
NyArMzI3LDcgQEAgZnVuY3Rpb24gZW5xdWV1ZUluUmVhZGFibGVTdHJlYW0oc3RyZWFtLCBjaHVu
aykKICAgICBpZiAoc3RyZWFtLkBzdGF0ZSA9PT0gQHN0cmVhbUNsb3NlZCkKICAgICAgICAgcmV0
dXJuIHVuZGVmaW5lZDsKICAgICBpZiAoQGlzUmVhZGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSAm
JiBzdHJlYW0uQHJlYWRlci5AcmVhZFJlcXVlc3RzLmxlbmd0aCkgewotICAgICAgICBAcmVzb2x2
ZVN0cmVhbXNQcm9taXNlKHN0cmVhbS5AcmVhZGVyLkByZWFkUmVxdWVzdHMuc2hpZnQoKSwge3Zh
bHVlOiBjaHVuaywgZG9uZTogZmFsc2V9KTsKKyAgICAgICAgc3RyZWFtLkByZWFkZXIuQHJlYWRS
ZXF1ZXN0cy5zaGlmdCgpLkByZXNvbHZlLkBjYWxsKHVuZGVmaW5lZCwge3ZhbHVlOiBjaHVuaywg
ZG9uZTogZmFsc2V9KTsKICAgICAgICAgQHJlcXVlc3RSZWFkYWJsZVN0cmVhbVB1bGwoc3RyZWFt
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM1NSw5ICszNTIsOSBAQCBmdW5jdGlvbiBy
ZWFkRnJvbVJlYWRhYmxlU3RyZWFtUmVhZGVyKHJlYWRlcikKICAgICAidXNlIHN0cmljdCI7CiAK
ICAgICBpZiAocmVhZGVyLkBzdGF0ZSA9PT0gQHN0cmVhbUNsb3NlZCkKLSAgICAgICAgcmV0dXJu
IFByb21pc2UucmVzb2x2ZSh7dmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZX0pOworICAgICAg
ICByZXR1cm4gQFByb21pc2UucmVzb2x2ZSh7dmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZX0p
OwogICAgIGlmIChyZWFkZXIuQHN0YXRlID09PSBAc3RyZWFtRXJyb3JlZCkKLSAgICAgICAgcmV0
dXJuIFByb21pc2UucmVqZWN0KHJlYWRlci5Ac3RvcmVkRXJyb3IpOworICAgICAgICByZXR1cm4g
QFByb21pc2UucmVqZWN0KHJlYWRlci5Ac3RvcmVkRXJyb3IpOwogICAgIC8vIEZJWE1FOiBBU1NF
UlQoISFyZWFkZXIuQG93bmVyUmVhZGFibGVTdHJlYW0pOwogICAgIC8vIEZJWE1FOiBBU1NFUlQo
cmVhZGVyLkBvd25lclJlYWRhYmxlU3RyZWFtLkBzdGF0ZSA9PT0gQHN0cmVhbVJlYWRhYmxlKTsK
ICAgICB2YXIgc3RyZWFtID0gcmVhZGVyLkBvd25lclJlYWRhYmxlU3RyZWFtOwpAQCAtMzY3LDEw
ICszNjQsMTAgQEAgZnVuY3Rpb24gcmVhZEZyb21SZWFkYWJsZVN0cmVhbVJlYWRlcihyZWFkZXIp
CiAgICAgICAgICAgICBAcmVxdWVzdFJlYWRhYmxlU3RyZWFtUHVsbChzdHJlYW0pOwogICAgICAg
ICBlbHNlIGlmICghc3RyZWFtLkBxdWV1ZS5jb250ZW50Lmxlbmd0aCkKICAgICAgICAgICAgIEBm
aW5pc2hDbG9zaW5nUmVhZGFibGVTdHJlYW0oc3RyZWFtKTsKLSAgICAgICAgcmV0dXJuIFByb21p
c2UucmVzb2x2ZSh7dmFsdWU6IGNodW5rLCBkb25lOiBmYWxzZX0pOworICAgICAgICByZXR1cm4g
QFByb21pc2UucmVzb2x2ZSh7dmFsdWU6IGNodW5rLCBkb25lOiBmYWxzZX0pOwogICAgIH0KLSAg
ICB2YXIgcmVhZFByb21pc2UgPSBAY3JlYXRlTmV3U3RyZWFtc1Byb21pc2UoKTsKKyAgICB2YXIg
cmVhZFByb21pc2UgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoQFByb21pc2UpOwogICAgIHJlYWRl
ci5AcmVhZFJlcXVlc3RzLnB1c2gocmVhZFByb21pc2UpOwogICAgIEByZXF1ZXN0UmVhZGFibGVT
dHJlYW1QdWxsKHN0cmVhbSk7Ci0gICAgcmV0dXJuIHJlYWRQcm9taXNlOworICAgIHJldHVybiBy
ZWFkUHJvbWlzZS5AcHJvbWlzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRlci5qcyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRlci5qcwppbmRleCA5YmFhNDllMzI4Yzc1OTQ1
ZjMzN2M0NzM2YmUzZTg3MmJiMjc3MGYzLi4zZTcxNjFmMGU3OWFlMzc5YzI4YzNkZDQ3M2Q0Nzhh
MmYwMzcxNDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVh
ZGFibGVTdHJlYW1SZWFkZXIuanMKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1z
L1JlYWRhYmxlU3RyZWFtUmVhZGVyLmpzCkBAIC0zMCwxMyArMzAsMTMgQEAgZnVuY3Rpb24gY2Fu
Y2VsKHJlYXNvbikKICAgICAidXNlIHN0cmljdCI7CiAKICAgICBpZiAoIUBpc1JlYWRhYmxlU3Ry
ZWFtUmVhZGVyKHRoaXMpKQotICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEBUeXBl
RXJyb3IoIkZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb24gYSBSZWFkYWJsZVN0cmVhbVJlYWRl
ciIpKTsKKyAgICAgICAgcmV0dXJuIEBQcm9taXNlLnJlamVjdChuZXcgQFR5cGVFcnJvcigiRnVu
Y3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbiBhIFJlYWRhYmxlU3RyZWFtUmVhZGVyIikpOwogCiAg
ICAgaWYgKHRoaXMuQHN0YXRlID09PSBAc3RyZWFtQ2xvc2VkKQotICAgICAgICByZXR1cm4gUHJv
bWlzZS5yZXNvbHZlKCk7CisgICAgICAgIHJldHVybiBAUHJvbWlzZS5yZXNvbHZlKCk7CiAKICAg
ICBpZiAodGhpcy5Ac3RhdGUgPT09IEBzdHJlYW1FcnJvcmVkKQotICAgICAgICByZXR1cm4gUHJv
bWlzZS5yZWplY3QodGhpcy5Ac3RvcmVkRXJyb3IpOworICAgICAgICByZXR1cm4gQFByb21pc2Uu
cmVqZWN0KHRoaXMuQHN0b3JlZEVycm9yKTsKIAogICAgIC8vIEZJWE1FOiBBU1NFUlQoQGlzUmVh
ZGFibGVTdHJlYW0odGhpcy5Ab3duZXJSZWFkYWJsZVN0cmVhbSkpOwogICAgIC8vIEZJWE1FOiBB
U1NFUlQodGhpcy5Ab3duZXJSZWFkYWJsZVN0cmVhbS5Ac3RhdGUgPT09IEBzdHJlYW1SZWFkYWJs
ZSk7CkBAIC00OCw3ICs0OCw3IEBAIGZ1bmN0aW9uIHJlYWQoKQogICAgICJ1c2Ugc3RyaWN0IjsK
IAogICAgIGlmICghQGlzUmVhZGFibGVTdHJlYW1SZWFkZXIodGhpcykpCi0gICAgICAgIHJldHVy
biBQcm9taXNlLnJlamVjdChuZXcgQFR5cGVFcnJvcigiRnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxl
ZCBvbiBhIFJlYWRhYmxlU3RyZWFtUmVhZGVyIikpOworICAgICAgICByZXR1cm4gQFByb21pc2Uu
cmVqZWN0KG5ldyBAVHlwZUVycm9yKCJGdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9uIGEgUmVh
ZGFibGVTdHJlYW1SZWFkZXIiKSk7CiAKICAgICByZXR1cm4gQHJlYWRGcm9tUmVhZGFibGVTdHJl
YW1SZWFkZXIodGhpcyk7CiB9CkBAIC03NCw3ICs3NCw3IEBAIGZ1bmN0aW9uIGNsb3NlZCgpCiAg
ICAgInVzZSBzdHJpY3QiOwogCiAgICAgaWYgKCFAaXNSZWFkYWJsZVN0cmVhbVJlYWRlcih0aGlz
KSkKLSAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBAVHlwZUVycm9yKCJDYWxsZWUg
b2YgY2xvc2VkIGlzIG5vdCBhIFJlYWRhYmxlU3RyZWFtUmVhZGVyIikpOworICAgICAgICByZXR1
cm4gQFByb21pc2UucmVqZWN0KG5ldyBAVHlwZUVycm9yKCJDYWxsZWUgb2YgY2xvc2VkIGlzIG5v
dCBhIFJlYWRhYmxlU3RyZWFtUmVhZGVyIikpOwogCi0gICAgcmV0dXJuIHRoaXMuQGNsb3NlZFBy
b21pc2U7CisgICAgcmV0dXJuIHRoaXMuQGNsb3NlZFByb21pc2UuQHByb21pc2U7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvU3RyZWFtSW50ZXJuYWxzLmpz
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1N0cmVhbUludGVybmFscy5qcwppbmRl
eCBjYjIzYWYzNzc5ZDY0YzFmNjBhMGI2ZGZkNTA0Y2M3MTMyZTQ5ODBiLi4wNDc1YzUxMGU3ZjBk
ZDJlOTUwODhmYjQ1YzY1N2FiOGI1YTA2ZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3N0cmVhbXMvU3RyZWFtSW50ZXJuYWxzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvc3RyZWFtcy9TdHJlYW1JbnRlcm5hbHMuanMKQEAgLTQ0LDEyICs0NCwxMiBAQCBmdW5j
dGlvbiBwcm9taXNlSW52b2tlT3JOb29wKG9iamVjdCwga2V5LCBhcmdzKQogICAgIHRyeSB7CiAg
ICAgICAgIHZhciBtZXRob2QgPSBvYmplY3Rba2V5XTsKICAgICAgICAgaWYgKHR5cGVvZiBtZXRo
b2QgPT09ICJ1bmRlZmluZWQiKQotICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgp
OworICAgICAgICAgICAgcmV0dXJuIEBQcm9taXNlLnJlc29sdmUoKTsKICAgICAgICAgdmFyIHJl
c3VsdCA9IG1ldGhvZC5AYXBwbHkob2JqZWN0LCBhcmdzKTsKLSAgICAgICAgcmV0dXJuIFByb21p
c2UucmVzb2x2ZShyZXN1bHQpOworICAgICAgICByZXR1cm4gQFByb21pc2UucmVzb2x2ZShyZXN1
bHQpOwogICAgIH0KICAgICBjYXRjaChlcnJvcikgewotICAgICAgICByZXR1cm4gUHJvbWlzZS5y
ZWplY3QoZXJyb3IpOworICAgICAgICByZXR1cm4gQFByb21pc2UucmVqZWN0KGVycm9yKTsKICAg
ICB9CiAKIH0KQEAgLTYzLDEwICs2MywxMCBAQCBmdW5jdGlvbiBwcm9taXNlSW52b2tlT3JGYWxs
YmFja09yTm9vcChvYmplY3QsIGtleTEsIGFyZ3MxLCBrZXkyLCBhcmdzMikKICAgICAgICAgaWYg
KHR5cGVvZiBtZXRob2QgPT09ICJ1bmRlZmluZWQiKQogICAgICAgICAgICAgcmV0dXJuIEBwcm9t
aXNlSW52b2tlT3JOb29wKG9iamVjdCwga2V5MiwgYXJnczIpOwogICAgICAgICBjb25zdCByZXN1
bHQgPSBtZXRob2QuQGFwcGx5KG9iamVjdCwgYXJnczEpOwotICAgICAgICByZXR1cm4gUHJvbWlz
ZS5yZXNvbHZlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBAUHJvbWlzZS5yZXNvbHZlKHJlc3Vs
dCk7CiAgICAgfQogICAgIGNhdGNoKGVycm9yKSB7Ci0gICAgICAgIHJldHVybiBQcm9taXNlLnJl
amVjdChlcnJvcik7CisgICAgICAgIHJldHVybiBAUHJvbWlzZS5yZWplY3QoZXJyb3IpOwogICAg
IH0KIH0KIApAQCAtOTAsNDMgKzkwLDYgQEAgZnVuY3Rpb24gdmFsaWRhdGVBbmROb3JtYWxpemVR
dWV1aW5nU3RyYXRlZ3koc2l6ZSwgaGlnaFdhdGVyTWFyaykKICAgICByZXR1cm4gbm9ybWFsaXpl
ZFN0cmF0ZWd5OwogfQogCi1mdW5jdGlvbiBjcmVhdGVOZXdTdHJlYW1zUHJvbWlzZSgpCi17Ci0g
ICAgInVzZSBzdHJpY3QiOwotCi0gICAgdmFyIHJlc29sdmVGdW5jdGlvbjsKLSAgICB2YXIgcmVq
ZWN0RnVuY3Rpb247Ci0gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNv
bHZlLCByZWplY3QpIHsKLSAgICAgICAgcmVzb2x2ZUZ1bmN0aW9uID0gcmVzb2x2ZTsKLSAgICAg
ICAgcmVqZWN0RnVuY3Rpb24gPSByZWplY3Q7Ci0gICAgfSk7Ci0gICAgcHJvbWlzZS5AcmVzb2x2
ZSA9IHJlc29sdmVGdW5jdGlvbjsKLSAgICBwcm9taXNlLkByZWplY3QgPSByZWplY3RGdW5jdGlv
bjsKLSAgICByZXR1cm4gcHJvbWlzZTsKLX0KLQotZnVuY3Rpb24gcmVzb2x2ZVN0cmVhbXNQcm9t
aXNlKHByb21pc2UsIHZhbHVlKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIGlmIChwcm9t
aXNlICYmIHByb21pc2UuQHJlc29sdmUpIHsKLSAgICAgICAgcHJvbWlzZS5AcmVzb2x2ZSh2YWx1
ZSk7Ci0gICAgICAgIHByb21pc2UuQHJlc29sdmUgPSB1bmRlZmluZWQ7Ci0gICAgICAgIHByb21p
c2UuQHJlamVjdCA9IHVuZGVmaW5lZDsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIHJlamVjdFN0cmVh
bXNQcm9taXNlKHByb21pc2UsIHZhbHVlKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIGlm
IChwcm9taXNlICYmIHByb21pc2UuQHJlamVjdCkgewotICAgICAgICBwcm9taXNlLkByZWplY3Qo
dmFsdWUpOwotICAgICAgICBwcm9taXNlLkByZXNvbHZlID0gdW5kZWZpbmVkOwotICAgICAgICBw
cm9taXNlLkByZWplY3QgPSB1bmRlZmluZWQ7Ci0gICAgfQotfQotCiBmdW5jdGlvbiBuZXdRdWV1
ZSgpCiB7CiAgICAgcmV0dXJuIHsgY29udGVudDogW10sIHNpemU6IDAgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbS5qcyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbS5qcwppbmRleCA1ZGM4YWI5
ZGNhNGEzZDNjN2MwNTJjOTkyMzkyNDE5NjRiZjhhYjhjLi5jZGE4NWVjOWQxMTk1MjI4NmI2ZWQ0
ODkwY2NjMThjMDk5Yjk2OGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0
cmVhbXMvV3JpdGFibGVTdHJlYW0uanMKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJl
YW1zL1dyaXRhYmxlU3RyZWFtLmpzCkBAIC00Miw4ICs0Miw4IEBAIGZ1bmN0aW9uIGluaXRpYWxp
emVXcml0YWJsZVN0cmVhbSh1bmRlcmx5aW5nU2luaywgc3RyYXRlZ3kpCiAgICAgICAgIHRocm93
IG5ldyBAVHlwZUVycm9yKCJXcml0YWJsZVN0cmVhbSBjb25zdHJ1Y3RvciB0YWtlcyBhbiBvYmpl
Y3QgYXMgc2Vjb25kIGFyZ3VtZW50LCBpZiBhbnkiKTsKIAogICAgIHRoaXMuQHVuZGVybHlpbmdT
aW5rID0gdW5kZXJseWluZ1Npbms7Ci0gICAgdGhpcy5AY2xvc2VkUHJvbWlzZSA9IEBjcmVhdGVO
ZXdTdHJlYW1zUHJvbWlzZSgpOwotICAgIHRoaXMuQHJlYWR5UHJvbWlzZSA9IFByb21pc2UucmVz
b2x2ZSh1bmRlZmluZWQpOworICAgIHRoaXMuQGNsb3NlZFByb21pc2UgPSBAbmV3UHJvbWlzZUNh
cGFiaWxpdHkoQFByb21pc2UpOworICAgIHRoaXMuQHJlYWR5UHJvbWlzZSA9IEBuZXdSZXNvbHZl
ZFByb21pc2VDYXBhYmlsaXR5KEBQcm9taXNlLCB1bmRlZmluZWQpOwogICAgIHRoaXMuQHF1ZXVl
ID0gQG5ld1F1ZXVlKCk7CiAgICAgdGhpcy5Ac3RhdGUgPSBAc3RyZWFtV3JpdGFibGU7CiAgICAg
dGhpcy5Ac3RhcnRlZCA9IGZhbHNlOwpAQCAtNTUsOSArNTUsOSBAQCBmdW5jdGlvbiBpbml0aWFs
aXplV3JpdGFibGVTdHJlYW0odW5kZXJseWluZ1NpbmssIHN0cmF0ZWd5KQogCiAgICAgdmFyIGVy
cm9yID0gQGVycm9yV3JpdGFibGVTdHJlYW0uYmluZCh0aGlzKTsKICAgICB2YXIgc3RhcnRSZXN1
bHQgPSBAaW52b2tlT3JOb29wKHVuZGVybHlpbmdTaW5rLCAic3RhcnQiLCBbZXJyb3JdKTsKLSAg
ICB0aGlzLkBzdGFydGVkUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShzdGFydFJlc3VsdCk7Cisg
ICAgdGhpcy5Ac3RhcnRlZFByb21pc2UgPSBAbmV3UmVzb2x2ZWRQcm9taXNlQ2FwYWJpbGl0eShA
UHJvbWlzZSwgc3RhcnRSZXN1bHQpOwogICAgIHZhciBfdGhpcyA9IHRoaXM7Ci0gICAgdGhpcy5A
c3RhcnRlZFByb21pc2UudGhlbihmdW5jdGlvbigpIHsKKyAgICB0aGlzLkBzdGFydGVkUHJvbWlz
ZS5AcHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICBfdGhpcy5Ac3RhcnRlZCA9IHRy
dWU7CiAgICAgICAgIF90aGlzLkBzdGFydGVkUHJvbWlzZSA9IHVuZGVmaW5lZDsKICAgICB9LCBl
cnJvcik7CkBAIC03MCwxMyArNzAsMTMgQEAgZnVuY3Rpb24gYWJvcnQocmVhc29uKQogICAgICJ1
c2Ugc3RyaWN0IjsKIAogICAgIGlmICghQGlzV3JpdGFibGVTdHJlYW0odGhpcykpCi0gICAgICAg
IHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQFR5cGVFcnJvcigiVGhlIFdyaXRhYmxlU3RyZWFt
LmFib3J0IG1ldGhvZCBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBvZiBXcml0YWJsZVN0
cmVhbSIpKTsKKyAgICAgICAgcmV0dXJuIEBQcm9taXNlLnJlamVjdChuZXcgQFR5cGVFcnJvcigi
VGhlIFdyaXRhYmxlU3RyZWFtLmFib3J0IG1ldGhvZCBjYW4gb25seSBiZSB1c2VkIG9uIGluc3Rh
bmNlcyBvZiBXcml0YWJsZVN0cmVhbSIpKTsKIAogICAgIGlmICh0aGlzLkBzdGF0ZSA9PT0gQHN0
cmVhbUNsb3NlZCkKLSAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpOwor
ICAgICAgICByZXR1cm4gQFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpOwogCiAgICAgaWYgKHRo
aXMuQHN0YXRlID09PSBAc3RyZWFtRXJyb3JlZCkKLSAgICAgICAgcmV0dXJuIFByb21pc2UucmVq
ZWN0KHRoaXMuQHN0b3JlZEVycm9yKTsKKyAgICAgICAgcmV0dXJuIEBQcm9taXNlLnJlamVjdCh0
aGlzLkBzdG9yZWRFcnJvcik7CiAKICAgICBAZXJyb3JXcml0YWJsZVN0cmVhbS5AYXBwbHkodGhp
cywgW3JlYXNvbl0pOwogCkBAIC05MCwyMiArOTAsMjIgQEAgZnVuY3Rpb24gY2xvc2UoKQogICAg
ICJ1c2Ugc3RyaWN0IjsKIAogICAgIGlmICghQGlzV3JpdGFibGVTdHJlYW0odGhpcykpCi0gICAg
ICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQFR5cGVFcnJvcigiVGhlIFdyaXRhYmxlU3Ry
ZWFtLmNsb3NlIG1ldGhvZCBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBvZiBXcml0YWJs
ZVN0cmVhbSIpKTsKKyAgICAgICAgcmV0dXJuIEBQcm9taXNlLnJlamVjdChuZXcgQFR5cGVFcnJv
cigiVGhlIFdyaXRhYmxlU3RyZWFtLmNsb3NlIG1ldGhvZCBjYW4gb25seSBiZSB1c2VkIG9uIGlu
c3RhbmNlcyBvZiBXcml0YWJsZVN0cmVhbSIpKTsKIAogICAgIGlmICh0aGlzLkBzdGF0ZSA9PT0g
QHN0cmVhbUNsb3NlZCB8fCB0aGlzLkBzdGF0ZSA9PT0gQHN0cmVhbUNsb3NpbmcpCi0gICAgICAg
IHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQFR5cGVFcnJvcigiQ2Fubm90IGNsb3NlIGEgV3Jp
dGFibGVTdHJpbmcgdGhhdCBpcyBjbG9zZWQgb3IgY2xvc2luZyIpKTsKKyAgICAgICAgcmV0dXJu
IEBQcm9taXNlLnJlamVjdChuZXcgQFR5cGVFcnJvcigiQ2Fubm90IGNsb3NlIGEgV3JpdGFibGVT
dHJpbmcgdGhhdCBpcyBjbG9zZWQgb3IgY2xvc2luZyIpKTsKIAogICAgIGlmICh0aGlzLkBzdGF0
ZSA9PT0gQHN0cmVhbUVycm9yZWQpCi0gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlz
LkBzdG9yZWRFcnJvcik7CisgICAgICAgIHJldHVybiBAUHJvbWlzZS5yZWplY3QodGhpcy5Ac3Rv
cmVkRXJyb3IpOwogCiAgICAgaWYgKHRoaXMuQHN0YXRlID09PSBAc3RyZWFtV2FpdGluZykKLSAg
ICAgICAgQHJlc29sdmVTdHJlYW1zUHJvbWlzZSh0aGlzLkByZWFkeVByb21pc2UsIHVuZGVmaW5l
ZCk7CisgICAgICAgIHRoaXMuQHJlYWR5UHJvbWlzZS5AcmVzb2x2ZS5AY2FsbCh1bmRlZmluZWQs
IHVuZGVmaW5lZCk7CiAKICAgICB0aGlzLkBzdGF0ZSA9IEBzdHJlYW1DbG9zaW5nOwogICAgIEBl
bnF1ZXVlVmFsdWVXaXRoU2l6ZSh0aGlzLkBxdWV1ZSwgImNsb3NlIiwgMCk7CiAgICAgQGNhbGxP
clNjaGVkdWxlV3JpdGFibGVTdHJlYW1BZHZhbmNlUXVldWUodGhpcyk7CiAKLSAgICByZXR1cm4g
dGhpcy5AY2xvc2VkUHJvbWlzZTsKKyAgICByZXR1cm4gdGhpcy5AY2xvc2VkUHJvbWlzZS5AcHJv
bWlzZTsKIH0KIAogZnVuY3Rpb24gd3JpdGUoY2h1bmspCkBAIC0xMTMsMTMgKzExMywxMyBAQCBm
dW5jdGlvbiB3cml0ZShjaHVuaykKICAgICAidXNlIHN0cmljdCI7CiAKICAgICBpZiAoIUBpc1dy
aXRhYmxlU3RyZWFtKHRoaXMpKQotICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEBU
eXBlRXJyb3IoIlRoZSBXcml0YWJsZVN0cmVhbS5jbG9zZSBtZXRob2QgY2FuIG9ubHkgYmUgdXNl
ZCBvbiBpbnN0YW5jZXMgb2YgV3JpdGFibGVTdHJlYW0iKSk7CisgICAgICAgIHJldHVybiBAUHJv
bWlzZS5yZWplY3QobmV3IEBUeXBlRXJyb3IoIlRoZSBXcml0YWJsZVN0cmVhbS5jbG9zZSBtZXRo
b2QgY2FuIG9ubHkgYmUgdXNlZCBvbiBpbnN0YW5jZXMgb2YgV3JpdGFibGVTdHJlYW0iKSk7CiAK
ICAgICBpZiAodGhpcy5Ac3RhdGUgPT09IEBzdHJlYW1DbG9zZWQgfHwgdGhpcy5Ac3RhdGUgPT09
IEBzdHJlYW1DbG9zaW5nKQotICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEBUeXBl
RXJyb3IoIkNhbm5vdCB3cml0ZSBvbiBhIFdyaXRhYmxlU3RyaW5nIHRoYXQgaXMgY2xvc2VkIG9y
IGNsb3NpbmciKSk7CisgICAgICAgIHJldHVybiBAUHJvbWlzZS5yZWplY3QobmV3IEBUeXBlRXJy
b3IoIkNhbm5vdCB3cml0ZSBvbiBhIFdyaXRhYmxlU3RyaW5nIHRoYXQgaXMgY2xvc2VkIG9yIGNs
b3NpbmciKSk7CiAKICAgICBpZiAodGhpcy5Ac3RhdGUgPT09IEBzdHJlYW1FcnJvcmVkKQotICAg
ICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5Ac3RvcmVkRXJyb3IpOworICAgICAgICBy
ZXR1cm4gQFByb21pc2UucmVqZWN0KHRoaXMuQHN0b3JlZEVycm9yKTsKIAogICAgIC8vIEZJWE1F
CiAgICAgLy8gYXNzZXJ0KHRoaXMuQHN0YXRlID09PSBAc3RyZWFtV3JpdGFibGUgfHwgdGhpcy5A
c3RhdGUgPT09IEBzdHJlYW1XYWl0aW5nKTsKQEAgLTEzMCwyMiArMTMwLDIyIEBAIGZ1bmN0aW9u
IHdyaXRlKGNodW5rKQogICAgICAgICAgICAgY2h1bmtTaXplID0gdGhpcy5Ac3RyYXRlZ3kuc2l6
ZS5AY2FsbCh1bmRlZmluZWQsIGNodW5rKTsKICAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAg
ICAgICBAZXJyb3JXcml0YWJsZVN0cmVhbS5AY2FsbCh0aGlzLCBlKTsKLSAgICAgICAgICAgIHJl
dHVybiBQcm9taXNlLnJlamVjdChlKTsKKyAgICAgICAgICAgIHJldHVybiBAUHJvbWlzZS5yZWpl
Y3QoZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjb25zdCBwcm9taXNlID0gQGNyZWF0ZU5l
d1N0cmVhbXNQcm9taXNlKCk7CisgICAgY29uc3QgcHJvbWlzZSA9IEBuZXdQcm9taXNlQ2FwYWJp
bGl0eShAUHJvbWlzZSk7CiAgICAgdHJ5IHsKICAgICAgICAgQGVucXVldWVWYWx1ZVdpdGhTaXpl
KHRoaXMuQHF1ZXVlLCB7IHByb21pc2U6IHByb21pc2UsIGNodW5rOiBjaHVuayB9LCBjaHVua1Np
emUpOwogICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgQGVycm9yV3JpdGFibGVTdHJlYW0uQGNh
bGwodGhpcywgZSk7Ci0gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTsKKyAgICAgICAg
cmV0dXJuIEBQcm9taXNlLnJlamVjdChlKTsKICAgICB9CiAKICAgICBAc3luY1dyaXRhYmxlU3Ry
ZWFtU3RhdGVXaXRoUXVldWUodGhpcyk7CiAgICAgQGNhbGxPclNjaGVkdWxlV3JpdGFibGVTdHJl
YW1BZHZhbmNlUXVldWUodGhpcyk7CiAKLSAgICByZXR1cm4gcHJvbWlzZTsKKyAgICByZXR1cm4g
cHJvbWlzZS5AcHJvbWlzZTsKIH0KIAogZnVuY3Rpb24gY2xvc2VkKCkKQEAgLTE1Myw5ICsxNTMs
OSBAQCBmdW5jdGlvbiBjbG9zZWQoKQogICAgICJ1c2Ugc3RyaWN0IjsKIAogICAgIGlmICghQGlz
V3JpdGFibGVTdHJlYW0odGhpcykpCi0gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcg
QFR5cGVFcnJvcigiVGhlIFdyaXRhYmxlU3RyZWFtLmNsb3NlZCBnZXR0ZXIgY2FuIG9ubHkgYmUg
dXNlZCBvbiBpbnN0YW5jZXMgb2YgV3JpdGFibGVTdHJlYW0iKSk7CisgICAgICAgIHJldHVybiBA
UHJvbWlzZS5yZWplY3QobmV3IEBUeXBlRXJyb3IoIlRoZSBXcml0YWJsZVN0cmVhbS5jbG9zZWQg
Z2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9mIFdyaXRhYmxlU3RyZWFtIikp
OwogCi0gICAgcmV0dXJuIHRoaXMuQGNsb3NlZFByb21pc2U7CisgICAgcmV0dXJuIHRoaXMuQGNs
b3NlZFByb21pc2UuQHByb21pc2U7CiB9CiAKIGZ1bmN0aW9uIHJlYWR5KCkKQEAgLTE2Myw5ICsx
NjMsOSBAQCBmdW5jdGlvbiByZWFkeSgpCiAgICAgInVzZSBzdHJpY3QiOwogCiAgICAgaWYgKCFA
aXNXcml0YWJsZVN0cmVhbSh0aGlzKSkKLSAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5l
dyBAVHlwZUVycm9yKCJUaGUgV3JpdGFibGVTdHJlYW0ucmVhZHkgZ2V0dGVyIGNhbiBvbmx5IGJl
IHVzZWQgb24gaW5zdGFuY2VzIG9mIFdyaXRhYmxlU3RyZWFtIikpOworICAgICAgICByZXR1cm4g
QFByb21pc2UucmVqZWN0KG5ldyBAVHlwZUVycm9yKCJUaGUgV3JpdGFibGVTdHJlYW0ucmVhZHkg
Z2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9mIFdyaXRhYmxlU3RyZWFtIikp
OwogCi0gICAgcmV0dXJuIHRoaXMuQHJlYWR5UHJvbWlzZTsKKyAgICByZXR1cm4gdGhpcy5AcmVh
ZHlQcm9taXNlLkBwcm9taXNlOwogfQogCiBmdW5jdGlvbiBzdGF0ZSgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvV3JpdGFibGVTdHJlYW1JbnRlcm5hbHMuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvV3JpdGFibGVTdHJlYW1JbnRlcm5hbHMu
anMKaW5kZXggZWI3N2JmNWRmN2ViYTdjYzY3ODUyNzE5NzE4YjZjOWQ3ODAxYzJhZC4uNjdhZTNi
ZmM0OTEzMjI3MDcwZjAzODM5M2NiY2FmMGJmOGNlODAwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbUludGVybmFscy5qcwpA
QCAtNDYsMTAgKzQ2LDEwIEBAIGZ1bmN0aW9uIHN5bmNXcml0YWJsZVN0cmVhbVN0YXRlV2l0aFF1
ZXVlKHN0cmVhbSkKIAogICAgIGlmIChzdHJlYW0uQHF1ZXVlLnNpemUgPiBzdHJlYW0uQHN0cmF0
ZWd5LmhpZ2hXYXRlck1hcmspIHsKICAgICAgICAgc3RyZWFtLkBzdGF0ZSA9IEBzdHJlYW1XYWl0
aW5nOwotICAgICAgICBzdHJlYW0uQHJlYWR5UHJvbWlzZSA9IEBjcmVhdGVOZXdTdHJlYW1zUHJv
bWlzZSgpOworICAgICAgICBzdHJlYW0uQHJlYWR5UHJvbWlzZSA9IEBuZXdQcm9taXNlQ2FwYWJp
bGl0eShAUHJvbWlzZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3RyZWFtLkBzdGF0ZSA9IEBz
dHJlYW1Xcml0YWJsZTsKLSAgICAgICAgQHJlc29sdmVTdHJlYW1zUHJvbWlzZShzdHJlYW0uQHJl
YWR5UHJvbWlzZSwgdW5kZWZpbmVkKTsKKyAgICAgICAgc3RyZWFtLkByZWFkeVByb21pc2UuQHJl
c29sdmUuQGNhbGwodW5kZWZpbmVkLCB1bmRlZmluZWQpOwogICAgIH0KIAogICAgIHJldHVybiB1
bmRlZmluZWQ7CkBAIC02MywxMyArNjMsMTMgQEAgZnVuY3Rpb24gZXJyb3JXcml0YWJsZVN0cmVh
bShlKQogICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgIHdoaWxlICh0aGlzLkBxdWV1ZS5j
b250ZW50Lmxlbmd0aCA+IDApIHsKICAgICAgICAgdmFyIHdyaXRlUmVjb3JkID0gQGRlcXVldWVW
YWx1ZSh0aGlzLkBxdWV1ZSk7Ci0gICAgICAgIGlmICh3cml0ZVJlY29yZCAhPT0gImNsb3NlIiAm
JiB3cml0ZVJlY29yZC5wcm9taXNlKQotICAgICAgICAgICAgQHJlamVjdFN0cmVhbXNQcm9taXNl
KHdyaXRlUmVjb3JkLnByb21pc2UsIGUpOworICAgICAgICBpZiAod3JpdGVSZWNvcmQgIT09ICJj
bG9zZSIpCisgICAgICAgICAgICB3cml0ZVJlY29yZC5wcm9taXNlLkByZWplY3QuQGNhbGwodW5k
ZWZpbmVkLCBlKTsKICAgICB9CiAgICAgdGhpcy5Ac3RvcmVkRXJyb3IgPSBlOwogICAgIGlmICh0
aGlzLkBzdGF0ZSA9PT0gQHN0cmVhbVdhaXRpbmcpCi0gICAgICAgIEByZXNvbHZlU3RyZWFtc1By
b21pc2UodGhpcy5AcmVhZHlQcm9taXNlLCB1bmRlZmluZWQpOwotICAgIEByZWplY3RTdHJlYW1z
UHJvbWlzZSh0aGlzLkBjbG9zZWRQcm9taXNlLCBlKTsKKyAgICAgICAgdGhpcy5AcmVhZHlQcm9t
aXNlLkByZXNvbHZlLkBjYWxsKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsKKyAgICB0aGlzLkBjbG9z
ZWRQcm9taXNlLkByZWplY3QuQGNhbGwodW5kZWZpbmVkLCBlKTsKICAgICB0aGlzLkBzdGF0ZSA9
IEBzdHJlYW1FcnJvcmVkOwogICAgIHJldHVybiB1bmRlZmluZWQ7CiB9CkBAIC03Nyw3ICs3Nyw3
IEBAIGZ1bmN0aW9uIGVycm9yV3JpdGFibGVTdHJlYW0oZSkKIGZ1bmN0aW9uIGNhbGxPclNjaGVk
dWxlV3JpdGFibGVTdHJlYW1BZHZhbmNlUXVldWUoc3RyZWFtKQogewogICAgIGlmICghc3RyZWFt
LkBzdGFydGVkKQotICAgICAgICBzdHJlYW0uQHN0YXJ0ZWRQcm9taXNlLnRoZW4oZnVuY3Rpb24o
KSB7IEB3cml0YWJsZVN0cmVhbUFkdmFuY2VRdWV1ZShzdHJlYW0pOyB9KTsKKyAgICAgICAgc3Ry
ZWFtLkBzdGFydGVkUHJvbWlzZS5AcHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkgeyBAd3JpdGFibGVT
dHJlYW1BZHZhbmNlUXVldWUoc3RyZWFtKTsgfSk7CiAgICAgZWxzZQogICAgICAgICBAd3JpdGFi
bGVTdHJlYW1BZHZhbmNlUXVldWUoc3RyZWFtKTsKIApAQCAtMTA2LDcgKzEwNiw3IEBAIGZ1bmN0
aW9uIHdyaXRhYmxlU3RyZWFtQWR2YW5jZVF1ZXVlKHN0cmVhbSkKICAgICAgICAgICAgIGlmIChz
dHJlYW0uQHN0YXRlID09PSBAc3RyZWFtRXJyb3JlZCkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICBzdHJlYW0uQHdyaXRpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIEByZXNv
bHZlU3RyZWFtc1Byb21pc2Uod3JpdGVSZWNvcmQucHJvbWlzZSwgdW5kZWZpbmVkKTsKKyAgICAg
ICAgICAgIHdyaXRlUmVjb3JkLnByb21pc2UuQHJlc29sdmUuQGNhbGwodW5kZWZpbmVkLCB1bmRl
ZmluZWQpOwogICAgICAgICAgICAgQGRlcXVldWVWYWx1ZShzdHJlYW0uQHF1ZXVlKTsKICAgICAg
ICAgICAgIEBzeW5jV3JpdGFibGVTdHJlYW1TdGF0ZVdpdGhRdWV1ZShzdHJlYW0pOwogICAgICAg
ICAgICAgQHdyaXRhYmxlU3RyZWFtQWR2YW5jZVF1ZXVlKHN0cmVhbSk7CkBAIC0xMjksNyArMTI5
LDcgQEAgZnVuY3Rpb24gY2xvc2VXcml0YWJsZVN0cmVhbShzdHJlYW0pCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgLy8gRklYTUUKICAgICAgICAgICAgIC8vIGFzc2VydChz
dHJlYW0uQHN0YXRlID09PSBAc3RyZWFtQ2xvc2luZyk7Ci0gICAgICAgICAgICBAcmVzb2x2ZVN0
cmVhbXNQcm9taXNlKHN0cmVhbS5AY2xvc2VkUHJvbWlzZSwgdW5kZWZpbmVkKTsKKyAgICAgICAg
ICAgIHN0cmVhbS5AY2xvc2VkUHJvbWlzZS5AcmVzb2x2ZS5AY2FsbCh1bmRlZmluZWQsIHVuZGVm
aW5lZCk7CiAgICAgICAgICAgICBzdHJlYW0uQHN0YXRlID0gQHN0cmVhbUNsb3NlZDsKICAgICAg
ICAgfSwKICAgICAgICAgZnVuY3Rpb24ocikgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264396</attachid>
            <date>2015-10-30 07:52:33 -0700</date>
            <delta_ts>2015-11-03 01:51:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150627-20151030155139.patch</filename>
            <type>text/plain</type>
            <size>15702</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI2MjA1ZTM2ODg1MmI2
ZmM3YzM0YTBjNzliYmEwOGJiY2MzZGMzYS4uYzVhMzRiZjA0YjUwNmUzYzkxMDI0OTRiNDRiZDZh
NDAxMWY2YWQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE1LTEwLTMwICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1N0
cmVhbXMgQVBJXSBSZXdvcmsgcHJvbWlzZXMgdG8gdXNlIEBuZXdQcm9taXNlQ2FwYWJpbGl0eSBh
bmQgYXMgbXVjaCBASW50ZXJuYWxQcm9taXNlIGFzIHBvc3NpYmxlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA2MjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBhcmUgcmVtb3ZpbmcgdGhlIHN0cmVh
bSBwcm9taXNlcyBmdW5jdGlvbnMgaW4gZmF2b3Igb2YgQG5ld1Byb21pc2VDYXBhYml0eSB3aGlj
aCBiYXNpY2FsbHkgcHJvdmlkZXMgdGhlIHNhbWUKKyAgICAgICAgZnVuY3Rpb25hbGl0eSAoa2Vl
cGluZyB0aGUgcmVzb2x2ZSBhbmQgcmVqZWN0IGZ1bmN0aW9ucyB3aXRob3V0IGV4dGVybmFsIHNs
b3RzKS4KKworICAgICAgICBXZSBhbHNvIHdhbnRlZCB0byB1c2UgSW50ZXJuYWxQcm9taXNlIGFz
IG11Y2ggYXMgcG9zc2libGUuIFRoZSBsaW1pdCBpcyBwcm9taXNlcyB0aGF0IHdlIGFyZSBnb2lu
ZyB0byBzaG93IHRvCisgICAgICAgIHRoZSBvdXRzaWRlIHdvcmxkIG9yIG1peCB3aXRoIGl0LCBt
ZWFuaW5nIHRoYXQgY2FuJ3QgcmVzb2x2ZSB0aGVtIGFnYWluc3Qgc29tZXRoaW5nIGNvbWluZyBm
cm9tIHRoZSB1c2VyIGJlY2F1c2UKKyAgICAgICAgaXQgY291bGQgYmUgYSBwcm9taXNlIGFuZCB3
ZSB3b3VsZCBicmVhayB0aGUgcHJvbWlzZSByZXNvbHV0aW9uIGNoYWluIG9yIGlmIHdlIGFyZSBn
b2luZyB0byBzaG93IHRoZW0gdG8gdGhlCisgICAgICAgIHVzZXIsIGJlY2F1c2Ugb2YgdGhlIHNh
bWUgcmVhc29uLgorCisgICAgICAgIEludGVybmFsIHJld29yaywgbm8gbmV3IHRlc3RzIG5lZWRl
ZC4KKworICAgICAgICAqIE1vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbUludGVybmFscy5q
czoKKyAgICAgICAgKHByaXZhdGVJbml0aWFsaXplUmVhZGFibGVTdHJlYW1SZWFkZXIudGhpcy5j
bG9zZWRQcm9taXNlLnJlc29sdmUpOgorICAgICAgICAocHJpdmF0ZUluaXRpYWxpemVSZWFkYWJs
ZVN0cmVhbVJlYWRlci50aGlzLmNsb3NlZFByb21pc2UucmVqZWN0KToKKyAgICAgICAgKHByaXZh
dGVJbml0aWFsaXplUmVhZGFibGVTdHJlYW1SZWFkZXIpOgorICAgICAgICAodGVlUmVhZGFibGVT
dHJlYW0pOgorICAgICAgICAodGVlUmVhZGFibGVTdHJlYW1CcmFuY2gyQ2FuY2VsRnVuY3Rpb24p
OgorICAgICAgICAoZXJyb3JSZWFkYWJsZVN0cmVhbSk6CisgICAgICAgIChjbG9zZVJlYWRhYmxl
U3RyZWFtUmVhZGVyKToKKyAgICAgICAgKGVucXVldWVJblJlYWRhYmxlU3RyZWFtKToKKyAgICAg
ICAgKHJlYWRGcm9tUmVhZGFibGVTdHJlYW1SZWFkZXIpOgorICAgICAgICAqIE1vZHVsZXMvc3Ry
ZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRlci5qczoKKyAgICAgICAgKGNsb3NlZCk6CisgICAgICAg
ICogTW9kdWxlcy9zdHJlYW1zL1N0cmVhbUludGVybmFscy5qczoKKyAgICAgICAgKGNyZWF0ZU5l
d1N0cmVhbXNQcm9taXNlKTogRGVsZXRlZC4KKyAgICAgICAgKHJlc29sdmVTdHJlYW1zUHJvbWlz
ZSk6IERlbGV0ZWQuCisgICAgICAgIChyZWplY3RTdHJlYW1zUHJvbWlzZSk6IERlbGV0ZWQuCisg
ICAgICAgICogTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3RyZWFtLmpzOgorICAgICAgICAodGhp
cy5yZWFkeVByb21pc2UucmVzb2x2ZSk6CisgICAgICAgICh0aGlzLnJlYWR5UHJvbWlzZS5yZWpl
Y3QpOgorICAgICAgICAodGhpcy5zdGFydGVkUHJvbWlzZS5yZXNvbHZlKToKKyAgICAgICAgKHRo
aXMuc3RhcnRlZFByb21pc2UucmVqZWN0KToKKyAgICAgICAgKGluaXRpYWxpemVXcml0YWJsZVN0
cmVhbSk6CisgICAgICAgIChjbG9zZSk6CisgICAgICAgICh3cml0ZSk6CisgICAgICAgIChjbG9z
ZWQpOgorICAgICAgICAocmVhZHkpOgorICAgICAgICAqIE1vZHVsZXMvc3RyZWFtcy9Xcml0YWJs
ZVN0cmVhbUludGVybmFscy5qczoKKyAgICAgICAgKHN5bmNXcml0YWJsZVN0cmVhbVN0YXRlV2l0
aFF1ZXVlKToKKyAgICAgICAgKGVycm9yV3JpdGFibGVTdHJlYW0pOgorICAgICAgICAoY2FsbE9y
U2NoZWR1bGVXcml0YWJsZVN0cmVhbUFkdmFuY2VRdWV1ZSk6CisKIDIwMTUtMTAtMjkgIFhhYmll
ciBSb2RyaWd1ZXogQ2FsdmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBbU3Ry
ZWFtcyBBUEldIFR1cm4gV1Mgc3RhdGVzIGludG8gaW50ZWdlcnMgYW5kIGZpeCBzdGF0ZSBpbml0
aWFsaXphdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1Jl
YWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1z
L1JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzCmluZGV4IDlmM2Y3Y2Q2N2EyMDk1MzQwNDBkZDgz
MTA1ZTQwMWEwMWZiOTEzZWMuLjE0N2EzZDY4MGI4NzI0ZGM0M2M3NGMxYjIwY2YzNjZhNmU5ZWVl
YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0
cmVhbUludGVybmFscy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVh
ZGFibGVTdHJlYW1JbnRlcm5hbHMuanMKQEAgLTQyLDE5ICs0MiwxOSBAQCBmdW5jdGlvbiBwcml2
YXRlSW5pdGlhbGl6ZVJlYWRhYmxlU3RyZWFtUmVhZGVyKHN0cmVhbSkKICAgICAgICAgdGhpcy5A
b3duZXJSZWFkYWJsZVN0cmVhbSA9IHN0cmVhbTsKICAgICAgICAgdGhpcy5Ac3RvcmVkRXJyb3Ig
PSB1bmRlZmluZWQ7CiAgICAgICAgIHN0cmVhbS5AcmVhZGVyID0gdGhpczsKLSAgICAgICAgdGhp
cy5AY2xvc2VkUHJvbWlzZSA9IEBjcmVhdGVOZXdTdHJlYW1zUHJvbWlzZSgpOworICAgICAgICB0
aGlzLkBjbG9zZWRQcm9taXNlID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KFByb21pc2UpOwogICAg
ICAgICByZXR1cm4gdGhpczsKICAgICB9CiAgICAgaWYgKHN0cmVhbS5Ac3RhdGUgPT09IEBzdHJl
YW1DbG9zZWQpIHsKICAgICAgICAgdGhpcy5Ab3duZXJSZWFkYWJsZVN0cmVhbSA9IG51bGw7CiAg
ICAgICAgIHRoaXMuQHN0b3JlZEVycm9yID0gdW5kZWZpbmVkOwotICAgICAgICB0aGlzLkBjbG9z
ZWRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIHRoaXMuQGNsb3NlZFByb21p
c2UgPSB7IEBwcm9taXNlOiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKSwgQHJlc29sdmU6IGZ1
bmN0aW9uKCkge30sIEByZWplY3Q6IGZ1bmN0aW9uKCkge30gfTsKICAgICAgICAgcmV0dXJuIHRo
aXM7CiAgICAgfQogICAgIC8vIEZJWE1FOiBBU1NFUlQoc3RyZWFtLkBzdGF0ZSA9PT0gQHN0cmVh
bUVycm9yZWQpOwogICAgIHRoaXMuQG93bmVyUmVhZGFibGVTdHJlYW0gPSBudWxsOwogICAgIHRo
aXMuQHN0b3JlZEVycm9yID0gc3RyZWFtLkBzdG9yZWRFcnJvcjsKLSAgICB0aGlzLkBjbG9zZWRQ
cm9taXNlID0gUHJvbWlzZS5yZWplY3Qoc3RyZWFtLkBzdG9yZWRFcnJvcik7CisgICAgdGhpcy5A
Y2xvc2VkUHJvbWlzZSA9IHsgQHByb21pc2U6IFByb21pc2UucmVqZWN0KHN0cmVhbS5Ac3RvcmVk
RXJyb3IpLCBAcmVzb2x2ZTogZnVuY3Rpb24oKSB7fSwgQHJlamVjdDogZnVuY3Rpb24oKSB7fSB9
OwogCiAgICAgcmV0dXJuIHRoaXM7CiB9CkBAIC04OSwxMCArODksNyBAQCBmdW5jdGlvbiB0ZWVS
ZWFkYWJsZVN0cmVhbShzdHJlYW0sIHNob3VsZENsb25lKQogICAgICAgICByZWFzb246IHVuZGVm
aW5lZCwKICAgICB9OwogCi0gICAgdGVlU3RhdGUuY2FuY2VsUHJvbWlzZSA9IG5ldyBASW50ZXJu
YWxQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewotICAgICAgIHRlZVN0YXRlLnJl
c29sdmVQcm9taXNlID0gcmVzb2x2ZTsKLSAgICAgICB0ZWVTdGF0ZS5yZWplY3RQcm9taXNlID0g
cmVqZWN0OwotICAgIH0pOworICAgIHRlZVN0YXRlLmNhbmNlbFByb21pc2UgPSBAbmV3UHJvbWlz
ZUNhcGFiaWxpdHkoQEludGVybmFsUHJvbWlzZSk7CiAKICAgICBsZXQgcHVsbEZ1bmN0aW9uID0g
QHRlZVJlYWRhYmxlU3RyZWFtUHVsbEZ1bmN0aW9uKHRlZVN0YXRlLCByZWFkZXIsIHNob3VsZENs
b25lKTsKIApAQCAtMTUzLDkgKzE1MCw5IEBAIGZ1bmN0aW9uIHRlZVJlYWRhYmxlU3RyZWFtQnJh
bmNoMUNhbmNlbEZ1bmN0aW9uKHRlZVN0YXRlLCBzdHJlYW0pCiAgICAgICAgIHRlZVN0YXRlLmNh
bmNlbGVkMSA9IHRydWU7CiAgICAgICAgIHRlZVN0YXRlLnJlYXNvbjEgPSByOwogICAgICAgICBp
ZiAodGVlU3RhdGUuY2FuY2VsZWQyKSB7Ci0gICAgICAgICAgICBAY2FuY2VsUmVhZGFibGVTdHJl
YW0oc3RyZWFtLCBbdGVlU3RhdGUucmVhc29uMSwgdGVlU3RhdGUucmVhc29uMl0pLnRoZW4odGVl
U3RhdGUucmVzb2x2ZVByb21pc2UsIHRlZVN0YXRlLnJlamVjdFByb21pc2UpOworICAgICAgICAg
ICAgQGNhbmNlbFJlYWRhYmxlU3RyZWFtKHN0cmVhbSwgW3RlZVN0YXRlLnJlYXNvbjEsIHRlZVN0
YXRlLnJlYXNvbjJdKS50aGVuKHRlZVN0YXRlLmNhbmNlbFByb21pc2UuQHJlc29sdmUsIHRlZVN0
YXRlLmNhbmNlbFByb21pc2UuQHJlamVjdCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRl
ZVN0YXRlLmNhbmNlbFByb21pc2U7CisgICAgICAgIHJldHVybiB0ZWVTdGF0ZS5jYW5jZWxQcm9t
aXNlLkBwcm9taXNlOwogICAgIH0KIH0KIApAQCAtMTY1LDkgKzE2Miw5IEBAIGZ1bmN0aW9uIHRl
ZVJlYWRhYmxlU3RyZWFtQnJhbmNoMkNhbmNlbEZ1bmN0aW9uKHRlZVN0YXRlLCBzdHJlYW0pCiAg
ICAgICAgIHRlZVN0YXRlLmNhbmNlbGVkMiA9IHRydWU7CiAgICAgICAgIHRlZVN0YXRlLnJlYXNv
bjIgPSByOwogICAgICAgICBpZiAodGVlU3RhdGUuY2FuY2VsZWQxKSB7Ci0gICAgICAgICAgICBA
Y2FuY2VsUmVhZGFibGVTdHJlYW0oc3RyZWFtLCBbdGVlU3RhdGUucmVhc29uMSwgdGVlU3RhdGUu
cmVhc29uMl0pLnRoZW4odGVlU3RhdGUucmVzb2x2ZVByb21pc2UsIHRlZVN0YXRlLnJlamVjdFBy
b21pc2UpOworICAgICAgICAgICAgQGNhbmNlbFJlYWRhYmxlU3RyZWFtKHN0cmVhbSwgW3RlZVN0
YXRlLnJlYXNvbjEsIHRlZVN0YXRlLnJlYXNvbjJdKS50aGVuKHRlZVN0YXRlLmNhbmNlbFByb21p
c2UuQHJlc29sdmUsIHRlZVN0YXRlLmNhbmNlbFByb21pc2UuQHJlamVjdCk7CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRlZVN0YXRlLmNhbmNlbFByb21pc2U7CisgICAgICAgIHJldHVybiB0
ZWVTdGF0ZS5jYW5jZWxQcm9taXNlLkBwcm9taXNlOwogICAgIH0KIH0KIApAQCAtMjA3LDE0ICsy
MDQsMTQgQEAgZnVuY3Rpb24gZXJyb3JSZWFkYWJsZVN0cmVhbShzdHJlYW0sIGVycm9yKQogCiAg
ICAgdmFyIHJlcXVlc3RzID0gcmVhZGVyLkByZWFkUmVxdWVzdHM7CiAgICAgZm9yICh2YXIgaW5k
ZXggPSAwLCBsZW5ndGggPSByZXF1ZXN0cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4
KQotICAgICAgICBAcmVqZWN0U3RyZWFtc1Byb21pc2UocmVxdWVzdHNbaW5kZXhdLCBlcnJvcik7
CisgICAgICAgIHJlcXVlc3RzW2luZGV4XS5AcmVqZWN0LkBjYWxsKHVuZGVmaW5lZCwgZXJyb3Ip
OwogICAgIHJlYWRlci5AcmVhZFJlcXVlc3RzID0gW107CiAKICAgICBAcmVsZWFzZVJlYWRhYmxl
U3RyZWFtUmVhZGVyKHJlYWRlcik7CiAgICAgcmVhZGVyLkBzdG9yZWRFcnJvciA9IGVycm9yOwog
ICAgIHJlYWRlci5Ac3RhdGUgPSBAc3RyZWFtRXJyb3JlZDsKIAotICAgIEByZWplY3RTdHJlYW1z
UHJvbWlzZShyZWFkZXIuQGNsb3NlZFByb21pc2UsIGVycm9yKTsKKyAgICByZWFkZXIuQGNsb3Nl
ZFByb21pc2UuQHJlamVjdC5AY2FsbCh1bmRlZmluZWQsIGVycm9yKTsKIH0KIAogZnVuY3Rpb24g
cmVxdWVzdFJlYWRhYmxlU3RyZWFtUHVsbChzdHJlYW0pCkBAIC0zMTQsMTEgKzMxMSwxMSBAQCBm
dW5jdGlvbiBjbG9zZVJlYWRhYmxlU3RyZWFtUmVhZGVyKHJlYWRlcikKIAogICAgIHZhciByZXF1
ZXN0cyA9IHJlYWRlci5AcmVhZFJlcXVlc3RzOwogICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVu
Z3RoID0gcmVxdWVzdHMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkKLSAgICAgICAg
QHJlc29sdmVTdHJlYW1zUHJvbWlzZShyZXF1ZXN0c1tpbmRleF0sIHt2YWx1ZTp1bmRlZmluZWQs
IGRvbmU6IHRydWV9KTsKKyAgICAgICAgcmVxdWVzdHNbaW5kZXhdLkByZXNvbHZlLkBjYWxsKHVu
ZGVmaW5lZCwge3ZhbHVlOnVuZGVmaW5lZCwgZG9uZTogdHJ1ZX0pOwogICAgIHJlYWRlci5AcmVh
ZFJlcXVlc3RzID0gW107CiAgICAgQHJlbGVhc2VSZWFkYWJsZVN0cmVhbVJlYWRlcihyZWFkZXIp
OwogICAgIHJlYWRlci5Ac3RhdGUgPSBAc3RyZWFtQ2xvc2VkOwotICAgIEByZXNvbHZlU3RyZWFt
c1Byb21pc2UocmVhZGVyLkBjbG9zZWRQcm9taXNlKTsKKyAgICByZWFkZXIuQGNsb3NlZFByb21p
c2UuQHJlc29sdmUuQGNhbGwodW5kZWZpbmVkKTsKIH0KIAogZnVuY3Rpb24gZW5xdWV1ZUluUmVh
ZGFibGVTdHJlYW0oc3RyZWFtLCBjaHVuaykKQEAgLTMzMCw3ICszMjcsNyBAQCBmdW5jdGlvbiBl
bnF1ZXVlSW5SZWFkYWJsZVN0cmVhbShzdHJlYW0sIGNodW5rKQogICAgIGlmIChzdHJlYW0uQHN0
YXRlID09PSBAc3RyZWFtQ2xvc2VkKQogICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgIGlm
IChAaXNSZWFkYWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pICYmIHN0cmVhbS5AcmVhZGVyLkByZWFk
UmVxdWVzdHMubGVuZ3RoKSB7Ci0gICAgICAgIEByZXNvbHZlU3RyZWFtc1Byb21pc2Uoc3RyZWFt
LkByZWFkZXIuQHJlYWRSZXF1ZXN0cy5zaGlmdCgpLCB7dmFsdWU6IGNodW5rLCBkb25lOiBmYWxz
ZX0pOworICAgICAgICBzdHJlYW0uQHJlYWRlci5AcmVhZFJlcXVlc3RzLnNoaWZ0KCkuQHJlc29s
dmUuQGNhbGwodW5kZWZpbmVkLCB7dmFsdWU6IGNodW5rLCBkb25lOiBmYWxzZX0pOwogICAgICAg
ICBAcmVxdWVzdFJlYWRhYmxlU3RyZWFtUHVsbChzdHJlYW0pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMzY5LDggKzM2Niw4IEBAIGZ1bmN0aW9uIHJlYWRGcm9tUmVhZGFibGVTdHJlYW1S
ZWFkZXIocmVhZGVyKQogICAgICAgICAgICAgQGZpbmlzaENsb3NpbmdSZWFkYWJsZVN0cmVhbShz
dHJlYW0pOwogICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt2YWx1ZTogY2h1bmssIGRv
bmU6IGZhbHNlfSk7CiAgICAgfQotICAgIHZhciByZWFkUHJvbWlzZSA9IEBjcmVhdGVOZXdTdHJl
YW1zUHJvbWlzZSgpOworICAgIHZhciByZWFkUHJvbWlzZSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0
eShQcm9taXNlKTsKICAgICByZWFkZXIuQHJlYWRSZXF1ZXN0cy5wdXNoKHJlYWRQcm9taXNlKTsK
ICAgICBAcmVxdWVzdFJlYWRhYmxlU3RyZWFtUHVsbChzdHJlYW0pOwotICAgIHJldHVybiByZWFk
UHJvbWlzZTsKKyAgICByZXR1cm4gcmVhZFByb21pc2UuQHByb21pc2U7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1SZWFkZXIuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1SZWFkZXIuanMK
aW5kZXggOWJhYTQ5ZTMyOGM3NTk0NWYzMzdjNDczNmJlM2U4NzJiYjI3NzBmMy4uNmUzNzY0MDZk
N2IzZTA5NWE1N2Y1MmY5N2FmZDk0ODIyZTUyMjgyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmpzCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRlci5qcwpAQCAtNzYsNSAr
NzYsNSBAQCBmdW5jdGlvbiBjbG9zZWQoKQogICAgIGlmICghQGlzUmVhZGFibGVTdHJlYW1SZWFk
ZXIodGhpcykpCiAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQFR5cGVFcnJvcigi
Q2FsbGVlIG9mIGNsb3NlZCBpcyBub3QgYSBSZWFkYWJsZVN0cmVhbVJlYWRlciIpKTsKIAotICAg
IHJldHVybiB0aGlzLkBjbG9zZWRQcm9taXNlOworICAgIHJldHVybiB0aGlzLkBjbG9zZWRQcm9t
aXNlLkBwcm9taXNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJl
YW1zL1N0cmVhbUludGVybmFscy5qcyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9T
dHJlYW1JbnRlcm5hbHMuanMKaW5kZXggY2IyM2FmMzc3OWQ2NGMxZjYwYTBiNmRmZDUwNGNjNzEz
MmU0OTgwYi4uMGJiZmY0ZWZhMzhlNDZkODFiYTlhMzJlZDkzMzk5N2VlYTMxZTc5MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1N0cmVhbUludGVybmFscy5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvU3RyZWFtSW50ZXJuYWxzLmpzCkBA
IC05MCw0MyArOTAsNiBAQCBmdW5jdGlvbiB2YWxpZGF0ZUFuZE5vcm1hbGl6ZVF1ZXVpbmdTdHJh
dGVneShzaXplLCBoaWdoV2F0ZXJNYXJrKQogICAgIHJldHVybiBub3JtYWxpemVkU3RyYXRlZ3k7
CiB9CiAKLWZ1bmN0aW9uIGNyZWF0ZU5ld1N0cmVhbXNQcm9taXNlKCkKLXsKLSAgICAidXNlIHN0
cmljdCI7Ci0KLSAgICB2YXIgcmVzb2x2ZUZ1bmN0aW9uOwotICAgIHZhciByZWplY3RGdW5jdGlv
bjsKLSAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVj
dCkgewotICAgICAgICByZXNvbHZlRnVuY3Rpb24gPSByZXNvbHZlOwotICAgICAgICByZWplY3RG
dW5jdGlvbiA9IHJlamVjdDsKLSAgICB9KTsKLSAgICBwcm9taXNlLkByZXNvbHZlID0gcmVzb2x2
ZUZ1bmN0aW9uOwotICAgIHByb21pc2UuQHJlamVjdCA9IHJlamVjdEZ1bmN0aW9uOwotICAgIHJl
dHVybiBwcm9taXNlOwotfQotCi1mdW5jdGlvbiByZXNvbHZlU3RyZWFtc1Byb21pc2UocHJvbWlz
ZSwgdmFsdWUpCi17Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgaWYgKHByb21pc2UgJiYgcHJv
bWlzZS5AcmVzb2x2ZSkgewotICAgICAgICBwcm9taXNlLkByZXNvbHZlKHZhbHVlKTsKLSAgICAg
ICAgcHJvbWlzZS5AcmVzb2x2ZSA9IHVuZGVmaW5lZDsKLSAgICAgICAgcHJvbWlzZS5AcmVqZWN0
ID0gdW5kZWZpbmVkOwotICAgIH0KLX0KLQotZnVuY3Rpb24gcmVqZWN0U3RyZWFtc1Byb21pc2Uo
cHJvbWlzZSwgdmFsdWUpCi17Ci0gICAgInVzZSBzdHJpY3QiOwotCi0gICAgaWYgKHByb21pc2Ug
JiYgcHJvbWlzZS5AcmVqZWN0KSB7Ci0gICAgICAgIHByb21pc2UuQHJlamVjdCh2YWx1ZSk7Ci0g
ICAgICAgIHByb21pc2UuQHJlc29sdmUgPSB1bmRlZmluZWQ7Ci0gICAgICAgIHByb21pc2UuQHJl
amVjdCA9IHVuZGVmaW5lZDsKLSAgICB9Ci19Ci0KIGZ1bmN0aW9uIG5ld1F1ZXVlKCkKIHsKICAg
ICByZXR1cm4geyBjb250ZW50OiBbXSwgc2l6ZTogMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3RyZWFtLmpzIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3RyZWFtLmpzCmluZGV4IDVkYzhhYjlkY2E0YTNkM2M3
YzA1MmM5OTIzOTI0MTk2NGJmOGFiOGMuLjQ4ZTk2ZjJkZDExNDU2MDBkZTQ2OWNmMmRmZmMyODhj
NWQxNzhmMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9Xcml0
YWJsZVN0cmVhbS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvV3JpdGFi
bGVTdHJlYW0uanMKQEAgLTQyLDggKzQyLDggQEAgZnVuY3Rpb24gaW5pdGlhbGl6ZVdyaXRhYmxl
U3RyZWFtKHVuZGVybHlpbmdTaW5rLCBzdHJhdGVneSkKICAgICAgICAgdGhyb3cgbmV3IEBUeXBl
RXJyb3IoIldyaXRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIHRha2VzIGFuIG9iamVjdCBhcyBzZWNv
bmQgYXJndW1lbnQsIGlmIGFueSIpOwogCiAgICAgdGhpcy5AdW5kZXJseWluZ1NpbmsgPSB1bmRl
cmx5aW5nU2luazsKLSAgICB0aGlzLkBjbG9zZWRQcm9taXNlID0gQGNyZWF0ZU5ld1N0cmVhbXNQ
cm9taXNlKCk7Ci0gICAgdGhpcy5AcmVhZHlQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVm
aW5lZCk7CisgICAgdGhpcy5AY2xvc2VkUHJvbWlzZSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShQ
cm9taXNlKTsKKyAgICB0aGlzLkByZWFkeVByb21pc2UgPSB7IEBwcm9taXNlOiBQcm9taXNlLnJl
c29sdmUodW5kZWZpbmVkKSwgQHJlc29sdmU6IGZ1bmN0aW9uKCkge30sIEByZWplY3Q6IGZ1bmN0
aW9uKCkge30gfTsKICAgICB0aGlzLkBxdWV1ZSA9IEBuZXdRdWV1ZSgpOwogICAgIHRoaXMuQHN0
YXRlID0gQHN0cmVhbVdyaXRhYmxlOwogICAgIHRoaXMuQHN0YXJ0ZWQgPSBmYWxzZTsKQEAgLTU1
LDkgKzU1LDkgQEAgZnVuY3Rpb24gaW5pdGlhbGl6ZVdyaXRhYmxlU3RyZWFtKHVuZGVybHlpbmdT
aW5rLCBzdHJhdGVneSkKIAogICAgIHZhciBlcnJvciA9IEBlcnJvcldyaXRhYmxlU3RyZWFtLmJp
bmQodGhpcyk7CiAgICAgdmFyIHN0YXJ0UmVzdWx0ID0gQGludm9rZU9yTm9vcCh1bmRlcmx5aW5n
U2luaywgInN0YXJ0IiwgW2Vycm9yXSk7Ci0gICAgdGhpcy5Ac3RhcnRlZFByb21pc2UgPSBQcm9t
aXNlLnJlc29sdmUoc3RhcnRSZXN1bHQpOworICAgIHRoaXMuQHN0YXJ0ZWRQcm9taXNlID0geyBA
cHJvbWlzZTogUHJvbWlzZS5yZXNvbHZlKHN0YXJ0UmVzdWx0KSwgQHJlc29sdmU6IGZ1bmN0aW9u
KCkge30sIEByZWplY3Q6IGZ1bmN0aW9uKCkge30gfTsKICAgICB2YXIgX3RoaXMgPSB0aGlzOwot
ICAgIHRoaXMuQHN0YXJ0ZWRQcm9taXNlLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgdGhpcy5Ac3Rh
cnRlZFByb21pc2UuQHByb21pc2UudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgX3RoaXMuQHN0
YXJ0ZWQgPSB0cnVlOwogICAgICAgICBfdGhpcy5Ac3RhcnRlZFByb21pc2UgPSB1bmRlZmluZWQ7
CiAgICAgfSwgZXJyb3IpOwpAQCAtOTksMTMgKzk5LDEzIEBAIGZ1bmN0aW9uIGNsb3NlKCkKICAg
ICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuQHN0b3JlZEVycm9yKTsKIAogICAgIGlm
ICh0aGlzLkBzdGF0ZSA9PT0gQHN0cmVhbVdhaXRpbmcpCi0gICAgICAgIEByZXNvbHZlU3RyZWFt
c1Byb21pc2UodGhpcy5AcmVhZHlQcm9taXNlLCB1bmRlZmluZWQpOworICAgICAgICB0aGlzLkBy
ZWFkeVByb21pc2UuQHJlc29sdmUuQGNhbGwodW5kZWZpbmVkLCB1bmRlZmluZWQpOwogCiAgICAg
dGhpcy5Ac3RhdGUgPSBAc3RyZWFtQ2xvc2luZzsKICAgICBAZW5xdWV1ZVZhbHVlV2l0aFNpemUo
dGhpcy5AcXVldWUsICJjbG9zZSIsIDApOwogICAgIEBjYWxsT3JTY2hlZHVsZVdyaXRhYmxlU3Ry
ZWFtQWR2YW5jZVF1ZXVlKHRoaXMpOwogCi0gICAgcmV0dXJuIHRoaXMuQGNsb3NlZFByb21pc2U7
CisgICAgcmV0dXJuIHRoaXMuQGNsb3NlZFByb21pc2UuQHByb21pc2U7CiB9CiAKIGZ1bmN0aW9u
IHdyaXRlKGNodW5rKQpAQCAtMTM0LDcgKzEzNCw3IEBAIGZ1bmN0aW9uIHdyaXRlKGNodW5rKQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgY29uc3QgcHJvbWlzZSA9IEBjcmVhdGVOZXdTdHJlYW1z
UHJvbWlzZSgpOworICAgIGNvbnN0IHByb21pc2UgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoUHJv
bWlzZSk7CiAgICAgdHJ5IHsKICAgICAgICAgQGVucXVldWVWYWx1ZVdpdGhTaXplKHRoaXMuQHF1
ZXVlLCB7IHByb21pc2U6IHByb21pc2UsIGNodW5rOiBjaHVuayB9LCBjaHVua1NpemUpOwogICAg
IH0gY2F0Y2ggKGUpIHsKQEAgLTE0NSw3ICsxNDUsNyBAQCBmdW5jdGlvbiB3cml0ZShjaHVuaykK
ICAgICBAc3luY1dyaXRhYmxlU3RyZWFtU3RhdGVXaXRoUXVldWUodGhpcyk7CiAgICAgQGNhbGxP
clNjaGVkdWxlV3JpdGFibGVTdHJlYW1BZHZhbmNlUXVldWUodGhpcyk7CiAKLSAgICByZXR1cm4g
cHJvbWlzZTsKKyAgICByZXR1cm4gcHJvbWlzZS5AcHJvbWlzZTsKIH0KIAogZnVuY3Rpb24gY2xv
c2VkKCkKQEAgLTE1NSw3ICsxNTUsNyBAQCBmdW5jdGlvbiBjbG9zZWQoKQogICAgIGlmICghQGlz
V3JpdGFibGVTdHJlYW0odGhpcykpCiAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcg
QFR5cGVFcnJvcigiVGhlIFdyaXRhYmxlU3RyZWFtLmNsb3NlZCBnZXR0ZXIgY2FuIG9ubHkgYmUg
dXNlZCBvbiBpbnN0YW5jZXMgb2YgV3JpdGFibGVTdHJlYW0iKSk7CiAKLSAgICByZXR1cm4gdGhp
cy5AY2xvc2VkUHJvbWlzZTsKKyAgICByZXR1cm4gdGhpcy5AY2xvc2VkUHJvbWlzZS5AcHJvbWlz
ZTsKIH0KIAogZnVuY3Rpb24gcmVhZHkoKQpAQCAtMTY1LDcgKzE2NSw3IEBAIGZ1bmN0aW9uIHJl
YWR5KCkKICAgICBpZiAoIUBpc1dyaXRhYmxlU3RyZWFtKHRoaXMpKQogICAgICAgICByZXR1cm4g
UHJvbWlzZS5yZWplY3QobmV3IEBUeXBlRXJyb3IoIlRoZSBXcml0YWJsZVN0cmVhbS5yZWFkeSBn
ZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiBpbnN0YW5jZXMgb2YgV3JpdGFibGVTdHJlYW0iKSk7
CiAKLSAgICByZXR1cm4gdGhpcy5AcmVhZHlQcm9taXNlOworICAgIHJldHVybiB0aGlzLkByZWFk
eVByb21pc2UuQHByb21pc2U7CiB9CiAKIGZ1bmN0aW9uIHN0YXRlKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbUludGVybmFscy5qcyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbUludGVybmFscy5q
cwppbmRleCBlYjc3YmY1ZGY3ZWJhN2NjNjc4NTI3MTk3MThiNmM5ZDc4MDFjMmFkLi44ZjM4YzUz
YTliYjZlMDc0MzNiZTFiZjlhMmVjY2ZjMTBmYTI2NzQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3N0cmVhbXMvV3JpdGFibGVTdHJlYW1JbnRlcm5hbHMuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzCkBA
IC00NiwxMCArNDYsMTAgQEAgZnVuY3Rpb24gc3luY1dyaXRhYmxlU3RyZWFtU3RhdGVXaXRoUXVl
dWUoc3RyZWFtKQogCiAgICAgaWYgKHN0cmVhbS5AcXVldWUuc2l6ZSA+IHN0cmVhbS5Ac3RyYXRl
Z3kuaGlnaFdhdGVyTWFyaykgewogICAgICAgICBzdHJlYW0uQHN0YXRlID0gQHN0cmVhbVdhaXRp
bmc7Ci0gICAgICAgIHN0cmVhbS5AcmVhZHlQcm9taXNlID0gQGNyZWF0ZU5ld1N0cmVhbXNQcm9t
aXNlKCk7CisgICAgICAgIHN0cmVhbS5AcmVhZHlQcm9taXNlID0gQG5ld1Byb21pc2VDYXBhYmls
aXR5KFByb21pc2UpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHN0cmVhbS5Ac3RhdGUgPSBAc3Ry
ZWFtV3JpdGFibGU7Ci0gICAgICAgIEByZXNvbHZlU3RyZWFtc1Byb21pc2Uoc3RyZWFtLkByZWFk
eVByb21pc2UsIHVuZGVmaW5lZCk7CisgICAgICAgIHN0cmVhbS5AcmVhZHlQcm9taXNlLkByZXNv
bHZlLkBjYWxsKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsKICAgICB9CiAKICAgICByZXR1cm4gdW5k
ZWZpbmVkOwpAQCAtNjMsMTMgKzYzLDEzIEBAIGZ1bmN0aW9uIGVycm9yV3JpdGFibGVTdHJlYW0o
ZSkKICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICB3aGlsZSAodGhpcy5AcXVldWUuY29u
dGVudC5sZW5ndGggPiAwKSB7CiAgICAgICAgIHZhciB3cml0ZVJlY29yZCA9IEBkZXF1ZXVlVmFs
dWUodGhpcy5AcXVldWUpOwotICAgICAgICBpZiAod3JpdGVSZWNvcmQgIT09ICJjbG9zZSIgJiYg
d3JpdGVSZWNvcmQucHJvbWlzZSkKLSAgICAgICAgICAgIEByZWplY3RTdHJlYW1zUHJvbWlzZSh3
cml0ZVJlY29yZC5wcm9taXNlLCBlKTsKKyAgICAgICAgaWYgKHdyaXRlUmVjb3JkICE9PSAiY2xv
c2UiKQorICAgICAgICAgICAgd3JpdGVSZWNvcmQucHJvbWlzZS5AcmVqZWN0LkBjYWxsKHVuZGVm
aW5lZCwgZSk7CiAgICAgfQogICAgIHRoaXMuQHN0b3JlZEVycm9yID0gZTsKICAgICBpZiAodGhp
cy5Ac3RhdGUgPT09IEBzdHJlYW1XYWl0aW5nKQotICAgICAgICBAcmVzb2x2ZVN0cmVhbXNQcm9t
aXNlKHRoaXMuQHJlYWR5UHJvbWlzZSwgdW5kZWZpbmVkKTsKLSAgICBAcmVqZWN0U3RyZWFtc1By
b21pc2UodGhpcy5AY2xvc2VkUHJvbWlzZSwgZSk7CisgICAgICAgIHRoaXMuQHJlYWR5UHJvbWlz
ZS5AcmVzb2x2ZS5AY2FsbCh1bmRlZmluZWQsIHVuZGVmaW5lZCk7CisgICAgdGhpcy5AY2xvc2Vk
UHJvbWlzZS5AcmVqZWN0LkBjYWxsKHVuZGVmaW5lZCwgZSk7CiAgICAgdGhpcy5Ac3RhdGUgPSBA
c3RyZWFtRXJyb3JlZDsKICAgICByZXR1cm4gdW5kZWZpbmVkOwogfQpAQCAtNzcsNyArNzcsNyBA
QCBmdW5jdGlvbiBlcnJvcldyaXRhYmxlU3RyZWFtKGUpCiBmdW5jdGlvbiBjYWxsT3JTY2hlZHVs
ZVdyaXRhYmxlU3RyZWFtQWR2YW5jZVF1ZXVlKHN0cmVhbSkKIHsKICAgICBpZiAoIXN0cmVhbS5A
c3RhcnRlZCkKLSAgICAgICAgc3RyZWFtLkBzdGFydGVkUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkg
eyBAd3JpdGFibGVTdHJlYW1BZHZhbmNlUXVldWUoc3RyZWFtKTsgfSk7CisgICAgICAgIHN0cmVh
bS5Ac3RhcnRlZFByb21pc2UuQHByb21pc2UudGhlbihmdW5jdGlvbigpIHsgQHdyaXRhYmxlU3Ry
ZWFtQWR2YW5jZVF1ZXVlKHN0cmVhbSk7IH0pOwogICAgIGVsc2UKICAgICAgICAgQHdyaXRhYmxl
U3RyZWFtQWR2YW5jZVF1ZXVlKHN0cmVhbSk7CiAKQEAgLTEwNiw3ICsxMDYsNyBAQCBmdW5jdGlv
biB3cml0YWJsZVN0cmVhbUFkdmFuY2VRdWV1ZShzdHJlYW0pCiAgICAgICAgICAgICBpZiAoc3Ry
ZWFtLkBzdGF0ZSA9PT0gQHN0cmVhbUVycm9yZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgc3RyZWFtLkB3cml0aW5nID0gZmFsc2U7Ci0gICAgICAgICAgICBAcmVzb2x2
ZVN0cmVhbXNQcm9taXNlKHdyaXRlUmVjb3JkLnByb21pc2UsIHVuZGVmaW5lZCk7CisgICAgICAg
ICAgICB3cml0ZVJlY29yZC5wcm9taXNlLkByZXNvbHZlLkBjYWxsKHVuZGVmaW5lZCwgdW5kZWZp
bmVkKTsKICAgICAgICAgICAgIEBkZXF1ZXVlVmFsdWUoc3RyZWFtLkBxdWV1ZSk7CiAgICAgICAg
ICAgICBAc3luY1dyaXRhYmxlU3RyZWFtU3RhdGVXaXRoUXVldWUoc3RyZWFtKTsKICAgICAgICAg
ICAgIEB3cml0YWJsZVN0cmVhbUFkdmFuY2VRdWV1ZShzdHJlYW0pOwpAQCAtMTI5LDcgKzEyOSw3
IEBAIGZ1bmN0aW9uIGNsb3NlV3JpdGFibGVTdHJlYW0oc3RyZWFtKQogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIC8vIEZJWE1FCiAgICAgICAgICAgICAvLyBhc3NlcnQoc3Ry
ZWFtLkBzdGF0ZSA9PT0gQHN0cmVhbUNsb3NpbmcpOwotICAgICAgICAgICAgQHJlc29sdmVTdHJl
YW1zUHJvbWlzZShzdHJlYW0uQGNsb3NlZFByb21pc2UsIHVuZGVmaW5lZCk7CisgICAgICAgICAg
ICBzdHJlYW0uQGNsb3NlZFByb21pc2UuQHJlc29sdmUuQGNhbGwodW5kZWZpbmVkLCB1bmRlZmlu
ZWQpOwogICAgICAgICAgICAgc3RyZWFtLkBzdGF0ZSA9IEBzdHJlYW1DbG9zZWQ7CiAgICAgICAg
IH0sCiAgICAgICAgIGZ1bmN0aW9uKHIpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264676</attachid>
            <date>2015-11-03 01:51:06 -0800</date>
            <delta_ts>2015-11-03 06:52:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150627-20151103105009.patch</filename>
            <type>text/plain</type>
            <size>15956</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxODkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2U3ZjUzZjkzNTcwMGJl
YmIyYTM3ZDBiZjNkZWYyZWRjMjI2YjM3Ni4uMTI2Njc4Y2ViZDNjMzIwMzM3NWM2YjM2Yjg3ZjQw
MDY2YTNjYTIzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE1LTExLTAzICBYYWJp
ZXIgUm9kcmlndWV6IENhbHZhciAgPGNhbHZhcmlzQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1N0
cmVhbXMgQVBJXSBSZXdvcmsgcHJvbWlzZXMgdG8gdXNlIEBuZXdQcm9taXNlQ2FwYWJpbGl0eQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNjI3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgYXJlIHJl
bW92aW5nIHRoZSBzdHJlYW0gcHJvbWlzZXMgZnVuY3Rpb25zIGluIGZhdm9yIG9mIEBuZXdQcm9t
aXNlQ2FwYWJpdHkgd2hpY2ggYmFzaWNhbGx5IHByb3ZpZGVzIHRoZSBzYW1lCisgICAgICAgIGZ1
bmN0aW9uYWxpdHkgKGtlZXBpbmcgdGhlIHJlc29sdmUgYW5kIHJlamVjdCBmdW5jdGlvbnMgd2l0
aG91dCBleHRlcm5hbCBzbG90cykuIFNsb3RzIGFuZCB2YXJpYWJsZXMgd2VyZQorICAgICAgICBy
ZW5hbWVkIGFzICpQcm9taXNlQ2FwYWJpbGl0eSB0byBzaG93IHRoYXQgdGhleSBubyBsb25nZXIg
aG9sZCBqdXN0IGEgcHJvbWlzZSwgYnV0IGEgcHJvbWlzZSBjYXBhYmlsaXR5LgorCisgICAgICAg
IEludGVybmFsIHJld29yaywgbm8gbmV3IHRlc3RzIG5lZWRlZC4KKworICAgICAgICAqIE1vZHVs
ZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbUludGVybmFscy5qczoKKyAgICAgICAgKHByaXZhdGVJ
bml0aWFsaXplUmVhZGFibGVTdHJlYW1SZWFkZXIudGhpcy5jbG9zZWRQcm9taXNlQ2FwYWJpbGl0
eS5yZXNvbHZlKToKKyAgICAgICAgKHByaXZhdGVJbml0aWFsaXplUmVhZGFibGVTdHJlYW1SZWFk
ZXIudGhpcy5jbG9zZWRQcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QpOgorICAgICAgICAocHJpdmF0
ZUluaXRpYWxpemVSZWFkYWJsZVN0cmVhbVJlYWRlcik6CisgICAgICAgICh0ZWVSZWFkYWJsZVN0
cmVhbSk6CisgICAgICAgICh0ZWVSZWFkYWJsZVN0cmVhbUJyYW5jaDJDYW5jZWxGdW5jdGlvbik6
CisgICAgICAgIChlcnJvclJlYWRhYmxlU3RyZWFtKToKKyAgICAgICAgKGNsb3NlUmVhZGFibGVT
dHJlYW1SZWFkZXIpOgorICAgICAgICAoZW5xdWV1ZUluUmVhZGFibGVTdHJlYW0pOgorICAgICAg
ICAocmVhZEZyb21SZWFkYWJsZVN0cmVhbVJlYWRlcik6CisgICAgICAgICogTW9kdWxlcy9zdHJl
YW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVyLmpzOgorICAgICAgICAoY2xvc2VkKToKKyAgICAgICAg
KiBNb2R1bGVzL3N0cmVhbXMvU3RyZWFtSW50ZXJuYWxzLmpzOgorICAgICAgICAoY3JlYXRlTmV3
U3RyZWFtc1Byb21pc2UpOiBEZWxldGVkLgorICAgICAgICAocmVzb2x2ZVN0cmVhbXNQcm9taXNl
KTogRGVsZXRlZC4KKyAgICAgICAgKHJlamVjdFN0cmVhbXNQcm9taXNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvV3JpdGFibGVTdHJlYW0uanM6CisgICAgICAgICh0aGlz
LnJlYWR5UHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSk6CisgICAgICAgICh0aGlzLnJlYWR5UHJv
bWlzZUNhcGFiaWxpdHkucmVqZWN0KToKKyAgICAgICAgKGluaXRpYWxpemVXcml0YWJsZVN0cmVh
bSk6CisgICAgICAgIChjbG9zZSk6CisgICAgICAgICh3cml0ZSk6CisgICAgICAgIChjbG9zZWQp
OgorICAgICAgICAocmVhZHkpOgorICAgICAgICAqIE1vZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0
cmVhbUludGVybmFscy5qczoKKyAgICAgICAgKHN5bmNXcml0YWJsZVN0cmVhbVN0YXRlV2l0aFF1
ZXVlKToKKyAgICAgICAgKGVycm9yV3JpdGFibGVTdHJlYW0pOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaDoKKwogMjAxNS0xMS0wMiAgSHl1bmR1ayBLaW0gIDxo
eXVuZHVrLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBFbmFibGUgTWVkaWFTb3VyY2U6Omlz
VHlwZVN1cHBvcnRlZCgpIHRvIGhhbmRsZSB0aGUgdXBwZXItY2FzZWQgTUlNRSB0eXBlICYgQ29k
ZWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0
cmVhbUludGVybmFscy5qcyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJs
ZVN0cmVhbUludGVybmFscy5qcwppbmRleCA5ZjNmN2NkNjdhMjA5NTM0MDQwZGQ4MzEwNWU0MDFh
MDFmYjkxM2VjLi5jNzlkNmE5YjcwYzk2MDJjNDQ2OTNhZGE0ZDU2NzBlZjQyMGU1NDE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1JbnRl
cm5hbHMuanMKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3Ry
ZWFtSW50ZXJuYWxzLmpzCkBAIC00MiwxOSArNDIsMTkgQEAgZnVuY3Rpb24gcHJpdmF0ZUluaXRp
YWxpemVSZWFkYWJsZVN0cmVhbVJlYWRlcihzdHJlYW0pCiAgICAgICAgIHRoaXMuQG93bmVyUmVh
ZGFibGVTdHJlYW0gPSBzdHJlYW07CiAgICAgICAgIHRoaXMuQHN0b3JlZEVycm9yID0gdW5kZWZp
bmVkOwogICAgICAgICBzdHJlYW0uQHJlYWRlciA9IHRoaXM7Ci0gICAgICAgIHRoaXMuQGNsb3Nl
ZFByb21pc2UgPSBAY3JlYXRlTmV3U3RyZWFtc1Byb21pc2UoKTsKKyAgICAgICAgdGhpcy5AY2xv
c2VkUHJvbWlzZUNhcGFiaWxpdHkgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoUHJvbWlzZSk7CiAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KICAgICBpZiAoc3RyZWFtLkBzdGF0ZSA9PT0gQHN0
cmVhbUNsb3NlZCkgewogICAgICAgICB0aGlzLkBvd25lclJlYWRhYmxlU3RyZWFtID0gbnVsbDsK
ICAgICAgICAgdGhpcy5Ac3RvcmVkRXJyb3IgPSB1bmRlZmluZWQ7Ci0gICAgICAgIHRoaXMuQGNs
b3NlZFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTsKKyAgICAgICAgdGhpcy5AY2xvc2VkUHJv
bWlzZUNhcGFiaWxpdHkgPSB7IEBwcm9taXNlOiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKSwg
QHJlc29sdmU6IGZ1bmN0aW9uKCkge30sIEByZWplY3Q6IGZ1bmN0aW9uKCkge30gfTsKICAgICAg
ICAgcmV0dXJuIHRoaXM7CiAgICAgfQogICAgIC8vIEZJWE1FOiBBU1NFUlQoc3RyZWFtLkBzdGF0
ZSA9PT0gQHN0cmVhbUVycm9yZWQpOwogICAgIHRoaXMuQG93bmVyUmVhZGFibGVTdHJlYW0gPSBu
dWxsOwogICAgIHRoaXMuQHN0b3JlZEVycm9yID0gc3RyZWFtLkBzdG9yZWRFcnJvcjsKLSAgICB0
aGlzLkBjbG9zZWRQcm9taXNlID0gUHJvbWlzZS5yZWplY3Qoc3RyZWFtLkBzdG9yZWRFcnJvcik7
CisgICAgdGhpcy5AY2xvc2VkUHJvbWlzZUNhcGFiaWxpdHkgPSB7IEBwcm9taXNlOiBQcm9taXNl
LnJlamVjdChzdHJlYW0uQHN0b3JlZEVycm9yKSwgQHJlc29sdmU6IGZ1bmN0aW9uKCkge30sIEBy
ZWplY3Q6IGZ1bmN0aW9uKCkge30gfTsKIAogICAgIHJldHVybiB0aGlzOwogfQpAQCAtODksMTAg
Kzg5LDcgQEAgZnVuY3Rpb24gdGVlUmVhZGFibGVTdHJlYW0oc3RyZWFtLCBzaG91bGRDbG9uZSkK
ICAgICAgICAgcmVhc29uOiB1bmRlZmluZWQsCiAgICAgfTsKIAotICAgIHRlZVN0YXRlLmNhbmNl
bFByb21pc2UgPSBuZXcgQEludGVybmFsUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qp
IHsKLSAgICAgICB0ZWVTdGF0ZS5yZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7Ci0gICAgICAgdGVl
U3RhdGUucmVqZWN0UHJvbWlzZSA9IHJlamVjdDsKLSAgICB9KTsKKyAgICB0ZWVTdGF0ZS5jYW5j
ZWxQcm9taXNlQ2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShASW50ZXJuYWxQcm9t
aXNlKTsKIAogICAgIGxldCBwdWxsRnVuY3Rpb24gPSBAdGVlUmVhZGFibGVTdHJlYW1QdWxsRnVu
Y3Rpb24odGVlU3RhdGUsIHJlYWRlciwgc2hvdWxkQ2xvbmUpOwogCkBAIC0xNTMsOSArMTUwLDEw
IEBAIGZ1bmN0aW9uIHRlZVJlYWRhYmxlU3RyZWFtQnJhbmNoMUNhbmNlbEZ1bmN0aW9uKHRlZVN0
YXRlLCBzdHJlYW0pCiAgICAgICAgIHRlZVN0YXRlLmNhbmNlbGVkMSA9IHRydWU7CiAgICAgICAg
IHRlZVN0YXRlLnJlYXNvbjEgPSByOwogICAgICAgICBpZiAodGVlU3RhdGUuY2FuY2VsZWQyKSB7
Ci0gICAgICAgICAgICBAY2FuY2VsUmVhZGFibGVTdHJlYW0oc3RyZWFtLCBbdGVlU3RhdGUucmVh
c29uMSwgdGVlU3RhdGUucmVhc29uMl0pLnRoZW4odGVlU3RhdGUucmVzb2x2ZVByb21pc2UsIHRl
ZVN0YXRlLnJlamVjdFByb21pc2UpOworICAgICAgICAgICAgQGNhbmNlbFJlYWRhYmxlU3RyZWFt
KHN0cmVhbSwgW3RlZVN0YXRlLnJlYXNvbjEsIHRlZVN0YXRlLnJlYXNvbjJdKS50aGVuKHRlZVN0
YXRlLmNhbmNlbFByb21pc2VDYXBhYmlsaXR5LkByZXNvbHZlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlZVN0YXRlLmNhbmNlbFByb21pc2VDYXBhYmlsaXR5LkByZWplY3QpOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0ZWVTdGF0ZS5jYW5jZWxQcm9taXNlOworICAgICAgICBy
ZXR1cm4gdGVlU3RhdGUuY2FuY2VsUHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7CiAgICAgfQog
fQogCkBAIC0xNjUsOSArMTYzLDEwIEBAIGZ1bmN0aW9uIHRlZVJlYWRhYmxlU3RyZWFtQnJhbmNo
MkNhbmNlbEZ1bmN0aW9uKHRlZVN0YXRlLCBzdHJlYW0pCiAgICAgICAgIHRlZVN0YXRlLmNhbmNl
bGVkMiA9IHRydWU7CiAgICAgICAgIHRlZVN0YXRlLnJlYXNvbjIgPSByOwogICAgICAgICBpZiAo
dGVlU3RhdGUuY2FuY2VsZWQxKSB7Ci0gICAgICAgICAgICBAY2FuY2VsUmVhZGFibGVTdHJlYW0o
c3RyZWFtLCBbdGVlU3RhdGUucmVhc29uMSwgdGVlU3RhdGUucmVhc29uMl0pLnRoZW4odGVlU3Rh
dGUucmVzb2x2ZVByb21pc2UsIHRlZVN0YXRlLnJlamVjdFByb21pc2UpOworICAgICAgICAgICAg
QGNhbmNlbFJlYWRhYmxlU3RyZWFtKHN0cmVhbSwgW3RlZVN0YXRlLnJlYXNvbjEsIHRlZVN0YXRl
LnJlYXNvbjJdKS50aGVuKHRlZVN0YXRlLmNhbmNlbFByb21pc2VDYXBhYmlsaXR5LkByZXNvbHZl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlZVN0YXRlLmNhbmNlbFByb21pc2VDYXBh
YmlsaXR5LkByZWplY3QpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0ZWVTdGF0ZS5jYW5j
ZWxQcm9taXNlOworICAgICAgICByZXR1cm4gdGVlU3RhdGUuY2FuY2VsUHJvbWlzZUNhcGFiaWxp
dHkuQHByb21pc2U7CiAgICAgfQogfQogCkBAIC0yMDcsMTQgKzIwNiwxNCBAQCBmdW5jdGlvbiBl
cnJvclJlYWRhYmxlU3RyZWFtKHN0cmVhbSwgZXJyb3IpCiAKICAgICB2YXIgcmVxdWVzdHMgPSBy
ZWFkZXIuQHJlYWRSZXF1ZXN0czsKICAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IHJl
cXVlc3RzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpCi0gICAgICAgIEByZWplY3RT
dHJlYW1zUHJvbWlzZShyZXF1ZXN0c1tpbmRleF0sIGVycm9yKTsKKyAgICAgICAgcmVxdWVzdHNb
aW5kZXhdLkByZWplY3QuQGNhbGwodW5kZWZpbmVkLCBlcnJvcik7CiAgICAgcmVhZGVyLkByZWFk
UmVxdWVzdHMgPSBbXTsKIAogICAgIEByZWxlYXNlUmVhZGFibGVTdHJlYW1SZWFkZXIocmVhZGVy
KTsKICAgICByZWFkZXIuQHN0b3JlZEVycm9yID0gZXJyb3I7CiAgICAgcmVhZGVyLkBzdGF0ZSA9
IEBzdHJlYW1FcnJvcmVkOwogCi0gICAgQHJlamVjdFN0cmVhbXNQcm9taXNlKHJlYWRlci5AY2xv
c2VkUHJvbWlzZSwgZXJyb3IpOworICAgIHJlYWRlci5AY2xvc2VkUHJvbWlzZUNhcGFiaWxpdHku
QHJlamVjdC5AY2FsbCh1bmRlZmluZWQsIGVycm9yKTsKIH0KIAogZnVuY3Rpb24gcmVxdWVzdFJl
YWRhYmxlU3RyZWFtUHVsbChzdHJlYW0pCkBAIC0zMTQsMTEgKzMxMywxMSBAQCBmdW5jdGlvbiBj
bG9zZVJlYWRhYmxlU3RyZWFtUmVhZGVyKHJlYWRlcikKIAogICAgIHZhciByZXF1ZXN0cyA9IHJl
YWRlci5AcmVhZFJlcXVlc3RzOwogICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0gcmVx
dWVzdHMubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkKLSAgICAgICAgQHJlc29sdmVT
dHJlYW1zUHJvbWlzZShyZXF1ZXN0c1tpbmRleF0sIHt2YWx1ZTp1bmRlZmluZWQsIGRvbmU6IHRy
dWV9KTsKKyAgICAgICAgcmVxdWVzdHNbaW5kZXhdLkByZXNvbHZlLkBjYWxsKHVuZGVmaW5lZCwg
e3ZhbHVlOnVuZGVmaW5lZCwgZG9uZTogdHJ1ZX0pOwogICAgIHJlYWRlci5AcmVhZFJlcXVlc3Rz
ID0gW107CiAgICAgQHJlbGVhc2VSZWFkYWJsZVN0cmVhbVJlYWRlcihyZWFkZXIpOwogICAgIHJl
YWRlci5Ac3RhdGUgPSBAc3RyZWFtQ2xvc2VkOwotICAgIEByZXNvbHZlU3RyZWFtc1Byb21pc2Uo
cmVhZGVyLkBjbG9zZWRQcm9taXNlKTsKKyAgICByZWFkZXIuQGNsb3NlZFByb21pc2VDYXBhYmls
aXR5LkByZXNvbHZlLkBjYWxsKHVuZGVmaW5lZCk7CiB9CiAKIGZ1bmN0aW9uIGVucXVldWVJblJl
YWRhYmxlU3RyZWFtKHN0cmVhbSwgY2h1bmspCkBAIC0zMzAsNyArMzI5LDcgQEAgZnVuY3Rpb24g
ZW5xdWV1ZUluUmVhZGFibGVTdHJlYW0oc3RyZWFtLCBjaHVuaykKICAgICBpZiAoc3RyZWFtLkBz
dGF0ZSA9PT0gQHN0cmVhbUNsb3NlZCkKICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICBp
ZiAoQGlzUmVhZGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSAmJiBzdHJlYW0uQHJlYWRlci5AcmVh
ZFJlcXVlc3RzLmxlbmd0aCkgewotICAgICAgICBAcmVzb2x2ZVN0cmVhbXNQcm9taXNlKHN0cmVh
bS5AcmVhZGVyLkByZWFkUmVxdWVzdHMuc2hpZnQoKSwge3ZhbHVlOiBjaHVuaywgZG9uZTogZmFs
c2V9KTsKKyAgICAgICAgc3RyZWFtLkByZWFkZXIuQHJlYWRSZXF1ZXN0cy5zaGlmdCgpLkByZXNv
bHZlLkBjYWxsKHVuZGVmaW5lZCwge3ZhbHVlOiBjaHVuaywgZG9uZTogZmFsc2V9KTsKICAgICAg
ICAgQHJlcXVlc3RSZWFkYWJsZVN0cmVhbVB1bGwoc3RyZWFtKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTM2OSw4ICszNjgsOCBAQCBmdW5jdGlvbiByZWFkRnJvbVJlYWRhYmxlU3RyZWFt
UmVhZGVyKHJlYWRlcikKICAgICAgICAgICAgIEBmaW5pc2hDbG9zaW5nUmVhZGFibGVTdHJlYW0o
c3RyZWFtKTsKICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7dmFsdWU6IGNodW5rLCBk
b25lOiBmYWxzZX0pOwogICAgIH0KLSAgICB2YXIgcmVhZFByb21pc2UgPSBAY3JlYXRlTmV3U3Ry
ZWFtc1Byb21pc2UoKTsKLSAgICByZWFkZXIuQHJlYWRSZXF1ZXN0cy5wdXNoKHJlYWRQcm9taXNl
KTsKKyAgICB2YXIgcmVhZFByb21pc2VDYXBhYmlsaXR5ID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5
KFByb21pc2UpOworICAgIHJlYWRlci5AcmVhZFJlcXVlc3RzLnB1c2gocmVhZFByb21pc2VDYXBh
YmlsaXR5KTsKICAgICBAcmVxdWVzdFJlYWRhYmxlU3RyZWFtUHVsbChzdHJlYW0pOwotICAgIHJl
dHVybiByZWFkUHJvbWlzZTsKKyAgICByZXR1cm4gcmVhZFByb21pc2VDYXBhYmlsaXR5LkBwcm9t
aXNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRh
YmxlU3RyZWFtUmVhZGVyLmpzIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRh
YmxlU3RyZWFtUmVhZGVyLmpzCmluZGV4IDliYWE0OWUzMjhjNzU5NDVmMzM3YzQ3MzZiZTNlODcy
YmIyNzcwZjMuLjgxNWEyMjY3ZTM3Y2ZkMTdkNDk4YjI0NDBiNGMyNzhmYTI4NDI0N2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbVJlYWRl
ci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1S
ZWFkZXIuanMKQEAgLTc2LDUgKzc2LDUgQEAgZnVuY3Rpb24gY2xvc2VkKCkKICAgICBpZiAoIUBp
c1JlYWRhYmxlU3RyZWFtUmVhZGVyKHRoaXMpKQogICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWpl
Y3QobmV3IEBUeXBlRXJyb3IoIkNhbGxlZSBvZiBjbG9zZWQgaXMgbm90IGEgUmVhZGFibGVTdHJl
YW1SZWFkZXIiKSk7CiAKLSAgICByZXR1cm4gdGhpcy5AY2xvc2VkUHJvbWlzZTsKKyAgICByZXR1
cm4gdGhpcy5AY2xvc2VkUHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvU3RyZWFtSW50ZXJuYWxzLmpzIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1N0cmVhbUludGVybmFscy5qcwppbmRleCBjYjIz
YWYzNzc5ZDY0YzFmNjBhMGI2ZGZkNTA0Y2M3MTMyZTQ5ODBiLi4wYmJmZjRlZmEzOGU0NmQ4MWJh
OWEzMmVkOTMzOTk3ZWVhMzFlNzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3N0cmVhbXMvU3RyZWFtSW50ZXJuYWxzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3RyZWFtcy9TdHJlYW1JbnRlcm5hbHMuanMKQEAgLTkwLDQzICs5MCw2IEBAIGZ1bmN0aW9uIHZh
bGlkYXRlQW5kTm9ybWFsaXplUXVldWluZ1N0cmF0ZWd5KHNpemUsIGhpZ2hXYXRlck1hcmspCiAg
ICAgcmV0dXJuIG5vcm1hbGl6ZWRTdHJhdGVneTsKIH0KIAotZnVuY3Rpb24gY3JlYXRlTmV3U3Ry
ZWFtc1Byb21pc2UoKQotewotICAgICJ1c2Ugc3RyaWN0IjsKLQotICAgIHZhciByZXNvbHZlRnVu
Y3Rpb247Ci0gICAgdmFyIHJlamVjdEZ1bmN0aW9uOwotICAgIHZhciBwcm9taXNlID0gbmV3IFBy
b21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7Ci0gICAgICAgIHJlc29sdmVGdW5jdGlv
biA9IHJlc29sdmU7Ci0gICAgICAgIHJlamVjdEZ1bmN0aW9uID0gcmVqZWN0OwotICAgIH0pOwot
ICAgIHByb21pc2UuQHJlc29sdmUgPSByZXNvbHZlRnVuY3Rpb247Ci0gICAgcHJvbWlzZS5AcmVq
ZWN0ID0gcmVqZWN0RnVuY3Rpb247Ci0gICAgcmV0dXJuIHByb21pc2U7Ci19Ci0KLWZ1bmN0aW9u
IHJlc29sdmVTdHJlYW1zUHJvbWlzZShwcm9taXNlLCB2YWx1ZSkKLXsKLSAgICAidXNlIHN0cmlj
dCI7Ci0KLSAgICBpZiAocHJvbWlzZSAmJiBwcm9taXNlLkByZXNvbHZlKSB7Ci0gICAgICAgIHBy
b21pc2UuQHJlc29sdmUodmFsdWUpOwotICAgICAgICBwcm9taXNlLkByZXNvbHZlID0gdW5kZWZp
bmVkOwotICAgICAgICBwcm9taXNlLkByZWplY3QgPSB1bmRlZmluZWQ7Ci0gICAgfQotfQotCi1m
dW5jdGlvbiByZWplY3RTdHJlYW1zUHJvbWlzZShwcm9taXNlLCB2YWx1ZSkKLXsKLSAgICAidXNl
IHN0cmljdCI7Ci0KLSAgICBpZiAocHJvbWlzZSAmJiBwcm9taXNlLkByZWplY3QpIHsKLSAgICAg
ICAgcHJvbWlzZS5AcmVqZWN0KHZhbHVlKTsKLSAgICAgICAgcHJvbWlzZS5AcmVzb2x2ZSA9IHVu
ZGVmaW5lZDsKLSAgICAgICAgcHJvbWlzZS5AcmVqZWN0ID0gdW5kZWZpbmVkOwotICAgIH0KLX0K
LQogZnVuY3Rpb24gbmV3UXVldWUoKQogewogICAgIHJldHVybiB7IGNvbnRlbnQ6IFtdLCBzaXpl
OiAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvV3JpdGFi
bGVTdHJlYW0uanMgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvV3JpdGFibGVTdHJl
YW0uanMKaW5kZXggNWRjOGFiOWRjYTRhM2QzYzdjMDUyYzk5MjM5MjQxOTY0YmY4YWI4Yy4uNWQ1
ZDRhODVlNWVkNTVjNjhiYzg0MDUxMTVkNzkwYzhmOThiNDgwZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3RyZWFtLmpzCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbS5qcwpAQCAtNDIsOCArNDIsOCBA
QCBmdW5jdGlvbiBpbml0aWFsaXplV3JpdGFibGVTdHJlYW0odW5kZXJseWluZ1NpbmssIHN0cmF0
ZWd5KQogICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiV3JpdGFibGVTdHJlYW0gY29uc3Ry
dWN0b3IgdGFrZXMgYW4gb2JqZWN0IGFzIHNlY29uZCBhcmd1bWVudCwgaWYgYW55Iik7CiAKICAg
ICB0aGlzLkB1bmRlcmx5aW5nU2luayA9IHVuZGVybHlpbmdTaW5rOwotICAgIHRoaXMuQGNsb3Nl
ZFByb21pc2UgPSBAY3JlYXRlTmV3U3RyZWFtc1Byb21pc2UoKTsKLSAgICB0aGlzLkByZWFkeVBy
b21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTsKKyAgICB0aGlzLkBjbG9zZWRQcm9t
aXNlQ2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShQcm9taXNlKTsKKyAgICB0aGlz
LkByZWFkeVByb21pc2VDYXBhYmlsaXR5ID0geyBAcHJvbWlzZTogUHJvbWlzZS5yZXNvbHZlKHVu
ZGVmaW5lZCksIEByZXNvbHZlOiBmdW5jdGlvbigpIHt9LCBAcmVqZWN0OiBmdW5jdGlvbigpIHt9
IH07CiAgICAgdGhpcy5AcXVldWUgPSBAbmV3UXVldWUoKTsKICAgICB0aGlzLkBzdGF0ZSA9IEBz
dHJlYW1Xcml0YWJsZTsKICAgICB0aGlzLkBzdGFydGVkID0gZmFsc2U7CkBAIC05OSwxMyArOTks
MTMgQEAgZnVuY3Rpb24gY2xvc2UoKQogICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhp
cy5Ac3RvcmVkRXJyb3IpOwogCiAgICAgaWYgKHRoaXMuQHN0YXRlID09PSBAc3RyZWFtV2FpdGlu
ZykKLSAgICAgICAgQHJlc29sdmVTdHJlYW1zUHJvbWlzZSh0aGlzLkByZWFkeVByb21pc2UsIHVu
ZGVmaW5lZCk7CisgICAgICAgIHRoaXMuQHJlYWR5UHJvbWlzZUNhcGFiaWxpdHkuQHJlc29sdmUu
QGNhbGwodW5kZWZpbmVkLCB1bmRlZmluZWQpOwogCiAgICAgdGhpcy5Ac3RhdGUgPSBAc3RyZWFt
Q2xvc2luZzsKICAgICBAZW5xdWV1ZVZhbHVlV2l0aFNpemUodGhpcy5AcXVldWUsICJjbG9zZSIs
IDApOwogICAgIEBjYWxsT3JTY2hlZHVsZVdyaXRhYmxlU3RyZWFtQWR2YW5jZVF1ZXVlKHRoaXMp
OwogCi0gICAgcmV0dXJuIHRoaXMuQGNsb3NlZFByb21pc2U7CisgICAgcmV0dXJuIHRoaXMuQGNs
b3NlZFByb21pc2VDYXBhYmlsaXR5LkBwcm9taXNlOwogfQogCiBmdW5jdGlvbiB3cml0ZShjaHVu
aykKQEAgLTEzNCw5ICsxMzQsOSBAQCBmdW5jdGlvbiB3cml0ZShjaHVuaykKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGNvbnN0IHByb21pc2UgPSBAY3JlYXRlTmV3U3RyZWFtc1Byb21pc2UoKTsK
KyAgICBjb25zdCBwcm9taXNlQ2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShQcm9t
aXNlKTsKICAgICB0cnkgewotICAgICAgICBAZW5xdWV1ZVZhbHVlV2l0aFNpemUodGhpcy5AcXVl
dWUsIHsgcHJvbWlzZTogcHJvbWlzZSwgY2h1bms6IGNodW5rIH0sIGNodW5rU2l6ZSk7CisgICAg
ICAgIEBlbnF1ZXVlVmFsdWVXaXRoU2l6ZSh0aGlzLkBxdWV1ZSwgeyBwcm9taXNlQ2FwYWJpbGl0
eTogcHJvbWlzZUNhcGFiaWxpdHksIGNodW5rOiBjaHVuayB9LCBjaHVua1NpemUpOwogICAgIH0g
Y2F0Y2ggKGUpIHsKICAgICAgICAgQGVycm9yV3JpdGFibGVTdHJlYW0uQGNhbGwodGhpcywgZSk7
CiAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTsKQEAgLTE0NSw3ICsxNDUsNyBAQCBm
dW5jdGlvbiB3cml0ZShjaHVuaykKICAgICBAc3luY1dyaXRhYmxlU3RyZWFtU3RhdGVXaXRoUXVl
dWUodGhpcyk7CiAgICAgQGNhbGxPclNjaGVkdWxlV3JpdGFibGVTdHJlYW1BZHZhbmNlUXVldWUo
dGhpcyk7CiAKLSAgICByZXR1cm4gcHJvbWlzZTsKKyAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxp
dHkuQHByb21pc2U7CiB9CiAKIGZ1bmN0aW9uIGNsb3NlZCgpCkBAIC0xNTUsNyArMTU1LDcgQEAg
ZnVuY3Rpb24gY2xvc2VkKCkKICAgICBpZiAoIUBpc1dyaXRhYmxlU3RyZWFtKHRoaXMpKQogICAg
ICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEBUeXBlRXJyb3IoIlRoZSBXcml0YWJsZVN0
cmVhbS5jbG9zZWQgZ2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9mIFdyaXRh
YmxlU3RyZWFtIikpOwogCi0gICAgcmV0dXJuIHRoaXMuQGNsb3NlZFByb21pc2U7CisgICAgcmV0
dXJuIHRoaXMuQGNsb3NlZFByb21pc2VDYXBhYmlsaXR5LkBwcm9taXNlOwogfQogCiBmdW5jdGlv
biByZWFkeSgpCkBAIC0xNjUsNyArMTY1LDcgQEAgZnVuY3Rpb24gcmVhZHkoKQogICAgIGlmICgh
QGlzV3JpdGFibGVTdHJlYW0odGhpcykpCiAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChu
ZXcgQFR5cGVFcnJvcigiVGhlIFdyaXRhYmxlU3RyZWFtLnJlYWR5IGdldHRlciBjYW4gb25seSBi
ZSB1c2VkIG9uIGluc3RhbmNlcyBvZiBXcml0YWJsZVN0cmVhbSIpKTsKIAotICAgIHJldHVybiB0
aGlzLkByZWFkeVByb21pc2U7CisgICAgcmV0dXJuIHRoaXMuQHJlYWR5UHJvbWlzZUNhcGFiaWxp
dHkuQHByb21pc2U7CiB9CiAKIGZ1bmN0aW9uIHN0YXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbUludGVybmFscy5qcyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbUludGVybmFscy5qcwppbmRl
eCBlYjc3YmY1ZGY3ZWJhN2NjNjc4NTI3MTk3MThiNmM5ZDc4MDFjMmFkLi4xN2RmMDllMjI3ZDJi
YmIzOTdhOTY4NmE3ZmFjZTU2Y2Y1NzcyMDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3N0cmVhbXMvV3JpdGFibGVTdHJlYW1JbnRlcm5hbHMuanMKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzCkBAIC00Niwx
MCArNDYsMTAgQEAgZnVuY3Rpb24gc3luY1dyaXRhYmxlU3RyZWFtU3RhdGVXaXRoUXVldWUoc3Ry
ZWFtKQogCiAgICAgaWYgKHN0cmVhbS5AcXVldWUuc2l6ZSA+IHN0cmVhbS5Ac3RyYXRlZ3kuaGln
aFdhdGVyTWFyaykgewogICAgICAgICBzdHJlYW0uQHN0YXRlID0gQHN0cmVhbVdhaXRpbmc7Ci0g
ICAgICAgIHN0cmVhbS5AcmVhZHlQcm9taXNlID0gQGNyZWF0ZU5ld1N0cmVhbXNQcm9taXNlKCk7
CisgICAgICAgIHN0cmVhbS5AcmVhZHlQcm9taXNlQ2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2Fw
YWJpbGl0eShQcm9taXNlKTsKICAgICB9IGVsc2UgewogICAgICAgICBzdHJlYW0uQHN0YXRlID0g
QHN0cmVhbVdyaXRhYmxlOwotICAgICAgICBAcmVzb2x2ZVN0cmVhbXNQcm9taXNlKHN0cmVhbS5A
cmVhZHlQcm9taXNlLCB1bmRlZmluZWQpOworICAgICAgICBzdHJlYW0uQHJlYWR5UHJvbWlzZUNh
cGFiaWxpdHkuQHJlc29sdmUuQGNhbGwodW5kZWZpbmVkLCB1bmRlZmluZWQpOwogICAgIH0KIAog
ICAgIHJldHVybiB1bmRlZmluZWQ7CkBAIC02MywxMyArNjMsMTMgQEAgZnVuY3Rpb24gZXJyb3JX
cml0YWJsZVN0cmVhbShlKQogICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgIHdoaWxlICh0
aGlzLkBxdWV1ZS5jb250ZW50Lmxlbmd0aCA+IDApIHsKICAgICAgICAgdmFyIHdyaXRlUmVjb3Jk
ID0gQGRlcXVldWVWYWx1ZSh0aGlzLkBxdWV1ZSk7Ci0gICAgICAgIGlmICh3cml0ZVJlY29yZCAh
PT0gImNsb3NlIiAmJiB3cml0ZVJlY29yZC5wcm9taXNlKQotICAgICAgICAgICAgQHJlamVjdFN0
cmVhbXNQcm9taXNlKHdyaXRlUmVjb3JkLnByb21pc2UsIGUpOworICAgICAgICBpZiAod3JpdGVS
ZWNvcmQgIT09ICJjbG9zZSIpCisgICAgICAgICAgICB3cml0ZVJlY29yZC5wcm9taXNlQ2FwYWJp
bGl0eS5AcmVqZWN0LkBjYWxsKHVuZGVmaW5lZCwgZSk7CiAgICAgfQogICAgIHRoaXMuQHN0b3Jl
ZEVycm9yID0gZTsKICAgICBpZiAodGhpcy5Ac3RhdGUgPT09IEBzdHJlYW1XYWl0aW5nKQotICAg
ICAgICBAcmVzb2x2ZVN0cmVhbXNQcm9taXNlKHRoaXMuQHJlYWR5UHJvbWlzZSwgdW5kZWZpbmVk
KTsKLSAgICBAcmVqZWN0U3RyZWFtc1Byb21pc2UodGhpcy5AY2xvc2VkUHJvbWlzZSwgZSk7Cisg
ICAgICAgIHRoaXMuQHJlYWR5UHJvbWlzZUNhcGFiaWxpdHkuQHJlc29sdmUuQGNhbGwodW5kZWZp
bmVkLCB1bmRlZmluZWQpOworICAgIHRoaXMuQGNsb3NlZFByb21pc2VDYXBhYmlsaXR5LkByZWpl
Y3QuQGNhbGwodW5kZWZpbmVkLCBlKTsKICAgICB0aGlzLkBzdGF0ZSA9IEBzdHJlYW1FcnJvcmVk
OwogICAgIHJldHVybiB1bmRlZmluZWQ7CiB9CkBAIC0xMDYsNyArMTA2LDcgQEAgZnVuY3Rpb24g
d3JpdGFibGVTdHJlYW1BZHZhbmNlUXVldWUoc3RyZWFtKQogICAgICAgICAgICAgaWYgKHN0cmVh
bS5Ac3RhdGUgPT09IEBzdHJlYW1FcnJvcmVkKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIHN0cmVhbS5Ad3JpdGluZyA9IGZhbHNlOwotICAgICAgICAgICAgQHJlc29sdmVT
dHJlYW1zUHJvbWlzZSh3cml0ZVJlY29yZC5wcm9taXNlLCB1bmRlZmluZWQpOworICAgICAgICAg
ICAgd3JpdGVSZWNvcmQucHJvbWlzZUNhcGFiaWxpdHkuQHJlc29sdmUuQGNhbGwodW5kZWZpbmVk
LCB1bmRlZmluZWQpOwogICAgICAgICAgICAgQGRlcXVldWVWYWx1ZShzdHJlYW0uQHF1ZXVlKTsK
ICAgICAgICAgICAgIEBzeW5jV3JpdGFibGVTdHJlYW1TdGF0ZVdpdGhRdWV1ZShzdHJlYW0pOwog
ICAgICAgICAgICAgQHdyaXRhYmxlU3RyZWFtQWR2YW5jZVF1ZXVlKHN0cmVhbSk7CkBAIC0xMjks
NyArMTI5LDcgQEAgZnVuY3Rpb24gY2xvc2VXcml0YWJsZVN0cmVhbShzdHJlYW0pCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgLy8gRklYTUUKICAgICAgICAgICAgIC8vIGFz
c2VydChzdHJlYW0uQHN0YXRlID09PSBAc3RyZWFtQ2xvc2luZyk7Ci0gICAgICAgICAgICBAcmVz
b2x2ZVN0cmVhbXNQcm9taXNlKHN0cmVhbS5AY2xvc2VkUHJvbWlzZSwgdW5kZWZpbmVkKTsKKyAg
ICAgICAgICAgIHN0cmVhbS5AY2xvc2VkUHJvbWlzZUNhcGFiaWxpdHkuQHJlc29sdmUuQGNhbGwo
dW5kZWZpbmVkLCB1bmRlZmluZWQpOwogICAgICAgICAgICAgc3RyZWFtLkBzdGF0ZSA9IEBzdHJl
YW1DbG9zZWQ7CiAgICAgICAgIH0sCiAgICAgICAgIGZ1bmN0aW9uKHIpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaAppbmRleCBiNmQwNjE4
ZmZmNWU4N2MxNWUyN2E0YWFiZmI2Nzk2MzAzMTJlNWFjLi42OTRiMzE3YzY5ZjljZjRhMmUzY2I2
N2IwNGFlMzgzODU1M2I5YTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9XZWJDb3JlQnVpbHRpbk5hbWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V2ViQ29yZUJ1aWx0aW5OYW1lcy5oCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogI2RlZmluZSBXRUJDT1JFX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfUFJP
UEVSVFlfTkFNRShtYWNybylcCiAgICAgbWFjcm8oY2xvc2VSZXF1ZXN0ZWQpIFwKLSAgICBtYWNy
byhjbG9zZWRQcm9taXNlKSBcCisgICAgbWFjcm8oY2xvc2VkUHJvbWlzZUNhcGFiaWxpdHkpIFwK
ICAgICBtYWNybyhjb250cm9sbGVkUmVhZGFibGVTdHJlYW0pIFwKICAgICBtYWNybyhjb250cm9s
bGVyKSBcCiAgICAgbWFjcm8oZ2V0VXNlck1lZGlhRnJvbUpTKSBcCkBAIC00Myw3ICs0Myw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBtYWNybyhxdWV1ZSkgXAogICAgIG1hY3JvKHJlYWRl
cikgXAogICAgIG1hY3JvKHJlYWRSZXF1ZXN0cykgXAotICAgIG1hY3JvKHJlYWR5UHJvbWlzZSkg
XAorICAgIG1hY3JvKHJlYWR5UHJvbWlzZUNhcGFiaWxpdHkpIFwKICAgICBtYWNybyhzdGF0ZSkg
XAogICAgIG1hY3JvKHN0YXJ0ZWQpIFwKICAgICBtYWNybyhzdGFydGVkUHJvbWlzZSkgXAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>