<?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>96578</bug_id>
          
          <creation_ts>2012-09-12 16:51:53 -0700</creation_ts>
          <short_desc>Add support for OES_vertex_array_object in chromium</short_desc>
          <delta_ts>2012-09-21 16:47:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>96828</blocked>
    
    <blocked>96961</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brandon Jones">bajones</reporter>
          <assigned_to name="Brandon Jones">bajones</assigned_to>
          <cc>abarth</cc>
    
    <cc>benvanik</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>fishd</cc>
    
    <cc>gman</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hausmann</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>rakuco</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>718886</commentid>
    <comment_count>0</comment_count>
    <who name="Brandon Jones">bajones</who>
    <bug_when>2012-09-12 16:51:53 -0700</bug_when>
    <thetext>Add support for OES_vertex_array_object in chromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718891</commentid>
    <comment_count>1</comment_count>
      <attachid>163740</attachid>
    <who name="Brandon Jones">bajones</who>
    <bug_when>2012-09-12 17:02:26 -0700</bug_when>
    <thetext>Created attachment 163740
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718892</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-12 17:07:32 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719059</commentid>
    <comment_count>3</comment_count>
      <attachid>163740</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-09-12 22:37:30 -0700</bug_when>
    <thetext>Comment on attachment 163740
Patch

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

&gt; LayoutTests/ChangeLog:12
&gt; +        * fast/canvas/webgl/oes-vertex-array-object-expected.txt: Added.
&gt; +        * fast/canvas/webgl/oes-vertex-array-object.html: Added.
&gt; +        * platform/chromium/fast/canvas/webgl/oes-vertex-array-object-expected.txt: Added.

Isn&apos;t there a high probability that this is going to fail right away on all the other platforms/bots, i.e. should it be skipped there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719294</commentid>
    <comment_count>4</comment_count>
      <attachid>163740</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-13 03:07:55 -0700</bug_when>
    <thetext>Comment on attachment 163740
Patch

Attachment 163740 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13848094

New failing tests:
platform/chromium/virtual/gpu/fast/canvas/webgl/oes-vertex-array-object.html
fast/canvas/webgl/oes-vertex-array-object.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721193</commentid>
    <comment_count>5</comment_count>
      <attachid>164238</attachid>
    <who name="Brandon Jones">bajones</who>
    <bug_when>2012-09-14 15:30:29 -0700</bug_when>
    <thetext>Created attachment 164238
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721326</commentid>
    <comment_count>6</comment_count>
      <attachid>164238</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-09-14 19:19:39 -0700</bug_when>
    <thetext>Comment on attachment 164238
Patch

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

This is good work so far but I&apos;m concerned that there is a resource leak introduced with this patch; r-&apos;ing it for that reason rather than leaving the r? bit alone. If it can be proven (and hopefully tested) that I&apos;m wrong about this resource leak and I&apos;m not available to re-review it (traveling on business for two days next week), dino could be a substitute reviewer. gman, benvanik, or zmo could be unofficial reviewers.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:4398
&gt; +    m_boundArrayBuffer-&gt;onAttached();

It looks to me like these newly introduced onAttached/onDetached calls are unbalanced and will prevent buffer objects from being deleted. In particular, consider the case where a VAO is allocated and bound, a vertexAttribPointer call using it is made, the VAO is unbound, the buffer object is deleted, and the VAO is deleted. My reading of the code is that the buffer object&apos;s m_attachmentCount will still be 1 at this point so the deletion will be deferred and never executed. There are missing calls to onDetached() in WebGLVertexArrayObjectOES::deleteObjectImpl. Note that WebGLFramebuffer, which is another type of container object, calls onDetached on all of its attachments in WebGLFramebuffer::deleteObjectImpl.

I hope that it is possible to add a test for this scenario using isBuffer(). After the buffer object is deleted but the VAO is still alive, isBuffer() might still return true -- not sure -- please test this. runDeleteTests() in the new layout test almost tests this, but I would specifically add a new test for it.

One way or another, these onAttached and onDetached calls should be encapsulated within the WebGLVertexArrayObjectOES class or its nested VertexAttribState struct, so that there aren&apos;t two distant places in the code which are calling attach and detach.

We should really come up with a better way to manage these lazy deletions via some sort of reference counted pointer (maybe a simple wrapper to RefPtr) but that should wait for another patch.

&gt; Source/WebCore/html/canvas/WebGLVertexArrayObjectOES.cpp:83
&gt; +        buffer-&gt;onAttached();

As far as I can tell, this introduces the same resource leak described above for element array buffers.

&gt; LayoutTests/fast/canvas/webgl/oes-vertex-array-object.html:124
&gt; +    if (gl.getParameter(ext.VERTEX_ARRAY_BINDING_OES) == vao0) {

See comment below about equality comparisons on these kinds of objects.

&gt; LayoutTests/fast/canvas/webgl/oes-vertex-array-object.html:220
&gt; +            if (buffer == state.buffer) {

I am not sure these kinds of object equality comparisons on JavaScript wrapper objects for C++ objects are guaranteed to work, at least not in all JavaScript engines. There was a long discussion about them at one point on the public_webgl mailing list. It would be safer to add an attribute you know about to the buffer objects you create, and do the comparisons on the value of that attribute.

&gt; LayoutTests/fast/canvas/webgl/oes-vertex-array-object.html:246
&gt; +            if (elbuffer == state.elbuffer) {

Same comment about equality comparisons.

&gt; LayoutTests/platform/chromium/TestExpectations:3610
&gt; +BUGWK96578 : platform/chromium/virtual/gpu/fast/canvas/webgl/oes-vertex-array-object.html = PASS TEXT

Please file a new bug referencing this one indicating that these lines should be removed once the Chromium implementation of this extension lands, and use that bug&apos;s ID here.

&gt; LayoutTests/platform/efl/Skipped:882
&gt; +# http://webkit.org/b/96828

Please file one or more new bugs referencing this one indicating that this test should be unskipped when the extension is supported on this platform, and reference that bug ID here and in the other ports&apos; Skipped lists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721374</commentid>
    <comment_count>7</comment_count>
    <who name="Brandon Jones">bajones</who>
    <bug_when>2012-09-14 21:50:46 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; It looks to me like these newly introduced onAttached/onDetached calls are unbalanced and will prevent buffer objects from being deleted...
&gt; We should really come up with a better way to manage these lazy deletions via some sort of reference counted pointer (maybe a simple wrapper to RefPtr) but that should wait for another patch.

I agree. In this case the code pattern was lifted from the shader and program objects which also use onAttached and onDetached manually to manage ref counts. It feels like if we&apos;re going to introduce a more foolproof ref counting mechanism it should be applied to those objects as well. Would you consider that out-of-scope for this CL, or should we try to work it in?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721584</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-09-16 05:53:52 -0700</bug_when>
    <thetext>That refactoring is out of scope for this change. I would suggest doing it afterward, since otherwise this work will be blocked until it&apos;s complete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722322</commentid>
    <comment_count>9</comment_count>
    <who name="Brandon Jones">bajones</who>
    <bug_when>2012-09-17 15:35:04 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I am not sure these kinds of object equality comparisons on JavaScript wrapper objects for C++ objects are guaranteed to work, at least not in all JavaScript engines... It would be safer to add an attribute you know about to the buffer objects you create, and do the comparisons on the value of that attribute.

I&apos;m not sure I understand what you&apos;re getting at here. Presumably the concern is that get___ may return a different wrapper object than create___ did around the same underlying data, and those wrapper objects may fail a == test if implemented naively, correct? If so, I fail to see how you could possibly test this in Javascript at all. I think what you are suggesting is that we modify the test like so:

var buffer1 = gl.createBuffer();
buffer1.uid = getNextUniqueID();

//Some time later

var buffer2 = gl.getVertexAttrib(n, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING);
if(buffer1.uid == buffe2.uid) {
  // Success!
}

But attaching any javascript variables to the returned wrapper would, I&apos;m fairly certain, fall victim to the same issue: The newly returned wrappers will not have my metadata attached.

Have I misunderstood the request?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722325</commentid>
    <comment_count>10</comment_count>
      <attachid>164464</attachid>
    <who name="Brandon Jones">bajones</who>
    <bug_when>2012-09-17 15:39:25 -0700</bug_when>
    <thetext>Created attachment 164464
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722362</commentid>
    <comment_count>11</comment_count>
      <attachid>164472</attachid>
    <who name="Brandon Jones">bajones</who>
    <bug_when>2012-09-17 16:22:23 -0700</bug_when>
    <thetext>Created attachment 164472
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722562</commentid>
    <comment_count>12</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-09-18 00:43:48 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #6)
&gt; &gt; I am not sure these kinds of object equality comparisons on JavaScript wrapper objects for C++ objects are guaranteed to work, at least not in all JavaScript engines... It would be safer to add an attribute you know about to the buffer objects you create, and do the comparisons on the value of that attribute.
&gt; 
&gt; I&apos;m not sure I understand what you&apos;re getting at here. Presumably the concern is that get___ may return a different wrapper object than create___ did around the same underlying data, and those wrapper objects may fail a == test if implemented naively, correct? If so, I fail to see how you could possibly test this in Javascript at all. I think what you are suggesting is that we modify the test like so:
&gt; 
&gt; var buffer1 = gl.createBuffer();
&gt; buffer1.uid = getNextUniqueID();
&gt; 
&gt; //Some time later
&gt; 
&gt; var buffer2 = gl.getVertexAttrib(n, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING);
&gt; if(buffer1.uid == buffe2.uid) {
&gt;   // Success!
&gt; }
&gt; 
&gt; But attaching any javascript variables to the returned wrapper would, I&apos;m fairly certain, fall victim to the same issue: The newly returned wrappers will not have my metadata attached.
&gt; 
&gt; Have I misunderstood the request?

You&apos;ve understood my request.

Looking back, the issue I was remembering was related to uniform location objects, which are specifically defined to return a new object each time, so equality comparisons are not well defined:

https://www.khronos.org/webgl/public-mailing-list/archives/1204/msg00295.html

Never mind my request here, since buffer objects are persistent and guaranteed to return the same object and JavaScript wrapper object if it&apos;s still reachable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722998</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-18 13:00:15 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; I am not sure these kinds of object equality comparisons on JavaScript wrapper objects for C++ objects are guaranteed to work, at least not in all JavaScript engines... It would be safer to add an attribute you know about to the buffer objects you create, and do the comparisons on the value of that attribute.
&gt; &gt; 
&gt; &gt; I&apos;m not sure I understand what you&apos;re getting at here. Presumably the concern is that get___ may return a different wrapper object than create___ did around the same underlying data, and those wrapper objects may fail a == test if implemented naively, correct? If so, I fail to see how you could possibly test this in Javascript at all. I think what you are suggesting is that we modify the test like so:
&gt; &gt; 
&gt; &gt; var buffer1 = gl.createBuffer();
&gt; &gt; buffer1.uid = getNextUniqueID();
&gt; &gt; 
&gt; &gt; //Some time later
&gt; &gt; 
&gt; &gt; var buffer2 = gl.getVertexAttrib(n, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING);
&gt; &gt; if(buffer1.uid == buffe2.uid) {
&gt; &gt;   // Success!
&gt; &gt; }
&gt; &gt; 
&gt; &gt; But attaching any javascript variables to the returned wrapper would, I&apos;m fairly certain, fall victim to the same issue: The newly returned wrappers will not have my metadata attached.
&gt; &gt; 
&gt; &gt; Have I misunderstood the request?
&gt; 
&gt; You&apos;ve understood my request.
&gt; 
&gt; Looking back, the issue I was remembering was related to uniform location objects, which are specifically defined to return a new object each time, so equality comparisons are not well defined:
&gt; 
&gt; https://www.khronos.org/webgl/public-mailing-list/archives/1204/msg00295.html
&gt; 
&gt; Never mind my request here, since buffer objects are persistent and guaranteed to return the same object and JavaScript wrapper object if it&apos;s still reachable.

Hmm, so you want all calls to gl.getVertexAttrib(...) to return the same wrapper?  That would mean you&apos;d have to keep the JS wrapper alive via C++ in some way, right?  If so, then how would you handle this case:

function makeACycle(gl) {
  var buffer1 = gl.createBuffer();
  buffer1.nastyExpando = gl;
}

makeACycle(gl);


Since that doesn&apos;t work, you need to make the wrapper collectable from JS - but you don&apos;t want to expose when GC runs.  This is why I think it makes more sense to always return a new wrapper object from get...() calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723011</commentid>
    <comment_count>14</comment_count>
    <who name="Brandon Jones">bajones</who>
    <bug_when>2012-09-18 13:20:38 -0700</bug_when>
    <thetext>(In reply to comment #13) 
&gt; Since that doesn&apos;t work, you need to make the wrapper collectable from JS - but you don&apos;t want to expose when GC runs.  This is why I think it makes more sense to always return a new wrapper object from get...() calls.

That&apos;s sensible, but the real question in this context is if two distinct wrapper objects for the same underlying GL resource will be comparable:

var buffer1 = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer1);
var buffer2 = gl.getParameter(gl.ARRAY_BUFFER_BINDING);
if(buffer1 == buffer2) {
  // Success?
}

Most developers will expect the above to work (including myself up until I read Ken&apos;s comments). Does it?

Bringing the focus back to the patch, however, this question only affects wether the conformance test is valid on all platforms. If not, then there are other tests that need to be adjusted to compensate (https://www.khronos.org/registry/webgl/conformance-suites/1.0.1/conformance/state/gl-object-get-calls.html) Beyond that, this particular unit test is skipped on most platforms and expected to be flaky on those that it&apos;s enabled on due to limits of the testing framework. If it&apos;s the only thing that&apos;s holding this CL back perhaps it&apos;s more prudent to remove the test until a better solution can be found?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723027</commentid>
    <comment_count>15</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-18 13:45:04 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13) 
&gt; &gt; Since that doesn&apos;t work, you need to make the wrapper collectable from JS - but you don&apos;t want to expose when GC runs.  This is why I think it makes more sense to always return a new wrapper object from get...() calls.
&gt; 
&gt; That&apos;s sensible, but the real question in this context is if two distinct wrapper objects for the same underlying GL resource will be comparable:
&gt; 
&gt; var buffer1 = gl.createBuffer();
&gt; gl.bindBuffer(gl.ARRAY_BUFFER, buffer1);
&gt; var buffer2 = gl.getParameter(gl.ARRAY_BUFFER_BINDING);
&gt; if(buffer1 == buffer2) {
&gt;   // Success?
&gt; }
&gt; 
&gt; Most developers will expect the above to work (including myself up until I read Ken&apos;s comments). Does it?

they should === false, for sure.  I also don&apos;t think they should have the expandos, so I&apos;d guess == would be false.  I&apos;m less confident about when == and === should differ in JS.

Logically buffer1 and buffer 2 are different things.

&gt; 
&gt; Bringing the focus back to the patch, however, this question only affects wether the conformance test is valid on all platforms. If not, then there are other tests that need to be adjusted to compensate (https://www.khronos.org/registry/webgl/conformance-suites/1.0.1/conformance/state/gl-object-get-calls.html) Beyond that, this particular unit test is skipped on most platforms and expected to be flaky on those that it&apos;s enabled on due to limits of the testing framework. If it&apos;s the only thing that&apos;s holding this CL back perhaps it&apos;s more prudent to remove the test until a better solution can be found?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724997</commentid>
    <comment_count>16</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-09-20 17:14:51 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #13) 
&gt; &gt; &gt; Since that doesn&apos;t work, you need to make the wrapper collectable from JS - but you don&apos;t want to expose when GC runs.  This is why I think it makes more sense to always return a new wrapper object from get...() calls.
&gt; &gt; 
&gt; &gt; That&apos;s sensible, but the real question in this context is if two distinct wrapper objects for the same underlying GL resource will be comparable:
&gt; &gt; 
&gt; &gt; var buffer1 = gl.createBuffer();
&gt; &gt; gl.bindBuffer(gl.ARRAY_BUFFER, buffer1);
&gt; &gt; var buffer2 = gl.getParameter(gl.ARRAY_BUFFER_BINDING);
&gt; &gt; if(buffer1 == buffer2) {
&gt; &gt;   // Success?
&gt; &gt; }
&gt; &gt; 
&gt; &gt; Most developers will expect the above to work (including myself up until I read Ken&apos;s comments). Does it?
&gt; 
&gt; they should === false, for sure.  I also don&apos;t think they should have the expandos, so I&apos;d guess == would be false.  I&apos;m less confident about when == and === should differ in JS.
&gt; 
&gt; Logically buffer1 and buffer 2 are different things.

No, they should be == and ===. They are referring to the same underlying C++ object. So long as the JS wrapper for the underlying C++ WebGLBuffer object hasn&apos;t been GC&apos;d (which it won&apos;t be, because the buffer1 reference keeps it alive), the fact that the gl.getParameter call returns the same WebGLBuffer object will cause the bindings to return the same wrapper. Note the following, which does the same sorts of queries against the DOM:

&gt; var j = document.createElement(&quot;div&quot;);
undefined
&gt; j
&lt;div&gt;​&lt;/div&gt;​
&gt; var p1 = document.createElement(&quot;p&quot;);
undefined
&gt; p1.innerHTML = &quot;Hello&quot;;
&quot;Hello&quot;
&gt; p1
&lt;p&gt;​Hello​&lt;/p&gt;​
&gt; j.appendChild(p1);
&lt;p&gt;​Hello​&lt;/p&gt;
&gt; j
&lt;div&gt;​
&lt;p&gt;Hello&lt;/p&gt;​
&lt;/div&gt;​
&gt; j.childNodes[0]
&lt;p&gt;Hello&lt;/p&gt;​
&gt; j.childNodes[0] == p1
true
&gt; j.childNodes[0] === p1
true


&gt; &gt; 
&gt; &gt; Bringing the focus back to the patch, however, this question only affects wether the conformance test is valid on all platforms. If not, then there are other tests that need to be adjusted to compensate (https://www.khronos.org/registry/webgl/conformance-suites/1.0.1/conformance/state/gl-object-get-calls.html) Beyond that, this particular unit test is skipped on most platforms and expected to be flaky on those that it&apos;s enabled on due to limits of the testing framework. If it&apos;s the only thing that&apos;s holding this CL back perhaps it&apos;s more prudent to remove the test until a better solution can be found?

The test is fine. My original comment was wrong. Let&apos;s proceed with the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724999</commentid>
    <comment_count>17</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-20 17:20:14 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; (In reply to comment #13) 
&gt; &gt; &gt; &gt; Since that doesn&apos;t work, you need to make the wrapper collectable from JS - but you don&apos;t want to expose when GC runs.  This is why I think it makes more sense to always return a new wrapper object from get...() calls.
&gt; &gt; &gt; 
&gt; &gt; &gt; That&apos;s sensible, but the real question in this context is if two distinct wrapper objects for the same underlying GL resource will be comparable:
&gt; &gt; &gt; 
&gt; &gt; &gt; var buffer1 = gl.createBuffer();
&gt; &gt; &gt; gl.bindBuffer(gl.ARRAY_BUFFER, buffer1);
&gt; &gt; &gt; var buffer2 = gl.getParameter(gl.ARRAY_BUFFER_BINDING);
&gt; &gt; &gt; if(buffer1 == buffer2) {
&gt; &gt; &gt;   // Success?
&gt; &gt; &gt; }
&gt; &gt; &gt; 
&gt; &gt; &gt; Most developers will expect the above to work (including myself up until I read Ken&apos;s comments). Does it?
&gt; &gt; 
&gt; &gt; they should === false, for sure.  I also don&apos;t think they should have the expandos, so I&apos;d guess == would be false.  I&apos;m less confident about when == and === should differ in JS.
&gt; &gt; 
&gt; &gt; Logically buffer1 and buffer 2 are different things.
&gt; 
&gt; No, they should be == and ===. They are referring to the same underlying C++ object. So long as the JS wrapper for the underlying C++ WebGLBuffer object hasn&apos;t been GC&apos;d (which it won&apos;t be, because the buffer1 reference keeps it alive), the fact that the gl.getParameter call returns the same WebGLBuffer object will cause the bindings to return the same wrapper. Note the following, which does the same sorts of queries against the DOM:
&gt; 

I see, that makes sense.  What about expandos on buffer1?  i.e. what if I do:

function one() {
  var buffer1 = gl.createBuffer();
  buffer1.expando = &quot;happy&quot;;
  gl.bindBuffer(gl.ARRAY_BUFFER, buffer1);
}

function two() {
  var buffer2 = gl.getParameter(gl.ARRAY_BUFFER_BINDING);
  window.alert(buffer2.expando);
}

one();
two();

what do I get?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725001</commentid>
    <comment_count>18</comment_count>
      <attachid>164472</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-09-20 17:22:21 -0700</bug_when>
    <thetext>Comment on attachment 164472
Patch

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

Thanks, this is much easier to understand.

What about attempting to explicitly test the lifetime of buffer objects referred to by VAOs? In particular, if a buffer object was created, a VAO pointed to it, the buffer deleted, and the VAO deleted? isBuffer should return false, I believe, and I think the earlier version of the patch would have failed that test.

&gt; Source/WebCore/html/canvas/WebGLVertexArrayObjectOES.cpp:92
&gt; +        buffer-&gt;onAttached();

Should the &quot;if (buffer) buffer-&gt;onAttached();&quot; go at the top of the function? Otherwise, if the buffer&apos;s been deleted, then setting the element array buffer to the same buffer object will cause it to be deleted.

&gt; Source/WebCore/html/canvas/WebGLVertexArrayObjectOES.cpp:105
&gt; +        buffer-&gt;onAttached();

Same comment here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725006</commentid>
    <comment_count>19</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-09-20 17:27:16 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (In reply to comment #15)
&gt; &gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; &gt; (In reply to comment #13) 
&gt; &gt; &gt; &gt; &gt; Since that doesn&apos;t work, you need to make the wrapper collectable from JS - but you don&apos;t want to expose when GC runs.  This is why I think it makes more sense to always return a new wrapper object from get...() calls.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; That&apos;s sensible, but the real question in this context is if two distinct wrapper objects for the same underlying GL resource will be comparable:
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; var buffer1 = gl.createBuffer();
&gt; &gt; &gt; &gt; gl.bindBuffer(gl.ARRAY_BUFFER, buffer1);
&gt; &gt; &gt; &gt; var buffer2 = gl.getParameter(gl.ARRAY_BUFFER_BINDING);
&gt; &gt; &gt; &gt; if(buffer1 == buffer2) {
&gt; &gt; &gt; &gt;   // Success?
&gt; &gt; &gt; &gt; }
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Most developers will expect the above to work (including myself up until I read Ken&apos;s comments). Does it?
&gt; &gt; &gt; 
&gt; &gt; &gt; they should === false, for sure.  I also don&apos;t think they should have the expandos, so I&apos;d guess == would be false.  I&apos;m less confident about when == and === should differ in JS.
&gt; &gt; &gt; 
&gt; &gt; &gt; Logically buffer1 and buffer 2 are different things.
&gt; &gt; 
&gt; &gt; No, they should be == and ===. They are referring to the same underlying C++ object. So long as the JS wrapper for the underlying C++ WebGLBuffer object hasn&apos;t been GC&apos;d (which it won&apos;t be, because the buffer1 reference keeps it alive), the fact that the gl.getParameter call returns the same WebGLBuffer object will cause the bindings to return the same wrapper. Note the following, which does the same sorts of queries against the DOM:
&gt; &gt; 
&gt; 
&gt; I see, that makes sense.  What about expandos on buffer1?  i.e. what if I do:
&gt; 
&gt; function one() {
&gt;   var buffer1 = gl.createBuffer();
&gt;   buffer1.expando = &quot;happy&quot;;
&gt;   gl.bindBuffer(gl.ARRAY_BUFFER, buffer1);
&gt; }
&gt; 
&gt; function two() {
&gt;   var buffer2 = gl.getParameter(gl.ARRAY_BUFFER_BINDING);
&gt;   window.alert(buffer2.expando);
&gt; }
&gt; 
&gt; one();
&gt; two();
&gt; 
&gt; what do I get?

The expandos should be preserved, because the same JS wrapper should be being returned -- but I am not 100% sure that the WebGL implementation is guaranteeing that right now. (In particular, if a GC is forced between the calls to one() and two().) It&apos;s definitely guaranteed for extension objects -- you&apos;ll recall that a while back you reviewed the implementation of WebGLRenderingContext.getExtension() and caught bugs in this area.

If it turns out there is an issue like this, then the behavior needs to be clarified in the WebGL spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725062</commentid>
    <comment_count>20</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-20 18:43:23 -0700</bug_when>
    <thetext>Wait, now I&apos;m back to confused.  In this case:

function foo() {
  var buffer = gl.createBuffer();
  buffer.nastyExpando = gl;
  gl.bindBuffer(gl.ARRAY_BUFFER, buffer1);
}


are you saying that you expect the JS wrapper around buffer to be held alive?  In this case the wrapper is holding a ref to the context itself, so I don&apos;t know how anything will ever be torn down without the javascript garbage collector having knowledge of the relationship between the buffer&apos;s wrapper and the context&apos;s wrapper (like we do for DOM).  My understanding of how to fix this problem is that we agreed that all functions that query getters off of the context object itself have to return a fresh wrapper.  Maybe there&apos;s another solution?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725701</commentid>
    <comment_count>21</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-09-21 12:23:24 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Wait, now I&apos;m back to confused.  In this case:
&gt; 
&gt; function foo() {
&gt;   var buffer = gl.createBuffer();
&gt;   buffer.nastyExpando = gl;
&gt;   gl.bindBuffer(gl.ARRAY_BUFFER, buffer1);
&gt; }
&gt; 
&gt; 
&gt; are you saying that you expect the JS wrapper around buffer to be held alive?  In this case the wrapper is holding a ref to the context itself, so I don&apos;t know how anything will ever be torn down without the javascript garbage collector having knowledge of the relationship between the buffer&apos;s wrapper and the context&apos;s wrapper (like we do for DOM).  My understanding of how to fix this problem is that we agreed that all functions that query getters off of the context object itself have to return a fresh wrapper.  Maybe there&apos;s another solution?

Many of the queries in the WebGL spec are defined to return new objects; getUniformLocation, getShaderPrecisionFormat, all getParameter calls returning sequences or typed arrays, etc. In these situations new wrappers are returned. However, for get calls which return a pointer to a preexisting OpenGL handle like a buffer or texture, they are going to return the same C++ object that was previously set, similar to how the DOM works.

Creating a JS reference from the buffer to the context won&apos;t (or shouldn&apos;t, at least) prevent the buffer or context from being cleaned up. The bindings hold only weak references from the C++ objects to their JS wrappers, so there is no reference cycle between JS and C++.

Right now the WebGL spec doesn&apos;t guarantee that the associated JS wrapper object will not be collected, so the expando might disappear during the next GC, or it might not. If we strongly care about making this behavior consistent among WebGL implementations then we should change the spec and implementation so that the C++ objects have a strong reference to their JS wrappers, and I believe that that would in fact require the C++ objects to tell the JS GC about that relationship. I&apos;m not in favor of making this change since as far as I know it hasn&apos;t been raised as a problem by any developer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725707</commentid>
    <comment_count>22</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-21 12:29:55 -0700</bug_when>
    <thetext>Observable JS GC is a really difficult problem to attempt to patch later and will definitely trip someone up sooner or later. You really have to design to avoid issues or you&apos;re in for a world of hurt sometime down the road.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725741</commentid>
    <comment_count>23</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-09-21 13:14:54 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Observable JS GC is a really difficult problem to attempt to patch later and will definitely trip someone up sooner or later. You really have to design to avoid issues or you&apos;re in for a world of hurt sometime down the road.

I agree with you that we should look more deeply into the issue with WebGL extensions requiring that the same object be returned each time, and whether there is any resource leak there. However, Brandon&apos;s patch definitely doesn&apos;t introduce any new problems, so let&apos;s proceed with landing this first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725743</commentid>
    <comment_count>24</comment_count>
      <attachid>164472</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-09-21 13:15:34 -0700</bug_when>
    <thetext>Comment on attachment 164472
Patch

Clearing the review bit on this patch so others don&apos;t get confused about its state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725753</commentid>
    <comment_count>25</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-09-21 13:23:52 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; Observable JS GC is a really difficult problem to attempt to patch later and will definitely trip someone up sooner or later. You really have to design to avoid issues or you&apos;re in for a world of hurt sometime down the road.
&gt; 
&gt; I agree with you that we should look more deeply into the issue with WebGL extensions requiring that the same object be returned each time, and whether there is any resource leak there. However, Brandon&apos;s patch definitely doesn&apos;t introduce any new problems, so let&apos;s proceed with landing this first.

SGTM!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725874</commentid>
    <comment_count>26</comment_count>
      <attachid>165206</attachid>
    <who name="Brandon Jones">bajones</who>
    <bug_when>2012-09-21 15:15:01 -0700</bug_when>
    <thetext>Created attachment 165206
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725882</commentid>
    <comment_count>27</comment_count>
      <attachid>165209</attachid>
    <who name="Brandon Jones">bajones</who>
    <bug_when>2012-09-21 15:29:22 -0700</bug_when>
    <thetext>Created attachment 165209
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725955</commentid>
    <comment_count>28</comment_count>
      <attachid>165209</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-09-21 16:30:44 -0700</bug_when>
    <thetext>Comment on attachment 165209
Patch

Looks good. Thanks for enhancing the test. r=me. Marking this cq+ since we&apos;ve discussed it offline, but for future reference set the cq? bit if you want your patches submitted to the commit queue by the reviewer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725969</commentid>
    <comment_count>29</comment_count>
      <attachid>165209</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-21 16:47:15 -0700</bug_when>
    <thetext>Comment on attachment 165209
Patch

Clearing flags on attachment: 165209

Committed r129275: &lt;http://trac.webkit.org/changeset/129275&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725970</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-21 16:47:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163740</attachid>
            <date>2012-09-12 17:02:26 -0700</date>
            <delta_ts>2012-09-14 15:30:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96578-20120912170200.patch</filename>
            <type>text/plain</type>
            <size>34391</size>
            <attacher name="Brandon Jones">bajones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAyNDBkOTMyY2Y4NDU5
YzM4OTFjZmQ3ZjMxY2IxZWY3MDRiMDNjODZhLi4zM2ExYjZlMWQzZGFjMWNiNjViZWJhZDAxOGIw
YTEzOTVkNTNlZDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0wOS0xMiAg
QnJhbmRvbiBKb25lcyAgPGJham9uZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9y
dCBmb3IgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgaW4gY2hyb21pdW0KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NTc4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgY29kZSB0byBhbGxvdyBjYWxs
cyB0byB0aGUgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgZXh0ZW5zaW9uIHRvIGludGVyZmFjZQor
ICAgICAgICBwcm9wZXJseSB3aXRoIHRoZSBjaHJvbWl1bSBXZWJHTCBpbXBsZW1lbnRhdGlvbi4g
CisKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAg
ICAgICAgKFdlYkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6YmluZFZlcnRleEFycmF5T0VTKToKKwogMjAxMi0w
OS0xMSAgWmFjaCBLdXpuaWEgIDx6b3JrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXggRmls
dGVyVHlwZVpvb20gdG8gcHJvcGVybHkgY2FsbCBjYW52YXMtPnJlc3RvcmUoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGMxYThiYmU5NjNlY2RjYTA2NmJmMmM0NWJlYTRlZGRhZDMzYjg1ZmIuLjVhODAyZTNlZThk
NjY5MGZkNTgxZjRkOGJmYTY0NGE5NzQ0NjgyNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBA
QAorMjAxMi0wOS0xMiAgQnJhbmRvbiBKb25lcyAgPGJham9uZXNAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBBZGQgc3VwcG9ydCBmb3IgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgaW4gY2hyb21pdW0K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NTc4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIGJh
c2ljIHJlZmVyZW5jZSBjb3VudGluZyB0byBXZWJHTEJ1ZmZlciBvYmplY3RzIHRvIHNhdGlzZnkg
c3BlYyByZXF1aXJlbWVudHMKKyAgICAgICAgZm9yIHRoZSBPRVNfdmVydGV4X2FycmF5X29iamVj
dCBleHRlbnNpb24uIEFkZGVkIGNvZGUgdG8gYWxsb3cgY2FsbHMgdG8gdGhlCisgICAgICAgIE9F
U192ZXJ0ZXhfYXJyYXlfb2JqZWN0IGV4dGVuc2lvbiB0byBpbnRlcmZhY2UgcHJvcGVybHkgd2l0
aCB0aGUgY2hyb21pdW0gV2ViR0wKKyAgICAgICAgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAg
VGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1vYmplY3QuaHRtbAorCisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxl
dGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0
ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVM6OnNldEVsZW1lbnRBcnJheUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmg6CisgICAgICAgIChXZWJH
TFZlcnRleEFycmF5T2JqZWN0T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVM6OmdldFZlcnRleEF0dHJpYlN0YXRlU2l6ZSk6CisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vc3VwcG9ydC9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6Y3JlYXRlVmVydGV4QXJyYXlPRVMpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmRlbGV0ZVZlcnRleEFycmF5T0VT
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjppc1ZlcnRleEFycmF5
T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpiaW5kVmVydGV4
QXJyYXlPRVMpOgorCiAyMDEyLTA5LTEyICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBUaGUgfHNvdXJjZXwgcHJvcGVydHkgb2YgSURCRmFj
dG9yeS5vcGVuKCkgcmVxdWVzdCBzaG91bGQgYmUgbnVsbApkaWZmIC0tZ2l0IGEvU291cmNlL1Bs
YXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1Bs
YXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDMxMmQ0
ZmFiN2E2Mjk0NTdmY2NhZTljZTcyODE3YTMyZDkwNmU1ZjYuLjgyZDNkMzZjOGFiNTRlZDBhM2Ix
ODRjNDFmYzJhODYxYWQ1NWU3OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1
bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hy
b21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgKQEAgLTQ0Myw2ICs0NDMsMTIgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwdXNoR3JvdXBNYXJrZXJFWFQoY29uc3QgV0dDM0Rj
aGFyKiBtYXJrZXIpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBwb3BHcm91cE1hcmtlckVYVCh2b2lk
KSB7IH0KIAorICAgIC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0CisgICAgdmlydHVhbCBX
ZWJHTElkIGNyZWF0ZVZlcnRleEFycmF5T0VTKCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhXZWJHTElkIGFycmF5KSB7IH0KKyAgICB2aXJ0dWFs
IFdHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFdlYkdMSWQgYXJyYXkpIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhXZWJHTElkIGFycmF5
KSB7IH0KKwogICAgIEdyR0xJbnRlcmZhY2UqIGNyZWF0ZUdyR0xJbnRlcmZhY2UoKTsKIAogcHJv
dGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAKaW5kZXggYzQwYmE0M2U5ODZhOGFhNTNmNWRhYTg2MjYwMDJiMzQzZmM2
Yjg1ZS4uODljMTI3Zjc0ZWEyNjYyNmQ2MWJjM2FiYmQ5MmIwNjk1NTJmMjdjMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
CkBAIC0xNTQ1LDE3ICsxNTQ1LDI0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxl
dGVCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikKICAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IGVs
ZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFy
cmF5QnVmZmVyKCk7CiAgICAgaWYgKGVsZW1lbnRBcnJheUJ1ZmZlciA9PSBidWZmZXIpCiAgICAg
ICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0RWxlbWVudEFycmF5QnVmZmVyKDApOwot
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9i
amVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGVTaXplKCk7
ICsraSkgeworICAgICAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJT
dGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0
YXRlKGkpOwogICAgICAgICBpZiAoYnVmZmVyID09IHN0YXRlLmJ1ZmZlckJpbmRpbmcpIHsKLSAg
ICAgICAgICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmcgPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7Ci0g
ICAgICAgICAgICBzdGF0ZS5ieXRlc1BlckVsZW1lbnQgPSAwOwotICAgICAgICAgICAgc3RhdGUu
c2l6ZSA9IDQ7Ci0gICAgICAgICAgICBzdGF0ZS50eXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUOwotICAgICAgICAgICAgc3RhdGUubm9ybWFsaXplZCA9IGZhbHNlOwotICAgICAgICAgICAg
c3RhdGUuc3RyaWRlID0gMTY7Ci0gICAgICAgICAgICBzdGF0ZS5vcmlnaW5hbFN0cmlkZSA9IDA7
Ci0gICAgICAgICAgICBzdGF0ZS5vZmZzZXQgPSAwOworICAgICAgICAgICAgYnVmZmVyLT5vbkRl
dGFjaGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpOworCisgICAgICAgICAgICBpZiAoIWkgJiYgIWlz
R0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICAgICAgICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmcg
PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7CisgICAgICAgICAgICAgICAgc3RhdGUuYnVmZmVyQmlu
ZGluZy0+b25BdHRhY2hlZCgpOworICAgICAgICAgICAgICAgIHN0YXRlLmJ5dGVzUGVyRWxlbWVu
dCA9IDA7CisgICAgICAgICAgICAgICAgc3RhdGUuc2l6ZSA9IDQ7CisgICAgICAgICAgICAgICAg
c3RhdGUudHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgICAgICAgICBz
dGF0ZS5ub3JtYWxpemVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgc3RhdGUuc3RyaWRlID0g
MTY7CisgICAgICAgICAgICAgICAgc3RhdGUub3JpZ2luYWxTdHJpZGUgPSAwOworICAgICAgICAg
ICAgICAgIHN0YXRlLm9mZnNldCA9IDA7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gMDsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTQz
ODQsNiArNDM5MSw5IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQ
b2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDCiAgICAgR0MzRHNpemVpIHZh
bGlkYXRlZFN0cmlkZSA9IHN0cmlkZSA/IHN0cmlkZSA6IGJ5dGVzUGVyRWxlbWVudDsKIAogICAg
IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1f
Ym91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworICAg
IGlmIChzdGF0ZS5idWZmZXJCaW5kaW5nKQorICAgICAgICBzdGF0ZS5idWZmZXJCaW5kaW5nLT5v
bkRldGFjaGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgIG1fYm91bmRBcnJheUJ1ZmZlci0+
b25BdHRhY2hlZCgpOwogICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmcgPSBtX2JvdW5kQXJyYXlCdWZm
ZXI7CiAgICAgc3RhdGUuYnl0ZXNQZXJFbGVtZW50ID0gYnl0ZXNQZXJFbGVtZW50OwogICAgIHN0
YXRlLnNpemUgPSBzaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcAppbmRleCA0YWEwM2I4ZmVhMTUxOWI5NzIy
MzcwNGNhZmJmYTc2MzgxMzJhZjIyLi5kMTg5ZDA0OGYxNjIxMTNhNmFhZTFiOGNjZDM4MDU5NDI2
ZDIzNmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcApAQCAtNzQsNiArNzQsMTUgQEAgdm9pZCBXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTOjpkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0M2QsIFAKICAgICB9CiB9CiAKK3ZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
c2V0RWxlbWVudEFycmF5QnVmZmVyKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IGJ1ZmZlcikKK3sK
KyAgICBpZiAobV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlcikKKyAgICAgICAgbV9ib3VuZEVsZW1l
bnRBcnJheUJ1ZmZlci0+b25EZXRhY2hlZChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCkp
OworICAgIG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIgPSBidWZmZXI7CisgICAgaWYgKGJ1ZmZl
cikKKyAgICAgICAgYnVmZmVyLT5vbkF0dGFjaGVkKCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVMuaAppbmRleCA3NWFlNDJmZjcyNWFjZDFkZmVkYmNlNmEwYmM5
MmQzYzQwMjhmNDM1Li4zMzUzOTRlN2NmMjhhYjliMjBjODE4Y2E5NTEwYmM0MGQ1ODExYTcwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUy5oCkBAIC03Niw5ICs3NiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNF
dmVyQmVlbkJvdW5kKCkgeyBtX2hhc0V2ZXJCZWVuQm91bmQgPSB0cnVlOyB9CiAgICAgCiAgICAg
UGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gZ2V0RWxlbWVudEFycmF5QnVmZmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlcjsgfQotICAgIHZvaWQgc2V0RWxlbWVudEFy
cmF5QnVmZmVyKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IGJ1ZmZlcikgeyBtX2JvdW5kRWxlbWVu
dEFycmF5QnVmZmVyID0gYnVmZmVyOyB9CisgICAgdm9pZCBzZXRFbGVtZW50QXJyYXlCdWZmZXIo
UGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4pOwogICAgIAogICAgIFZlcnRleEF0dHJpYlN0YXRlJiBn
ZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbnQgaW5kZXgpIHsgcmV0dXJuIG1fdmVydGV4QXR0cmliU3Rh
dGVbaW5kZXhdOyB9CisgICAgc2l6ZV90IGdldFZlcnRleEF0dHJpYlN0YXRlU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpOyB9CiAKIHByaXZhdGU6CiAgICAg
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBWYW9UeXBl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
RXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vc3VwcG9ydC9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAKaW5kZXggOTQxMjI3NGM3NjI4MzVj
NTlmOWMwMDc1ZTU0NmQyOTczNzcyNWFjZC4uMTdjMzAyMTgzMGEyMGIyNGE0ZjdjNmVlNTEyMmFi
YTFmY2IyMzljYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
c3VwcG9ydC9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAKQEAgLTk3LDIw
ICs5NywyMiBAQCB2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjp1bm1hcFRleFN1YkltYWdlMkRD
SFJPTUlVTShjb25zdCB2b2lkKiBkYXRhKQogCiBQbGF0Zm9ybTNET2JqZWN0IEV4dGVuc2lvbnMz
RENocm9taXVtOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOwog
fQogCi12b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0
Zm9ybTNET2JqZWN0KQordm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6ZGVsZXRlVmVydGV4QXJy
YXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKIHsKKyAgICBtX3ByaXZhdGUtPndlYkNvbnRl
eHQoKS0+ZGVsZXRlVmVydGV4QXJyYXlPRVMoYXJyYXkpOwogfQogCi1HQzNEYm9vbGVhbiBFeHRl
bnNpb25zM0RDaHJvbWl1bTo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KQorR0Mz
RGJvb2xlYW4gRXh0ZW5zaW9uczNEQ2hyb21pdW06OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0z
RE9iamVjdCBhcnJheSkKIHsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9wcml2YXRlLT53
ZWJDb250ZXh0KCktPmlzVmVydGV4QXJyYXlPRVMoYXJyYXkpOwogfQogCi12b2lkIEV4dGVuc2lv
bnMzRENocm9taXVtOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkKK3ZvaWQg
RXh0ZW5zaW9uczNEQ2hyb21pdW06OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0
IGFycmF5KQogeworICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5iaW5kVmVydGV4QXJyYXlP
RVMoYXJyYXkpOwogfQogCiBTdHJpbmcgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmdldFRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA5Nzkx
NDRiMTVjNTA3NmVhYzUxYzE1ODI1MmNlMjE2MTAxMTBjMjdlLi5mN2VjMmFjNTRhNzNhMjljNDdl
NjkxNDFkMzY1MDhmYmYxNWQyMzcxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDktMTIg
IEJyYW5kb24gSm9uZXMgIDxiYWpvbmVzQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBv
cnQgZm9yIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IGluIGNocm9taXVtCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjU3OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJyb3VnaHQgb3ZlciBLSFJPTk9TIGNv
bmZvcm1hbmNlIHRlc3QgZm9yIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0CisKKyAgICAgICAgKiBm
YXN0L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvY2FudmFzL3dl
YmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIwMTIt
MDktMTIgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbmRl
eGVkREI6IFRoZSB8c291cmNlfCBwcm9wZXJ0eSBvZiBJREJGYWN0b3J5Lm9wZW4oKSByZXF1ZXN0
IHNob3VsZCBiZSBudWxsCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzdhYmFkZDc4MWI2NGZiZDYyMTY0YzcxYTdiOTYzNmIyMDg3ZjYyOQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXkt
b2JqZWN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUwIEBACitUaGlzIHRlc3QgdmVyaWZpZXMg
dGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IGV4dGVuc2lv
biwgaWYgaXQgaXMgYXZhaWxhYmxlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyBXZWJHTCBjb250ZXh0IGV4aXN0cworVGVzdGluZyBiaW5kaW5nIGVudW0gd2l0aCBleHRl
bnNpb24gZGlzYWJsZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElE
X0VOVU0gOiBWRVJURVhfQVJSQVlfQklORElOR19PRVMgc2hvdWxkIG5vdCBiZSBxdWVyeWFibGUg
aWYgZXh0ZW5zaW9uIGlzIGRpc2FibGVkCitQQVNTIFN1Y2Nlc3NmdWxseSBlbmFibGVkIE9FU192
ZXJ0ZXhfYXJyYXlfb2JqZWN0IGV4dGVuc2lvbgorUEFTUyBPRVNfdmVydGV4X2FycmF5X29iamVj
dCBsaXN0ZWQgYXMgc3VwcG9ydGVkIGFuZCBnZXRFeHRlbnNpb24gc3VjY2VlZGVkCitUZXN0aW5n
IGJpbmRpbmcgZW51bSB3aXRoIGV4dGVuc2lvbiBlbmFibGVkCitQQVNTIGV4dC5WRVJURVhfQVJS
QVlfQklORElOR19PRVMgaXMgMHg4NUI1CitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiBWRVJURVhfQVJSQVlfQklORElOR19PRVMgcXVlcnkgc2hvdWxkIHN1Y2Nl
ZWQgaWYgZXh0ZW5zaW9uIGlzIGVuYWJsZQorUEFTUyBEZWZhdWx0IHZhbHVlIG9mIFZFUlRFWF9B
UlJBWV9CSU5ESU5HX09FUyBpcyBudWxsCitUZXN0aW5nIGJpbmRpbmcgYSBWQU8KK1BBU1MgZ2wu
Z2V0UGFyYW1ldGVyKGV4dC5WRVJURVhfQVJSQVlfQklORElOR19PRVMpIGlzIG51bGwKK1BBU1Mg
Z2wuZ2V0UGFyYW1ldGVyKGV4dC5WRVJURVhfQVJSQVlfQklORElOR19PRVMpIGlzIGV4cGVjdGVk
IFZBTworUEFTUyBnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUykg
aXMgZXhwZWN0ZWQgVkFPCitQQVNTIGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJ
TkRJTkdfT0VTKSBpcyBudWxsCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5W
QUxJRF9PUEVSQVRJT04gOiBiaW5kaW5nIGEgZGVsZXRlZCB2ZXJ0ZXggYXJyYXkgb2JqZWN0CitQ
QVNTIGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSBpcyBudWxs
CitUZXN0aW5nIG9iamVjdCBjcmVhdGlvbgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SIDogY3JlYXRlVmVydGV4QXJyYXlPRVMgc2hvdWxkIG5vdCBzZXQgYW4gZXJy
b3IKK1BBU1MgdmFvIGlzIG5vbi1udWxsLgorUEFTUyBleHQuaXNWZXJ0ZXhBcnJheU9FUyh2YW8p
IGlzIGZhbHNlCitQQVNTIGV4dC5pc1ZlcnRleEFycmF5T0VTKHZhbykgaXMgdHJ1ZQorUEFTUyBl
eHQuaXNWZXJ0ZXhBcnJheU9FUyh2YW8pIGlzIHRydWUKK1BBU1MgZXh0LmlzVmVydGV4QXJyYXlP
RVMoKSBpcyBmYWxzZQorUEFTUyBleHQuaXNWZXJ0ZXhBcnJheU9FUyhudWxsKSBpcyBmYWxzZQor
VGVzdGluZyBhdHRyaWJ1dGVzIHdvcmsgYWNyb3NzIGJpbmRpbmdzCitQQVNTIEFsbCBhdHRyaWJ1
dGVzIHByZXNlcnZlZCBhY3Jvc3MgYmluZGluZ3MKK1Rlc3RpbmcgdGhhdCBhdHRyaWJ1dGUgdmFs
dWVzIGFyZSBub3QgYXR0YWNoZWQgdG8gYmluZGluZ3MKK1BBU1MgVmVydGV4IGF0dHJpYnV0ZSB2
YWx1ZXMgYXJlIG5vdCBhdHRhY2hlZCB0byBiaW5kaW5ncworVGVzdGluZyBkcmF3cyB3aXRoIHZh
cmlvdXMgVkFPIGJpbmRpbmdzCitQQVNTIERyYXcgMCBwYXNzZWQgcGl4ZWwgdGVzdAorUEFTUyBE
cmF3IDEgcGFzc2VkIHBpeGVsIHRlc3QKK1BBU1MgRHJhdyAyIHBhc3NlZCBwaXhlbCB0ZXN0CitU
ZXN0aW5nIHVzaW5nIGRlbGV0ZWQgYnVmZmVycyByZWZlcmVuY2VkIGJ5IFZBT3MKK1BBU1Mgc2hv
dWxkIGJlIDI1NSwwLDAsMjU1CitQQVNTIHNob3VsZCBiZSAwLDI1NSwwLDI1NQorUEFTUyBzaG91
bGQgYmUgMCwwLDI1NSwyNTUKK1BBU1Mgc2hvdWxkIGJlIDAsMjU1LDI1NSwyNTUKK1Rlc3Rpbmcg
dGhhdCBWQU9zIGRvbid0IGVmZmVjdCBBUlJBWV9CVUZGRVIgYmluZGluZy4KK1BBU1Mgc2hvdWxk
IGJlIHJlZAorUEFTUyBzaG91bGQgYmUgZ3JlZW4KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IHRoZXJlIHNob3VsZCBiZSBubyBlcnJvcnMKKworUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvb2Vz
LXZlcnRleC1hcnJheS1vYmplY3QuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODRkYzNiMmZmNTUzZjUz
YjAzODhkZDAyODVhYTcwMmNiNTFlNDAzYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWwKQEAgLTAsMCAr
MSw1ODYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KKzx0aXRsZT5XZWJHTCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBDb25mb3JtYW5j
ZSBUZXN0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Rlc2t0b3AtZ2wtY29uc3Rh
bnRzLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNl
cy93ZWJnbC10ZXN0LXV0aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBp
ZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGNhbnZhcyBpZD0iY2FudmFzIiBzdHlsZT0id2lkdGg6
IDUwcHg7IGhlaWdodDogNTBweDsiPiA8L2NhbnZhcz4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPHNjcmlwdCBpZD0idnNoYWRlciIsIHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KK2F0dHJp
YnV0ZSB2ZWM0IGFfcG9zaXRpb247CithdHRyaWJ1dGUgdmVjNCBhX2NvbG9yOwordmFyeWluZyB2
ZWM0IHZfY29sb3I7Cit2b2lkIG1haW4odm9pZCkgeworICAgIGdsX1Bvc2l0aW9uID0gYV9wb3Np
dGlvbjsKKyAgICB2X2NvbG9yID0gYV9jb2xvcjsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0i
ZnNoYWRlciIsIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgorcHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7Cit2YXJ5aW5nIHZlYzQgdl9jb2xvcjsKK3ZvaWQgbWFpbih2b2lkKSB7CisgICAgZ2xf
RnJhZ0NvbG9yID0gdl9jb2xvcjsKK30KKzwvc2NyaXB0PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9u
KCJUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIE9FU192ZXJ0ZXhf
YXJyYXlfb2JqZWN0IGV4dGVuc2lvbiwgaWYgaXQgaXMgYXZhaWxhYmxlLiIpOworCitkZWJ1Zygi
Iik7CisKK3ZhciB3dHUgPSBXZWJHTFRlc3RVdGlsczsKK3ZhciBjYW52YXMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Cit2YXIgZ2wgPSBjcmVhdGUzRENvbnRleHQoY2FudmFz
KTsKK3ZhciBleHQgPSBudWxsOwordmFyIHZhbyA9IG51bGw7CisKK2lmICghZ2wpIHsKKyAgICB0
ZXN0RmFpbGVkKCJXZWJHTCBjb250ZXh0IGRvZXMgbm90IGV4aXN0Iik7Cit9IGVsc2UgeworICAg
IHRlc3RQYXNzZWQoIldlYkdMIGNvbnRleHQgZXhpc3RzIik7CisKKyAgICAvLyBTZXR1cCBlbXVs
YXRlZCBPRVNWZXJ0ZXhBcnJheU9iamVjdCBpZiBpdCBoYXMgYmVlbiBpbmNsdWRlZC4KKyAgICBp
ZiAod2luZG93LnNldHVwVmVydGV4QXJyYXlPYmplY3QpIHsKKyAgICAgICAgZGVidWcoInVzaW5n
IGVtdWF0ZWQgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAgICAgICAgc2V0dXBWZXJ0ZXhB
cnJheU9iamVjdChnbCk7CisgICAgfQorCisgICAgLy8gUnVuIHRlc3RzIHdpdGggZXh0ZW5zaW9u
IGRpc2FibGVkCisgICAgcnVuQmluZGluZ1Rlc3REaXNhYmxlZCgpOworCisgICAgLy8gUXVlcnkg
dGhlIGV4dGVuc2lvbiBhbmQgc3RvcmUgZ2xvYmFsbHkgc28gc2hvdWxkQmUgY2FuIGFjY2VzcyBp
dAorICAgIGV4dCA9IGdsLmdldEV4dGVuc2lvbigiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsK
KyAgICBpZiAoIWV4dCkgeworICAgICAgICB0ZXN0UGFzc2VkKCJObyBPRVNfdmVydGV4X2FycmF5
X29iamVjdCBzdXBwb3J0IC0tIHRoaXMgaXMgbGVnYWwiKTsKKworICAgICAgICBydW5TdXBwb3J0
ZWRUZXN0KGZhbHNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0UGFzc2VkKCJTdWNjZXNz
ZnVsbHkgZW5hYmxlZCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBleHRlbnNpb24iKTsKKworICAg
ICAgICBydW5TdXBwb3J0ZWRUZXN0KHRydWUpOworICAgICAgICBydW5CaW5kaW5nVGVzdEVuYWJs
ZWQoKTsKKyAgICAgICAgcnVuT2JqZWN0VGVzdCgpOworICAgICAgICBydW5BdHRyaWJ1dGVUZXN0
cygpOworICAgICAgICBydW5BdHRyaWJ1dGVWYWx1ZVRlc3RzKCk7CisgICAgICAgIHJ1bkRyYXdU
ZXN0cygpOworICAgICAgICBydW5EZWxldGVUZXN0cygpOworICAgICAgICBydW5BcnJheUJ1ZmZl
ckJpbmRUZXN0cygpOworICAgICAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAi
dGhlcmUgc2hvdWxkIGJlIG5vIGVycm9ycyIpOworICAgIH0KK30KKworZnVuY3Rpb24gcnVuU3Vw
cG9ydGVkVGVzdChleHRlbnNpb25FbmFibGVkKSB7CisgICAgdmFyIHN1cHBvcnRlZCA9IGdsLmdl
dFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKKyAgICBpZiAoc3VwcG9ydGVkLmluZGV4T2YoIk9FU192
ZXJ0ZXhfYXJyYXlfb2JqZWN0IikgPj0gMCkgeworICAgICAgICBpZiAoZXh0ZW5zaW9uRW5hYmxl
ZCkgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgbGlz
dGVkIGFzIHN1cHBvcnRlZCBhbmQgZ2V0RXh0ZW5zaW9uIHN1Y2NlZWRlZCIpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3Qg
bGlzdGVkIGFzIHN1cHBvcnRlZCBidXQgZ2V0RXh0ZW5zaW9uIGZhaWxlZCIpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGV4dGVuc2lvbkVuYWJsZWQpIHsKKyAgICAgICAg
ICAgIHRlc3RGYWlsZWQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IG5vdCBsaXN0ZWQgYXMgc3Vw
cG9ydGVkIGJ1dCBnZXRFeHRlbnNpb24gc3VjY2VlZGVkIik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB0ZXN0UGFzc2VkKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgbGlzdGVk
IGFzIHN1cHBvcnRlZCBhbmQgZ2V0RXh0ZW5zaW9uIGZhaWxlZCAtLSB0aGlzIGlzIGxlZ2FsIik7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1bkJpbmRpbmdUZXN0RGlzYWJsZWQo
KSB7CisgICAgZGVidWcoIlRlc3RpbmcgYmluZGluZyBlbnVtIHdpdGggZXh0ZW5zaW9uIGRpc2Fi
bGVkIik7CisgICAgCisgICAgLy8gVXNlIHRoZSBjb25zdGFudCBkaXJlY3RseSBhcyB3ZSBkb24n
dCBoYXZlIHRoZSBleHRlbnNpb24KKyAgICB2YXIgVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTID0g
MHg4NUI1OworICAgIAorICAgIGdsLmdldFBhcmFtZXRlcihWRVJURVhfQVJSQVlfQklORElOR19P
RVMpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuSU5WQUxJRF9FTlVNLCAiVkVSVEVYX0FS
UkFZX0JJTkRJTkdfT0VTIHNob3VsZCBub3QgYmUgcXVlcnlhYmxlIGlmIGV4dGVuc2lvbiBpcyBk
aXNhYmxlZCIpOworfQorCitmdW5jdGlvbiBydW5CaW5kaW5nVGVzdEVuYWJsZWQoKSB7CisgICAg
ZGVidWcoIlRlc3RpbmcgYmluZGluZyBlbnVtIHdpdGggZXh0ZW5zaW9uIGVuYWJsZWQiKTsKKyAg
ICAKKyAgICBzaG91bGRCZSgiZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUyIsICIweDg1QjUi
KTsKKyAgICAKKyAgICBnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09F
Uyk7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgIlZFUlRFWF9BUlJBWV9C
SU5ESU5HX09FUyBxdWVyeSBzaG91bGQgc3VjY2VlZCBpZiBleHRlbnNpb24gaXMgZW5hYmxlIik7
CisgICAgCisgICAgLy8gRGVmYXVsdCB2YWx1ZSBpcyBudWxsCisgICAgaWYgKGdsLmdldFBhcmFt
ZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSA9PT0gbnVsbCkgeworICAgICAgICB0
ZXN0UGFzc2VkKCJEZWZhdWx0IHZhbHVlIG9mIFZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUyBpcyBu
dWxsIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiRGVmYXVsdCB2YWx1ZSBv
ZiBWRVJURVhfQVJSQVlfQklORElOR19PRVMgaXMgbm90IG51bGwiKTsKKyAgICB9CisgICAgCisg
ICAgZGVidWcoIlRlc3RpbmcgYmluZGluZyBhIFZBTyIpOworICAgIHZhciB2YW8wID0gZXh0LmNy
ZWF0ZVZlcnRleEFycmF5T0VTKCk7CisgICAgdmFyIHZhbzEgPSBleHQuY3JlYXRlVmVydGV4QXJy
YXlPRVMoKTsKKyAgICBzaG91bGRCZU51bGwoImdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FS
UkFZX0JJTkRJTkdfT0VTKSIpOworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvMCk7Cisg
ICAgaWYgKGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSA9PSB2
YW8wKSB7CisgICAgICAgIHRlc3RQYXNzZWQoImdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FS
UkFZX0JJTkRJTkdfT0VTKSBpcyBleHBlY3RlZCBWQU8iKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICB0ZXN0RmFpbGVkKCJnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09F
UykgaXMgbm90IGV4cGVjdGVkIFZBTyIpCisgICAgfQorICAgIGV4dC5iaW5kVmVydGV4QXJyYXlP
RVModmFvMSk7CisgICAgaWYgKGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJ
TkdfT0VTKSA9PSB2YW8xKSB7CisgICAgICAgIHRlc3RQYXNzZWQoImdsLmdldFBhcmFtZXRlcihl
eHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSBpcyBleHBlY3RlZCBWQU8iKTsKKyAgICB9IGVs
c2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJB
WV9CSU5ESU5HX09FUykgaXMgbm90IGV4cGVjdGVkIFZBTyIpCisgICAgfQorICAgIGV4dC5kZWxl
dGVWZXJ0ZXhBcnJheU9FUyh2YW8xKTsKKyAgICBzaG91bGRCZU51bGwoImdsLmdldFBhcmFtZXRl
cihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSIpOworICAgIGV4dC5iaW5kVmVydGV4QXJy
YXlPRVModmFvMSk7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5JTlZBTElEX09QRVJBVElP
TiwgImJpbmRpbmcgYSBkZWxldGVkIHZlcnRleCBhcnJheSBvYmplY3QiKTsKKyAgICBleHQuYmlu
ZFZlcnRleEFycmF5T0VTKG51bGwpOworICAgIHNob3VsZEJlTnVsbCgiZ2wuZ2V0UGFyYW1ldGVy
KGV4dC5WRVJURVhfQVJSQVlfQklORElOR19PRVMpIik7CisgICAgZXh0LmRlbGV0ZVZlcnRleEFy
cmF5T0VTKHZhbzEpOworfQorCitmdW5jdGlvbiBydW5PYmplY3RUZXN0KCkgeworICAgIGRlYnVn
KCJUZXN0aW5nIG9iamVjdCBjcmVhdGlvbiIpOworICAgIAorICAgIHZhbyA9IGV4dC5jcmVhdGVW
ZXJ0ZXhBcnJheU9FUygpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJj
cmVhdGVWZXJ0ZXhBcnJheU9FUyBzaG91bGQgbm90IHNldCBhbiBlcnJvciIpOworICAgIHNob3Vs
ZEJlTm9uTnVsbCgidmFvIik7CisgICAgCisgICAgLy8gRXhwZWN0IGZhbHNlIGlmIG5ldmVyIGJv
dW5kCisgICAgc2hvdWxkQmVGYWxzZSgiZXh0LmlzVmVydGV4QXJyYXlPRVModmFvKSIpOworICAg
IGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvKTsKKyAgICBzaG91bGRCZVRydWUoImV4dC5pc1Zl
cnRleEFycmF5T0VTKHZhbykiKTsKKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOwor
ICAgIHNob3VsZEJlVHJ1ZSgiZXh0LmlzVmVydGV4QXJyYXlPRVModmFvKSIpOworICAgIAorICAg
IHNob3VsZEJlRmFsc2UoImV4dC5pc1ZlcnRleEFycmF5T0VTKCkiKTsKKyAgICBzaG91bGRCZUZh
bHNlKCJleHQuaXNWZXJ0ZXhBcnJheU9FUyhudWxsKSIpOworICAgIAorICAgIGV4dC5kZWxldGVW
ZXJ0ZXhBcnJheU9FUyh2YW8pOworICAgIHZhbyA9IG51bGw7Cit9CisKK2Z1bmN0aW9uIHJ1bkF0
dHJpYnV0ZVRlc3RzKCkgeworICAgIGRlYnVnKCJUZXN0aW5nIGF0dHJpYnV0ZXMgd29yayBhY3Jv
c3MgYmluZGluZ3MiKTsKKyAgICAKKyAgICB2YXIgc3RhdGVzID0gW107CisgICAgCisgICAgdmFy
IGF0dHJDb3VudCA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpOworICAg
IGZvciAodmFyIG4gPSAwOyBuIDwgYXR0ckNvdW50OyBuKyspIHsKKyAgICAgICAgZ2wuYmluZEJ1
ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG51bGwpOworICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVM
RU1FTlRfQVJSQVlfQlVGRkVSLCBudWxsKTsKKyAgICAgICAgCisgICAgICAgIHZhciBzdGF0ZSA9
IHt9OworICAgICAgICBzdGF0ZXMucHVzaChzdGF0ZSk7CisgICAgICAgIAorICAgICAgICB2YXIg
dmFvID0gc3RhdGUudmFvID0gZXh0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7CisgICAgICAgIGV4
dC5iaW5kVmVydGV4QXJyYXlPRVModmFvKTsKKyAgICAgICAgCisgICAgICAgIGlmIChuICUgMiA9
PSAwKSB7CisgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShuKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShuKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG4gJSAyID09IDApIHsKKyAgICAgICAg
ICAgIHZhciBidWZmZXIgPSBzdGF0ZS5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAg
ICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpOworICAgICAgICAg
ICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIDEwMjQsIGdsLlNUQVRJQ19EUkFXKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihuLCAxICsg
biAlIDQsIGdsLkZMT0FULCB0cnVlLCBuICogNCwgbiAqIDQpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAobiAlIDIgPT0gMCkgeworICAgICAgICAgICAgdmFyIGVsYnVmZmVyID0g
c3RhdGUuZWxidWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgICAgICAgIGdsLmJpbmRC
dWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGVsYnVmZmVyKTsKKyAgICAgICAgICAgIGds
LmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDEwMjQsIGdsLlNUQVRJQ19EUkFX
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhu
dWxsKTsKKyAgICB9CisgICAgCisgICAgdmFyIGFueU1pc21hdGNoID0gZmFsc2U7CisgICAgZm9y
ICh2YXIgbiA9IDA7IG4gPCBhdHRyQ291bnQ7IG4rKykgeworICAgICAgICB2YXIgc3RhdGUgPSBz
dGF0ZXNbbl07CisgICAgICAgIAorICAgICAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKHN0YXRl
LnZhbyk7CisgICAgICAgIAorICAgICAgICB2YXIgaXNFbmFibGVkID0gZ2wuZ2V0VmVydGV4QXR0
cmliKG4sIGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCk7CisgICAgICAgIGlmICgobiAl
IDIgPT0gMSkgfHwgaXNFbmFibGVkKSB7CisgICAgICAgICAgICAvLyBWYWxpZAorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFC
TEVEIG5vdCBwcmVzZXJ2ZWQiKTsKKyAgICAgICAgICAgIGFueU1pc21hdGNoID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmFyIGJ1ZmZlciA9IGdsLmdldFZlcnRleEF0dHJp
YihuLCBnbC5WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HKTsKKyAgICAgICAgaWYg
KG4gJSAyID09IDApIHsKKyAgICAgICAgICAgIGlmIChidWZmZXIgPT0gc3RhdGUuYnVmZmVyKSB7
CisgICAgICAgICAgICAgICAgLy8gTWF0Y2hlZAorICAgICAgICAgICAgICAgIGlmICgoZ2wuZ2V0
VmVydGV4QXR0cmliKG4sIGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSkgPT0gMSArIG4gJSA0
KSAmJgorICAgICAgICAgICAgICAgICAgICAoZ2wuZ2V0VmVydGV4QXR0cmliKG4sIGdsLlZFUlRF
WF9BVFRSSUJfQVJSQVlfVFlQRSkgPT0gZ2wuRkxPQVQpICYmCisgICAgICAgICAgICAgICAgICAg
IChnbC5nZXRWZXJ0ZXhBdHRyaWIobiwgZ2wuVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVE
KSA9PSB0cnVlKSAmJgorICAgICAgICAgICAgICAgICAgICAoZ2wuZ2V0VmVydGV4QXR0cmliKG4s
IGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFKSA9PSBuICogNCkgJiYKKyAgICAgICAgICAg
ICAgICAgICAgKGdsLmdldFZlcnRleEF0dHJpYk9mZnNldChuLCBnbC5WRVJURVhfQVRUUklCX0FS
UkFZX1BPSU5URVIpID09IG4gKiA0KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBNYXRjaGVk
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGVzdEZhaWxl
ZCgiVkVSVEVYX0FUVFJJQl9BUlJBWV8qIG5vdCBwcmVzZXJ2ZWQiKTsKKyAgICAgICAgICAgICAg
ICAgICAgYW55TWlzbWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiVkVSVEVYX0FUVFJJQl9BUlJB
WV9CVUZGRVJfQklORElORyBub3QgcHJlc2VydmVkIik7CisgICAgICAgICAgICAgICAgYW55TWlz
bWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCIGlzIG5vdCBwcmVzZXJ2ZWQKKyAgICAgICAg
ICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJWRVJURVhfQVRU
UklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HIG5vdCBwcmVzZXJ2ZWQiKTsKKyAgICAgICAgICAgICAg
ICBhbnlNaXNtYXRjaCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHZhciBlbGJ1ZmZlciA9IGdsLmdldFBhcmFtZXRlcihnbC5FTEVNRU5UX0FSUkFZ
X0JVRkZFUl9CSU5ESU5HKTsKKyAgICAgICAgaWYgKG4gJSAyID09IDApIHsKKyAgICAgICAgICAg
IGlmIChlbGJ1ZmZlciA9PSBzdGF0ZS5lbGJ1ZmZlcikgeworICAgICAgICAgICAgICAgIC8vIE1h
dGNoZWQKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgi
RUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyBub3QgcHJlc2VydmVkIik7CisgICAgICAgICAg
ICAgICAgYW55TWlzbWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKGVsYnVmZmVyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAv
LyBNYXRjaGVkCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRlc3RGYWls
ZWQoIkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgbm90IHByZXNlcnZlZCIpOworICAgICAg
ICAgICAgICAgIGFueU1pc21hdGNoID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOworICAgIGlmICghYW55TWlz
bWF0Y2gpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiQWxsIGF0dHJpYnV0ZXMgcHJlc2VydmVkIGFj
cm9zcyBiaW5kaW5ncyIpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHZhciBuID0gMDsgbiA8IGF0
dHJDb3VudDsgbisrKSB7CisgICAgICAgIHZhciBzdGF0ZSA9IHN0YXRlc1tuXTsKKyAgICAgICAg
ZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHN0YXRlLnZhbyk7CisgICAgfQorfQorCitmdW5jdGlv
biBydW5BdHRyaWJ1dGVWYWx1ZVRlc3RzKCkgeworICAgIGRlYnVnKCJUZXN0aW5nIHRoYXQgYXR0
cmlidXRlIHZhbHVlcyBhcmUgbm90IGF0dGFjaGVkIHRvIGJpbmRpbmdzIik7CisgICAgCisgICAg
dmFyIHY7CisgICAgdmFyIHZhbzAgPSBleHQuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICB2
YXIgYW55RmFpbGVkID0gZmFsc2U7CisgICAgCisgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhu
dWxsKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWI0ZigwLCAwLCAxLCAyLCAzKTsKKyAgICAKKyAgICB2
ID0gZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJQik7CisgICAg
aWYgKCEodlswXSA9PSAwICYmIHZbMV0gPT0gMSAmJiB2WzJdID09IDIgJiYgdlszXSA9PSAzKSkg
eworICAgICAgICB0ZXN0RmFpbGVkKCJWZXJ0ZXggYXR0cmliIHZhbHVlIG5vdCByb3VuZC10cmlw
cGVkPyIpOworICAgICAgICBhbnlGYWlsZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBleHQu
YmluZFZlcnRleEFycmF5T0VTKHZhbzApOworICAgIAorICAgIHYgPSBnbC5nZXRWZXJ0ZXhBdHRy
aWIoMCwgZ2wuQ1VSUkVOVF9WRVJURVhfQVRUUklCKTsKKyAgICBpZiAoISh2WzBdID09IDAgJiYg
dlsxXSA9PSAxICYmIHZbMl0gPT0gMiAmJiB2WzNdID09IDMpKSB7CisgICAgICAgIHRlc3RGYWls
ZWQoIlZlcnRleCBhdHRyaWIgdmFsdWUgcmVzZXQgYWNyb3NzIGJpbmRpbmdzIik7CisgICAgICAg
IGFueUZhaWxlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIGdsLnZlcnRleEF0dHJpYjRmKDAs
IDQsIDUsIDYsIDcpOworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7CisgICAgCisg
ICAgdiA9IGdsLmdldFZlcnRleEF0dHJpYigwLCBnbC5DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpOwor
ICAgIGlmICghKHZbMF0gPT0gNCAmJiB2WzFdID09IDUgJiYgdlsyXSA9PSA2ICYmIHZbM10gPT0g
NykpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiVmVydGV4IGF0dHJpYiB2YWx1ZSBib3VuZCB0byBi
dWZmZXIiKTsKKyAgICAgICAgYW55RmFpbGVkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYg
KCFhbnlGYWlsZWQpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiVmVydGV4IGF0dHJpYnV0ZSB2YWx1
ZXMgYXJlIG5vdCBhdHRhY2hlZCB0byBiaW5kaW5ncyIpCisgICAgfQorICAgIAorICAgIGV4dC5i
aW5kVmVydGV4QXJyYXlPRVMobnVsbCk7CisgICAgZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHZh
bzApOworfQorCitmdW5jdGlvbiBydW5EcmF3VGVzdHMoKSB7CisgICAgZGVidWcoIlRlc3Rpbmcg
ZHJhd3Mgd2l0aCB2YXJpb3VzIFZBTyBiaW5kaW5ncyIpOworICAgIAorICAgIGNhbnZhcy53aWR0
aCA9IDUwOyBjYW52YXMuaGVpZ2h0ID0gNTA7CisgICAgZ2wudmlld3BvcnQoMCwgMCwgY2FudmFz
LndpZHRoLCBjYW52YXMuaGVpZ2h0KTsKKyAgICAKKyAgICB2YXIgdmFvMCA9IGV4dC5jcmVhdGVW
ZXJ0ZXhBcnJheU9FUygpOworICAgIHZhciB2YW8xID0gZXh0LmNyZWF0ZVZlcnRleEFycmF5T0VT
KCk7CisgICAgCisgICAgdmFyIHByb2dyYW0gPSB3dHUuc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3Jh
bShnbCwgMCwgMSk7CisgICAgCisgICAgZnVuY3Rpb24gc2V0dXBRdWFkKHMpIHsKKyAgICAgICAg
dmFyIG9wdF9wb3NpdGlvbkxvY2F0aW9uID0gMDsKKyAgICAgICAgdmFyIG9wdF90ZXhjb29yZExv
Y2F0aW9uID0gMTsKKyAgICAgICAgdmFyIHZlcnRleE9iamVjdCA9IGdsLmNyZWF0ZUJ1ZmZlcigp
OworICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmVydGV4T2JqZWN0KTsK
KyAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXko
WworICAgICAgICAgICAgIDEuMCAqIHMsICAxLjAgKiBzLCAwLjAsCisgICAgICAgICAgICAtMS4w
ICogcywgIDEuMCAqIHMsIDAuMCwKKyAgICAgICAgICAgIC0xLjAgKiBzLCAtMS4wICogcywgMC4w
LAorICAgICAgICAgICAgIDEuMCAqIHMsICAxLjAgKiBzLCAwLjAsCisgICAgICAgICAgICAtMS4w
ICogcywgLTEuMCAqIHMsIDAuMCwKKyAgICAgICAgICAgICAxLjAgKiBzLCAtMS4wICogcywgMC4w
XSksIGdsLlNUQVRJQ19EUkFXKTsKKyAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
b3B0X3Bvc2l0aW9uTG9jYXRpb24pOworICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG9w
dF9wb3NpdGlvbkxvY2F0aW9uLCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworCisgICAgICAg
IHZhciB2ZXJ0ZXhPYmplY3QgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgICAgZ2wuYmluZEJ1
ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZlcnRleE9iamVjdCk7CisgICAgICAgIGdsLmJ1ZmZlckRh
dGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5KFsKKyAgICAgICAgICAgIDEuMCAq
IHMsIDEuMCAqIHMsCisgICAgICAgICAgICAwLjAgKiBzLCAxLjAgKiBzLAorICAgICAgICAgICAg
MC4wICogcywgMC4wICogcywKKyAgICAgICAgICAgIDEuMCAqIHMsIDEuMCAqIHMsCisgICAgICAg
ICAgICAwLjAgKiBzLCAwLjAgKiBzLAorICAgICAgICAgICAgMS4wICogcywgMC4wICogc10pLCBn
bC5TVEFUSUNfRFJBVyk7CisgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG9wdF90
ZXhjb29yZExvY2F0aW9uKTsKKyAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihvcHRfdGV4
Y29vcmRMb2NhdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICB9OworICAgIAor
ICAgIGZ1bmN0aW9uIHJlYWRMb2NhdGlvbih4LCB5KSB7CisgICAgICAgIHZhciBwaXhlbHMgPSBu
ZXcgVWludDhBcnJheSgxICogMSAqIDQpOworICAgICAgICBnbC5yZWFkUGl4ZWxzKHgsIHksIDEs
IDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHBpeGVscyk7CisgICAgICAgIHJldHVybiBw
aXhlbHM7CisgICAgfTsKKyAgICBmdW5jdGlvbiB0ZXN0UGl4ZWwoYmxhY2tMaXN0LCB3aGl0ZUxp
c3QpIHsKKyAgICAgICAgZnVuY3Rpb24gdGVzdExpc3QobGlzdCwgZXhwZWN0ZWQpIHsKKyAgICAg
ICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbGlzdC5sZW5ndGg7IG4rKykgeworICAgICAgICAg
ICAgICAgIHZhciBsID0gbGlzdFtuXTsKKyAgICAgICAgICAgICAgICB2YXIgeCA9IC1NYXRoLmZs
b29yKGwgKiBjYW52YXMud2lkdGggLyAyKSArIGNhbnZhcy53aWR0aCAvIDI7CisgICAgICAgICAg
ICAgICAgdmFyIHkgPSAtTWF0aC5mbG9vcihsICogY2FudmFzLmhlaWdodCAvIDIpICsgY2FudmFz
LmhlaWdodCAvIDI7CisgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHJlYWRMb2NhdGlvbih4
LCB5KTsKKyAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoc291cmNlWzBdIC0gZXhwZWN0ZWQp
ID4gMikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRlc3RMaXN0KGJsYWNrTGlzdCwgMCkgJiYgdGVzdExpc3Qod2hpdGVM
aXN0LCAyNTUpOworICAgIH07CisgICAgZnVuY3Rpb24gdmVyaWZ5RHJhdyhkcmF3TnVtYmVyLCBz
KSB7CisgICAgICAgIHd0dS5kcmF3UXVhZChnbCk7CisgICAgICAgIHZhciBibGFja0xpc3QgPSBb
XTsKKyAgICAgICAgdmFyIHdoaXRlTGlzdCA9IFtdOworICAgICAgICB2YXIgcG9pbnRzID0gWzAu
MCwgMC4yLCAwLjQsIDAuNiwgMC44LCAxLjBdOworICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8
IHBvaW50cy5sZW5ndGg7IG4rKykgeworICAgICAgICAgICAgaWYgKHBvaW50c1tuXSA8PSBzKSB7
CisgICAgICAgICAgICAgICAgYmxhY2tMaXN0LnB1c2gocG9pbnRzW25dKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd2hpdGVMaXN0LnB1c2gocG9pbnRzW25dKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGVzdFBpeGVsKGJsYWNrTGlzdCwg
d2hpdGVMaXN0KSkgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgiRHJhdyAiICsgZHJhd051bWJl
ciArICIgcGFzc2VkIHBpeGVsIHRlc3QiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHRlc3RGYWlsZWQoIkRyYXcgIiArIGRyYXdOdW1iZXIgKyAiIGZhaWxlZCBwaXhlbCB0ZXN0Iik7
CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIC8vIFNldHVwIGFsbCBiaW5kaW5ncworICAg
IHNldHVwUXVhZCgxKTsKKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKHZhbzApOworICAgIHNl
dHVwUXVhZCgwLjUpOworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvMSk7CisgICAgc2V0
dXBRdWFkKDAuMjUpOworICAgIAorICAgIC8vIFZlcmlmeSBkcmF3aW5nCisgICAgZXh0LmJpbmRW
ZXJ0ZXhBcnJheU9FUyhudWxsKTsKKyAgICB2ZXJpZnlEcmF3KDAsIDEpOworICAgIGV4dC5iaW5k
VmVydGV4QXJyYXlPRVModmFvMCk7CisgICAgdmVyaWZ5RHJhdygxLCAwLjUpOworICAgIGV4dC5i
aW5kVmVydGV4QXJyYXlPRVModmFvMSk7CisgICAgdmVyaWZ5RHJhdygyLCAwLjI1KTsKKyAgICAK
KyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOworICAgIGV4dC5kZWxldGVWZXJ0ZXhB
cnJheU9FUyh2YW8wKTsKKyAgICBleHQuZGVsZXRlVmVydGV4QXJyYXlPRVModmFvMSk7Cit9CisK
K2Z1bmN0aW9uIHJ1bkRlbGV0ZVRlc3RzKCkgeworICAgIGRlYnVnKCJUZXN0aW5nIHVzaW5nIGRl
bGV0ZWQgYnVmZmVycyByZWZlcmVuY2VkIGJ5IFZBT3MiKTsKKworICAgIHZhciBwcm9ncmFtID0g
d3R1LnNldHVwUHJvZ3JhbShnbCwgWyJ2c2hhZGVyIiwgImZzaGFkZXIiXSwgWyJhX3Bvc2l0aW9u
IiwgImFfY29sb3IiXSk7CisgICAgZ2wudXNlUHJvZ3JhbShwcm9ncmFtKTsKKworICAgIHZhciBw
b3NpdGlvbkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAgIGdsLmJpbmRCdWZmZXIoZ2wu
QVJSQVlfQlVGRkVSLCBwb3NpdGlvbkJ1ZmZlcik7CisgICAgZ2wuYnVmZmVyRGF0YSgKKyAgICAg
ICAgZ2wuQVJSQVlfQlVGRkVSLAorICAgICAgICBuZXcgRmxvYXQzMkFycmF5KFsKKyAgICAgICAg
ICAgMS4wLCAgMS4wLAorICAgICAgICAgIC0xLjAsICAxLjAsCisgICAgICAgICAgLTEuMCwgLTEu
MCwKKyAgICAgICAgICAgMS4wLCAtMS4wXSksCisgICAgICAgIGdsLlNUQVRJQ19EUkFXKTsKKwor
ICAgIHZhciBjb2xvcnMgPSBbCisgICAgICBbMjU1LCAgIDAsICAgMCwgMjU1XSwKKyAgICAgIFsg
IDAsIDI1NSwgICAwLCAyNTVdLAorICAgICAgWyAgMCwgICAwLCAyNTUsIDI1NV0sCisgICAgICBb
ICAwLCAyNTUsIDI1NSwgMjU1XQorICAgIF07CisgICAgdmFyIGNvbG9yQnVmZmVycyA9IFtdOwor
ICAgIHZhciBlbGVtZW50QnVmZmVycyA9IFtdOworICAgIHZhciB2YW9zID0gW107CisgICAgZm9y
ICh2YXIgaWkgPSAwOyBpaSA8IGNvbG9ycy5sZW5ndGg7ICsraWkpIHsKKyAgICAgIHZhciB2YW8g
PSBleHQuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICAgIHZhb3MucHVzaCh2YW8pOworICAg
ICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW8pOworICAgICAgLy8gU2V0IHRoZSBwb3NpdGlv
biBidWZmZXIKKyAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBwb3NpdGlvbkJ1
ZmZlcik7CisgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICAgIGdsLnZl
cnRleEF0dHJpYlBvaW50ZXIoMCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKworICAgICAg
dmFyIGVsZW1lbnRCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgIGVsZW1lbnRCdWZm
ZXJzLnB1c2goZWxlbWVudEJ1ZmZlcik7CisgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRf
QVJSQVlfQlVGRkVSLCBlbGVtZW50QnVmZmVyKTsKKyAgICAgIGdsLmJ1ZmZlckRhdGEoCisgICAg
ICAgICAgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsCisgICAgICAgICAgbmV3IFVpbnQ4QXJyYXko
WzAsIDEsIDIsIDAsIDIsIDNdKSwKKyAgICAgICAgICBnbC5TVEFUSUNfRFJBVyk7CisKKyAgICAg
IC8vIFNldHVwIHRoZSBjb2xvciBhdHRyaWIKKyAgICAgIHZhciBjb2xvciA9IGNvbG9yc1tpaV07
CisgICAgICBpZiAoaWkgPCAzKSB7CisgICAgICAgIHZhciBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0
ZUJ1ZmZlcigpOworICAgICAgICBjb2xvckJ1ZmZlcnMucHVzaChjb2xvckJ1ZmZlcik7CisgICAg
ICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvckJ1ZmZlcik7CisgICAgICAg
IGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgVWludDhBcnJheSgKKyAgICAgICAg
ICBbIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIGNvbG9yWzNdLAorICAgICAgICAgICAg
Y29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgY29sb3JbM10sCisgICAgICAgICAgICBjb2xv
clswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBjb2xvclszXSwKKyAgICAgICAgICAgIGNvbG9yWzBd
LCBjb2xvclsxXSwgY29sb3JbMl0sIGNvbG9yWzNdCisgICAgICAgICAgXSksIGdsLlNUQVRJQ19E
UkFXKTsKKyAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMSk7CisgICAgICAgIGds
LnZlcnRleEF0dHJpYlBvaW50ZXIoMSwgNCwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgMCwgMCk7
CisgICAgICB9IGVsc2UgeworICAgICAgICBnbC52ZXJ0ZXhBdHRyaWI0ZigxLCBjb2xvclswXSAv
IDI1NSwgY29sb3JbMV0gLyAyNTUsIGNvbG9yWzJdIC8gMjU1LCBjb2xvclszXSAvIDI1NSk7Cisg
ICAgICB9CisgICAgfQorCisgICAgLy8gZGVsZXRlIHRoZSBjb2xvciBidWZmZXJzIEFORCB0aGUg
cG9zaXRpb24gYnVmZmVyLgorICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7CisgICAg
Zm9yICh2YXIgaWkgPSAwOyBpaSA8IGNvbG9yQnVmZmVycy5sZW5ndGg7ICsraWkpIHsKKyAgICAg
IGdsLmRlbGV0ZUJ1ZmZlcihjb2xvckJ1ZmZlcnNbaWldKTsKKyAgICAgIGdsLmRlbGV0ZUJ1ZmZl
cihlbGVtZW50QnVmZmVyc1tpaV0pOworICAgIH0KKyAgICBnbC5kZWxldGVCdWZmZXIocG9zaXRp
b25CdWZmZXIpOworCisgICAgLy8gUmVuZGVyIHdpdGggdGhlIGRlbGV0ZWQgYnVmZmVycy4gQXMg
dGhleSBhcmUgcmVmZXJlbmNlZCBieSBWQU9zIHRoZXkKKyAgICAvLyBtdXN0IHN0aWxsIGJlIGFy
b3VuZC4KKyAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgY29sb3JzLmxlbmd0aDsgKytpaSkgewor
ICAgICAgdmFyIGNvbG9yID0gY29sb3JzW2lpXTsKKyAgICAgIGV4dC5iaW5kVmVydGV4QXJyYXlP
RVModmFvc1tpaV0pOworICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wu
VU5TSUdORURfQllURSwgMCk7CisgICAgICB3dHUuY2hlY2tDYW52YXMoZ2wsIGNvbG9yLCAic2hv
dWxkIGJlICIgKyBjb2xvcik7CisgICAgfQorCisgICAgLy8gQ2xlYW4gdXAuCisgICAgZm9yICh2
YXIgaWkgPSAwOyBpaSA8IGNvbG9yQnVmZmVycy5sZW5ndGg7ICsraWkpIHsKKyAgICAgIGV4dC5k
ZWxldGVWZXJ0ZXhBcnJheU9FUyh2YW9zW2lpXSk7CisgICAgfQorfQorCitmdW5jdGlvbiBydW5B
cnJheUJ1ZmZlckJpbmRUZXN0cygpIHsKKyAgICBkZWJ1ZygiVGVzdGluZyB0aGF0IFZBT3MgZG9u
J3QgZWZmZWN0IEFSUkFZX0JVRkZFUiBiaW5kaW5nLiIpOworCisgICAgZXh0LmJpbmRWZXJ0ZXhB
cnJheU9FUyhudWxsKTsKKworICAgIHZhciBwcm9ncmFtID0gd3R1LnNldHVwUHJvZ3JhbShnbCwg
WyJ2c2hhZGVyIiwgImZzaGFkZXIiXSwgWyJhX2NvbG9yIiwgImFfcG9zaXRpb24iXSk7CisgICAg
Z2wudXNlUHJvZ3JhbShwcm9ncmFtKTsKKworICAgIC8vIGNyZWF0ZSBzaGFyZWQgZWxlbWVudCBi
dXVmZmVyCisgICAgdmFyIGVsZW1lbnRCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAv
LyBiaW5kIHRvIGRlZmF1bHQKKyAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVG
RkVSLCBlbGVtZW50QnVmZmVyKTsKKyAgICBnbC5idWZmZXJEYXRhKAorICAgICAgICBnbC5FTEVN
RU5UX0FSUkFZX0JVRkZFUiwKKyAgICAgICAgbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDIsIDAsIDIs
IDNdKSwKKyAgICAgICAgZ2wuU1RBVElDX0RSQVcpOworCisgICAgLy8gZmlyc3QgY3JlYXRlIHRo
ZSBidWZmZXJzIGZvciBubyB2YW8gZHJhdy4KKyAgICB2YXIgbm9uVkFPQ29sb3JCdWZmZXIgPSBn
bC5jcmVhdGVCdWZmZXIoKTsKKyAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbm9u
VkFPQ29sb3JCdWZmZXIpOworICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcg
VWludDhBcnJheSgKKyAgICAgIFsgMCwgMjU1LCAwLCAyNTUsCisgICAgICAgIDAsIDI1NSwgMCwg
MjU1LAorICAgICAgICAwLCAyNTUsIDAsIDI1NSwKKyAgICAgICAgMCwgMjU1LCAwLCAyNTUsCisg
ICAgICBdKSwgZ2wuU1RBVElDX0RSQVcpOworCisgICAgLy8gc2hhcmVkIHBvc2l0aW9uIGJ1ZmZl
ci4KKyAgICB2YXIgcG9zaXRpb25CdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICBnbC5i
aW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgcG9zaXRpb25CdWZmZXIpOworICAgIGdsLmJ1ZmZl
ckRhdGEoCisgICAgICAgIGdsLkFSUkFZX0JVRkZFUiwKKyAgICAgICAgbmV3IEZsb2F0MzJBcnJh
eShbCisgICAgICAgICAgIDEuMCwgIDEuMCwKKyAgICAgICAgICAtMS4wLCAgMS4wLAorICAgICAg
ICAgIC0xLjAsIC0xLjAsCisgICAgICAgICAgIDEuMCwgLTEuMF0pLAorICAgICAgICBnbC5TVEFU
SUNfRFJBVyk7CisKKyAgICAvLyBhdHRhY2ggcG9zaXRpb24gYnVmZmVyIHRvIGRlZmF1bHQKKyAg
ICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgxKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2lu
dGVyKDEsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisKKyAgICAvLyBub3cgY3JlYXRlIHZh
bworICAgIHZhciB2YW8gPSBleHQuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICBleHQuYmlu
ZFZlcnRleEFycmF5T0VTKHZhbyk7CisKKyAgICAvLyBhdHRhY2ggdGhlIHBvc2l0aW9uIGJ1ZmZl
ciB2YW8KKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgxKTsKKyAgICBnbC52ZXJ0ZXhB
dHRyaWJQb2ludGVyKDEsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisKKyAgICB2YXIgdmFv
Q29sb3JCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheSgwKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIGdsLlVOU0lHTkVE
X0JZVEUsIHRydWUsIDAsIDApOworICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2
YW9Db2xvckJ1ZmZlcik7CisgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBV
aW50OEFycmF5KAorICAgICAgWyAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAy
NTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAg
ICAgIF0pLCBnbC5TVEFUSUNfRFJBVyk7CisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
MCk7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBnbC5VTlNJR05FRF9CWVRFLCB0
cnVlLCAwLCAwKTsKKworICAgIC8vIG5vdyBzZXQgdGhlIGJ1ZmZlciBiYWNrIHRvIHRoZSBub25W
QU9Db2xvckJ1ZmZlcgorICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBub25WQU9D
b2xvckJ1ZmZlcik7CisKKyAgICAvLyBiaW5kIHRvIHZhbworICAgIGdsLmJpbmRCdWZmZXIoZ2wu
RUxFTUVOVF9BUlJBWV9CVUZGRVIsIGVsZW1lbnRCdWZmZXIpOworICAgIGdsLmRyYXdFbGVtZW50
cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX0JZVEUsIDApOworICAgIHd0dS5jaGVja0Nh
bnZhcyhnbCwgWzI1NSwgMCwgMCwgMjU1XSwgInNob3VsZCBiZSByZWQiKTsKKworICAgIC8vIHVu
YmluZCB2YW8KKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOworCisgICAgLy8gQXQg
dGhpcyBwb2ludCB0aGUgbm9uVkFPQ29sb3JCdWZmZXIgc2hvdWxkIGJlIHN0aWxsIGJlIGJvdW5k
LgorICAgIC8vIElmIHRoZSBXZWJHTCBpbXBsIGlzIGVtdWxhdGluZyBWQU9zIGl0IG11c3QgbWFr
ZSBzdXJlCisgICAgLy8gaXQgY29ycmVjdGx5IHJlc3RvcmVzIHRoaXMgYmluZGluZy4KKyAgICBn
bC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVy
KDAsIDQsIGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIDAsIDApOworICAgIGdsLmRyYXdFbGVtZW50
cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX0JZVEUsIDApOworICAgIHd0dS5jaGVja0Nh
bnZhcyhnbCwgWzAsIDI1NSwgMCwgMjU1XSwgInNob3VsZCBiZSBncmVlbiIpOworfQorCitkZWJ1
ZygiIik7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisKKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3Qv
Y2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0LWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJy
YXktb2JqZWN0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YTA0ZjRjODkzYzgyOTI0NmY2MTQ3
NmNlM2U1MjM1OTQ1MTRkZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1vYmplY3QtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTQgQEAKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGUgZnVuY3Rp
b25hbGl0eSBvZiB0aGUgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgZXh0ZW5zaW9uLCBpZiBpdCBp
cyBhdmFpbGFibGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFdlYkdM
IGNvbnRleHQgZXhpc3RzCitUZXN0aW5nIGJpbmRpbmcgZW51bSB3aXRoIGV4dGVuc2lvbiBkaXNh
YmxlZAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfRU5VTSA6IFZF
UlRFWF9BUlJBWV9CSU5ESU5HX09FUyBzaG91bGQgbm90IGJlIHF1ZXJ5YWJsZSBpZiBleHRlbnNp
b24gaXMgZGlzYWJsZWQKK1BBU1MgTm8gT0VTX3ZlcnRleF9hcnJheV9vYmplY3Qgc3VwcG9ydCAt
LSB0aGlzIGlzIGxlZ2FsCitQQVNTIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IG5vdCBsaXN0ZWQg
YXMgc3VwcG9ydGVkIGFuZCBnZXRFeHRlbnNpb24gZmFpbGVkIC0tIHRoaXMgaXMgbGVnYWwKKwor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164238</attachid>
            <date>2012-09-14 15:30:29 -0700</date>
            <delta_ts>2012-09-17 15:39:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96578-20120914153001.patch</filename>
            <type>text/plain</type>
            <size>36981</size>
            <attacher name="Brandon Jones">bajones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4NjU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA1MDAwN2M3ZDE4OWVm
NDk4MWFlYWEwZTZhZTViMTc3NTYyY2Q5MmY5Li4xYjZmZWYyZmFhODIwNWQ0NmI1MmQ3MjYxNDk1
NDEwM2Y0Njk3YTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0wOS0xNCAg
QnJhbmRvbiBKb25lcyAgPGJham9uZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9y
dCBmb3IgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgaW4gY2hyb21pdW0KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NTc4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgY29kZSB0byBhbGxvdyBjYWxs
cyB0byB0aGUgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgZXh0ZW5zaW9uIHRvIGludGVyZmFjZQor
ICAgICAgICBwcm9wZXJseSB3aXRoIHRoZSBjaHJvbWl1bSBXZWJHTCBpbXBsZW1lbnRhdGlvbi4g
CisKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAg
ICAgICAgKFdlYkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6YmluZFZlcnRleEFycmF5T0VTKToKKwogMjAxMi0w
OS0xNCAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hy
b21pdW1dIEFkZCB0aGUgdWJlcmNvbXAgV2ViRGVsZWdhdGVkUmVuZGVyZXJMYXllcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDU2NGYzNzcxZTdhNDY3ZWZkMjI0MTQ2OGEwMDM4NzczODg0YjZlYzEuLjFiZjkxYzYx
M2Y0NjY1MzJhNTk1NzgwM2NhYWY3YWNlMDU2ZWJlZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
MyBAQAorMjAxMi0wOS0xNCAgQnJhbmRvbiBKb25lcyAgPGJham9uZXNAZ29vZ2xlLmNvbT4KKwor
ICAgICAgICBBZGQgc3VwcG9ydCBmb3IgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgaW4gY2hyb21p
dW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NTc4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5n
IGJhc2ljIHJlZmVyZW5jZSBjb3VudGluZyB0byBXZWJHTEJ1ZmZlciBvYmplY3RzIHRvIHNhdGlz
Znkgc3BlYyByZXF1aXJlbWVudHMKKyAgICAgICAgZm9yIHRoZSBPRVNfdmVydGV4X2FycmF5X29i
amVjdCBleHRlbnNpb24uIEFkZGVkIGNvZGUgdG8gYWxsb3cgY2FsbHMgdG8gdGhlCisgICAgICAg
IE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IGV4dGVuc2lvbiB0byBpbnRlcmZhY2UgcHJvcGVybHkg
d2l0aCB0aGUgY2hyb21pdW0gV2ViR0wKKyAgICAgICAgaW1wbGVtZW50YXRpb24uCisKKyAgICAg
ICAgVGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1vYmplY3QuaHRtbAor
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
ZWxldGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVM6OnNldEVsZW1lbnRBcnJheUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmg6CisgICAgICAgIChX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM6OmdldFZlcnRleEF0dHJpYlN0YXRlU2l6ZSk6CisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6Y3JlYXRlVmVydGV4QXJyYXlPRVMpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmRlbGV0ZVZlcnRleEFycmF5
T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjppc1ZlcnRleEFy
cmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpiaW5kVmVy
dGV4QXJyYXlPRVMpOgorCiAyMDEyLTA5LTE0ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmVtb3ZlIHdlYmtpdFBvc3RNZXNzYWdlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmggYi9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgKaW5kZXgg
MzEyZDRmYWI3YTYyOTQ1N2ZjY2FlOWNlNzI4MTdhMzJkOTA2ZTVmNi4uODJkM2QzNmM4YWI1NGVk
MGEzYjE4NGM0MWZjMmE4NjFhZDU1ZTc4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2No
cm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtNDQzLDYgKzQ0Mywx
MiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHB1c2hHcm91cE1hcmtlckVYVChjb25zdCBX
R0MzRGNoYXIqIG1hcmtlcikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBvcEdyb3VwTWFya2VyRVhU
KHZvaWQpIHsgfQogCisgICAgLy8gR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKyAgICB2aXJ0
dWFsIFdlYkdMSWQgY3JlYXRlVmVydGV4QXJyYXlPRVMoKSB7IHJldHVybiAwOyB9CisgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFdlYkdMSWQgYXJyYXkpIHsgfQorICAgIHZp
cnR1YWwgV0dDM0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMoV2ViR0xJZCBhcnJheSkgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFdlYkdMSWQg
YXJyYXkpIHsgfQorCiAgICAgR3JHTEludGVyZmFjZSogY3JlYXRlR3JHTEludGVyZmFjZSgpOwog
CiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAyNGI5YzMzZjkzMjJjYmM3YmZlZjE0Y2JmYTQyZTEy
ZTI1NDE0ZGI5Li5jNTNjM2U4YzFmZTJiMDI5MDI0NTZiMDdjZTY0NDNjMWJkOGU0MDBkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAKQEAgLTE1NDcsMTcgKzE1NDcsMjQgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQogICAgIFJlZlB0cjxXZWJHTEJ1ZmZl
cj4gZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKTsKICAgICBpZiAoZWxlbWVudEFycmF5QnVmZmVyID09IGJ1ZmZlcikK
ICAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5zZXRFbGVtZW50QXJyYXlCdWZmZXIo
MCk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZVNp
emUoKTsgKytpKSB7CisgICAgICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0
dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0
cmliU3RhdGUoaSk7CiAgICAgICAgIGlmIChidWZmZXIgPT0gc3RhdGUuYnVmZmVyQmluZGluZykg
ewotICAgICAgICAgICAgc3RhdGUuYnVmZmVyQmluZGluZyA9IG1fdmVydGV4QXR0cmliMEJ1ZmZl
cjsKLSAgICAgICAgICAgIHN0YXRlLmJ5dGVzUGVyRWxlbWVudCA9IDA7Ci0gICAgICAgICAgICBz
dGF0ZS5zaXplID0gNDsKLSAgICAgICAgICAgIHN0YXRlLnR5cGUgPSBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQ7Ci0gICAgICAgICAgICBzdGF0ZS5ub3JtYWxpemVkID0gZmFsc2U7Ci0gICAgICAg
ICAgICBzdGF0ZS5zdHJpZGUgPSAxNjsKLSAgICAgICAgICAgIHN0YXRlLm9yaWdpbmFsU3RyaWRl
ID0gMDsKLSAgICAgICAgICAgIHN0YXRlLm9mZnNldCA9IDA7CisgICAgICAgICAgICBidWZmZXIt
Pm9uRGV0YWNoZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSk7CisKKyAgICAgICAgICAgIGlmICghaSAm
JiAhaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgICAgICAgICAgc3RhdGUuYnVmZmVyQmlu
ZGluZyA9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcjsKKyAgICAgICAgICAgICAgICBzdGF0ZS5idWZm
ZXJCaW5kaW5nLT5vbkF0dGFjaGVkKCk7CisgICAgICAgICAgICAgICAgc3RhdGUuYnl0ZXNQZXJF
bGVtZW50ID0gMDsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zaXplID0gNDsKKyAgICAgICAgICAg
ICAgICBzdGF0ZS50eXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICAgICAg
ICAgIHN0YXRlLm5vcm1hbGl6ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHJp
ZGUgPSAxNjsKKyAgICAgICAgICAgICAgICBzdGF0ZS5vcmlnaW5hbFN0cmlkZSA9IDA7CisgICAg
ICAgICAgICAgICAgc3RhdGUub2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmcgPSAwOwogICAgICAgICB9CiAgICAgfQogfQpA
QCAtNDM4Niw2ICs0MzkzLDkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MKICAgICBHQzNEc2l6
ZWkgdmFsaWRhdGVkU3RyaWRlID0gc3RyaWRlID8gc3RyaWRlIDogYnl0ZXNQZXJFbGVtZW50Owog
CiAgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRl
ID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7
CisgICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcpCisgICAgICAgIHN0YXRlLmJ1ZmZlckJpbmRp
bmctPm9uRGV0YWNoZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgbV9ib3VuZEFycmF5QnVm
ZmVyLT5vbkF0dGFjaGVkKCk7CiAgICAgc3RhdGUuYnVmZmVyQmluZGluZyA9IG1fYm91bmRBcnJh
eUJ1ZmZlcjsKICAgICBzdGF0ZS5ieXRlc1BlckVsZW1lbnQgPSBieXRlc1BlckVsZW1lbnQ7CiAg
ICAgc3RhdGUuc2l6ZSA9IHNpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwCmluZGV4IDRhYTAzYjhmZWExNTE5
Yjk3MjIzNzA0Y2FmYmZhNzYzODEzMmFmMjIuLmQxODlkMDQ4ZjE2MjExM2E2YWFlMWI4Y2NkMzgw
NTk0MjZkMjM2ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwCkBAIC03NCw2ICs3NCwxNSBAQCB2b2lkIFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQzZCwgUAogICAgIH0KIH0KIAordm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0
T0VTOjpzZXRFbGVtZW50QXJyYXlCdWZmZXIoUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gYnVmZmVy
KQoreworICAgIGlmIChtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICBtX2JvdW5k
RWxlbWVudEFycmF5QnVmZmVyLT5vbkRldGFjaGVkKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0
M0QoKSk7CisgICAgbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICBpZiAo
YnVmZmVyKQorICAgICAgICBidWZmZXItPm9uQXR0YWNoZWQoKTsKK30KKwogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oCmluZGV4IDc1YWU0MmZmNzI1YWNkMWRmZWRiY2U2
YTBiYzkyZDNjNDAyOGY0MzUuLjMzNTM5NGU3Y2YyOGFiOWIyMGM4MThjYTk1MTBiYzQwZDU4MTFh
NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTLmgKQEAgLTc2LDkgKzc2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dEhhc0V2ZXJCZWVuQm91bmQoKSB7IG1faGFzRXZlckJlZW5Cb3VuZCA9IHRydWU7IH0KICAgICAK
ICAgICBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBnZXRFbGVtZW50QXJyYXlCdWZmZXIoKSBjb25z
dCB7IHJldHVybiBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyOyB9Ci0gICAgdm9pZCBzZXRFbGVt
ZW50QXJyYXlCdWZmZXIoUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gYnVmZmVyKSB7IG1fYm91bmRF
bGVtZW50QXJyYXlCdWZmZXIgPSBidWZmZXI7IH0KKyAgICB2b2lkIHNldEVsZW1lbnRBcnJheUJ1
ZmZlcihQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPik7CiAgICAgCiAgICAgVmVydGV4QXR0cmliU3Rh
dGUmIGdldFZlcnRleEF0dHJpYlN0YXRlKGludCBpbmRleCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRy
aWJTdGF0ZVtpbmRleF07IH0KKyAgICBzaXplX3QgZ2V0VmVydGV4QXR0cmliU3RhdGVTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCk7IH0KIAogcHJpdmF0ZToK
ICAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIFZh
b1R5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9zdXBwb3J0L0V4dGVuc2lvbnMzRENocm9taXVtLmNwcAppbmRleCA5NDEyMjc0Yzc2
MjgzNWM1OWY5YzAwNzVlNTQ2ZDI5NzM3NzI1YWNkLi4xN2MzMDIxODMwYTIwYjI0YTRmN2M2ZWU1
MTIyYWJhMWZjYjIzOWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L0V4dGVuc2lvbnMzRENocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0V4dGVuc2lvbnMzRENocm9taXVtLmNwcApAQCAt
OTcsMjAgKzk3LDIyIEBAIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnVubWFwVGV4U3ViSW1h
Z2UyRENIUk9NSVVNKGNvbnN0IHZvaWQqIGRhdGEpCiAKIFBsYXRmb3JtM0RPYmplY3QgRXh0ZW5z
aW9uczNEQ2hyb21pdW06OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKIHsKLSAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmNyZWF0ZVZlcnRleEFycmF5T0VT
KCk7CiB9CiAKLXZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmRlbGV0ZVZlcnRleEFycmF5T0VT
KFBsYXRmb3JtM0RPYmplY3QpCit2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpkZWxldGVWZXJ0
ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQogeworICAgIG1fcHJpdmF0ZS0+d2Vi
Q29udGV4dCgpLT5kZWxldGVWZXJ0ZXhBcnJheU9FUyhhcnJheSk7CiB9CiAKLUdDM0Rib29sZWFu
IEV4dGVuc2lvbnMzRENocm9taXVtOjppc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3Qp
CitHQzNEYm9vbGVhbiBFeHRlbnNpb25zM0RDaHJvbWl1bTo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0
Zm9ybTNET2JqZWN0IGFycmF5KQogewotICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3ByaXZh
dGUtPndlYkNvbnRleHQoKS0+aXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7CiB9CiAKLXZvaWQgRXh0
ZW5zaW9uczNEQ2hyb21pdW06OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KQor
dm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6YmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RP
YmplY3QgYXJyYXkpCiB7CisgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmJpbmRWZXJ0ZXhB
cnJheU9FUyhhcnJheSk7CiB9CiAKIFN0cmluZyBFeHRlbnNpb25zM0RDaHJvbWl1bTo6Z2V0VHJh
bnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDJhMmY0OTc4NTUyZmIxZTIxMWU2NWZjMjliYzM5YWU2M2VlMDlkOGEuLmQ0NWFmOTk4MTk4NmM1
YTNiZjE3NDIzNmIzMzI3ZTM2ZjE4ODQzN2UgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0w
OS0xNCAgQnJhbmRvbiBKb25lcyAgPGJham9uZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQg
c3VwcG9ydCBmb3IgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgaW4gY2hyb21pdW0KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NTc4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnJvdWdodCBvdmVyIEtIUk9O
T1MgY29uZm9ybWFuY2UgdGVzdCBmb3IgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKworICAgICAg
ICAqIGZhc3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0LWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1v
YmplY3QuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZWZsL1NraXBwZWQ6CisgICAg
ICAgICogcGxhdGZvcm0vZ3RrLXdrMi9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9T
a2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL3drMi9Ta2lwcGVkOgorCiAyMDEyLTA5LTE0ICBB
ZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHdlYmtpdFBv
c3RNZXNzYWdlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9vZXMt
dmVydGV4LWFycmF5LW9iamVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzdhYmFkZDc4MWI2NGZiZDYyMTY0YzcxYTdiOTYzNmIyMDg3ZjYyOQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUwIEBACitUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIGZ1
bmN0aW9uYWxpdHkgb2YgdGhlIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IGV4dGVuc2lvbiwgaWYg
aXQgaXMgYXZhaWxhYmxlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBX
ZWJHTCBjb250ZXh0IGV4aXN0cworVGVzdGluZyBiaW5kaW5nIGVudW0gd2l0aCBleHRlbnNpb24g
ZGlzYWJsZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0VOVU0g
OiBWRVJURVhfQVJSQVlfQklORElOR19PRVMgc2hvdWxkIG5vdCBiZSBxdWVyeWFibGUgaWYgZXh0
ZW5zaW9uIGlzIGRpc2FibGVkCitQQVNTIFN1Y2Nlc3NmdWxseSBlbmFibGVkIE9FU192ZXJ0ZXhf
YXJyYXlfb2JqZWN0IGV4dGVuc2lvbgorUEFTUyBPRVNfdmVydGV4X2FycmF5X29iamVjdCBsaXN0
ZWQgYXMgc3VwcG9ydGVkIGFuZCBnZXRFeHRlbnNpb24gc3VjY2VlZGVkCitUZXN0aW5nIGJpbmRp
bmcgZW51bSB3aXRoIGV4dGVuc2lvbiBlbmFibGVkCitQQVNTIGV4dC5WRVJURVhfQVJSQVlfQklO
RElOR19PRVMgaXMgMHg4NUI1CitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiBWRVJURVhfQVJSQVlfQklORElOR19PRVMgcXVlcnkgc2hvdWxkIHN1Y2NlZWQgaWYg
ZXh0ZW5zaW9uIGlzIGVuYWJsZQorUEFTUyBEZWZhdWx0IHZhbHVlIG9mIFZFUlRFWF9BUlJBWV9C
SU5ESU5HX09FUyBpcyBudWxsCitUZXN0aW5nIGJpbmRpbmcgYSBWQU8KK1BBU1MgZ2wuZ2V0UGFy
YW1ldGVyKGV4dC5WRVJURVhfQVJSQVlfQklORElOR19PRVMpIGlzIG51bGwKK1BBU1MgZ2wuZ2V0
UGFyYW1ldGVyKGV4dC5WRVJURVhfQVJSQVlfQklORElOR19PRVMpIGlzIGV4cGVjdGVkIFZBTwor
UEFTUyBnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUykgaXMgZXhw
ZWN0ZWQgVkFPCitQQVNTIGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdf
T0VTKSBpcyBudWxsCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9P
UEVSQVRJT04gOiBiaW5kaW5nIGEgZGVsZXRlZCB2ZXJ0ZXggYXJyYXkgb2JqZWN0CitQQVNTIGds
LmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSBpcyBudWxsCitUZXN0
aW5nIG9iamVjdCBjcmVhdGlvbgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5P
X0VSUk9SIDogY3JlYXRlVmVydGV4QXJyYXlPRVMgc2hvdWxkIG5vdCBzZXQgYW4gZXJyb3IKK1BB
U1MgdmFvIGlzIG5vbi1udWxsLgorUEFTUyBleHQuaXNWZXJ0ZXhBcnJheU9FUyh2YW8pIGlzIGZh
bHNlCitQQVNTIGV4dC5pc1ZlcnRleEFycmF5T0VTKHZhbykgaXMgdHJ1ZQorUEFTUyBleHQuaXNW
ZXJ0ZXhBcnJheU9FUyh2YW8pIGlzIHRydWUKK1BBU1MgZXh0LmlzVmVydGV4QXJyYXlPRVMoKSBp
cyBmYWxzZQorUEFTUyBleHQuaXNWZXJ0ZXhBcnJheU9FUyhudWxsKSBpcyBmYWxzZQorVGVzdGlu
ZyBhdHRyaWJ1dGVzIHdvcmsgYWNyb3NzIGJpbmRpbmdzCitQQVNTIEFsbCBhdHRyaWJ1dGVzIHBy
ZXNlcnZlZCBhY3Jvc3MgYmluZGluZ3MKK1Rlc3RpbmcgdGhhdCBhdHRyaWJ1dGUgdmFsdWVzIGFy
ZSBub3QgYXR0YWNoZWQgdG8gYmluZGluZ3MKK1BBU1MgVmVydGV4IGF0dHJpYnV0ZSB2YWx1ZXMg
YXJlIG5vdCBhdHRhY2hlZCB0byBiaW5kaW5ncworVGVzdGluZyBkcmF3cyB3aXRoIHZhcmlvdXMg
VkFPIGJpbmRpbmdzCitQQVNTIERyYXcgMCBwYXNzZWQgcGl4ZWwgdGVzdAorUEFTUyBEcmF3IDEg
cGFzc2VkIHBpeGVsIHRlc3QKK1BBU1MgRHJhdyAyIHBhc3NlZCBwaXhlbCB0ZXN0CitUZXN0aW5n
IHVzaW5nIGRlbGV0ZWQgYnVmZmVycyByZWZlcmVuY2VkIGJ5IFZBT3MKK1BBU1Mgc2hvdWxkIGJl
IDI1NSwwLDAsMjU1CitQQVNTIHNob3VsZCBiZSAwLDI1NSwwLDI1NQorUEFTUyBzaG91bGQgYmUg
MCwwLDI1NSwyNTUKK1BBU1Mgc2hvdWxkIGJlIDAsMjU1LDI1NSwyNTUKK1Rlc3RpbmcgdGhhdCBW
QU9zIGRvbid0IGVmZmVjdCBBUlJBWV9CVUZGRVIgYmluZGluZy4KK1BBU1Mgc2hvdWxkIGJlIHJl
ZAorUEFTUyBzaG91bGQgYmUgZ3JlZW4KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IHRoZXJlIHNob3VsZCBiZSBubyBlcnJvcnMKKworUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRl
eC1hcnJheS1vYmplY3QuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL29lcy12
ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODRkYzNiMmZmNTUzZjUzYjAzODhk
ZDAyODVhYTcwMmNiNTFlNDAzYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWwKQEAgLTAsMCArMSw1ODYg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04
Ij4KKzx0aXRsZT5XZWJHTCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBDb25mb3JtYW5jZSBUZXN0
czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Rlc2t0b3AtZ2wtY29uc3RhbnRzLmpz
IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJn
bC10ZXN0LXV0aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVz
Y3JpcHRpb24iPjwvZGl2PgorPGNhbnZhcyBpZD0iY2FudmFzIiBzdHlsZT0id2lkdGg6IDUwcHg7
IGhlaWdodDogNTBweDsiPiA8L2NhbnZhcz4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdCBpZD0idnNoYWRlciIsIHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KK2F0dHJpYnV0ZSB2
ZWM0IGFfcG9zaXRpb247CithdHRyaWJ1dGUgdmVjNCBhX2NvbG9yOwordmFyeWluZyB2ZWM0IHZf
Y29sb3I7Cit2b2lkIG1haW4odm9pZCkgeworICAgIGdsX1Bvc2l0aW9uID0gYV9wb3NpdGlvbjsK
KyAgICB2X2NvbG9yID0gYV9jb2xvcjsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0iZnNoYWRl
ciIsIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgorcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7
Cit2YXJ5aW5nIHZlYzQgdl9jb2xvcjsKK3ZvaWQgbWFpbih2b2lkKSB7CisgICAgZ2xfRnJhZ0Nv
bG9yID0gdl9jb2xvcjsKK30KKzwvc2NyaXB0PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUaGlz
IHRlc3QgdmVyaWZpZXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIE9FU192ZXJ0ZXhfYXJyYXlf
b2JqZWN0IGV4dGVuc2lvbiwgaWYgaXQgaXMgYXZhaWxhYmxlLiIpOworCitkZWJ1ZygiIik7CisK
K3ZhciB3dHUgPSBXZWJHTFRlc3RVdGlsczsKK3ZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY2FudmFzIik7Cit2YXIgZ2wgPSBjcmVhdGUzRENvbnRleHQoY2FudmFzKTsKK3Zh
ciBleHQgPSBudWxsOwordmFyIHZhbyA9IG51bGw7CisKK2lmICghZ2wpIHsKKyAgICB0ZXN0RmFp
bGVkKCJXZWJHTCBjb250ZXh0IGRvZXMgbm90IGV4aXN0Iik7Cit9IGVsc2UgeworICAgIHRlc3RQ
YXNzZWQoIldlYkdMIGNvbnRleHQgZXhpc3RzIik7CisKKyAgICAvLyBTZXR1cCBlbXVsYXRlZCBP
RVNWZXJ0ZXhBcnJheU9iamVjdCBpZiBpdCBoYXMgYmVlbiBpbmNsdWRlZC4KKyAgICBpZiAod2lu
ZG93LnNldHVwVmVydGV4QXJyYXlPYmplY3QpIHsKKyAgICAgICAgZGVidWcoInVzaW5nIGVtdWF0
ZWQgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAgICAgICAgc2V0dXBWZXJ0ZXhBcnJheU9i
amVjdChnbCk7CisgICAgfQorCisgICAgLy8gUnVuIHRlc3RzIHdpdGggZXh0ZW5zaW9uIGRpc2Fi
bGVkCisgICAgcnVuQmluZGluZ1Rlc3REaXNhYmxlZCgpOworCisgICAgLy8gUXVlcnkgdGhlIGV4
dGVuc2lvbiBhbmQgc3RvcmUgZ2xvYmFsbHkgc28gc2hvdWxkQmUgY2FuIGFjY2VzcyBpdAorICAg
IGV4dCA9IGdsLmdldEV4dGVuc2lvbigiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAgICBp
ZiAoIWV4dCkgeworICAgICAgICB0ZXN0UGFzc2VkKCJObyBPRVNfdmVydGV4X2FycmF5X29iamVj
dCBzdXBwb3J0IC0tIHRoaXMgaXMgbGVnYWwiKTsKKworICAgICAgICBydW5TdXBwb3J0ZWRUZXN0
KGZhbHNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0UGFzc2VkKCJTdWNjZXNzZnVsbHkg
ZW5hYmxlZCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBleHRlbnNpb24iKTsKKworICAgICAgICBy
dW5TdXBwb3J0ZWRUZXN0KHRydWUpOworICAgICAgICBydW5CaW5kaW5nVGVzdEVuYWJsZWQoKTsK
KyAgICAgICAgcnVuT2JqZWN0VGVzdCgpOworICAgICAgICBydW5BdHRyaWJ1dGVUZXN0cygpOwor
ICAgICAgICBydW5BdHRyaWJ1dGVWYWx1ZVRlc3RzKCk7CisgICAgICAgIHJ1bkRyYXdUZXN0cygp
OworICAgICAgICBydW5EZWxldGVUZXN0cygpOworICAgICAgICBydW5BcnJheUJ1ZmZlckJpbmRU
ZXN0cygpOworICAgICAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAidGhlcmUg
c2hvdWxkIGJlIG5vIGVycm9ycyIpOworICAgIH0KK30KKworZnVuY3Rpb24gcnVuU3VwcG9ydGVk
VGVzdChleHRlbnNpb25FbmFibGVkKSB7CisgICAgdmFyIHN1cHBvcnRlZCA9IGdsLmdldFN1cHBv
cnRlZEV4dGVuc2lvbnMoKTsKKyAgICBpZiAoc3VwcG9ydGVkLmluZGV4T2YoIk9FU192ZXJ0ZXhf
YXJyYXlfb2JqZWN0IikgPj0gMCkgeworICAgICAgICBpZiAoZXh0ZW5zaW9uRW5hYmxlZCkgewor
ICAgICAgICAgICAgdGVzdFBhc3NlZCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgbGlzdGVkIGFz
IHN1cHBvcnRlZCBhbmQgZ2V0RXh0ZW5zaW9uIHN1Y2NlZWRlZCIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgdGVzdEZhaWxlZCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgbGlzdGVk
IGFzIHN1cHBvcnRlZCBidXQgZ2V0RXh0ZW5zaW9uIGZhaWxlZCIpOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKGV4dGVuc2lvbkVuYWJsZWQpIHsKKyAgICAgICAgICAgIHRl
c3RGYWlsZWQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IG5vdCBsaXN0ZWQgYXMgc3VwcG9ydGVk
IGJ1dCBnZXRFeHRlbnNpb24gc3VjY2VlZGVkIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB0ZXN0UGFzc2VkKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgbGlzdGVkIGFzIHN1
cHBvcnRlZCBhbmQgZ2V0RXh0ZW5zaW9uIGZhaWxlZCAtLSB0aGlzIGlzIGxlZ2FsIik7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1bkJpbmRpbmdUZXN0RGlzYWJsZWQoKSB7Cisg
ICAgZGVidWcoIlRlc3RpbmcgYmluZGluZyBlbnVtIHdpdGggZXh0ZW5zaW9uIGRpc2FibGVkIik7
CisgICAgCisgICAgLy8gVXNlIHRoZSBjb25zdGFudCBkaXJlY3RseSBhcyB3ZSBkb24ndCBoYXZl
IHRoZSBleHRlbnNpb24KKyAgICB2YXIgVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTID0gMHg4NUI1
OworICAgIAorICAgIGdsLmdldFBhcmFtZXRlcihWRVJURVhfQVJSQVlfQklORElOR19PRVMpOwor
ICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuSU5WQUxJRF9FTlVNLCAiVkVSVEVYX0FSUkFZX0JJ
TkRJTkdfT0VTIHNob3VsZCBub3QgYmUgcXVlcnlhYmxlIGlmIGV4dGVuc2lvbiBpcyBkaXNhYmxl
ZCIpOworfQorCitmdW5jdGlvbiBydW5CaW5kaW5nVGVzdEVuYWJsZWQoKSB7CisgICAgZGVidWco
IlRlc3RpbmcgYmluZGluZyBlbnVtIHdpdGggZXh0ZW5zaW9uIGVuYWJsZWQiKTsKKyAgICAKKyAg
ICBzaG91bGRCZSgiZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUyIsICIweDg1QjUiKTsKKyAg
ICAKKyAgICBnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUyk7Cisg
ICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgIlZFUlRFWF9BUlJBWV9CSU5ESU5H
X09FUyBxdWVyeSBzaG91bGQgc3VjY2VlZCBpZiBleHRlbnNpb24gaXMgZW5hYmxlIik7CisgICAg
CisgICAgLy8gRGVmYXVsdCB2YWx1ZSBpcyBudWxsCisgICAgaWYgKGdsLmdldFBhcmFtZXRlcihl
eHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSA9PT0gbnVsbCkgeworICAgICAgICB0ZXN0UGFz
c2VkKCJEZWZhdWx0IHZhbHVlIG9mIFZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUyBpcyBudWxsIik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiRGVmYXVsdCB2YWx1ZSBvZiBWRVJU
RVhfQVJSQVlfQklORElOR19PRVMgaXMgbm90IG51bGwiKTsKKyAgICB9CisgICAgCisgICAgZGVi
dWcoIlRlc3RpbmcgYmluZGluZyBhIFZBTyIpOworICAgIHZhciB2YW8wID0gZXh0LmNyZWF0ZVZl
cnRleEFycmF5T0VTKCk7CisgICAgdmFyIHZhbzEgPSBleHQuY3JlYXRlVmVydGV4QXJyYXlPRVMo
KTsKKyAgICBzaG91bGRCZU51bGwoImdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJ
TkRJTkdfT0VTKSIpOworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvMCk7CisgICAgaWYg
KGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSA9PSB2YW8wKSB7
CisgICAgICAgIHRlc3RQYXNzZWQoImdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJ
TkRJTkdfT0VTKSBpcyBleHBlY3RlZCBWQU8iKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0
RmFpbGVkKCJnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUykgaXMg
bm90IGV4cGVjdGVkIFZBTyIpCisgICAgfQorICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFv
MSk7CisgICAgaWYgKGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VT
KSA9PSB2YW8xKSB7CisgICAgICAgIHRlc3RQYXNzZWQoImdsLmdldFBhcmFtZXRlcihleHQuVkVS
VEVYX0FSUkFZX0JJTkRJTkdfT0VTKSBpcyBleHBlY3RlZCBWQU8iKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICB0ZXN0RmFpbGVkKCJnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJBWV9CSU5E
SU5HX09FUykgaXMgbm90IGV4cGVjdGVkIFZBTyIpCisgICAgfQorICAgIGV4dC5kZWxldGVWZXJ0
ZXhBcnJheU9FUyh2YW8xKTsKKyAgICBzaG91bGRCZU51bGwoImdsLmdldFBhcmFtZXRlcihleHQu
VkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSIpOworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVMo
dmFvMSk7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5JTlZBTElEX09QRVJBVElPTiwgImJp
bmRpbmcgYSBkZWxldGVkIHZlcnRleCBhcnJheSBvYmplY3QiKTsKKyAgICBleHQuYmluZFZlcnRl
eEFycmF5T0VTKG51bGwpOworICAgIHNob3VsZEJlTnVsbCgiZ2wuZ2V0UGFyYW1ldGVyKGV4dC5W
RVJURVhfQVJSQVlfQklORElOR19PRVMpIik7CisgICAgZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VT
KHZhbzEpOworfQorCitmdW5jdGlvbiBydW5PYmplY3RUZXN0KCkgeworICAgIGRlYnVnKCJUZXN0
aW5nIG9iamVjdCBjcmVhdGlvbiIpOworICAgIAorICAgIHZhbyA9IGV4dC5jcmVhdGVWZXJ0ZXhB
cnJheU9FUygpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJjcmVhdGVW
ZXJ0ZXhBcnJheU9FUyBzaG91bGQgbm90IHNldCBhbiBlcnJvciIpOworICAgIHNob3VsZEJlTm9u
TnVsbCgidmFvIik7CisgICAgCisgICAgLy8gRXhwZWN0IGZhbHNlIGlmIG5ldmVyIGJvdW5kCisg
ICAgc2hvdWxkQmVGYWxzZSgiZXh0LmlzVmVydGV4QXJyYXlPRVModmFvKSIpOworICAgIGV4dC5i
aW5kVmVydGV4QXJyYXlPRVModmFvKTsKKyAgICBzaG91bGRCZVRydWUoImV4dC5pc1ZlcnRleEFy
cmF5T0VTKHZhbykiKTsKKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOworICAgIHNo
b3VsZEJlVHJ1ZSgiZXh0LmlzVmVydGV4QXJyYXlPRVModmFvKSIpOworICAgIAorICAgIHNob3Vs
ZEJlRmFsc2UoImV4dC5pc1ZlcnRleEFycmF5T0VTKCkiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJl
eHQuaXNWZXJ0ZXhBcnJheU9FUyhudWxsKSIpOworICAgIAorICAgIGV4dC5kZWxldGVWZXJ0ZXhB
cnJheU9FUyh2YW8pOworICAgIHZhbyA9IG51bGw7Cit9CisKK2Z1bmN0aW9uIHJ1bkF0dHJpYnV0
ZVRlc3RzKCkgeworICAgIGRlYnVnKCJUZXN0aW5nIGF0dHJpYnV0ZXMgd29yayBhY3Jvc3MgYmlu
ZGluZ3MiKTsKKyAgICAKKyAgICB2YXIgc3RhdGVzID0gW107CisgICAgCisgICAgdmFyIGF0dHJD
b3VudCA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIGZvciAo
dmFyIG4gPSAwOyBuIDwgYXR0ckNvdW50OyBuKyspIHsKKyAgICAgICAgZ2wuYmluZEJ1ZmZlcihn
bC5BUlJBWV9CVUZGRVIsIG51bGwpOworICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRf
QVJSQVlfQlVGRkVSLCBudWxsKTsKKyAgICAgICAgCisgICAgICAgIHZhciBzdGF0ZSA9IHt9Owor
ICAgICAgICBzdGF0ZXMucHVzaChzdGF0ZSk7CisgICAgICAgIAorICAgICAgICB2YXIgdmFvID0g
c3RhdGUudmFvID0gZXh0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7CisgICAgICAgIGV4dC5iaW5k
VmVydGV4QXJyYXlPRVModmFvKTsKKyAgICAgICAgCisgICAgICAgIGlmIChuICUgMiA9PSAwKSB7
CisgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShuKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShuKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG4gJSAyID09IDApIHsKKyAgICAgICAgICAgIHZh
ciBidWZmZXIgPSBzdGF0ZS5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgICAgICAg
IGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpOworICAgICAgICAgICAgZ2wu
YnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIDEwMjQsIGdsLlNUQVRJQ19EUkFXKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihuLCAxICsgbiAlIDQs
IGdsLkZMT0FULCB0cnVlLCBuICogNCwgbiAqIDQpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAobiAlIDIgPT0gMCkgeworICAgICAgICAgICAgdmFyIGVsYnVmZmVyID0gc3RhdGUu
ZWxidWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIo
Z2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGVsYnVmZmVyKTsKKyAgICAgICAgICAgIGdsLmJ1ZmZl
ckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDEwMjQsIGdsLlNUQVRJQ19EUkFXKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTsK
KyAgICB9CisgICAgCisgICAgdmFyIGFueU1pc21hdGNoID0gZmFsc2U7CisgICAgZm9yICh2YXIg
biA9IDA7IG4gPCBhdHRyQ291bnQ7IG4rKykgeworICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZXNb
bl07CisgICAgICAgIAorICAgICAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKHN0YXRlLnZhbyk7
CisgICAgICAgIAorICAgICAgICB2YXIgaXNFbmFibGVkID0gZ2wuZ2V0VmVydGV4QXR0cmliKG4s
IGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCk7CisgICAgICAgIGlmICgobiAlIDIgPT0g
MSkgfHwgaXNFbmFibGVkKSB7CisgICAgICAgICAgICAvLyBWYWxpZAorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgdGVzdEZhaWxlZCgiVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEIG5v
dCBwcmVzZXJ2ZWQiKTsKKyAgICAgICAgICAgIGFueU1pc21hdGNoID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgdmFyIGJ1ZmZlciA9IGdsLmdldFZlcnRleEF0dHJpYihuLCBn
bC5WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HKTsKKyAgICAgICAgaWYgKG4gJSAy
ID09IDApIHsKKyAgICAgICAgICAgIGlmIChidWZmZXIgPT0gc3RhdGUuYnVmZmVyKSB7CisgICAg
ICAgICAgICAgICAgLy8gTWF0Y2hlZAorICAgICAgICAgICAgICAgIGlmICgoZ2wuZ2V0VmVydGV4
QXR0cmliKG4sIGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSkgPT0gMSArIG4gJSA0KSAmJgor
ICAgICAgICAgICAgICAgICAgICAoZ2wuZ2V0VmVydGV4QXR0cmliKG4sIGdsLlZFUlRFWF9BVFRS
SUJfQVJSQVlfVFlQRSkgPT0gZ2wuRkxPQVQpICYmCisgICAgICAgICAgICAgICAgICAgIChnbC5n
ZXRWZXJ0ZXhBdHRyaWIobiwgZ2wuVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEKSA9PSB0
cnVlKSAmJgorICAgICAgICAgICAgICAgICAgICAoZ2wuZ2V0VmVydGV4QXR0cmliKG4sIGdsLlZF
UlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFKSA9PSBuICogNCkgJiYKKyAgICAgICAgICAgICAgICAg
ICAgKGdsLmdldFZlcnRleEF0dHJpYk9mZnNldChuLCBnbC5WRVJURVhfQVRUUklCX0FSUkFZX1BP
SU5URVIpID09IG4gKiA0KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBNYXRjaGVkCisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiVkVS
VEVYX0FUVFJJQl9BUlJBWV8qIG5vdCBwcmVzZXJ2ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAg
YW55TWlzbWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZG
RVJfQklORElORyBub3QgcHJlc2VydmVkIik7CisgICAgICAgICAgICAgICAgYW55TWlzbWF0Y2gg
PSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
R0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCIGlzIG5vdCBwcmVzZXJ2ZWQKKyAgICAgICAgICAgIGlm
IChidWZmZXIpIHsKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJWRVJURVhfQVRUUklCX0FS
UkFZX0JVRkZFUl9CSU5ESU5HIG5vdCBwcmVzZXJ2ZWQiKTsKKyAgICAgICAgICAgICAgICBhbnlN
aXNtYXRjaCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHZhciBlbGJ1ZmZlciA9IGdsLmdldFBhcmFtZXRlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZF
Ul9CSU5ESU5HKTsKKyAgICAgICAgaWYgKG4gJSAyID09IDApIHsKKyAgICAgICAgICAgIGlmIChl
bGJ1ZmZlciA9PSBzdGF0ZS5lbGJ1ZmZlcikgeworICAgICAgICAgICAgICAgIC8vIE1hdGNoZWQK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiRUxFTUVO
VF9BUlJBWV9CVUZGRVJfQklORElORyBub3QgcHJlc2VydmVkIik7CisgICAgICAgICAgICAgICAg
YW55TWlzbWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaWYgKGVsYnVmZmVyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyBNYXRj
aGVkCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIkVM
RU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgbm90IHByZXNlcnZlZCIpOworICAgICAgICAgICAg
ICAgIGFueU1pc21hdGNoID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOworICAgIGlmICghYW55TWlzbWF0Y2gp
IHsKKyAgICAgICAgdGVzdFBhc3NlZCgiQWxsIGF0dHJpYnV0ZXMgcHJlc2VydmVkIGFjcm9zcyBi
aW5kaW5ncyIpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHZhciBuID0gMDsgbiA8IGF0dHJDb3Vu
dDsgbisrKSB7CisgICAgICAgIHZhciBzdGF0ZSA9IHN0YXRlc1tuXTsKKyAgICAgICAgZXh0LmRl
bGV0ZVZlcnRleEFycmF5T0VTKHN0YXRlLnZhbyk7CisgICAgfQorfQorCitmdW5jdGlvbiBydW5B
dHRyaWJ1dGVWYWx1ZVRlc3RzKCkgeworICAgIGRlYnVnKCJUZXN0aW5nIHRoYXQgYXR0cmlidXRl
IHZhbHVlcyBhcmUgbm90IGF0dGFjaGVkIHRvIGJpbmRpbmdzIik7CisgICAgCisgICAgdmFyIHY7
CisgICAgdmFyIHZhbzAgPSBleHQuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICB2YXIgYW55
RmFpbGVkID0gZmFsc2U7CisgICAgCisgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTsK
KyAgICBnbC52ZXJ0ZXhBdHRyaWI0ZigwLCAwLCAxLCAyLCAzKTsKKyAgICAKKyAgICB2ID0gZ2wu
Z2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJQik7CisgICAgaWYgKCEo
dlswXSA9PSAwICYmIHZbMV0gPT0gMSAmJiB2WzJdID09IDIgJiYgdlszXSA9PSAzKSkgeworICAg
ICAgICB0ZXN0RmFpbGVkKCJWZXJ0ZXggYXR0cmliIHZhbHVlIG5vdCByb3VuZC10cmlwcGVkPyIp
OworICAgICAgICBhbnlGYWlsZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBleHQuYmluZFZl
cnRleEFycmF5T0VTKHZhbzApOworICAgIAorICAgIHYgPSBnbC5nZXRWZXJ0ZXhBdHRyaWIoMCwg
Z2wuQ1VSUkVOVF9WRVJURVhfQVRUUklCKTsKKyAgICBpZiAoISh2WzBdID09IDAgJiYgdlsxXSA9
PSAxICYmIHZbMl0gPT0gMiAmJiB2WzNdID09IDMpKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIlZl
cnRleCBhdHRyaWIgdmFsdWUgcmVzZXQgYWNyb3NzIGJpbmRpbmdzIik7CisgICAgICAgIGFueUZh
aWxlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIGdsLnZlcnRleEF0dHJpYjRmKDAsIDQsIDUs
IDYsIDcpOworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7CisgICAgCisgICAgdiA9
IGdsLmdldFZlcnRleEF0dHJpYigwLCBnbC5DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpOworICAgIGlm
ICghKHZbMF0gPT0gNCAmJiB2WzFdID09IDUgJiYgdlsyXSA9PSA2ICYmIHZbM10gPT0gNykpIHsK
KyAgICAgICAgdGVzdEZhaWxlZCgiVmVydGV4IGF0dHJpYiB2YWx1ZSBib3VuZCB0byBidWZmZXIi
KTsKKyAgICAgICAgYW55RmFpbGVkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKCFhbnlG
YWlsZWQpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiVmVydGV4IGF0dHJpYnV0ZSB2YWx1ZXMgYXJl
IG5vdCBhdHRhY2hlZCB0byBiaW5kaW5ncyIpCisgICAgfQorICAgIAorICAgIGV4dC5iaW5kVmVy
dGV4QXJyYXlPRVMobnVsbCk7CisgICAgZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHZhbzApOwor
fQorCitmdW5jdGlvbiBydW5EcmF3VGVzdHMoKSB7CisgICAgZGVidWcoIlRlc3RpbmcgZHJhd3Mg
d2l0aCB2YXJpb3VzIFZBTyBiaW5kaW5ncyIpOworICAgIAorICAgIGNhbnZhcy53aWR0aCA9IDUw
OyBjYW52YXMuaGVpZ2h0ID0gNTA7CisgICAgZ2wudmlld3BvcnQoMCwgMCwgY2FudmFzLndpZHRo
LCBjYW52YXMuaGVpZ2h0KTsKKyAgICAKKyAgICB2YXIgdmFvMCA9IGV4dC5jcmVhdGVWZXJ0ZXhB
cnJheU9FUygpOworICAgIHZhciB2YW8xID0gZXh0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7Cisg
ICAgCisgICAgdmFyIHByb2dyYW0gPSB3dHUuc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbShnbCwg
MCwgMSk7CisgICAgCisgICAgZnVuY3Rpb24gc2V0dXBRdWFkKHMpIHsKKyAgICAgICAgdmFyIG9w
dF9wb3NpdGlvbkxvY2F0aW9uID0gMDsKKyAgICAgICAgdmFyIG9wdF90ZXhjb29yZExvY2F0aW9u
ID0gMTsKKyAgICAgICAgdmFyIHZlcnRleE9iamVjdCA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAg
ICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmVydGV4T2JqZWN0KTsKKyAgICAg
ICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoWworICAg
ICAgICAgICAgIDEuMCAqIHMsICAxLjAgKiBzLCAwLjAsCisgICAgICAgICAgICAtMS4wICogcywg
IDEuMCAqIHMsIDAuMCwKKyAgICAgICAgICAgIC0xLjAgKiBzLCAtMS4wICogcywgMC4wLAorICAg
ICAgICAgICAgIDEuMCAqIHMsICAxLjAgKiBzLCAwLjAsCisgICAgICAgICAgICAtMS4wICogcywg
LTEuMCAqIHMsIDAuMCwKKyAgICAgICAgICAgICAxLjAgKiBzLCAtMS4wICogcywgMC4wXSksIGds
LlNUQVRJQ19EUkFXKTsKKyAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkob3B0X3Bv
c2l0aW9uTG9jYXRpb24pOworICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG9wdF9wb3Np
dGlvbkxvY2F0aW9uLCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworCisgICAgICAgIHZhciB2
ZXJ0ZXhPYmplY3QgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgICAgZ2wuYmluZEJ1ZmZlcihn
bC5BUlJBWV9CVUZGRVIsIHZlcnRleE9iamVjdCk7CisgICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wu
QVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5KFsKKyAgICAgICAgICAgIDEuMCAqIHMsIDEu
MCAqIHMsCisgICAgICAgICAgICAwLjAgKiBzLCAxLjAgKiBzLAorICAgICAgICAgICAgMC4wICog
cywgMC4wICogcywKKyAgICAgICAgICAgIDEuMCAqIHMsIDEuMCAqIHMsCisgICAgICAgICAgICAw
LjAgKiBzLCAwLjAgKiBzLAorICAgICAgICAgICAgMS4wICogcywgMC4wICogc10pLCBnbC5TVEFU
SUNfRFJBVyk7CisgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG9wdF90ZXhjb29y
ZExvY2F0aW9uKTsKKyAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihvcHRfdGV4Y29vcmRM
b2NhdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICB9OworICAgIAorICAgIGZ1
bmN0aW9uIHJlYWRMb2NhdGlvbih4LCB5KSB7CisgICAgICAgIHZhciBwaXhlbHMgPSBuZXcgVWlu
dDhBcnJheSgxICogMSAqIDQpOworICAgICAgICBnbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIGds
LlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHBpeGVscyk7CisgICAgICAgIHJldHVybiBwaXhlbHM7
CisgICAgfTsKKyAgICBmdW5jdGlvbiB0ZXN0UGl4ZWwoYmxhY2tMaXN0LCB3aGl0ZUxpc3QpIHsK
KyAgICAgICAgZnVuY3Rpb24gdGVzdExpc3QobGlzdCwgZXhwZWN0ZWQpIHsKKyAgICAgICAgICAg
IGZvciAodmFyIG4gPSAwOyBuIDwgbGlzdC5sZW5ndGg7IG4rKykgeworICAgICAgICAgICAgICAg
IHZhciBsID0gbGlzdFtuXTsKKyAgICAgICAgICAgICAgICB2YXIgeCA9IC1NYXRoLmZsb29yKGwg
KiBjYW52YXMud2lkdGggLyAyKSArIGNhbnZhcy53aWR0aCAvIDI7CisgICAgICAgICAgICAgICAg
dmFyIHkgPSAtTWF0aC5mbG9vcihsICogY2FudmFzLmhlaWdodCAvIDIpICsgY2FudmFzLmhlaWdo
dCAvIDI7CisgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHJlYWRMb2NhdGlvbih4LCB5KTsK
KyAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoc291cmNlWzBdIC0gZXhwZWN0ZWQpID4gMikg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRlc3RMaXN0KGJsYWNrTGlzdCwgMCkgJiYgdGVzdExpc3Qod2hpdGVMaXN0LCAy
NTUpOworICAgIH07CisgICAgZnVuY3Rpb24gdmVyaWZ5RHJhdyhkcmF3TnVtYmVyLCBzKSB7Cisg
ICAgICAgIHd0dS5kcmF3UXVhZChnbCk7CisgICAgICAgIHZhciBibGFja0xpc3QgPSBbXTsKKyAg
ICAgICAgdmFyIHdoaXRlTGlzdCA9IFtdOworICAgICAgICB2YXIgcG9pbnRzID0gWzAuMCwgMC4y
LCAwLjQsIDAuNiwgMC44LCAxLjBdOworICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHBvaW50
cy5sZW5ndGg7IG4rKykgeworICAgICAgICAgICAgaWYgKHBvaW50c1tuXSA8PSBzKSB7CisgICAg
ICAgICAgICAgICAgYmxhY2tMaXN0LnB1c2gocG9pbnRzW25dKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgd2hpdGVMaXN0LnB1c2gocG9pbnRzW25dKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGVzdFBpeGVsKGJsYWNrTGlzdCwgd2hpdGVM
aXN0KSkgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgiRHJhdyAiICsgZHJhd051bWJlciArICIg
cGFzc2VkIHBpeGVsIHRlc3QiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RG
YWlsZWQoIkRyYXcgIiArIGRyYXdOdW1iZXIgKyAiIGZhaWxlZCBwaXhlbCB0ZXN0Iik7CisgICAg
ICAgIH0KKyAgICB9OworICAgIAorICAgIC8vIFNldHVwIGFsbCBiaW5kaW5ncworICAgIHNldHVw
UXVhZCgxKTsKKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKHZhbzApOworICAgIHNldHVwUXVh
ZCgwLjUpOworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvMSk7CisgICAgc2V0dXBRdWFk
KDAuMjUpOworICAgIAorICAgIC8vIFZlcmlmeSBkcmF3aW5nCisgICAgZXh0LmJpbmRWZXJ0ZXhB
cnJheU9FUyhudWxsKTsKKyAgICB2ZXJpZnlEcmF3KDAsIDEpOworICAgIGV4dC5iaW5kVmVydGV4
QXJyYXlPRVModmFvMCk7CisgICAgdmVyaWZ5RHJhdygxLCAwLjUpOworICAgIGV4dC5iaW5kVmVy
dGV4QXJyYXlPRVModmFvMSk7CisgICAgdmVyaWZ5RHJhdygyLCAwLjI1KTsKKyAgICAKKyAgICBl
eHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOworICAgIGV4dC5kZWxldGVWZXJ0ZXhBcnJheU9F
Uyh2YW8wKTsKKyAgICBleHQuZGVsZXRlVmVydGV4QXJyYXlPRVModmFvMSk7Cit9CisKK2Z1bmN0
aW9uIHJ1bkRlbGV0ZVRlc3RzKCkgeworICAgIGRlYnVnKCJUZXN0aW5nIHVzaW5nIGRlbGV0ZWQg
YnVmZmVycyByZWZlcmVuY2VkIGJ5IFZBT3MiKTsKKworICAgIHZhciBwcm9ncmFtID0gd3R1LnNl
dHVwUHJvZ3JhbShnbCwgWyJ2c2hhZGVyIiwgImZzaGFkZXIiXSwgWyJhX3Bvc2l0aW9uIiwgImFf
Y29sb3IiXSk7CisgICAgZ2wudXNlUHJvZ3JhbShwcm9ncmFtKTsKKworICAgIHZhciBwb3NpdGlv
bkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlf
QlVGRkVSLCBwb3NpdGlvbkJ1ZmZlcik7CisgICAgZ2wuYnVmZmVyRGF0YSgKKyAgICAgICAgZ2wu
QVJSQVlfQlVGRkVSLAorICAgICAgICBuZXcgRmxvYXQzMkFycmF5KFsKKyAgICAgICAgICAgMS4w
LCAgMS4wLAorICAgICAgICAgIC0xLjAsICAxLjAsCisgICAgICAgICAgLTEuMCwgLTEuMCwKKyAg
ICAgICAgICAgMS4wLCAtMS4wXSksCisgICAgICAgIGdsLlNUQVRJQ19EUkFXKTsKKworICAgIHZh
ciBjb2xvcnMgPSBbCisgICAgICBbMjU1LCAgIDAsICAgMCwgMjU1XSwKKyAgICAgIFsgIDAsIDI1
NSwgICAwLCAyNTVdLAorICAgICAgWyAgMCwgICAwLCAyNTUsIDI1NV0sCisgICAgICBbICAwLCAy
NTUsIDI1NSwgMjU1XQorICAgIF07CisgICAgdmFyIGNvbG9yQnVmZmVycyA9IFtdOworICAgIHZh
ciBlbGVtZW50QnVmZmVycyA9IFtdOworICAgIHZhciB2YW9zID0gW107CisgICAgZm9yICh2YXIg
aWkgPSAwOyBpaSA8IGNvbG9ycy5sZW5ndGg7ICsraWkpIHsKKyAgICAgIHZhciB2YW8gPSBleHQu
Y3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICAgIHZhb3MucHVzaCh2YW8pOworICAgICAgZXh0
LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW8pOworICAgICAgLy8gU2V0IHRoZSBwb3NpdGlvbiBidWZm
ZXIKKyAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBwb3NpdGlvbkJ1ZmZlcik7
CisgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICAgIGdsLnZlcnRleEF0
dHJpYlBvaW50ZXIoMCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKworICAgICAgdmFyIGVs
ZW1lbnRCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgIGVsZW1lbnRCdWZmZXJzLnB1
c2goZWxlbWVudEJ1ZmZlcik7CisgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlf
QlVGRkVSLCBlbGVtZW50QnVmZmVyKTsKKyAgICAgIGdsLmJ1ZmZlckRhdGEoCisgICAgICAgICAg
Z2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsCisgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoWzAsIDEs
IDIsIDAsIDIsIDNdKSwKKyAgICAgICAgICBnbC5TVEFUSUNfRFJBVyk7CisKKyAgICAgIC8vIFNl
dHVwIHRoZSBjb2xvciBhdHRyaWIKKyAgICAgIHZhciBjb2xvciA9IGNvbG9yc1tpaV07CisgICAg
ICBpZiAoaWkgPCAzKSB7CisgICAgICAgIHZhciBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZl
cigpOworICAgICAgICBjb2xvckJ1ZmZlcnMucHVzaChjb2xvckJ1ZmZlcik7CisgICAgICAgIGds
LmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvckJ1ZmZlcik7CisgICAgICAgIGdsLmJ1
ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgVWludDhBcnJheSgKKyAgICAgICAgICBbIGNv
bG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIGNvbG9yWzNdLAorICAgICAgICAgICAgY29sb3Jb
MF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgY29sb3JbM10sCisgICAgICAgICAgICBjb2xvclswXSwg
Y29sb3JbMV0sIGNvbG9yWzJdLCBjb2xvclszXSwKKyAgICAgICAgICAgIGNvbG9yWzBdLCBjb2xv
clsxXSwgY29sb3JbMl0sIGNvbG9yWzNdCisgICAgICAgICAgXSksIGdsLlNUQVRJQ19EUkFXKTsK
KyAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMSk7CisgICAgICAgIGdsLnZlcnRl
eEF0dHJpYlBvaW50ZXIoMSwgNCwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgMCwgMCk7CisgICAg
ICB9IGVsc2UgeworICAgICAgICBnbC52ZXJ0ZXhBdHRyaWI0ZigxLCBjb2xvclswXSAvIDI1NSwg
Y29sb3JbMV0gLyAyNTUsIGNvbG9yWzJdIC8gMjU1LCBjb2xvclszXSAvIDI1NSk7CisgICAgICB9
CisgICAgfQorCisgICAgLy8gZGVsZXRlIHRoZSBjb2xvciBidWZmZXJzIEFORCB0aGUgcG9zaXRp
b24gYnVmZmVyLgorICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7CisgICAgZm9yICh2
YXIgaWkgPSAwOyBpaSA8IGNvbG9yQnVmZmVycy5sZW5ndGg7ICsraWkpIHsKKyAgICAgIGdsLmRl
bGV0ZUJ1ZmZlcihjb2xvckJ1ZmZlcnNbaWldKTsKKyAgICAgIGdsLmRlbGV0ZUJ1ZmZlcihlbGVt
ZW50QnVmZmVyc1tpaV0pOworICAgIH0KKyAgICBnbC5kZWxldGVCdWZmZXIocG9zaXRpb25CdWZm
ZXIpOworCisgICAgLy8gUmVuZGVyIHdpdGggdGhlIGRlbGV0ZWQgYnVmZmVycy4gQXMgdGhleSBh
cmUgcmVmZXJlbmNlZCBieSBWQU9zIHRoZXkKKyAgICAvLyBtdXN0IHN0aWxsIGJlIGFyb3VuZC4K
KyAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgY29sb3JzLmxlbmd0aDsgKytpaSkgeworICAgICAg
dmFyIGNvbG9yID0gY29sb3JzW2lpXTsKKyAgICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFv
c1tpaV0pOworICAgICAgZ2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdO
RURfQllURSwgMCk7CisgICAgICB3dHUuY2hlY2tDYW52YXMoZ2wsIGNvbG9yLCAic2hvdWxkIGJl
ICIgKyBjb2xvcik7CisgICAgfQorCisgICAgLy8gQ2xlYW4gdXAuCisgICAgZm9yICh2YXIgaWkg
PSAwOyBpaSA8IGNvbG9yQnVmZmVycy5sZW5ndGg7ICsraWkpIHsKKyAgICAgIGV4dC5kZWxldGVW
ZXJ0ZXhBcnJheU9FUyh2YW9zW2lpXSk7CisgICAgfQorfQorCitmdW5jdGlvbiBydW5BcnJheUJ1
ZmZlckJpbmRUZXN0cygpIHsKKyAgICBkZWJ1ZygiVGVzdGluZyB0aGF0IFZBT3MgZG9uJ3QgZWZm
ZWN0IEFSUkFZX0JVRkZFUiBiaW5kaW5nLiIpOworCisgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9F
UyhudWxsKTsKKworICAgIHZhciBwcm9ncmFtID0gd3R1LnNldHVwUHJvZ3JhbShnbCwgWyJ2c2hh
ZGVyIiwgImZzaGFkZXIiXSwgWyJhX2NvbG9yIiwgImFfcG9zaXRpb24iXSk7CisgICAgZ2wudXNl
UHJvZ3JhbShwcm9ncmFtKTsKKworICAgIC8vIGNyZWF0ZSBzaGFyZWQgZWxlbWVudCBidXVmZmVy
CisgICAgdmFyIGVsZW1lbnRCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAvLyBiaW5k
IHRvIGRlZmF1bHQKKyAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBl
bGVtZW50QnVmZmVyKTsKKyAgICBnbC5idWZmZXJEYXRhKAorICAgICAgICBnbC5FTEVNRU5UX0FS
UkFZX0JVRkZFUiwKKyAgICAgICAgbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDIsIDAsIDIsIDNdKSwK
KyAgICAgICAgZ2wuU1RBVElDX0RSQVcpOworCisgICAgLy8gZmlyc3QgY3JlYXRlIHRoZSBidWZm
ZXJzIGZvciBubyB2YW8gZHJhdy4KKyAgICB2YXIgbm9uVkFPQ29sb3JCdWZmZXIgPSBnbC5jcmVh
dGVCdWZmZXIoKTsKKyAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbm9uVkFPQ29s
b3JCdWZmZXIpOworICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgVWludDhB
cnJheSgKKyAgICAgIFsgMCwgMjU1LCAwLCAyNTUsCisgICAgICAgIDAsIDI1NSwgMCwgMjU1LAor
ICAgICAgICAwLCAyNTUsIDAsIDI1NSwKKyAgICAgICAgMCwgMjU1LCAwLCAyNTUsCisgICAgICBd
KSwgZ2wuU1RBVElDX0RSQVcpOworCisgICAgLy8gc2hhcmVkIHBvc2l0aW9uIGJ1ZmZlci4KKyAg
ICB2YXIgcG9zaXRpb25CdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICBnbC5iaW5kQnVm
ZmVyKGdsLkFSUkFZX0JVRkZFUiwgcG9zaXRpb25CdWZmZXIpOworICAgIGdsLmJ1ZmZlckRhdGEo
CisgICAgICAgIGdsLkFSUkFZX0JVRkZFUiwKKyAgICAgICAgbmV3IEZsb2F0MzJBcnJheShbCisg
ICAgICAgICAgIDEuMCwgIDEuMCwKKyAgICAgICAgICAtMS4wLCAgMS4wLAorICAgICAgICAgIC0x
LjAsIC0xLjAsCisgICAgICAgICAgIDEuMCwgLTEuMF0pLAorICAgICAgICBnbC5TVEFUSUNfRFJB
Vyk7CisKKyAgICAvLyBhdHRhY2ggcG9zaXRpb24gYnVmZmVyIHRvIGRlZmF1bHQKKyAgICBnbC5l
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgxKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEs
IDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisKKyAgICAvLyBub3cgY3JlYXRlIHZhbworICAg
IHZhciB2YW8gPSBleHQuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICBleHQuYmluZFZlcnRl
eEFycmF5T0VTKHZhbyk7CisKKyAgICAvLyBhdHRhY2ggdGhlIHBvc2l0aW9uIGJ1ZmZlciB2YW8K
KyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgxKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQ
b2ludGVyKDEsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisKKyAgICB2YXIgdmFvQ29sb3JC
dWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eSgwKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIGdsLlVOU0lHTkVEX0JZVEUs
IHRydWUsIDAsIDApOworICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2YW9Db2xv
ckJ1ZmZlcik7CisgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBVaW50OEFy
cmF5KAorICAgICAgWyAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisg
ICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgIF0p
LCBnbC5TVEFUSUNfRFJBVyk7CisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7Cisg
ICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCAw
LCAwKTsKKworICAgIC8vIG5vdyBzZXQgdGhlIGJ1ZmZlciBiYWNrIHRvIHRoZSBub25WQU9Db2xv
ckJ1ZmZlcgorICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBub25WQU9Db2xvckJ1
ZmZlcik7CisKKyAgICAvLyBiaW5kIHRvIHZhbworICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVO
VF9BUlJBWV9CVUZGRVIsIGVsZW1lbnRCdWZmZXIpOworICAgIGdsLmRyYXdFbGVtZW50cyhnbC5U
UklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX0JZVEUsIDApOworICAgIHd0dS5jaGVja0NhbnZhcyhn
bCwgWzI1NSwgMCwgMCwgMjU1XSwgInNob3VsZCBiZSByZWQiKTsKKworICAgIC8vIHVuYmluZCB2
YW8KKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOworCisgICAgLy8gQXQgdGhpcyBw
b2ludCB0aGUgbm9uVkFPQ29sb3JCdWZmZXIgc2hvdWxkIGJlIHN0aWxsIGJlIGJvdW5kLgorICAg
IC8vIElmIHRoZSBXZWJHTCBpbXBsIGlzIGVtdWxhdGluZyBWQU9zIGl0IG11c3QgbWFrZSBzdXJl
CisgICAgLy8gaXQgY29ycmVjdGx5IHJlc3RvcmVzIHRoaXMgYmluZGluZy4KKyAgICBnbC5lbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQs
IGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIDAsIDApOworICAgIGdsLmRyYXdFbGVtZW50cyhnbC5U
UklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX0JZVEUsIDApOworICAgIHd0dS5jaGVja0NhbnZhcyhn
bCwgWzAsIDI1NSwgMCwgMjU1XSwgInNob3VsZCBiZSBncmVlbiIpOworfQorCitkZWJ1ZygiIik7
CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3Rh
dGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCmlu
ZGV4IDMzNGU4Y2UzODVkZGU2NjRkZWZkOGM5MzM4NDQ1ZWRmZTRjYjcyMjUuLmJlMTIwY2ZlODMy
Y2IyZjM1Mzc1MDg2NzRlZjBmNjE5NWQyZDI0ZjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwpAQCAtMzYwNCw3ICszNjA0LDExIEBAIEJVR1dL
OTY1NDkgTUFDIDogcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9ncHUvZmFzdC9oaWRwaS92aWRl
by1jb250cm9scy1pbi1oaWRwCiBCVUdXSzk2NjI4IExJT04gOiBmYXN0L2ZyYW1lcy9jYWxjdWxh
dGUtb3JkZXIuaHRtbCA9IFBBU1MgVEVYVAogQlVHV0s5NjU1MCA6IGh0dHAvdGVzdHMvbWVkaWEv
bWVkaWEtc291cmNlL3NlZWstdG8tZW5kLWFmdGVyLWR1cmF0aW9uLWNoYW5nZS5odG1sID0gUEFT
UyBUSU1FT1VUCiBCVUdXSzk2NDE2IE1BQyA6IGNvbXBvc2l0aW5nL292ZXJmbG93L292ZXJmbG93
LXNjYWxlZC1kZXNjZW5kYW50LW92ZXJsYXBwaW5nLmh0bWwgPSBJTUFHRQorCisvLyBFeHBlY3Rl
ZCB0byBmYWlsIHVudGlsIGV4dGVuc2lvbiBpbXBsZW1lbnRhdGlvbiBsYW5kcworQlVHV0s5NjU3
OCA6IGZhc3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWwgPSBQQVNT
IFRFWFQKK0JVR1dLOTY1NzggOiBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2dwdS9mYXN0L2Nh
bnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC5odG1sID0gUEFTUyBURVhUCisKIEJV
R1dLOTY3MjUgTElOVVggTUFDIFdJTiA6IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL3Zp
ZGVvLW1lZGlhLXNvdXJjZS1zdGF0ZS1jaGFuZ2VzLmh0bWwgPSBQQVNTIFRFWFQKIEJVR0NSNjM5
MjEgOiBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0dWFsL2dwdS9mYXN0L2NhbnZhcy9jYW52YXMtZmls
bFBhdGgtc2hhZG93Lmh0bWwgPSBURVhUCiBCVUdXSzc3NTUwIDogcGxhdGZvcm0vY2hyb21pdW0v
dmlydHVhbC9ncHUvY2FudmFzL3BoaWxpcC90ZXN0cy8yZC5ncmFkaWVudC5pbnRlcnBvbGF0ZS5j
b2xvdXJhbHBoYS5odG1sID0gVEVYVAotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9lZmwvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCmluZGV4IDBk
YjhlNzNjMzNjY2NlOGI4YjAwNWQ2MjMwMWUwYmQ4OTA4MzVjNTcuLmQwZGRkOGM4NGY5NjFhMmRj
MmZjYzg4NzQzYWU0OWYyZGY5ZWJkMGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2VmbC9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCkBAIC04
NzgsMyArODc4LDYgQEAgaW5zcGVjdG9yL2V4dGVuc2lvbnMvZXh0ZW5zaW9ucy1ldmFsLWNvbnRl
bnQtc2NyaXB0Lmh0bWwKIAogIyBFTkFCTEUoV0lER0VUX1JFR0lPTikgaXMgZGlzYWJsZWQKIGZh
c3QvY3NzL3dpZGdldC1yZWdpb24tcGFyc2VyLmh0bWwKKworIyBodHRwOi8vd2Via2l0Lm9yZy9i
Lzk2ODI4CitmYXN0L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC5odG1sCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGstd2syL1NraXBwZWQgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGstd2syL1NraXBwZWQKaW5kZXggN2I1MzY4ODViM2E3NDBiZDMyMmY3
YWEzMTRhYWQxZGM0Y2QyZmExOC4uMThkNWJkMGFhN2I0ZWRlODQ0NGRlMzBlZjMyZWYyZjg5MjI2
ZmZkOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrLXdrMi9Ta2lwcGVkCisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay13azIvU2tpcHBlZApAQCAtNDExLDYgKzQxMSw5
IEBAIHRyYW5zaXRpb25zL2NoYW5nZS12YWx1ZXMtZHVyaW5nLXRyYW5zaXRpb24uaHRtbAogdHJh
bnNpdGlvbnMvZXh0cmEtdHJhbnNpdGlvbi5odG1sCiB0cmFuc2l0aW9ucy9pbnRlcnJ1cHRlZC1h
Y2NlbGVyYXRlZC10cmFuc2l0aW9uLmh0bWwKIAorIyBodHRwOi8vd2Via2l0Lm9yZy9iLzk2ODI4
CitmYXN0L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC5odG1sCisKICMgW05h
dmlnYXRpb24gVGltaW5nXSBSZW1vdmUgb2xkLXN0eWxlIExheW91dFRlc3RzCiAjIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTE1OAogZmFzdC9kb20vbmF2aWdhdGlv
bi10eXBlLWJhY2stZm9yd2FyZC5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCmluZGV4IDI3
NmNjYmZkZjEwMjU1NjQwYTBiNDY3MzI4OWRhYmY3MzRhZmM0ZmYuLmJiZTBmMWJiMDA1NTdkYjkx
ZWFlOGNjM2YyOTFiY2M2ZDIzODlkMDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCkBAIC0x
MDQ4LDYgKzEwNDgsOSBAQCBmYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFn
ZS0yZC13aXRoLXZpZGVvLmh0bWwKICMgU2VuZGluZyB0aGUgbW91c2UgZG93biBldmVudCB0byB0
aGUgc2Nyb2xsYmFyIHN0YXJ0cyBhIG5lc3RlZCBydW4gbG9vcCB3aGljaCBjYXVzZXMgYSBoYW5n
LgogZmFzdC9ldmVudHMvbW91c2Vkb3duLWluLXN1YmZyYW1lLXNjcm9sbGJhci5odG1sCiAKKyMg
aHR0cDovL3dlYmtpdC5vcmcvYi85NjgyOAorZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRleC1h
cnJheS1vYmplY3QuaHRtbAorCiAjIC0tLSBXZWJLaXQxIG9ubHkgLS0tCiBodHRwL3Rlc3RzL21p
c2Mvd2lsbENhY2hlUmVzcG9uc2UtZGVsZWdhdGUtY2FsbGJhY2suaHRtbAogaHR0cC90ZXN0cy9t
dWx0aXBhcnQvbG9hZC1sYXN0LW5vbi1odG1sLWZyYW1lLnBocApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vd2syL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvU2tp
cHBlZAppbmRleCAxOTE3YjZjZWZiMzc5OWViZGFkM2U5ODBmMzU3NjgxNmQ4NGQwMzExLi4xY2E2
NDRmNjQ0NjM5MDIzYWM2N2M1MjZjNTNkMmY0ZGMzYzViOTg0IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93azIvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIv
U2tpcHBlZApAQCAtMTk5LDYgKzE5OSw3IEBAIGZhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9j
YXRpb24uaHRtbAogZmFzdC9jYW52YXMvd2ViZ2wvdmlld3BvcnQtdW5jaGFuZ2VkLXVwb24tcmVz
aXplLmh0bWwKIGZhc3QvY2FudmFzL3dlYmdsL3dlYmdsLWFycmF5LWludmFsaWQtcmFuZ2VzLmh0
bWwKIGZhc3QvY2FudmFzL3dlYmdsL3dlYmdsLXNwZWNpZmljLmh0bWwKK2Zhc3QvY2FudmFzL3dl
YmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWwKIGZhc3QvaGFybmVzcy9vdmVycmlkZS1w
cmVmZXJlbmNlcy0yLmh0bWwKIGZhc3QvaW1hZ2VzL2FuaW1hdGVkLWdpZi1yZXN0b3JlZC1mcm9t
LWJmY2FjaGUuaHRtbAogZmFzdC90ZXh0L3plcm8tZm9udC1zaXplLmh0bWwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164464</attachid>
            <date>2012-09-17 15:39:25 -0700</date>
            <delta_ts>2012-09-17 16:22:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96578-20120917153853.patch</filename>
            <type>text/plain</type>
            <size>39987</size>
            <attacher name="Brandon Jones">bajones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4Nzk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA1MDAwN2M3ZDE4OWVm
NDk4MWFlYWEwZTZhZTViMTc3NTYyY2Q5MmY5Li4xYjZmZWYyZmFhODIwNWQ0NmI1MmQ3MjYxNDk1
NDEwM2Y0Njk3YTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0wOS0xNCAg
QnJhbmRvbiBKb25lcyAgPGJham9uZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9y
dCBmb3IgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgaW4gY2hyb21pdW0KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NTc4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgY29kZSB0byBhbGxvdyBjYWxs
cyB0byB0aGUgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgZXh0ZW5zaW9uIHRvIGludGVyZmFjZQor
ICAgICAgICBwcm9wZXJseSB3aXRoIHRoZSBjaHJvbWl1bSBXZWJHTCBpbXBsZW1lbnRhdGlvbi4g
CisKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAg
ICAgICAgKFdlYkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6YmluZFZlcnRleEFycmF5T0VTKToKKwogMjAxMi0w
OS0xNCAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hy
b21pdW1dIEFkZCB0aGUgdWJlcmNvbXAgV2ViRGVsZWdhdGVkUmVuZGVyZXJMYXllcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDM0YjVlZmEyN2I2NTE1ZmM5ZDc1MGM3YjAyYjdkMjEwMzU1Njg3NjUuLmEzMjE3MmE1
OTNkYjJmZGE1NWI4OTMyODg0ZGU0YmY2MGU4NmU3ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
MyBAQAorMjAxMi0wOS0xNCAgQnJhbmRvbiBKb25lcyAgPGJham9uZXNAZ29vZ2xlLmNvbT4KKwor
ICAgICAgICBBZGQgc3VwcG9ydCBmb3IgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgaW4gY2hyb21p
dW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NTc4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5n
IGJhc2ljIHJlZmVyZW5jZSBjb3VudGluZyB0byBXZWJHTEJ1ZmZlciBvYmplY3RzIHRvIHNhdGlz
Znkgc3BlYyByZXF1aXJlbWVudHMKKyAgICAgICAgZm9yIHRoZSBPRVNfdmVydGV4X2FycmF5X29i
amVjdCBleHRlbnNpb24uIEFkZGVkIGNvZGUgdG8gYWxsb3cgY2FsbHMgdG8gdGhlCisgICAgICAg
IE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IGV4dGVuc2lvbiB0byBpbnRlcmZhY2UgcHJvcGVybHkg
d2l0aCB0aGUgY2hyb21pdW0gV2ViR0wKKyAgICAgICAgaW1wbGVtZW50YXRpb24uCisKKyAgICAg
ICAgVGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1vYmplY3QuaHRtbAor
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
ZWxldGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWJQb2ludGVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVM6OnNldEVsZW1lbnRBcnJheUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmg6CisgICAgICAgIChX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM6OmdldFZlcnRleEF0dHJpYlN0YXRlU2l6ZSk6CisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6Y3JlYXRlVmVydGV4QXJyYXlPRVMpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmRlbGV0ZVZlcnRleEFycmF5
T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjppc1ZlcnRleEFy
cmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpiaW5kVmVy
dGV4QXJyYXlPRVMpOgorCiAyMDEyLTA5LTE3ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBSZXN1bHQgb2YgSURCRmFjdG9yeS5kZWxldGVE
YXRhYmFzZSgpIHNob3VsZCBiZSB1bmRlZmluZWQsIG5vdCBudWxsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmggYi9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgKaW5kZXgg
MzEyZDRmYWI3YTYyOTQ1N2ZjY2FlOWNlNzI4MTdhMzJkOTA2ZTVmNi4uODJkM2QzNmM4YWI1NGVk
MGEzYjE4NGM0MWZjMmE4NjFhZDU1ZTc4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2No
cm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9QbGF0Zm9y
bS9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtNDQzLDYgKzQ0Mywx
MiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHB1c2hHcm91cE1hcmtlckVYVChjb25zdCBX
R0MzRGNoYXIqIG1hcmtlcikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBvcEdyb3VwTWFya2VyRVhU
KHZvaWQpIHsgfQogCisgICAgLy8gR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKyAgICB2aXJ0
dWFsIFdlYkdMSWQgY3JlYXRlVmVydGV4QXJyYXlPRVMoKSB7IHJldHVybiAwOyB9CisgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFdlYkdMSWQgYXJyYXkpIHsgfQorICAgIHZp
cnR1YWwgV0dDM0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMoV2ViR0xJZCBhcnJheSkgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFdlYkdMSWQg
YXJyYXkpIHsgfQorCiAgICAgR3JHTEludGVyZmFjZSogY3JlYXRlR3JHTEludGVyZmFjZSgpOwog
CiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAyNGI5YzMzZjkzMjJjYmM3YmZlZjE0Y2JmYTQyZTEy
ZTI1NDE0ZGI5Li41ODJlZDVkMzk4YWMzZjI0N2ViNmFhZWI2ZWVkYTg1ZTI5NGU1Yzg0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAKQEAgLTE1NDQsMjIgKzE1NDQsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCiAgICAgICAgIHJldHVybjsKICAgICBp
ZiAobV9ib3VuZEFycmF5QnVmZmVyID09IGJ1ZmZlcikKICAgICAgICAgbV9ib3VuZEFycmF5QnVm
ZmVyID0gMDsKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1f
Ym91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgaWYg
KGVsZW1lbnRBcnJheUJ1ZmZlciA9PSBidWZmZXIpCi0gICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdC0+c2V0RWxlbWVudEFycmF5QnVmZmVyKDApOwotICAgIGlmICghaXNHTEVTMkNvbXBs
aWFudCgpKSB7Ci0gICAgICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJp
YlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmli
U3RhdGUoMCk7Ci0gICAgICAgIGlmIChidWZmZXIgPT0gc3RhdGUuYnVmZmVyQmluZGluZykgewot
ICAgICAgICAgICAgc3RhdGUuYnVmZmVyQmluZGluZyA9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcjsK
LSAgICAgICAgICAgIHN0YXRlLmJ5dGVzUGVyRWxlbWVudCA9IDA7Ci0gICAgICAgICAgICBzdGF0
ZS5zaXplID0gNDsKLSAgICAgICAgICAgIHN0YXRlLnR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQ7Ci0gICAgICAgICAgICBzdGF0ZS5ub3JtYWxpemVkID0gZmFsc2U7Ci0gICAgICAgICAg
ICBzdGF0ZS5zdHJpZGUgPSAxNjsKLSAgICAgICAgICAgIHN0YXRlLm9yaWdpbmFsU3RyaWRlID0g
MDsKLSAgICAgICAgICAgIHN0YXRlLm9mZnNldCA9IDA7Ci0gICAgICAgIH0KLSAgICB9CisKKyAg
ICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnVuYmluZEJ1ZmZlcihidWZmZXIpOwogfQogCiB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1
ZmZlciogZnJhbWVidWZmZXIpCkBAIC00MzgzLDE3ICs0MzY5LDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQg
c2l6ZSwgR0MKICAgICB9CiAgICAgR0MzRHNpemVpIGJ5dGVzUGVyRWxlbWVudCA9IHNpemUgKiB0
eXBlU2l6ZTsKIAotICAgIEdDM0RzaXplaSB2YWxpZGF0ZWRTdHJpZGUgPSBzdHJpZGUgPyBzdHJp
ZGUgOiBieXRlc1BlckVsZW1lbnQ7Ci0KLSAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpW
ZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZl
cnRleEF0dHJpYlN0YXRlKGluZGV4KTsKLSAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV9ib3Vu
ZEFycmF5QnVmZmVyOwotICAgIHN0YXRlLmJ5dGVzUGVyRWxlbWVudCA9IGJ5dGVzUGVyRWxlbWVu
dDsKLSAgICBzdGF0ZS5zaXplID0gc2l6ZTsKLSAgICBzdGF0ZS50eXBlID0gdHlwZTsKLSAgICBz
dGF0ZS5ub3JtYWxpemVkID0gbm9ybWFsaXplZDsKLSAgICBzdGF0ZS5zdHJpZGUgPSB2YWxpZGF0
ZWRTdHJpZGU7Ci0gICAgc3RhdGUub3JpZ2luYWxTdHJpZGUgPSBzdHJpZGU7Ci0gICAgc3RhdGUu
b2Zmc2V0ID0gc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KTsKKyAgICBtX2JvdW5kVmVy
dGV4QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBieXRlc1BlckVsZW1l
bnQsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0
cj4ob2Zmc2V0KSwgbV9ib3VuZEFycmF5QnVmZmVyKTsKICAgICBtX2NvbnRleHQtPnZlcnRleEF0
dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGlj
X2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmgKaW5kZXggNjAyM2I0NDYyNmI2Y2U5ZWM1NWMyZGZlZWQ0YWQzNjIyNjAz
MTNmMS4uNDVkZjZhNTgyNWY0NjhlODZkZWIyODdjYzg1ZjBjNmEyNjc4OTUyYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKQEAg
LTMyMiw2ICszMjIsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFdlYkdMRGVidWdTaGFk
ZXJzOwogICAgIGZyaWVuZCBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzsKICAgICBm
cmllbmQgY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2s7Cisg
ICAgZnJpZW5kIGNsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM7CiAKICAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOwogICAgIHZvaWQgaW5pdGlh
bGl6ZU5ld0NvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKaW5kZXggNGFhMDNiOGZlYTE1MTliOTcy
MjM3MDRjYWZiZmE3NjM4MTMyYWYyMi4uOThjMmNkZWU2YjFhZDc1ZWNkYzY1NDdjNjYwNWViODY5
NjA5ZmE0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKQEAgLTcyLDYgKzcyLDc0IEBAIHZvaWQgV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUzo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dDNkLCBQCiAgICAgICAgIGV4dGVuc2lvbnMtPmRlbGV0ZVZlcnRleEFycmF5T0VTKG9i
amVjdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGlmIChtX2JvdW5kRWxlbWVudEFy
cmF5QnVmZmVyKQorICAgICAgICBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5vbkRldGFjaGVk
KGNvbnRleHQzZCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmVydGV4QXR0cmli
U3RhdGUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0g
bV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpXTsKKyAgICAgICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcp
CisgICAgICAgICAgICBzdGF0ZS5idWZmZXJCaW5kaW5nLT5vbkRldGFjaGVkKGNvbnRleHQzZCk7
CisgICAgfQorfQorCit2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OnNldEVsZW1lbnRB
cnJheUJ1ZmZlcihQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBidWZmZXIpCit7CisgICAgaWYgKG1f
Ym91bmRFbGVtZW50QXJyYXlCdWZmZXIpCisgICAgICAgIG1fYm91bmRFbGVtZW50QXJyYXlCdWZm
ZXItPm9uRGV0YWNoZWQoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICBtX2Jv
dW5kRWxlbWVudEFycmF5QnVmZmVyID0gYnVmZmVyOworICAgIGlmIChidWZmZXIpCisgICAgICAg
IGJ1ZmZlci0+b25BdHRhY2hlZCgpOworfQorCit2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVM6OnNldFZlcnRleEF0dHJpYlN0YXRlKAorICAgIEdDM0R1aW50IGluZGV4LCBHQzNEc2l6ZWkg
Ynl0ZXNQZXJFbGVtZW50LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFu
IG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCBQYXNzUmVm
UHRyPFdlYkdMQnVmZmVyPiBidWZmZXIpCit7CisgICAgR0MzRHNpemVpIHZhbGlkYXRlZFN0cmlk
ZSA9IHN0cmlkZSA/IHN0cmlkZSA6IGJ5dGVzUGVyRWxlbWVudDsKKworICAgIFZlcnRleEF0dHJp
YlN0YXRlJiBzdGF0ZSA9IG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdOworCisgICAgaWYgKHN0
YXRlLmJ1ZmZlckJpbmRpbmcpCisgICAgICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmctPm9uRGV0YWNo
ZWQoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICBpZiAoYnVmZmVyKQorICAg
ICAgICBidWZmZXItPm9uQXR0YWNoZWQoKTsKKworICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmcgPSBi
dWZmZXI7CisgICAgc3RhdGUuYnl0ZXNQZXJFbGVtZW50ID0gYnl0ZXNQZXJFbGVtZW50OworICAg
IHN0YXRlLnNpemUgPSBzaXplOworICAgIHN0YXRlLnR5cGUgPSB0eXBlOworICAgIHN0YXRlLm5v
cm1hbGl6ZWQgPSBub3JtYWxpemVkOworICAgIHN0YXRlLnN0cmlkZSA9IHZhbGlkYXRlZFN0cmlk
ZTsKKyAgICBzdGF0ZS5vcmlnaW5hbFN0cmlkZSA9IHN0cmlkZTsKKyAgICBzdGF0ZS5vZmZzZXQg
PSBvZmZzZXQ7Cit9CisKK3ZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6dW5iaW5kQnVm
ZmVyKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IGJ1ZmZlcikKK3sKKyAgICBpZiAobV9ib3VuZEVs
ZW1lbnRBcnJheUJ1ZmZlciA9PSBidWZmZXIpIHsKKyAgICAgICAgbV9ib3VuZEVsZW1lbnRBcnJh
eUJ1ZmZlci0+b25EZXRhY2hlZChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCkpOworICAg
ICAgICBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyID0gMDsKKyAgICB9CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgVmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpXTsKKyAg
ICAgICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcgPT0gYnVmZmVyKSB7CisgICAgICAgICAgICBi
dWZmZXItPm9uRGV0YWNoZWQoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpKTsKKworICAg
ICAgICAgICAgaWYgKCFpICYmICFjb250ZXh0KCktPmlzR0xFUzJDb21wbGlhbnQoKSkgeworICAg
ICAgICAgICAgICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmcgPSBjb250ZXh0KCktPm1fdmVydGV4QXR0
cmliMEJ1ZmZlcjsKKyAgICAgICAgICAgICAgICBzdGF0ZS5idWZmZXJCaW5kaW5nLT5vbkF0dGFj
aGVkKCk7CisgICAgICAgICAgICAgICAgc3RhdGUuYnl0ZXNQZXJFbGVtZW50ID0gMDsKKyAgICAg
ICAgICAgICAgICBzdGF0ZS5zaXplID0gNDsKKyAgICAgICAgICAgICAgICBzdGF0ZS50eXBlID0g
R3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICAgICAgICAgIHN0YXRlLm5vcm1hbGl6
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHJpZGUgPSAxNjsKKyAgICAgICAg
ICAgICAgICBzdGF0ZS5vcmlnaW5hbFN0cmlkZSA9IDA7CisgICAgICAgICAgICAgICAgc3RhdGUu
b2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHN0YXRlLmJ1
ZmZlckJpbmRpbmcgPSAwOworICAgICAgICB9CisgICAgfQogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgKaW5k
ZXggNzVhZTQyZmY3MjVhY2QxZGZlZGJjZTZhMGJjOTJkM2M0MDI4ZjQzNS4uYjY2MGRlNTg4MTMx
MzJkMGNhNTllMjliZjRlZDk0NDU5ZjFjYzkyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaApAQCAtNzYsOSArNzYs
MTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGFzRXZlckJlZW5Cb3VuZCgpIHsgbV9oYXNFdmVy
QmVlbkJvdW5kID0gdHJ1ZTsgfQogICAgIAogICAgIFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IGdl
dEVsZW1lbnRBcnJheUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRFbGVtZW50QXJyYXlC
dWZmZXI7IH0KLSAgICB2b2lkIHNldEVsZW1lbnRBcnJheUJ1ZmZlcihQYXNzUmVmUHRyPFdlYkdM
QnVmZmVyPiBidWZmZXIpIHsgbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlciA9IGJ1ZmZlcjsgfQor
ICAgIHZvaWQgc2V0RWxlbWVudEFycmF5QnVmZmVyKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KTsK
ICAgICAKICAgICBWZXJ0ZXhBdHRyaWJTdGF0ZSYgZ2V0VmVydGV4QXR0cmliU3RhdGUoaW50IGlu
ZGV4KSB7IHJldHVybiBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XTsgfQorICAgIHZvaWQgc2V0
VmVydGV4QXR0cmliU3RhdGUoR0MzRHVpbnQsIEdDM0RzaXplaSwgR0MzRGludCwgR0MzRGVudW0s
IEdDM0Rib29sZWFuLCBHQzNEc2l6ZWksIEdDM0RpbnRwdHIsIFBhc3NSZWZQdHI8V2ViR0xCdWZm
ZXI+KTsKKyAgICB2b2lkIHVuYmluZEJ1ZmZlcihQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPik7CiAK
IHByaXZhdGU6CiAgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqLCBWYW9UeXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL3N1cHBvcnQvRXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAKaW5kZXgg
OTQxMjI3NGM3NjI4MzVjNTlmOWMwMDc1ZTU0NmQyOTczNzcyNWFjZC4uMTdjMzAyMTgzMGEyMGIy
NGE0ZjdjNmVlNTEyMmFiYTFmY2IyMzljYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9FeHRlbnNpb25zM0RDaHJvbWl1
bS5jcHAKQEAgLTk3LDIwICs5NywyMiBAQCB2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjp1bm1h
cFRleFN1YkltYWdlMkRDSFJPTUlVTShjb25zdCB2b2lkKiBkYXRhKQogCiBQbGF0Zm9ybTNET2Jq
ZWN0IEV4dGVuc2lvbnMzRENocm9taXVtOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygpCiB7Ci0gICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5jcmVhdGVWZXJ0
ZXhBcnJheU9FUygpOwogfQogCi12b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpkZWxldGVWZXJ0
ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KQordm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6
ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKIHsKKyAgICBtX3By
aXZhdGUtPndlYkNvbnRleHQoKS0+ZGVsZXRlVmVydGV4QXJyYXlPRVMoYXJyYXkpOwogfQogCi1H
QzNEYm9vbGVhbiBFeHRlbnNpb25zM0RDaHJvbWl1bTo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9y
bTNET2JqZWN0KQorR0MzRGJvb2xlYW4gRXh0ZW5zaW9uczNEQ2hyb21pdW06OmlzVmVydGV4QXJy
YXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKIHsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmlzVmVydGV4QXJyYXlPRVMoYXJyYXkpOwogfQog
Ci12b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0z
RE9iamVjdCkKK3ZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmJpbmRWZXJ0ZXhBcnJheU9FUyhQ
bGF0Zm9ybTNET2JqZWN0IGFycmF5KQogeworICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5i
aW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOwogfQogCiBTdHJpbmcgRXh0ZW5zaW9uczNEQ2hyb21p
dW06OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0IHNoYWRl
cikKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCBkZTViY2VjY2QyMmZmNDZlODc5YzM0M2ZjM2UyNGViZTI5NWEyMDhkLi4yYTcw
Mzc1N2VlOTYxZjI2ZjBmMjFmZWVmYzEwY2NhOThlNzVjM2ExIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTItMDktMTQgIEJyYW5kb24gSm9uZXMgIDxiYWpvbmVzQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgQWRkIHN1cHBvcnQgZm9yIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IGluIGNocm9taXVt
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjU3OAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJyb3VnaHQg
b3ZlciBLSFJPTk9TIGNvbmZvcm1hbmNlIHRlc3QgZm9yIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0
CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0
ZXgtYXJyYXktb2JqZWN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9Ta2lw
cGVkOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay13azIvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93azIvU2tpcHBlZDoKKwogMjAx
Mi0wOS0xNyAgSm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIElu
ZGV4ZWREQjogUmVzdWx0IG9mIElEQkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UoKSBzaG91bGQgYmUg
dW5kZWZpbmVkLCBub3QgbnVsbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvb2VzLXZlcnRleC1hcnJheS1vYmplY3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1vYmplY3QtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjM3YWJhZGQ3ODFiNjRmYmQ2MjE2NGM3MWE3Yjk2MzZiMjA4N2Y2MjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFy
cmF5LW9iamVjdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1MCBAQAorVGhpcyB0ZXN0IHZlcmlm
aWVzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBPRVNfdmVydGV4X2FycmF5X29iamVjdCBleHRl
bnNpb24sIGlmIGl0IGlzIGF2YWlsYWJsZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1MgV2ViR0wgY29udGV4dCBleGlzdHMKK1Rlc3RpbmcgYmluZGluZyBlbnVtIHdpdGgg
ZXh0ZW5zaW9uIGRpc2FibGVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5W
QUxJRF9FTlVNIDogVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTIHNob3VsZCBub3QgYmUgcXVlcnlh
YmxlIGlmIGV4dGVuc2lvbiBpcyBkaXNhYmxlZAorUEFTUyBTdWNjZXNzZnVsbHkgZW5hYmxlZCBP
RVNfdmVydGV4X2FycmF5X29iamVjdCBleHRlbnNpb24KK1BBU1MgT0VTX3ZlcnRleF9hcnJheV9v
YmplY3QgbGlzdGVkIGFzIHN1cHBvcnRlZCBhbmQgZ2V0RXh0ZW5zaW9uIHN1Y2NlZWRlZAorVGVz
dGluZyBiaW5kaW5nIGVudW0gd2l0aCBleHRlbnNpb24gZW5hYmxlZAorUEFTUyBleHQuVkVSVEVY
X0FSUkFZX0JJTkRJTkdfT0VTIGlzIDB4ODVCNQorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTIHF1ZXJ5IHNob3VsZCBz
dWNjZWVkIGlmIGV4dGVuc2lvbiBpcyBlbmFibGUKK1BBU1MgRGVmYXVsdCB2YWx1ZSBvZiBWRVJU
RVhfQVJSQVlfQklORElOR19PRVMgaXMgbnVsbAorVGVzdGluZyBiaW5kaW5nIGEgVkFPCitQQVNT
IGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSBpcyBudWxsCitQ
QVNTIGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSBpcyBleHBl
Y3RlZCBWQU8KK1BBU1MgZ2wuZ2V0UGFyYW1ldGVyKGV4dC5WRVJURVhfQVJSQVlfQklORElOR19P
RVMpIGlzIGV4cGVjdGVkIFZBTworUEFTUyBnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJB
WV9CSU5ESU5HX09FUykgaXMgbnVsbAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IElOVkFMSURfT1BFUkFUSU9OIDogYmluZGluZyBhIGRlbGV0ZWQgdmVydGV4IGFycmF5IG9iamVj
dAorUEFTUyBnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUykgaXMg
bnVsbAorVGVzdGluZyBvYmplY3QgY3JlYXRpb24KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IGNyZWF0ZVZlcnRleEFycmF5T0VTIHNob3VsZCBub3Qgc2V0IGFu
IGVycm9yCitQQVNTIHZhbyBpcyBub24tbnVsbC4KK1BBU1MgZXh0LmlzVmVydGV4QXJyYXlPRVMo
dmFvKSBpcyBmYWxzZQorUEFTUyBleHQuaXNWZXJ0ZXhBcnJheU9FUyh2YW8pIGlzIHRydWUKK1BB
U1MgZXh0LmlzVmVydGV4QXJyYXlPRVModmFvKSBpcyB0cnVlCitQQVNTIGV4dC5pc1ZlcnRleEFy
cmF5T0VTKCkgaXMgZmFsc2UKK1BBU1MgZXh0LmlzVmVydGV4QXJyYXlPRVMobnVsbCkgaXMgZmFs
c2UKK1Rlc3RpbmcgYXR0cmlidXRlcyB3b3JrIGFjcm9zcyBiaW5kaW5ncworUEFTUyBBbGwgYXR0
cmlidXRlcyBwcmVzZXJ2ZWQgYWNyb3NzIGJpbmRpbmdzCitUZXN0aW5nIHRoYXQgYXR0cmlidXRl
IHZhbHVlcyBhcmUgbm90IGF0dGFjaGVkIHRvIGJpbmRpbmdzCitQQVNTIFZlcnRleCBhdHRyaWJ1
dGUgdmFsdWVzIGFyZSBub3QgYXR0YWNoZWQgdG8gYmluZGluZ3MKK1Rlc3RpbmcgZHJhd3Mgd2l0
aCB2YXJpb3VzIFZBTyBiaW5kaW5ncworUEFTUyBEcmF3IDAgcGFzc2VkIHBpeGVsIHRlc3QKK1BB
U1MgRHJhdyAxIHBhc3NlZCBwaXhlbCB0ZXN0CitQQVNTIERyYXcgMiBwYXNzZWQgcGl4ZWwgdGVz
dAorVGVzdGluZyB1c2luZyBkZWxldGVkIGJ1ZmZlcnMgcmVmZXJlbmNlZCBieSBWQU9zCitQQVNT
IHNob3VsZCBiZSAyNTUsMCwwLDI1NQorUEFTUyBzaG91bGQgYmUgMCwyNTUsMCwyNTUKK1BBU1Mg
c2hvdWxkIGJlIDAsMCwyNTUsMjU1CitQQVNTIHNob3VsZCBiZSAwLDI1NSwyNTUsMjU1CitUZXN0
aW5nIHRoYXQgVkFPcyBkb24ndCBlZmZlY3QgQVJSQVlfQlVGRkVSIGJpbmRpbmcuCitQQVNTIHNo
b3VsZCBiZSByZWQKK1BBU1Mgc2hvdWxkIGJlIGdyZWVuCitQQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiB0aGVyZSBzaG91bGQgYmUgbm8gZXJyb3JzCisKK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0ZGMzYjJmZjU1
M2Y1M2IwMzg4ZGQwMjg1YWE3MDJjYjUxZTQwM2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC5odG1sCkBAIC0w
LDAgKzEsNTg2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFy
c2V0PSJ1dGYtOCI+Cis8dGl0bGU+V2ViR0wgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgQ29uZm9y
bWFuY2UgVGVzdHM8L3RpdGxlPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kZXNrdG9wLWdsLWNv
bnN0YW50cy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy93ZWJnbC10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvd2ViZ2wtdGVzdC11dGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxk
aXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgc3R5bGU9Indp
ZHRoOiA1MHB4OyBoZWlnaHQ6IDUwcHg7Ij4gPC9jYW52YXM+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKzxzY3JpcHQgaWQ9InZzaGFkZXIiLCB0eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+Cith
dHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOworYXR0cmlidXRlIHZlYzQgYV9jb2xvcjsKK3Zhcnlp
bmcgdmVjNCB2X2NvbG9yOwordm9pZCBtYWluKHZvaWQpIHsKKyAgICBnbF9Qb3NpdGlvbiA9IGFf
cG9zaXRpb247CisgICAgdl9jb2xvciA9IGFfY29sb3I7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQg
aWQ9ImZzaGFkZXIiLCB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KK3ByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0OwordmFyeWluZyB2ZWM0IHZfY29sb3I7Cit2b2lkIG1haW4odm9pZCkgeworICAg
IGdsX0ZyYWdDb2xvciA9IHZfY29sb3I7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQ+CitkZXNjcmlw
dGlvbigiVGhpcyB0ZXN0IHZlcmlmaWVzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBPRVNfdmVy
dGV4X2FycmF5X29iamVjdCBleHRlbnNpb24sIGlmIGl0IGlzIGF2YWlsYWJsZS4iKTsKKworZGVi
dWcoIiIpOworCit2YXIgd3R1ID0gV2ViR0xUZXN0VXRpbHM7Cit2YXIgY2FudmFzID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwordmFyIGdsID0gY3JlYXRlM0RDb250ZXh0KGNh
bnZhcyk7Cit2YXIgZXh0ID0gbnVsbDsKK3ZhciB2YW8gPSBudWxsOworCitpZiAoIWdsKSB7Cisg
ICAgdGVzdEZhaWxlZCgiV2ViR0wgY29udGV4dCBkb2VzIG5vdCBleGlzdCIpOworfSBlbHNlIHsK
KyAgICB0ZXN0UGFzc2VkKCJXZWJHTCBjb250ZXh0IGV4aXN0cyIpOworCisgICAgLy8gU2V0dXAg
ZW11bGF0ZWQgT0VTVmVydGV4QXJyYXlPYmplY3QgaWYgaXQgaGFzIGJlZW4gaW5jbHVkZWQuCisg
ICAgaWYgKHdpbmRvdy5zZXR1cFZlcnRleEFycmF5T2JqZWN0KSB7CisgICAgICAgIGRlYnVnKCJ1
c2luZyBlbXVhdGVkIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7CisgICAgICAgIHNldHVwVmVy
dGV4QXJyYXlPYmplY3QoZ2wpOworICAgIH0KKworICAgIC8vIFJ1biB0ZXN0cyB3aXRoIGV4dGVu
c2lvbiBkaXNhYmxlZAorICAgIHJ1bkJpbmRpbmdUZXN0RGlzYWJsZWQoKTsKKworICAgIC8vIFF1
ZXJ5IHRoZSBleHRlbnNpb24gYW5kIHN0b3JlIGdsb2JhbGx5IHNvIHNob3VsZEJlIGNhbiBhY2Nl
c3MgaXQKKyAgICBleHQgPSBnbC5nZXRFeHRlbnNpb24oIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0
Iik7CisgICAgaWYgKCFleHQpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiTm8gT0VTX3ZlcnRleF9h
cnJheV9vYmplY3Qgc3VwcG9ydCAtLSB0aGlzIGlzIGxlZ2FsIik7CisKKyAgICAgICAgcnVuU3Vw
cG9ydGVkVGVzdChmYWxzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiU3Vj
Y2Vzc2Z1bGx5IGVuYWJsZWQgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgZXh0ZW5zaW9uIik7CisK
KyAgICAgICAgcnVuU3VwcG9ydGVkVGVzdCh0cnVlKTsKKyAgICAgICAgcnVuQmluZGluZ1Rlc3RF
bmFibGVkKCk7CisgICAgICAgIHJ1bk9iamVjdFRlc3QoKTsKKyAgICAgICAgcnVuQXR0cmlidXRl
VGVzdHMoKTsKKyAgICAgICAgcnVuQXR0cmlidXRlVmFsdWVUZXN0cygpOworICAgICAgICBydW5E
cmF3VGVzdHMoKTsKKyAgICAgICAgcnVuRGVsZXRlVGVzdHMoKTsKKyAgICAgICAgcnVuQXJyYXlC
dWZmZXJCaW5kVGVzdHMoKTsKKyAgICAgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJP
UiwgInRoZXJlIHNob3VsZCBiZSBubyBlcnJvcnMiKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1
blN1cHBvcnRlZFRlc3QoZXh0ZW5zaW9uRW5hYmxlZCkgeworICAgIHZhciBzdXBwb3J0ZWQgPSBn
bC5nZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7CisgICAgaWYgKHN1cHBvcnRlZC5pbmRleE9mKCJP
RVNfdmVydGV4X2FycmF5X29iamVjdCIpID49IDApIHsKKyAgICAgICAgaWYgKGV4dGVuc2lvbkVu
YWJsZWQpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0
IGxpc3RlZCBhcyBzdXBwb3J0ZWQgYW5kIGdldEV4dGVuc2lvbiBzdWNjZWVkZWQiKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIk9FU192ZXJ0ZXhfYXJyYXlfb2Jq
ZWN0IGxpc3RlZCBhcyBzdXBwb3J0ZWQgYnV0IGdldEV4dGVuc2lvbiBmYWlsZWQiKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChleHRlbnNpb25FbmFibGVkKSB7CisgICAg
ICAgICAgICB0ZXN0RmFpbGVkKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgbGlzdGVkIGFz
IHN1cHBvcnRlZCBidXQgZ2V0RXh0ZW5zaW9uIHN1Y2NlZWRlZCIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgdGVzdFBhc3NlZCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3Qgbm90IGxp
c3RlZCBhcyBzdXBwb3J0ZWQgYW5kIGdldEV4dGVuc2lvbiBmYWlsZWQgLS0gdGhpcyBpcyBsZWdh
bCIpOworICAgICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBydW5CaW5kaW5nVGVzdERpc2Fi
bGVkKCkgeworICAgIGRlYnVnKCJUZXN0aW5nIGJpbmRpbmcgZW51bSB3aXRoIGV4dGVuc2lvbiBk
aXNhYmxlZCIpOworICAgIAorICAgIC8vIFVzZSB0aGUgY29uc3RhbnQgZGlyZWN0bHkgYXMgd2Ug
ZG9uJ3QgaGF2ZSB0aGUgZXh0ZW5zaW9uCisgICAgdmFyIFZFUlRFWF9BUlJBWV9CSU5ESU5HX09F
UyA9IDB4ODVCNTsKKyAgICAKKyAgICBnbC5nZXRQYXJhbWV0ZXIoVkVSVEVYX0FSUkFZX0JJTkRJ
TkdfT0VTKTsKKyAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLklOVkFMSURfRU5VTSwgIlZFUlRF
WF9BUlJBWV9CSU5ESU5HX09FUyBzaG91bGQgbm90IGJlIHF1ZXJ5YWJsZSBpZiBleHRlbnNpb24g
aXMgZGlzYWJsZWQiKTsKK30KKworZnVuY3Rpb24gcnVuQmluZGluZ1Rlc3RFbmFibGVkKCkgewor
ICAgIGRlYnVnKCJUZXN0aW5nIGJpbmRpbmcgZW51bSB3aXRoIGV4dGVuc2lvbiBlbmFibGVkIik7
CisgICAgCisgICAgc2hvdWxkQmUoImV4dC5WRVJURVhfQVJSQVlfQklORElOR19PRVMiLCAiMHg4
NUI1Iik7CisgICAgCisgICAgZ2wuZ2V0UGFyYW1ldGVyKGV4dC5WRVJURVhfQVJSQVlfQklORElO
R19PRVMpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJWRVJURVhfQVJS
QVlfQklORElOR19PRVMgcXVlcnkgc2hvdWxkIHN1Y2NlZWQgaWYgZXh0ZW5zaW9uIGlzIGVuYWJs
ZSIpOworICAgIAorICAgIC8vIERlZmF1bHQgdmFsdWUgaXMgbnVsbAorICAgIGlmIChnbC5nZXRQ
YXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUykgPT09IG51bGwpIHsKKyAgICAg
ICAgdGVzdFBhc3NlZCgiRGVmYXVsdCB2YWx1ZSBvZiBWRVJURVhfQVJSQVlfQklORElOR19PRVMg
aXMgbnVsbCIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoIkRlZmF1bHQgdmFs
dWUgb2YgVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTIGlzIG5vdCBudWxsIik7CisgICAgfQorICAg
IAorICAgIGRlYnVnKCJUZXN0aW5nIGJpbmRpbmcgYSBWQU8iKTsKKyAgICB2YXIgdmFvMCA9IGV4
dC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOworICAgIHZhciB2YW8xID0gZXh0LmNyZWF0ZVZlcnRl
eEFycmF5T0VTKCk7CisgICAgc2hvdWxkQmVOdWxsKCJnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRF
WF9BUlJBWV9CSU5ESU5HX09FUykiKTsKKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKHZhbzAp
OworICAgIGlmIChnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUykg
PT0gdmFvMCkgeworICAgICAgICB0ZXN0UGFzc2VkKCJnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRF
WF9BUlJBWV9CSU5ESU5HX09FUykgaXMgZXhwZWN0ZWQgVkFPIik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgdGVzdEZhaWxlZCgiZ2wuZ2V0UGFyYW1ldGVyKGV4dC5WRVJURVhfQVJSQVlfQklORElO
R19PRVMpIGlzIG5vdCBleHBlY3RlZCBWQU8iKQorICAgIH0KKyAgICBleHQuYmluZFZlcnRleEFy
cmF5T0VTKHZhbzEpOworICAgIGlmIChnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJBWV9C
SU5ESU5HX09FUykgPT0gdmFvMSkgeworICAgICAgICB0ZXN0UGFzc2VkKCJnbC5nZXRQYXJhbWV0
ZXIoZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUykgaXMgZXhwZWN0ZWQgVkFPIik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiZ2wuZ2V0UGFyYW1ldGVyKGV4dC5WRVJURVhf
QVJSQVlfQklORElOR19PRVMpIGlzIG5vdCBleHBlY3RlZCBWQU8iKQorICAgIH0KKyAgICBleHQu
ZGVsZXRlVmVydGV4QXJyYXlPRVModmFvMSk7CisgICAgc2hvdWxkQmVOdWxsKCJnbC5nZXRQYXJh
bWV0ZXIoZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUykiKTsKKyAgICBleHQuYmluZFZlcnRl
eEFycmF5T0VTKHZhbzEpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuSU5WQUxJRF9PUEVS
QVRJT04sICJiaW5kaW5nIGEgZGVsZXRlZCB2ZXJ0ZXggYXJyYXkgb2JqZWN0Iik7CisgICAgZXh0
LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTsKKyAgICBzaG91bGRCZU51bGwoImdsLmdldFBhcmFt
ZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSIpOworICAgIGV4dC5kZWxldGVWZXJ0
ZXhBcnJheU9FUyh2YW8xKTsKK30KKworZnVuY3Rpb24gcnVuT2JqZWN0VGVzdCgpIHsKKyAgICBk
ZWJ1ZygiVGVzdGluZyBvYmplY3QgY3JlYXRpb24iKTsKKyAgICAKKyAgICB2YW8gPSBleHQuY3Jl
YXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9S
LCAiY3JlYXRlVmVydGV4QXJyYXlPRVMgc2hvdWxkIG5vdCBzZXQgYW4gZXJyb3IiKTsKKyAgICBz
aG91bGRCZU5vbk51bGwoInZhbyIpOworICAgIAorICAgIC8vIEV4cGVjdCBmYWxzZSBpZiBuZXZl
ciBib3VuZAorICAgIHNob3VsZEJlRmFsc2UoImV4dC5pc1ZlcnRleEFycmF5T0VTKHZhbykiKTsK
KyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKHZhbyk7CisgICAgc2hvdWxkQmVUcnVlKCJleHQu
aXNWZXJ0ZXhBcnJheU9FUyh2YW8pIik7CisgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxs
KTsKKyAgICBzaG91bGRCZVRydWUoImV4dC5pc1ZlcnRleEFycmF5T0VTKHZhbykiKTsKKyAgICAK
KyAgICBzaG91bGRCZUZhbHNlKCJleHQuaXNWZXJ0ZXhBcnJheU9FUygpIik7CisgICAgc2hvdWxk
QmVGYWxzZSgiZXh0LmlzVmVydGV4QXJyYXlPRVMobnVsbCkiKTsKKyAgICAKKyAgICBleHQuZGVs
ZXRlVmVydGV4QXJyYXlPRVModmFvKTsKKyAgICB2YW8gPSBudWxsOworfQorCitmdW5jdGlvbiBy
dW5BdHRyaWJ1dGVUZXN0cygpIHsKKyAgICBkZWJ1ZygiVGVzdGluZyBhdHRyaWJ1dGVzIHdvcmsg
YWNyb3NzIGJpbmRpbmdzIik7CisgICAgCisgICAgdmFyIHN0YXRlcyA9IFtdOworICAgIAorICAg
IHZhciBhdHRyQ291bnQgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuTUFYX1ZFUlRFWF9BVFRSSUJTKTsK
KyAgICBmb3IgKHZhciBuID0gMDsgbiA8IGF0dHJDb3VudDsgbisrKSB7CisgICAgICAgIGdsLmJp
bmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBudWxsKTsKKyAgICAgICAgZ2wuYmluZEJ1ZmZlcihn
bC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbnVsbCk7CisgICAgICAgIAorICAgICAgICB2YXIgc3Rh
dGUgPSB7fTsKKyAgICAgICAgc3RhdGVzLnB1c2goc3RhdGUpOworICAgICAgICAKKyAgICAgICAg
dmFyIHZhbyA9IHN0YXRlLnZhbyA9IGV4dC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOworICAgICAg
ICBleHQuYmluZFZlcnRleEFycmF5T0VTKHZhbyk7CisgICAgICAgIAorICAgICAgICBpZiAobiAl
IDIgPT0gMCkgeworICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobik7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
bik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChuICUgMiA9PSAwKSB7CisgICAg
ICAgICAgICB2YXIgYnVmZmVyID0gc3RhdGUuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7Cisg
ICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgYnVmZmVyKTsKKyAgICAg
ICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAxMDI0LCBnbC5TVEFUSUNfRFJB
Vyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIobiwg
MSArIG4gJSA0LCBnbC5GTE9BVCwgdHJ1ZSwgbiAqIDQsIG4gKiA0KTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKG4gJSAyID09IDApIHsKKyAgICAgICAgICAgIHZhciBlbGJ1ZmZl
ciA9IHN0YXRlLmVsYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgICAgICAgICBnbC5i
aW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBlbGJ1ZmZlcik7CisgICAgICAgICAg
ICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCAxMDI0LCBnbC5TVEFUSUNf
RFJBVyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGV4dC5iaW5kVmVydGV4QXJyYXlP
RVMobnVsbCk7CisgICAgfQorICAgIAorICAgIHZhciBhbnlNaXNtYXRjaCA9IGZhbHNlOworICAg
IGZvciAodmFyIG4gPSAwOyBuIDwgYXR0ckNvdW50OyBuKyspIHsKKyAgICAgICAgdmFyIHN0YXRl
ID0gc3RhdGVzW25dOworICAgICAgICAKKyAgICAgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhz
dGF0ZS52YW8pOworICAgICAgICAKKyAgICAgICAgdmFyIGlzRW5hYmxlZCA9IGdsLmdldFZlcnRl
eEF0dHJpYihuLCBnbC5WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQpOworICAgICAgICBpZiAo
KG4gJSAyID09IDEpIHx8IGlzRW5hYmxlZCkgeworICAgICAgICAgICAgLy8gVmFsaWQKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIlZFUlRFWF9BVFRSSUJfQVJSQVlf
RU5BQkxFRCBub3QgcHJlc2VydmVkIik7CisgICAgICAgICAgICBhbnlNaXNtYXRjaCA9IHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZhciBidWZmZXIgPSBnbC5nZXRWZXJ0ZXhB
dHRyaWIobiwgZ2wuVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORyk7CisgICAgICAg
IGlmIChuICUgMiA9PSAwKSB7CisgICAgICAgICAgICBpZiAoYnVmZmVyID09IHN0YXRlLmJ1ZmZl
cikgeworICAgICAgICAgICAgICAgIC8vIE1hdGNoZWQKKyAgICAgICAgICAgICAgICBpZiAoKGds
LmdldFZlcnRleEF0dHJpYihuLCBnbC5WRVJURVhfQVRUUklCX0FSUkFZX1NJWkUpID09IDEgKyBu
ICUgNCkgJiYKKyAgICAgICAgICAgICAgICAgICAgKGdsLmdldFZlcnRleEF0dHJpYihuLCBnbC5W
RVJURVhfQVRUUklCX0FSUkFZX1RZUEUpID09IGdsLkZMT0FUKSAmJgorICAgICAgICAgICAgICAg
ICAgICAoZ2wuZ2V0VmVydGV4QXR0cmliKG4sIGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFM
SVpFRCkgPT0gdHJ1ZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgKGdsLmdldFZlcnRleEF0dHJp
YihuLCBnbC5WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERSkgPT0gbiAqIDQpICYmCisgICAgICAg
ICAgICAgICAgICAgIChnbC5nZXRWZXJ0ZXhBdHRyaWJPZmZzZXQobiwgZ2wuVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9QT0lOVEVSKSA9PSBuICogNCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTWF0
Y2hlZAorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRlc3RG
YWlsZWQoIlZFUlRFWF9BVFRSSUJfQVJSQVlfKiBub3QgcHJlc2VydmVkIik7CisgICAgICAgICAg
ICAgICAgICAgIGFueU1pc21hdGNoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIlZFUlRFWF9BVFRSSUJf
QVJSQVlfQlVGRkVSX0JJTkRJTkcgbm90IHByZXNlcnZlZCIpOworICAgICAgICAgICAgICAgIGFu
eU1pc21hdGNoID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQiBpcyBub3QgcHJlc2VydmVkCisgICAg
ICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiVkVSVEVY
X0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORyBub3QgcHJlc2VydmVkIik7CisgICAgICAgICAg
ICAgICAgYW55TWlzbWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB2YXIgZWxidWZmZXIgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuRUxFTUVOVF9B
UlJBWV9CVUZGRVJfQklORElORyk7CisgICAgICAgIGlmIChuICUgMiA9PSAwKSB7CisgICAgICAg
ICAgICBpZiAoZWxidWZmZXIgPT0gc3RhdGUuZWxidWZmZXIpIHsKKyAgICAgICAgICAgICAgICAv
LyBNYXRjaGVkCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRlc3RGYWls
ZWQoIkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgbm90IHByZXNlcnZlZCIpOworICAgICAg
ICAgICAgICAgIGFueU1pc21hdGNoID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChlbGJ1ZmZlciA9PSBudWxsKSB7CisgICAgICAgICAgICAg
ICAgLy8gTWF0Y2hlZAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0ZXN0
RmFpbGVkKCJFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HIG5vdCBwcmVzZXJ2ZWQiKTsKKyAg
ICAgICAgICAgICAgICBhbnlNaXNtYXRjaCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTsKKyAgICBpZiAoIWFu
eU1pc21hdGNoKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkFsbCBhdHRyaWJ1dGVzIHByZXNlcnZl
ZCBhY3Jvc3MgYmluZGluZ3MiKTsKKyAgICB9CisgICAgCisgICAgZm9yICh2YXIgbiA9IDA7IG4g
PCBhdHRyQ291bnQ7IG4rKykgeworICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZXNbbl07CisgICAg
ICAgIGV4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyhzdGF0ZS52YW8pOworICAgIH0KK30KKworZnVu
Y3Rpb24gcnVuQXR0cmlidXRlVmFsdWVUZXN0cygpIHsKKyAgICBkZWJ1ZygiVGVzdGluZyB0aGF0
IGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIG5vdCBhdHRhY2hlZCB0byBiaW5kaW5ncyIpOworICAgIAor
ICAgIHZhciB2OworICAgIHZhciB2YW8wID0gZXh0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7Cisg
ICAgdmFyIGFueUZhaWxlZCA9IGZhbHNlOworICAgIAorICAgIGV4dC5iaW5kVmVydGV4QXJyYXlP
RVMobnVsbCk7CisgICAgZ2wudmVydGV4QXR0cmliNGYoMCwgMCwgMSwgMiwgMyk7CisgICAgCisg
ICAgdiA9IGdsLmdldFZlcnRleEF0dHJpYigwLCBnbC5DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpOwor
ICAgIGlmICghKHZbMF0gPT0gMCAmJiB2WzFdID09IDEgJiYgdlsyXSA9PSAyICYmIHZbM10gPT0g
MykpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiVmVydGV4IGF0dHJpYiB2YWx1ZSBub3Qgcm91bmQt
dHJpcHBlZD8iKTsKKyAgICAgICAgYW55RmFpbGVkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
ZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW8wKTsKKyAgICAKKyAgICB2ID0gZ2wuZ2V0VmVydGV4
QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJQik7CisgICAgaWYgKCEodlswXSA9PSAw
ICYmIHZbMV0gPT0gMSAmJiB2WzJdID09IDIgJiYgdlszXSA9PSAzKSkgeworICAgICAgICB0ZXN0
RmFpbGVkKCJWZXJ0ZXggYXR0cmliIHZhbHVlIHJlc2V0IGFjcm9zcyBiaW5kaW5ncyIpOworICAg
ICAgICBhbnlGYWlsZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBnbC52ZXJ0ZXhBdHRyaWI0
ZigwLCA0LCA1LCA2LCA3KTsKKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOworICAg
IAorICAgIHYgPSBnbC5nZXRWZXJ0ZXhBdHRyaWIoMCwgZ2wuQ1VSUkVOVF9WRVJURVhfQVRUUklC
KTsKKyAgICBpZiAoISh2WzBdID09IDQgJiYgdlsxXSA9PSA1ICYmIHZbMl0gPT0gNiAmJiB2WzNd
ID09IDcpKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIlZlcnRleCBhdHRyaWIgdmFsdWUgYm91bmQg
dG8gYnVmZmVyIik7CisgICAgICAgIGFueUZhaWxlZCA9IHRydWU7CisgICAgfQorICAgIAorICAg
IGlmICghYW55RmFpbGVkKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIlZlcnRleCBhdHRyaWJ1dGUg
dmFsdWVzIGFyZSBub3QgYXR0YWNoZWQgdG8gYmluZGluZ3MiKQorICAgIH0KKyAgICAKKyAgICBl
eHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOworICAgIGV4dC5kZWxldGVWZXJ0ZXhBcnJheU9F
Uyh2YW8wKTsKK30KKworZnVuY3Rpb24gcnVuRHJhd1Rlc3RzKCkgeworICAgIGRlYnVnKCJUZXN0
aW5nIGRyYXdzIHdpdGggdmFyaW91cyBWQU8gYmluZGluZ3MiKTsKKyAgICAKKyAgICBjYW52YXMu
d2lkdGggPSA1MDsgY2FudmFzLmhlaWdodCA9IDUwOworICAgIGdsLnZpZXdwb3J0KDAsIDAsIGNh
bnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7CisgICAgCisgICAgdmFyIHZhbzAgPSBleHQuY3Jl
YXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICB2YXIgdmFvMSA9IGV4dC5jcmVhdGVWZXJ0ZXhBcnJh
eU9FUygpOworICAgIAorICAgIHZhciBwcm9ncmFtID0gd3R1LnNldHVwU2ltcGxlVGV4dHVyZVBy
b2dyYW0oZ2wsIDAsIDEpOworICAgIAorICAgIGZ1bmN0aW9uIHNldHVwUXVhZChzKSB7CisgICAg
ICAgIHZhciBvcHRfcG9zaXRpb25Mb2NhdGlvbiA9IDA7CisgICAgICAgIHZhciBvcHRfdGV4Y29v
cmRMb2NhdGlvbiA9IDE7CisgICAgICAgIHZhciB2ZXJ0ZXhPYmplY3QgPSBnbC5jcmVhdGVCdWZm
ZXIoKTsKKyAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZlcnRleE9iamVj
dCk7CisgICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFy
cmF5KFsKKyAgICAgICAgICAgICAxLjAgKiBzLCAgMS4wICogcywgMC4wLAorICAgICAgICAgICAg
LTEuMCAqIHMsICAxLjAgKiBzLCAwLjAsCisgICAgICAgICAgICAtMS4wICogcywgLTEuMCAqIHMs
IDAuMCwKKyAgICAgICAgICAgICAxLjAgKiBzLCAgMS4wICogcywgMC4wLAorICAgICAgICAgICAg
LTEuMCAqIHMsIC0xLjAgKiBzLCAwLjAsCisgICAgICAgICAgICAgMS4wICogcywgLTEuMCAqIHMs
IDAuMF0pLCBnbC5TVEFUSUNfRFJBVyk7CisgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KG9wdF9wb3NpdGlvbkxvY2F0aW9uKTsKKyAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRl
cihvcHRfcG9zaXRpb25Mb2NhdGlvbiwgMywgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKworICAg
ICAgICB2YXIgdmVydGV4T2JqZWN0ID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgICAgIGdsLmJp
bmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2ZXJ0ZXhPYmplY3QpOworICAgICAgICBnbC5idWZm
ZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheShbCisgICAgICAgICAgICAx
LjAgKiBzLCAxLjAgKiBzLAorICAgICAgICAgICAgMC4wICogcywgMS4wICogcywKKyAgICAgICAg
ICAgIDAuMCAqIHMsIDAuMCAqIHMsCisgICAgICAgICAgICAxLjAgKiBzLCAxLjAgKiBzLAorICAg
ICAgICAgICAgMC4wICogcywgMC4wICogcywKKyAgICAgICAgICAgIDEuMCAqIHMsIDAuMCAqIHNd
KSwgZ2wuU1RBVElDX0RSQVcpOworICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShv
cHRfdGV4Y29vcmRMb2NhdGlvbik7CisgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIob3B0
X3RleGNvb3JkTG9jYXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgfTsKKyAg
ICAKKyAgICBmdW5jdGlvbiByZWFkTG9jYXRpb24oeCwgeSkgeworICAgICAgICB2YXIgcGl4ZWxz
ID0gbmV3IFVpbnQ4QXJyYXkoMSAqIDEgKiA0KTsKKyAgICAgICAgZ2wucmVhZFBpeGVscyh4LCB5
LCAxLCAxLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBwaXhlbHMpOworICAgICAgICByZXR1
cm4gcGl4ZWxzOworICAgIH07CisgICAgZnVuY3Rpb24gdGVzdFBpeGVsKGJsYWNrTGlzdCwgd2hp
dGVMaXN0KSB7CisgICAgICAgIGZ1bmN0aW9uIHRlc3RMaXN0KGxpc3QsIGV4cGVjdGVkKSB7Cisg
ICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGxpc3QubGVuZ3RoOyBuKyspIHsKKyAgICAg
ICAgICAgICAgICB2YXIgbCA9IGxpc3Rbbl07CisgICAgICAgICAgICAgICAgdmFyIHggPSAtTWF0
aC5mbG9vcihsICogY2FudmFzLndpZHRoIC8gMikgKyBjYW52YXMud2lkdGggLyAyOworICAgICAg
ICAgICAgICAgIHZhciB5ID0gLU1hdGguZmxvb3IobCAqIGNhbnZhcy5oZWlnaHQgLyAyKSArIGNh
bnZhcy5oZWlnaHQgLyAyOworICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSByZWFkTG9jYXRp
b24oeCwgeSk7CisgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKHNvdXJjZVswXSAtIGV4cGVj
dGVkKSA+IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0ZXN0TGlzdChibGFja0xpc3QsIDApICYmIHRlc3RMaXN0KHdo
aXRlTGlzdCwgMjU1KTsKKyAgICB9OworICAgIGZ1bmN0aW9uIHZlcmlmeURyYXcoZHJhd051bWJl
ciwgcykgeworICAgICAgICB3dHUuZHJhd1F1YWQoZ2wpOworICAgICAgICB2YXIgYmxhY2tMaXN0
ID0gW107CisgICAgICAgIHZhciB3aGl0ZUxpc3QgPSBbXTsKKyAgICAgICAgdmFyIHBvaW50cyA9
IFswLjAsIDAuMiwgMC40LCAwLjYsIDAuOCwgMS4wXTsKKyAgICAgICAgZm9yICh2YXIgbiA9IDA7
IG4gPCBwb2ludHMubGVuZ3RoOyBuKyspIHsKKyAgICAgICAgICAgIGlmIChwb2ludHNbbl0gPD0g
cykgeworICAgICAgICAgICAgICAgIGJsYWNrTGlzdC5wdXNoKHBvaW50c1tuXSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdoaXRlTGlzdC5wdXNoKHBvaW50c1tuXSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRlc3RQaXhlbChibGFja0xp
c3QsIHdoaXRlTGlzdCkpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIkRyYXcgIiArIGRyYXdO
dW1iZXIgKyAiIHBhc3NlZCBwaXhlbCB0ZXN0Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB0ZXN0RmFpbGVkKCJEcmF3ICIgKyBkcmF3TnVtYmVyICsgIiBmYWlsZWQgcGl4ZWwgdGVz
dCIpOworICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICAvLyBTZXR1cCBhbGwgYmluZGluZ3MK
KyAgICBzZXR1cFF1YWQoMSk7CisgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW8wKTsKKyAg
ICBzZXR1cFF1YWQoMC41KTsKKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKHZhbzEpOworICAg
IHNldHVwUXVhZCgwLjI1KTsKKyAgICAKKyAgICAvLyBWZXJpZnkgZHJhd2luZworICAgIGV4dC5i
aW5kVmVydGV4QXJyYXlPRVMobnVsbCk7CisgICAgdmVyaWZ5RHJhdygwLCAxKTsKKyAgICBleHQu
YmluZFZlcnRleEFycmF5T0VTKHZhbzApOworICAgIHZlcmlmeURyYXcoMSwgMC41KTsKKyAgICBl
eHQuYmluZFZlcnRleEFycmF5T0VTKHZhbzEpOworICAgIHZlcmlmeURyYXcoMiwgMC4yNSk7Cisg
ICAgCisgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTsKKyAgICBleHQuZGVsZXRlVmVy
dGV4QXJyYXlPRVModmFvMCk7CisgICAgZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHZhbzEpOwor
fQorCitmdW5jdGlvbiBydW5EZWxldGVUZXN0cygpIHsKKyAgICBkZWJ1ZygiVGVzdGluZyB1c2lu
ZyBkZWxldGVkIGJ1ZmZlcnMgcmVmZXJlbmNlZCBieSBWQU9zIik7CisKKyAgICB2YXIgcHJvZ3Jh
bSA9IHd0dS5zZXR1cFByb2dyYW0oZ2wsIFsidnNoYWRlciIsICJmc2hhZGVyIl0sIFsiYV9wb3Np
dGlvbiIsICJhX2NvbG9yIl0pOworICAgIGdsLnVzZVByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICB2
YXIgcG9zaXRpb25CdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICBnbC5iaW5kQnVmZmVy
KGdsLkFSUkFZX0JVRkZFUiwgcG9zaXRpb25CdWZmZXIpOworICAgIGdsLmJ1ZmZlckRhdGEoCisg
ICAgICAgIGdsLkFSUkFZX0JVRkZFUiwKKyAgICAgICAgbmV3IEZsb2F0MzJBcnJheShbCisgICAg
ICAgICAgIDEuMCwgIDEuMCwKKyAgICAgICAgICAtMS4wLCAgMS4wLAorICAgICAgICAgIC0xLjAs
IC0xLjAsCisgICAgICAgICAgIDEuMCwgLTEuMF0pLAorICAgICAgICBnbC5TVEFUSUNfRFJBVyk7
CisKKyAgICB2YXIgY29sb3JzID0gWworICAgICAgWzI1NSwgICAwLCAgIDAsIDI1NV0sCisgICAg
ICBbICAwLCAyNTUsICAgMCwgMjU1XSwKKyAgICAgIFsgIDAsICAgMCwgMjU1LCAyNTVdLAorICAg
ICAgWyAgMCwgMjU1LCAyNTUsIDI1NV0KKyAgICBdOworICAgIHZhciBjb2xvckJ1ZmZlcnMgPSBb
XTsKKyAgICB2YXIgZWxlbWVudEJ1ZmZlcnMgPSBbXTsKKyAgICB2YXIgdmFvcyA9IFtdOworICAg
IGZvciAodmFyIGlpID0gMDsgaWkgPCBjb2xvcnMubGVuZ3RoOyArK2lpKSB7CisgICAgICB2YXIg
dmFvID0gZXh0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7CisgICAgICB2YW9zLnB1c2godmFvKTsK
KyAgICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvKTsKKyAgICAgIC8vIFNldCB0aGUgcG9z
aXRpb24gYnVmZmVyCisgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgcG9zaXRp
b25CdWZmZXIpOworICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7CisgICAgICBn
bC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisKKyAg
ICAgIHZhciBlbGVtZW50QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgICBlbGVtZW50
QnVmZmVycy5wdXNoKGVsZW1lbnRCdWZmZXIpOworICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVN
RU5UX0FSUkFZX0JVRkZFUiwgZWxlbWVudEJ1ZmZlcik7CisgICAgICBnbC5idWZmZXJEYXRhKAor
ICAgICAgICAgIGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLAorICAgICAgICAgIG5ldyBVaW50OEFy
cmF5KFswLCAxLCAyLCAwLCAyLCAzXSksCisgICAgICAgICAgZ2wuU1RBVElDX0RSQVcpOworCisg
ICAgICAvLyBTZXR1cCB0aGUgY29sb3IgYXR0cmliCisgICAgICB2YXIgY29sb3IgPSBjb2xvcnNb
aWldOworICAgICAgaWYgKGlpIDwgMykgeworICAgICAgICB2YXIgY29sb3JCdWZmZXIgPSBnbC5j
cmVhdGVCdWZmZXIoKTsKKyAgICAgICAgY29sb3JCdWZmZXJzLnB1c2goY29sb3JCdWZmZXIpOwor
ICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgY29sb3JCdWZmZXIpOworICAg
ICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbmV3IFVpbnQ4QXJyYXkoCisgICAg
ICAgICAgWyBjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBjb2xvclszXSwKKyAgICAgICAg
ICAgIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIGNvbG9yWzNdLAorICAgICAgICAgICAg
Y29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgY29sb3JbM10sCisgICAgICAgICAgICBjb2xv
clswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBjb2xvclszXQorICAgICAgICAgIF0pLCBnbC5TVEFU
SUNfRFJBVyk7CisgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDEpOworICAgICAg
ICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEsIDQsIGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIDAs
IDApOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZ2wudmVydGV4QXR0cmliNGYoMSwgY29sb3Jb
MF0gLyAyNTUsIGNvbG9yWzFdIC8gMjU1LCBjb2xvclsyXSAvIDI1NSwgY29sb3JbM10gLyAyNTUp
OworICAgICAgfQorICAgIH0KKworICAgIC8vIGRlbGV0ZSB0aGUgY29sb3IgYnVmZmVycyBBTkQg
dGhlIHBvc2l0aW9uIGJ1ZmZlci4KKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOwor
ICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBjb2xvckJ1ZmZlcnMubGVuZ3RoOyArK2lpKSB7Cisg
ICAgICBnbC5kZWxldGVCdWZmZXIoY29sb3JCdWZmZXJzW2lpXSk7CisgICAgICBnbC5kZWxldGVC
dWZmZXIoZWxlbWVudEJ1ZmZlcnNbaWldKTsKKyAgICB9CisgICAgZ2wuZGVsZXRlQnVmZmVyKHBv
c2l0aW9uQnVmZmVyKTsKKworICAgIC8vIFJlbmRlciB3aXRoIHRoZSBkZWxldGVkIGJ1ZmZlcnMu
IEFzIHRoZXkgYXJlIHJlZmVyZW5jZWQgYnkgVkFPcyB0aGV5CisgICAgLy8gbXVzdCBzdGlsbCBi
ZSBhcm91bmQuCisgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGNvbG9ycy5sZW5ndGg7ICsraWkp
IHsKKyAgICAgIHZhciBjb2xvciA9IGNvbG9yc1tpaV07CisgICAgICBleHQuYmluZFZlcnRleEFy
cmF5T0VTKHZhb3NbaWldKTsKKyAgICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYs
IGdsLlVOU0lHTkVEX0JZVEUsIDApOworICAgICAgd3R1LmNoZWNrQ2FudmFzKGdsLCBjb2xvciwg
InNob3VsZCBiZSAiICsgY29sb3IpOworICAgIH0KKworICAgIC8vIENsZWFuIHVwLgorICAgIGZv
ciAodmFyIGlpID0gMDsgaWkgPCBjb2xvckJ1ZmZlcnMubGVuZ3RoOyArK2lpKSB7CisgICAgICBl
eHQuZGVsZXRlVmVydGV4QXJyYXlPRVModmFvc1tpaV0pOworICAgIH0KK30KKworZnVuY3Rpb24g
cnVuQXJyYXlCdWZmZXJCaW5kVGVzdHMoKSB7CisgICAgZGVidWcoIlRlc3RpbmcgdGhhdCBWQU9z
IGRvbid0IGVmZmVjdCBBUlJBWV9CVUZGRVIgYmluZGluZy4iKTsKKworICAgIGV4dC5iaW5kVmVy
dGV4QXJyYXlPRVMobnVsbCk7CisKKyAgICB2YXIgcHJvZ3JhbSA9IHd0dS5zZXR1cFByb2dyYW0o
Z2wsIFsidnNoYWRlciIsICJmc2hhZGVyIl0sIFsiYV9jb2xvciIsICJhX3Bvc2l0aW9uIl0pOwor
ICAgIGdsLnVzZVByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAvLyBjcmVhdGUgc2hhcmVkIGVsZW1l
bnQgYnV1ZmZlcgorICAgIHZhciBlbGVtZW50QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7Cisg
ICAgLy8gYmluZCB0byBkZWZhdWx0CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZ
X0JVRkZFUiwgZWxlbWVudEJ1ZmZlcik7CisgICAgZ2wuYnVmZmVyRGF0YSgKKyAgICAgICAgZ2wu
RUxFTUVOVF9BUlJBWV9CVUZGRVIsCisgICAgICAgIG5ldyBVaW50OEFycmF5KFswLCAxLCAyLCAw
LCAyLCAzXSksCisgICAgICAgIGdsLlNUQVRJQ19EUkFXKTsKKworICAgIC8vIGZpcnN0IGNyZWF0
ZSB0aGUgYnVmZmVycyBmb3Igbm8gdmFvIGRyYXcuCisgICAgdmFyIG5vblZBT0NvbG9yQnVmZmVy
ID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIs
IG5vblZBT0NvbG9yQnVmZmVyKTsKKyAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwg
bmV3IFVpbnQ4QXJyYXkoCisgICAgICBbIDAsIDI1NSwgMCwgMjU1LAorICAgICAgICAwLCAyNTUs
IDAsIDI1NSwKKyAgICAgICAgMCwgMjU1LCAwLCAyNTUsCisgICAgICAgIDAsIDI1NSwgMCwgMjU1
LAorICAgICAgXSksIGdsLlNUQVRJQ19EUkFXKTsKKworICAgIC8vIHNoYXJlZCBwb3NpdGlvbiBi
dWZmZXIuCisgICAgdmFyIHBvc2l0aW9uQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAg
Z2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHBvc2l0aW9uQnVmZmVyKTsKKyAgICBnbC5i
dWZmZXJEYXRhKAorICAgICAgICBnbC5BUlJBWV9CVUZGRVIsCisgICAgICAgIG5ldyBGbG9hdDMy
QXJyYXkoWworICAgICAgICAgICAxLjAsICAxLjAsCisgICAgICAgICAgLTEuMCwgIDEuMCwKKyAg
ICAgICAgICAtMS4wLCAtMS4wLAorICAgICAgICAgICAxLjAsIC0xLjBdKSwKKyAgICAgICAgZ2wu
U1RBVElDX0RSQVcpOworCisgICAgLy8gYXR0YWNoIHBvc2l0aW9uIGJ1ZmZlciB0byBkZWZhdWx0
CisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMSk7CisgICAgZ2wudmVydGV4QXR0cmli
UG9pbnRlcigxLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworCisgICAgLy8gbm93IGNyZWF0
ZSB2YW8KKyAgICB2YXIgdmFvID0gZXh0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7CisgICAgZXh0
LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW8pOworCisgICAgLy8gYXR0YWNoIHRoZSBwb3NpdGlvbiBi
dWZmZXIgdmFvCisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMSk7CisgICAgZ2wudmVy
dGV4QXR0cmliUG9pbnRlcigxLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworCisgICAgdmFy
IHZhb0NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuZW5hYmxlVmVydGV4
QXR0cmliQXJyYXkoMCk7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBnbC5VTlNJ
R05FRF9CWVRFLCB0cnVlLCAwLCAwKTsKKyAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZF
UiwgdmFvQ29sb3JCdWZmZXIpOworICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBu
ZXcgVWludDhBcnJheSgKKyAgICAgIFsgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwg
MCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUs
CisgICAgICBdKSwgZ2wuU1RBVElDX0RSQVcpOworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KDApOworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgNCwgZ2wuVU5TSUdORURfQllU
RSwgdHJ1ZSwgMCwgMCk7CisKKyAgICAvLyBub3cgc2V0IHRoZSBidWZmZXIgYmFjayB0byB0aGUg
bm9uVkFPQ29sb3JCdWZmZXIKKyAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgbm9u
VkFPQ29sb3JCdWZmZXIpOworCisgICAgLy8gYmluZCB0byB2YW8KKyAgICBnbC5iaW5kQnVmZmVy
KGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBlbGVtZW50QnVmZmVyKTsKKyAgICBnbC5kcmF3RWxl
bWVudHMoZ2wuVFJJQU5HTEVTLCA2LCBnbC5VTlNJR05FRF9CWVRFLCAwKTsKKyAgICB3dHUuY2hl
Y2tDYW52YXMoZ2wsIFsyNTUsIDAsIDAsIDI1NV0sICJzaG91bGQgYmUgcmVkIik7CisKKyAgICAv
LyB1bmJpbmQgdmFvCisgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTsKKworICAgIC8v
IEF0IHRoaXMgcG9pbnQgdGhlIG5vblZBT0NvbG9yQnVmZmVyIHNob3VsZCBiZSBzdGlsbCBiZSBi
b3VuZC4KKyAgICAvLyBJZiB0aGUgV2ViR0wgaW1wbCBpcyBlbXVsYXRpbmcgVkFPcyBpdCBtdXN0
IG1ha2Ugc3VyZQorICAgIC8vIGl0IGNvcnJlY3RseSByZXN0b3JlcyB0aGlzIGJpbmRpbmcuCisg
ICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7CisgICAgZ2wudmVydGV4QXR0cmliUG9p
bnRlcigwLCA0LCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCAwLCAwKTsKKyAgICBnbC5kcmF3RWxl
bWVudHMoZ2wuVFJJQU5HTEVTLCA2LCBnbC5VTlNJR05FRF9CWVRFLCAwKTsKKyAgICB3dHUuY2hl
Y2tDYW52YXMoZ2wsIFswLCAyNTUsIDAsIDI1NV0sICJzaG91bGQgYmUgZ3JlZW4iKTsKK30KKwor
ZGVidWcoIiIpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorCis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9U
ZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVj
dGF0aW9ucwppbmRleCBlMzhiNmNjMmNkZDMwYzA0Y2EyZjlhYzM0ODY1ODFjYjZhMzAwNzY0Li44
ZTU5MWMyY2NkYzNlMjQyMGRkY2IyNzMyNGRlYTA2Y2EyYjQ1M2QzIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTM2MDQsNyArMzYwNCwx
MSBAQCBCVUdXSzk2NTQ5IE1BQyA6IHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZ3B1L2Zhc3Qv
aGlkcGkvdmlkZW8tY29udHJvbHMtaW4taGlkcAogQlVHV0s5NjYyOCBMSU9OIDogZmFzdC9mcmFt
ZXMvY2FsY3VsYXRlLW9yZGVyLmh0bWwgPSBQQVNTIFRFWFQKIEJVR1dLOTY1NTAgOiBodHRwL3Rl
c3RzL21lZGlhL21lZGlhLXNvdXJjZS9zZWVrLXRvLWVuZC1hZnRlci1kdXJhdGlvbi1jaGFuZ2Uu
aHRtbCA9IFBBU1MgVElNRU9VVAogQlVHV0s5NjQxNiBNQUMgOiBjb21wb3NpdGluZy9vdmVyZmxv
dy9vdmVyZmxvdy1zY2FsZWQtZGVzY2VuZGFudC1vdmVybGFwcGluZy5odG1sID0gSU1BR0UKKwor
Ly8gRXhwZWN0ZWQgdG8gZmFpbCB1bnRpbCBleHRlbnNpb24gaW1wbGVtZW50YXRpb24gbGFuZHMK
K0JVR1dLOTY5NjEgOiBmYXN0L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC5o
dG1sID0gUEFTUyBURVhUCitCVUdXSzk2NTc4IDogcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9n
cHUvZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1vYmplY3QuaHRtbCA9IFBBU1Mg
VEVYVAorCiBCVUdXSzk2NzI1IExJTlVYIE1BQyBXSU4gOiBodHRwL3Rlc3RzL21lZGlhL21lZGlh
LXNvdXJjZS92aWRlby1tZWRpYS1zb3VyY2Utc3RhdGUtY2hhbmdlcy5odG1sID0gUEFTUyBURVhU
CiBCVUdDUjYzOTIxIDogcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9ncHUvZmFzdC9jYW52YXMv
Y2FudmFzLWZpbGxQYXRoLXNoYWRvdy5odG1sID0gVEVYVAogQlVHV0s3NzU1MCA6IHBsYXRmb3Jt
L2Nocm9taXVtL3ZpcnR1YWwvZ3B1L2NhbnZhcy9waGlsaXAvdGVzdHMvMmQuZ3JhZGllbnQuaW50
ZXJwb2xhdGUuY29sb3VyYWxwaGEuaHRtbCA9IFRFWFQKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZWZsL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBl
ZAppbmRleCA5NTAxMzVjZjg2MmE5ZDdhYTBkNDY1MmVhM2I4OTMxYWIyNzFhZTNkLi5iMWMwYTYz
YzQzNDg0OWRiOTVlNDNmMzM5N2QzZDQ0NTk2MGU1MzFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tp
cHBlZApAQCAtNzc1LDMgKzc3NSw2IEBAIGluc3BlY3Rvci9leHRlbnNpb25zL2V4dGVuc2lvbnMt
ZXZhbC1jb250ZW50LXNjcmlwdC5odG1sCiAKICMgRU5BQkxFKFdJREdFVF9SRUdJT04pIGlzIGRp
c2FibGVkCiBmYXN0L2Nzcy93aWRnZXQtcmVnaW9uLXBhcnNlci5odG1sCisKKyMgaHR0cDovL3dl
YmtpdC5vcmcvYi85NjgyOAorZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1vYmpl
Y3QuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrLXdrMi9Ta2lwcGVk
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrLXdrMi9Ta2lwcGVkCmluZGV4IDdiNTM2ODg1YjNh
NzQwYmQzMjJmN2FhMzE0YWFkMWRjNGNkMmZhMTguLjE4ZDViZDBhYTdiNGVkZTg0NDRkZTMwZWYz
MmVmMmY4OTIyNmZmZDggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay13azIv
U2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGstd2syL1NraXBwZWQKQEAgLTQx
MSw2ICs0MTEsOSBAQCB0cmFuc2l0aW9ucy9jaGFuZ2UtdmFsdWVzLWR1cmluZy10cmFuc2l0aW9u
Lmh0bWwKIHRyYW5zaXRpb25zL2V4dHJhLXRyYW5zaXRpb24uaHRtbAogdHJhbnNpdGlvbnMvaW50
ZXJydXB0ZWQtYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi5odG1sCiAKKyMgaHR0cDovL3dlYmtpdC5v
cmcvYi85NjgyOAorZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1vYmplY3QuaHRt
bAorCiAjIFtOYXZpZ2F0aW9uIFRpbWluZ10gUmVtb3ZlIG9sZC1zdHlsZSBMYXlvdXRUZXN0cwog
IyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTExNTgKIGZhc3QvZG9t
L25hdmlnYXRpb24tdHlwZS1iYWNrLWZvcndhcmQuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBl
ZAppbmRleCBjOWJiYjAxZDJmM2NmMjQ0MmRiMzBmYjJkMTAxZWVhNGNiNjgwYjM2Li5kYWJmNGVh
OGI5NjMxNmUwNGZlZDZmMTlmYWM0OGRlMTYxMzAzOWU1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tp
cHBlZApAQCAtMTA0OCw2ICsxMDQ4LDkgQEAgZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFu
ZC1zdWItaW1hZ2UtMmQtd2l0aC12aWRlby5odG1sCiAjIFNlbmRpbmcgdGhlIG1vdXNlIGRvd24g
ZXZlbnQgdG8gdGhlIHNjcm9sbGJhciBzdGFydHMgYSBuZXN0ZWQgcnVuIGxvb3Agd2hpY2ggY2F1
c2VzIGEgaGFuZy4KIGZhc3QvZXZlbnRzL21vdXNlZG93bi1pbi1zdWJmcmFtZS1zY3JvbGxiYXIu
aHRtbAogCisjIGh0dHA6Ly93ZWJraXQub3JnL2IvOTY4MjgKK2Zhc3QvY2FudmFzL3dlYmdsL29l
cy12ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWwKKwogIyAtLS0gV2ViS2l0MSBvbmx5IC0tLQogaHR0
cC90ZXN0cy9taXNjL3dpbGxDYWNoZVJlc3BvbnNlLWRlbGVnYXRlLWNhbGxiYWNrLmh0bWwKIGh0
dHAvdGVzdHMvbXVsdGlwYXJ0L2xvYWQtbGFzdC1ub24taHRtbC1mcmFtZS5waHAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2syL1NraXBwZWQKaW5kZXggYzFkYWIyN2E0YTY2ZGEzZmQ1NjQwY2IzMDM4YWRjY2RhOThh
MWExNi4uYjZiNjJjN2U1ODAyZDkzMjRjMzE1ZDk0NjgwZWU0YmY4YjI2MGQwMiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2syL1NraXBwZWQKQEAgLTE5OSw2ICsxOTksNyBAQCBmYXN0L2NhbnZhcy93ZWJnbC91
bmlmb3JtLWxvY2F0aW9uLmh0bWwKIGZhc3QvY2FudmFzL3dlYmdsL3ZpZXdwb3J0LXVuY2hhbmdl
ZC11cG9uLXJlc2l6ZS5odG1sCiBmYXN0L2NhbnZhcy93ZWJnbC93ZWJnbC1hcnJheS1pbnZhbGlk
LXJhbmdlcy5odG1sCiBmYXN0L2NhbnZhcy93ZWJnbC93ZWJnbC1zcGVjaWZpYy5odG1sCitmYXN0
L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC5odG1sCiBmYXN0L2hhcm5lc3Mv
b3ZlcnJpZGUtcHJlZmVyZW5jZXMtMi5odG1sCiBmYXN0L2ltYWdlcy9hbmltYXRlZC1naWYtcmVz
dG9yZWQtZnJvbS1iZmNhY2hlLmh0bWwKIGZhc3QvbG9hZGVyL2Rpc3BsYXktaW1hZ2UtdW5zZXQt
YWxsb3dzLWNhY2hlZC1pbWFnZS1sb2FkLmh0bWwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164472</attachid>
            <date>2012-09-17 16:22:23 -0700</date>
            <delta_ts>2012-09-21 15:14:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96578-20120917162150.patch</filename>
            <type>text/plain</type>
            <size>40005</size>
            <attacher name="Brandon Jones">bajones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4ODE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA1YzYyZDliYWNmOWEz
NDQ3OTc4MTE3NWE2NWI3OTVhMDQ2MjI4NGY5Li5jODYwZjcxZTA5N2U4OTY4YmI3MGIxN2NiYmQy
MTM2ODY0ZGNjOTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0wOS0xNyAg
QnJhbmRvbiBKb25lcyAgPGJham9uZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9y
dCBmb3IgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgaW4gY2hyb21pdW0KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NTc4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgY29kZSB0byBhbGxvdyBjYWxs
cyB0byB0aGUgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgZXh0ZW5zaW9uIHRvIGludGVyZmFjZQor
ICAgICAgICBwcm9wZXJseSB3aXRoIHRoZSBjaHJvbWl1bSBXZWJHTCBpbXBsZW1lbnRhdGlvbi4g
CisKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAg
ICAgICAgKFdlYkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6YmluZFZlcnRleEFycmF5T0VTKToKKwogMjAxMi0w
OS0xNyAgQW50b2luZSBMYWJvdXIgIDxwaW1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2No
cm9taXVtXSBBZGQgb25TZW5kRnJhbWVUb1BhcmVudENvbXBvc2l0b3JBY2sgdG8gV2ViQ29tcG9z
aXRvck91dHB1dFN1cmZhY2VDbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYmM3ZDY4OWFhNDg0OWQ1N2Yx
ZmNlNGY3NTVlZmZlMjY1ODlhZjBjLi44NjQyMTQ2OTNkODM3ZDk4MGZhZWNkNmNmMTIxZGY0NjQw
MDkwZDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTItMDktMTcgIEJyYW5kb24g
Sm9uZXMgIDxiYWpvbmVzQGdvb2dsZS5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIE9F
U192ZXJ0ZXhfYXJyYXlfb2JqZWN0IGluIGNocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjU3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBiYXNpYyByZWZlcmVuY2UgY291bnRpbmcg
dG8gV2ViR0xCdWZmZXIgb2JqZWN0cyB0byBzYXRpc2Z5IHNwZWMgcmVxdWlyZW1lbnRzCisgICAg
ICAgIGZvciB0aGUgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgZXh0ZW5zaW9uLiBBZGRlZCBjb2Rl
IHRvIGFsbG93IGNhbGxzIHRvIHRoZQorICAgICAgICBPRVNfdmVydGV4X2FycmF5X29iamVjdCBl
eHRlbnNpb24gdG8gaW50ZXJmYWNlIHByb3Blcmx5IHdpdGggdGhlIGNocm9taXVtIFdlYkdMCisg
ICAgICAgIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFzL3dlYmds
L29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWwKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpzZXRFbGVtZW50QXJyYXlCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUy5oOgorICAgICAgICAoV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpnZXRWZXJ0ZXhB
dHRyaWJTdGF0ZVNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvRXh0
ZW5zaW9uczNEQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hy
b21pdW06OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnMzRENocm9taXVtOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RDaHJvbWl1bTo6aXNWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6YmluZFZlcnRleEFycmF5T0VTKToKKwogMjAxMi0wOS0x
NiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIERl
bGF5ZWQgc3RydWN0dXJlIHN3ZWVwIGNhbiBsZWFrIHN0cnVjdHVyZXMgd2l0aG91dCBib3VuZApk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0Nv
bnRleHQzRC5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0Nv
bnRleHQzRC5oCmluZGV4IDMxMmQ0ZmFiN2E2Mjk0NTdmY2NhZTljZTcyODE3YTMyZDkwNmU1ZjYu
LjgyZDNkMzZjOGFiNTRlZDBhM2IxODRjNDFmYzJhODYxYWQ1NWU3OGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgK
QEAgLTQ0Myw2ICs0NDMsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwdXNoR3JvdXBN
YXJrZXJFWFQoY29uc3QgV0dDM0RjaGFyKiBtYXJrZXIpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBw
b3BHcm91cE1hcmtlckVYVCh2b2lkKSB7IH0KIAorICAgIC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlf
b2JqZWN0CisgICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVZlcnRleEFycmF5T0VTKCkgeyByZXR1
cm4gMDsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhXZWJHTElkIGFy
cmF5KSB7IH0KKyAgICB2aXJ0dWFsIFdHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFdlYkdM
SWQgYXJyYXkpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhB
cnJheU9FUyhXZWJHTElkIGFycmF5KSB7IH0KKwogICAgIEdyR0xJbnRlcmZhY2UqIGNyZWF0ZUdy
R0xJbnRlcmZhY2UoKTsKIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMjRiOWMzM2Y5MzIyY2Jj
N2JmZWYxNGNiZmE0MmUxMmUyNTQxNGRiOS4uNTgyZWQ1ZDM5OGFjM2YyNDdlYjZhYWViNmVlZGE4
NWUyOTRlNWM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0xNTQ0LDIyICsxNTQ0LDggQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKG1fYm91bmRBcnJheUJ1ZmZlciA9PSBidWZmZXIpCiAgICAgICAg
IG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7Ci0gICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50
QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1
ZmZlcigpOwotICAgIGlmIChlbGVtZW50QXJyYXlCdWZmZXIgPT0gYnVmZmVyKQotICAgICAgICBt
X2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldEVsZW1lbnRBcnJheUJ1ZmZlcigwKTsKLSAgICBp
ZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0
T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3Qt
PmdldFZlcnRleEF0dHJpYlN0YXRlKDApOwotICAgICAgICBpZiAoYnVmZmVyID09IHN0YXRlLmJ1
ZmZlckJpbmRpbmcpIHsKLSAgICAgICAgICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmcgPSBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXI7Ci0gICAgICAgICAgICBzdGF0ZS5ieXRlc1BlckVsZW1lbnQgPSAwOwot
ICAgICAgICAgICAgc3RhdGUuc2l6ZSA9IDQ7Ci0gICAgICAgICAgICBzdGF0ZS50eXBlID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUOwotICAgICAgICAgICAgc3RhdGUubm9ybWFsaXplZCA9IGZh
bHNlOwotICAgICAgICAgICAgc3RhdGUuc3RyaWRlID0gMTY7Ci0gICAgICAgICAgICBzdGF0ZS5v
cmlnaW5hbFN0cmlkZSA9IDA7Ci0gICAgICAgICAgICBzdGF0ZS5vZmZzZXQgPSAwOwotICAgICAg
ICB9Ci0gICAgfQorCisgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT51bmJpbmRCdWZmZXIo
YnVmZmVyKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUZyYW1lYnVm
ZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQpAQCAtNDM4MywxNyArNDM2OSw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50
IGluZGV4LCBHQzNEaW50IHNpemUsIEdDCiAgICAgfQogICAgIEdDM0RzaXplaSBieXRlc1BlckVs
ZW1lbnQgPSBzaXplICogdHlwZVNpemU7CiAKLSAgICBHQzNEc2l6ZWkgdmFsaWRhdGVkU3RyaWRl
ID0gc3RyaWRlID8gc3RyaWRlIDogYnl0ZXNQZXJFbGVtZW50OwotCi0gICAgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7Ci0gICAgc3RhdGUuYnVmZmVy
QmluZGluZyA9IG1fYm91bmRBcnJheUJ1ZmZlcjsKLSAgICBzdGF0ZS5ieXRlc1BlckVsZW1lbnQg
PSBieXRlc1BlckVsZW1lbnQ7Ci0gICAgc3RhdGUuc2l6ZSA9IHNpemU7Ci0gICAgc3RhdGUudHlw
ZSA9IHR5cGU7Ci0gICAgc3RhdGUubm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7Ci0gICAgc3RhdGUu
c3RyaWRlID0gdmFsaWRhdGVkU3RyaWRlOwotICAgIHN0YXRlLm9yaWdpbmFsU3RyaWRlID0gc3Ry
aWRlOwotICAgIHN0YXRlLm9mZnNldCA9IHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCk7
CisgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRl
eCwgYnl0ZXNQZXJFbGVtZW50LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXRp
Y19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIG1fYm91bmRBcnJheUJ1ZmZlcik7CiAgICAgbV9j
b250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVk
LCBzdHJpZGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDYwMjNiNDQ2MjZiNmNlOWVjNTVj
MmRmZWVkNGFkMzYyMjYwMzEzZjEuLjQ1ZGY2YTU4MjVmNDY4ZTg2ZGViMjg3Y2M4NWYwYzZhMjY3
ODk1MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5oCkBAIC0zMjIsNiArMzIyLDcgQEAgcHVibGljOgogICAgIGZyaWVuZCBjbGFz
cyBXZWJHTERlYnVnU2hhZGVyczsKICAgICBmcmllbmQgY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4
dHVyZVMzVEM7CiAgICAgZnJpZW5kIGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVz
c2FnZUNhbGxiYWNrOworICAgIGZyaWVuZCBjbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
OwogCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiwgUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKTsK
ICAgICB2b2lkIGluaXRpYWxpemVOZXdDb250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwCmluZGV4IDRh
YTAzYjhmZWExNTE5Yjk3MjIzNzA0Y2FmYmZhNzYzODEzMmFmMjIuLjk4YzJjZGVlNmIxYWQ3NWVj
ZGM2NTQ3YzY2MDVlYjg2OTYwOWZhNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwCkBAIC03Miw2ICs3Miw3
NCBAQCB2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmRlbGV0ZU9iamVjdEltcGwoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCwgUAogICAgICAgICBleHRlbnNpb25zLT5kZWxldGVW
ZXJ0ZXhBcnJheU9FUyhvYmplY3QpOwogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBpZiAo
bV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlcikKKyAgICAgICAgbV9ib3VuZEVsZW1lbnRBcnJheUJ1
ZmZlci0+b25EZXRhY2hlZChjb250ZXh0M2QpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUoKTsgKytpKSB7CisgICAgICAgIFZlcnRleEF0dHJp
YlN0YXRlJiBzdGF0ZSA9IG1fdmVydGV4QXR0cmliU3RhdGVbaV07CisgICAgICAgIGlmIChzdGF0
ZS5idWZmZXJCaW5kaW5nKQorICAgICAgICAgICAgc3RhdGUuYnVmZmVyQmluZGluZy0+b25EZXRh
Y2hlZChjb250ZXh0M2QpOworICAgIH0KK30KKwordm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0
T0VTOjpzZXRFbGVtZW50QXJyYXlCdWZmZXIoUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gYnVmZmVy
KQoreworICAgIGlmIChtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICBtX2JvdW5k
RWxlbWVudEFycmF5QnVmZmVyLT5vbkRldGFjaGVkKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0
M0QoKSk7CisgICAgbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICBpZiAo
YnVmZmVyKQorICAgICAgICBidWZmZXItPm9uQXR0YWNoZWQoKTsKK30KKwordm9pZCBXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTOjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgKKyAgICBHQzNEdWludCBp
bmRleCwgR0MzRHNpemVpIGJ5dGVzUGVyRWxlbWVudCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0
eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBHQzNEaW50cHRy
IG9mZnNldCwgUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gYnVmZmVyKQoreworICAgIEdDM0RzaXpl
aSB2YWxpZGF0ZWRTdHJpZGUgPSBzdHJpZGUgPyBzdHJpZGUgOiBieXRlc1BlckVsZW1lbnQ7CisK
KyAgICBWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4
XTsKKworICAgIGlmIChzdGF0ZS5idWZmZXJCaW5kaW5nKQorICAgICAgICBzdGF0ZS5idWZmZXJC
aW5kaW5nLT5vbkRldGFjaGVkKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAg
aWYgKGJ1ZmZlcikKKyAgICAgICAgYnVmZmVyLT5vbkF0dGFjaGVkKCk7CisKKyAgICBzdGF0ZS5i
dWZmZXJCaW5kaW5nID0gYnVmZmVyOworICAgIHN0YXRlLmJ5dGVzUGVyRWxlbWVudCA9IGJ5dGVz
UGVyRWxlbWVudDsKKyAgICBzdGF0ZS5zaXplID0gc2l6ZTsKKyAgICBzdGF0ZS50eXBlID0gdHlw
ZTsKKyAgICBzdGF0ZS5ub3JtYWxpemVkID0gbm9ybWFsaXplZDsKKyAgICBzdGF0ZS5zdHJpZGUg
PSB2YWxpZGF0ZWRTdHJpZGU7CisgICAgc3RhdGUub3JpZ2luYWxTdHJpZGUgPSBzdHJpZGU7Cisg
ICAgc3RhdGUub2Zmc2V0ID0gb2Zmc2V0OworfQorCit2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVM6OnVuYmluZEJ1ZmZlcihQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBidWZmZXIpCit7Cisg
ICAgaWYgKG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIgPT0gYnVmZmVyKSB7CisgICAgICAgIG1f
Ym91bmRFbGVtZW50QXJyYXlCdWZmZXItPm9uRGV0YWNoZWQoY29udGV4dCgpLT5ncmFwaGljc0Nv
bnRleHQzRCgpKTsKKyAgICAgICAgbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlciA9IDA7CisgICAg
fQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZlcnRleEF0dHJpYlN0YXRlLnNpemUo
KTsgKytpKSB7CisgICAgICAgIFZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fdmVydGV4QXR0
cmliU3RhdGVbaV07CisgICAgICAgIGlmIChzdGF0ZS5idWZmZXJCaW5kaW5nID09IGJ1ZmZlcikg
eworICAgICAgICAgICAgYnVmZmVyLT5vbkRldGFjaGVkKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250
ZXh0M0QoKSk7CisKKyAgICAgICAgICAgIGlmICghaSAmJiAhY29udGV4dCgpLT5pc0dMRVMyQ29t
cGxpYW50KCkpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gY29udGV4
dCgpLT5tX3ZlcnRleEF0dHJpYjBCdWZmZXI7CisgICAgICAgICAgICAgICAgc3RhdGUuYnVmZmVy
QmluZGluZy0+b25BdHRhY2hlZCgpOworICAgICAgICAgICAgICAgIHN0YXRlLmJ5dGVzUGVyRWxl
bWVudCA9IDA7CisgICAgICAgICAgICAgICAgc3RhdGUuc2l6ZSA9IDQ7CisgICAgICAgICAgICAg
ICAgc3RhdGUudHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgICAgICAg
ICBzdGF0ZS5ub3JtYWxpemVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgc3RhdGUuc3RyaWRl
ID0gMTY7CisgICAgICAgICAgICAgICAgc3RhdGUub3JpZ2luYWxTdHJpZGUgPSAwOworICAgICAg
ICAgICAgICAgIHN0YXRlLm9mZnNldCA9IDA7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gMDsKKyAgICAgICAgfQorICAgIH0KIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUy5oCmluZGV4IDc1YWU0MmZmNzI1YWNkMWRmZWRiY2U2YTBiYzkyZDNjNDAyOGY0
MzUuLmI2NjBkZTU4ODEzMTMyZDBjYTU5ZTI5YmY0ZWQ5NDQ1OWYxY2M5MmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
LmgKQEAgLTc2LDkgKzc2LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc0V2ZXJCZWVuQm91
bmQoKSB7IG1faGFzRXZlckJlZW5Cb3VuZCA9IHRydWU7IH0KICAgICAKICAgICBQYXNzUmVmUHRy
PFdlYkdMQnVmZmVyPiBnZXRFbGVtZW50QXJyYXlCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2Jv
dW5kRWxlbWVudEFycmF5QnVmZmVyOyB9Ci0gICAgdm9pZCBzZXRFbGVtZW50QXJyYXlCdWZmZXIo
UGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gYnVmZmVyKSB7IG1fYm91bmRFbGVtZW50QXJyYXlCdWZm
ZXIgPSBidWZmZXI7IH0KKyAgICB2b2lkIHNldEVsZW1lbnRBcnJheUJ1ZmZlcihQYXNzUmVmUHRy
PFdlYkdMQnVmZmVyPik7CiAgICAgCiAgICAgVmVydGV4QXR0cmliU3RhdGUmIGdldFZlcnRleEF0
dHJpYlN0YXRlKGludCBpbmRleCkgeyByZXR1cm4gbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF07
IH0KKyAgICB2b2lkIHNldFZlcnRleEF0dHJpYlN0YXRlKEdDM0R1aW50LCBHQzNEc2l6ZWksIEdD
M0RpbnQsIEdDM0RlbnVtLCBHQzNEYm9vbGVhbiwgR0MzRHNpemVpLCBHQzNEaW50cHRyLCBQYXNz
UmVmUHRyPFdlYkdMQnVmZmVyPik7CisgICAgdm9pZCB1bmJpbmRCdWZmZXIoUGFzc1JlZlB0cjxX
ZWJHTEJ1ZmZlcj4pOwogCiBwcml2YXRlOgogICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMo
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiwgVmFvVHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0V4dGVuc2lvbnMzRENocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvRXh0ZW5zaW9uczNEQ2hy
b21pdW0uY3BwCmluZGV4IDk0MTIyNzRjNzYyODM1YzU5ZjljMDA3NWU1NDZkMjk3Mzc3MjVhY2Qu
LjE3YzMwMjE4MzBhMjBiMjRhNGY3YzZlZTUxMjJhYmExZmNiMjM5Y2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvRXh0ZW5zaW9uczNEQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvRXh0
ZW5zaW9uczNEQ2hyb21pdW0uY3BwCkBAIC05NywyMCArOTcsMjIgQEAgdm9pZCBFeHRlbnNpb25z
M0RDaHJvbWl1bTo6dW5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oY29uc3Qgdm9pZCogZGF0YSkK
IAogUGxhdGZvcm0zRE9iamVjdCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6Y3JlYXRlVmVydGV4QXJy
YXlPRVMoKQogewotICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3ByaXZhdGUtPndlYkNvbnRl
eHQoKS0+Y3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKIH0KIAotdm9pZCBFeHRlbnNpb25zM0RDaHJv
bWl1bTo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkKK3ZvaWQgRXh0ZW5z
aW9uczNEQ2hyb21pdW06OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJy
YXkpCiB7CisgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmRlbGV0ZVZlcnRleEFycmF5T0VT
KGFycmF5KTsKIH0KIAotR0MzRGJvb2xlYW4gRXh0ZW5zaW9uczNEQ2hyb21pdW06OmlzVmVydGV4
QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkKK0dDM0Rib29sZWFuIEV4dGVuc2lvbnMzRENocm9t
aXVtOjppc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCiB7Ci0gICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5pc1ZlcnRleEFycmF5
T0VTKGFycmF5KTsKIH0KIAotdm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6YmluZFZlcnRleEFy
cmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpCit2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpiaW5k
VmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKIHsKKyAgICBtX3ByaXZhdGUt
PndlYkNvbnRleHQoKS0+YmluZFZlcnRleEFycmF5T0VTKGFycmF5KTsKIH0KIAogU3RyaW5nIEV4
dGVuc2lvbnMzRENocm9taXVtOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZv
cm0zRE9iamVjdCBzaGFkZXIpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYzY2ZWMxZjAxYzgwYTg1OGRmM2M2ZjM2N2M0ODc1
ZmQ0Y2JjMGExMi4uYTlkZTc5YTM0YWQ0MzVkMzc5YWU5NmM4ZGQyMmM0YjhlYjA0OTcyNSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA5LTE3ICBCcmFuZG9uIEpvbmVzICA8YmFqb25lc0Bn
b29nbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBPRVNfdmVydGV4X2FycmF5X29i
amVjdCBpbiBjaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTY1NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBCcm91Z2h0IG92ZXIgS0hST05PUyBjb25mb3JtYW5jZSB0ZXN0IGZvciBPRVNfdmVy
dGV4X2FycmF5X29iamVjdAorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRl
eC1hcnJheS1vYmplY3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZh
cy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9lZmwvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGstd2syL1NraXBwZWQ6
CisgICAgICAgICogcGxhdGZvcm0vbWFjL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vd2sy
L1NraXBwZWQ6CisKIDIwMTItMDktMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
IAogICAgICAgICBXZSBkb24ndCBoYXZlIGEgYmFkIGVub3VnaCB0aW1lIGlmIGFuIG9iamVjdCdz
IHByb3RvdHlwZSBjaGFpbiBjcm9zc2VzIGdsb2JhbCBvYmplY3RzCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9i
amVjdC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzdhYmFkZDc4MWI2NGZiZDYyMTY0YzcxYTdi
OTYzNmIyMDg3ZjYyOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUw
IEBACitUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIE9FU192ZXJ0
ZXhfYXJyYXlfb2JqZWN0IGV4dGVuc2lvbiwgaWYgaXQgaXMgYXZhaWxhYmxlLgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBXZWJHTCBjb250ZXh0IGV4aXN0cworVGVzdGlu
ZyBiaW5kaW5nIGVudW0gd2l0aCBleHRlbnNpb24gZGlzYWJsZWQKK1BBU1MgZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBJTlZBTElEX0VOVU0gOiBWRVJURVhfQVJSQVlfQklORElOR19PRVMg
c2hvdWxkIG5vdCBiZSBxdWVyeWFibGUgaWYgZXh0ZW5zaW9uIGlzIGRpc2FibGVkCitQQVNTIFN1
Y2Nlc3NmdWxseSBlbmFibGVkIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IGV4dGVuc2lvbgorUEFT
UyBPRVNfdmVydGV4X2FycmF5X29iamVjdCBsaXN0ZWQgYXMgc3VwcG9ydGVkIGFuZCBnZXRFeHRl
bnNpb24gc3VjY2VlZGVkCitUZXN0aW5nIGJpbmRpbmcgZW51bSB3aXRoIGV4dGVuc2lvbiBlbmFi
bGVkCitQQVNTIGV4dC5WRVJURVhfQVJSQVlfQklORElOR19PRVMgaXMgMHg4NUI1CitQQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBWRVJURVhfQVJSQVlfQklORElO
R19PRVMgcXVlcnkgc2hvdWxkIHN1Y2NlZWQgaWYgZXh0ZW5zaW9uIGlzIGVuYWJsZQorUEFTUyBE
ZWZhdWx0IHZhbHVlIG9mIFZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUyBpcyBudWxsCitUZXN0aW5n
IGJpbmRpbmcgYSBWQU8KK1BBU1MgZ2wuZ2V0UGFyYW1ldGVyKGV4dC5WRVJURVhfQVJSQVlfQklO
RElOR19PRVMpIGlzIG51bGwKK1BBU1MgZ2wuZ2V0UGFyYW1ldGVyKGV4dC5WRVJURVhfQVJSQVlf
QklORElOR19PRVMpIGlzIGV4cGVjdGVkIFZBTworUEFTUyBnbC5nZXRQYXJhbWV0ZXIoZXh0LlZF
UlRFWF9BUlJBWV9CSU5ESU5HX09FUykgaXMgZXhwZWN0ZWQgVkFPCitQQVNTIGdsLmdldFBhcmFt
ZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSBpcyBudWxsCitQQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogSU5WQUxJRF9PUEVSQVRJT04gOiBiaW5kaW5nIGEgZGVsZXRl
ZCB2ZXJ0ZXggYXJyYXkgb2JqZWN0CitQQVNTIGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FS
UkFZX0JJTkRJTkdfT0VTKSBpcyBudWxsCitUZXN0aW5nIG9iamVjdCBjcmVhdGlvbgorUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogY3JlYXRlVmVydGV4QXJyYXlP
RVMgc2hvdWxkIG5vdCBzZXQgYW4gZXJyb3IKK1BBU1MgdmFvIGlzIG5vbi1udWxsLgorUEFTUyBl
eHQuaXNWZXJ0ZXhBcnJheU9FUyh2YW8pIGlzIGZhbHNlCitQQVNTIGV4dC5pc1ZlcnRleEFycmF5
T0VTKHZhbykgaXMgdHJ1ZQorUEFTUyBleHQuaXNWZXJ0ZXhBcnJheU9FUyh2YW8pIGlzIHRydWUK
K1BBU1MgZXh0LmlzVmVydGV4QXJyYXlPRVMoKSBpcyBmYWxzZQorUEFTUyBleHQuaXNWZXJ0ZXhB
cnJheU9FUyhudWxsKSBpcyBmYWxzZQorVGVzdGluZyBhdHRyaWJ1dGVzIHdvcmsgYWNyb3NzIGJp
bmRpbmdzCitQQVNTIEFsbCBhdHRyaWJ1dGVzIHByZXNlcnZlZCBhY3Jvc3MgYmluZGluZ3MKK1Rl
c3RpbmcgdGhhdCBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBub3QgYXR0YWNoZWQgdG8gYmluZGluZ3MK
K1BBU1MgVmVydGV4IGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIG5vdCBhdHRhY2hlZCB0byBiaW5kaW5n
cworVGVzdGluZyBkcmF3cyB3aXRoIHZhcmlvdXMgVkFPIGJpbmRpbmdzCitQQVNTIERyYXcgMCBw
YXNzZWQgcGl4ZWwgdGVzdAorUEFTUyBEcmF3IDEgcGFzc2VkIHBpeGVsIHRlc3QKK1BBU1MgRHJh
dyAyIHBhc3NlZCBwaXhlbCB0ZXN0CitUZXN0aW5nIHVzaW5nIGRlbGV0ZWQgYnVmZmVycyByZWZl
cmVuY2VkIGJ5IFZBT3MKK1BBU1Mgc2hvdWxkIGJlIDI1NSwwLDAsMjU1CitQQVNTIHNob3VsZCBi
ZSAwLDI1NSwwLDI1NQorUEFTUyBzaG91bGQgYmUgMCwwLDI1NSwyNTUKK1BBU1Mgc2hvdWxkIGJl
IDAsMjU1LDI1NSwyNTUKK1Rlc3RpbmcgdGhhdCBWQU9zIGRvbid0IGVmZmVjdCBBUlJBWV9CVUZG
RVIgYmluZGluZy4KK1BBU1Mgc2hvdWxkIGJlIHJlZAorUEFTUyBzaG91bGQgYmUgZ3JlZW4KK1BB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHRoZXJlIHNob3VsZCBi
ZSBubyBlcnJvcnMKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1vYmplY3QuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODRkYzNiMmZmNTUzZjUzYjAzODhkZDAyODVhYTcwMmNiNTFlNDAzYgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJy
YXktb2JqZWN0Lmh0bWwKQEAgLTAsMCArMSw1ODYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzx0aXRsZT5XZWJHTCBPRVNfdmVydGV4
X2FycmF5X29iamVjdCBDb25mb3JtYW5jZSBUZXN0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2Rlc2t0b3AtZ2wtY29uc3RhbnRzLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGNhbnZhcyBp
ZD0iY2FudmFzIiBzdHlsZT0id2lkdGg6IDUwcHg7IGhlaWdodDogNTBweDsiPiA8L2NhbnZhcz4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBpZD0idnNoYWRlciIsIHR5cGU9Ingt
c2hhZGVyL3gtdmVydGV4Ij4KK2F0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247CithdHRyaWJ1dGUg
dmVjNCBhX2NvbG9yOwordmFyeWluZyB2ZWM0IHZfY29sb3I7Cit2b2lkIG1haW4odm9pZCkgewor
ICAgIGdsX1Bvc2l0aW9uID0gYV9wb3NpdGlvbjsKKyAgICB2X2NvbG9yID0gYV9jb2xvcjsKK30K
Kzwvc2NyaXB0PgorPHNjcmlwdCBpZD0iZnNoYWRlciIsIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21l
bnQiPgorcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cit2YXJ5aW5nIHZlYzQgdl9jb2xvcjsKK3Zv
aWQgbWFpbih2b2lkKSB7CisgICAgZ2xfRnJhZ0NvbG9yID0gdl9jb2xvcjsKK30KKzwvc2NyaXB0
PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIGZ1bmN0aW9u
YWxpdHkgb2YgdGhlIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IGV4dGVuc2lvbiwgaWYgaXQgaXMg
YXZhaWxhYmxlLiIpOworCitkZWJ1ZygiIik7CisKK3ZhciB3dHUgPSBXZWJHTFRlc3RVdGlsczsK
K3ZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Cit2YXIgZ2wg
PSBjcmVhdGUzRENvbnRleHQoY2FudmFzKTsKK3ZhciBleHQgPSBudWxsOwordmFyIHZhbyA9IG51
bGw7CisKK2lmICghZ2wpIHsKKyAgICB0ZXN0RmFpbGVkKCJXZWJHTCBjb250ZXh0IGRvZXMgbm90
IGV4aXN0Iik7Cit9IGVsc2UgeworICAgIHRlc3RQYXNzZWQoIldlYkdMIGNvbnRleHQgZXhpc3Rz
Iik7CisKKyAgICAvLyBTZXR1cCBlbXVsYXRlZCBPRVNWZXJ0ZXhBcnJheU9iamVjdCBpZiBpdCBo
YXMgYmVlbiBpbmNsdWRlZC4KKyAgICBpZiAod2luZG93LnNldHVwVmVydGV4QXJyYXlPYmplY3Qp
IHsKKyAgICAgICAgZGVidWcoInVzaW5nIGVtdWF0ZWQgT0VTX3ZlcnRleF9hcnJheV9vYmplY3Qi
KTsKKyAgICAgICAgc2V0dXBWZXJ0ZXhBcnJheU9iamVjdChnbCk7CisgICAgfQorCisgICAgLy8g
UnVuIHRlc3RzIHdpdGggZXh0ZW5zaW9uIGRpc2FibGVkCisgICAgcnVuQmluZGluZ1Rlc3REaXNh
YmxlZCgpOworCisgICAgLy8gUXVlcnkgdGhlIGV4dGVuc2lvbiBhbmQgc3RvcmUgZ2xvYmFsbHkg
c28gc2hvdWxkQmUgY2FuIGFjY2VzcyBpdAorICAgIGV4dCA9IGdsLmdldEV4dGVuc2lvbigiT0VT
X3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAgICBpZiAoIWV4dCkgeworICAgICAgICB0ZXN0UGFz
c2VkKCJObyBPRVNfdmVydGV4X2FycmF5X29iamVjdCBzdXBwb3J0IC0tIHRoaXMgaXMgbGVnYWwi
KTsKKworICAgICAgICBydW5TdXBwb3J0ZWRUZXN0KGZhbHNlKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICB0ZXN0UGFzc2VkKCJTdWNjZXNzZnVsbHkgZW5hYmxlZCBPRVNfdmVydGV4X2FycmF5X29i
amVjdCBleHRlbnNpb24iKTsKKworICAgICAgICBydW5TdXBwb3J0ZWRUZXN0KHRydWUpOworICAg
ICAgICBydW5CaW5kaW5nVGVzdEVuYWJsZWQoKTsKKyAgICAgICAgcnVuT2JqZWN0VGVzdCgpOwor
ICAgICAgICBydW5BdHRyaWJ1dGVUZXN0cygpOworICAgICAgICBydW5BdHRyaWJ1dGVWYWx1ZVRl
c3RzKCk7CisgICAgICAgIHJ1bkRyYXdUZXN0cygpOworICAgICAgICBydW5EZWxldGVUZXN0cygp
OworICAgICAgICBydW5BcnJheUJ1ZmZlckJpbmRUZXN0cygpOworICAgICAgICBnbEVycm9yU2hv
dWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAidGhlcmUgc2hvdWxkIGJlIG5vIGVycm9ycyIpOworICAg
IH0KK30KKworZnVuY3Rpb24gcnVuU3VwcG9ydGVkVGVzdChleHRlbnNpb25FbmFibGVkKSB7Cisg
ICAgdmFyIHN1cHBvcnRlZCA9IGdsLmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKKyAgICBpZiAo
c3VwcG9ydGVkLmluZGV4T2YoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikgPj0gMCkgeworICAg
ICAgICBpZiAoZXh0ZW5zaW9uRW5hYmxlZCkgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgiT0VT
X3ZlcnRleF9hcnJheV9vYmplY3QgbGlzdGVkIGFzIHN1cHBvcnRlZCBhbmQgZ2V0RXh0ZW5zaW9u
IHN1Y2NlZWRlZCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgi
T0VTX3ZlcnRleF9hcnJheV9vYmplY3QgbGlzdGVkIGFzIHN1cHBvcnRlZCBidXQgZ2V0RXh0ZW5z
aW9uIGZhaWxlZCIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGV4dGVu
c2lvbkVuYWJsZWQpIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIk9FU192ZXJ0ZXhfYXJyYXlf
b2JqZWN0IG5vdCBsaXN0ZWQgYXMgc3VwcG9ydGVkIGJ1dCBnZXRFeHRlbnNpb24gc3VjY2VlZGVk
Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJPRVNfdmVydGV4
X2FycmF5X29iamVjdCBub3QgbGlzdGVkIGFzIHN1cHBvcnRlZCBhbmQgZ2V0RXh0ZW5zaW9uIGZh
aWxlZCAtLSB0aGlzIGlzIGxlZ2FsIik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9u
IHJ1bkJpbmRpbmdUZXN0RGlzYWJsZWQoKSB7CisgICAgZGVidWcoIlRlc3RpbmcgYmluZGluZyBl
bnVtIHdpdGggZXh0ZW5zaW9uIGRpc2FibGVkIik7CisgICAgCisgICAgLy8gVXNlIHRoZSBjb25z
dGFudCBkaXJlY3RseSBhcyB3ZSBkb24ndCBoYXZlIHRoZSBleHRlbnNpb24KKyAgICB2YXIgVkVS
VEVYX0FSUkFZX0JJTkRJTkdfT0VTID0gMHg4NUI1OworICAgIAorICAgIGdsLmdldFBhcmFtZXRl
cihWRVJURVhfQVJSQVlfQklORElOR19PRVMpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wu
SU5WQUxJRF9FTlVNLCAiVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTIHNob3VsZCBub3QgYmUgcXVl
cnlhYmxlIGlmIGV4dGVuc2lvbiBpcyBkaXNhYmxlZCIpOworfQorCitmdW5jdGlvbiBydW5CaW5k
aW5nVGVzdEVuYWJsZWQoKSB7CisgICAgZGVidWcoIlRlc3RpbmcgYmluZGluZyBlbnVtIHdpdGgg
ZXh0ZW5zaW9uIGVuYWJsZWQiKTsKKyAgICAKKyAgICBzaG91bGRCZSgiZXh0LlZFUlRFWF9BUlJB
WV9CSU5ESU5HX09FUyIsICIweDg1QjUiKTsKKyAgICAKKyAgICBnbC5nZXRQYXJhbWV0ZXIoZXh0
LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUyk7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5O
T19FUlJPUiwgIlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUyBxdWVyeSBzaG91bGQgc3VjY2VlZCBp
ZiBleHRlbnNpb24gaXMgZW5hYmxlIik7CisgICAgCisgICAgLy8gRGVmYXVsdCB2YWx1ZSBpcyBu
dWxsCisgICAgaWYgKGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VT
KSA9PT0gbnVsbCkgeworICAgICAgICB0ZXN0UGFzc2VkKCJEZWZhdWx0IHZhbHVlIG9mIFZFUlRF
WF9BUlJBWV9CSU5ESU5HX09FUyBpcyBudWxsIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVz
dEZhaWxlZCgiRGVmYXVsdCB2YWx1ZSBvZiBWRVJURVhfQVJSQVlfQklORElOR19PRVMgaXMgbm90
IG51bGwiKTsKKyAgICB9CisgICAgCisgICAgZGVidWcoIlRlc3RpbmcgYmluZGluZyBhIFZBTyIp
OworICAgIHZhciB2YW8wID0gZXh0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7CisgICAgdmFyIHZh
bzEgPSBleHQuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICBzaG91bGRCZU51bGwoImdsLmdl
dFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSIpOworICAgIGV4dC5iaW5k
VmVydGV4QXJyYXlPRVModmFvMCk7CisgICAgaWYgKGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVY
X0FSUkFZX0JJTkRJTkdfT0VTKSA9PSB2YW8wKSB7CisgICAgICAgIHRlc3RQYXNzZWQoImdsLmdl
dFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSBpcyBleHBlY3RlZCBWQU8i
KTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJnbC5nZXRQYXJhbWV0ZXIoZXh0
LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUykgaXMgbm90IGV4cGVjdGVkIFZBTyIpCisgICAgfQor
ICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvMSk7CisgICAgaWYgKGdsLmdldFBhcmFtZXRl
cihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSA9PSB2YW8xKSB7CisgICAgICAgIHRlc3RQ
YXNzZWQoImdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSBpcyBl
eHBlY3RlZCBWQU8iKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJnbC5nZXRQ
YXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUykgaXMgbm90IGV4cGVjdGVkIFZB
TyIpCisgICAgfQorICAgIGV4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh2YW8xKTsKKyAgICBzaG91
bGRCZU51bGwoImdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSIp
OworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvMSk7CisgICAgZ2xFcnJvclNob3VsZEJl
KGdsLCBnbC5JTlZBTElEX09QRVJBVElPTiwgImJpbmRpbmcgYSBkZWxldGVkIHZlcnRleCBhcnJh
eSBvYmplY3QiKTsKKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOworICAgIHNob3Vs
ZEJlTnVsbCgiZ2wuZ2V0UGFyYW1ldGVyKGV4dC5WRVJURVhfQVJSQVlfQklORElOR19PRVMpIik7
CisgICAgZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHZhbzEpOworfQorCitmdW5jdGlvbiBydW5P
YmplY3RUZXN0KCkgeworICAgIGRlYnVnKCJUZXN0aW5nIG9iamVjdCBjcmVhdGlvbiIpOworICAg
IAorICAgIHZhbyA9IGV4dC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOworICAgIGdsRXJyb3JTaG91
bGRCZShnbCwgZ2wuTk9fRVJST1IsICJjcmVhdGVWZXJ0ZXhBcnJheU9FUyBzaG91bGQgbm90IHNl
dCBhbiBlcnJvciIpOworICAgIHNob3VsZEJlTm9uTnVsbCgidmFvIik7CisgICAgCisgICAgLy8g
RXhwZWN0IGZhbHNlIGlmIG5ldmVyIGJvdW5kCisgICAgc2hvdWxkQmVGYWxzZSgiZXh0LmlzVmVy
dGV4QXJyYXlPRVModmFvKSIpOworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvKTsKKyAg
ICBzaG91bGRCZVRydWUoImV4dC5pc1ZlcnRleEFycmF5T0VTKHZhbykiKTsKKyAgICBleHQuYmlu
ZFZlcnRleEFycmF5T0VTKG51bGwpOworICAgIHNob3VsZEJlVHJ1ZSgiZXh0LmlzVmVydGV4QXJy
YXlPRVModmFvKSIpOworICAgIAorICAgIHNob3VsZEJlRmFsc2UoImV4dC5pc1ZlcnRleEFycmF5
T0VTKCkiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJleHQuaXNWZXJ0ZXhBcnJheU9FUyhudWxsKSIp
OworICAgIAorICAgIGV4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh2YW8pOworICAgIHZhbyA9IG51
bGw7Cit9CisKK2Z1bmN0aW9uIHJ1bkF0dHJpYnV0ZVRlc3RzKCkgeworICAgIGRlYnVnKCJUZXN0
aW5nIGF0dHJpYnV0ZXMgd29yayBhY3Jvc3MgYmluZGluZ3MiKTsKKyAgICAKKyAgICB2YXIgc3Rh
dGVzID0gW107CisgICAgCisgICAgdmFyIGF0dHJDb3VudCA9IGdsLmdldFBhcmFtZXRlcihnbC5N
QVhfVkVSVEVYX0FUVFJJQlMpOworICAgIGZvciAodmFyIG4gPSAwOyBuIDwgYXR0ckNvdW50OyBu
KyspIHsKKyAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG51bGwpOworICAg
ICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBudWxsKTsKKyAgICAg
ICAgCisgICAgICAgIHZhciBzdGF0ZSA9IHt9OworICAgICAgICBzdGF0ZXMucHVzaChzdGF0ZSk7
CisgICAgICAgIAorICAgICAgICB2YXIgdmFvID0gc3RhdGUudmFvID0gZXh0LmNyZWF0ZVZlcnRl
eEFycmF5T0VTKCk7CisgICAgICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChuICUgMiA9PSAwKSB7CisgICAgICAgICAgICBnbC5lbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdsLmRpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheShuKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KG4gJSAyID09IDApIHsKKyAgICAgICAgICAgIHZhciBidWZmZXIgPSBzdGF0ZS5idWZmZXIgPSBn
bC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVG
RkVSLCBidWZmZXIpOworICAgICAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIs
IDEwMjQsIGdsLlNUQVRJQ19EUkFXKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZ2wudmVy
dGV4QXR0cmliUG9pbnRlcihuLCAxICsgbiAlIDQsIGdsLkZMT0FULCB0cnVlLCBuICogNCwgbiAq
IDQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobiAlIDIgPT0gMCkgeworICAg
ICAgICAgICAgdmFyIGVsYnVmZmVyID0gc3RhdGUuZWxidWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIo
KTsKKyAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGVs
YnVmZmVyKTsKKyAgICAgICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZG
RVIsIDEwMjQsIGdsLlNUQVRJQ19EUkFXKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
ZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTsKKyAgICB9CisgICAgCisgICAgdmFyIGFueU1p
c21hdGNoID0gZmFsc2U7CisgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBhdHRyQ291bnQ7IG4rKykg
eworICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZXNbbl07CisgICAgICAgIAorICAgICAgICBleHQu
YmluZFZlcnRleEFycmF5T0VTKHN0YXRlLnZhbyk7CisgICAgICAgIAorICAgICAgICB2YXIgaXNF
bmFibGVkID0gZ2wuZ2V0VmVydGV4QXR0cmliKG4sIGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5B
QkxFRCk7CisgICAgICAgIGlmICgobiAlIDIgPT0gMSkgfHwgaXNFbmFibGVkKSB7CisgICAgICAg
ICAgICAvLyBWYWxpZAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgi
VkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEIG5vdCBwcmVzZXJ2ZWQiKTsKKyAgICAgICAgICAg
IGFueU1pc21hdGNoID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmFyIGJ1
ZmZlciA9IGdsLmdldFZlcnRleEF0dHJpYihuLCBnbC5WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZF
Ul9CSU5ESU5HKTsKKyAgICAgICAgaWYgKG4gJSAyID09IDApIHsKKyAgICAgICAgICAgIGlmIChi
dWZmZXIgPT0gc3RhdGUuYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgLy8gTWF0Y2hlZAorICAg
ICAgICAgICAgICAgIGlmICgoZ2wuZ2V0VmVydGV4QXR0cmliKG4sIGdsLlZFUlRFWF9BVFRSSUJf
QVJSQVlfU0laRSkgPT0gMSArIG4gJSA0KSAmJgorICAgICAgICAgICAgICAgICAgICAoZ2wuZ2V0
VmVydGV4QXR0cmliKG4sIGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSkgPT0gZ2wuRkxPQVQp
ICYmCisgICAgICAgICAgICAgICAgICAgIChnbC5nZXRWZXJ0ZXhBdHRyaWIobiwgZ2wuVkVSVEVY
X0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEKSA9PSB0cnVlKSAmJgorICAgICAgICAgICAgICAgICAg
ICAoZ2wuZ2V0VmVydGV4QXR0cmliKG4sIGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFKSA9
PSBuICogNCkgJiYKKyAgICAgICAgICAgICAgICAgICAgKGdsLmdldFZlcnRleEF0dHJpYk9mZnNl
dChuLCBnbC5WRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIpID09IG4gKiA0KSkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBNYXRjaGVkCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiVkVSVEVYX0FUVFJJQl9BUlJBWV8qIG5vdCBwcmVz
ZXJ2ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgYW55TWlzbWF0Y2ggPSB0cnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGVzdEZh
aWxlZCgiVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORyBub3QgcHJlc2VydmVkIik7
CisgICAgICAgICAgICAgICAgYW55TWlzbWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCIGlz
IG5vdCBwcmVzZXJ2ZWQKKyAgICAgICAgICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgICAgICAg
ICB0ZXN0RmFpbGVkKCJWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HIG5vdCBwcmVz
ZXJ2ZWQiKTsKKyAgICAgICAgICAgICAgICBhbnlNaXNtYXRjaCA9IHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZhciBlbGJ1ZmZlciA9IGdsLmdldFBh
cmFtZXRlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HKTsKKyAgICAgICAgaWYgKG4g
JSAyID09IDApIHsKKyAgICAgICAgICAgIGlmIChlbGJ1ZmZlciA9PSBzdGF0ZS5lbGJ1ZmZlcikg
eworICAgICAgICAgICAgICAgIC8vIE1hdGNoZWQKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgdGVzdEZhaWxlZCgiRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyBub3Qg
cHJlc2VydmVkIik7CisgICAgICAgICAgICAgICAgYW55TWlzbWF0Y2ggPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGVsYnVmZmVyID09IG51
bGwpIHsKKyAgICAgICAgICAgICAgICAvLyBNYXRjaGVkCisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcg
bm90IHByZXNlcnZlZCIpOworICAgICAgICAgICAgICAgIGFueU1pc21hdGNoID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VT
KG51bGwpOworICAgIGlmICghYW55TWlzbWF0Y2gpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiQWxs
IGF0dHJpYnV0ZXMgcHJlc2VydmVkIGFjcm9zcyBiaW5kaW5ncyIpOworICAgIH0KKyAgICAKKyAg
ICBmb3IgKHZhciBuID0gMDsgbiA8IGF0dHJDb3VudDsgbisrKSB7CisgICAgICAgIHZhciBzdGF0
ZSA9IHN0YXRlc1tuXTsKKyAgICAgICAgZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHN0YXRlLnZh
byk7CisgICAgfQorfQorCitmdW5jdGlvbiBydW5BdHRyaWJ1dGVWYWx1ZVRlc3RzKCkgeworICAg
IGRlYnVnKCJUZXN0aW5nIHRoYXQgYXR0cmlidXRlIHZhbHVlcyBhcmUgbm90IGF0dGFjaGVkIHRv
IGJpbmRpbmdzIik7CisgICAgCisgICAgdmFyIHY7CisgICAgdmFyIHZhbzAgPSBleHQuY3JlYXRl
VmVydGV4QXJyYXlPRVMoKTsKKyAgICB2YXIgYW55RmFpbGVkID0gZmFsc2U7CisgICAgCisgICAg
ZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWI0ZigwLCAw
LCAxLCAyLCAzKTsKKyAgICAKKyAgICB2ID0gZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJF
TlRfVkVSVEVYX0FUVFJJQik7CisgICAgaWYgKCEodlswXSA9PSAwICYmIHZbMV0gPT0gMSAmJiB2
WzJdID09IDIgJiYgdlszXSA9PSAzKSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJWZXJ0ZXggYXR0
cmliIHZhbHVlIG5vdCByb3VuZC10cmlwcGVkPyIpOworICAgICAgICBhbnlGYWlsZWQgPSB0cnVl
OworICAgIH0KKyAgICAKKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKHZhbzApOworICAgIAor
ICAgIHYgPSBnbC5nZXRWZXJ0ZXhBdHRyaWIoMCwgZ2wuQ1VSUkVOVF9WRVJURVhfQVRUUklCKTsK
KyAgICBpZiAoISh2WzBdID09IDAgJiYgdlsxXSA9PSAxICYmIHZbMl0gPT0gMiAmJiB2WzNdID09
IDMpKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIlZlcnRleCBhdHRyaWIgdmFsdWUgcmVzZXQgYWNy
b3NzIGJpbmRpbmdzIik7CisgICAgICAgIGFueUZhaWxlZCA9IHRydWU7CisgICAgfQorICAgIAor
ICAgIGdsLnZlcnRleEF0dHJpYjRmKDAsIDQsIDUsIDYsIDcpOworICAgIGV4dC5iaW5kVmVydGV4
QXJyYXlPRVMobnVsbCk7CisgICAgCisgICAgdiA9IGdsLmdldFZlcnRleEF0dHJpYigwLCBnbC5D
VVJSRU5UX1ZFUlRFWF9BVFRSSUIpOworICAgIGlmICghKHZbMF0gPT0gNCAmJiB2WzFdID09IDUg
JiYgdlsyXSA9PSA2ICYmIHZbM10gPT0gNykpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiVmVydGV4
IGF0dHJpYiB2YWx1ZSBib3VuZCB0byBidWZmZXIiKTsKKyAgICAgICAgYW55RmFpbGVkID0gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgaWYgKCFhbnlGYWlsZWQpIHsKKyAgICAgICAgdGVzdFBhc3Nl
ZCgiVmVydGV4IGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIG5vdCBhdHRhY2hlZCB0byBiaW5kaW5ncyIp
CisgICAgfQorICAgIAorICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7CisgICAgZXh0
LmRlbGV0ZVZlcnRleEFycmF5T0VTKHZhbzApOworfQorCitmdW5jdGlvbiBydW5EcmF3VGVzdHMo
KSB7CisgICAgZGVidWcoIlRlc3RpbmcgZHJhd3Mgd2l0aCB2YXJpb3VzIFZBTyBiaW5kaW5ncyIp
OworICAgIAorICAgIGNhbnZhcy53aWR0aCA9IDUwOyBjYW52YXMuaGVpZ2h0ID0gNTA7CisgICAg
Z2wudmlld3BvcnQoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTsKKyAgICAKKyAg
ICB2YXIgdmFvMCA9IGV4dC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOworICAgIHZhciB2YW8xID0g
ZXh0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7CisgICAgCisgICAgdmFyIHByb2dyYW0gPSB3dHUu
c2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbShnbCwgMCwgMSk7CisgICAgCisgICAgZnVuY3Rpb24g
c2V0dXBRdWFkKHMpIHsKKyAgICAgICAgdmFyIG9wdF9wb3NpdGlvbkxvY2F0aW9uID0gMDsKKyAg
ICAgICAgdmFyIG9wdF90ZXhjb29yZExvY2F0aW9uID0gMTsKKyAgICAgICAgdmFyIHZlcnRleE9i
amVjdCA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZ
X0JVRkZFUiwgdmVydGV4T2JqZWN0KTsKKyAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9C
VUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoWworICAgICAgICAgICAgIDEuMCAqIHMsICAxLjAgKiBz
LCAwLjAsCisgICAgICAgICAgICAtMS4wICogcywgIDEuMCAqIHMsIDAuMCwKKyAgICAgICAgICAg
IC0xLjAgKiBzLCAtMS4wICogcywgMC4wLAorICAgICAgICAgICAgIDEuMCAqIHMsICAxLjAgKiBz
LCAwLjAsCisgICAgICAgICAgICAtMS4wICogcywgLTEuMCAqIHMsIDAuMCwKKyAgICAgICAgICAg
ICAxLjAgKiBzLCAtMS4wICogcywgMC4wXSksIGdsLlNUQVRJQ19EUkFXKTsKKyAgICAgICAgZ2wu
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkob3B0X3Bvc2l0aW9uTG9jYXRpb24pOworICAgICAgICBn
bC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG9wdF9wb3NpdGlvbkxvY2F0aW9uLCAzLCBnbC5GTE9BVCwg
ZmFsc2UsIDAsIDApOworCisgICAgICAgIHZhciB2ZXJ0ZXhPYmplY3QgPSBnbC5jcmVhdGVCdWZm
ZXIoKTsKKyAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZlcnRleE9iamVj
dCk7CisgICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFy
cmF5KFsKKyAgICAgICAgICAgIDEuMCAqIHMsIDEuMCAqIHMsCisgICAgICAgICAgICAwLjAgKiBz
LCAxLjAgKiBzLAorICAgICAgICAgICAgMC4wICogcywgMC4wICogcywKKyAgICAgICAgICAgIDEu
MCAqIHMsIDEuMCAqIHMsCisgICAgICAgICAgICAwLjAgKiBzLCAwLjAgKiBzLAorICAgICAgICAg
ICAgMS4wICogcywgMC4wICogc10pLCBnbC5TVEFUSUNfRFJBVyk7CisgICAgICAgIGdsLmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KG9wdF90ZXhjb29yZExvY2F0aW9uKTsKKyAgICAgICAgZ2wudmVy
dGV4QXR0cmliUG9pbnRlcihvcHRfdGV4Y29vcmRMb2NhdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNl
LCAwLCAwKTsKKyAgICB9OworICAgIAorICAgIGZ1bmN0aW9uIHJlYWRMb2NhdGlvbih4LCB5KSB7
CisgICAgICAgIHZhciBwaXhlbHMgPSBuZXcgVWludDhBcnJheSgxICogMSAqIDQpOworICAgICAg
ICBnbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHBp
eGVscyk7CisgICAgICAgIHJldHVybiBwaXhlbHM7CisgICAgfTsKKyAgICBmdW5jdGlvbiB0ZXN0
UGl4ZWwoYmxhY2tMaXN0LCB3aGl0ZUxpc3QpIHsKKyAgICAgICAgZnVuY3Rpb24gdGVzdExpc3Qo
bGlzdCwgZXhwZWN0ZWQpIHsKKyAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbGlzdC5s
ZW5ndGg7IG4rKykgeworICAgICAgICAgICAgICAgIHZhciBsID0gbGlzdFtuXTsKKyAgICAgICAg
ICAgICAgICB2YXIgeCA9IC1NYXRoLmZsb29yKGwgKiBjYW52YXMud2lkdGggLyAyKSArIGNhbnZh
cy53aWR0aCAvIDI7CisgICAgICAgICAgICAgICAgdmFyIHkgPSAtTWF0aC5mbG9vcihsICogY2Fu
dmFzLmhlaWdodCAvIDIpICsgY2FudmFzLmhlaWdodCAvIDI7CisgICAgICAgICAgICAgICAgdmFy
IHNvdXJjZSA9IHJlYWRMb2NhdGlvbih4LCB5KTsKKyAgICAgICAgICAgICAgICBpZiAoTWF0aC5h
YnMoc291cmNlWzBdIC0gZXhwZWN0ZWQpID4gMikgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRlc3RMaXN0KGJsYWNrTGlz
dCwgMCkgJiYgdGVzdExpc3Qod2hpdGVMaXN0LCAyNTUpOworICAgIH07CisgICAgZnVuY3Rpb24g
dmVyaWZ5RHJhdyhkcmF3TnVtYmVyLCBzKSB7CisgICAgICAgIHd0dS5kcmF3UXVhZChnbCk7Cisg
ICAgICAgIHZhciBibGFja0xpc3QgPSBbXTsKKyAgICAgICAgdmFyIHdoaXRlTGlzdCA9IFtdOwor
ICAgICAgICB2YXIgcG9pbnRzID0gWzAuMCwgMC4yLCAwLjQsIDAuNiwgMC44LCAxLjBdOworICAg
ICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHBvaW50cy5sZW5ndGg7IG4rKykgeworICAgICAgICAg
ICAgaWYgKHBvaW50c1tuXSA8PSBzKSB7CisgICAgICAgICAgICAgICAgYmxhY2tMaXN0LnB1c2go
cG9pbnRzW25dKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd2hpdGVM
aXN0LnB1c2gocG9pbnRzW25dKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAodGVzdFBpeGVsKGJsYWNrTGlzdCwgd2hpdGVMaXN0KSkgeworICAgICAgICAgICAgdGVzdFBh
c3NlZCgiRHJhdyAiICsgZHJhd051bWJlciArICIgcGFzc2VkIHBpeGVsIHRlc3QiKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkRyYXcgIiArIGRyYXdOdW1iZXIg
KyAiIGZhaWxlZCBwaXhlbCB0ZXN0Iik7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIC8v
IFNldHVwIGFsbCBiaW5kaW5ncworICAgIHNldHVwUXVhZCgxKTsKKyAgICBleHQuYmluZFZlcnRl
eEFycmF5T0VTKHZhbzApOworICAgIHNldHVwUXVhZCgwLjUpOworICAgIGV4dC5iaW5kVmVydGV4
QXJyYXlPRVModmFvMSk7CisgICAgc2V0dXBRdWFkKDAuMjUpOworICAgIAorICAgIC8vIFZlcmlm
eSBkcmF3aW5nCisgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTsKKyAgICB2ZXJpZnlE
cmF3KDAsIDEpOworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvMCk7CisgICAgdmVyaWZ5
RHJhdygxLCAwLjUpOworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvMSk7CisgICAgdmVy
aWZ5RHJhdygyLCAwLjI1KTsKKyAgICAKKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwp
OworICAgIGV4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh2YW8wKTsKKyAgICBleHQuZGVsZXRlVmVy
dGV4QXJyYXlPRVModmFvMSk7Cit9CisKK2Z1bmN0aW9uIHJ1bkRlbGV0ZVRlc3RzKCkgeworICAg
IGRlYnVnKCJUZXN0aW5nIHVzaW5nIGRlbGV0ZWQgYnVmZmVycyByZWZlcmVuY2VkIGJ5IFZBT3Mi
KTsKKworICAgIHZhciBwcm9ncmFtID0gd3R1LnNldHVwUHJvZ3JhbShnbCwgWyJ2c2hhZGVyIiwg
ImZzaGFkZXIiXSwgWyJhX3Bvc2l0aW9uIiwgImFfY29sb3IiXSk7CisgICAgZ2wudXNlUHJvZ3Jh
bShwcm9ncmFtKTsKKworICAgIHZhciBwb3NpdGlvbkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigp
OworICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBwb3NpdGlvbkJ1ZmZlcik7Cisg
ICAgZ2wuYnVmZmVyRGF0YSgKKyAgICAgICAgZ2wuQVJSQVlfQlVGRkVSLAorICAgICAgICBuZXcg
RmxvYXQzMkFycmF5KFsKKyAgICAgICAgICAgMS4wLCAgMS4wLAorICAgICAgICAgIC0xLjAsICAx
LjAsCisgICAgICAgICAgLTEuMCwgLTEuMCwKKyAgICAgICAgICAgMS4wLCAtMS4wXSksCisgICAg
ICAgIGdsLlNUQVRJQ19EUkFXKTsKKworICAgIHZhciBjb2xvcnMgPSBbCisgICAgICBbMjU1LCAg
IDAsICAgMCwgMjU1XSwKKyAgICAgIFsgIDAsIDI1NSwgICAwLCAyNTVdLAorICAgICAgWyAgMCwg
ICAwLCAyNTUsIDI1NV0sCisgICAgICBbICAwLCAyNTUsIDI1NSwgMjU1XQorICAgIF07CisgICAg
dmFyIGNvbG9yQnVmZmVycyA9IFtdOworICAgIHZhciBlbGVtZW50QnVmZmVycyA9IFtdOworICAg
IHZhciB2YW9zID0gW107CisgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGNvbG9ycy5sZW5ndGg7
ICsraWkpIHsKKyAgICAgIHZhciB2YW8gPSBleHQuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAg
ICAgIHZhb3MucHVzaCh2YW8pOworICAgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW8pOwor
ICAgICAgLy8gU2V0IHRoZSBwb3NpdGlvbiBidWZmZXIKKyAgICAgIGdsLmJpbmRCdWZmZXIoZ2wu
QVJSQVlfQlVGRkVSLCBwb3NpdGlvbkJ1ZmZlcik7CisgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheSgwKTsKKyAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMiwgZ2wuRkxPQVQs
IGZhbHNlLCAwLCAwKTsKKworICAgICAgdmFyIGVsZW1lbnRCdWZmZXIgPSBnbC5jcmVhdGVCdWZm
ZXIoKTsKKyAgICAgIGVsZW1lbnRCdWZmZXJzLnB1c2goZWxlbWVudEJ1ZmZlcik7CisgICAgICBn
bC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBlbGVtZW50QnVmZmVyKTsKKyAg
ICAgIGdsLmJ1ZmZlckRhdGEoCisgICAgICAgICAgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsCisg
ICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDIsIDAsIDIsIDNdKSwKKyAgICAgICAgICBn
bC5TVEFUSUNfRFJBVyk7CisKKyAgICAgIC8vIFNldHVwIHRoZSBjb2xvciBhdHRyaWIKKyAgICAg
IHZhciBjb2xvciA9IGNvbG9yc1tpaV07CisgICAgICBpZiAoaWkgPCAzKSB7CisgICAgICAgIHZh
ciBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAgICAgICBjb2xvckJ1ZmZlcnMu
cHVzaChjb2xvckJ1ZmZlcik7CisgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVS
LCBjb2xvckJ1ZmZlcik7CisgICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBu
ZXcgVWludDhBcnJheSgKKyAgICAgICAgICBbIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0s
IGNvbG9yWzNdLAorICAgICAgICAgICAgY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgY29s
b3JbM10sCisgICAgICAgICAgICBjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBjb2xvclsz
XSwKKyAgICAgICAgICAgIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIGNvbG9yWzNdCisg
ICAgICAgICAgXSksIGdsLlNUQVRJQ19EUkFXKTsKKyAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0
cmliQXJyYXkoMSk7CisgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMSwgNCwgZ2wuVU5T
SUdORURfQllURSwgdHJ1ZSwgMCwgMCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBnbC52ZXJ0
ZXhBdHRyaWI0ZigxLCBjb2xvclswXSAvIDI1NSwgY29sb3JbMV0gLyAyNTUsIGNvbG9yWzJdIC8g
MjU1LCBjb2xvclszXSAvIDI1NSk7CisgICAgICB9CisgICAgfQorCisgICAgLy8gZGVsZXRlIHRo
ZSBjb2xvciBidWZmZXJzIEFORCB0aGUgcG9zaXRpb24gYnVmZmVyLgorICAgIGV4dC5iaW5kVmVy
dGV4QXJyYXlPRVMobnVsbCk7CisgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGNvbG9yQnVmZmVy
cy5sZW5ndGg7ICsraWkpIHsKKyAgICAgIGdsLmRlbGV0ZUJ1ZmZlcihjb2xvckJ1ZmZlcnNbaWld
KTsKKyAgICAgIGdsLmRlbGV0ZUJ1ZmZlcihlbGVtZW50QnVmZmVyc1tpaV0pOworICAgIH0KKyAg
ICBnbC5kZWxldGVCdWZmZXIocG9zaXRpb25CdWZmZXIpOworCisgICAgLy8gUmVuZGVyIHdpdGgg
dGhlIGRlbGV0ZWQgYnVmZmVycy4gQXMgdGhleSBhcmUgcmVmZXJlbmNlZCBieSBWQU9zIHRoZXkK
KyAgICAvLyBtdXN0IHN0aWxsIGJlIGFyb3VuZC4KKyAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwg
Y29sb3JzLmxlbmd0aDsgKytpaSkgeworICAgICAgdmFyIGNvbG9yID0gY29sb3JzW2lpXTsKKyAg
ICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvc1tpaV0pOworICAgICAgZ2wuZHJhd0VsZW1l
bnRzKGdsLlRSSUFOR0xFUywgNiwgZ2wuVU5TSUdORURfQllURSwgMCk7CisgICAgICB3dHUuY2hl
Y2tDYW52YXMoZ2wsIGNvbG9yLCAic2hvdWxkIGJlICIgKyBjb2xvcik7CisgICAgfQorCisgICAg
Ly8gQ2xlYW4gdXAuCisgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGNvbG9yQnVmZmVycy5sZW5n
dGg7ICsraWkpIHsKKyAgICAgIGV4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh2YW9zW2lpXSk7Cisg
ICAgfQorfQorCitmdW5jdGlvbiBydW5BcnJheUJ1ZmZlckJpbmRUZXN0cygpIHsKKyAgICBkZWJ1
ZygiVGVzdGluZyB0aGF0IFZBT3MgZG9uJ3QgZWZmZWN0IEFSUkFZX0JVRkZFUiBiaW5kaW5nLiIp
OworCisgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTsKKworICAgIHZhciBwcm9ncmFt
ID0gd3R1LnNldHVwUHJvZ3JhbShnbCwgWyJ2c2hhZGVyIiwgImZzaGFkZXIiXSwgWyJhX2NvbG9y
IiwgImFfcG9zaXRpb24iXSk7CisgICAgZ2wudXNlUHJvZ3JhbShwcm9ncmFtKTsKKworICAgIC8v
IGNyZWF0ZSBzaGFyZWQgZWxlbWVudCBidXVmZmVyCisgICAgdmFyIGVsZW1lbnRCdWZmZXIgPSBn
bC5jcmVhdGVCdWZmZXIoKTsKKyAgICAvLyBiaW5kIHRvIGRlZmF1bHQKKyAgICBnbC5iaW5kQnVm
ZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBlbGVtZW50QnVmZmVyKTsKKyAgICBnbC5idWZm
ZXJEYXRhKAorICAgICAgICBnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwKKyAgICAgICAgbmV3IFVp
bnQ4QXJyYXkoWzAsIDEsIDIsIDAsIDIsIDNdKSwKKyAgICAgICAgZ2wuU1RBVElDX0RSQVcpOwor
CisgICAgLy8gZmlyc3QgY3JlYXRlIHRoZSBidWZmZXJzIGZvciBubyB2YW8gZHJhdy4KKyAgICB2
YXIgbm9uVkFPQ29sb3JCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICBnbC5iaW5kQnVm
ZmVyKGdsLkFSUkFZX0JVRkZFUiwgbm9uVkFPQ29sb3JCdWZmZXIpOworICAgIGdsLmJ1ZmZlckRh
dGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgVWludDhBcnJheSgKKyAgICAgIFsgMCwgMjU1LCAwLCAy
NTUsCisgICAgICAgIDAsIDI1NSwgMCwgMjU1LAorICAgICAgICAwLCAyNTUsIDAsIDI1NSwKKyAg
ICAgICAgMCwgMjU1LCAwLCAyNTUsCisgICAgICBdKSwgZ2wuU1RBVElDX0RSQVcpOworCisgICAg
Ly8gc2hhcmVkIHBvc2l0aW9uIGJ1ZmZlci4KKyAgICB2YXIgcG9zaXRpb25CdWZmZXIgPSBnbC5j
cmVhdGVCdWZmZXIoKTsKKyAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgcG9zaXRp
b25CdWZmZXIpOworICAgIGdsLmJ1ZmZlckRhdGEoCisgICAgICAgIGdsLkFSUkFZX0JVRkZFUiwK
KyAgICAgICAgbmV3IEZsb2F0MzJBcnJheShbCisgICAgICAgICAgIDEuMCwgIDEuMCwKKyAgICAg
ICAgICAtMS4wLCAgMS4wLAorICAgICAgICAgIC0xLjAsIC0xLjAsCisgICAgICAgICAgIDEuMCwg
LTEuMF0pLAorICAgICAgICBnbC5TVEFUSUNfRFJBVyk7CisKKyAgICAvLyBhdHRhY2ggcG9zaXRp
b24gYnVmZmVyIHRvIGRlZmF1bHQKKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgxKTsK
KyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7
CisKKyAgICAvLyBub3cgY3JlYXRlIHZhbworICAgIHZhciB2YW8gPSBleHQuY3JlYXRlVmVydGV4
QXJyYXlPRVMoKTsKKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKHZhbyk7CisKKyAgICAvLyBh
dHRhY2ggdGhlIHBvc2l0aW9uIGJ1ZmZlciB2YW8KKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheSgxKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEsIDIsIGdsLkZMT0FULCBmYWxz
ZSwgMCwgMCk7CisKKyAgICB2YXIgdmFvQ29sb3JCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsK
KyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQ
b2ludGVyKDAsIDQsIGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIDAsIDApOworICAgIGdsLmJpbmRC
dWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2YW9Db2xvckJ1ZmZlcik7CisgICAgZ2wuYnVmZmVyRGF0
YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBVaW50OEFycmF5KAorICAgICAgWyAyNTUsIDAsIDAsIDI1
NSwKKyAgICAgICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAg
ICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgIF0pLCBnbC5TVEFUSUNfRFJBVyk7CisgICAgZ2wu
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigw
LCA0LCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCAwLCAwKTsKKworICAgIC8vIG5vdyBzZXQgdGhl
IGJ1ZmZlciBiYWNrIHRvIHRoZSBub25WQU9Db2xvckJ1ZmZlcgorICAgIGdsLmJpbmRCdWZmZXIo
Z2wuQVJSQVlfQlVGRkVSLCBub25WQU9Db2xvckJ1ZmZlcik7CisKKyAgICAvLyBiaW5kIHRvIHZh
bworICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGVsZW1lbnRCdWZm
ZXIpOworICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX0JZ
VEUsIDApOworICAgIHd0dS5jaGVja0NhbnZhcyhnbCwgWzI1NSwgMCwgMCwgMjU1XSwgInNob3Vs
ZCBiZSByZWQiKTsKKworICAgIC8vIHVuYmluZCB2YW8KKyAgICBleHQuYmluZFZlcnRleEFycmF5
T0VTKG51bGwpOworCisgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgbm9uVkFPQ29sb3JCdWZmZXIg
c2hvdWxkIGJlIHN0aWxsIGJlIGJvdW5kLgorICAgIC8vIElmIHRoZSBXZWJHTCBpbXBsIGlzIGVt
dWxhdGluZyBWQU9zIGl0IG11c3QgbWFrZSBzdXJlCisgICAgLy8gaXQgY29ycmVjdGx5IHJlc3Rv
cmVzIHRoaXMgYmluZGluZy4KKyAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAg
ICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIGdsLlVOU0lHTkVEX0JZVEUsIHRydWUsIDAs
IDApOworICAgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIDYsIGdsLlVOU0lHTkVEX0JZ
VEUsIDApOworICAgIHd0dS5jaGVja0NhbnZhcyhnbCwgWzAsIDI1NSwgMCwgMjU1XSwgInNob3Vs
ZCBiZSBncmVlbiIpOworfQorCitkZWJ1ZygiIik7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGZlMmNlMThlYWJhMzVhMGQ0OTBiZmU0
YjA2MTdkMWI3YTY4MGNmMjcuLmE3NGRiNGNmZDZhODE5NTQzNDZiMjIwOWYyZWQ4NDE4NDg4M2Jk
NWEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3Rh
dGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9u
cwpAQCAtMzYwNCw2ICszNjA0LDExIEBAIEJVR1dLOTY1NDkgTUFDIDogcGxhdGZvcm0vY2hyb21p
dW0vdmlydHVhbC9ncHUvZmFzdC9oaWRwaS92aWRlby1jb250cm9scy1pbi1oaWRwCiBCVUdXSzk2
NjI4IExJT04gOiBmYXN0L2ZyYW1lcy9jYWxjdWxhdGUtb3JkZXIuaHRtbCA9IFBBU1MgVEVYVAog
QlVHV0s5NjU1MCA6IGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL3NlZWstdG8tZW5kLWFm
dGVyLWR1cmF0aW9uLWNoYW5nZS5odG1sID0gUEFTUyBUSU1FT1VUCiBCVUdXSzk2NDE2IE1BQyA6
IGNvbXBvc2l0aW5nL292ZXJmbG93L292ZXJmbG93LXNjYWxlZC1kZXNjZW5kYW50LW92ZXJsYXBw
aW5nLmh0bWwgPSBJTUFHRQorCisvLyBFeHBlY3RlZCB0byBmYWlsIHVudGlsIGV4dGVuc2lvbiBp
bXBsZW1lbnRhdGlvbiBsYW5kcworQlVHV0s5Njk2MSA6IGZhc3QvY2FudmFzL3dlYmdsL29lcy12
ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWwgPSBQQVNTIFRFWFQKK0JVR1dLOTY5NjEgOiBwbGF0Zm9y
bS9jaHJvbWl1bS92aXJ0dWFsL2dwdS9mYXN0L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5
LW9iamVjdC5odG1sID0gUEFTUyBURVhUCisKIEJVR1dLOTY3MjUgTElOVVggTUFDIFdJTiA6IGh0
dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL3ZpZGVvLW1lZGlhLXNvdXJjZS1zdGF0ZS1jaGFu
Z2VzLmh0bWwgPSBQQVNTIFRFWFQKIEJVR0NSNjM5MjEgOiBwbGF0Zm9ybS9jaHJvbWl1bS92aXJ0
dWFsL2dwdS9mYXN0L2NhbnZhcy9jYW52YXMtZmlsbFBhdGgtc2hhZG93Lmh0bWwgPSBURVhUCiBC
VUdXSzc3NTUwIDogcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9ncHUvY2FudmFzL3BoaWxpcC90
ZXN0cy8yZC5ncmFkaWVudC5pbnRlcnBvbGF0ZS5jb2xvdXJhbHBoYS5odG1sID0gVEVYVApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9lZmwvU2tpcHBlZAppbmRleCA5NTAxMzVjZjg2MmE5ZDdhYTBkNDY1MmVhM2I4OTMx
YWIyNzFhZTNkLi5iMWMwYTYzYzQzNDg0OWRiOTVlNDNmMzM5N2QzZDQ0NTk2MGU1MzFlIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZApAQCAtNzc1LDMgKzc3NSw2IEBAIGluc3BlY3Rvci9leHRl
bnNpb25zL2V4dGVuc2lvbnMtZXZhbC1jb250ZW50LXNjcmlwdC5odG1sCiAKICMgRU5BQkxFKFdJ
REdFVF9SRUdJT04pIGlzIGRpc2FibGVkCiBmYXN0L2Nzcy93aWRnZXQtcmVnaW9uLXBhcnNlci5o
dG1sCisKKyMgaHR0cDovL3dlYmtpdC5vcmcvYi85NjgyOAorZmFzdC9jYW52YXMvd2ViZ2wvb2Vz
LXZlcnRleC1hcnJheS1vYmplY3QuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrLXdrMi9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrLXdrMi9Ta2lwcGVk
CmluZGV4IDdiNTM2ODg1YjNhNzQwYmQzMjJmN2FhMzE0YWFkMWRjNGNkMmZhMTguLjE4ZDViZDBh
YTdiNGVkZTg0NDRkZTMwZWYzMmVmMmY4OTIyNmZmZDggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay13azIvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGst
d2syL1NraXBwZWQKQEAgLTQxMSw2ICs0MTEsOSBAQCB0cmFuc2l0aW9ucy9jaGFuZ2UtdmFsdWVz
LWR1cmluZy10cmFuc2l0aW9uLmh0bWwKIHRyYW5zaXRpb25zL2V4dHJhLXRyYW5zaXRpb24uaHRt
bAogdHJhbnNpdGlvbnMvaW50ZXJydXB0ZWQtYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi5odG1sCiAK
KyMgaHR0cDovL3dlYmtpdC5vcmcvYi85NjgyOAorZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRl
eC1hcnJheS1vYmplY3QuaHRtbAorCiAjIFtOYXZpZ2F0aW9uIFRpbWluZ10gUmVtb3ZlIG9sZC1z
dHlsZSBMYXlvdXRUZXN0cwogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTExNTgKIGZhc3QvZG9tL25hdmlnYXRpb24tdHlwZS1iYWNrLWZvcndhcmQuaHRtbApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvU2tpcHBlZAppbmRleCBjOWJiYjAxZDJmM2NmMjQ0MmRiMzBmYjJkMTAxZWVh
NGNiNjgwYjM2Li5kYWJmNGVhOGI5NjMxNmUwNGZlZDZmMTlmYWM0OGRlMTYxMzAzOWU1IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZApAQCAtMTA0OCw2ICsxMDQ4LDkgQEAgZmFzdC9jYW52YXMv
d2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC12aWRlby5odG1sCiAjIFNlbmRp
bmcgdGhlIG1vdXNlIGRvd24gZXZlbnQgdG8gdGhlIHNjcm9sbGJhciBzdGFydHMgYSBuZXN0ZWQg
cnVuIGxvb3Agd2hpY2ggY2F1c2VzIGEgaGFuZy4KIGZhc3QvZXZlbnRzL21vdXNlZG93bi1pbi1z
dWJmcmFtZS1zY3JvbGxiYXIuaHRtbAogCisjIGh0dHA6Ly93ZWJraXQub3JnL2IvOTY4MjgKK2Zh
c3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWwKKwogIyAtLS0gV2Vi
S2l0MSBvbmx5IC0tLQogaHR0cC90ZXN0cy9taXNjL3dpbGxDYWNoZVJlc3BvbnNlLWRlbGVnYXRl
LWNhbGxiYWNrLmh0bWwKIGh0dHAvdGVzdHMvbXVsdGlwYXJ0L2xvYWQtbGFzdC1ub24taHRtbC1m
cmFtZS5waHAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9Ta2lwcGVkIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1NraXBwZWQKaW5kZXggYzFkYWIyN2E0YTY2ZGEzZmQ1
NjQwY2IzMDM4YWRjY2RhOThhMWExNi4uYjZiNjJjN2U1ODAyZDkzMjRjMzE1ZDk0NjgwZWU0YmY4
YjI2MGQwMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1NraXBwZWQKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1NraXBwZWQKQEAgLTE5OSw2ICsxOTksNyBAQCBm
YXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLmh0bWwKIGZhc3QvY2FudmFzL3dlYmds
L3ZpZXdwb3J0LXVuY2hhbmdlZC11cG9uLXJlc2l6ZS5odG1sCiBmYXN0L2NhbnZhcy93ZWJnbC93
ZWJnbC1hcnJheS1pbnZhbGlkLXJhbmdlcy5odG1sCiBmYXN0L2NhbnZhcy93ZWJnbC93ZWJnbC1z
cGVjaWZpYy5odG1sCitmYXN0L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC5o
dG1sCiBmYXN0L2hhcm5lc3Mvb3ZlcnJpZGUtcHJlZmVyZW5jZXMtMi5odG1sCiBmYXN0L2ltYWdl
cy9hbmltYXRlZC1naWYtcmVzdG9yZWQtZnJvbS1iZmNhY2hlLmh0bWwKIGZhc3QvbG9hZGVyL2Rp
c3BsYXktaW1hZ2UtdW5zZXQtYWxsb3dzLWNhY2hlZC1pbWFnZS1sb2FkLmh0bWwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165206</attachid>
            <date>2012-09-21 15:15:01 -0700</date>
            <delta_ts>2012-09-21 15:29:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96578-20120921151425.patch</filename>
            <type>text/plain</type>
            <size>39353</size>
            <attacher name="Brandon Jones">bajones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA4MDY3ZTA2YzZlMjky
MDNiODY0MDE1MmI4OTA2NjA4Mjc1NDk1ODE1Li5hZWY1MWQ2ZTMwZWUxNGY2ODNhMWE3NDk2Njk5
NDI3N2Q3Zjk3MDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0wOS0yMSAg
QnJhbmRvbiBKb25lcyAgPGJham9uZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9y
dCBmb3IgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgaW4gY2hyb21pdW0KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NTc4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgY29kZSB0byBhbGxvdyBjYWxs
cyB0byB0aGUgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgZXh0ZW5zaW9uIHRvIGludGVyZmFjZQor
ICAgICAgICBwcm9wZXJseSB3aXRoIHRoZSBjaHJvbWl1bSBXZWJHTCBpbXBsZW1lbnRhdGlvbi4g
CisKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAg
ICAgICAgKFdlYkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6YmluZFZlcnRleEFycmF5T0VTKToKKwogMjAxMi0w
OS0yMCAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBbQ2hy
b21pdW0gXSBBZGQgbmV3IGxvY2FsaXplZCBzdHJpbmcsIE90aGVyRGF0ZUxhYmVsLCB0byBiZSB1
c2VkIGluIGlucHV0IHR5cGU9ZGF0ZSBkYXRhbGlzdCBVSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNkMzU4OWU2
N2FlMGRkNzAzYmI0MDkwODA3OGU0ZjE1YWYyZTI2ZWQuLmVhMzg2OTQ4YWUyMTE2NWQ4OTlhYWYx
MTA5NTA0MDA5Mjg5YjJhZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMi0wOS0y
MSAgQnJhbmRvbiBKb25lcyAgPGJham9uZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgc3Vw
cG9ydCBmb3IgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgaW4gY2hyb21pdW0KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NTc4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIGJhc2ljIHJlZmVyZW5j
ZSBjb3VudGluZyB0byBXZWJHTEJ1ZmZlciBvYmplY3RzIHRvIHNhdGlzZnkgc3BlYyByZXF1aXJl
bWVudHMKKyAgICAgICAgZm9yIHRoZSBPRVNfdmVydGV4X2FycmF5X29iamVjdCBleHRlbnNpb24u
IEFkZGVkIGNvZGUgdG8gYWxsb3cgY2FsbHMgdG8gdGhlCisgICAgICAgIE9FU192ZXJ0ZXhfYXJy
YXlfb2JqZWN0IGV4dGVuc2lvbiB0byBpbnRlcmZhY2UgcHJvcGVybHkgd2l0aCB0aGUgY2hyb21p
dW0gV2ViR0wKKyAgICAgICAgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgVGVzdDogZmFzdC9j
YW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1vYmplY3QuaHRtbAorCisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2lu
dGVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OnNldEVsZW1l
bnRBcnJheUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmg6CisgICAgICAgIChXZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6
OmdldFZlcnRleEF0dHJpYlN0YXRlU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
c3VwcG9ydC9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zM0RDaHJvbWl1bTo6Y3JlYXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmRlbGV0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjppc1ZlcnRleEFycmF5T0VTKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpiaW5kVmVydGV4QXJyYXlPRVMpOgor
CiAyMDEyLTA5LTIwICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
SW1wbGVtZW50IGFic29sdXRlbHkgcG9zaXRpb25lZCBmbGV4IGl0ZW1zCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmggYi9T
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgKaW5k
ZXggMzEyZDRmYWI3YTYyOTQ1N2ZjY2FlOWNlNzI4MTdhMzJkOTA2ZTVmNi4uODJkM2QzNmM4YWI1
NGVkMGEzYjE4NGM0MWZjMmE4NjFhZDU1ZTc4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtNDQzLDYgKzQ0
MywxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHB1c2hHcm91cE1hcmtlckVYVChjb25z
dCBXR0MzRGNoYXIqIG1hcmtlcikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBvcEdyb3VwTWFya2Vy
RVhUKHZvaWQpIHsgfQogCisgICAgLy8gR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKyAgICB2
aXJ0dWFsIFdlYkdMSWQgY3JlYXRlVmVydGV4QXJyYXlPRVMoKSB7IHJldHVybiAwOyB9CisgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFdlYkdMSWQgYXJyYXkpIHsgfQorICAg
IHZpcnR1YWwgV0dDM0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMoV2ViR0xJZCBhcnJheSkgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFdlYkdM
SWQgYXJyYXkpIHsgfQorCiAgICAgR3JHTEludGVyZmFjZSogY3JlYXRlR3JHTEludGVyZmFjZSgp
OwogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAyNGI5YzMzZjkzMjJjYmM3YmZlZjE0Y2JmYTQy
ZTEyZTI1NDE0ZGI5Li41ODJlZDVkMzk4YWMzZjI0N2ViNmFhZWI2ZWVkYTg1ZTI5NGU1Yzg0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5jcHAKQEAgLTE1NDQsMjIgKzE1NDQsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAobV9ib3VuZEFycmF5QnVmZmVyID09IGJ1ZmZlcikKICAgICAgICAgbV9ib3VuZEFycmF5
QnVmZmVyID0gMDsKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlciA9
IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAg
aWYgKGVsZW1lbnRBcnJheUJ1ZmZlciA9PSBidWZmZXIpCi0gICAgICAgIG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+c2V0RWxlbWVudEFycmF5QnVmZmVyKDApOwotICAgIGlmICghaXNHTEVTMkNv
bXBsaWFudCgpKSB7Ci0gICAgICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0
dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0
cmliU3RhdGUoMCk7Ci0gICAgICAgIGlmIChidWZmZXIgPT0gc3RhdGUuYnVmZmVyQmluZGluZykg
ewotICAgICAgICAgICAgc3RhdGUuYnVmZmVyQmluZGluZyA9IG1fdmVydGV4QXR0cmliMEJ1ZmZl
cjsKLSAgICAgICAgICAgIHN0YXRlLmJ5dGVzUGVyRWxlbWVudCA9IDA7Ci0gICAgICAgICAgICBz
dGF0ZS5zaXplID0gNDsKLSAgICAgICAgICAgIHN0YXRlLnR5cGUgPSBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQ7Ci0gICAgICAgICAgICBzdGF0ZS5ub3JtYWxpemVkID0gZmFsc2U7Ci0gICAgICAg
ICAgICBzdGF0ZS5zdHJpZGUgPSAxNjsKLSAgICAgICAgICAgIHN0YXRlLm9yaWdpbmFsU3RyaWRl
ID0gMDsKLSAgICAgICAgICAgIHN0YXRlLm9mZnNldCA9IDA7Ci0gICAgICAgIH0KLSAgICB9CisK
KyAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnVuYmluZEJ1ZmZlcihidWZmZXIpOwogfQog
CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFt
ZWJ1ZmZlciogZnJhbWVidWZmZXIpCkBAIC00MzgzLDE3ICs0MzY5LDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0Rp
bnQgc2l6ZSwgR0MKICAgICB9CiAgICAgR0MzRHNpemVpIGJ5dGVzUGVyRWxlbWVudCA9IHNpemUg
KiB0eXBlU2l6ZTsKIAotICAgIEdDM0RzaXplaSB2YWxpZGF0ZWRTdHJpZGUgPSBzdHJpZGUgPyBz
dHJpZGUgOiBieXRlc1BlckVsZW1lbnQ7Ci0KLSAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
OjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKLSAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV9i
b3VuZEFycmF5QnVmZmVyOwotICAgIHN0YXRlLmJ5dGVzUGVyRWxlbWVudCA9IGJ5dGVzUGVyRWxl
bWVudDsKLSAgICBzdGF0ZS5zaXplID0gc2l6ZTsKLSAgICBzdGF0ZS50eXBlID0gdHlwZTsKLSAg
ICBzdGF0ZS5ub3JtYWxpemVkID0gbm9ybWFsaXplZDsKLSAgICBzdGF0ZS5zdHJpZGUgPSB2YWxp
ZGF0ZWRTdHJpZGU7Ci0gICAgc3RhdGUub3JpZ2luYWxTdHJpZGUgPSBzdHJpZGU7Ci0gICAgc3Rh
dGUub2Zmc2V0ID0gc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KTsKKyAgICBtX2JvdW5k
VmVydGV4QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBieXRlc1BlckVs
ZW1lbnQsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8R0MzRGlu
dHB0cj4ob2Zmc2V0KSwgbV9ib3VuZEFycmF5QnVmZmVyKTsKICAgICBtX2NvbnRleHQtPnZlcnRl
eEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3Rh
dGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggNjAyM2I0NDYyNmI2Y2U5ZWM1NWMyZGZlZWQ0YWQzNjIy
NjAzMTNmMS4uNDVkZjZhNTgyNWY0NjhlODZkZWIyODdjYzg1ZjBjNmEyNjc4OTUyYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgK
QEAgLTMyMiw2ICszMjIsNyBAQCBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFdlYkdMRGVidWdT
aGFkZXJzOwogICAgIGZyaWVuZCBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzsKICAg
ICBmcmllbmQgY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2s7
CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM7CiAKICAgICBXZWJH
TFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOwogICAgIHZvaWQgaW5p
dGlhbGl6ZU5ld0NvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKaW5kZXggNGFhMDNiOGZlYTE1MTli
OTcyMjM3MDRjYWZiZmE3NjM4MTMyYWYyMi4uYTk4ZDA5MmU4N2Q0ZWMyNmFjODI4Y2MyNGQzNTVm
OTcwZTRjMzI1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKQEAgLTcyLDYgKzcyLDc1IEBAIHZvaWQgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6ZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dDNkLCBQCiAgICAgICAgIGV4dGVuc2lvbnMtPmRlbGV0ZVZlcnRleEFycmF5T0VT
KG9iamVjdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGlmIChtX2JvdW5kRWxlbWVu
dEFycmF5QnVmZmVyKQorICAgICAgICBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5vbkRldGFj
aGVkKGNvbnRleHQzZCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmVydGV4QXR0
cmliU3RhdGUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVmVydGV4QXR0cmliU3RhdGUmIHN0YXRl
ID0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpXTsKKyAgICAgICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRp
bmcpCisgICAgICAgICAgICBzdGF0ZS5idWZmZXJCaW5kaW5nLT5vbkRldGFjaGVkKGNvbnRleHQz
ZCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OnNldEVsZW1l
bnRBcnJheUJ1ZmZlcihQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBidWZmZXIpCit7CisgICAgaWYg
KGJ1ZmZlcikKKyAgICAgICAgYnVmZmVyLT5vbkF0dGFjaGVkKCk7CisgICAgaWYgKG1fYm91bmRF
bGVtZW50QXJyYXlCdWZmZXIpCisgICAgICAgIG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPm9u
RGV0YWNoZWQoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICBtX2JvdW5kRWxl
bWVudEFycmF5QnVmZmVyID0gYnVmZmVyOworICAgIAorfQorCit2b2lkIFdlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVM6OnNldFZlcnRleEF0dHJpYlN0YXRlKAorICAgIEdDM0R1aW50IGluZGV4LCBH
QzNEc2l6ZWkgYnl0ZXNQZXJFbGVtZW50LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdD
M0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0
LCBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBidWZmZXIpCit7CisgICAgR0MzRHNpemVpIHZhbGlk
YXRlZFN0cmlkZSA9IHN0cmlkZSA/IHN0cmlkZSA6IGJ5dGVzUGVyRWxlbWVudDsKKworICAgIFZl
cnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fdmVydGV4QXR0cmliU3RhdGVbaW5kZXhdOworCisg
ICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgYnVmZmVyLT5vbkF0dGFjaGVkKCk7CisgICAgaWYgKHN0
YXRlLmJ1ZmZlckJpbmRpbmcpCisgICAgICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmctPm9uRGV0YWNo
ZWQoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpKTsKKworICAgIHN0YXRlLmJ1ZmZlckJp
bmRpbmcgPSBidWZmZXI7CisgICAgc3RhdGUuYnl0ZXNQZXJFbGVtZW50ID0gYnl0ZXNQZXJFbGVt
ZW50OworICAgIHN0YXRlLnNpemUgPSBzaXplOworICAgIHN0YXRlLnR5cGUgPSB0eXBlOworICAg
IHN0YXRlLm5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOworICAgIHN0YXRlLnN0cmlkZSA9IHZhbGlk
YXRlZFN0cmlkZTsKKyAgICBzdGF0ZS5vcmlnaW5hbFN0cmlkZSA9IHN0cmlkZTsKKyAgICBzdGF0
ZS5vZmZzZXQgPSBvZmZzZXQ7Cit9CisKK3ZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
dW5iaW5kQnVmZmVyKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IGJ1ZmZlcikKK3sKKyAgICBpZiAo
bV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlciA9PSBidWZmZXIpIHsKKyAgICAgICAgbV9ib3VuZEVs
ZW1lbnRBcnJheUJ1ZmZlci0+b25EZXRhY2hlZChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNE
KCkpOworICAgICAgICBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyID0gMDsKKyAgICB9CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmVydGV4QXR0cmliU3RhdGUuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgVmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV92ZXJ0ZXhBdHRyaWJTdGF0
ZVtpXTsKKyAgICAgICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcgPT0gYnVmZmVyKSB7CisgICAg
ICAgICAgICBidWZmZXItPm9uRGV0YWNoZWQoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgp
KTsKKworICAgICAgICAgICAgaWYgKCFpICYmICFjb250ZXh0KCktPmlzR0xFUzJDb21wbGlhbnQo
KSkgeworICAgICAgICAgICAgICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmcgPSBjb250ZXh0KCktPm1f
dmVydGV4QXR0cmliMEJ1ZmZlcjsKKyAgICAgICAgICAgICAgICBzdGF0ZS5idWZmZXJCaW5kaW5n
LT5vbkF0dGFjaGVkKCk7CisgICAgICAgICAgICAgICAgc3RhdGUuYnl0ZXNQZXJFbGVtZW50ID0g
MDsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zaXplID0gNDsKKyAgICAgICAgICAgICAgICBzdGF0
ZS50eXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICAgICAgICAgIHN0YXRl
Lm5vcm1hbGl6ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zdHJpZGUgPSAxNjsK
KyAgICAgICAgICAgICAgICBzdGF0ZS5vcmlnaW5hbFN0cmlkZSA9IDA7CisgICAgICAgICAgICAg
ICAgc3RhdGUub2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IHN0YXRlLmJ1ZmZlckJpbmRpbmcgPSAwOworICAgICAgICB9CisgICAgfQogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0
T0VTLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0
T0VTLmgKaW5kZXggNzVhZTQyZmY3MjVhY2QxZGZlZGJjZTZhMGJjOTJkM2M0MDI4ZjQzNS4uYjY2
MGRlNTg4MTMxMzJkMGNhNTllMjliZjRlZDk0NDU5ZjFjYzkyYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaApAQCAt
NzYsOSArNzYsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGFzRXZlckJlZW5Cb3VuZCgpIHsg
bV9oYXNFdmVyQmVlbkJvdW5kID0gdHJ1ZTsgfQogICAgIAogICAgIFBhc3NSZWZQdHI8V2ViR0xC
dWZmZXI+IGdldEVsZW1lbnRBcnJheUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRFbGVt
ZW50QXJyYXlCdWZmZXI7IH0KLSAgICB2b2lkIHNldEVsZW1lbnRBcnJheUJ1ZmZlcihQYXNzUmVm
UHRyPFdlYkdMQnVmZmVyPiBidWZmZXIpIHsgbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlciA9IGJ1
ZmZlcjsgfQorICAgIHZvaWQgc2V0RWxlbWVudEFycmF5QnVmZmVyKFBhc3NSZWZQdHI8V2ViR0xC
dWZmZXI+KTsKICAgICAKICAgICBWZXJ0ZXhBdHRyaWJTdGF0ZSYgZ2V0VmVydGV4QXR0cmliU3Rh
dGUoaW50IGluZGV4KSB7IHJldHVybiBtX3ZlcnRleEF0dHJpYlN0YXRlW2luZGV4XTsgfQorICAg
IHZvaWQgc2V0VmVydGV4QXR0cmliU3RhdGUoR0MzRHVpbnQsIEdDM0RzaXplaSwgR0MzRGludCwg
R0MzRGVudW0sIEdDM0Rib29sZWFuLCBHQzNEc2l6ZWksIEdDM0RpbnRwdHIsIFBhc3NSZWZQdHI8
V2ViR0xCdWZmZXI+KTsKKyAgICB2b2lkIHVuYmluZEJ1ZmZlcihQYXNzUmVmUHRyPFdlYkdMQnVm
ZmVyPik7CiAKIHByaXZhdGU6CiAgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhXZWJHTFJl
bmRlcmluZ0NvbnRleHQqLCBWYW9UeXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvRXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9FeHRlbnNpb25zM0RDaHJvbWl1bS5j
cHAKaW5kZXggOTQxMjI3NGM3NjI4MzVjNTlmOWMwMDc1ZTU0NmQyOTczNzcyNWFjZC4uMTdjMzAy
MTgzMGEyMGIyNGE0ZjdjNmVlNTEyMmFiYTFmY2IyMzljYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9FeHRlbnNpb25z
M0RDaHJvbWl1bS5jcHAKQEAgLTk3LDIwICs5NywyMiBAQCB2b2lkIEV4dGVuc2lvbnMzRENocm9t
aXVtOjp1bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShjb25zdCB2b2lkKiBkYXRhKQogCiBQbGF0
Zm9ybTNET2JqZWN0IEV4dGVuc2lvbnMzRENocm9taXVtOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygp
CiB7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5j
cmVhdGVWZXJ0ZXhBcnJheU9FUygpOwogfQogCi12b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpk
ZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KQordm9pZCBFeHRlbnNpb25zM0RD
aHJvbWl1bTo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKIHsK
KyAgICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+ZGVsZXRlVmVydGV4QXJyYXlPRVMoYXJyYXkp
OwogfQogCi1HQzNEYm9vbGVhbiBFeHRlbnNpb25zM0RDaHJvbWl1bTo6aXNWZXJ0ZXhBcnJheU9F
UyhQbGF0Zm9ybTNET2JqZWN0KQorR0MzRGJvb2xlYW4gRXh0ZW5zaW9uczNEQ2hyb21pdW06Omlz
VmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKIHsKLSAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmlzVmVydGV4QXJyYXlPRVMoYXJy
YXkpOwogfQogCi12b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpiaW5kVmVydGV4QXJyYXlPRVMo
UGxhdGZvcm0zRE9iamVjdCkKK3ZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmJpbmRWZXJ0ZXhB
cnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQogeworICAgIG1fcHJpdmF0ZS0+d2ViQ29u
dGV4dCgpLT5iaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOwogfQogCiBTdHJpbmcgRXh0ZW5zaW9u
czNEQ2hyb21pdW06OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2Jq
ZWN0IHNoYWRlcikKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCBlYzUxODNlYTljNDdhNTg4ZjQxZDY1YzRmMTAwMzViNzZiNzlk
OTliLi40ZDFmNGFhNDJlNmNiZDEzZDRiM2E4NDYxOWUxZjU3M2MxNzRhMzY2IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTkgQEAKKzIwMTItMDktMjEgIEJyYW5kb24gSm9uZXMgIDxiYWpvbmVzQGdvb2dsZS5j
b20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IGlu
IGNocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NjU3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEJyb3VnaHQgb3ZlciBLSFJPTk9TIGNvbmZvcm1hbmNlIHRlc3QgZm9yIE9FU192ZXJ0ZXhfYXJy
YXlfb2JqZWN0CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5
LW9iamVjdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmds
L29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2VmbC9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay13azIvU2tpcHBlZDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93azIvU2tpcHBl
ZDoKKwogMjAxMi0wOS0yMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBydW4tcGVyZi10ZXN0cyBzaG91bGQgcmVjb3JkIGluZGl2aWR1YWwgdmFsdWUgaW5zdGVh
ZCBvZiBzdGF0aXN0aWNzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzdhYmFkZDc4MWI2NGZiZDYyMTY0YzcxYTdiOTYzNmIyMDg3ZjYyOQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXkt
b2JqZWN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUwIEBACitUaGlzIHRlc3QgdmVyaWZpZXMg
dGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IGV4dGVuc2lv
biwgaWYgaXQgaXMgYXZhaWxhYmxlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyBXZWJHTCBjb250ZXh0IGV4aXN0cworVGVzdGluZyBiaW5kaW5nIGVudW0gd2l0aCBleHRl
bnNpb24gZGlzYWJsZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElE
X0VOVU0gOiBWRVJURVhfQVJSQVlfQklORElOR19PRVMgc2hvdWxkIG5vdCBiZSBxdWVyeWFibGUg
aWYgZXh0ZW5zaW9uIGlzIGRpc2FibGVkCitQQVNTIFN1Y2Nlc3NmdWxseSBlbmFibGVkIE9FU192
ZXJ0ZXhfYXJyYXlfb2JqZWN0IGV4dGVuc2lvbgorUEFTUyBPRVNfdmVydGV4X2FycmF5X29iamVj
dCBsaXN0ZWQgYXMgc3VwcG9ydGVkIGFuZCBnZXRFeHRlbnNpb24gc3VjY2VlZGVkCitUZXN0aW5n
IGJpbmRpbmcgZW51bSB3aXRoIGV4dGVuc2lvbiBlbmFibGVkCitQQVNTIGV4dC5WRVJURVhfQVJS
QVlfQklORElOR19PRVMgaXMgMHg4NUI1CitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiBWRVJURVhfQVJSQVlfQklORElOR19PRVMgcXVlcnkgc2hvdWxkIHN1Y2Nl
ZWQgaWYgZXh0ZW5zaW9uIGlzIGVuYWJsZQorUEFTUyBEZWZhdWx0IHZhbHVlIG9mIFZFUlRFWF9B
UlJBWV9CSU5ESU5HX09FUyBpcyBudWxsCitUZXN0aW5nIGJpbmRpbmcgYSBWQU8KK1BBU1MgZ2wu
Z2V0UGFyYW1ldGVyKGV4dC5WRVJURVhfQVJSQVlfQklORElOR19PRVMpIGlzIG51bGwKK1BBU1Mg
Z2wuZ2V0UGFyYW1ldGVyKGV4dC5WRVJURVhfQVJSQVlfQklORElOR19PRVMpIGlzIGV4cGVjdGVk
IFZBTworUEFTUyBnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUykg
aXMgZXhwZWN0ZWQgVkFPCitQQVNTIGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJ
TkRJTkdfT0VTKSBpcyBudWxsCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogSU5W
QUxJRF9PUEVSQVRJT04gOiBiaW5kaW5nIGEgZGVsZXRlZCB2ZXJ0ZXggYXJyYXkgb2JqZWN0CitQ
QVNTIGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSBpcyBudWxs
CitUZXN0aW5nIG9iamVjdCBjcmVhdGlvbgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SIDogY3JlYXRlVmVydGV4QXJyYXlPRVMgc2hvdWxkIG5vdCBzZXQgYW4gZXJy
b3IKK1BBU1MgdmFvIGlzIG5vbi1udWxsLgorUEFTUyBleHQuaXNWZXJ0ZXhBcnJheU9FUyh2YW8p
IGlzIGZhbHNlCitQQVNTIGV4dC5pc1ZlcnRleEFycmF5T0VTKHZhbykgaXMgdHJ1ZQorUEFTUyBl
eHQuaXNWZXJ0ZXhBcnJheU9FUyh2YW8pIGlzIHRydWUKK1BBU1MgZXh0LmlzVmVydGV4QXJyYXlP
RVMoKSBpcyBmYWxzZQorUEFTUyBleHQuaXNWZXJ0ZXhBcnJheU9FUyhudWxsKSBpcyBmYWxzZQor
VGVzdGluZyBhdHRyaWJ1dGVzIHdvcmsgYWNyb3NzIGJpbmRpbmdzCitQQVNTIEFsbCBhdHRyaWJ1
dGVzIHByZXNlcnZlZCBhY3Jvc3MgYmluZGluZ3MKK1Rlc3RpbmcgdGhhdCBhdHRyaWJ1dGUgdmFs
dWVzIGFyZSBub3QgYXR0YWNoZWQgdG8gYmluZGluZ3MKK1BBU1MgVmVydGV4IGF0dHJpYnV0ZSB2
YWx1ZXMgYXJlIG5vdCBhdHRhY2hlZCB0byBiaW5kaW5ncworVGVzdGluZyBkcmF3cyB3aXRoIHZh
cmlvdXMgVkFPIGJpbmRpbmdzCitQQVNTIERyYXcgMCBwYXNzZWQgcGl4ZWwgdGVzdAorUEFTUyBE
cmF3IDEgcGFzc2VkIHBpeGVsIHRlc3QKK1BBU1MgRHJhdyAyIHBhc3NlZCBwaXhlbCB0ZXN0CitU
ZXN0aW5nIHVzaW5nIGRlbGV0ZWQgYnVmZmVycyByZWZlcmVuY2VkIGJ5IFZBT3MKK1BBU1Mgc2hv
dWxkIGJlIDI1NSwwLDAsMjU1CitQQVNTIHNob3VsZCBiZSAwLDI1NSwwLDI1NQorUEFTUyBzaG91
bGQgYmUgMCwwLDI1NSwyNTUKK1BBU1Mgc2hvdWxkIGJlIDAsMjU1LDI1NSwyNTUKK1Rlc3Rpbmcg
dGhhdCBWQU9zIGRvbid0IGVmZmVjdCBBUlJBWV9CVUZGRVIgYmluZGluZy4KK1BBU1Mgc2hvdWxk
IGJlIHJlZAorUEFTUyBzaG91bGQgYmUgZ3JlZW4KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IHRoZXJlIHNob3VsZCBiZSBubyBlcnJvcnMKKworUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvb2Vz
LXZlcnRleC1hcnJheS1vYmplY3QuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2QwNzk0MzcwOWYxODEz
ODVkNTJjNDBiY2Q5NGE0OGQwZTMwZDI1ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWwKQEAgLTAsMCAr
MSw1OTcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9
InV0Zi04Ij4KKzx0aXRsZT5XZWJHTCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBDb25mb3JtYW5j
ZSBUZXN0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Rlc2t0b3AtZ2wtY29uc3Rh
bnRzLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNl
cy93ZWJnbC10ZXN0LXV0aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBp
ZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGNhbnZhcyBpZD0iY2FudmFzIiBzdHlsZT0id2lkdGg6
IDUwcHg7IGhlaWdodDogNTBweDsiPiA8L2NhbnZhcz4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPHNjcmlwdCBpZD0idnNoYWRlciIsIHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KK2F0dHJp
YnV0ZSB2ZWM0IGFfcG9zaXRpb247CithdHRyaWJ1dGUgdmVjNCBhX2NvbG9yOwordmFyeWluZyB2
ZWM0IHZfY29sb3I7Cit2b2lkIG1haW4odm9pZCkgeworICAgIGdsX1Bvc2l0aW9uID0gYV9wb3Np
dGlvbjsKKyAgICB2X2NvbG9yID0gYV9jb2xvcjsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0i
ZnNoYWRlciIsIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgorcHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7Cit2YXJ5aW5nIHZlYzQgdl9jb2xvcjsKK3ZvaWQgbWFpbih2b2lkKSB7CisgICAgZ2xf
RnJhZ0NvbG9yID0gdl9jb2xvcjsKK30KKzwvc2NyaXB0PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9u
KCJUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIE9FU192ZXJ0ZXhf
YXJyYXlfb2JqZWN0IGV4dGVuc2lvbiwgaWYgaXQgaXMgYXZhaWxhYmxlLiIpOworCitkZWJ1Zygi
Iik7CisKK3ZhciB3dHUgPSBXZWJHTFRlc3RVdGlsczsKK3ZhciBjYW52YXMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Cit2YXIgZ2wgPSBjcmVhdGUzRENvbnRleHQoY2FudmFz
KTsKK3ZhciBleHQgPSBudWxsOwordmFyIHZhbyA9IG51bGw7CisKK2lmICghZ2wpIHsKKyAgICB0
ZXN0RmFpbGVkKCJXZWJHTCBjb250ZXh0IGRvZXMgbm90IGV4aXN0Iik7Cit9IGVsc2UgeworICAg
IHRlc3RQYXNzZWQoIldlYkdMIGNvbnRleHQgZXhpc3RzIik7CisKKyAgICAvLyBTZXR1cCBlbXVs
YXRlZCBPRVNWZXJ0ZXhBcnJheU9iamVjdCBpZiBpdCBoYXMgYmVlbiBpbmNsdWRlZC4KKyAgICBp
ZiAod2luZG93LnNldHVwVmVydGV4QXJyYXlPYmplY3QpIHsKKyAgICAgICAgZGVidWcoInVzaW5n
IGVtdWF0ZWQgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAgICAgICAgc2V0dXBWZXJ0ZXhB
cnJheU9iamVjdChnbCk7CisgICAgfQorCisgICAgLy8gUnVuIHRlc3RzIHdpdGggZXh0ZW5zaW9u
IGRpc2FibGVkCisgICAgcnVuQmluZGluZ1Rlc3REaXNhYmxlZCgpOworCisgICAgLy8gUXVlcnkg
dGhlIGV4dGVuc2lvbiBhbmQgc3RvcmUgZ2xvYmFsbHkgc28gc2hvdWxkQmUgY2FuIGFjY2VzcyBp
dAorICAgIGV4dCA9IGdsLmdldEV4dGVuc2lvbigiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsK
KyAgICBpZiAoIWV4dCkgeworICAgICAgICB0ZXN0UGFzc2VkKCJObyBPRVNfdmVydGV4X2FycmF5
X29iamVjdCBzdXBwb3J0IC0tIHRoaXMgaXMgbGVnYWwiKTsKKworICAgICAgICBydW5TdXBwb3J0
ZWRUZXN0KGZhbHNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0UGFzc2VkKCJTdWNjZXNz
ZnVsbHkgZW5hYmxlZCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBleHRlbnNpb24iKTsKKworICAg
ICAgICBydW5TdXBwb3J0ZWRUZXN0KHRydWUpOworICAgICAgICBydW5CaW5kaW5nVGVzdEVuYWJs
ZWQoKTsKKyAgICAgICAgcnVuT2JqZWN0VGVzdCgpOworICAgICAgICBydW5BdHRyaWJ1dGVUZXN0
cygpOworICAgICAgICBydW5BdHRyaWJ1dGVWYWx1ZVRlc3RzKCk7CisgICAgICAgIHJ1bkRyYXdU
ZXN0cygpOworICAgICAgICBydW5EZWxldGVUZXN0cygpOworICAgICAgICBydW5BcnJheUJ1ZmZl
ckJpbmRUZXN0cygpOworICAgICAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAi
dGhlcmUgc2hvdWxkIGJlIG5vIGVycm9ycyIpOworICAgIH0KK30KKworZnVuY3Rpb24gcnVuU3Vw
cG9ydGVkVGVzdChleHRlbnNpb25FbmFibGVkKSB7CisgICAgdmFyIHN1cHBvcnRlZCA9IGdsLmdl
dFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKKyAgICBpZiAoc3VwcG9ydGVkLmluZGV4T2YoIk9FU192
ZXJ0ZXhfYXJyYXlfb2JqZWN0IikgPj0gMCkgeworICAgICAgICBpZiAoZXh0ZW5zaW9uRW5hYmxl
ZCkgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgbGlz
dGVkIGFzIHN1cHBvcnRlZCBhbmQgZ2V0RXh0ZW5zaW9uIHN1Y2NlZWRlZCIpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3Qg
bGlzdGVkIGFzIHN1cHBvcnRlZCBidXQgZ2V0RXh0ZW5zaW9uIGZhaWxlZCIpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGV4dGVuc2lvbkVuYWJsZWQpIHsKKyAgICAgICAg
ICAgIHRlc3RGYWlsZWQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IG5vdCBsaXN0ZWQgYXMgc3Vw
cG9ydGVkIGJ1dCBnZXRFeHRlbnNpb24gc3VjY2VlZGVkIik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB0ZXN0UGFzc2VkKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgbGlzdGVk
IGFzIHN1cHBvcnRlZCBhbmQgZ2V0RXh0ZW5zaW9uIGZhaWxlZCAtLSB0aGlzIGlzIGxlZ2FsIik7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1bkJpbmRpbmdUZXN0RGlzYWJsZWQo
KSB7CisgICAgZGVidWcoIlRlc3RpbmcgYmluZGluZyBlbnVtIHdpdGggZXh0ZW5zaW9uIGRpc2Fi
bGVkIik7CisgICAgCisgICAgLy8gVXNlIHRoZSBjb25zdGFudCBkaXJlY3RseSBhcyB3ZSBkb24n
dCBoYXZlIHRoZSBleHRlbnNpb24KKyAgICB2YXIgVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTID0g
MHg4NUI1OworICAgIAorICAgIGdsLmdldFBhcmFtZXRlcihWRVJURVhfQVJSQVlfQklORElOR19P
RVMpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuSU5WQUxJRF9FTlVNLCAiVkVSVEVYX0FS
UkFZX0JJTkRJTkdfT0VTIHNob3VsZCBub3QgYmUgcXVlcnlhYmxlIGlmIGV4dGVuc2lvbiBpcyBk
aXNhYmxlZCIpOworfQorCitmdW5jdGlvbiBydW5CaW5kaW5nVGVzdEVuYWJsZWQoKSB7CisgICAg
ZGVidWcoIlRlc3RpbmcgYmluZGluZyBlbnVtIHdpdGggZXh0ZW5zaW9uIGVuYWJsZWQiKTsKKyAg
ICAKKyAgICBzaG91bGRCZSgiZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUyIsICIweDg1QjUi
KTsKKyAgICAKKyAgICBnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09F
Uyk7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgIlZFUlRFWF9BUlJBWV9C
SU5ESU5HX09FUyBxdWVyeSBzaG91bGQgc3VjY2VlZCBpZiBleHRlbnNpb24gaXMgZW5hYmxlIik7
CisgICAgCisgICAgLy8gRGVmYXVsdCB2YWx1ZSBpcyBudWxsCisgICAgaWYgKGdsLmdldFBhcmFt
ZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSA9PT0gbnVsbCkgeworICAgICAgICB0
ZXN0UGFzc2VkKCJEZWZhdWx0IHZhbHVlIG9mIFZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUyBpcyBu
dWxsIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiRGVmYXVsdCB2YWx1ZSBv
ZiBWRVJURVhfQVJSQVlfQklORElOR19PRVMgaXMgbm90IG51bGwiKTsKKyAgICB9CisgICAgCisg
ICAgZGVidWcoIlRlc3RpbmcgYmluZGluZyBhIFZBTyIpOworICAgIHZhciB2YW8wID0gZXh0LmNy
ZWF0ZVZlcnRleEFycmF5T0VTKCk7CisgICAgdmFyIHZhbzEgPSBleHQuY3JlYXRlVmVydGV4QXJy
YXlPRVMoKTsKKyAgICBzaG91bGRCZU51bGwoImdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FS
UkFZX0JJTkRJTkdfT0VTKSIpOworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvMCk7Cisg
ICAgaWYgKGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSA9PSB2
YW8wKSB7CisgICAgICAgIHRlc3RQYXNzZWQoImdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FS
UkFZX0JJTkRJTkdfT0VTKSBpcyBleHBlY3RlZCBWQU8iKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICB0ZXN0RmFpbGVkKCJnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09F
UykgaXMgbm90IGV4cGVjdGVkIFZBTyIpCisgICAgfQorICAgIGV4dC5iaW5kVmVydGV4QXJyYXlP
RVModmFvMSk7CisgICAgaWYgKGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJ
TkdfT0VTKSA9PSB2YW8xKSB7CisgICAgICAgIHRlc3RQYXNzZWQoImdsLmdldFBhcmFtZXRlcihl
eHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSBpcyBleHBlY3RlZCBWQU8iKTsKKyAgICB9IGVs
c2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJB
WV9CSU5ESU5HX09FUykgaXMgbm90IGV4cGVjdGVkIFZBTyIpCisgICAgfQorICAgIGV4dC5kZWxl
dGVWZXJ0ZXhBcnJheU9FUyh2YW8xKTsKKyAgICBzaG91bGRCZU51bGwoImdsLmdldFBhcmFtZXRl
cihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSIpOworICAgIGV4dC5iaW5kVmVydGV4QXJy
YXlPRVModmFvMSk7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5JTlZBTElEX09QRVJBVElP
TiwgImJpbmRpbmcgYSBkZWxldGVkIHZlcnRleCBhcnJheSBvYmplY3QiKTsKKyAgICBleHQuYmlu
ZFZlcnRleEFycmF5T0VTKG51bGwpOworICAgIHNob3VsZEJlTnVsbCgiZ2wuZ2V0UGFyYW1ldGVy
KGV4dC5WRVJURVhfQVJSQVlfQklORElOR19PRVMpIik7CisgICAgZXh0LmRlbGV0ZVZlcnRleEFy
cmF5T0VTKHZhbzEpOworfQorCitmdW5jdGlvbiBydW5PYmplY3RUZXN0KCkgeworICAgIGRlYnVn
KCJUZXN0aW5nIG9iamVjdCBjcmVhdGlvbiIpOworICAgIAorICAgIHZhbyA9IGV4dC5jcmVhdGVW
ZXJ0ZXhBcnJheU9FUygpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJj
cmVhdGVWZXJ0ZXhBcnJheU9FUyBzaG91bGQgbm90IHNldCBhbiBlcnJvciIpOworICAgIHNob3Vs
ZEJlTm9uTnVsbCgidmFvIik7CisgICAgCisgICAgLy8gRXhwZWN0IGZhbHNlIGlmIG5ldmVyIGJv
dW5kCisgICAgc2hvdWxkQmVGYWxzZSgiZXh0LmlzVmVydGV4QXJyYXlPRVModmFvKSIpOworICAg
IGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvKTsKKyAgICBzaG91bGRCZVRydWUoImV4dC5pc1Zl
cnRleEFycmF5T0VTKHZhbykiKTsKKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOwor
ICAgIHNob3VsZEJlVHJ1ZSgiZXh0LmlzVmVydGV4QXJyYXlPRVModmFvKSIpOworICAgIAorICAg
IHNob3VsZEJlRmFsc2UoImV4dC5pc1ZlcnRleEFycmF5T0VTKCkiKTsKKyAgICBzaG91bGRCZUZh
bHNlKCJleHQuaXNWZXJ0ZXhBcnJheU9FUyhudWxsKSIpOworICAgIAorICAgIGV4dC5kZWxldGVW
ZXJ0ZXhBcnJheU9FUyh2YW8pOworICAgIHZhbyA9IG51bGw7Cit9CisKK2Z1bmN0aW9uIHJ1bkF0
dHJpYnV0ZVRlc3RzKCkgeworICAgIGRlYnVnKCJUZXN0aW5nIGF0dHJpYnV0ZXMgd29yayBhY3Jv
c3MgYmluZGluZ3MiKTsKKyAgICAKKyAgICB2YXIgc3RhdGVzID0gW107CisgICAgCisgICAgdmFy
IGF0dHJDb3VudCA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVYX0FUVFJJQlMpOworICAg
IGZvciAodmFyIG4gPSAwOyBuIDwgYXR0ckNvdW50OyBuKyspIHsKKyAgICAgICAgZ2wuYmluZEJ1
ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG51bGwpOworICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVM
RU1FTlRfQVJSQVlfQlVGRkVSLCBudWxsKTsKKyAgICAgICAgCisgICAgICAgIHZhciBzdGF0ZSA9
IHt9OworICAgICAgICBzdGF0ZXMucHVzaChzdGF0ZSk7CisgICAgICAgIAorICAgICAgICB2YXIg
dmFvID0gc3RhdGUudmFvID0gZXh0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7CisgICAgICAgIGV4
dC5iaW5kVmVydGV4QXJyYXlPRVModmFvKTsKKyAgICAgICAgCisgICAgICAgIGlmIChuICUgMiA9
PSAwKSB7CisgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShuKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShuKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG4gJSAyID09IDApIHsKKyAgICAgICAg
ICAgIHZhciBidWZmZXIgPSBzdGF0ZS5idWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAg
ICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpOworICAgICAgICAg
ICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIDEwMjQsIGdsLlNUQVRJQ19EUkFXKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihuLCAxICsg
biAlIDQsIGdsLkZMT0FULCB0cnVlLCBuICogNCwgbiAqIDQpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAobiAlIDIgPT0gMCkgeworICAgICAgICAgICAgdmFyIGVsYnVmZmVyID0g
c3RhdGUuZWxidWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgICAgICAgIGdsLmJpbmRC
dWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGVsYnVmZmVyKTsKKyAgICAgICAgICAgIGds
LmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDEwMjQsIGdsLlNUQVRJQ19EUkFX
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhu
dWxsKTsKKyAgICB9CisgICAgCisgICAgdmFyIGFueU1pc21hdGNoID0gZmFsc2U7CisgICAgZm9y
ICh2YXIgbiA9IDA7IG4gPCBhdHRyQ291bnQ7IG4rKykgeworICAgICAgICB2YXIgc3RhdGUgPSBz
dGF0ZXNbbl07CisgICAgICAgIAorICAgICAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKHN0YXRl
LnZhbyk7CisgICAgICAgIAorICAgICAgICB2YXIgaXNFbmFibGVkID0gZ2wuZ2V0VmVydGV4QXR0
cmliKG4sIGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCk7CisgICAgICAgIGlmICgobiAl
IDIgPT0gMSkgfHwgaXNFbmFibGVkKSB7CisgICAgICAgICAgICAvLyBWYWxpZAorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFC
TEVEIG5vdCBwcmVzZXJ2ZWQiKTsKKyAgICAgICAgICAgIGFueU1pc21hdGNoID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmFyIGJ1ZmZlciA9IGdsLmdldFZlcnRleEF0dHJp
YihuLCBnbC5WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HKTsKKyAgICAgICAgaWYg
KG4gJSAyID09IDApIHsKKyAgICAgICAgICAgIGlmIChidWZmZXIgPT0gc3RhdGUuYnVmZmVyKSB7
CisgICAgICAgICAgICAgICAgLy8gTWF0Y2hlZAorICAgICAgICAgICAgICAgIGlmICgoZ2wuZ2V0
VmVydGV4QXR0cmliKG4sIGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSkgPT0gMSArIG4gJSA0
KSAmJgorICAgICAgICAgICAgICAgICAgICAoZ2wuZ2V0VmVydGV4QXR0cmliKG4sIGdsLlZFUlRF
WF9BVFRSSUJfQVJSQVlfVFlQRSkgPT0gZ2wuRkxPQVQpICYmCisgICAgICAgICAgICAgICAgICAg
IChnbC5nZXRWZXJ0ZXhBdHRyaWIobiwgZ2wuVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVE
KSA9PSB0cnVlKSAmJgorICAgICAgICAgICAgICAgICAgICAoZ2wuZ2V0VmVydGV4QXR0cmliKG4s
IGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFKSA9PSBuICogNCkgJiYKKyAgICAgICAgICAg
ICAgICAgICAgKGdsLmdldFZlcnRleEF0dHJpYk9mZnNldChuLCBnbC5WRVJURVhfQVRUUklCX0FS
UkFZX1BPSU5URVIpID09IG4gKiA0KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBNYXRjaGVk
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGVzdEZhaWxl
ZCgiVkVSVEVYX0FUVFJJQl9BUlJBWV8qIG5vdCBwcmVzZXJ2ZWQiKTsKKyAgICAgICAgICAgICAg
ICAgICAgYW55TWlzbWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiVkVSVEVYX0FUVFJJQl9BUlJB
WV9CVUZGRVJfQklORElORyBub3QgcHJlc2VydmVkIik7CisgICAgICAgICAgICAgICAgYW55TWlz
bWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCIGlzIG5vdCBwcmVzZXJ2ZWQKKyAgICAgICAg
ICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJWRVJURVhfQVRU
UklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HIG5vdCBwcmVzZXJ2ZWQiKTsKKyAgICAgICAgICAgICAg
ICBhbnlNaXNtYXRjaCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHZhciBlbGJ1ZmZlciA9IGdsLmdldFBhcmFtZXRlcihnbC5FTEVNRU5UX0FSUkFZ
X0JVRkZFUl9CSU5ESU5HKTsKKyAgICAgICAgaWYgKG4gJSAyID09IDApIHsKKyAgICAgICAgICAg
IGlmIChlbGJ1ZmZlciA9PSBzdGF0ZS5lbGJ1ZmZlcikgeworICAgICAgICAgICAgICAgIC8vIE1h
dGNoZWQKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgi
RUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyBub3QgcHJlc2VydmVkIik7CisgICAgICAgICAg
ICAgICAgYW55TWlzbWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKGVsYnVmZmVyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAv
LyBNYXRjaGVkCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRlc3RGYWls
ZWQoIkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgbm90IHByZXNlcnZlZCIpOworICAgICAg
ICAgICAgICAgIGFueU1pc21hdGNoID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOworICAgIGlmICghYW55TWlz
bWF0Y2gpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiQWxsIGF0dHJpYnV0ZXMgcHJlc2VydmVkIGFj
cm9zcyBiaW5kaW5ncyIpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHZhciBuID0gMDsgbiA8IGF0
dHJDb3VudDsgbisrKSB7CisgICAgICAgIHZhciBzdGF0ZSA9IHN0YXRlc1tuXTsKKyAgICAgICAg
ZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHN0YXRlLnZhbyk7CisgICAgfQorfQorCitmdW5jdGlv
biBydW5BdHRyaWJ1dGVWYWx1ZVRlc3RzKCkgeworICAgIGRlYnVnKCJUZXN0aW5nIHRoYXQgYXR0
cmlidXRlIHZhbHVlcyBhcmUgbm90IGF0dGFjaGVkIHRvIGJpbmRpbmdzIik7CisgICAgCisgICAg
dmFyIHY7CisgICAgdmFyIHZhbzAgPSBleHQuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICB2
YXIgYW55RmFpbGVkID0gZmFsc2U7CisgICAgCisgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhu
dWxsKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWI0ZigwLCAwLCAxLCAyLCAzKTsKKyAgICAKKyAgICB2
ID0gZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVYX0FUVFJJQik7CisgICAg
aWYgKCEodlswXSA9PSAwICYmIHZbMV0gPT0gMSAmJiB2WzJdID09IDIgJiYgdlszXSA9PSAzKSkg
eworICAgICAgICB0ZXN0RmFpbGVkKCJWZXJ0ZXggYXR0cmliIHZhbHVlIG5vdCByb3VuZC10cmlw
cGVkPyIpOworICAgICAgICBhbnlGYWlsZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBleHQu
YmluZFZlcnRleEFycmF5T0VTKHZhbzApOworICAgIAorICAgIHYgPSBnbC5nZXRWZXJ0ZXhBdHRy
aWIoMCwgZ2wuQ1VSUkVOVF9WRVJURVhfQVRUUklCKTsKKyAgICBpZiAoISh2WzBdID09IDAgJiYg
dlsxXSA9PSAxICYmIHZbMl0gPT0gMiAmJiB2WzNdID09IDMpKSB7CisgICAgICAgIHRlc3RGYWls
ZWQoIlZlcnRleCBhdHRyaWIgdmFsdWUgcmVzZXQgYWNyb3NzIGJpbmRpbmdzIik7CisgICAgICAg
IGFueUZhaWxlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIGdsLnZlcnRleEF0dHJpYjRmKDAs
IDQsIDUsIDYsIDcpOworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7CisgICAgCisg
ICAgdiA9IGdsLmdldFZlcnRleEF0dHJpYigwLCBnbC5DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpOwor
ICAgIGlmICghKHZbMF0gPT0gNCAmJiB2WzFdID09IDUgJiYgdlsyXSA9PSA2ICYmIHZbM10gPT0g
NykpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiVmVydGV4IGF0dHJpYiB2YWx1ZSBib3VuZCB0byBi
dWZmZXIiKTsKKyAgICAgICAgYW55RmFpbGVkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYg
KCFhbnlGYWlsZWQpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiVmVydGV4IGF0dHJpYnV0ZSB2YWx1
ZXMgYXJlIG5vdCBhdHRhY2hlZCB0byBiaW5kaW5ncyIpCisgICAgfQorICAgIAorICAgIGV4dC5i
aW5kVmVydGV4QXJyYXlPRVMobnVsbCk7CisgICAgZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHZh
bzApOworfQorCitmdW5jdGlvbiBydW5EcmF3VGVzdHMoKSB7CisgICAgZGVidWcoIlRlc3Rpbmcg
ZHJhd3Mgd2l0aCB2YXJpb3VzIFZBTyBiaW5kaW5ncyIpOworICAgIAorICAgIGNhbnZhcy53aWR0
aCA9IDUwOyBjYW52YXMuaGVpZ2h0ID0gNTA7CisgICAgZ2wudmlld3BvcnQoMCwgMCwgY2FudmFz
LndpZHRoLCBjYW52YXMuaGVpZ2h0KTsKKyAgICAKKyAgICB2YXIgdmFvMCA9IGV4dC5jcmVhdGVW
ZXJ0ZXhBcnJheU9FUygpOworICAgIHZhciB2YW8xID0gZXh0LmNyZWF0ZVZlcnRleEFycmF5T0VT
KCk7CisgICAgCisgICAgdmFyIHByb2dyYW0gPSB3dHUuc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3Jh
bShnbCwgMCwgMSk7CisgICAgCisgICAgZnVuY3Rpb24gc2V0dXBRdWFkKHMpIHsKKyAgICAgICAg
dmFyIG9wdF9wb3NpdGlvbkxvY2F0aW9uID0gMDsKKyAgICAgICAgdmFyIG9wdF90ZXhjb29yZExv
Y2F0aW9uID0gMTsKKyAgICAgICAgdmFyIHZlcnRleE9iamVjdCA9IGdsLmNyZWF0ZUJ1ZmZlcigp
OworICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmVydGV4T2JqZWN0KTsK
KyAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXko
WworICAgICAgICAgICAgIDEuMCAqIHMsICAxLjAgKiBzLCAwLjAsCisgICAgICAgICAgICAtMS4w
ICogcywgIDEuMCAqIHMsIDAuMCwKKyAgICAgICAgICAgIC0xLjAgKiBzLCAtMS4wICogcywgMC4w
LAorICAgICAgICAgICAgIDEuMCAqIHMsICAxLjAgKiBzLCAwLjAsCisgICAgICAgICAgICAtMS4w
ICogcywgLTEuMCAqIHMsIDAuMCwKKyAgICAgICAgICAgICAxLjAgKiBzLCAtMS4wICogcywgMC4w
XSksIGdsLlNUQVRJQ19EUkFXKTsKKyAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
b3B0X3Bvc2l0aW9uTG9jYXRpb24pOworICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG9w
dF9wb3NpdGlvbkxvY2F0aW9uLCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworCisgICAgICAg
IHZhciB2ZXJ0ZXhPYmplY3QgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgICAgZ2wuYmluZEJ1
ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZlcnRleE9iamVjdCk7CisgICAgICAgIGdsLmJ1ZmZlckRh
dGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5KFsKKyAgICAgICAgICAgIDEuMCAq
IHMsIDEuMCAqIHMsCisgICAgICAgICAgICAwLjAgKiBzLCAxLjAgKiBzLAorICAgICAgICAgICAg
MC4wICogcywgMC4wICogcywKKyAgICAgICAgICAgIDEuMCAqIHMsIDEuMCAqIHMsCisgICAgICAg
ICAgICAwLjAgKiBzLCAwLjAgKiBzLAorICAgICAgICAgICAgMS4wICogcywgMC4wICogc10pLCBn
bC5TVEFUSUNfRFJBVyk7CisgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG9wdF90
ZXhjb29yZExvY2F0aW9uKTsKKyAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihvcHRfdGV4
Y29vcmRMb2NhdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICB9OworICAgIAor
ICAgIGZ1bmN0aW9uIHJlYWRMb2NhdGlvbih4LCB5KSB7CisgICAgICAgIHZhciBwaXhlbHMgPSBu
ZXcgVWludDhBcnJheSgxICogMSAqIDQpOworICAgICAgICBnbC5yZWFkUGl4ZWxzKHgsIHksIDEs
IDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHBpeGVscyk7CisgICAgICAgIHJldHVybiBw
aXhlbHM7CisgICAgfTsKKyAgICBmdW5jdGlvbiB0ZXN0UGl4ZWwoYmxhY2tMaXN0LCB3aGl0ZUxp
c3QpIHsKKyAgICAgICAgZnVuY3Rpb24gdGVzdExpc3QobGlzdCwgZXhwZWN0ZWQpIHsKKyAgICAg
ICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbGlzdC5sZW5ndGg7IG4rKykgeworICAgICAgICAg
ICAgICAgIHZhciBsID0gbGlzdFtuXTsKKyAgICAgICAgICAgICAgICB2YXIgeCA9IC1NYXRoLmZs
b29yKGwgKiBjYW52YXMud2lkdGggLyAyKSArIGNhbnZhcy53aWR0aCAvIDI7CisgICAgICAgICAg
ICAgICAgdmFyIHkgPSAtTWF0aC5mbG9vcihsICogY2FudmFzLmhlaWdodCAvIDIpICsgY2FudmFz
LmhlaWdodCAvIDI7CisgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHJlYWRMb2NhdGlvbih4
LCB5KTsKKyAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoc291cmNlWzBdIC0gZXhwZWN0ZWQp
ID4gMikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRlc3RMaXN0KGJsYWNrTGlzdCwgMCkgJiYgdGVzdExpc3Qod2hpdGVM
aXN0LCAyNTUpOworICAgIH07CisgICAgZnVuY3Rpb24gdmVyaWZ5RHJhdyhkcmF3TnVtYmVyLCBz
KSB7CisgICAgICAgIHd0dS5kcmF3UXVhZChnbCk7CisgICAgICAgIHZhciBibGFja0xpc3QgPSBb
XTsKKyAgICAgICAgdmFyIHdoaXRlTGlzdCA9IFtdOworICAgICAgICB2YXIgcG9pbnRzID0gWzAu
MCwgMC4yLCAwLjQsIDAuNiwgMC44LCAxLjBdOworICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8
IHBvaW50cy5sZW5ndGg7IG4rKykgeworICAgICAgICAgICAgaWYgKHBvaW50c1tuXSA8PSBzKSB7
CisgICAgICAgICAgICAgICAgYmxhY2tMaXN0LnB1c2gocG9pbnRzW25dKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd2hpdGVMaXN0LnB1c2gocG9pbnRzW25dKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGVzdFBpeGVsKGJsYWNrTGlzdCwg
d2hpdGVMaXN0KSkgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgiRHJhdyAiICsgZHJhd051bWJl
ciArICIgcGFzc2VkIHBpeGVsIHRlc3QiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHRlc3RGYWlsZWQoIkRyYXcgIiArIGRyYXdOdW1iZXIgKyAiIGZhaWxlZCBwaXhlbCB0ZXN0Iik7
CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIC8vIFNldHVwIGFsbCBiaW5kaW5ncworICAg
IHNldHVwUXVhZCgxKTsKKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKHZhbzApOworICAgIHNl
dHVwUXVhZCgwLjUpOworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvMSk7CisgICAgc2V0
dXBRdWFkKDAuMjUpOworICAgIAorICAgIC8vIFZlcmlmeSBkcmF3aW5nCisgICAgZXh0LmJpbmRW
ZXJ0ZXhBcnJheU9FUyhudWxsKTsKKyAgICB2ZXJpZnlEcmF3KDAsIDEpOworICAgIGV4dC5iaW5k
VmVydGV4QXJyYXlPRVModmFvMCk7CisgICAgdmVyaWZ5RHJhdygxLCAwLjUpOworICAgIGV4dC5i
aW5kVmVydGV4QXJyYXlPRVModmFvMSk7CisgICAgdmVyaWZ5RHJhdygyLCAwLjI1KTsKKyAgICAK
KyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOworICAgIGV4dC5kZWxldGVWZXJ0ZXhB
cnJheU9FUyh2YW8wKTsKKyAgICBleHQuZGVsZXRlVmVydGV4QXJyYXlPRVModmFvMSk7Cit9CisK
K2Z1bmN0aW9uIHJ1bkRlbGV0ZVRlc3RzKCkgeworICAgIGRlYnVnKCJUZXN0aW5nIHVzaW5nIGRl
bGV0ZWQgYnVmZmVycyByZWZlcmVuY2VkIGJ5IFZBT3MiKTsKKworICAgIHZhciBwcm9ncmFtID0g
d3R1LnNldHVwUHJvZ3JhbShnbCwgWyJ2c2hhZGVyIiwgImZzaGFkZXIiXSwgWyJhX3Bvc2l0aW9u
IiwgImFfY29sb3IiXSk7CisgICAgZ2wudXNlUHJvZ3JhbShwcm9ncmFtKTsKKworICAgIHZhciBw
b3NpdGlvbkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAgIGdsLmJpbmRCdWZmZXIoZ2wu
QVJSQVlfQlVGRkVSLCBwb3NpdGlvbkJ1ZmZlcik7CisgICAgZ2wuYnVmZmVyRGF0YSgKKyAgICAg
ICAgZ2wuQVJSQVlfQlVGRkVSLAorICAgICAgICBuZXcgRmxvYXQzMkFycmF5KFsKKyAgICAgICAg
ICAgMS4wLCAgMS4wLAorICAgICAgICAgIC0xLjAsICAxLjAsCisgICAgICAgICAgLTEuMCwgLTEu
MCwKKyAgICAgICAgICAgMS4wLCAtMS4wXSksCisgICAgICAgIGdsLlNUQVRJQ19EUkFXKTsKKwor
ICAgIHZhciBjb2xvcnMgPSBbCisgICAgICBbMjU1LCAgIDAsICAgMCwgMjU1XSwKKyAgICAgIFsg
IDAsIDI1NSwgICAwLCAyNTVdLAorICAgICAgWyAgMCwgICAwLCAyNTUsIDI1NV0sCisgICAgICBb
ICAwLCAyNTUsIDI1NSwgMjU1XQorICAgIF07CisgICAgdmFyIGNvbG9yQnVmZmVycyA9IFtdOwor
ICAgIHZhciBlbGVtZW50QnVmZmVycyA9IFtdOworICAgIHZhciB2YW9zID0gW107CisgICAgZm9y
ICh2YXIgaWkgPSAwOyBpaSA8IGNvbG9ycy5sZW5ndGg7ICsraWkpIHsKKyAgICAgIHZhciB2YW8g
PSBleHQuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICAgIHZhb3MucHVzaCh2YW8pOworICAg
ICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW8pOworICAgICAgLy8gU2V0IHRoZSBwb3NpdGlv
biBidWZmZXIKKyAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBwb3NpdGlvbkJ1
ZmZlcik7CisgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICAgIGdsLnZl
cnRleEF0dHJpYlBvaW50ZXIoMCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKworICAgICAg
dmFyIGVsZW1lbnRCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgIGVsZW1lbnRCdWZm
ZXJzLnB1c2goZWxlbWVudEJ1ZmZlcik7CisgICAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRf
QVJSQVlfQlVGRkVSLCBlbGVtZW50QnVmZmVyKTsKKyAgICAgIGdsLmJ1ZmZlckRhdGEoCisgICAg
ICAgICAgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsCisgICAgICAgICAgbmV3IFVpbnQ4QXJyYXko
WzAsIDEsIDIsIDAsIDIsIDNdKSwKKyAgICAgICAgICBnbC5TVEFUSUNfRFJBVyk7CisKKyAgICAg
IC8vIFNldHVwIHRoZSBjb2xvciBhdHRyaWIKKyAgICAgIHZhciBjb2xvciA9IGNvbG9yc1tpaV07
CisgICAgICBpZiAoaWkgPCAzKSB7CisgICAgICAgIHZhciBjb2xvckJ1ZmZlciA9IGdsLmNyZWF0
ZUJ1ZmZlcigpOworICAgICAgICBjb2xvckJ1ZmZlcnMucHVzaChjb2xvckJ1ZmZlcik7CisgICAg
ICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvckJ1ZmZlcik7CisgICAgICAg
IGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgVWludDhBcnJheSgKKyAgICAgICAg
ICBbIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIGNvbG9yWzNdLAorICAgICAgICAgICAg
Y29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgY29sb3JbM10sCisgICAgICAgICAgICBjb2xv
clswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBjb2xvclszXSwKKyAgICAgICAgICAgIGNvbG9yWzBd
LCBjb2xvclsxXSwgY29sb3JbMl0sIGNvbG9yWzNdCisgICAgICAgICAgXSksIGdsLlNUQVRJQ19E
UkFXKTsKKyAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMSk7CisgICAgICAgIGds
LnZlcnRleEF0dHJpYlBvaW50ZXIoMSwgNCwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgMCwgMCk7
CisgICAgICB9IGVsc2UgeworICAgICAgICBnbC52ZXJ0ZXhBdHRyaWI0ZigxLCBjb2xvclswXSAv
IDI1NSwgY29sb3JbMV0gLyAyNTUsIGNvbG9yWzJdIC8gMjU1LCBjb2xvclszXSAvIDI1NSk7Cisg
ICAgICB9CisgICAgfQorCisgICAgLy8gZGVsZXRlIHRoZSBjb2xvciBidWZmZXJzIEFORCB0aGUg
cG9zaXRpb24gYnVmZmVyLgorICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7CisgICAg
Zm9yICh2YXIgaWkgPSAwOyBpaSA8IGNvbG9yQnVmZmVycy5sZW5ndGg7ICsraWkpIHsKKyAgICAg
IGdsLmRlbGV0ZUJ1ZmZlcihjb2xvckJ1ZmZlcnNbaWldKTsKKyAgICAgIGdsLmRlbGV0ZUJ1ZmZl
cihlbGVtZW50QnVmZmVyc1tpaV0pOworICAgICAgLy8gVGhlIGJ1ZmZlcnMgc2hvdWxkIHN0aWxs
IGJlIHZhbGlkIGF0IHRoaXMgcG9pbnQsIHNpbmNlIGl0IHdhcyBhdHRhY2hlZCB0byB0aGUgVkFP
CisgICAgICBpZighZ2wuaXNCdWZmZXIoY29sb3JCdWZmZXJzW2lpXSkpIHsKKyAgICAgICAgdGVz
dEZhaWxlZCgiYnVmZmVyIHJlbW92ZWQgdG9vIGVhcmx5Iik7CisgICAgICB9CisgICAgfQorICAg
IGdsLmRlbGV0ZUJ1ZmZlcihwb3NpdGlvbkJ1ZmZlcik7CisKKyAgICAvLyBSZW5kZXIgd2l0aCB0
aGUgZGVsZXRlZCBidWZmZXJzLiBBcyB0aGV5IGFyZSByZWZlcmVuY2VkIGJ5IFZBT3MgdGhleQor
ICAgIC8vIG11c3Qgc3RpbGwgYmUgYXJvdW5kLgorICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBj
b2xvcnMubGVuZ3RoOyArK2lpKSB7CisgICAgICB2YXIgY29sb3IgPSBjb2xvcnNbaWldOworICAg
ICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW9zW2lpXSk7CisgICAgICBnbC5kcmF3RWxlbWVu
dHMoZ2wuVFJJQU5HTEVTLCA2LCBnbC5VTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgIHd0dS5jaGVj
a0NhbnZhcyhnbCwgY29sb3IsICJzaG91bGQgYmUgIiArIGNvbG9yKTsKKyAgICB9CisKKyAgICAv
LyBDbGVhbiB1cC4KKyAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgY29sb3JCdWZmZXJzLmxlbmd0
aDsgKytpaSkgeworICAgICAgZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHZhb3NbaWldKTsKKyAg
ICB9CisKKyAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgY29sb3JCdWZmZXJzLmxlbmd0aDsgKytp
aSkgeworICAgICAgLy8gVGhlIGJ1ZmZlcnMgc2hvdWxkIG5vIGxvbmdlciBiZSB2YWxpZCBub3cg
dGhhdCB0aGUgVkFPcyBhcmUgZGVsZXRlZAorICAgICAgaWYoZ2wuaXNCdWZmZXIoY29sb3JCdWZm
ZXJzW2lpXSkpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiYnVmZmVyIG5vdCBwcm9wZXJseSBjbGVh
bmVkIHVwIGFmdGVyIFZBTyBkZWxldGlvbiIpOworICAgICAgfQorICAgIH0KK30KKworZnVuY3Rp
b24gcnVuQXJyYXlCdWZmZXJCaW5kVGVzdHMoKSB7CisgICAgZGVidWcoIlRlc3RpbmcgdGhhdCBW
QU9zIGRvbid0IGVmZmVjdCBBUlJBWV9CVUZGRVIgYmluZGluZy4iKTsKKworICAgIGV4dC5iaW5k
VmVydGV4QXJyYXlPRVMobnVsbCk7CisKKyAgICB2YXIgcHJvZ3JhbSA9IHd0dS5zZXR1cFByb2dy
YW0oZ2wsIFsidnNoYWRlciIsICJmc2hhZGVyIl0sIFsiYV9jb2xvciIsICJhX3Bvc2l0aW9uIl0p
OworICAgIGdsLnVzZVByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAvLyBjcmVhdGUgc2hhcmVkIGVs
ZW1lbnQgYnV1ZmZlcgorICAgIHZhciBlbGVtZW50QnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7
CisgICAgLy8gYmluZCB0byBkZWZhdWx0CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FS
UkFZX0JVRkZFUiwgZWxlbWVudEJ1ZmZlcik7CisgICAgZ2wuYnVmZmVyRGF0YSgKKyAgICAgICAg
Z2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsCisgICAgICAgIG5ldyBVaW50OEFycmF5KFswLCAxLCAy
LCAwLCAyLCAzXSksCisgICAgICAgIGdsLlNUQVRJQ19EUkFXKTsKKworICAgIC8vIGZpcnN0IGNy
ZWF0ZSB0aGUgYnVmZmVycyBmb3Igbm8gdmFvIGRyYXcuCisgICAgdmFyIG5vblZBT0NvbG9yQnVm
ZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZG
RVIsIG5vblZBT0NvbG9yQnVmZmVyKTsKKyAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZF
UiwgbmV3IFVpbnQ4QXJyYXkoCisgICAgICBbIDAsIDI1NSwgMCwgMjU1LAorICAgICAgICAwLCAy
NTUsIDAsIDI1NSwKKyAgICAgICAgMCwgMjU1LCAwLCAyNTUsCisgICAgICAgIDAsIDI1NSwgMCwg
MjU1LAorICAgICAgXSksIGdsLlNUQVRJQ19EUkFXKTsKKworICAgIC8vIHNoYXJlZCBwb3NpdGlv
biBidWZmZXIuCisgICAgdmFyIHBvc2l0aW9uQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7Cisg
ICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHBvc2l0aW9uQnVmZmVyKTsKKyAgICBn
bC5idWZmZXJEYXRhKAorICAgICAgICBnbC5BUlJBWV9CVUZGRVIsCisgICAgICAgIG5ldyBGbG9h
dDMyQXJyYXkoWworICAgICAgICAgICAxLjAsICAxLjAsCisgICAgICAgICAgLTEuMCwgIDEuMCwK
KyAgICAgICAgICAtMS4wLCAtMS4wLAorICAgICAgICAgICAxLjAsIC0xLjBdKSwKKyAgICAgICAg
Z2wuU1RBVElDX0RSQVcpOworCisgICAgLy8gYXR0YWNoIHBvc2l0aW9uIGJ1ZmZlciB0byBkZWZh
dWx0CisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMSk7CisgICAgZ2wudmVydGV4QXR0
cmliUG9pbnRlcigxLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworCisgICAgLy8gbm93IGNy
ZWF0ZSB2YW8KKyAgICB2YXIgdmFvID0gZXh0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7CisgICAg
ZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW8pOworCisgICAgLy8gYXR0YWNoIHRoZSBwb3NpdGlv
biBidWZmZXIgdmFvCisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMSk7CisgICAgZ2wu
dmVydGV4QXR0cmliUG9pbnRlcigxLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworCisgICAg
dmFyIHZhb0NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuZW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkoMCk7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBnbC5V
TlNJR05FRF9CWVRFLCB0cnVlLCAwLCAwKTsKKyAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JV
RkZFUiwgdmFvQ29sb3JCdWZmZXIpOworICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVS
LCBuZXcgVWludDhBcnJheSgKKyAgICAgIFsgMjU1LCAwLCAwLCAyNTUsCisgICAgICAgIDI1NSwg
MCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAgICAgMjU1LCAwLCAwLCAy
NTUsCisgICAgICBdKSwgZ2wuU1RBVElDX0RSQVcpOworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KDApOworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgNCwgZ2wuVU5TSUdORURf
QllURSwgdHJ1ZSwgMCwgMCk7CisKKyAgICAvLyBub3cgc2V0IHRoZSBidWZmZXIgYmFjayB0byB0
aGUgbm9uVkFPQ29sb3JCdWZmZXIKKyAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwg
bm9uVkFPQ29sb3JCdWZmZXIpOworCisgICAgLy8gYmluZCB0byB2YW8KKyAgICBnbC5iaW5kQnVm
ZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBlbGVtZW50QnVmZmVyKTsKKyAgICBnbC5kcmF3
RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCA2LCBnbC5VTlNJR05FRF9CWVRFLCAwKTsKKyAgICB3dHUu
Y2hlY2tDYW52YXMoZ2wsIFsyNTUsIDAsIDAsIDI1NV0sICJzaG91bGQgYmUgcmVkIik7CisKKyAg
ICAvLyB1bmJpbmQgdmFvCisgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTsKKworICAg
IC8vIEF0IHRoaXMgcG9pbnQgdGhlIG5vblZBT0NvbG9yQnVmZmVyIHNob3VsZCBiZSBzdGlsbCBi
ZSBib3VuZC4KKyAgICAvLyBJZiB0aGUgV2ViR0wgaW1wbCBpcyBlbXVsYXRpbmcgVkFPcyBpdCBt
dXN0IG1ha2Ugc3VyZQorICAgIC8vIGl0IGNvcnJlY3RseSByZXN0b3JlcyB0aGlzIGJpbmRpbmcu
CisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7CisgICAgZ2wudmVydGV4QXR0cmli
UG9pbnRlcigwLCA0LCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCAwLCAwKTsKKyAgICBnbC5kcmF3
RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCA2LCBnbC5VTlNJR05FRF9CWVRFLCAwKTsKKyAgICB3dHUu
Y2hlY2tDYW52YXMoZ2wsIFswLCAyNTUsIDAsIDI1NV0sICJzaG91bGQgYmUgZ3JlZW4iKTsKK30K
KworZGVidWcoIiIpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorCis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4
cGVjdGF0aW9ucwppbmRleCAyNjc0NzY0ZGQ0NzdiYWNjODBjM2MwNjRjNTM1N2MyZjdhN2UyYmE1
Li5iYmFmMDc5MDZiYWNjMzQ1YjNmYmRkNzNhMDRhOGQ5NmJmMWI2ZTQ2IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTM1NTgsNCArMzU1
OCw2IEBAIHdlYmtpdC5vcmcvYi85Njk2MiBmYXN0L2pzL2Nyb3NzLWZyYW1lLXJlYWxseS1iYWQt
dGltZS13aXRoLV9fcHJvdG9fXy5odG1sIFsgRmFpCiAKIHdlYmtpdC5vcmcvYi85NzE3OSBodHRw
L3Rlc3RzL2Nzcy9saW5rLWNzcy1kaXNhYmxlZC12YWx1ZS13aXRoLXNsb3ctbG9hZGluZy1zaGVl
dC5odG1sIFsgRmFpbHVyZSBQYXNzIF0KIAotCisjIEV4cGVjdGVkIHRvIGZhaWwgdW50aWwgV2Vi
R0wgZXh0ZW5zaW9uIGltcGxlbWVudGF0aW9uIGxhbmRzCit3ZWJraXQub3JnL2IvOTY5NjEgZmFz
dC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1vYmplY3QuaHRtbCBbIEZhaWx1cmUgUGFz
cyBdCit3ZWJraXQub3JnL2IvOTY5NjEgcGxhdGZvcm0vY2hyb21pdW0vdmlydHVhbC9ncHUvZmFz
dC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1vYmplY3QuaHRtbCBbIEZhaWx1cmUgUGFz
cyBdClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZWZsL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZApp
bmRleCBlZDkxNWRiNWI1MzYwZWM4NzEwYTlhZjI1NTE0MjUzMjk1Yzg5NjI5Li4yMzVjMjljNDE4
MTljN2UxMmVlMmE1ZjE2OGU5ZjYyNDFlNDU2NDU1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9lZmwvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBl
ZApAQCAtNjg0LDMgKzY4NCw2IEBAIGluc3BlY3Rvci9leHRlbnNpb25zL2V4dGVuc2lvbnMtZXZh
bC1jb250ZW50LXNjcmlwdC5odG1sCiAKICMgRU5BQkxFKFdJREdFVF9SRUdJT04pIGlzIGRpc2Fi
bGVkCiBmYXN0L2Nzcy93aWRnZXQtcmVnaW9uLXBhcnNlci5odG1sCisKKyMgaHR0cDovL3dlYmtp
dC5vcmcvYi85NjgyOAorZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1vYmplY3Qu
aHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAppbmRleCBiMDRjOTcyMzgwMjMzNTkwZTdlZDI1
OWQ1YWNhNDQyMjlhYThlOTgwLi44ZmJiYjYzY2YxNmUyNGNiMTczMjY2Y2U1ODU3NTgxOTNhNzE4
YjYyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAorKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZApAQCAtOTQzLDYgKzk0Myw5IEBAIGZhc3Qv
Y2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtdmlkZW8uaHRtbAog
IyBTZW5kaW5nIHRoZSBtb3VzZSBkb3duIGV2ZW50IHRvIHRoZSBzY3JvbGxiYXIgc3RhcnRzIGEg
bmVzdGVkIHJ1biBsb29wIHdoaWNoIGNhdXNlcyBhIGhhbmcuCiBmYXN0L2V2ZW50cy9tb3VzZWRv
d24taW4tc3ViZnJhbWUtc2Nyb2xsYmFyLmh0bWwKIAorIyBodHRwOi8vd2Via2l0Lm9yZy9iLzk2
ODI4CitmYXN0L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC5odG1sCisKICMg
LS0tIFdlYktpdDEgb25seSAtLS0KIGh0dHAvdGVzdHMvbWlzYy93aWxsQ2FjaGVSZXNwb25zZS1k
ZWxlZ2F0ZS1jYWxsYmFjay5odG1sCiBodHRwL3Rlc3RzL211bHRpcGFydC9sb2FkLWxhc3Qtbm9u
LWh0bWwtZnJhbWUucGhwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvU2tp
cHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9Ta2lwcGVkCmluZGV4IDE5MTdiNmNlZmIz
Nzk5ZWJkYWQzZTk4MGYzNTc2ODE2ZDg0ZDAzMTEuLjFjYTY0NGY2NDQ2MzkwMjNhYzY3YzUyNmM1
M2QyZjRkYzNjNWI5ODQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9Ta2lw
cGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3drMi9Ta2lwcGVkCkBAIC0xOTksNiArMTk5
LDcgQEAgZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi5odG1sCiBmYXN0L2NhbnZh
cy93ZWJnbC92aWV3cG9ydC11bmNoYW5nZWQtdXBvbi1yZXNpemUuaHRtbAogZmFzdC9jYW52YXMv
d2ViZ2wvd2ViZ2wtYXJyYXktaW52YWxpZC1yYW5nZXMuaHRtbAogZmFzdC9jYW52YXMvd2ViZ2wv
d2ViZ2wtc3BlY2lmaWMuaHRtbAorZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1v
YmplY3QuaHRtbAogZmFzdC9oYXJuZXNzL292ZXJyaWRlLXByZWZlcmVuY2VzLTIuaHRtbAogZmFz
dC9pbWFnZXMvYW5pbWF0ZWQtZ2lmLXJlc3RvcmVkLWZyb20tYmZjYWNoZS5odG1sCiBmYXN0L3Rl
eHQvemVyby1mb250LXNpemUuaHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165209</attachid>
            <date>2012-09-21 15:29:22 -0700</date>
            <delta_ts>2012-09-21 16:47:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96578-20120921152846.patch</filename>
            <type>text/plain</type>
            <size>39354</size>
            <attacher name="Brandon Jones">bajones</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MjYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBkODVlOTA1ZDZiNzJl
M2Y1M2Y4MGE2ODYyNjI3YzhjMTQ2Zjk1MDI4Li40Mjg1NTNjODBiMmUxNzBmMjI2YmMwMTQzYzhj
YmVjYTcwMzgzOGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0wOS0yMSAg
QnJhbmRvbiBKb25lcyAgPGJham9uZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9y
dCBmb3IgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgaW4gY2hyb21pdW0KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NTc4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgY29kZSB0byBhbGxvdyBjYWxs
cyB0byB0aGUgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgZXh0ZW5zaW9uIHRvIGludGVyZmFjZQor
ICAgICAgICBwcm9wZXJseSB3aXRoIHRoZSBjaHJvbWl1bSBXZWJHTCBpbXBsZW1lbnRhdGlvbi4g
CisKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAg
ICAgICAgKFdlYkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6YmluZFZlcnRleEFycmF5T0VTKToKKwogMjAxMi0w
OS0yMSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hy
b21pdW1dIEFkZCBzZXR0ZXJzIHRvIFdlYkZpbHRlck9wZXJhdGlvbiBmb3IgSVBDIHBpY2tsaW5n
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggZmYxNmFmZTE1ZmZmYzY2YjMzMTgwODBlNTBlYzU2ZGJlN2MxYTZmZC4u
ZTVjNGVjMGFiZGFlNTU0OTU5YTU1MzE1MGNhMDE1YmEyNTE1ZDZmNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDMzIEBACisyMDEyLTA5LTIxICBCcmFuZG9uIEpvbmVzICA8YmFqb25lc0Bnb29nbGUu
Y29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBPRVNfdmVydGV4X2FycmF5X29iamVjdCBp
biBjaHJvbWl1bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTY1NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgYmFzaWMgcmVmZXJlbmNlIGNvdW50aW5nIHRvIFdlYkdMQnVmZmVyIG9iamVjdHMg
dG8gc2F0aXNmeSBzcGVjIHJlcXVpcmVtZW50cworICAgICAgICBmb3IgdGhlIE9FU192ZXJ0ZXhf
YXJyYXlfb2JqZWN0IGV4dGVuc2lvbi4gQWRkZWQgY29kZSB0byBhbGxvdyBjYWxscyB0byB0aGUK
KyAgICAgICAgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgZXh0ZW5zaW9uIHRvIGludGVyZmFjZSBw
cm9wZXJseSB3aXRoIHRoZSBjaHJvbWl1bSBXZWJHTAorICAgICAgICBpbXBsZW1lbnRhdGlvbi4K
KworICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVj
dC5odG1sCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6c2V0RWxlbWVudEFycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaDoKKyAg
ICAgICAgKFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Z2V0VmVydGV4QXR0cmliU3RhdGVTaXplKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0V4dGVuc2lvbnMzRENocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpjcmVhdGVWZXJ0ZXhBcnJh
eU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6ZGVsZXRlVmVy
dGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06Omlz
VmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06
OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisKIDIwMTItMDktMjEgIENocmlzIFJvZ2VycyAgPGNyb2dl
cnNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBBZGQgV2ViIEF1ZGlvIHN1cHBvcnQgZm9yIGRlcHJl
Y2F0ZWQvbGVnYWN5IEFQSXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9w
dWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9w
dWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCAzMTJkNGZhYjdhNjI5NDU3ZmNjYWU5
Y2U3MjgxN2EzMmQ5MDZlNWY2Li44MmQzZDM2YzhhYjU0ZWQwYTNiMTg0YzQxZmMyYTg2MWFkNTVl
NzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkdyYXBo
aWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJH
cmFwaGljc0NvbnRleHQzRC5oCkBAIC00NDMsNiArNDQzLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgcHVzaEdyb3VwTWFya2VyRVhUKGNvbnN0IFdHQzNEY2hhciogbWFya2VyKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgcG9wR3JvdXBNYXJrZXJFWFQodm9pZCkgeyB9CiAKKyAgICAvLyBH
TF9PRVNfdmVydGV4X2FycmF5X29iamVjdAorICAgIHZpcnR1YWwgV2ViR0xJZCBjcmVhdGVWZXJ0
ZXhBcnJheU9FUygpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4
QXJyYXlPRVMoV2ViR0xJZCBhcnJheSkgeyB9CisgICAgdmlydHVhbCBXR0MzRGJvb2xlYW4gaXNW
ZXJ0ZXhBcnJheU9FUyhXZWJHTElkIGFycmF5KSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoV2ViR0xJZCBhcnJheSkgeyB9CisKICAgICBHckdM
SW50ZXJmYWNlKiBjcmVhdGVHckdMSW50ZXJmYWNlKCk7CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmlu
ZGV4IDI0YjljMzNmOTMyMmNiYzdiZmVmMTRjYmZhNDJlMTJlMjU0MTRkYjkuLjU4MmVkNWQzOThh
YzNmMjQ3ZWI2YWFlYjZlZWRhODVlMjk0ZTVjODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMTU0NCwyMiArMTU0
NCw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVCdWZmZXIoV2ViR0xCdWZm
ZXIqIGJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX2JvdW5kQXJyYXlCdWZmZXIg
PT0gYnVmZmVyKQogICAgICAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSAwOwotICAgIFJlZlB0cjxX
ZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKLSAgICBpZiAoZWxlbWVudEFycmF5QnVmZmVyID09
IGJ1ZmZlcikKLSAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5zZXRFbGVtZW50QXJy
YXlCdWZmZXIoMCk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKLSAgICAgICAgaWYg
KGJ1ZmZlciA9PSBzdGF0ZS5idWZmZXJCaW5kaW5nKSB7Ci0gICAgICAgICAgICBzdGF0ZS5idWZm
ZXJCaW5kaW5nID0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyOwotICAgICAgICAgICAgc3RhdGUuYnl0
ZXNQZXJFbGVtZW50ID0gMDsKLSAgICAgICAgICAgIHN0YXRlLnNpemUgPSA0OwotICAgICAgICAg
ICAgc3RhdGUudHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAgICAgIHN0
YXRlLm5vcm1hbGl6ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHN0YXRlLnN0cmlkZSA9IDE2Owot
ICAgICAgICAgICAgc3RhdGUub3JpZ2luYWxTdHJpZGUgPSAwOwotICAgICAgICAgICAgc3RhdGUu
b2Zmc2V0ID0gMDsKLSAgICAgICAgfQotICAgIH0KKworICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9i
amVjdC0+dW5iaW5kQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKQEAg
LTQzODMsMTcgKzQzNjksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0
cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQwogICAgIH0KICAgICBH
QzNEc2l6ZWkgYnl0ZXNQZXJFbGVtZW50ID0gc2l6ZSAqIHR5cGVTaXplOwogCi0gICAgR0MzRHNp
emVpIHZhbGlkYXRlZFN0cmlkZSA9IHN0cmlkZSA/IHN0cmlkZSA6IGJ5dGVzUGVyRWxlbWVudDsK
LQotICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0
ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgp
OwotICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmcgPSBtX2JvdW5kQXJyYXlCdWZmZXI7Ci0gICAgc3Rh
dGUuYnl0ZXNQZXJFbGVtZW50ID0gYnl0ZXNQZXJFbGVtZW50OwotICAgIHN0YXRlLnNpemUgPSBz
aXplOwotICAgIHN0YXRlLnR5cGUgPSB0eXBlOwotICAgIHN0YXRlLm5vcm1hbGl6ZWQgPSBub3Jt
YWxpemVkOwotICAgIHN0YXRlLnN0cmlkZSA9IHZhbGlkYXRlZFN0cmlkZTsKLSAgICBzdGF0ZS5v
cmlnaW5hbFN0cmlkZSA9IHN0cmlkZTsKLSAgICBzdGF0ZS5vZmZzZXQgPSBzdGF0aWNfY2FzdDxH
QzNEaW50cHRyPihvZmZzZXQpOworICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVy
dGV4QXR0cmliU3RhdGUoaW5kZXgsIGJ5dGVzUGVyRWxlbWVudCwgc2l6ZSwgdHlwZSwgbm9ybWFs
aXplZCwgc3RyaWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBtX2JvdW5kQXJy
YXlCdWZmZXIpOwogICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6
ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZz
ZXQpKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAppbmRleCA2
MDIzYjQ0NjI2YjZjZTllYzU1YzJkZmVlZDRhZDM2MjI2MDMxM2YxLi40NWRmNmE1ODI1ZjQ2OGU4
NmRlYjI4N2NjODVmMGM2YTI2Nzg5NTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaApAQCAtMzIyLDYgKzMyMiw3IEBAIHB1Ymxp
YzoKICAgICBmcmllbmQgY2xhc3MgV2ViR0xEZWJ1Z1NoYWRlcnM7CiAgICAgZnJpZW5kIGNsYXNz
IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOwogICAgIGZyaWVuZCBjbGFzcyBXZWJHTFJlbmRl
cmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjazsKKyAgICBmcmllbmQgY2xhc3MgV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUzsKIAogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2Fu
dmFzRWxlbWVudCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyk7CiAgICAgdm9pZCBpbml0aWFsaXplTmV3Q29udGV4dCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTLmNwcAppbmRleCA0YWEwM2I4ZmVhMTUxOWI5NzIyMzcwNGNhZmJmYTc2MzgxMzJhZjIy
Li5hOThkMDkyZTg3ZDRlYzI2YWM4MjhjYzI0ZDM1NWY5NzBlNGMzMjUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
LmNwcApAQCAtNzIsNiArNzIsNzUgQEAgdm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpk
ZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QsIFAKICAgICAgICAg
ZXh0ZW5zaW9ucy0+ZGVsZXRlVmVydGV4QXJyYXlPRVMob2JqZWN0KTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQorCisgICAgaWYgKG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIpCisgICAgICAgIG1f
Ym91bmRFbGVtZW50QXJyYXlCdWZmZXItPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCk7ICsraSkgewor
ICAgICAgICBWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX3ZlcnRleEF0dHJpYlN0YXRlW2ld
OworICAgICAgICBpZiAoc3RhdGUuYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgIHN0YXRlLmJ1
ZmZlckJpbmRpbmctPm9uRGV0YWNoZWQoY29udGV4dDNkKTsKKyAgICB9Cit9CisKK3ZvaWQgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6c2V0RWxlbWVudEFycmF5QnVmZmVyKFBhc3NSZWZQdHI8
V2ViR0xCdWZmZXI+IGJ1ZmZlcikKK3sKKyAgICBpZiAoYnVmZmVyKQorICAgICAgICBidWZmZXIt
Pm9uQXR0YWNoZWQoKTsKKyAgICBpZiAobV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlcikKKyAgICAg
ICAgbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+b25EZXRhY2hlZChjb250ZXh0KCktPmdyYXBo
aWNzQ29udGV4dDNEKCkpOworICAgIG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIgPSBidWZmZXI7
CisgICAgCit9CisKK3ZvaWQgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6c2V0VmVydGV4QXR0
cmliU3RhdGUoCisgICAgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBieXRlc1BlckVsZW1lbnQs
IEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0Mz
RHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQsIFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+
IGJ1ZmZlcikKK3sKKyAgICBHQzNEc2l6ZWkgdmFsaWRhdGVkU3RyaWRlID0gc3RyaWRlID8gc3Ry
aWRlIDogYnl0ZXNQZXJFbGVtZW50OworCisgICAgVmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0g
bV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmRleF07CisKKyAgICBpZiAoYnVmZmVyKQorICAgICAgICBi
dWZmZXItPm9uQXR0YWNoZWQoKTsKKyAgICBpZiAoc3RhdGUuYnVmZmVyQmluZGluZykKKyAgICAg
ICAgc3RhdGUuYnVmZmVyQmluZGluZy0+b25EZXRhY2hlZChjb250ZXh0KCktPmdyYXBoaWNzQ29u
dGV4dDNEKCkpOworCisgICAgc3RhdGUuYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKKyAgICBzdGF0
ZS5ieXRlc1BlckVsZW1lbnQgPSBieXRlc1BlckVsZW1lbnQ7CisgICAgc3RhdGUuc2l6ZSA9IHNp
emU7CisgICAgc3RhdGUudHlwZSA9IHR5cGU7CisgICAgc3RhdGUubm9ybWFsaXplZCA9IG5vcm1h
bGl6ZWQ7CisgICAgc3RhdGUuc3RyaWRlID0gdmFsaWRhdGVkU3RyaWRlOworICAgIHN0YXRlLm9y
aWdpbmFsU3RyaWRlID0gc3RyaWRlOworICAgIHN0YXRlLm9mZnNldCA9IG9mZnNldDsKK30KKwor
dm9pZCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjp1bmJpbmRCdWZmZXIoUGFzc1JlZlB0cjxX
ZWJHTEJ1ZmZlcj4gYnVmZmVyKQoreworICAgIGlmIChtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVy
ID09IGJ1ZmZlcikgeworICAgICAgICBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5vbkRldGFj
aGVkKGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgICAgIG1fYm91bmRFbGVt
ZW50QXJyYXlCdWZmZXIgPSAwOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV92ZXJ0ZXhBdHRyaWJTdGF0ZS5zaXplKCk7ICsraSkgeworICAgICAgICBWZXJ0ZXhBdHRyaWJT
dGF0ZSYgc3RhdGUgPSBtX3ZlcnRleEF0dHJpYlN0YXRlW2ldOworICAgICAgICBpZiAoc3RhdGUu
YnVmZmVyQmluZGluZyA9PSBidWZmZXIpIHsKKyAgICAgICAgICAgIGJ1ZmZlci0+b25EZXRhY2hl
ZChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCkpOworCisgICAgICAgICAgICBpZiAoIWkg
JiYgIWNvbnRleHQoKS0+aXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgICAgICAgICAgc3Rh
dGUuYnVmZmVyQmluZGluZyA9IGNvbnRleHQoKS0+bV92ZXJ0ZXhBdHRyaWIwQnVmZmVyOworICAg
ICAgICAgICAgICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmctPm9uQXR0YWNoZWQoKTsKKyAgICAgICAg
ICAgICAgICBzdGF0ZS5ieXRlc1BlckVsZW1lbnQgPSAwOworICAgICAgICAgICAgICAgIHN0YXRl
LnNpemUgPSA0OworICAgICAgICAgICAgICAgIHN0YXRlLnR5cGUgPSBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQ7CisgICAgICAgICAgICAgICAgc3RhdGUubm9ybWFsaXplZCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIHN0YXRlLnN0cmlkZSA9IDE2OworICAgICAgICAgICAgICAgIHN0YXRlLm9y
aWdpbmFsU3RyaWRlID0gMDsKKyAgICAgICAgICAgICAgICBzdGF0ZS5vZmZzZXQgPSAwOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc3RhdGUuYnVmZmVyQmluZGluZyA9IDA7
CisgICAgICAgIH0KKyAgICB9CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaAppbmRleCA3NWFlNDJmZjcyNWFj
ZDFkZmVkYmNlNmEwYmM5MmQzYzQwMjhmNDM1Li5iNjYwZGU1ODgxMzEzMmQwY2E1OWUyOWJmNGVk
OTQ0NTlmMWNjOTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFZlcnRleEFycmF5T2JqZWN0T0VTLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oCkBAIC03Niw5ICs3NiwxMSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRIYXNFdmVyQmVlbkJvdW5kKCkgeyBtX2hhc0V2ZXJCZWVuQm91bmQgPSB0cnVl
OyB9CiAgICAgCiAgICAgUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gZ2V0RWxlbWVudEFycmF5QnVm
ZmVyKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlcjsgfQotICAgIHZv
aWQgc2V0RWxlbWVudEFycmF5QnVmZmVyKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IGJ1ZmZlcikg
eyBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyID0gYnVmZmVyOyB9CisgICAgdm9pZCBzZXRFbGVt
ZW50QXJyYXlCdWZmZXIoUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4pOwogICAgIAogICAgIFZlcnRl
eEF0dHJpYlN0YXRlJiBnZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbnQgaW5kZXgpIHsgcmV0dXJuIG1f
dmVydGV4QXR0cmliU3RhdGVbaW5kZXhdOyB9CisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJTdGF0
ZShHQzNEdWludCwgR0MzRHNpemVpLCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGJvb2xlYW4sIEdD
M0RzaXplaSwgR0MzRGludHB0ciwgUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4pOworICAgIHZvaWQg
dW5iaW5kQnVmZmVyKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KTsKIAogcHJpdmF0ZToKICAgICBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIFZhb1R5cGUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9F
eHRlbnNpb25zM0RDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L0V4dGVuc2lvbnMzRENocm9taXVtLmNwcAppbmRleCA5NDEyMjc0Yzc2MjgzNWM1
OWY5YzAwNzVlNTQ2ZDI5NzM3NzI1YWNkLi4xN2MzMDIxODMwYTIwYjI0YTRmN2M2ZWU1MTIyYWJh
MWZjYjIzOWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9z
dXBwb3J0L0V4dGVuc2lvbnMzRENocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0V4dGVuc2lvbnMzRENocm9taXVtLmNwcApAQCAtOTcsMjAg
Kzk3LDIyIEBAIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnVubWFwVGV4U3ViSW1hZ2UyRENI
Uk9NSVVNKGNvbnN0IHZvaWQqIGRhdGEpCiAKIFBsYXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9uczNE
Q2hyb21pdW06OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKIHsKLSAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7CiB9
CiAKLXZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRm
b3JtM0RPYmplY3QpCit2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpkZWxldGVWZXJ0ZXhBcnJh
eU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQogeworICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4
dCgpLT5kZWxldGVWZXJ0ZXhBcnJheU9FUyhhcnJheSk7CiB9CiAKLUdDM0Rib29sZWFuIEV4dGVu
c2lvbnMzRENocm9taXVtOjppc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpCitHQzNE
Ym9vbGVhbiBFeHRlbnNpb25zM0RDaHJvbWl1bTo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNE
T2JqZWN0IGFycmF5KQogewotICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3ByaXZhdGUtPndl
YkNvbnRleHQoKS0+aXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7CiB9CiAKLXZvaWQgRXh0ZW5zaW9u
czNEQ2hyb21pdW06OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KQordm9pZCBF
eHRlbnNpb25zM0RDaHJvbWl1bTo6YmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3Qg
YXJyYXkpCiB7CisgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmJpbmRWZXJ0ZXhBcnJheU9F
UyhhcnJheSk7CiB9CiAKIFN0cmluZyBFeHRlbnNpb25zM0RDaHJvbWl1bTo6Z2V0VHJhbnNsYXRl
ZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDk1NmQ2
ZjVhY2ExNDNkNDUxZDA2ZTE4M2RhZDBhOTg4MThjNWRmNzQuLjkzODRhYjg4OWY4ZjBlNmZjYWI1
ZWFlYzIyNGMxMzJhZDZmZGRkNTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0wOS0yMSAg
QnJhbmRvbiBKb25lcyAgPGJham9uZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9y
dCBmb3IgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QgaW4gY2hyb21pdW0KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NTc4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnJvdWdodCBvdmVyIEtIUk9OT1MgY29u
Zm9ybWFuY2UgdGVzdCBmb3IgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKworICAgICAgICAqIGZh
c3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0LWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1vYmplY3Qu
aHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZWZsL1NraXBwZWQ6CisgICAgICAgICog
cGxhdGZvcm0vZ3RrLXdrMi9Ta2lwcGVkOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Ta2lwcGVk
OgorICAgICAgICAqIHBsYXRmb3JtL3drMi9Ta2lwcGVkOgorCiAyMDEyLTA5LTIxICBDaHJpcyBS
b2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+CiAKICAgICAgICAgQWRkIFdlYiBBdWRpbyBzdXBw
b3J0IGZvciBkZXByZWNhdGVkL2xlZ2FjeSBBUElzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9vZXMtdmVydGV4LWFycmF5LW9iamVjdC1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzdhYmFkZDc4MWI2NGZiZDYyMTY0YzcxYTdiOTYzNmIyMDg3
ZjYyOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL29l
cy12ZXJ0ZXgtYXJyYXktb2JqZWN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUwIEBACitUaGlz
IHRlc3QgdmVyaWZpZXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIE9FU192ZXJ0ZXhfYXJyYXlf
b2JqZWN0IGV4dGVuc2lvbiwgaWYgaXQgaXMgYXZhaWxhYmxlLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBXZWJHTCBjb250ZXh0IGV4aXN0cworVGVzdGluZyBiaW5kaW5n
IGVudW0gd2l0aCBleHRlbnNpb24gZGlzYWJsZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBJTlZBTElEX0VOVU0gOiBWRVJURVhfQVJSQVlfQklORElOR19PRVMgc2hvdWxkIG5v
dCBiZSBxdWVyeWFibGUgaWYgZXh0ZW5zaW9uIGlzIGRpc2FibGVkCitQQVNTIFN1Y2Nlc3NmdWxs
eSBlbmFibGVkIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IGV4dGVuc2lvbgorUEFTUyBPRVNfdmVy
dGV4X2FycmF5X29iamVjdCBsaXN0ZWQgYXMgc3VwcG9ydGVkIGFuZCBnZXRFeHRlbnNpb24gc3Vj
Y2VlZGVkCitUZXN0aW5nIGJpbmRpbmcgZW51bSB3aXRoIGV4dGVuc2lvbiBlbmFibGVkCitQQVNT
IGV4dC5WRVJURVhfQVJSQVlfQklORElOR19PRVMgaXMgMHg4NUI1CitQQVNTIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBWRVJURVhfQVJSQVlfQklORElOR19PRVMgcXVl
cnkgc2hvdWxkIHN1Y2NlZWQgaWYgZXh0ZW5zaW9uIGlzIGVuYWJsZQorUEFTUyBEZWZhdWx0IHZh
bHVlIG9mIFZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUyBpcyBudWxsCitUZXN0aW5nIGJpbmRpbmcg
YSBWQU8KK1BBU1MgZ2wuZ2V0UGFyYW1ldGVyKGV4dC5WRVJURVhfQVJSQVlfQklORElOR19PRVMp
IGlzIG51bGwKK1BBU1MgZ2wuZ2V0UGFyYW1ldGVyKGV4dC5WRVJURVhfQVJSQVlfQklORElOR19P
RVMpIGlzIGV4cGVjdGVkIFZBTworUEFTUyBnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9BUlJB
WV9CSU5ESU5HX09FUykgaXMgZXhwZWN0ZWQgVkFPCitQQVNTIGdsLmdldFBhcmFtZXRlcihleHQu
VkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSBpcyBudWxsCitQQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogSU5WQUxJRF9PUEVSQVRJT04gOiBiaW5kaW5nIGEgZGVsZXRlZCB2ZXJ0ZXgg
YXJyYXkgb2JqZWN0CitQQVNTIGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJ
TkdfT0VTKSBpcyBudWxsCitUZXN0aW5nIG9iamVjdCBjcmVhdGlvbgorUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogY3JlYXRlVmVydGV4QXJyYXlPRVMgc2hvdWxk
IG5vdCBzZXQgYW4gZXJyb3IKK1BBU1MgdmFvIGlzIG5vbi1udWxsLgorUEFTUyBleHQuaXNWZXJ0
ZXhBcnJheU9FUyh2YW8pIGlzIGZhbHNlCitQQVNTIGV4dC5pc1ZlcnRleEFycmF5T0VTKHZhbykg
aXMgdHJ1ZQorUEFTUyBleHQuaXNWZXJ0ZXhBcnJheU9FUyh2YW8pIGlzIHRydWUKK1BBU1MgZXh0
LmlzVmVydGV4QXJyYXlPRVMoKSBpcyBmYWxzZQorUEFTUyBleHQuaXNWZXJ0ZXhBcnJheU9FUyhu
dWxsKSBpcyBmYWxzZQorVGVzdGluZyBhdHRyaWJ1dGVzIHdvcmsgYWNyb3NzIGJpbmRpbmdzCitQ
QVNTIEFsbCBhdHRyaWJ1dGVzIHByZXNlcnZlZCBhY3Jvc3MgYmluZGluZ3MKK1Rlc3RpbmcgdGhh
dCBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBub3QgYXR0YWNoZWQgdG8gYmluZGluZ3MKK1BBU1MgVmVy
dGV4IGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIG5vdCBhdHRhY2hlZCB0byBiaW5kaW5ncworVGVzdGlu
ZyBkcmF3cyB3aXRoIHZhcmlvdXMgVkFPIGJpbmRpbmdzCitQQVNTIERyYXcgMCBwYXNzZWQgcGl4
ZWwgdGVzdAorUEFTUyBEcmF3IDEgcGFzc2VkIHBpeGVsIHRlc3QKK1BBU1MgRHJhdyAyIHBhc3Nl
ZCBwaXhlbCB0ZXN0CitUZXN0aW5nIHVzaW5nIGRlbGV0ZWQgYnVmZmVycyByZWZlcmVuY2VkIGJ5
IFZBT3MKK1BBU1Mgc2hvdWxkIGJlIDI1NSwwLDAsMjU1CitQQVNTIHNob3VsZCBiZSAwLDI1NSww
LDI1NQorUEFTUyBzaG91bGQgYmUgMCwwLDI1NSwyNTUKK1BBU1Mgc2hvdWxkIGJlIDAsMjU1LDI1
NSwyNTUKK1Rlc3RpbmcgdGhhdCBWQU9zIGRvbid0IGVmZmVjdCBBUlJBWV9CVUZGRVIgYmluZGlu
Zy4KK1BBU1Mgc2hvdWxkIGJlIHJlZAorUEFTUyBzaG91bGQgYmUgZ3JlZW4KK1BBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHRoZXJlIHNob3VsZCBiZSBubyBlcnJv
cnMKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1vYmplY3QuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Y2QwNzk0MzcwOWYxODEzODVkNTJjNDBiY2Q5NGE0OGQwZTMwZDI1ZAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0
Lmh0bWwKQEAgLTAsMCArMSw1OTcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzx0aXRsZT5XZWJHTCBPRVNfdmVydGV4X2FycmF5X29i
amVjdCBDb25mb3JtYW5jZSBUZXN0czwvdGl0bGU+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Rl
c2t0b3AtZ2wtY29uc3RhbnRzLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGNhbnZhcyBpZD0iY2FudmFz
IiBzdHlsZT0id2lkdGg6IDUwcHg7IGhlaWdodDogNTBweDsiPiA8L2NhbnZhcz4KKzxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBpZD0idnNoYWRlciIsIHR5cGU9Ingtc2hhZGVyL3gt
dmVydGV4Ij4KK2F0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247CithdHRyaWJ1dGUgdmVjNCBhX2Nv
bG9yOwordmFyeWluZyB2ZWM0IHZfY29sb3I7Cit2b2lkIG1haW4odm9pZCkgeworICAgIGdsX1Bv
c2l0aW9uID0gYV9wb3NpdGlvbjsKKyAgICB2X2NvbG9yID0gYV9jb2xvcjsKK30KKzwvc2NyaXB0
PgorPHNjcmlwdCBpZD0iZnNoYWRlciIsIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgorcHJl
Y2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cit2YXJ5aW5nIHZlYzQgdl9jb2xvcjsKK3ZvaWQgbWFpbih2
b2lkKSB7CisgICAgZ2xfRnJhZ0NvbG9yID0gdl9jb2xvcjsKK30KKzwvc2NyaXB0PgorPHNjcmlw
dD4KK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2Yg
dGhlIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IGV4dGVuc2lvbiwgaWYgaXQgaXMgYXZhaWxhYmxl
LiIpOworCitkZWJ1ZygiIik7CisKK3ZhciB3dHUgPSBXZWJHTFRlc3RVdGlsczsKK3ZhciBjYW52
YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Cit2YXIgZ2wgPSBjcmVhdGUz
RENvbnRleHQoY2FudmFzKTsKK3ZhciBleHQgPSBudWxsOwordmFyIHZhbyA9IG51bGw7CisKK2lm
ICghZ2wpIHsKKyAgICB0ZXN0RmFpbGVkKCJXZWJHTCBjb250ZXh0IGRvZXMgbm90IGV4aXN0Iik7
Cit9IGVsc2UgeworICAgIHRlc3RQYXNzZWQoIldlYkdMIGNvbnRleHQgZXhpc3RzIik7CisKKyAg
ICAvLyBTZXR1cCBlbXVsYXRlZCBPRVNWZXJ0ZXhBcnJheU9iamVjdCBpZiBpdCBoYXMgYmVlbiBp
bmNsdWRlZC4KKyAgICBpZiAod2luZG93LnNldHVwVmVydGV4QXJyYXlPYmplY3QpIHsKKyAgICAg
ICAgZGVidWcoInVzaW5nIGVtdWF0ZWQgT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAgICAg
ICAgc2V0dXBWZXJ0ZXhBcnJheU9iamVjdChnbCk7CisgICAgfQorCisgICAgLy8gUnVuIHRlc3Rz
IHdpdGggZXh0ZW5zaW9uIGRpc2FibGVkCisgICAgcnVuQmluZGluZ1Rlc3REaXNhYmxlZCgpOwor
CisgICAgLy8gUXVlcnkgdGhlIGV4dGVuc2lvbiBhbmQgc3RvcmUgZ2xvYmFsbHkgc28gc2hvdWxk
QmUgY2FuIGFjY2VzcyBpdAorICAgIGV4dCA9IGdsLmdldEV4dGVuc2lvbigiT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QiKTsKKyAgICBpZiAoIWV4dCkgeworICAgICAgICB0ZXN0UGFzc2VkKCJObyBP
RVNfdmVydGV4X2FycmF5X29iamVjdCBzdXBwb3J0IC0tIHRoaXMgaXMgbGVnYWwiKTsKKworICAg
ICAgICBydW5TdXBwb3J0ZWRUZXN0KGZhbHNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0
UGFzc2VkKCJTdWNjZXNzZnVsbHkgZW5hYmxlZCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBleHRl
bnNpb24iKTsKKworICAgICAgICBydW5TdXBwb3J0ZWRUZXN0KHRydWUpOworICAgICAgICBydW5C
aW5kaW5nVGVzdEVuYWJsZWQoKTsKKyAgICAgICAgcnVuT2JqZWN0VGVzdCgpOworICAgICAgICBy
dW5BdHRyaWJ1dGVUZXN0cygpOworICAgICAgICBydW5BdHRyaWJ1dGVWYWx1ZVRlc3RzKCk7Cisg
ICAgICAgIHJ1bkRyYXdUZXN0cygpOworICAgICAgICBydW5EZWxldGVUZXN0cygpOworICAgICAg
ICBydW5BcnJheUJ1ZmZlckJpbmRUZXN0cygpOworICAgICAgICBnbEVycm9yU2hvdWxkQmUoZ2ws
IGdsLk5PX0VSUk9SLCAidGhlcmUgc2hvdWxkIGJlIG5vIGVycm9ycyIpOworICAgIH0KK30KKwor
ZnVuY3Rpb24gcnVuU3VwcG9ydGVkVGVzdChleHRlbnNpb25FbmFibGVkKSB7CisgICAgdmFyIHN1
cHBvcnRlZCA9IGdsLmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKKyAgICBpZiAoc3VwcG9ydGVk
LmluZGV4T2YoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikgPj0gMCkgeworICAgICAgICBpZiAo
ZXh0ZW5zaW9uRW5hYmxlZCkgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgiT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QgbGlzdGVkIGFzIHN1cHBvcnRlZCBhbmQgZ2V0RXh0ZW5zaW9uIHN1Y2NlZWRl
ZCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiT0VTX3ZlcnRl
eF9hcnJheV9vYmplY3QgbGlzdGVkIGFzIHN1cHBvcnRlZCBidXQgZ2V0RXh0ZW5zaW9uIGZhaWxl
ZCIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGV4dGVuc2lvbkVuYWJs
ZWQpIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IG5v
dCBsaXN0ZWQgYXMgc3VwcG9ydGVkIGJ1dCBnZXRFeHRlbnNpb24gc3VjY2VlZGVkIik7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJPRVNfdmVydGV4X2FycmF5X29i
amVjdCBub3QgbGlzdGVkIGFzIHN1cHBvcnRlZCBhbmQgZ2V0RXh0ZW5zaW9uIGZhaWxlZCAtLSB0
aGlzIGlzIGxlZ2FsIik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1bkJpbmRp
bmdUZXN0RGlzYWJsZWQoKSB7CisgICAgZGVidWcoIlRlc3RpbmcgYmluZGluZyBlbnVtIHdpdGgg
ZXh0ZW5zaW9uIGRpc2FibGVkIik7CisgICAgCisgICAgLy8gVXNlIHRoZSBjb25zdGFudCBkaXJl
Y3RseSBhcyB3ZSBkb24ndCBoYXZlIHRoZSBleHRlbnNpb24KKyAgICB2YXIgVkVSVEVYX0FSUkFZ
X0JJTkRJTkdfT0VTID0gMHg4NUI1OworICAgIAorICAgIGdsLmdldFBhcmFtZXRlcihWRVJURVhf
QVJSQVlfQklORElOR19PRVMpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuSU5WQUxJRF9F
TlVNLCAiVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTIHNob3VsZCBub3QgYmUgcXVlcnlhYmxlIGlm
IGV4dGVuc2lvbiBpcyBkaXNhYmxlZCIpOworfQorCitmdW5jdGlvbiBydW5CaW5kaW5nVGVzdEVu
YWJsZWQoKSB7CisgICAgZGVidWcoIlRlc3RpbmcgYmluZGluZyBlbnVtIHdpdGggZXh0ZW5zaW9u
IGVuYWJsZWQiKTsKKyAgICAKKyAgICBzaG91bGRCZSgiZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5H
X09FUyIsICIweDg1QjUiKTsKKyAgICAKKyAgICBnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9B
UlJBWV9CSU5ESU5HX09FUyk7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwg
IlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUyBxdWVyeSBzaG91bGQgc3VjY2VlZCBpZiBleHRlbnNp
b24gaXMgZW5hYmxlIik7CisgICAgCisgICAgLy8gRGVmYXVsdCB2YWx1ZSBpcyBudWxsCisgICAg
aWYgKGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSA9PT0gbnVs
bCkgeworICAgICAgICB0ZXN0UGFzc2VkKCJEZWZhdWx0IHZhbHVlIG9mIFZFUlRFWF9BUlJBWV9C
SU5ESU5HX09FUyBpcyBudWxsIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZCgi
RGVmYXVsdCB2YWx1ZSBvZiBWRVJURVhfQVJSQVlfQklORElOR19PRVMgaXMgbm90IG51bGwiKTsK
KyAgICB9CisgICAgCisgICAgZGVidWcoIlRlc3RpbmcgYmluZGluZyBhIFZBTyIpOworICAgIHZh
ciB2YW8wID0gZXh0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7CisgICAgdmFyIHZhbzEgPSBleHQu
Y3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICBzaG91bGRCZU51bGwoImdsLmdldFBhcmFtZXRl
cihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSIpOworICAgIGV4dC5iaW5kVmVydGV4QXJy
YXlPRVModmFvMCk7CisgICAgaWYgKGdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJ
TkRJTkdfT0VTKSA9PSB2YW8wKSB7CisgICAgICAgIHRlc3RQYXNzZWQoImdsLmdldFBhcmFtZXRl
cihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSBpcyBleHBlY3RlZCBWQU8iKTsKKyAgICB9
IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJnbC5nZXRQYXJhbWV0ZXIoZXh0LlZFUlRFWF9B
UlJBWV9CSU5ESU5HX09FUykgaXMgbm90IGV4cGVjdGVkIFZBTyIpCisgICAgfQorICAgIGV4dC5i
aW5kVmVydGV4QXJyYXlPRVModmFvMSk7CisgICAgaWYgKGdsLmdldFBhcmFtZXRlcihleHQuVkVS
VEVYX0FSUkFZX0JJTkRJTkdfT0VTKSA9PSB2YW8xKSB7CisgICAgICAgIHRlc3RQYXNzZWQoImds
LmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSBpcyBleHBlY3RlZCBW
QU8iKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJnbC5nZXRQYXJhbWV0ZXIo
ZXh0LlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUykgaXMgbm90IGV4cGVjdGVkIFZBTyIpCisgICAg
fQorICAgIGV4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh2YW8xKTsKKyAgICBzaG91bGRCZU51bGwo
ImdsLmdldFBhcmFtZXRlcihleHQuVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTKSIpOworICAgIGV4
dC5iaW5kVmVydGV4QXJyYXlPRVModmFvMSk7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5J
TlZBTElEX09QRVJBVElPTiwgImJpbmRpbmcgYSBkZWxldGVkIHZlcnRleCBhcnJheSBvYmplY3Qi
KTsKKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOworICAgIHNob3VsZEJlTnVsbCgi
Z2wuZ2V0UGFyYW1ldGVyKGV4dC5WRVJURVhfQVJSQVlfQklORElOR19PRVMpIik7CisgICAgZXh0
LmRlbGV0ZVZlcnRleEFycmF5T0VTKHZhbzEpOworfQorCitmdW5jdGlvbiBydW5PYmplY3RUZXN0
KCkgeworICAgIGRlYnVnKCJUZXN0aW5nIG9iamVjdCBjcmVhdGlvbiIpOworICAgIAorICAgIHZh
byA9IGV4dC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOworICAgIGdsRXJyb3JTaG91bGRCZShnbCwg
Z2wuTk9fRVJST1IsICJjcmVhdGVWZXJ0ZXhBcnJheU9FUyBzaG91bGQgbm90IHNldCBhbiBlcnJv
ciIpOworICAgIHNob3VsZEJlTm9uTnVsbCgidmFvIik7CisgICAgCisgICAgLy8gRXhwZWN0IGZh
bHNlIGlmIG5ldmVyIGJvdW5kCisgICAgc2hvdWxkQmVGYWxzZSgiZXh0LmlzVmVydGV4QXJyYXlP
RVModmFvKSIpOworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvKTsKKyAgICBzaG91bGRC
ZVRydWUoImV4dC5pc1ZlcnRleEFycmF5T0VTKHZhbykiKTsKKyAgICBleHQuYmluZFZlcnRleEFy
cmF5T0VTKG51bGwpOworICAgIHNob3VsZEJlVHJ1ZSgiZXh0LmlzVmVydGV4QXJyYXlPRVModmFv
KSIpOworICAgIAorICAgIHNob3VsZEJlRmFsc2UoImV4dC5pc1ZlcnRleEFycmF5T0VTKCkiKTsK
KyAgICBzaG91bGRCZUZhbHNlKCJleHQuaXNWZXJ0ZXhBcnJheU9FUyhudWxsKSIpOworICAgIAor
ICAgIGV4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh2YW8pOworICAgIHZhbyA9IG51bGw7Cit9CisK
K2Z1bmN0aW9uIHJ1bkF0dHJpYnV0ZVRlc3RzKCkgeworICAgIGRlYnVnKCJUZXN0aW5nIGF0dHJp
YnV0ZXMgd29yayBhY3Jvc3MgYmluZGluZ3MiKTsKKyAgICAKKyAgICB2YXIgc3RhdGVzID0gW107
CisgICAgCisgICAgdmFyIGF0dHJDb3VudCA9IGdsLmdldFBhcmFtZXRlcihnbC5NQVhfVkVSVEVY
X0FUVFJJQlMpOworICAgIGZvciAodmFyIG4gPSAwOyBuIDwgYXR0ckNvdW50OyBuKyspIHsKKyAg
ICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIG51bGwpOworICAgICAgICBnbC5i
aW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBudWxsKTsKKyAgICAgICAgCisgICAg
ICAgIHZhciBzdGF0ZSA9IHt9OworICAgICAgICBzdGF0ZXMucHVzaChzdGF0ZSk7CisgICAgICAg
IAorICAgICAgICB2YXIgdmFvID0gc3RhdGUudmFvID0gZXh0LmNyZWF0ZVZlcnRleEFycmF5T0VT
KCk7CisgICAgICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChuICUgMiA9PSAwKSB7CisgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdsLmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShuKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG4gJSAyID09
IDApIHsKKyAgICAgICAgICAgIHZhciBidWZmZXIgPSBzdGF0ZS5idWZmZXIgPSBnbC5jcmVhdGVC
dWZmZXIoKTsKKyAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWZm
ZXIpOworICAgICAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIDEwMjQsIGds
LlNUQVRJQ19EUkFXKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZ2wudmVydGV4QXR0cmli
UG9pbnRlcihuLCAxICsgbiAlIDQsIGdsLkZMT0FULCB0cnVlLCBuICogNCwgbiAqIDQpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobiAlIDIgPT0gMCkgeworICAgICAgICAgICAg
dmFyIGVsYnVmZmVyID0gc3RhdGUuZWxidWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAg
ICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGVsYnVmZmVyKTsK
KyAgICAgICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIDEwMjQs
IGdsLlNUQVRJQ19EUkFXKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZXh0LmJpbmRW
ZXJ0ZXhBcnJheU9FUyhudWxsKTsKKyAgICB9CisgICAgCisgICAgdmFyIGFueU1pc21hdGNoID0g
ZmFsc2U7CisgICAgZm9yICh2YXIgbiA9IDA7IG4gPCBhdHRyQ291bnQ7IG4rKykgeworICAgICAg
ICB2YXIgc3RhdGUgPSBzdGF0ZXNbbl07CisgICAgICAgIAorICAgICAgICBleHQuYmluZFZlcnRl
eEFycmF5T0VTKHN0YXRlLnZhbyk7CisgICAgICAgIAorICAgICAgICB2YXIgaXNFbmFibGVkID0g
Z2wuZ2V0VmVydGV4QXR0cmliKG4sIGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCk7Cisg
ICAgICAgIGlmICgobiAlIDIgPT0gMSkgfHwgaXNFbmFibGVkKSB7CisgICAgICAgICAgICAvLyBW
YWxpZAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiVkVSVEVYX0FU
VFJJQl9BUlJBWV9FTkFCTEVEIG5vdCBwcmVzZXJ2ZWQiKTsKKyAgICAgICAgICAgIGFueU1pc21h
dGNoID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmFyIGJ1ZmZlciA9IGds
LmdldFZlcnRleEF0dHJpYihuLCBnbC5WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5H
KTsKKyAgICAgICAgaWYgKG4gJSAyID09IDApIHsKKyAgICAgICAgICAgIGlmIChidWZmZXIgPT0g
c3RhdGUuYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgLy8gTWF0Y2hlZAorICAgICAgICAgICAg
ICAgIGlmICgoZ2wuZ2V0VmVydGV4QXR0cmliKG4sIGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfU0la
RSkgPT0gMSArIG4gJSA0KSAmJgorICAgICAgICAgICAgICAgICAgICAoZ2wuZ2V0VmVydGV4QXR0
cmliKG4sIGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSkgPT0gZ2wuRkxPQVQpICYmCisgICAg
ICAgICAgICAgICAgICAgIChnbC5nZXRWZXJ0ZXhBdHRyaWIobiwgZ2wuVkVSVEVYX0FUVFJJQl9B
UlJBWV9OT1JNQUxJWkVEKSA9PSB0cnVlKSAmJgorICAgICAgICAgICAgICAgICAgICAoZ2wuZ2V0
VmVydGV4QXR0cmliKG4sIGdsLlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFKSA9PSBuICogNCkg
JiYKKyAgICAgICAgICAgICAgICAgICAgKGdsLmdldFZlcnRleEF0dHJpYk9mZnNldChuLCBnbC5W
RVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIpID09IG4gKiA0KSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBNYXRjaGVkCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGVzdEZhaWxlZCgiVkVSVEVYX0FUVFJJQl9BUlJBWV8qIG5vdCBwcmVzZXJ2ZWQiKTsK
KyAgICAgICAgICAgICAgICAgICAgYW55TWlzbWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiVkVS
VEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORyBub3QgcHJlc2VydmVkIik7CisgICAgICAg
ICAgICAgICAgYW55TWlzbWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCIGlzIG5vdCBwcmVz
ZXJ2ZWQKKyAgICAgICAgICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgICAgICAgICB0ZXN0RmFp
bGVkKCJWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HIG5vdCBwcmVzZXJ2ZWQiKTsK
KyAgICAgICAgICAgICAgICBhbnlNaXNtYXRjaCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHZhciBlbGJ1ZmZlciA9IGdsLmdldFBhcmFtZXRlcihn
bC5FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HKTsKKyAgICAgICAgaWYgKG4gJSAyID09IDAp
IHsKKyAgICAgICAgICAgIGlmIChlbGJ1ZmZlciA9PSBzdGF0ZS5lbGJ1ZmZlcikgeworICAgICAg
ICAgICAgICAgIC8vIE1hdGNoZWQKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgdGVzdEZhaWxlZCgiRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyBub3QgcHJlc2VydmVk
Iik7CisgICAgICAgICAgICAgICAgYW55TWlzbWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGVsYnVmZmVyID09IG51bGwpIHsKKyAg
ICAgICAgICAgICAgICAvLyBNYXRjaGVkCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHRlc3RGYWlsZWQoIkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgbm90IHByZXNl
cnZlZCIpOworICAgICAgICAgICAgICAgIGFueU1pc21hdGNoID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOwor
ICAgIGlmICghYW55TWlzbWF0Y2gpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiQWxsIGF0dHJpYnV0
ZXMgcHJlc2VydmVkIGFjcm9zcyBiaW5kaW5ncyIpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHZh
ciBuID0gMDsgbiA8IGF0dHJDb3VudDsgbisrKSB7CisgICAgICAgIHZhciBzdGF0ZSA9IHN0YXRl
c1tuXTsKKyAgICAgICAgZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHN0YXRlLnZhbyk7CisgICAg
fQorfQorCitmdW5jdGlvbiBydW5BdHRyaWJ1dGVWYWx1ZVRlc3RzKCkgeworICAgIGRlYnVnKCJU
ZXN0aW5nIHRoYXQgYXR0cmlidXRlIHZhbHVlcyBhcmUgbm90IGF0dGFjaGVkIHRvIGJpbmRpbmdz
Iik7CisgICAgCisgICAgdmFyIHY7CisgICAgdmFyIHZhbzAgPSBleHQuY3JlYXRlVmVydGV4QXJy
YXlPRVMoKTsKKyAgICB2YXIgYW55RmFpbGVkID0gZmFsc2U7CisgICAgCisgICAgZXh0LmJpbmRW
ZXJ0ZXhBcnJheU9FUyhudWxsKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWI0ZigwLCAwLCAxLCAyLCAz
KTsKKyAgICAKKyAgICB2ID0gZ2wuZ2V0VmVydGV4QXR0cmliKDAsIGdsLkNVUlJFTlRfVkVSVEVY
X0FUVFJJQik7CisgICAgaWYgKCEodlswXSA9PSAwICYmIHZbMV0gPT0gMSAmJiB2WzJdID09IDIg
JiYgdlszXSA9PSAzKSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJWZXJ0ZXggYXR0cmliIHZhbHVl
IG5vdCByb3VuZC10cmlwcGVkPyIpOworICAgICAgICBhbnlGYWlsZWQgPSB0cnVlOworICAgIH0K
KyAgICAKKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKHZhbzApOworICAgIAorICAgIHYgPSBn
bC5nZXRWZXJ0ZXhBdHRyaWIoMCwgZ2wuQ1VSUkVOVF9WRVJURVhfQVRUUklCKTsKKyAgICBpZiAo
ISh2WzBdID09IDAgJiYgdlsxXSA9PSAxICYmIHZbMl0gPT0gMiAmJiB2WzNdID09IDMpKSB7Cisg
ICAgICAgIHRlc3RGYWlsZWQoIlZlcnRleCBhdHRyaWIgdmFsdWUgcmVzZXQgYWNyb3NzIGJpbmRp
bmdzIik7CisgICAgICAgIGFueUZhaWxlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIGdsLnZl
cnRleEF0dHJpYjRmKDAsIDQsIDUsIDYsIDcpOworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVMo
bnVsbCk7CisgICAgCisgICAgdiA9IGdsLmdldFZlcnRleEF0dHJpYigwLCBnbC5DVVJSRU5UX1ZF
UlRFWF9BVFRSSUIpOworICAgIGlmICghKHZbMF0gPT0gNCAmJiB2WzFdID09IDUgJiYgdlsyXSA9
PSA2ICYmIHZbM10gPT0gNykpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiVmVydGV4IGF0dHJpYiB2
YWx1ZSBib3VuZCB0byBidWZmZXIiKTsKKyAgICAgICAgYW55RmFpbGVkID0gdHJ1ZTsKKyAgICB9
CisgICAgCisgICAgaWYgKCFhbnlGYWlsZWQpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiVmVydGV4
IGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIG5vdCBhdHRhY2hlZCB0byBiaW5kaW5ncyIpCisgICAgfQor
ICAgIAorICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7CisgICAgZXh0LmRlbGV0ZVZl
cnRleEFycmF5T0VTKHZhbzApOworfQorCitmdW5jdGlvbiBydW5EcmF3VGVzdHMoKSB7CisgICAg
ZGVidWcoIlRlc3RpbmcgZHJhd3Mgd2l0aCB2YXJpb3VzIFZBTyBiaW5kaW5ncyIpOworICAgIAor
ICAgIGNhbnZhcy53aWR0aCA9IDUwOyBjYW52YXMuaGVpZ2h0ID0gNTA7CisgICAgZ2wudmlld3Bv
cnQoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTsKKyAgICAKKyAgICB2YXIgdmFv
MCA9IGV4dC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOworICAgIHZhciB2YW8xID0gZXh0LmNyZWF0
ZVZlcnRleEFycmF5T0VTKCk7CisgICAgCisgICAgdmFyIHByb2dyYW0gPSB3dHUuc2V0dXBTaW1w
bGVUZXh0dXJlUHJvZ3JhbShnbCwgMCwgMSk7CisgICAgCisgICAgZnVuY3Rpb24gc2V0dXBRdWFk
KHMpIHsKKyAgICAgICAgdmFyIG9wdF9wb3NpdGlvbkxvY2F0aW9uID0gMDsKKyAgICAgICAgdmFy
IG9wdF90ZXhjb29yZExvY2F0aW9uID0gMTsKKyAgICAgICAgdmFyIHZlcnRleE9iamVjdCA9IGds
LmNyZWF0ZUJ1ZmZlcigpOworICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwg
dmVydGV4T2JqZWN0KTsKKyAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5l
dyBGbG9hdDMyQXJyYXkoWworICAgICAgICAgICAgIDEuMCAqIHMsICAxLjAgKiBzLCAwLjAsCisg
ICAgICAgICAgICAtMS4wICogcywgIDEuMCAqIHMsIDAuMCwKKyAgICAgICAgICAgIC0xLjAgKiBz
LCAtMS4wICogcywgMC4wLAorICAgICAgICAgICAgIDEuMCAqIHMsICAxLjAgKiBzLCAwLjAsCisg
ICAgICAgICAgICAtMS4wICogcywgLTEuMCAqIHMsIDAuMCwKKyAgICAgICAgICAgICAxLjAgKiBz
LCAtMS4wICogcywgMC4wXSksIGdsLlNUQVRJQ19EUkFXKTsKKyAgICAgICAgZ2wuZW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkob3B0X3Bvc2l0aW9uTG9jYXRpb24pOworICAgICAgICBnbC52ZXJ0ZXhB
dHRyaWJQb2ludGVyKG9wdF9wb3NpdGlvbkxvY2F0aW9uLCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAs
IDApOworCisgICAgICAgIHZhciB2ZXJ0ZXhPYmplY3QgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAg
ICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZlcnRleE9iamVjdCk7CisgICAg
ICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5KFsKKyAg
ICAgICAgICAgIDEuMCAqIHMsIDEuMCAqIHMsCisgICAgICAgICAgICAwLjAgKiBzLCAxLjAgKiBz
LAorICAgICAgICAgICAgMC4wICogcywgMC4wICogcywKKyAgICAgICAgICAgIDEuMCAqIHMsIDEu
MCAqIHMsCisgICAgICAgICAgICAwLjAgKiBzLCAwLjAgKiBzLAorICAgICAgICAgICAgMS4wICog
cywgMC4wICogc10pLCBnbC5TVEFUSUNfRFJBVyk7CisgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KG9wdF90ZXhjb29yZExvY2F0aW9uKTsKKyAgICAgICAgZ2wudmVydGV4QXR0cmli
UG9pbnRlcihvcHRfdGV4Y29vcmRMb2NhdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsK
KyAgICB9OworICAgIAorICAgIGZ1bmN0aW9uIHJlYWRMb2NhdGlvbih4LCB5KSB7CisgICAgICAg
IHZhciBwaXhlbHMgPSBuZXcgVWludDhBcnJheSgxICogMSAqIDQpOworICAgICAgICBnbC5yZWFk
UGl4ZWxzKHgsIHksIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHBpeGVscyk7Cisg
ICAgICAgIHJldHVybiBwaXhlbHM7CisgICAgfTsKKyAgICBmdW5jdGlvbiB0ZXN0UGl4ZWwoYmxh
Y2tMaXN0LCB3aGl0ZUxpc3QpIHsKKyAgICAgICAgZnVuY3Rpb24gdGVzdExpc3QobGlzdCwgZXhw
ZWN0ZWQpIHsKKyAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbGlzdC5sZW5ndGg7IG4r
KykgeworICAgICAgICAgICAgICAgIHZhciBsID0gbGlzdFtuXTsKKyAgICAgICAgICAgICAgICB2
YXIgeCA9IC1NYXRoLmZsb29yKGwgKiBjYW52YXMud2lkdGggLyAyKSArIGNhbnZhcy53aWR0aCAv
IDI7CisgICAgICAgICAgICAgICAgdmFyIHkgPSAtTWF0aC5mbG9vcihsICogY2FudmFzLmhlaWdo
dCAvIDIpICsgY2FudmFzLmhlaWdodCAvIDI7CisgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9
IHJlYWRMb2NhdGlvbih4LCB5KTsKKyAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoc291cmNl
WzBdIC0gZXhwZWN0ZWQpID4gMikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRlc3RMaXN0KGJsYWNrTGlzdCwgMCkgJiYg
dGVzdExpc3Qod2hpdGVMaXN0LCAyNTUpOworICAgIH07CisgICAgZnVuY3Rpb24gdmVyaWZ5RHJh
dyhkcmF3TnVtYmVyLCBzKSB7CisgICAgICAgIHd0dS5kcmF3UXVhZChnbCk7CisgICAgICAgIHZh
ciBibGFja0xpc3QgPSBbXTsKKyAgICAgICAgdmFyIHdoaXRlTGlzdCA9IFtdOworICAgICAgICB2
YXIgcG9pbnRzID0gWzAuMCwgMC4yLCAwLjQsIDAuNiwgMC44LCAxLjBdOworICAgICAgICBmb3Ig
KHZhciBuID0gMDsgbiA8IHBvaW50cy5sZW5ndGg7IG4rKykgeworICAgICAgICAgICAgaWYgKHBv
aW50c1tuXSA8PSBzKSB7CisgICAgICAgICAgICAgICAgYmxhY2tMaXN0LnB1c2gocG9pbnRzW25d
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd2hpdGVMaXN0LnB1c2go
cG9pbnRzW25dKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGVzdFBp
eGVsKGJsYWNrTGlzdCwgd2hpdGVMaXN0KSkgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgiRHJh
dyAiICsgZHJhd051bWJlciArICIgcGFzc2VkIHBpeGVsIHRlc3QiKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkRyYXcgIiArIGRyYXdOdW1iZXIgKyAiIGZhaWxl
ZCBwaXhlbCB0ZXN0Iik7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIC8vIFNldHVwIGFs
bCBiaW5kaW5ncworICAgIHNldHVwUXVhZCgxKTsKKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VT
KHZhbzApOworICAgIHNldHVwUXVhZCgwLjUpOworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVMo
dmFvMSk7CisgICAgc2V0dXBRdWFkKDAuMjUpOworICAgIAorICAgIC8vIFZlcmlmeSBkcmF3aW5n
CisgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTsKKyAgICB2ZXJpZnlEcmF3KDAsIDEp
OworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvMCk7CisgICAgdmVyaWZ5RHJhdygxLCAw
LjUpOworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVModmFvMSk7CisgICAgdmVyaWZ5RHJhdygy
LCAwLjI1KTsKKyAgICAKKyAgICBleHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpOworICAgIGV4
dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh2YW8wKTsKKyAgICBleHQuZGVsZXRlVmVydGV4QXJyYXlP
RVModmFvMSk7Cit9CisKK2Z1bmN0aW9uIHJ1bkRlbGV0ZVRlc3RzKCkgeworICAgIGRlYnVnKCJU
ZXN0aW5nIHVzaW5nIGRlbGV0ZWQgYnVmZmVycyByZWZlcmVuY2VkIGJ5IFZBT3MiKTsKKworICAg
IHZhciBwcm9ncmFtID0gd3R1LnNldHVwUHJvZ3JhbShnbCwgWyJ2c2hhZGVyIiwgImZzaGFkZXIi
XSwgWyJhX3Bvc2l0aW9uIiwgImFfY29sb3IiXSk7CisgICAgZ2wudXNlUHJvZ3JhbShwcm9ncmFt
KTsKKworICAgIHZhciBwb3NpdGlvbkJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAgIGds
LmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBwb3NpdGlvbkJ1ZmZlcik7CisgICAgZ2wuYnVm
ZmVyRGF0YSgKKyAgICAgICAgZ2wuQVJSQVlfQlVGRkVSLAorICAgICAgICBuZXcgRmxvYXQzMkFy
cmF5KFsKKyAgICAgICAgICAgMS4wLCAgMS4wLAorICAgICAgICAgIC0xLjAsICAxLjAsCisgICAg
ICAgICAgLTEuMCwgLTEuMCwKKyAgICAgICAgICAgMS4wLCAtMS4wXSksCisgICAgICAgIGdsLlNU
QVRJQ19EUkFXKTsKKworICAgIHZhciBjb2xvcnMgPSBbCisgICAgICBbMjU1LCAgIDAsICAgMCwg
MjU1XSwKKyAgICAgIFsgIDAsIDI1NSwgICAwLCAyNTVdLAorICAgICAgWyAgMCwgICAwLCAyNTUs
IDI1NV0sCisgICAgICBbICAwLCAyNTUsIDI1NSwgMjU1XQorICAgIF07CisgICAgdmFyIGNvbG9y
QnVmZmVycyA9IFtdOworICAgIHZhciBlbGVtZW50QnVmZmVycyA9IFtdOworICAgIHZhciB2YW9z
ID0gW107CisgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGNvbG9ycy5sZW5ndGg7ICsraWkpIHsK
KyAgICAgIHZhciB2YW8gPSBleHQuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICAgIHZhb3Mu
cHVzaCh2YW8pOworICAgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW8pOworICAgICAgLy8g
U2V0IHRoZSBwb3NpdGlvbiBidWZmZXIKKyAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVG
RkVSLCBwb3NpdGlvbkJ1ZmZlcik7CisgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgw
KTsKKyAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAw
LCAwKTsKKworICAgICAgdmFyIGVsZW1lbnRCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAg
ICAgIGVsZW1lbnRCdWZmZXJzLnB1c2goZWxlbWVudEJ1ZmZlcik7CisgICAgICBnbC5iaW5kQnVm
ZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBlbGVtZW50QnVmZmVyKTsKKyAgICAgIGdsLmJ1
ZmZlckRhdGEoCisgICAgICAgICAgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsCisgICAgICAgICAg
bmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDIsIDAsIDIsIDNdKSwKKyAgICAgICAgICBnbC5TVEFUSUNf
RFJBVyk7CisKKyAgICAgIC8vIFNldHVwIHRoZSBjb2xvciBhdHRyaWIKKyAgICAgIHZhciBjb2xv
ciA9IGNvbG9yc1tpaV07CisgICAgICBpZiAoaWkgPCAzKSB7CisgICAgICAgIHZhciBjb2xvckJ1
ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAgICAgICBjb2xvckJ1ZmZlcnMucHVzaChjb2xv
ckJ1ZmZlcik7CisgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvckJ1
ZmZlcik7CisgICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgVWludDhB
cnJheSgKKyAgICAgICAgICBbIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIGNvbG9yWzNd
LAorICAgICAgICAgICAgY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSwgY29sb3JbM10sCisg
ICAgICAgICAgICBjb2xvclswXSwgY29sb3JbMV0sIGNvbG9yWzJdLCBjb2xvclszXSwKKyAgICAg
ICAgICAgIGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0sIGNvbG9yWzNdCisgICAgICAgICAg
XSksIGdsLlNUQVRJQ19EUkFXKTsKKyAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
MSk7CisgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMSwgNCwgZ2wuVU5TSUdORURfQllU
RSwgdHJ1ZSwgMCwgMCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBnbC52ZXJ0ZXhBdHRyaWI0
ZigxLCBjb2xvclswXSAvIDI1NSwgY29sb3JbMV0gLyAyNTUsIGNvbG9yWzJdIC8gMjU1LCBjb2xv
clszXSAvIDI1NSk7CisgICAgICB9CisgICAgfQorCisgICAgLy8gZGVsZXRlIHRoZSBjb2xvciBi
dWZmZXJzIEFORCB0aGUgcG9zaXRpb24gYnVmZmVyLgorICAgIGV4dC5iaW5kVmVydGV4QXJyYXlP
RVMobnVsbCk7CisgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGNvbG9yQnVmZmVycy5sZW5ndGg7
ICsraWkpIHsKKyAgICAgIGdsLmRlbGV0ZUJ1ZmZlcihjb2xvckJ1ZmZlcnNbaWldKTsKKyAgICAg
IGdsLmRlbGV0ZUJ1ZmZlcihlbGVtZW50QnVmZmVyc1tpaV0pOworICAgICAgLy8gVGhlIGJ1ZmZl
cnMgc2hvdWxkIHN0aWxsIGJlIHZhbGlkIGF0IHRoaXMgcG9pbnQsIHNpbmNlIGl0IHdhcyBhdHRh
Y2hlZCB0byB0aGUgVkFPCisgICAgICBpZighZ2wuaXNCdWZmZXIoY29sb3JCdWZmZXJzW2lpXSkp
IHsKKyAgICAgICAgdGVzdEZhaWxlZCgiYnVmZmVyIHJlbW92ZWQgdG9vIGVhcmx5Iik7CisgICAg
ICB9CisgICAgfQorICAgIGdsLmRlbGV0ZUJ1ZmZlcihwb3NpdGlvbkJ1ZmZlcik7CisKKyAgICAv
LyBSZW5kZXIgd2l0aCB0aGUgZGVsZXRlZCBidWZmZXJzLiBBcyB0aGV5IGFyZSByZWZlcmVuY2Vk
IGJ5IFZBT3MgdGhleQorICAgIC8vIG11c3Qgc3RpbGwgYmUgYXJvdW5kLgorICAgIGZvciAodmFy
IGlpID0gMDsgaWkgPCBjb2xvcnMubGVuZ3RoOyArK2lpKSB7CisgICAgICB2YXIgY29sb3IgPSBj
b2xvcnNbaWldOworICAgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW9zW2lpXSk7CisgICAg
ICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCA2LCBnbC5VTlNJR05FRF9CWVRFLCAwKTsK
KyAgICAgIHd0dS5jaGVja0NhbnZhcyhnbCwgY29sb3IsICJzaG91bGQgYmUgIiArIGNvbG9yKTsK
KyAgICB9CisKKyAgICAvLyBDbGVhbiB1cC4KKyAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgY29s
b3JCdWZmZXJzLmxlbmd0aDsgKytpaSkgeworICAgICAgZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VT
KHZhb3NbaWldKTsKKyAgICB9CisKKyAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgY29sb3JCdWZm
ZXJzLmxlbmd0aDsgKytpaSkgeworICAgICAgLy8gVGhlIGJ1ZmZlcnMgc2hvdWxkIG5vIGxvbmdl
ciBiZSB2YWxpZCBub3cgdGhhdCB0aGUgVkFPcyBhcmUgZGVsZXRlZAorICAgICAgaWYoZ2wuaXNC
dWZmZXIoY29sb3JCdWZmZXJzW2lpXSkpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiYnVmZmVyIG5v
dCBwcm9wZXJseSBjbGVhbmVkIHVwIGFmdGVyIFZBTyBkZWxldGlvbiIpOworICAgICAgfQorICAg
IH0KK30KKworZnVuY3Rpb24gcnVuQXJyYXlCdWZmZXJCaW5kVGVzdHMoKSB7CisgICAgZGVidWco
IlRlc3RpbmcgdGhhdCBWQU9zIGRvbid0IGVmZmVjdCBBUlJBWV9CVUZGRVIgYmluZGluZy4iKTsK
KworICAgIGV4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7CisKKyAgICB2YXIgcHJvZ3JhbSA9
IHd0dS5zZXR1cFByb2dyYW0oZ2wsIFsidnNoYWRlciIsICJmc2hhZGVyIl0sIFsiYV9jb2xvciIs
ICJhX3Bvc2l0aW9uIl0pOworICAgIGdsLnVzZVByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAvLyBj
cmVhdGUgc2hhcmVkIGVsZW1lbnQgYnV1ZmZlcgorICAgIHZhciBlbGVtZW50QnVmZmVyID0gZ2wu
Y3JlYXRlQnVmZmVyKCk7CisgICAgLy8gYmluZCB0byBkZWZhdWx0CisgICAgZ2wuYmluZEJ1ZmZl
cihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgZWxlbWVudEJ1ZmZlcik7CisgICAgZ2wuYnVmZmVy
RGF0YSgKKyAgICAgICAgZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsCisgICAgICAgIG5ldyBVaW50
OEFycmF5KFswLCAxLCAyLCAwLCAyLCAzXSksCisgICAgICAgIGdsLlNUQVRJQ19EUkFXKTsKKwor
ICAgIC8vIGZpcnN0IGNyZWF0ZSB0aGUgYnVmZmVycyBmb3Igbm8gdmFvIGRyYXcuCisgICAgdmFy
IG5vblZBT0NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZl
cihnbC5BUlJBWV9CVUZGRVIsIG5vblZBT0NvbG9yQnVmZmVyKTsKKyAgICBnbC5idWZmZXJEYXRh
KGdsLkFSUkFZX0JVRkZFUiwgbmV3IFVpbnQ4QXJyYXkoCisgICAgICBbIDAsIDI1NSwgMCwgMjU1
LAorICAgICAgICAwLCAyNTUsIDAsIDI1NSwKKyAgICAgICAgMCwgMjU1LCAwLCAyNTUsCisgICAg
ICAgIDAsIDI1NSwgMCwgMjU1LAorICAgICAgXSksIGdsLlNUQVRJQ19EUkFXKTsKKworICAgIC8v
IHNoYXJlZCBwb3NpdGlvbiBidWZmZXIuCisgICAgdmFyIHBvc2l0aW9uQnVmZmVyID0gZ2wuY3Jl
YXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHBvc2l0aW9u
QnVmZmVyKTsKKyAgICBnbC5idWZmZXJEYXRhKAorICAgICAgICBnbC5BUlJBWV9CVUZGRVIsCisg
ICAgICAgIG5ldyBGbG9hdDMyQXJyYXkoWworICAgICAgICAgICAxLjAsICAxLjAsCisgICAgICAg
ICAgLTEuMCwgIDEuMCwKKyAgICAgICAgICAtMS4wLCAtMS4wLAorICAgICAgICAgICAxLjAsIC0x
LjBdKSwKKyAgICAgICAgZ2wuU1RBVElDX0RSQVcpOworCisgICAgLy8gYXR0YWNoIHBvc2l0aW9u
IGJ1ZmZlciB0byBkZWZhdWx0CisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMSk7Cisg
ICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigxLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOwor
CisgICAgLy8gbm93IGNyZWF0ZSB2YW8KKyAgICB2YXIgdmFvID0gZXh0LmNyZWF0ZVZlcnRleEFy
cmF5T0VTKCk7CisgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW8pOworCisgICAgLy8gYXR0
YWNoIHRoZSBwb3NpdGlvbiBidWZmZXIgdmFvCisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoMSk7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigxLCAyLCBnbC5GTE9BVCwgZmFsc2Us
IDAsIDApOworCisgICAgdmFyIHZhb0NvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7Cisg
ICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7CisgICAgZ2wudmVydGV4QXR0cmliUG9p
bnRlcigwLCA0LCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCAwLCAwKTsKKyAgICBnbC5iaW5kQnVm
ZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmFvQ29sb3JCdWZmZXIpOworICAgIGdsLmJ1ZmZlckRhdGEo
Z2wuQVJSQVlfQlVGRkVSLCBuZXcgVWludDhBcnJheSgKKyAgICAgIFsgMjU1LCAwLCAwLCAyNTUs
CisgICAgICAgIDI1NSwgMCwgMCwgMjU1LAorICAgICAgICAyNTUsIDAsIDAsIDI1NSwKKyAgICAg
ICAgMjU1LCAwLCAwLCAyNTUsCisgICAgICBdKSwgZ2wuU1RBVElDX0RSQVcpOworICAgIGdsLmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwg
NCwgZ2wuVU5TSUdORURfQllURSwgdHJ1ZSwgMCwgMCk7CisKKyAgICAvLyBub3cgc2V0IHRoZSBi
dWZmZXIgYmFjayB0byB0aGUgbm9uVkFPQ29sb3JCdWZmZXIKKyAgICBnbC5iaW5kQnVmZmVyKGds
LkFSUkFZX0JVRkZFUiwgbm9uVkFPQ29sb3JCdWZmZXIpOworCisgICAgLy8gYmluZCB0byB2YW8K
KyAgICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBlbGVtZW50QnVmZmVy
KTsKKyAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCA2LCBnbC5VTlNJR05FRF9CWVRF
LCAwKTsKKyAgICB3dHUuY2hlY2tDYW52YXMoZ2wsIFsyNTUsIDAsIDAsIDI1NV0sICJzaG91bGQg
YmUgcmVkIik7CisKKyAgICAvLyB1bmJpbmQgdmFvCisgICAgZXh0LmJpbmRWZXJ0ZXhBcnJheU9F
UyhudWxsKTsKKworICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIG5vblZBT0NvbG9yQnVmZmVyIHNo
b3VsZCBiZSBzdGlsbCBiZSBib3VuZC4KKyAgICAvLyBJZiB0aGUgV2ViR0wgaW1wbCBpcyBlbXVs
YXRpbmcgVkFPcyBpdCBtdXN0IG1ha2Ugc3VyZQorICAgIC8vIGl0IGNvcnJlY3RseSByZXN0b3Jl
cyB0aGlzIGJpbmRpbmcuCisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7CisgICAg
Z2wudmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCAwLCAw
KTsKKyAgICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCA2LCBnbC5VTlNJR05FRF9CWVRF
LCAwKTsKKyAgICB3dHUuY2hlY2tDYW52YXMoZ2wsIFswLCAyNTUsIDAsIDI1NV0sICJzaG91bGQg
YmUgZ3JlZW4iKTsKK30KKworZGVidWcoIiIpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
Kzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwppbmRleCA3NGI0MzI1YzMyMDJlODgwMjQ3NjA4OGZj
MzFiZjgwMjk2ZjA3YmNlLi43ODllYjVmZDMxMWViNGZmZGU1YTMxNTJlNjA5OTRiY2FjOGM0M2Fl
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRp
b25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMK
QEAgLTM1NjUsMyArMzU2NSw2IEBAIHdlYmtpdC5vcmcvYi85NzE3OSBodHRwL3Rlc3RzL2Nzcy9s
aW5rLWNzcy1kaXNhYmxlZC12YWx1ZS13aXRoLXNsb3ctbG9hZGluZy1zaGVlCiAjIFRoZSB0ZXN0
IHNob3VsZCBwYXNzIGFmdGVyIGhhcmZidXp6IHRyYW5zaXRpb24uCiB3ZWJraXQub3JnL2IvOTcy
OTYgWyBMaW51eCBXaW4gXSBmYXN0L3RleHQvaW50ZXJuYXRpb25hbC9oZWJyZXctc2VsZWN0aW9u
Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIAorIyBFeHBlY3RlZCB0byBmYWlsIHVudGlsIFdl
YkdMIGV4dGVuc2lvbiBpbXBsZW1lbnRhdGlvbiBsYW5kcword2Via2l0Lm9yZy9iLzk2OTYxIGZh
c3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWwgWyBGYWlsdXJlIFBh
c3MgXQord2Via2l0Lm9yZy9iLzk2OTYxIHBsYXRmb3JtL2Nocm9taXVtL3ZpcnR1YWwvZ3B1L2Zh
c3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0Lmh0bWwgWyBGYWlsdXJlIFBh
c3MgXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2VmbC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQK
aW5kZXggMjBjOWFjYWMyYTRjMDZjOGM1MGEzZTExMWFmY2U5ZjEyZTBkZmFjOS4uYjJmYmZlMjZk
N2QyY2E0MDhkMWU5N2FlMjRjYjk4ZmQ0ODg2NmJhYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZWZsL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBw
ZWQKQEAgLTY3MCwzICs2NzAsNiBAQCBpbnNwZWN0b3IvZXh0ZW5zaW9ucy9leHRlbnNpb25zLWV2
YWwtY29udGVudC1zY3JpcHQuaHRtbAogCiAjIEVOQUJMRShXSURHRVRfUkVHSU9OKSBpcyBkaXNh
YmxlZAogZmFzdC9jc3Mvd2lkZ2V0LXJlZ2lvbi1wYXJzZXIuaHRtbAorCisjIGh0dHA6Ly93ZWJr
aXQub3JnL2IvOTY4MjgKK2Zhc3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXktb2JqZWN0
Lmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKaW5kZXggYjA0Yzk3MjM4MDIzMzU5MGU3ZWQy
NTlkNWFjYTQ0MjI5YWE4ZTk4MC4uOGZiYmI2M2NmMTZlMjRjYjE3MzI2NmNlNTg1NzU4MTkzYTcx
OGI2MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKQEAgLTk0Myw2ICs5NDMsOSBAQCBmYXN0
L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRoLXZpZGVvLmh0bWwK
ICMgU2VuZGluZyB0aGUgbW91c2UgZG93biBldmVudCB0byB0aGUgc2Nyb2xsYmFyIHN0YXJ0cyBh
IG5lc3RlZCBydW4gbG9vcCB3aGljaCBjYXVzZXMgYSBoYW5nLgogZmFzdC9ldmVudHMvbW91c2Vk
b3duLWluLXN1YmZyYW1lLXNjcm9sbGJhci5odG1sCiAKKyMgaHR0cDovL3dlYmtpdC5vcmcvYi85
NjgyOAorZmFzdC9jYW52YXMvd2ViZ2wvb2VzLXZlcnRleC1hcnJheS1vYmplY3QuaHRtbAorCiAj
IC0tLSBXZWJLaXQxIG9ubHkgLS0tCiBodHRwL3Rlc3RzL21pc2Mvd2lsbENhY2hlUmVzcG9uc2Ut
ZGVsZWdhdGUtY2FsbGJhY2suaHRtbAogaHR0cC90ZXN0cy9tdWx0aXBhcnQvbG9hZC1sYXN0LW5v
bi1odG1sLWZyYW1lLnBocApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Nr
aXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvU2tpcHBlZAppbmRleCA1ZDMxZTkzNzcx
Yjc3ZWVjMTI5NzYwYTRiM2ZlZDc0NDcxYjNlYzlmLi4zNGYwMDcyZDYyMzgxNzEyZmEzNDUxMDkx
MGRhZmRlZTI4NjhmNmNlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvU2tp
cHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvU2tpcHBlZApAQCAtMTk5LDYgKzE5
OSw3IEBAIGZhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24uaHRtbAogZmFzdC9jYW52
YXMvd2ViZ2wvdmlld3BvcnQtdW5jaGFuZ2VkLXVwb24tcmVzaXplLmh0bWwKIGZhc3QvY2FudmFz
L3dlYmdsL3dlYmdsLWFycmF5LWludmFsaWQtcmFuZ2VzLmh0bWwKIGZhc3QvY2FudmFzL3dlYmds
L3dlYmdsLXNwZWNpZmljLmh0bWwKK2Zhc3QvY2FudmFzL3dlYmdsL29lcy12ZXJ0ZXgtYXJyYXkt
b2JqZWN0Lmh0bWwKIGZhc3QvaGFybmVzcy9vdmVycmlkZS1wcmVmZXJlbmNlcy0yLmh0bWwKIGZh
c3QvaW1hZ2VzL2FuaW1hdGVkLWdpZi1yZXN0b3JlZC1mcm9tLWJmY2FjaGUuaHRtbAogZmFzdC90
ZXh0L3plcm8tZm9udC1zaXplLmh0bWwK
</data>

          </attachment>
      

    </bug>

</bugzilla>