<?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>77761</bug_id>
          
          <creation_ts>2012-02-03 11:49:26 -0800</creation_ts>
          <short_desc>Split MarkedSpace into destructor and destructor-free subspaces</short_desc>
          <delta_ts>2012-02-12 10:30:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</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>
          <dependson>77600</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>loki</cc>
    
    <cc>ossy</cc>
    
    <cc>pvarga</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>548915</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-02-03 11:49:26 -0800</bug_when>
    <thetext>Now that MarkedAllocators are responsible for allocating their own MarkedBlocks, we can use them to divide up the MarkedSpace into subspaces that split objects up according to whether they require a destructor call when sweeping the MarkedBlocks. We can start off by allocating JSFinalObjects and JSArrays in this new destructor-free subspace. As we move more objects off of requiring destructors (anything that has an ASSERT_HAS_TRIVIAL_DESTRUCTOR), we can move more objects into this subspace. The long-term vision is to have all objects allocated out of this destructor-free space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548918</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-02-03 11:51:56 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; (anything that has an ASSERT_HAS_TRIVIAL_DESTRUCTOR)

And anything that also has a trivial destroy() method, where trivial means the same thing that it does for normal destructors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548948</commentid>
    <comment_count>2</comment_count>
      <attachid>125383</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-02-03 12:32:10 -0800</bug_when>
    <thetext>Created attachment 125383
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548951</commentid>
    <comment_count>3</comment_count>
      <attachid>125384</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-02-03 12:35:32 -0800</bug_when>
    <thetext>Created attachment 125384
Bencher results

Slight loss &lt; 1% on SunSpider, slight win on v8 and kraken (both &lt; 1%). Overall, mostly neutral.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548958</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-02-03 12:43:55 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Created an attachment (id=125383) [details]
&gt; Patch

It appears that every compiler except clang hates the way that I&apos;ve specialized these templates. I&apos;ll work on appeasing them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548961</commentid>
    <comment_count>5</comment_count>
      <attachid>125383</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-03 12:46:42 -0800</bug_when>
    <thetext>Comment on attachment 125383
Patch

Attachment 125383 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11424326</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548972</commentid>
    <comment_count>6</comment_count>
      <attachid>125383</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-02-03 12:55:54 -0800</bug_when>
    <thetext>Comment on attachment 125383
Patch

Attachment 125383 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11424333</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548985</commentid>
    <comment_count>7</comment_count>
      <attachid>125389</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-02-03 13:01:33 -0800</bug_when>
    <thetext>Created attachment 125389
Trying to fix builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549603</commentid>
    <comment_count>8</comment_count>
      <attachid>125389</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-02-05 12:23:12 -0800</bug_when>
    <thetext>Comment on attachment 125389
Trying to fix builds

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

Patch looks correct. Some architecture comments below. Also, I&apos;d like to see results from those two micro benchmarks I mentioned by email.

&gt; Source/JavaScriptCore/heap/MarkedSpace.h:95
&gt; +    struct Subspace {
&gt; +        FixedArray&lt;MarkedAllocator, preciseCount&gt; preciseSizeClasses;
&gt; +        FixedArray&lt;MarkedAllocator, impreciseCount&gt; impreciseSizeClasses;
&gt; +    };

Minor nit: You should rename all &quot;size class&quot; variables to &quot;allocator&quot; to match your class renaming.

&gt; Source/JavaScriptCore/runtime/JSObject.h:399
&gt; +template&lt;&gt; inline void* allocateCell&lt;JSFinalObject&gt;(Heap&amp; heap)

Let&apos;s not duplicate this function for each destructor-free class. Instead, you can specialize allocateCell&lt;T&gt; based on class traits, much like hash traits:

template&lt;class T, NeedsDestructorArg = NeedsDestructor&lt;T&gt;&gt; allocateCell(...) 
{
    if (NeedsDestructorArg::value) { ... } else { ... }
}

// Write manual specializations for this struct template if you care about non-clang compilers.
template&lt;class T&gt; struct NeedsDestructor {
    static bool value = !has_non_trivial_destructor(T);
};

This would also eliminate the need for class friendship and the DestructorFreeAllocator helper. You can make both allocateWithDestructor and allocateWithoutDestructor private, and make allocateCell&lt;T&gt; a friend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549725</commentid>
    <comment_count>9</comment_count>
      <attachid>125568</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-02-05 21:56:20 -0800</bug_when>
    <thetext>Created attachment 125568
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549734</commentid>
    <comment_count>10</comment_count>
      <attachid>125568</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-02-05 22:15:22 -0800</bug_when>
    <thetext>Comment on attachment 125568
Patch

Attachment 125568 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11429238</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549738</commentid>
    <comment_count>11</comment_count>
      <attachid>125568</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-05 22:21:45 -0800</bug_when>
    <thetext>Comment on attachment 125568
Patch

Attachment 125568 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11431234</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549743</commentid>
    <comment_count>12</comment_count>
      <attachid>125568</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-02-05 22:29:56 -0800</bug_when>
    <thetext>Comment on attachment 125568
Patch

Attachment 125568 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11433158</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550012</commentid>
    <comment_count>13</comment_count>
      <attachid>125649</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-02-06 08:11:13 -0800</bug_when>
    <thetext>Created attachment 125649
Fixing some build errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550162</commentid>
    <comment_count>14</comment_count>
      <attachid>125649</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-02-06 11:52:43 -0800</bug_when>
    <thetext>Comment on attachment 125649
Fixing some build errors

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

&gt; Source/JavaScriptCore/heap/MarkedBlock.h:214
&gt; +    inline MarkedBlock::FreeCell* MarkedBlock::sweep(SweepMode sweepMode)

I don&apos;t think distinguishing sweep from sweepSlowCase adds value. Eager sweep isn&apos;t a case we need to specialize for with inlining, and it would be better not to have multiple copies of the sweep function template. I would merge sweep with sweepSlowCase in an out-of-line function.

&gt; Source/JavaScriptCore/runtime/JSCell.h:319
&gt; +    struct CellAllocator {

Let&apos;s not add the extra indirection of a class here. You can just declare allocateCell a friend of the heap directly, and put this code inside allocateCell.

&gt; Source/WebCore/bindings/js/JSDOMWindowShell.cpp:171
&gt; +    return heap.allocateWithDestructor(size);

Why does JSDOMWindowShell need its own operator new? It would be much better not to have this, and not to have a forward declaration of a WebCore data type in JavaScriptCore&apos;s Heap.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550169</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-02-06 11:55:27 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; Source/JavaScriptCore/runtime/JSCell.h:319
&gt; &gt; +    struct CellAllocator {
&gt; 
&gt; Let&apos;s not add the extra indirection of a class here. You can just declare allocateCell a friend of the heap directly, and put this code inside allocateCell.

The extra indirection is because older compilers don&apos;t allow you to have default template parameters on functions, only classes/structs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550379</commentid>
    <comment_count>16</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-02-06 16:02:56 -0800</bug_when>
    <thetext>&gt; The extra indirection is because older compilers don&apos;t allow you to have default template parameters on functions, only classes/structs.

Interesting.

OK. Let&apos;s not make it a parameter at all -- no one uses the parameter anyway. Instead, you can just use NeedsDestructor&lt;T&gt;::value directly inside the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551164</commentid>
    <comment_count>17</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-02-07 11:28:00 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 125649 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=125649&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkedBlock.h:214
&gt; &gt; +    inline MarkedBlock::FreeCell* MarkedBlock::sweep(SweepMode sweepMode)
&gt; 
&gt; I don&apos;t think distinguishing sweep from sweepSlowCase adds value. Eager sweep isn&apos;t a case we need to specialize for with inlining, and it would be better not to have multiple copies of the sweep function template. I would merge sweep with sweepSlowCase in an out-of-line function.

The main reason I split them up is because it makes the code in sweepSlowCase a little cleaner. I don&apos;t have to check the cellsNeedDestruction flag in each of the branches of the switch statement to pass the correct template parameter to specializedSweep. Instead, I just do a single check in sweep, and then choose which version of sweepSlowCase I want. Maybe I could just move the sweep function out of the header and rename sweepSlowCase to something less related to speed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551211</commentid>
    <comment_count>18</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-02-07 12:01:37 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt; The extra indirection is because older compilers don&apos;t allow you to have default template parameters on functions, only classes/structs.
&gt; 
&gt; Interesting.
&gt; 
&gt; OK. Let&apos;s not make it a parameter at all -- no one uses the parameter anyway. Instead, you can just use NeedsDestructor&lt;T&gt;::value directly inside the function.

Another thing that might be an issue is destroy() functions that do other things than call the destructor. Maybe we should declare that it is invalid to do so?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552150</commentid>
    <comment_count>19</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-02-08 08:40:40 -0800</bug_when>
    <thetext>&gt; Maybe I could just move the sweep function out of the header and rename sweepSlowCase to something less related to speed?

Sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552154</commentid>
    <comment_count>20</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-02-08 08:42:29 -0800</bug_when>
    <thetext>&gt; Another thing that might be an issue is destroy() functions that do other things than call the destructor. Maybe we should declare that it is invalid to do so?

This is only really an issue if a class has a meaningful destroy() function but no C++ destructor -- the destroy() function won&apos;t be called, even though it needs to be.

I think you can guard against this by ASSERTing that T::destroy == JSCell::destroy, or something like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552156</commentid>
    <comment_count>21</comment_count>
      <attachid>125649</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-02-08 08:42:50 -0800</bug_when>
    <thetext>Comment on attachment 125649
Fixing some build errors

r=me with the changes we&apos;ve discussed, and a fixed Mac build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554430</commentid>
    <comment_count>22</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-02-10 15:14:51 -0800</bug_when>
    <thetext>Committed r107445: &lt;http://trac.webkit.org/changeset/107445&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554585</commentid>
    <comment_count>23</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-02-11 00:50:44 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; Committed r107445: &lt;http://trac.webkit.org/changeset/107445&gt;

Reopen, because it caused an assertion for all tests on Qt in debug mode:
ASSERTION FAILED: cell-&gt;classInfo() != &amp;JSFinalObject::s_info
../../../../Source/JavaScriptCore/heap/MarkedBlock.cpp(74) : void JSC::MarkedBlock::callDestructor(JSC::JSCell*)

Could you fix it, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554586</commentid>
    <comment_count>24</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-02-11 00:51:31 -0800</bug_when>
    <thetext>I cc-ed Qt JSC experts too, could you check it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554739</commentid>
    <comment_count>25</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-02-11 17:28:21 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; Committed r107445: &lt;http://trac.webkit.org/changeset/107445&gt;
&gt; 
&gt; Reopen, because it caused an assertion for all tests on Qt in debug mode:
&gt; ASSERTION FAILED: cell-&gt;classInfo() != &amp;JSFinalObject::s_info
&gt; ../../../../Source/JavaScriptCore/heap/MarkedBlock.cpp(74) : void JSC::MarkedBlock::callDestructor(JSC::JSCell*)
&gt; 
&gt; Could you fix it, please?

Potential fix in http://trac.webkit.org/changeset/107495. Please verify.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554823</commentid>
    <comment_count>26</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-02-12 10:30:33 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #23)
&gt; &gt; (In reply to comment #22)
&gt; &gt; &gt; Committed r107445: &lt;http://trac.webkit.org/changeset/107445&gt;
&gt; &gt; 
&gt; &gt; Reopen, because it caused an assertion for all tests on Qt in debug mode:
&gt; &gt; ASSERTION FAILED: cell-&gt;classInfo() != &amp;JSFinalObject::s_info
&gt; &gt; ../../../../Source/JavaScriptCore/heap/MarkedBlock.cpp(74) : void JSC::MarkedBlock::callDestructor(JSC::JSCell*)
&gt; &gt; 
&gt; &gt; Could you fix it, please?
&gt; 
&gt; Potential fix in http://trac.webkit.org/changeset/107495. Please verify.

It fixed the assertion, thanks for the quick fix.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125383</attachid>
            <date>2012-02-03 12:32:10 -0800</date>
            <delta_ts>2012-02-03 13:01:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77761-20120203123209.patch</filename>
            <type>text/plain</type>
            <size>32240</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NjgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NmExMWZkNzZmMzI4YjM3NmQwNTM1ZWRiYWQyNDJiNWI4NWIzMzliLi4zMTEzNjA4YTQyZWZlMzI5
MzEzMWMyNDA0YjhiZWZjMDdkMDUxN2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw4OSBAQAogMjAxMi0wMi0wMyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgogCisgICAgICAgIFNwbGl0IE1hcmtlZFNwYWNlIGludG8gZGVzdHJ1Y3RvciBhbmQg
ZGVzdHJ1Y3Rvci1mcmVlIHN1YnNwYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Nzc3NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KTogQ2hhbmdl
ZCB0byB1c2UgdGhlIGRlc3RydWN0b3ItZnJlZSBhbGxvY2F0b3IuCisgICAgICAgICogaGVhcC9I
ZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0
cnVjdG9yKTogQWRkZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBkZXN0cnVjdG9yL2Rlc3RydWN0
b3ItZnJlZSBhbGxvY2F0b3JzIGZvcgorICAgICAgICBwYXJ0aWN1bGFyIHNpemVzLgorICAgICAg
ICAoSlNDOjpIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3Rvcik6CisgICAgICAg
IChIZWFwKToKKyAgICAgICAgKERlc3RydWN0b3JGcmVlQWxsb2NhdG9yKTogVGhpcyBjbGFzcyBp
cyB1c2VkIGFzIHRoZSBvcHQtaW4gbWVjaGFuaXNtIGZvciB1c2luZyB0aGUgZGVzdHJ1Y3Rvci1m
cmVlIAorICAgICAgICBzdWJzcGFjZSBvZiB0aGUgSGVhcC4gQWxsIGNsYXNzZXMgdGhhdCB1c2Ug
dGhlIGRlc3RydWN0b3ItZnJlZSBzdWJzcGFjZSBtdXN0IGJlIGRlY2xhcmVkIGZyaWVuZHMgb2Yg
CisgICAgICAgIHRoaXMgY2xhc3MgaW4gb3JkZXIgdG8gYWNjZXNzIGl0cyBhbGxvY2F0ZSBtZW1i
ZXIgZnVuY3Rpb24uIFRoZXkgY2FuIHRoZW4gc3BlY2lhbGl6ZSB0aGUgYWxsb2NhdGVDZWxsIAor
ICAgICAgICB0ZW1wbGF0ZSBmb3IgdGhlbXNlbHZlcyB0byB1c2UgdGhpcyBmdW5jdGlvbiByYXRo
ZXIgdGhhbiB0aGUgZGVmYXVsdCBwdWJsaWMgYWxsb2NhdGUoKSBmdW5jdGlvbiAKKyAgICAgICAg
cHJvdmlkZWQgYnkgSGVhcC4KKyAgICAgICAgKEpTQzo6SGVhcDo6RGVzdHJ1Y3RvckZyZWVBbGxv
Y2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdGUpOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZUJsb2NrKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5oOgor
ICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmNlbGxzTmVlZERlc3RydWN0aW9uKTogQWRk
ZWQgYSBuZXcgZmllbGQgdG8gYm90aCBNYXJrZWRBbGxvY2F0b3IgYW5kIE1hcmtlZEJsb2NrIAor
ICAgICAgICB0aGF0IHNwZWNpZnkgd2hldGhlciBvciBub3QgdGhhdCBwYXJ0aWN1bGFyIGFsbG9j
YXRvci9ibG9jayBjb250YWlucyBvYmplY3RzIHRoYXQgcmVxdWlyZSBkZXN0cnVjdGlvbi4KKyAg
ICAgICAgVGhpcyBmbGFnIGNhbiB0aGVuIGJlIGNoZWNrZWQgYXQgcnVudGltZSB3aGVuZXZlciBh
IGRlY2lzaW9uIG5lZWRzIHRvIGJlIG1hZGUgb24gd2hpY2ggdmVyc2lvbiBvZiB0aGUgCisgICAg
ICAgIHN3ZWVwKCkgZnVuY3Rpb24gdG8gcnVuLgorICAgICAgICAoTWFya2VkQWxsb2NhdG9yKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IpOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjppbml0KTogQWRkZWQgdGhp
cyBnZW5lcmljIGluaXQgZnVuY3Rpb24gdG8gcmVwbGFjZSBhbGwgb2YgdGhlIGN1c3RvbSBzZXR0
ZXJzIHRoYXQgCisgICAgICAgIGFyZSBvbmx5IHVzZWQgd2hlbiBpbml0aWFsaXppbmcgYWxsIG9m
IHRoZSB2YXJpb3VzIE1hcmtlZEFsbG9jYXRvcnMgd2l0aGluIHRoZSBNYXJrZWRTcGFjZSBjb25z
dHJ1Y3Rvci4KKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpyZWN5Y2xl
KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6OmNhbGxEZXN0cnVjdG9yKTogCisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6c3BlY2lhbGl6ZWRTd2VlcCk6IFRlbXBsYXRpemVkIHRvIG1h
a2UgY2hlY2tpbmcgd2hldGhlciB0aGUgZGVzdHJ1Y3RvciBuZWVkcyB0byBiZSAKKyAgICAgICAg
Y2FsbGVkIGEgY29tcGlsZS10aW1lIGNvbnN0YW50LiAKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OnN3ZWVwU2xvd0Nhc2UpOiBEaXR0by4KKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6
CisgICAgICAgIChNYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpzd2Vl
cCk6IE1hZGUgYW4gaW5saW5lIHZlcnNpb24gZm9yIHRoZSBmYXN0IHBhdGggd2hlbiBkb2luZyBT
d2VlcE9ubHkgd2l0aCBubyAKKyAgICAgICAgZGVzdHJ1Y3RvcnMsIG9yIHN1YnNlcXVlbnRseSBk
ZWNpZGluZyB3aGV0aGVyIHRvIGNhbGwgdGhlIGRlc3RydWN0b3IvZGVzdHJ1Y3Rvci1mcmVlIHZl
cnNpb25zIG9mIAorICAgICAgICBzd2VlcFNsb3dDYXNlLgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKEpTQzo6TWFya2VkQmxvY2s6OmNlbGxzTmVlZERlc3RydWN0aW9uKToKKyAgICAgICAgKiBo
ZWFwL01hcmtlZFNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6Ok1hcmtlZFNw
YWNlKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnJlc2V0QWxsb2NhdG9ycyk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKToKKyAg
ICAgICAgKEpTQzo6VGFrZUlmVW5tYXJrZWQ6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAv
TWFya2VkU3BhY2UuaDoKKyAgICAgICAgKE1hcmtlZFNwYWNlKToKKyAgICAgICAgKFN1YnNwYWNl
KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFsbG9jYXRvckZvcik6CisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6ZGVzdHJ1Y3RvckFsbG9jYXRvckZvcik6
CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjphbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayk6CisgICAgICAgICogaml0L0pJ
VC5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdCk6IEFkZGVkIHRlbXBsYXRlIHBhcmFtZXRlciB0
byBkZWNpZGUgd2hldGhlciBvYmplY3RzIG5lZWQgdG8gYmUgCisgICAgICAgIGFsbG9jYXRlZCBp
biBhIGRlc3RydWN0b3IvZGVzdHJ1Y3Rvci1mcmVlIGFsbG9jYXRvci4KKyAgICAgICAgKEpTQzo6
SklUOjplbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
QWxsb2NhdGVKU0Z1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6YWxsb2NhdGVXaXRo
b3V0RGVzdHJ1Y3Rvcik6IEhlbHBlciBmdW5jdGlvbiB0aGF0IHV0aWxpemVzIHRoZSBmYWN0IHRo
YXQgSlNBcnJheSBpcyBhIAorICAgICAgICBmcmllbmQgY2xhc3Mgb2YgRGVzdHJ1Y3RvckZyZWVB
bGxvY2F0b3IuCisgICAgICAgIChKU0M6OkpTQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNP
YmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNGaW5hbE9iamVjdCk6CisgICAgICAgIChKU0M6
OkpTRmluYWxPYmplY3Q6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IpOiBEaXR0by4KKyAgICAg
ICAgKEpTQzo6SlNGaW5hbE9iamVjdCk6CisKKzIwMTItMDItMDMgIE1hcmsgSGFobmVuYmVyZyAg
PG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKwogICAgICAgICBCdWlsZCBmaXgKIAogICAgICAgICBV
bnJldmlld2VkIGJ1aWxkIGZpeApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCmluZGV4IDQ4YmJkYzdmMDY4ZmJkOGE3MjJmOThjMTUzNWMyNDllODQzNDQ1
ZGEuLjVkMWVkYzA0ZDNjMWYzYjE4NGI4YjgwMjI1OWEyNDNhZDRkYzg2NzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTE1NTMsNyArMTU1
Myw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2b2lkIGVtaXRB
bGxvY2F0ZUpTRmluYWxPYmplY3QoVCBzdHJ1Y3R1cmUsIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJl
ZyBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsK
LSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmbV9qaXQuZ2xvYmFsRGF0YSgp
LT5oZWFwLmFsbG9jYXRvckZvck9iamVjdChzaXplb2YoSlNGaW5hbE9iamVjdCkpOworICAgICAg
ICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZtX2ppdC5nbG9iYWxEYXRhKCktPmhlYXAu
YWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3Ioc2l6ZW9mKEpTRmluYWxPYmplY3Qp
KTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoJmFsbG9jYXRvci0+bV9maXJzdEZy
ZWVDZWxsLCByZXN1bHRHUFIpOwogICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmgKaW5kZXggMWQwYWM1NDA3NjZmMmU4ODJlYWJmNjFlNzI3MDdkN2RlNmZlOTBl
NS4uMGIzYjUxODQyYTU3ZTM4Yjk0Njc3M2VkNWE2YTg1ZWZkYmM4NWMxNSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaApAQCAtOTUsNyArOTUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgLy8gdHJ1ZSBpZiBhbiBhbGxvY2F0aW9uIG9yIGNvbGxlY3Rpb24gaXMgaW4gcHJvZ3Jlc3MK
ICAgICAgICAgaW5saW5lIGJvb2wgaXNCdXN5KCk7CiAgICAgICAgIAotICAgICAgICBNYXJrZWRB
bGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdChzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2Jq
ZWN0U3BhY2UuYWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQorICAgICAgICBNYXJrZWRBbGxvY2F0b3Im
IGFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCBieXRlcykgeyByZXR1
cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CisgICAgICAgIE1hcmtlZEFs
bG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0V2l0aERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7
IHJldHVybiBtX29iamVjdFNwYWNlLmRlc3RydWN0b3JBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAg
ICAgICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CiAgICAgICAgIENoZWNrZWRCb29sZWFuIHRy
eUFsbG9jYXRlU3RvcmFnZShzaXplX3QsIHZvaWQqKik7CiAgICAgICAgIENoZWNrZWRCb29sZWFu
IHRyeVJlYWxsb2NhdGVTdG9yYWdlKHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOwpAQCAtMTM1LDYg
KzEzNiwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGdldENvbnNlcnZhdGl2
ZVJlZ2lzdGVyUm9vdHMoSGFzaFNldDxKU0NlbGwqPiYgcm9vdHMpOwogCisgICAgICAgIC8vIEFu
eSBjbGFzcyB3aXNoaW5nIHRvIGJlIGFsbG9jYXRlZCBpbiB0aGUgZGVzdHJ1Y3Rvci1mcmVlIHBh
cnQgb2YgdGhlIGhlYXAKKyAgICAgICAgLy8gbmVlZHMgdG8gYmUgYSBmcmllbmQgb2YgdGhpcyBj
bGFzcy4KKyAgICAgICAgY2xhc3MgRGVzdHJ1Y3RvckZyZWVBbGxvY2F0b3IgeworICAgICAgICAg
ICAgZnJpZW5kIGNsYXNzIEpTQXJyYXk7CisgICAgICAgICAgICBmcmllbmQgY2xhc3MgSlNGaW5h
bE9iamVjdDsKKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgc3RhdGljIHZvaWQqIGFs
bG9jYXRlKEhlYXAmIGhlYXAsIHNpemVfdCBieXRlcykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaGVhcC5tX29iamVjdFNwYWNlLmFsbG9jYXRlKGJ5dGVzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBNYXJrZWRTcGFjZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKQEAg
LTE0Miw2ICsxNTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEJ1
bXBTcGFjZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIFNsb3RWaXNpdG9yOwogICAgICAgICBmcmll
bmQgY2xhc3MgQ29kZUJsb2NrOworICAgICAgICBmcmllbmQgY2xhc3MgRGVzdHJ1Y3RvckZyZWVB
bGxvY2F0b3I7CiAKICAgICAgICAgc2l6ZV90IHdhdGVyTWFyaygpOwogICAgICAgICBzaXplX3Qg
aGlnaFdhdGVyTWFyaygpOwpAQCAtMzM3LDcgKzM1Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZShzaXplX3QgYnl0ZXMpCiAgICAgewogICAgICAg
ICBBU1NFUlQoaXNWYWxpZEFsbG9jYXRpb24oYnl0ZXMpKTsKLSAgICAgICAgcmV0dXJuIG1fb2Jq
ZWN0U3BhY2UuYWxsb2NhdGUoYnl0ZXMpOworICAgICAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5h
bGxvY2F0ZVdpdGhEZXN0cnVjdG9yKGJ5dGVzKTsKICAgICB9CiAgICAgCiAgICAgaW5saW5lIENo
ZWNrZWRCb29sZWFuIEhlYXA6OnRyeUFsbG9jYXRlU3RvcmFnZShzaXplX3QgYnl0ZXMsIHZvaWQq
KiBvdXRQdHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcAppbmRleCA4MjM5ZmJhZWRmYzBjOTgxODI4MTJhMTEyYzllMWNhNDllNzBiNTFjLi5lYjZk
MmM2OTE1NWNjZWViYjkxMDkyNGE4ZDlhMjE5ODlkNzA2ZTM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKQEAgLTk3LDExICs5NywxMSBAQCBN
YXJrZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKEFsbG9jYXRpb25FZmZv
cnQgYWxsb2NhdGlvbkVmZm9ydCkKICAgICAgICAgICAgIGJsb2NrID0gMDsKICAgICB9CiAgICAg
aWYgKGJsb2NrKQotICAgICAgICBibG9jayA9IE1hcmtlZEJsb2NrOjpyZWN5Y2xlKGJsb2NrLCBt
X2hlYXAsIG1fY2VsbFNpemUpOworICAgICAgICBibG9jayA9IE1hcmtlZEJsb2NrOjpyZWN5Y2xl
KGJsb2NrLCBtX2hlYXAsIG1fY2VsbFNpemUsIG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb24pOwogICAg
IGVsc2UgaWYgKGFsbG9jYXRpb25FZmZvcnQgPT0gQWxsb2NhdGlvbkNhbkZhaWwpCiAgICAgICAg
IHJldHVybiAwOwogICAgIGVsc2UKLSAgICAgICAgYmxvY2sgPSBNYXJrZWRCbG9jazo6Y3JlYXRl
KG1faGVhcCwgbV9jZWxsU2l6ZSk7CisgICAgICAgIGJsb2NrID0gTWFya2VkQmxvY2s6OmNyZWF0
ZShtX2hlYXAsIG1fY2VsbFNpemUsIG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb24pOwogICAgIAogICAg
IG1fbWFya2VkU3BhY2UtPmRpZEFkZEJsb2NrKGJsb2NrKTsKICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKaW5kZXggNTY0NGM2OTFiODdjZjdmMjNi
MDJiNTY1ZDNjZGFmNjVmZDJhZWJlYy4uMTYyMDdmNmE1ZjQzZDI1YjEyYzA5Y2ExYTJhN2ViNDJk
MjMyNWM3NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmgKQEAgLTIyLDYgKzIyLDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2b2lk
IHphcEZyZWVMaXN0KCk7CiAgICAgc2l6ZV90IGNlbGxTaXplKCkgeyByZXR1cm4gbV9jZWxsU2l6
ZTsgfQorICAgIGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24oKSB7IHJldHVybiBtX2NlbGxzTmVl
ZERlc3RydWN0aW9uOyB9CiAgICAgdm9pZCogYWxsb2NhdGUoKTsKICAgICBIZWFwKiBoZWFwKCkg
eyByZXR1cm4gbV9oZWFwOyB9CiAgICAgCkBAIC0yOSw5ICszMCw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIGFkZEJsb2NrKE1hcmtlZEJsb2NrKik7CiAgICAgdm9pZCByZW1vdmVCbG9jayhN
YXJrZWRCbG9jayopOwotICAgIHZvaWQgc2V0SGVhcChIZWFwKiBoZWFwKSB7IG1faGVhcCA9IGhl
YXA7IH0KLSAgICB2b2lkIHNldENlbGxTaXplKHNpemVfdCBjZWxsU2l6ZSkgeyBtX2NlbGxTaXpl
ID0gY2VsbFNpemU7IH0KLSAgICB2b2lkIHNldE1hcmtlZFNwYWNlKE1hcmtlZFNwYWNlKiBzcGFj
ZSkgeyBtX21hcmtlZFNwYWNlID0gc3BhY2U7IH0KKyAgICB2b2lkIGluaXQoSGVhcCosIE1hcmtl
ZFNwYWNlKiwgc2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uKTsKICAg
ICAKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2Fz
ZSgpOwpAQCAtNDMsNiArNDIsNyBAQCBwcml2YXRlOgogICAgIE1hcmtlZEJsb2NrKiBtX2N1cnJl
bnRCbG9jazsKICAgICBEb3VibHlMaW5rZWRMaXN0PEhlYXBCbG9jaz4gbV9ibG9ja0xpc3Q7CiAg
ICAgc2l6ZV90IG1fY2VsbFNpemU7CisgICAgYm9vbCBtX2NlbGxzTmVlZERlc3RydWN0aW9uOwog
ICAgIEhlYXAqIG1faGVhcDsKICAgICBNYXJrZWRTcGFjZSogbV9tYXJrZWRTcGFjZTsKIH07CkBA
IC01MSwxMSArNTEsMjAgQEAgaW5saW5lIE1hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9y
KCkKICAgICA6IG1fZmlyc3RGcmVlQ2VsbCgwKQogICAgICwgbV9jdXJyZW50QmxvY2soMCkKICAg
ICAsIG1fY2VsbFNpemUoMCkKKyAgICAsIG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb24odHJ1ZSkKICAg
ICAsIG1faGVhcCgwKQogICAgICwgbV9tYXJrZWRTcGFjZSgwKQogewogfQotICAgIAorCitpbmxp
bmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVhcCogaGVhcCwgTWFya2VkU3BhY2UqIG1h
cmtlZFNwYWNlLCBzaXplX3QgY2VsbFNpemUsIGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24pCit7
CisgICAgbV9oZWFwID0gaGVhcDsKKyAgICBtX21hcmtlZFNwYWNlID0gbWFya2VkU3BhY2U7Cisg
ICAgbV9jZWxsU2l6ZSA9IGNlbGxTaXplOworICAgIG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb24gPSBj
ZWxsc05lZWREZXN0cnVjdGlvbjsKK30KKwogaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
YWxsb2NhdGUoKQogewogICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogZmlyc3RGcmVlQ2VsbCA9
IG1fZmlyc3RGcmVlQ2VsbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmNwcAppbmRleCA3MTVmMjVkOTI3N2E1MzBkYzc5NGU3ZTAxYjk0MjFmMTFkMjU4Zjg2Li4wNWRm
Y2YwMjFkYzU3YzE4MDBiNDAwZDdiMzIzODUzNjk5NWI1MzNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCkBAIC0zMiwxNyArMzIsMTcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLU1hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6Y3JlYXRlKEhlYXAqIGhlYXAs
IHNpemVfdCBjZWxsU2l6ZSkKK01hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6Y3JlYXRlKEhlYXAq
IGhlYXAsIHNpemVfdCBjZWxsU2l6ZSwgYm9vbCBjZWxsc05lZWREZXN0cnVjdGlvbikKIHsKICAg
ICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25l
ZDo6YWxsb2NhdGUoYmxvY2tTaXplLCBibG9ja1NpemUsIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBh
Z2VzKTsKICAgICBpZiAoIXN0YXRpY19jYXN0PGJvb2w+KGFsbG9jYXRpb24pKQogICAgICAgICBD
UkFTSCgpOwotICAgIHJldHVybiBuZXcgKE5vdE51bGwsIGFsbG9jYXRpb24uYmFzZSgpKSBNYXJr
ZWRCbG9jayhhbGxvY2F0aW9uLCBoZWFwLCBjZWxsU2l6ZSk7CisgICAgcmV0dXJuIG5ldyAoTm90
TnVsbCwgYWxsb2NhdGlvbi5iYXNlKCkpIE1hcmtlZEJsb2NrKGFsbG9jYXRpb24sIGhlYXAsIGNl
bGxTaXplLCBjZWxsc05lZWREZXN0cnVjdGlvbik7CiB9CiAKLU1hcmtlZEJsb2NrKiBNYXJrZWRC
bG9jazo6cmVjeWNsZShNYXJrZWRCbG9jayogYmxvY2ssIEhlYXAqIGhlYXAsIHNpemVfdCBjZWxs
U2l6ZSkKK01hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6cmVjeWNsZShNYXJrZWRCbG9jayogYmxv
Y2ssIEhlYXAqIGhlYXAsIHNpemVfdCBjZWxsU2l6ZSwgYm9vbCBjZWxsc05lZWREZXN0cnVjdGlv
bikKIHsKLSAgICByZXR1cm4gbmV3IChOb3ROdWxsLCBibG9jaykgTWFya2VkQmxvY2soYmxvY2st
Pm1fYWxsb2NhdGlvbiwgaGVhcCwgY2VsbFNpemUpOworICAgIHJldHVybiBuZXcgKE5vdE51bGws
IGJsb2NrKSBNYXJrZWRCbG9jayhibG9jay0+bV9hbGxvY2F0aW9uLCBoZWFwLCBjZWxsU2l6ZSwg
Y2VsbHNOZWVkRGVzdHJ1Y3Rpb24pOwogfQogCiB2b2lkIE1hcmtlZEJsb2NrOjpkZXN0cm95KE1h
cmtlZEJsb2NrKiBibG9jaykKQEAgLTUwLDEwICs1MCwxMSBAQCB2b2lkIE1hcmtlZEJsb2NrOjpk
ZXN0cm95KE1hcmtlZEJsb2NrKiBibG9jaykKICAgICBibG9jay0+bV9hbGxvY2F0aW9uLmRlYWxs
b2NhdGUoKTsKIH0KIAotTWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKFBhZ2VBbGxvY2F0aW9uQWxp
Z25lZCYgYWxsb2NhdGlvbiwgSGVhcCogaGVhcCwgc2l6ZV90IGNlbGxTaXplKQorTWFya2VkQmxv
Y2s6Ok1hcmtlZEJsb2NrKFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYgYWxsb2NhdGlvbiwgSGVhcCog
aGVhcCwgc2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uKQogICAgIDog
SGVhcEJsb2NrKGFsbG9jYXRpb24pCiAgICAgLCBtX2F0b21zUGVyQ2VsbCgoY2VsbFNpemUgKyBh
dG9tU2l6ZSAtIDEpIC8gYXRvbVNpemUpCiAgICAgLCBtX2VuZEF0b20oYXRvbXNQZXJCbG9jayAt
IG1fYXRvbXNQZXJDZWxsICsgMSkKKyAgICAsIG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb24oY2VsbHNO
ZWVkRGVzdHJ1Y3Rpb24pCiAgICAgLCBtX3N0YXRlKE5ldykgLy8gQWxsIGNlbGxzIHN0YXJ0IG91
dCB1bm1hcmtlZC4KICAgICAsIG1faGVhcChoZWFwKQogewpAQCAtNzAsMTYgKzcxLDE3IEBAIGlu
bGluZSB2b2lkIE1hcmtlZEJsb2NrOjpjYWxsRGVzdHJ1Y3RvcihKU0NlbGwqIGNlbGwpCiAjaWYg
RU5BQkxFKFNJTVBMRV9IRUFQX1BST0ZJTElORykKICAgICBtX2hlYXAtPm1fZGVzdHJveWVkVHlw
ZUNvdW50cy5jb3VudFZQdHIodnB0cik7CiAjZW5kaWYKLSAgICBpZiAoY2VsbC0+Y2xhc3NJbmZv
KCkgIT0gJkpTRmluYWxPYmplY3Q6OnNfaW5mbykKLSAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUo
KS0+ZGVzdHJveShjZWxsKTsKKyAgICBBU1NFUlQoY2VsbC0+Y2xhc3NJbmZvKCkgIT0gJkpTRmlu
YWxPYmplY3Q6OnNfaW5mbyk7CisgICAgY2VsbC0+bWV0aG9kVGFibGUoKS0+ZGVzdHJveShjZWxs
KTsKIAogICAgIGNlbGwtPnphcCgpOwogfQogCi10ZW1wbGF0ZTxNYXJrZWRCbG9jazo6QmxvY2tT
dGF0ZSBibG9ja1N0YXRlLCBNYXJrZWRCbG9jazo6U3dlZXBNb2RlIHN3ZWVwTW9kZT4KK3RlbXBs
YXRlPE1hcmtlZEJsb2NrOjpCbG9ja1N0YXRlIGJsb2NrU3RhdGUsIE1hcmtlZEJsb2NrOjpTd2Vl
cE1vZGUgc3dlZXBNb2RlLCBib29sIGRlc3RydWN0b3JDYWxsTmVlZGVkPgogTWFya2VkQmxvY2s6
OkZyZWVDZWxsKiBNYXJrZWRCbG9jazo6c3BlY2lhbGl6ZWRTd2VlcCgpCiB7CiAgICAgQVNTRVJU
KGJsb2NrU3RhdGUgIT0gQWxsb2NhdGVkICYmIGJsb2NrU3RhdGUgIT0gRnJlZUxpc3RlZCk7Cisg
ICAgQVNTRVJUKGRlc3RydWN0b3JDYWxsTmVlZGVkIHx8IHN3ZWVwTW9kZSAhPSBTd2VlcE9ubHkp
OwogCiAgICAgLy8gVGhpcyBwcm9kdWNlcyBhIGZyZWUgbGlzdCB0aGF0IGlzIG9yZGVyZWQgaW4g
cmV2ZXJzZSB0aHJvdWdoIHRoZSBibG9jay4KICAgICAvLyBUaGlzIGlzIGZpbmUsIHNpbmNlIHRo
ZSBhbGxvY2F0aW9uIGNvZGUgbWFrZXMgbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlCkBAIC05Myw3
ICs5NSw3IEBAIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OnNwZWNpYWxpemVk
U3dlZXAoKQogICAgICAgICBpZiAoYmxvY2tTdGF0ZSA9PSBaYXBwZWQgJiYgIWNlbGwtPmlzWmFw
cGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoYmxvY2tTdGF0ZSAh
PSBOZXcpCisgICAgICAgIGlmIChkZXN0cnVjdG9yQ2FsbE5lZWRlZCAmJiBibG9ja1N0YXRlICE9
IE5ldykKICAgICAgICAgICAgIGNhbGxEZXN0cnVjdG9yKGNlbGwpOwogCiAgICAgICAgIGlmIChz
d2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KSB7CkBAIC0xMDcsMTQgKzEwOSwxMyBAQCBNYXJr
ZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpzcGVjaWFsaXplZFN3ZWVwKCkKICAgICBy
ZXR1cm4gaGVhZDsKIH0KIAotTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBNYXJrZWRCbG9jazo6c3dl
ZXAoU3dlZXBNb2RlIHN3ZWVwTW9kZSkKK3RlbXBsYXRlPGJvb2wgZGVzdHJ1Y3RvckNhbGxOZWVk
ZWQ+CitNYXJrZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpzd2VlcFNsb3dDYXNlKFN3
ZWVwTW9kZSBzd2VlcE1vZGUpCiB7Ci0gICAgSEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElP
Tih0aGlzKTsKLQogICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgIGNhc2UgTmV3OgogICAgICAg
ICBBU1NFUlQoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCk7Ci0gICAgICAgIHJldHVybiBz
cGVjaWFsaXplZFN3ZWVwPE5ldywgU3dlZXBUb0ZyZWVMaXN0PigpOworICAgICAgICByZXR1cm4g
c3BlY2lhbGl6ZWRTd2VlcDxOZXcsIFN3ZWVwVG9GcmVlTGlzdCwgZGVzdHJ1Y3RvckNhbGxOZWVk
ZWQ+KCk7CiAgICAgY2FzZSBGcmVlTGlzdGVkOgogICAgICAgICAvLyBIYXBwZW5zIHdoZW4gYSBi
bG9jayB0cmFuc2l0aW9ucyB0byBmdWxseSBhbGxvY2F0ZWQuCiAgICAgICAgIEFTU0VSVChzd2Vl
cE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KTsKQEAgLTEyNCwxOCArMTI1LDIxIEBAIE1hcmtlZEJs
b2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OnN3ZWVwKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgTWFya2VkOgogICAgICAgICByZXR1cm4gc3dlZXBN
b2RlID09IFN3ZWVwVG9GcmVlTGlzdAotICAgICAgICAgICAgPyBzcGVjaWFsaXplZFN3ZWVwPE1h
cmtlZCwgU3dlZXBUb0ZyZWVMaXN0PigpCi0gICAgICAgICAgICA6IHNwZWNpYWxpemVkU3dlZXA8
TWFya2VkLCBTd2VlcE9ubHk+KCk7CisgICAgICAgICAgICA/IHNwZWNpYWxpemVkU3dlZXA8TWFy
a2VkLCBTd2VlcFRvRnJlZUxpc3QsIGRlc3RydWN0b3JDYWxsTmVlZGVkPigpCisgICAgICAgICAg
ICA6IHNwZWNpYWxpemVkU3dlZXA8TWFya2VkLCBTd2VlcE9ubHksIGRlc3RydWN0b3JDYWxsTmVl
ZGVkPigpOwogICAgIGNhc2UgWmFwcGVkOgogICAgICAgICByZXR1cm4gc3dlZXBNb2RlID09IFN3
ZWVwVG9GcmVlTGlzdAotICAgICAgICAgICAgPyBzcGVjaWFsaXplZFN3ZWVwPFphcHBlZCwgU3dl
ZXBUb0ZyZWVMaXN0PigpCi0gICAgICAgICAgICA6IHNwZWNpYWxpemVkU3dlZXA8WmFwcGVkLCBT
d2VlcE9ubHk+KCk7CisgICAgICAgICAgICA/IHNwZWNpYWxpemVkU3dlZXA8WmFwcGVkLCBTd2Vl
cFRvRnJlZUxpc3QsIGRlc3RydWN0b3JDYWxsTmVlZGVkPigpCisgICAgICAgICAgICA6IHNwZWNp
YWxpemVkU3dlZXA8WmFwcGVkLCBTd2VlcE9ubHksIGRlc3RydWN0b3JDYWxsTmVlZGVkPigpOwog
ICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwogfQogCit0
ZW1wbGF0ZSBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpzd2VlcFNsb3dDYXNl
PHRydWU+KFN3ZWVwTW9kZSk7Cit0ZW1wbGF0ZSBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtl
ZEJsb2NrOjpzd2VlcFNsb3dDYXNlPGZhbHNlPihTd2VlcE1vZGUpOworCiB2b2lkIE1hcmtlZEJs
b2NrOjp6YXBGcmVlTGlzdChGcmVlQ2VsbCogZmlyc3RGcmVlQ2VsbCkKIHsKICAgICBIRUFQX0xP
R19CTE9DS19TVEFURV9UUkFOU0lUSU9OKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrLmgKaW5kZXggMDBlYjU0YjFmZjk2MzBhY2JjMjcwNDVjNzhkOGUxZjVhYzQ4
ZDI5OS4uNzViYjExY2JmMmY0MDA1M2Q0YTJhMGUwNjZmMDc1NjljYjJhMGQ2NCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCkBAIC04OSw4ICs4OSw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgdm9pZCByZXR1cm5WYWx1ZSgpIHsgfQogICAgICAgICB9
OwogCi0gICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogY3JlYXRlKEhlYXAqLCBzaXplX3QgY2Vs
bFNpemUpOwotICAgICAgICBzdGF0aWMgTWFya2VkQmxvY2sqIHJlY3ljbGUoTWFya2VkQmxvY2sq
LCBIZWFwKiwgc2l6ZV90IGNlbGxTaXplKTsKKyAgICAgICAgc3RhdGljIE1hcmtlZEJsb2NrKiBj
cmVhdGUoSGVhcCosIHNpemVfdCBjZWxsU2l6ZSwgYm9vbCBjZWxsc05lZWREZXN0cnVjdGlvbik7
CisgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogcmVjeWNsZShNYXJrZWRCbG9jayosIEhlYXAq
LCBzaXplX3QgY2VsbFNpemUsIGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24pOwogICAgICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KE1hcmtlZEJsb2NrKik7CiAKICAgICAgICAgc3RhdGljIGJvb2wg
aXNBdG9tQWxpZ25lZChjb25zdCB2b2lkKik7CkBAIC0xMTUsNiArMTE1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGJvb2wgbWFya0NvdW50SXNaZXJvKCk7IC8vIEZhc3RlciB0aGFuIG1h
cmtDb3VudCgpLgogCiAgICAgICAgIHNpemVfdCBjZWxsU2l6ZSgpOworICAgICAgICBib29sIGNl
bGxzTmVlZERlc3RydWN0aW9uKCk7CiAKICAgICAgICAgc2l6ZV90IHNpemUoKTsKICAgICAgICAg
c2l6ZV90IGNhcGFjaXR5KCk7CkBAIC0xNTksMTQgKzE2MCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9tQWxpZ25tZW50TWFzayA9IGF0b21TaXpl
IC0gMTsgLy8gYXRvbVNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KIAogICAgICAgICBlbnVt
IEJsb2NrU3RhdGUgeyBOZXcsIEZyZWVMaXN0ZWQsIEFsbG9jYXRlZCwgTWFya2VkLCBaYXBwZWQg
fTsKKyAgICAgICAgdGVtcGxhdGU8Ym9vbCBkZXN0cnVjdG9yQ2FsbE5lZWRlZD4gRnJlZUNlbGwq
IHN3ZWVwU2xvd0Nhc2UoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKIAogICAgICAgICB0eXBlZGVm
IGNoYXIgQXRvbVthdG9tU2l6ZV07CiAKLSAgICAgICAgTWFya2VkQmxvY2soUGFnZUFsbG9jYXRp
b25BbGlnbmVkJiwgSGVhcCosIHNpemVfdCBjZWxsU2l6ZSk7CisgICAgICAgIE1hcmtlZEJsb2Nr
KFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYsIEhlYXAqLCBzaXplX3QgY2VsbFNpemUsIGJvb2wgY2Vs
bHNOZWVkRGVzdHJ1Y3Rpb24pOwogICAgICAgICBBdG9tKiBhdG9tcygpOwogICAgICAgICBzaXpl
X3QgYXRvbU51bWJlcihjb25zdCB2b2lkKik7CiAgICAgICAgIHZvaWQgY2FsbERlc3RydWN0b3Io
SlNDZWxsKik7Ci0gICAgICAgIHRlbXBsYXRlPEJsb2NrU3RhdGUsIFN3ZWVwTW9kZT4gRnJlZUNl
bGwqIHNwZWNpYWxpemVkU3dlZXAoKTsKKyAgICAgICAgdGVtcGxhdGU8QmxvY2tTdGF0ZSwgU3dl
ZXBNb2RlLCBib29sIGRlc3RydWN0b3JDYWxsTmVlZGVkPiBGcmVlQ2VsbCogc3BlY2lhbGl6ZWRT
d2VlcCgpOwogICAgICAgICAKICNpZiBFTkFCTEUoR0dDKQogICAgICAgICBDYXJkU2V0PGJ5dGVz
UGVyQ2FyZCwgYmxvY2tTaXplPiBtX2NhcmRzOwpAQCAtMTc5LDYgKzE4MSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogI2Vsc2UKICAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaywgV1RGOjpC
aXRtYXBOb3RBdG9taWM+IG1fbWFya3M7CiAjZW5kaWYKKyAgICAgICAgYm9vbCBtX2NlbGxzTmVl
ZERlc3RydWN0aW9uOwogICAgICAgICBCbG9ja1N0YXRlIG1fc3RhdGU7CiAgICAgICAgIEhlYXAq
IG1faGVhcDsKICAgICB9OwpAQCAtMjA4LDYgKzIxMSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgcmV0dXJuIG1faGVhcDsKICAgICB9CiAKKyAgICBpbmxpbmUgTWFya2VkQmxvY2s6OkZy
ZWVDZWxsKiBNYXJrZWRCbG9jazo6c3dlZXAoU3dlZXBNb2RlIHN3ZWVwTW9kZSkKKyAgICB7Cisg
ICAgICAgIEhFQVBfTE9HX0JMT0NLX1NUQVRFX1RSQU5TSVRJT04odGhpcyk7CisKKyAgICAgICAg
aWYgKHN3ZWVwTW9kZSA9PSBTd2VlcE9ubHkgJiYgIW1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb24pCisg
ICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAobV9jZWxsc05lZWREZXN0cnVjdGlv
bikKKyAgICAgICAgICAgIHJldHVybiBzd2VlcFNsb3dDYXNlPHRydWU+KHN3ZWVwTW9kZSk7Cisg
ICAgICAgIHJldHVybiBzd2VlcFNsb3dDYXNlPGZhbHNlPihzd2VlcE1vZGUpOworICAgIH0KKwog
ICAgIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpkaWRDb25zdW1lRnJlZUxpc3QoKQogICAgIHsK
ICAgICAgICAgSEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTih0aGlzKTsKQEAgLTI0Myw2
ICsyNTgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBtX2F0b21zUGVyQ2Vs
bCAqIGF0b21TaXplOwogICAgIH0KIAorICAgIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjpjZWxs
c05lZWREZXN0cnVjdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gbV9jZWxsc05lZWREZXN0
cnVjdGlvbjsgCisgICAgfQorCiAgICAgaW5saW5lIHNpemVfdCBNYXJrZWRCbG9jazo6c2l6ZSgp
CiAgICAgewogICAgICAgICByZXR1cm4gbWFya0NvdW50KCkgKiBjZWxsU2l6ZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCmluZGV4IDg3ZGMwNDkzZGM1ZTNm
MTkxZmRiMDgwMzk1YjFlOTk2MDI1OTc4NTYuLmJmODM5MDExZDIwNjhiZjdiN2UwZGEwOThkZmQw
MmNjNjc2ZmJmMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5j
cHAKQEAgLTM2LDE1ICszNiwxMyBAQCBNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2UoSGVhcCogaGVh
cCkKICAgICAsIG1faGVhcChoZWFwKQogewogICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gcHJl
Y2lzZVN0ZXA7IGNlbGxTaXplIDw9IHByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IHByZWNpc2VT
dGVwKSB7Ci0gICAgICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkuc2V0Q2VsbFNpemUoY2VsbFNp
emUpOwotICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLnNldEhlYXAoaGVhcCk7Ci0gICAg
ICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkuc2V0TWFya2VkU3BhY2UodGhpcyk7CisgICAgICAg
IGFsbG9jYXRvckZvcihjZWxsU2l6ZSkuaW5pdChoZWFwLCB0aGlzLCBjZWxsU2l6ZSwgZmFsc2Up
OworICAgICAgICBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGNlbGxTaXplKS5pbml0KGhlYXAsIHRo
aXMsIGNlbGxTaXplLCB0cnVlKTsKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9
IGltcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IGltcHJlY2lzZUN1dG9mZjsgY2VsbFNpemUgKz0g
aW1wcmVjaXNlU3RlcCkgewotICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLnNldENlbGxT
aXplKGNlbGxTaXplKTsKLSAgICAgICAgYWxsb2NhdG9yRm9yKGNlbGxTaXplKS5zZXRIZWFwKGhl
YXApOwotICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLnNldE1hcmtlZFNwYWNlKHRoaXMp
OworICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLmluaXQoaGVhcCwgdGhpcywgY2VsbFNp
emUsIGZhbHNlKTsKKyAgICAgICAgZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihjZWxsU2l6ZSkuaW5p
dChoZWFwLCB0aGlzLCBjZWxsU2l6ZSwgdHJ1ZSk7CiAgICAgfQogfQogCkBAIC01MywyMCArNTEs
MjggQEAgdm9pZCBNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3JzKCkKICAgICBtX3dhdGVyTWFy
ayA9IDA7CiAgICAgbV9udXJzZXJ5V2F0ZXJNYXJrID0gMDsKIAotICAgIGZvciAoc2l6ZV90IGNl
bGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHByZWNpc2VDdXRvZmY7IGNlbGxTaXpl
ICs9IHByZWNpc2VTdGVwKQorICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7
IGNlbGxTaXplIDw9IHByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IHByZWNpc2VTdGVwKSB7CiAg
ICAgICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKKyAgICAgICAgZGVzdHJ1Y3Rv
ckFsbG9jYXRvckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKKyAgICB9CiAKLSAgICBmb3IgKHNpemVf
dCBjZWxsU2l6ZSA9IGltcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IGltcHJlY2lzZUN1dG9mZjsg
Y2VsbFNpemUgKz0gaW1wcmVjaXNlU3RlcCkKKyAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IGlt
cHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IGltcHJlY2lzZUN1dG9mZjsgY2VsbFNpemUgKz0gaW1w
cmVjaXNlU3RlcCkgewogICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLnJlc2V0KCk7Cisg
ICAgICAgIGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLnJlc2V0KCk7CisgICAgfQog
fQogCiB2b2lkIE1hcmtlZFNwYWNlOjpjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCkKIHsK
LSAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVj
aXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkKKyAgICBmb3IgKHNpemVfdCBjZWxs
U2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSAr
PSBwcmVjaXNlU3RlcCkgewogICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLnphcEZyZWVM
aXN0KCk7CisgICAgICAgIGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLnphcEZyZWVM
aXN0KCk7CisgICAgfQogCi0gICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBpbXByZWNpc2VTdGVw
OyBjZWxsU2l6ZSA8PSBpbXByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IGltcHJlY2lzZVN0ZXAp
CisgICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBpbXByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBp
bXByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IGltcHJlY2lzZVN0ZXApIHsKICAgICAgICAgYWxs
b2NhdG9yRm9yKGNlbGxTaXplKS56YXBGcmVlTGlzdCgpOworICAgICAgICBkZXN0cnVjdG9yQWxs
b2NhdG9yRm9yKGNlbGxTaXplKS56YXBGcmVlTGlzdCgpOworICAgIH0KIH0KIAogCkBAIC0xMDcs
NyArMTEzLDcgQEAgaW5saW5lIHZvaWQgVGFrZUlmVW5tYXJrZWQ6Om9wZXJhdG9yKCkoTWFya2Vk
QmxvY2sqIGJsb2NrKQogICAgIGlmICghYmxvY2stPm1hcmtDb3VudElzWmVybygpKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgbV9tYXJrZWRTcGFjZS0+YWxsb2NhdG9yRm9yKGJsb2NrLT5j
ZWxsU2l6ZSgpKS5yZW1vdmVCbG9jayhibG9jayk7CisgICAgbV9tYXJrZWRTcGFjZS0+YWxsb2Nh
dG9yRm9yKGJsb2NrKS5yZW1vdmVCbG9jayhibG9jayk7CiAgICAgbV9lbXB0aWVzLmFwcGVuZChi
bG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCmluZGV4
IDIxYTBiNDhkZThkMmQ5M2UzMTlmZTQyYjljZTY1MDM5NGFkYzE1OTIuLjIyMjg2YjQwZjM2ZGNj
YTRiOWZkZTBiMjc1OGY4M2Y5NzZjNzc1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuaApAQCAtNTIsNyArNTIsMTAgQEAgcHVibGljOgogICAgIE1hcmtlZFNwYWNl
KEhlYXAqKTsKIAogICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yKHNpemVfdCk7Cisg
ICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3IoTWFya2VkQmxvY2sqKTsKKyAgICBNYXJr
ZWRBbGxvY2F0b3ImIGRlc3RydWN0b3JBbGxvY2F0b3JGb3Ioc2l6ZV90KTsKICAgICB2b2lkKiBh
bGxvY2F0ZShzaXplX3QpOworICAgIHZvaWQqIGFsbG9jYXRlV2l0aERlc3RydWN0b3Ioc2l6ZV90
KTsKICAgICAKICAgICB2b2lkIHJlc2V0QWxsb2NhdG9ycygpOwogCkBAIC04Niw4ICs4OSwxNCBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaW1wcmVjaXNlQ3V0b2ZmID0gbWF4
Q2VsbFNpemU7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBpbXByZWNpc2VDb3VudCA9IGltcHJl
Y2lzZUN1dG9mZiAvIGltcHJlY2lzZVN0ZXA7CiAKLSAgICBGaXhlZEFycmF5PE1hcmtlZEFsbG9j
YXRvciwgcHJlY2lzZUNvdW50PiBtX3ByZWNpc2VTaXplQ2xhc3NlczsKLSAgICBGaXhlZEFycmF5
PE1hcmtlZEFsbG9jYXRvciwgaW1wcmVjaXNlQ291bnQ+IG1faW1wcmVjaXNlU2l6ZUNsYXNzZXM7
CisgICAgc3RydWN0IFN1YnNwYWNlIHsKKyAgICAgICAgRml4ZWRBcnJheTxNYXJrZWRBbGxvY2F0
b3IsIHByZWNpc2VDb3VudD4gcHJlY2lzZVNpemVDbGFzc2VzOworICAgICAgICBGaXhlZEFycmF5
PE1hcmtlZEFsbG9jYXRvciwgaW1wcmVjaXNlQ291bnQ+IGltcHJlY2lzZVNpemVDbGFzc2VzOwor
ICAgIH07CisKKyAgICBTdWJzcGFjZSBtX2Rlc3RydWN0b3JTcGFjZTsKKyAgICBTdWJzcGFjZSBt
X25vcm1hbFNwYWNlOworCiAgICAgc2l6ZV90IG1fd2F0ZXJNYXJrOwogICAgIHNpemVfdCBtX251
cnNlcnlXYXRlck1hcms7CiAgICAgSGVhcCogbV9oZWFwOwpAQCAtMTI0LDggKzEzMywyMyBAQCBp
bmxpbmUgTWFya2VkQWxsb2NhdG9yJiBNYXJrZWRTcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBi
eXRlcykKIHsKICAgICBBU1NFUlQoYnl0ZXMgJiYgYnl0ZXMgPD0gbWF4Q2VsbFNpemUpOwogICAg
IGlmIChieXRlcyA8PSBwcmVjaXNlQ3V0b2ZmKQotICAgICAgICByZXR1cm4gbV9wcmVjaXNlU2l6
ZUNsYXNzZXNbKGJ5dGVzIC0gMSkgLyBwcmVjaXNlU3RlcF07Ci0gICAgcmV0dXJuIG1faW1wcmVj
aXNlU2l6ZUNsYXNzZXNbKGJ5dGVzIC0gMSkgLyBpbXByZWNpc2VTdGVwXTsKKyAgICAgICAgcmV0
dXJuIG1fbm9ybWFsU3BhY2UucHJlY2lzZVNpemVDbGFzc2VzWyhieXRlcyAtIDEpIC8gcHJlY2lz
ZVN0ZXBdOworICAgIHJldHVybiBtX25vcm1hbFNwYWNlLmltcHJlY2lzZVNpemVDbGFzc2VzWyhi
eXRlcyAtIDEpIC8gaW1wcmVjaXNlU3RlcF07Cit9CisKK2lubGluZSBNYXJrZWRBbGxvY2F0b3Im
IE1hcmtlZFNwYWNlOjphbGxvY2F0b3JGb3IoTWFya2VkQmxvY2sqIGJsb2NrKQoreworICAgIGlm
IChibG9jay0+Y2VsbHNOZWVkRGVzdHJ1Y3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIGRlc3RydWN0
b3JBbGxvY2F0b3JGb3IoYmxvY2stPmNlbGxTaXplKCkpOworICAgIHJldHVybiBhbGxvY2F0b3JG
b3IoYmxvY2stPmNlbGxTaXplKCkpOworfQorCitpbmxpbmUgTWFya2VkQWxsb2NhdG9yJiBNYXJr
ZWRTcGFjZTo6ZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihzaXplX3QgYnl0ZXMpCit7CisgICAgQVNT
RVJUKGJ5dGVzICYmIGJ5dGVzIDw9IG1heENlbGxTaXplKTsKKyAgICBpZiAoYnl0ZXMgPD0gcHJl
Y2lzZUN1dG9mZikKKyAgICAgICAgcmV0dXJuIG1fZGVzdHJ1Y3RvclNwYWNlLnByZWNpc2VTaXpl
Q2xhc3Nlc1soYnl0ZXMgLSAxKSAvIHByZWNpc2VTdGVwXTsKKyAgICByZXR1cm4gbV9kZXN0cnVj
dG9yU3BhY2UuaW1wcmVjaXNlU2l6ZUNsYXNzZXNbKGJ5dGVzIC0gMSkgLyBpbXByZWNpc2VTdGVw
XTsKIH0KIAogaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZShzaXplX3QgYnl0ZXMp
CkBAIC0xMzMsMTQgKzE1NywyMSBAQCBpbmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRl
KHNpemVfdCBieXRlcykKICAgICByZXR1cm4gYWxsb2NhdG9yRm9yKGJ5dGVzKS5hbGxvY2F0ZSgp
OwogfQogCitpbmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlV2l0aERlc3RydWN0b3Io
c2l6ZV90IGJ5dGVzKQoreworICAgIHJldHVybiBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVz
KS5hbGxvY2F0ZSgpOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5
cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgTWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayhGdW5j
dG9yJiBmdW5jdG9yKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlY2lzZUNvdW50
OyArK2kpIHsKLSAgICAgICAgbV9wcmVjaXNlU2l6ZUNsYXNzZXNbaV0uZm9yRWFjaEJsb2NrKGZ1
bmN0b3IpOworICAgICAgICBtX25vcm1hbFNwYWNlLnByZWNpc2VTaXplQ2xhc3Nlc1tpXS5mb3JF
YWNoQmxvY2soZnVuY3Rvcik7CisgICAgICAgIG1fZGVzdHJ1Y3RvclNwYWNlLnByZWNpc2VTaXpl
Q2xhc3Nlc1tpXS5mb3JFYWNoQmxvY2soZnVuY3Rvcik7CiAgICAgfQogCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBpbXByZWNpc2VDb3VudDsgKytpKSB7Ci0gICAgICAgIG1faW1wcmVjaXNl
U2l6ZUNsYXNzZXNbaV0uZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAgICAgICBtX25vcm1hbFNw
YWNlLmltcHJlY2lzZVNpemVDbGFzc2VzW2ldLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKKyAgICAg
ICAgbV9kZXN0cnVjdG9yU3BhY2UuaW1wcmVjaXNlU2l6ZUNsYXNzZXNbaV0uZm9yRWFjaEJsb2Nr
KGZ1bmN0b3IpOwogICAgIH0KIAogICAgIHJldHVybiBmdW5jdG9yLnJldHVyblZhbHVlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCBjMzU3ZThjMzliMjRlYmY3MzY0MmJlYTYyZGFmN2I0
NjBjNzc2ZWY5Li5jMDY4ZjZmYzdmYmFiODJlMjlkNGFjYmRlY2UxN2M3MjAzOTFlNGQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTMyOSw3ICszMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFJlZ2lzdGVySUQgb3duZXIsIFJlZ2lzdGVy
SUQgdmFsdWVUYWcsIFJlZ2lzdGVySUQgc2NyYXRjaCwgUmVnaXN0ZXJJRCBzY3JhdGNoMiwgV3Jp
dGVCYXJyaWVyTW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCk7CiAgICAgICAgIHZvaWQgZW1pdFdy
aXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNj
cmF0Y2gsIFdyaXRlQmFycmllck1vZGUsIFdyaXRlQmFycmllclVzZUtpbmQpOwogCi0gICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4gdm9p
ZCBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KFN0cnVjdHVyZVR5cGUsIFJlZ2lzdGVySUQgcmVz
dWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
bGFzc1R5cGUsIGJvb2wgZGVzdHJ1Y3RvciwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4gdm9pZCBl
bWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KFN0cnVjdHVyZVR5cGUsIFJlZ2lzdGVySUQgcmVzdWx0
LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2
b2lkIGVtaXRBbGxvY2F0ZUpTRmluYWxPYmplY3QoVCBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVz
dWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpOwogICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpT
RnVuY3Rpb24oRnVuY3Rpb25FeGVjdXRhYmxlKiwgUmVnaXN0ZXJJRCBzY29wZUNoYWluLCBSZWdp
c3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKICAgICAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCmluZGV4IDAxNTQ1ZmI4Yzcy
NzQ1MDk4YjRiNmE3ZTg4NDAyNmNhNzEzNDNkMTUuLmMxNzc2OWQ4NTliNzJhZjhlNmE5ZjI2NmMx
OTI5MzhiNDY0ZGI5YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lTWV0aG9kcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
TWV0aG9kcy5oCkBAIC0zOTksOSArMzk5LDEzIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omlz
T3BlcmFuZENvbnN0YW50SW1tZWRpYXRlQ2hhcih1bnNpZ25lZCBzcmMpCiAgICAgcmV0dXJuIG1f
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
YXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3NU
eXBlLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0
ZUJhc2ljSlNPYmplY3QoU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0
LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3NUeXBlLCBi
b29sIGRlc3RydWN0b3IsIHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+IGlubGluZSB2b2lkIEpJVDo6
ZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdChTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgUmVnaXN0
ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cikKIHsKLSAgICBNYXJrZWRBbGxvY2F0
b3IqIGFsbG9jYXRvciA9ICZtX2dsb2JhbERhdGEtPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0KHNp
emVvZihDbGFzc1R5cGUpKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IDA7Cisg
ICAgaWYgKGRlc3RydWN0b3IpCisgICAgICAgIGFsbG9jYXRvciA9ICZtX2dsb2JhbERhdGEtPmhl
YXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aERlc3RydWN0b3Ioc2l6ZW9mKENsYXNzVHlwZSkpOwor
ICAgIGVsc2UKKyAgICAgICAgYWxsb2NhdG9yID0gJm1fZ2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0
b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihzaXplb2YoQ2xhc3NUeXBlKSk7CiAgICAgbG9h
ZFB0cigmYWxsb2NhdG9yLT5tX2ZpcnN0RnJlZUNlbGwsIHJlc3VsdCk7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHQpKTsKIApAQCAtNDI1LDEyICs0MjksMTIgQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4gaW5s
aW5lIHZvaWQgSklUOjplbWl0QWxsb2MKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2
b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0cnVjdHVyZSwgUmVnaXN0ZXJJ
RCByZXN1bHQsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKLSAgICBlbWl0QWxsb2NhdGVCYXNpY0pT
T2JqZWN0PEpTRmluYWxPYmplY3Q+KHN0cnVjdHVyZSwgcmVzdWx0LCBzY3JhdGNoKTsKKyAgICBl
bWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpTRmluYWxPYmplY3QsIGZhbHNlLCBUPihzdHJ1Y3R1
cmUsIHJlc3VsdCwgc2NyYXRjaCk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRl
SlNGdW5jdGlvbihGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIFJlZ2lzdGVySUQgc2Nv
cGVDaGFpbiwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cikKIHsKLSAg
ICBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpTRnVuY3Rpb24+KFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5uYW1lZEZ1bmN0aW9uU3RydWN0dXJlKCkpLCByZXN1
bHQsIHN0b3JhZ2VQdHIpOworICAgIGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Q8SlNGdW5jdGlv
biwgdHJ1ZT4oVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPm5hbWVk
RnVuY3Rpb25TdHJ1Y3R1cmUoKSksIHJlc3VsdCwgc3RvcmFnZVB0cik7CiAKICAgICAvLyBzdG9y
ZSB0aGUgZnVuY3Rpb24ncyBzY29wZSBjaGFpbgogICAgIHN0b3JlUHRyKHNjb3BlQ2hhaW4sIEFk
ZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAppbmRleCBjODRmYjViMTA2YTU4ZjNi
Mzg1OTgzNGRjYmNiNDdlNDQyMDE4NDllLi43MWQ2NzhlMmNkOGJlYjRjMDlmMmIyMmMwYzk3NDk1
MWU2M2QzZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcApA
QCAtNDIsNiArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogbmFtZXNwYWNlIEpTQyB7CiAK
IEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNBcnJheSk7CitBU1NFUlRfSEFTX1RSSVZJQUxf
REVTVFJVQ1RPUihKU0FycmF5KTsKIAogLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQogLy8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAppbmRleCBhMzM1NGM2MDI0YjA5NzNjOWZm
MmEwZTdmZWFkNzNkMzBkZjVmZmYzLi5jMmUxZjljMzQyOTBhYjBjMGYzZGY3ZThkZDY0NjVlZDRl
MTlhZmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCkBAIC0xMjEs
NiArMTIxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiBtX3ZlY3RvclsxXTsKICAgICB9OwogCisgICAgdGVtcGxhdGU8PiB2b2lkKiBhbGxvY2F0ZUNl
bGw8SlNBcnJheT4oSGVhcCYpOworCiAgICAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIFdhbGtlcjsKIApAQCAtMjY1LDYgKzI2
NywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBz
ZXRTdWJjbGFzc0RhdGEodm9pZCopOwogCiAgICAgcHJpdmF0ZToKKworICAgICAgICBmcmllbmQg
dm9pZCogYWxsb2NhdGVDZWxsPEpTQXJyYXk+KEhlYXAmKTsKKworICAgICAgICBzdGF0aWMgSlND
ZWxsKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKEhlYXAmIGhlYXApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0NlbGwqPihIZWFwOjpEZXN0cnVjdG9yRnJl
ZUFsbG9jYXRvcjo6YWxsb2NhdGUoaGVhcCwgc2l6ZW9mKEpTQXJyYXkpKSk7CisgICAgICAgIH0K
KwogICAgICAgICBib29sIGlzTGVuZ3RoV3JpdGFibGUoKQogICAgICAgICB7CiAgICAgICAgICAg
ICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBtX3NwYXJzZVZhbHVlTWFwOwpAQCAtMjk5LDYg
KzMwOSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCogbV9zdWJjbGFzc0RhdGE7
IC8vIEEgSlNBcnJheSBzdWJjbGFzcyBjYW4gdXNlIHRoaXMgdG8gZmlsbCB0aGUgdmVjdG9yIGxh
emlseS4KICAgICB9OwogCisgICAgdGVtcGxhdGU8PiBpbmxpbmUgdm9pZCogYWxsb2NhdGVDZWxs
PEpTQXJyYXk+KEhlYXAmIGhlYXApCisgICAgeworI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQor
ICAgICAgICBBU1NFUlQoc2l6ZW9mKEpTQXJyYXkpID09IEpTQXJyYXk6OnNfaW5mby5jZWxsU2l6
ZSk7CisgICAgICAgIEFTU0VSVCghaGVhcC5nbG9iYWxEYXRhKCktPmlzSW5pdGlhbGl6aW5nT2Jq
ZWN0KCkpOworICAgICAgICBoZWFwLmdsb2JhbERhdGEoKS0+c2V0SW5pdGlhbGl6aW5nT2JqZWN0
KHRydWUpOworI2VuZGlmCisgICAgICAgIEpTQ2VsbCogcmVzdWx0ID0gSlNBcnJheTo6YWxsb2Nh
dGVXaXRob3V0RGVzdHJ1Y3RvcihoZWFwKTsKKyAgICAgICAgcmVzdWx0LT5jbGVhclN0cnVjdHVy
ZSgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIEpTQXJyYXkqIGFzQXJy
YXkoSlNWYWx1ZSk7CiAKICAgICBpbmxpbmUgSlNBcnJheSogYXNBcnJheShKU0NlbGwqIGNlbGwp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKaW5kZXggYTQ0M2Zk
YTg2YzFhYTcyMmEyMWM1YWUxYzM0YzgxMjMzNTMyNDA5Ni4uOWYyMDM1ZDAzZDI5Y2IyYTkwMjUw
ZDNlM2UyOGM1ZjFlZDk0ZjQyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmNwcApAQCAtNDgsNiArNDgsNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpT
Tm9uRmluYWxPYmplY3QpOwogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU0ZpbmFsT2JqZWN0
KTsKIAogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoSlNPYmplY3QpOworQVNTRVJUX0hB
U19UUklWSUFMX0RFU1RSVUNUT1IoSlNGaW5hbE9iamVjdCk7CiAKIGNvbnN0IGNoYXIqIFN0cmlj
dE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvciA9ICJBdHRlbXB0ZWQgdG8gYXNzaWduIHRv
IHJlYWRvbmx5IHByb3BlcnR5LiI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCmluZGV4IDQzMzI0OWMyMDQ1OGMwN2U1OTg1OWU4NDgxODAwMDAxZjM1OTA2MWYuLmJi
OTU1Yzk0NjJhYmQzNmNmZmJlYzZmODE2MTVhOTI4Mjg0ZTdlYTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaApAQCAtMzQ5LDYgKzM0OSwxMCBAQCBDT01QSUxFX0FT
U0VSVCgoSlNGaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNpdHkgPj0gSlNOb25GaW5hbE9i
amVjdF9pbmxpbmVTdAogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9pbmxpbmVTdG9y
YWdlW0pTTm9uRmluYWxPYmplY3RfaW5saW5lU3RvcmFnZUNhcGFjaXR5XTsKICAgICB9OwogCisg
ICAgY2xhc3MgSlNGaW5hbE9iamVjdDsKKworICAgIHRlbXBsYXRlPD4gdm9pZCogYWxsb2NhdGVD
ZWxsPEpTRmluYWxPYmplY3Q+KEhlYXAmKTsKKwogICAgIC8vIEpTRmluYWxPYmplY3QgaXMgYSB0
eXBlIG9mIEpTT2JqZWN0IHRoYXQgY29udGFpbnMgc3VmZmljZW50IGludGVybmFsCiAgICAgLy8g
c3RvcmFnZSB0byBmdWxseSBtYWtlIHVzZSBvZiB0aGUgY29sbG9jdG9yIGNlbGwgY29udGFpbmlu
ZyBpdC4KICAgICBjbGFzcyBKU0ZpbmFsT2JqZWN0IDogcHVibGljIEpTT2JqZWN0IHsKQEAgLTM4
MywxNiArMzg3LDM1IEBAIENPTVBJTEVfQVNTRVJUKChKU0ZpbmFsT2JqZWN0X2lubGluZVN0b3Jh
Z2VDYXBhY2l0eSA+PSBKU05vbkZpbmFsT2JqZWN0X2lubGluZVN0CiAgICAgICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgdm9p
ZCogYWxsb2NhdGVDZWxsPEpTRmluYWxPYmplY3Q+KEhlYXAmKTsKKwogICAgICAgICBleHBsaWNp
dCBKU0ZpbmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiAgICAgICAgICAgICA6IEpTT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgbV9p
bmxpbmVTdG9yYWdlKQogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgSlND
ZWxsKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKEhlYXAmIGhlYXApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0NlbGwqPihIZWFwOjpEZXN0cnVjdG9yRnJl
ZUFsbG9jYXRvcjo6YWxsb2NhdGUoaGVhcCwgc2l6ZW9mKEpTRmluYWxPYmplY3QpKSk7CisgICAg
ICAgIH0KKwogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBK
U09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPiBtX2lubGluZVN0b3JhZ2VbSlNGaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNpdHld
OwogICAgIH07CiAKK3RlbXBsYXRlPD4gaW5saW5lIHZvaWQqIGFsbG9jYXRlQ2VsbDxKU0ZpbmFs
T2JqZWN0PihIZWFwJiBoZWFwKQoreworI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQorICAgICAg
ICBBU1NFUlQoc2l6ZW9mKEpTRmluYWxPYmplY3QpID09IEpTRmluYWxPYmplY3Q6OnNfaW5mby5j
ZWxsU2l6ZSk7CisgICAgICAgIEFTU0VSVCghaGVhcC5nbG9iYWxEYXRhKCktPmlzSW5pdGlhbGl6
aW5nT2JqZWN0KCkpOworICAgICAgICBoZWFwLmdsb2JhbERhdGEoKS0+c2V0SW5pdGlhbGl6aW5n
T2JqZWN0KHRydWUpOworI2VuZGlmCisgICAgICAgIEpTQ2VsbCogcmVzdWx0ID0gSlNGaW5hbE9i
amVjdDo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihoZWFwKTsKKyAgICAgICAgcmVzdWx0LT5j
bGVhclN0cnVjdHVyZSgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworfQorCiBpbmxpbmUgYm9v
bCBpc0pTRmluYWxPYmplY3QoSlNDZWxsKiBjZWxsKQogewogICAgIHJldHVybiBjZWxsLT5jbGFz
c0luZm8oKSA9PSAmSlNGaW5hbE9iamVjdDo6c19pbmZvOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>125384</attachid>
            <date>2012-02-03 12:35:32 -0800</date>
            <delta_ts>2012-02-03 12:35:32 -0800</delta_ts>
            <desc>Bencher results</desc>
            <filename>ToT_Splitheap_SunSpiderV8Kraken_Marks-Mac-Pro_20120203_1220_benchReport.txt</filename>
            <type>text/plain</type>
            <size>7303</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">QmVuY2htYXJrIHJlcG9ydCBmb3IgU3VuU3BpZGVyLCBWOCwgYW5kIEtyYWtlbiBvbiBNYXJrcy1N
YWMtUHJvIChNYWNQcm81LDEpLgoKVk1zIHRlc3RlZDoKIlRvVCIgYXQgL1ZvbHVtZXMvRGF0YS9X
ZWJLaXQtdHJ1ZS1jbGVhbi9XZWJLaXRCdWlsZC9SZWxlYXNlL2pzYwoiU3BsaXRoZWFwIiBhdCAv
Vm9sdW1lcy9EYXRhL1dlYktpdC1tYXJrZWRhbGxvY2F0b3IvV2ViS2l0QnVpbGQvUmVsZWFzZS9q
c2MKCkNvbGxlY3RlZCA2NCBzYW1wbGVzIHBlciBiZW5jaG1hcmsvVk0sIHdpdGggOCBWTSBpbnZv
Y2F0aW9ucyBwZXIgYmVuY2htYXJrLiBFbWl0dGVkIGEgY2FsbCB0byBnYygpIGJldHdlZW4gc2Ft
cGxlCm1lYXN1cmVtZW50cy4gVXNlZCAxIGJlbmNobWFyayBpdGVyYXRpb24gcGVyIFZNIGludm9j
YXRpb24gZm9yIHdhcm0tdXAuIFVzZWQgdGhlIGpzYy1zcGVjaWZpYyBwcmVjaXNlVGltZSgpCmZ1
bmN0aW9uIHRvIGdldCBtaWNyb3NlY29uZC1sZXZlbCB0aW1pbmcuIFJlcG9ydGluZyBiZW5jaG1h
cmsgZXhlY3V0aW9uIHRpbWVzIHdpdGggOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGluCm1pbGxp
c2Vjb25kcy4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VG9UICAgICAgICAgICAgICAgICAgU3BsaXRoZWFwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgClN1blNwaWRlcjoKICAgM2QtY3ViZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgNS42MDYyKy0wLjA1NDIgICAgICAgICAgNS41NjQ4Ky0wLjAzNTMgICAgICAgCiAgIDNk
LW1vcnBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkuODU4OCstMC4wNzA2ICAgICAg
ICAgIDkuODQwMSstMC4wNzg3ICAgICAgIAogICAzZC1yYXl0cmFjZSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA3Ljk0NTArLTAuMDY4NSAgICA/ICAgICA3Ljk3ODcrLTAuMDYwNSAgICAgICA/
CiAgIGFjY2Vzcy1iaW5hcnktdHJlZXMgICAgICAgICAgICAgICAgICAgIDEuNjkxNistMC4wMTU4
ICAgIF4gICAgIDEuNjY3MystMC4wMDgwICAgICAgIF4gZGVmaW5pdGVseSAxLjAxNDV4IGZhc3Rl
cgogICBhY2Nlc3MtZmFubmt1Y2ggICAgICAgICAgICAgICAgICAgICAgICA3LjUzMjMrLTAuMDMx
MSAgICA/ICAgICA3LjU2OTErLTAuMDMyOCAgICAgICA/CiAgIGFjY2Vzcy1uYm9keSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDQuMDg1NSstMC4wMjA1ICAgICAgICAgIDQuMDY1NCstMC4wMTQz
ICAgICAgIAogICBhY2Nlc3MtbnNpZXZlICAgICAgICAgICAgICAgICAgICAgICAgICAzLjUxMzQr
LTAuMDI4MiAgICAgICAgICAzLjUxMTcrLTAuMDIzNiAgICAgICAKICAgYml0b3BzLTNiaXQtYml0
cy1pbi1ieXRlICAgICAgICAgICAgICAgMS4yNzg1Ky0wLjAwMzEgICAgISAgICAgMS4zMDE0Ky0w
LjAwNzcgICAgICAgISBkZWZpbml0ZWx5IDEuMDE3OXggc2xvd2VyCiAgIGJpdG9wcy1iaXRzLWlu
LWJ5dGUgICAgICAgICAgICAgICAgICAgIDUuNDI3NSstMC4wMTk1ICAgICEgICAgIDUuNTA4Nyst
MC4wMjgzICAgICAgICEgZGVmaW5pdGVseSAxLjAxNTB4IHNsb3dlcgogICBiaXRvcHMtYml0d2lz
ZS1hbmQgICAgICAgICAgICAgICAgICAgICAzLjMyNjYrLTAuMDE0MyAgICAgICAgICAzLjMyNjUr
LTAuMDEzOSAgICAgICAKICAgYml0b3BzLW5zaWV2ZS1iaXRzICAgICAgICAgICAgICAgICAgICAg
NS43NTczKy0wLjAzMDggICAgICAgICAgNS43NDU5Ky0wLjAzMDYgICAgICAgCiAgIGNvbnRyb2xm
bG93LXJlY3Vyc2l2ZSAgICAgICAgICAgICAgICAgIDIuMzg5MistMC4wMTI1ICAgICAgICAgIDIu
MzcyNSstMC4wMDkxICAgICAgIAogICBjcnlwdG8tYWVzICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA3LjY3ODIrLTAuMDYwOCAgICA/ICAgICA3LjY4OTQrLTAuMDQzNCAgICAgICA/CiAgIGNy
eXB0by1tZDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNjE0OCstMC4wMTUwICAgICAg
ICAgIDIuNjA0MystMC4wMTI2ICAgICAgIAogICBjcnlwdG8tc2hhMSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAyLjM3MjUrLTAuMDE5MSAgICAgICAgICAyLjM0OTUrLTAuMDEwOSAgICAgICAK
ICAgZGF0ZS1mb3JtYXQtdG9mdGUgICAgICAgICAgICAgICAgICAgICAxMC44NDU0Ky0wLjA2NTUg
ICAgICAgICAxMC44MjcyKy0wLjA3MTIgICAgICAgCiAgIGRhdGUtZm9ybWF0LXhwYXJiICAgICAg
ICAgICAgICAgICAgICAgMTAuNDIwOSstMC4wNjc3ICAgICEgICAgMTAuODQwOSstMC4wNzcyICAg
ICAgICEgZGVmaW5pdGVseSAxLjA0MDN4IHNsb3dlcgogICBtYXRoLWNvcmRpYyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA3LjYyNzQrLTAuMDUwNCAgICA/ICAgICA3LjY4MzkrLTAuMDYyNyAg
ICAgICA/CiAgIG1hdGgtcGFydGlhbC1zdW1zICAgICAgICAgICAgICAgICAgICAgMTAuNjcxOSst
MC4wMzM0ICAgID8gICAgMTAuNzMzOCstMC4wNjUxICAgICAgID8KICAgbWF0aC1zcGVjdHJhbC1u
b3JtICAgICAgICAgICAgICAgICAgICAgMi42ODQ3Ky0wLjAwOTkgICAgPyAgICAgMi43MDY4Ky0w
LjAxMzEgICAgICAgPwogICByZWdleHAtZG5hICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4
Ljk1MDErLTAuMDQzMyAgICA/ICAgICA5LjA2MjIrLTAuMDg0OSAgICAgICA/IG1pZ2h0IGJlIDEu
MDEyNXggc2xvd2VyCiAgIHN0cmluZy1iYXNlNjQgICAgICAgICAgICAgICAgICAgICAgICAgIDQu
NDY2MistMC4wMzEwICAgID8gICAgIDQuNDY5NCstMC4wMzU2ICAgICAgID8KICAgc3RyaW5nLWZh
c3RhICAgICAgICAgICAgICAgICAgICAgICAgICAgNy4yNzY5Ky0wLjAyNzkgICAgISAgICAgNy4z
NjUyKy0wLjA0MzkgICAgICAgISBkZWZpbml0ZWx5IDEuMDEyMXggc2xvd2VyCiAgIHN0cmluZy10
YWdjbG91ZCAgICAgICAgICAgICAgICAgICAgICAgMTIuODY0MistMC4wNTAxICAgID8gICAgMTIu
ODc1NSstMC4wMzcxICAgICAgID8KICAgc3RyaW5nLXVucGFjay1jb2RlICAgICAgICAgICAgICAg
ICAgICAyMC45NzE4Ky0wLjExMjAgICAgPyAgICAyMS4xNjMxKy0wLjExODQgICAgICAgPwogICBz
dHJpbmctdmFsaWRhdGUtaW5wdXQgICAgICAgICAgICAgICAgICA1Ljc4ODgrLTAuMDQzOCAgICA/
ICAgICA1Ljg0NjkrLTAuMjgyMSAgICAgICA/IG1pZ2h0IGJlIDEuMDEwMHggc2xvd2VyCgogICA8
YXJpdGhtZXRpYz4gKiAgICAgICAgICAgICAgICAgICAgICAgICA2LjY3ODcrLTAuMDExNSAgICAh
ICAgICA2LjcxODErLTAuMDE2MyAgICAgICAhIGRlZmluaXRlbHkgMS4wMDU5eCBzbG93ZXIKICAg
PGdlb21ldHJpYz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNS40NDI4Ky0wLjAwODYgICAg
PyAgICAgNS40NjEwKy0wLjAxMDEgICAgICAgPyBtaWdodCBiZSAxLjAwMzN4IHNsb3dlcgogICA8
aGFybW9uaWM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjMyNDQrLTAuMDA3NiAgICA/
ICAgICA0LjMzMDkrLTAuMDA2NSAgICAgICA/IG1pZ2h0IGJlIDEuMDAxNXggc2xvd2VyCgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvVCAgICAgICAgICAg
ICAgICAgIFNwbGl0aGVhcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApWODoK
ICAgY3J5cHRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3OS42MDg2Ky0wLjM4Mjcg
ICAgXiAgICA3OC44OTEzKy0wLjIyMzQgICAgICAgXiBkZWZpbml0ZWx5IDEuMDA5MXggZmFzdGVy
CiAgIGRlbHRhYmx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjQuMDMxOCstMC44MzYy
ICAgIF4gICAxNjEuMjQ4NystMC42OTYwICAgICAgIF4gZGVmaW5pdGVseSAxLjAxNzN4IGZhc3Rl
cgogICBlYXJsZXktYm95ZXIgICAgICAgICAgICAgICAgICAgICAgICAgIDk3LjAyNjIrLTAuNzc5
NSAgICBeICAgIDk0LjY0MTYrLTAuNzE5OCAgICAgICBeIGRlZmluaXRlbHkgMS4wMjUyeCBmYXN0
ZXIKICAgcmF5dHJhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Mi4zNjQ1Ky0wLjE5
NzggICAgICAgICA1Mi4xMzg2Ky0wLjI0NjEgICAgICAgCiAgIHJlZ2V4cCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOTkuNjYyNistMC4zNDU1ICAgICAgICAgOTkuMzY4OCstMC4yODY0
ICAgICAgIAogICByaWNoYXJkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQwLjcxNDEr
LTAuNDQ0MSAgICA/ICAgMTQxLjA2MzcrLTAuMzA4NiAgICAgICA/CiAgIHNwbGF5ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNzUuOTcwMSstMC42NDA4ICAgICAgICAgNzUuODIwOCst
MC4yMjc0ICAgICAgIAoKICAgPGFyaXRobWV0aWM+ICAgICAgICAgICAgICAgICAgICAgICAgIDEw
MS4zMzk3Ky0wLjI0MzEgICAgXiAgIDEwMC40NTM0Ky0wLjE1NzEgICAgICAgXiBkZWZpbml0ZWx5
IDEuMDA4OHggZmFzdGVyCiAgIDxnZW9tZXRyaWM+ICogICAgICAgICAgICAgICAgICAgICAgICAg
OTUuMTQ1OSstMC4yMzczICAgIF4gICAgOTQuMzcwMSstMC4xNDQzICAgICAgIF4gZGVmaW5pdGVs
eSAxLjAwODJ4IGZhc3RlcgogICA8aGFybW9uaWM+ICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDg5LjI5MTYrLTAuMjM3OSAgICBeICAgIDg4LjYyNTMrLTAuMTQ5NiAgICAgICBeIGRlZmluaXRl
bHkgMS4wMDc1eCBmYXN0ZXIKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVG9UICAgICAgICAgICAgICAgICAgU3BsaXRoZWFwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCktyYWtlbjoKICAgYWktYXN0YXIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDgzMS45OTQ1Ky0xLjAwOTEgICAgXiAgIDgyMC45MzQ2Ky00LjkzMDUgICAgICAg
XiBkZWZpbml0ZWx5IDEuMDEzNXggZmFzdGVyCiAgIGF1ZGlvLWJlYXQtZGV0ZWN0aW9uICAgICAg
ICAgICAgICAgICAxOTYuMjg0MCstMC41MDIwICAgICEgICAxOTguNzg1NistMC42ODU4ICAgICAg
ICEgZGVmaW5pdGVseSAxLjAxMjd4IHNsb3dlcgogICBhdWRpby1kZnQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMjkyLjQ5NzgrLTIuOTI2MiAgICA/ICAgMjk1LjcxNzMrLTQuMzQ3NCAgICAg
ICA/IG1pZ2h0IGJlIDEuMDExMHggc2xvd2VyCiAgIGF1ZGlvLWZmdCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxMjIuMTYzNSstMC4zNDUxICAgICEgICAxMjMuNTMwMSstMC41NzE5ICAgICAg
ICEgZGVmaW5pdGVseSAxLjAxMTJ4IHNsb3dlcgogICBhdWRpby1vc2NpbGxhdG9yICAgICAgICAg
ICAgICAgICAgICAgMzA2LjcxODIrLTEuODY5MSAgICAgICAgMzA0LjAyODArLTEuMTA0MiAgICAg
ICAKICAgaW1hZ2luZy1kYXJrcm9vbSAgICAgICAgICAgICAgICAgICAgIDI5My44Mjk2Ky0yLjE0
NzggICAgICAgIDI5My41NDU4Ky0yLjAyMzkgICAgICAgCiAgIGltYWdpbmctZGVzYXR1cmF0ZSAg
ICAgICAgICAgICAgICAgICAyMzkuMzA5MystMC40NjkzICAgICAgICAyMzguNTgxMSstMC40MTQ0
ICAgICAgIAogICBpbWFnaW5nLWdhdXNzaWFuLWJsdXIgICAgICAgICAgICAgICAgNTI2LjU5NjUr
LTEuMDAyMSAgICAhICAgNTI5LjAyMjUrLTEuMjg2OCAgICAgICAhIGRlZmluaXRlbHkgMS4wMDQ2
eCBzbG93ZXIKICAganNvbi1wYXJzZS1maW5hbmNpYWwgICAgICAgICAgICAgICAgICA2My43Njk3
Ky0wLjIzMTIgICAgXiAgICA2My4yMjY2Ky0wLjE4NDEgICAgICAgXiBkZWZpbml0ZWx5IDEuMDA4
NnggZmFzdGVyCiAgIGpzb24tc3RyaW5naWZ5LXRpbmRlcmJveCAgICAgICAgICAgICAgNzYuNTc3
MistMC4yMDI5ICAgID8gICAgNzYuODM0MCstMC4yMzk0ICAgICAgID8KICAgc3RhbmZvcmQtY3J5
cHRvLWFlcyAgICAgICAgICAgICAgICAgIDEwNy40MzIxKy0wLjM2NzggICAgICAgIDEwNy4wNDE3
Ky0wLjQ1ODAgICAgICAgCiAgIHN0YW5mb3JkLWNyeXB0by1jY20gICAgICAgICAgICAgICAgICAx
MDUuNzc3MCstMC41MTIwICAgICAgICAxMDQuOTYwNystMC41NTM3ICAgICAgIAogICBzdGFuZm9y
ZC1jcnlwdG8tcGJrZGYyICAgICAgICAgICAgICAgMjA1LjY1MDMrLTAuNDk5MCAgICAhICAgMjA3
LjQzOTArLTAuNzUzNSAgICAgICAhIGRlZmluaXRlbHkgMS4wMDg3eCBzbG93ZXIKICAgc3RhbmZv
cmQtY3J5cHRvLXNoYTI1Ni1pdGVyYXRpdmUgICAgICA5Mi45MjYxKy0wLjI0NTMgICAgPyAgICA5
My4wMzQzKy0wLjM1OTIgICAgICAgPwoKICAgPGFyaXRobWV0aWM+ICogICAgICAgICAgICAgICAg
ICAgICAgIDI0Ny4yNTE4Ky0wLjM0MzMgICAgICAgIDI0Ni45MDU4Ky0wLjUzNDUgICAgICAgICBt
aWdodCBiZSAxLjAwMTR4IGZhc3RlcgogICA8Z2VvbWV0cmljPiAgICAgICAgICAgICAgICAgICAg
ICAgICAgMTg4LjI0MDYrLTAuMjM2MyAgICA/ICAgMTg4LjMxMDkrLTAuMjkxOSAgICAgICA/IG1p
Z2h0IGJlIDEuMDAwNHggc2xvd2VyCiAgIDxoYXJtb25pYz4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAxNDkuMjcwMSstMC4xNjM5ICAgICAgICAxNDkuMjQ5NCstMC4yMDY4ICAgICAgICAgbWln
aHQgYmUgMS4wMDAxeCBmYXN0ZXIKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVG9UICAgICAgICAgICAgICAgICAgU3BsaXRoZWFwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCkFsbCBiZW5jaG1hcmtzOgogICA8YXJpdGhtZXRpYz4gICAg
ICAgICAgICAgICAgICAgICAgICAgIDkyLjQzNzIrLTAuMTIzNSAgICAgICAgIDkyLjIyMzkrLTAu
MTY5NyAgICAgICAgIG1pZ2h0IGJlIDEuMDAyM3ggZmFzdGVyCiAgIDxnZW9tZXRyaWM+ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMjMuOTQ4MistMC4wMzEzICAgID8gICAgMjMuOTY1OSstMC4w
MzI1ICAgICAgID8gbWlnaHQgYmUgMS4wMDA3eCBzbG93ZXIKICAgPGhhcm1vbmljPiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNy41OTk2Ky0wLjAxMzEgICAgPyAgICAgNy42MDk5Ky0wLjAx
MTEgICAgICAgPyBtaWdodCBiZSAxLjAwMTR4IHNsb3dlcgoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUb1QgICAgICAgICAgICAgICAgICBTcGxpdGhlYXAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKR2VvbWVhbiBvZiBwcmVmZXJyZWQg
bWVhbnM6CiAgIDxzY2FsZWQtcmVzdWx0PiAgICAgICAgICAgICAgICAgICAgICAgNTMuOTU5NCst
MC4wNzM0ICAgICAgICAgNTMuODkyNystMC4wODA1ICAgICAgICAgbWlnaHQgYmUgMS4wMDEyeCBm
YXN0ZXIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125389</attachid>
            <date>2012-02-03 13:01:33 -0800</date>
            <delta_ts>2012-02-05 21:56:18 -0800</delta_ts>
            <desc>Trying to fix builds</desc>
            <filename>bug-77761-20120203130132.patch</filename>
            <type>text/plain</type>
            <size>35297</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NjgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
NmExMWZkNzZmMzI4YjM3NmQwNTM1ZWRiYWQyNDJiNWI4NWIzMzliLi4zMTEzNjA4YTQyZWZlMzI5
MzEzMWMyNDA0YjhiZWZjMDdkMDUxN2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw4OSBAQAogMjAxMi0wMi0wMyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgogCisgICAgICAgIFNwbGl0IE1hcmtlZFNwYWNlIGludG8gZGVzdHJ1Y3RvciBhbmQg
ZGVzdHJ1Y3Rvci1mcmVlIHN1YnNwYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Nzc3NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KTogQ2hhbmdl
ZCB0byB1c2UgdGhlIGRlc3RydWN0b3ItZnJlZSBhbGxvY2F0b3IuCisgICAgICAgICogaGVhcC9I
ZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0
cnVjdG9yKTogQWRkZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBkZXN0cnVjdG9yL2Rlc3RydWN0
b3ItZnJlZSBhbGxvY2F0b3JzIGZvcgorICAgICAgICBwYXJ0aWN1bGFyIHNpemVzLgorICAgICAg
ICAoSlNDOjpIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3Rvcik6CisgICAgICAg
IChIZWFwKToKKyAgICAgICAgKERlc3RydWN0b3JGcmVlQWxsb2NhdG9yKTogVGhpcyBjbGFzcyBp
cyB1c2VkIGFzIHRoZSBvcHQtaW4gbWVjaGFuaXNtIGZvciB1c2luZyB0aGUgZGVzdHJ1Y3Rvci1m
cmVlIAorICAgICAgICBzdWJzcGFjZSBvZiB0aGUgSGVhcC4gQWxsIGNsYXNzZXMgdGhhdCB1c2Ug
dGhlIGRlc3RydWN0b3ItZnJlZSBzdWJzcGFjZSBtdXN0IGJlIGRlY2xhcmVkIGZyaWVuZHMgb2Yg
CisgICAgICAgIHRoaXMgY2xhc3MgaW4gb3JkZXIgdG8gYWNjZXNzIGl0cyBhbGxvY2F0ZSBtZW1i
ZXIgZnVuY3Rpb24uIFRoZXkgY2FuIHRoZW4gc3BlY2lhbGl6ZSB0aGUgYWxsb2NhdGVDZWxsIAor
ICAgICAgICB0ZW1wbGF0ZSBmb3IgdGhlbXNlbHZlcyB0byB1c2UgdGhpcyBmdW5jdGlvbiByYXRo
ZXIgdGhhbiB0aGUgZGVmYXVsdCBwdWJsaWMgYWxsb2NhdGUoKSBmdW5jdGlvbiAKKyAgICAgICAg
cHJvdmlkZWQgYnkgSGVhcC4KKyAgICAgICAgKEpTQzo6SGVhcDo6RGVzdHJ1Y3RvckZyZWVBbGxv
Y2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdGUpOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZUJsb2NrKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5oOgor
ICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmNlbGxzTmVlZERlc3RydWN0aW9uKTogQWRk
ZWQgYSBuZXcgZmllbGQgdG8gYm90aCBNYXJrZWRBbGxvY2F0b3IgYW5kIE1hcmtlZEJsb2NrIAor
ICAgICAgICB0aGF0IHNwZWNpZnkgd2hldGhlciBvciBub3QgdGhhdCBwYXJ0aWN1bGFyIGFsbG9j
YXRvci9ibG9jayBjb250YWlucyBvYmplY3RzIHRoYXQgcmVxdWlyZSBkZXN0cnVjdGlvbi4KKyAg
ICAgICAgVGhpcyBmbGFnIGNhbiB0aGVuIGJlIGNoZWNrZWQgYXQgcnVudGltZSB3aGVuZXZlciBh
IGRlY2lzaW9uIG5lZWRzIHRvIGJlIG1hZGUgb24gd2hpY2ggdmVyc2lvbiBvZiB0aGUgCisgICAg
ICAgIHN3ZWVwKCkgZnVuY3Rpb24gdG8gcnVuLgorICAgICAgICAoTWFya2VkQWxsb2NhdG9yKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IpOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjppbml0KTogQWRkZWQgdGhp
cyBnZW5lcmljIGluaXQgZnVuY3Rpb24gdG8gcmVwbGFjZSBhbGwgb2YgdGhlIGN1c3RvbSBzZXR0
ZXJzIHRoYXQgCisgICAgICAgIGFyZSBvbmx5IHVzZWQgd2hlbiBpbml0aWFsaXppbmcgYWxsIG9m
IHRoZSB2YXJpb3VzIE1hcmtlZEFsbG9jYXRvcnMgd2l0aGluIHRoZSBNYXJrZWRTcGFjZSBjb25z
dHJ1Y3Rvci4KKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpyZWN5Y2xl
KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6OmNhbGxEZXN0cnVjdG9yKTogCisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6c3BlY2lhbGl6ZWRTd2VlcCk6IFRlbXBsYXRpemVkIHRvIG1h
a2UgY2hlY2tpbmcgd2hldGhlciB0aGUgZGVzdHJ1Y3RvciBuZWVkcyB0byBiZSAKKyAgICAgICAg
Y2FsbGVkIGEgY29tcGlsZS10aW1lIGNvbnN0YW50LiAKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OnN3ZWVwU2xvd0Nhc2UpOiBEaXR0by4KKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6
CisgICAgICAgIChNYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpzd2Vl
cCk6IE1hZGUgYW4gaW5saW5lIHZlcnNpb24gZm9yIHRoZSBmYXN0IHBhdGggd2hlbiBkb2luZyBT
d2VlcE9ubHkgd2l0aCBubyAKKyAgICAgICAgZGVzdHJ1Y3RvcnMsIG9yIHN1YnNlcXVlbnRseSBk
ZWNpZGluZyB3aGV0aGVyIHRvIGNhbGwgdGhlIGRlc3RydWN0b3IvZGVzdHJ1Y3Rvci1mcmVlIHZl
cnNpb25zIG9mIAorICAgICAgICBzd2VlcFNsb3dDYXNlLgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKEpTQzo6TWFya2VkQmxvY2s6OmNlbGxzTmVlZERlc3RydWN0aW9uKToKKyAgICAgICAgKiBo
ZWFwL01hcmtlZFNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6Ok1hcmtlZFNw
YWNlKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnJlc2V0QWxsb2NhdG9ycyk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKToKKyAg
ICAgICAgKEpTQzo6VGFrZUlmVW5tYXJrZWQ6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAv
TWFya2VkU3BhY2UuaDoKKyAgICAgICAgKE1hcmtlZFNwYWNlKToKKyAgICAgICAgKFN1YnNwYWNl
KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFsbG9jYXRvckZvcik6CisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6ZGVzdHJ1Y3RvckFsbG9jYXRvckZvcik6
CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjphbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayk6CisgICAgICAgICogaml0L0pJ
VC5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdCk6IEFkZGVkIHRlbXBsYXRlIHBhcmFtZXRlciB0
byBkZWNpZGUgd2hldGhlciBvYmplY3RzIG5lZWQgdG8gYmUgCisgICAgICAgIGFsbG9jYXRlZCBp
biBhIGRlc3RydWN0b3IvZGVzdHJ1Y3Rvci1mcmVlIGFsbG9jYXRvci4KKyAgICAgICAgKEpTQzo6
SklUOjplbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
QWxsb2NhdGVKU0Z1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6YWxsb2NhdGVXaXRo
b3V0RGVzdHJ1Y3Rvcik6IEhlbHBlciBmdW5jdGlvbiB0aGF0IHV0aWxpemVzIHRoZSBmYWN0IHRo
YXQgSlNBcnJheSBpcyBhIAorICAgICAgICBmcmllbmQgY2xhc3Mgb2YgRGVzdHJ1Y3RvckZyZWVB
bGxvY2F0b3IuCisgICAgICAgIChKU0M6OkpTQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNP
YmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNGaW5hbE9iamVjdCk6CisgICAgICAgIChKU0M6
OkpTRmluYWxPYmplY3Q6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IpOiBEaXR0by4KKyAgICAg
ICAgKEpTQzo6SlNGaW5hbE9iamVjdCk6CisKKzIwMTItMDItMDMgIE1hcmsgSGFobmVuYmVyZyAg
PG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKwogICAgICAgICBCdWlsZCBmaXgKIAogICAgICAgICBV
bnJldmlld2VkIGJ1aWxkIGZpeApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCmluZGV4IDQ4YmJkYzdmMDY4ZmJkOGE3MjJmOThjMTUzNWMyNDllODQzNDQ1
ZGEuLjVkMWVkYzA0ZDNjMWYzYjE4NGI4YjgwMjI1OWEyNDNhZDRkYzg2NzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTE1NTMsNyArMTU1
Myw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2b2lkIGVtaXRB
bGxvY2F0ZUpTRmluYWxPYmplY3QoVCBzdHJ1Y3R1cmUsIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJl
ZyBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsK
LSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmbV9qaXQuZ2xvYmFsRGF0YSgp
LT5oZWFwLmFsbG9jYXRvckZvck9iamVjdChzaXplb2YoSlNGaW5hbE9iamVjdCkpOworICAgICAg
ICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZtX2ppdC5nbG9iYWxEYXRhKCktPmhlYXAu
YWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3Ioc2l6ZW9mKEpTRmluYWxPYmplY3Qp
KTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoJmFsbG9jYXRvci0+bV9maXJzdEZy
ZWVDZWxsLCByZXN1bHRHUFIpOwogICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmgKaW5kZXggMWQwYWM1NDA3NjZmMmU4ODJlYWJmNjFlNzI3MDdkN2RlNmZlOTBl
NS4uMGIzYjUxODQyYTU3ZTM4Yjk0Njc3M2VkNWE2YTg1ZWZkYmM4NWMxNSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaApAQCAtOTUsNyArOTUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgLy8gdHJ1ZSBpZiBhbiBhbGxvY2F0aW9uIG9yIGNvbGxlY3Rpb24gaXMgaW4gcHJvZ3Jlc3MK
ICAgICAgICAgaW5saW5lIGJvb2wgaXNCdXN5KCk7CiAgICAgICAgIAotICAgICAgICBNYXJrZWRB
bGxvY2F0b3ImIGFsbG9jYXRvckZvck9iamVjdChzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2Jq
ZWN0U3BhY2UuYWxsb2NhdG9yRm9yKGJ5dGVzKTsgfQorICAgICAgICBNYXJrZWRBbGxvY2F0b3Im
IGFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCBieXRlcykgeyByZXR1
cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CisgICAgICAgIE1hcmtlZEFs
bG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0V2l0aERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7
IHJldHVybiBtX29iamVjdFNwYWNlLmRlc3RydWN0b3JBbGxvY2F0b3JGb3IoYnl0ZXMpOyB9CiAg
ICAgICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CiAgICAgICAgIENoZWNrZWRCb29sZWFuIHRy
eUFsbG9jYXRlU3RvcmFnZShzaXplX3QsIHZvaWQqKik7CiAgICAgICAgIENoZWNrZWRCb29sZWFu
IHRyeVJlYWxsb2NhdGVTdG9yYWdlKHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOwpAQCAtMTM1LDYg
KzEzNiwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGdldENvbnNlcnZhdGl2
ZVJlZ2lzdGVyUm9vdHMoSGFzaFNldDxKU0NlbGwqPiYgcm9vdHMpOwogCisgICAgICAgIC8vIEFu
eSBjbGFzcyB3aXNoaW5nIHRvIGJlIGFsbG9jYXRlZCBpbiB0aGUgZGVzdHJ1Y3Rvci1mcmVlIHBh
cnQgb2YgdGhlIGhlYXAKKyAgICAgICAgLy8gbmVlZHMgdG8gYmUgYSBmcmllbmQgb2YgdGhpcyBj
bGFzcy4KKyAgICAgICAgY2xhc3MgRGVzdHJ1Y3RvckZyZWVBbGxvY2F0b3IgeworICAgICAgICAg
ICAgZnJpZW5kIGNsYXNzIEpTQXJyYXk7CisgICAgICAgICAgICBmcmllbmQgY2xhc3MgSlNGaW5h
bE9iamVjdDsKKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgc3RhdGljIHZvaWQqIGFs
bG9jYXRlKEhlYXAmIGhlYXAsIHNpemVfdCBieXRlcykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaGVhcC5tX29iamVjdFNwYWNlLmFsbG9jYXRlKGJ5dGVzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBNYXJrZWRTcGFjZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEFsbG9jYXRvcjsKQEAg
LTE0Miw2ICsxNTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEJ1
bXBTcGFjZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIFNsb3RWaXNpdG9yOwogICAgICAgICBmcmll
bmQgY2xhc3MgQ29kZUJsb2NrOworICAgICAgICBmcmllbmQgY2xhc3MgRGVzdHJ1Y3RvckZyZWVB
bGxvY2F0b3I7CiAKICAgICAgICAgc2l6ZV90IHdhdGVyTWFyaygpOwogICAgICAgICBzaXplX3Qg
aGlnaFdhdGVyTWFyaygpOwpAQCAtMzM3LDcgKzM1Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZShzaXplX3QgYnl0ZXMpCiAgICAgewogICAgICAg
ICBBU1NFUlQoaXNWYWxpZEFsbG9jYXRpb24oYnl0ZXMpKTsKLSAgICAgICAgcmV0dXJuIG1fb2Jq
ZWN0U3BhY2UuYWxsb2NhdGUoYnl0ZXMpOworICAgICAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5h
bGxvY2F0ZVdpdGhEZXN0cnVjdG9yKGJ5dGVzKTsKICAgICB9CiAgICAgCiAgICAgaW5saW5lIENo
ZWNrZWRCb29sZWFuIEhlYXA6OnRyeUFsbG9jYXRlU3RvcmFnZShzaXplX3QgYnl0ZXMsIHZvaWQq
KiBvdXRQdHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcAppbmRleCA4MjM5ZmJhZWRmYzBjOTgxODI4MTJhMTEyYzllMWNhNDllNzBiNTFjLi5lYjZk
MmM2OTE1NWNjZWViYjkxMDkyNGE4ZDlhMjE5ODlkNzA2ZTM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKQEAgLTk3LDExICs5NywxMSBAQCBN
YXJrZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKEFsbG9jYXRpb25FZmZv
cnQgYWxsb2NhdGlvbkVmZm9ydCkKICAgICAgICAgICAgIGJsb2NrID0gMDsKICAgICB9CiAgICAg
aWYgKGJsb2NrKQotICAgICAgICBibG9jayA9IE1hcmtlZEJsb2NrOjpyZWN5Y2xlKGJsb2NrLCBt
X2hlYXAsIG1fY2VsbFNpemUpOworICAgICAgICBibG9jayA9IE1hcmtlZEJsb2NrOjpyZWN5Y2xl
KGJsb2NrLCBtX2hlYXAsIG1fY2VsbFNpemUsIG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb24pOwogICAg
IGVsc2UgaWYgKGFsbG9jYXRpb25FZmZvcnQgPT0gQWxsb2NhdGlvbkNhbkZhaWwpCiAgICAgICAg
IHJldHVybiAwOwogICAgIGVsc2UKLSAgICAgICAgYmxvY2sgPSBNYXJrZWRCbG9jazo6Y3JlYXRl
KG1faGVhcCwgbV9jZWxsU2l6ZSk7CisgICAgICAgIGJsb2NrID0gTWFya2VkQmxvY2s6OmNyZWF0
ZShtX2hlYXAsIG1fY2VsbFNpemUsIG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb24pOwogICAgIAogICAg
IG1fbWFya2VkU3BhY2UtPmRpZEFkZEJsb2NrKGJsb2NrKTsKICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgKaW5kZXggNTY0NGM2OTFiODdjZjdmMjNi
MDJiNTY1ZDNjZGFmNjVmZDJhZWJlYy4uMTYyMDdmNmE1ZjQzZDI1YjEyYzA5Y2ExYTJhN2ViNDJk
MjMyNWM3NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmgKQEAgLTIyLDYgKzIyLDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2b2lk
IHphcEZyZWVMaXN0KCk7CiAgICAgc2l6ZV90IGNlbGxTaXplKCkgeyByZXR1cm4gbV9jZWxsU2l6
ZTsgfQorICAgIGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24oKSB7IHJldHVybiBtX2NlbGxzTmVl
ZERlc3RydWN0aW9uOyB9CiAgICAgdm9pZCogYWxsb2NhdGUoKTsKICAgICBIZWFwKiBoZWFwKCkg
eyByZXR1cm4gbV9oZWFwOyB9CiAgICAgCkBAIC0yOSw5ICszMCw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIGFkZEJsb2NrKE1hcmtlZEJsb2NrKik7CiAgICAgdm9pZCByZW1vdmVCbG9jayhN
YXJrZWRCbG9jayopOwotICAgIHZvaWQgc2V0SGVhcChIZWFwKiBoZWFwKSB7IG1faGVhcCA9IGhl
YXA7IH0KLSAgICB2b2lkIHNldENlbGxTaXplKHNpemVfdCBjZWxsU2l6ZSkgeyBtX2NlbGxTaXpl
ID0gY2VsbFNpemU7IH0KLSAgICB2b2lkIHNldE1hcmtlZFNwYWNlKE1hcmtlZFNwYWNlKiBzcGFj
ZSkgeyBtX21hcmtlZFNwYWNlID0gc3BhY2U7IH0KKyAgICB2b2lkIGluaXQoSGVhcCosIE1hcmtl
ZFNwYWNlKiwgc2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uKTsKICAg
ICAKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2Fz
ZSgpOwpAQCAtNDMsNiArNDIsNyBAQCBwcml2YXRlOgogICAgIE1hcmtlZEJsb2NrKiBtX2N1cnJl
bnRCbG9jazsKICAgICBEb3VibHlMaW5rZWRMaXN0PEhlYXBCbG9jaz4gbV9ibG9ja0xpc3Q7CiAg
ICAgc2l6ZV90IG1fY2VsbFNpemU7CisgICAgYm9vbCBtX2NlbGxzTmVlZERlc3RydWN0aW9uOwog
ICAgIEhlYXAqIG1faGVhcDsKICAgICBNYXJrZWRTcGFjZSogbV9tYXJrZWRTcGFjZTsKIH07CkBA
IC01MSwxMSArNTEsMjAgQEAgaW5saW5lIE1hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9y
KCkKICAgICA6IG1fZmlyc3RGcmVlQ2VsbCgwKQogICAgICwgbV9jdXJyZW50QmxvY2soMCkKICAg
ICAsIG1fY2VsbFNpemUoMCkKKyAgICAsIG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb24odHJ1ZSkKICAg
ICAsIG1faGVhcCgwKQogICAgICwgbV9tYXJrZWRTcGFjZSgwKQogewogfQotICAgIAorCitpbmxp
bmUgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVhcCogaGVhcCwgTWFya2VkU3BhY2UqIG1h
cmtlZFNwYWNlLCBzaXplX3QgY2VsbFNpemUsIGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24pCit7
CisgICAgbV9oZWFwID0gaGVhcDsKKyAgICBtX21hcmtlZFNwYWNlID0gbWFya2VkU3BhY2U7Cisg
ICAgbV9jZWxsU2l6ZSA9IGNlbGxTaXplOworICAgIG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb24gPSBj
ZWxsc05lZWREZXN0cnVjdGlvbjsKK30KKwogaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
YWxsb2NhdGUoKQogewogICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogZmlyc3RGcmVlQ2VsbCA9
IG1fZmlyc3RGcmVlQ2VsbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmNwcAppbmRleCA3MTVmMjVkOTI3N2E1MzBkYzc5NGU3ZTAxYjk0MjFmMTFkMjU4Zjg2Li4wNWRm
Y2YwMjFkYzU3YzE4MDBiNDAwZDdiMzIzODUzNjk5NWI1MzNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCkBAIC0zMiwxNyArMzIsMTcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLU1hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6Y3JlYXRlKEhlYXAqIGhlYXAs
IHNpemVfdCBjZWxsU2l6ZSkKK01hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6Y3JlYXRlKEhlYXAq
IGhlYXAsIHNpemVfdCBjZWxsU2l6ZSwgYm9vbCBjZWxsc05lZWREZXN0cnVjdGlvbikKIHsKICAg
ICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25l
ZDo6YWxsb2NhdGUoYmxvY2tTaXplLCBibG9ja1NpemUsIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBh
Z2VzKTsKICAgICBpZiAoIXN0YXRpY19jYXN0PGJvb2w+KGFsbG9jYXRpb24pKQogICAgICAgICBD
UkFTSCgpOwotICAgIHJldHVybiBuZXcgKE5vdE51bGwsIGFsbG9jYXRpb24uYmFzZSgpKSBNYXJr
ZWRCbG9jayhhbGxvY2F0aW9uLCBoZWFwLCBjZWxsU2l6ZSk7CisgICAgcmV0dXJuIG5ldyAoTm90
TnVsbCwgYWxsb2NhdGlvbi5iYXNlKCkpIE1hcmtlZEJsb2NrKGFsbG9jYXRpb24sIGhlYXAsIGNl
bGxTaXplLCBjZWxsc05lZWREZXN0cnVjdGlvbik7CiB9CiAKLU1hcmtlZEJsb2NrKiBNYXJrZWRC
bG9jazo6cmVjeWNsZShNYXJrZWRCbG9jayogYmxvY2ssIEhlYXAqIGhlYXAsIHNpemVfdCBjZWxs
U2l6ZSkKK01hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6cmVjeWNsZShNYXJrZWRCbG9jayogYmxv
Y2ssIEhlYXAqIGhlYXAsIHNpemVfdCBjZWxsU2l6ZSwgYm9vbCBjZWxsc05lZWREZXN0cnVjdGlv
bikKIHsKLSAgICByZXR1cm4gbmV3IChOb3ROdWxsLCBibG9jaykgTWFya2VkQmxvY2soYmxvY2st
Pm1fYWxsb2NhdGlvbiwgaGVhcCwgY2VsbFNpemUpOworICAgIHJldHVybiBuZXcgKE5vdE51bGws
IGJsb2NrKSBNYXJrZWRCbG9jayhibG9jay0+bV9hbGxvY2F0aW9uLCBoZWFwLCBjZWxsU2l6ZSwg
Y2VsbHNOZWVkRGVzdHJ1Y3Rpb24pOwogfQogCiB2b2lkIE1hcmtlZEJsb2NrOjpkZXN0cm95KE1h
cmtlZEJsb2NrKiBibG9jaykKQEAgLTUwLDEwICs1MCwxMSBAQCB2b2lkIE1hcmtlZEJsb2NrOjpk
ZXN0cm95KE1hcmtlZEJsb2NrKiBibG9jaykKICAgICBibG9jay0+bV9hbGxvY2F0aW9uLmRlYWxs
b2NhdGUoKTsKIH0KIAotTWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKFBhZ2VBbGxvY2F0aW9uQWxp
Z25lZCYgYWxsb2NhdGlvbiwgSGVhcCogaGVhcCwgc2l6ZV90IGNlbGxTaXplKQorTWFya2VkQmxv
Y2s6Ok1hcmtlZEJsb2NrKFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYgYWxsb2NhdGlvbiwgSGVhcCog
aGVhcCwgc2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uKQogICAgIDog
SGVhcEJsb2NrKGFsbG9jYXRpb24pCiAgICAgLCBtX2F0b21zUGVyQ2VsbCgoY2VsbFNpemUgKyBh
dG9tU2l6ZSAtIDEpIC8gYXRvbVNpemUpCiAgICAgLCBtX2VuZEF0b20oYXRvbXNQZXJCbG9jayAt
IG1fYXRvbXNQZXJDZWxsICsgMSkKKyAgICAsIG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb24oY2VsbHNO
ZWVkRGVzdHJ1Y3Rpb24pCiAgICAgLCBtX3N0YXRlKE5ldykgLy8gQWxsIGNlbGxzIHN0YXJ0IG91
dCB1bm1hcmtlZC4KICAgICAsIG1faGVhcChoZWFwKQogewpAQCAtNzAsMTYgKzcxLDE3IEBAIGlu
bGluZSB2b2lkIE1hcmtlZEJsb2NrOjpjYWxsRGVzdHJ1Y3RvcihKU0NlbGwqIGNlbGwpCiAjaWYg
RU5BQkxFKFNJTVBMRV9IRUFQX1BST0ZJTElORykKICAgICBtX2hlYXAtPm1fZGVzdHJveWVkVHlw
ZUNvdW50cy5jb3VudFZQdHIodnB0cik7CiAjZW5kaWYKLSAgICBpZiAoY2VsbC0+Y2xhc3NJbmZv
KCkgIT0gJkpTRmluYWxPYmplY3Q6OnNfaW5mbykKLSAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUo
KS0+ZGVzdHJveShjZWxsKTsKKyAgICBBU1NFUlQoY2VsbC0+Y2xhc3NJbmZvKCkgIT0gJkpTRmlu
YWxPYmplY3Q6OnNfaW5mbyk7CisgICAgY2VsbC0+bWV0aG9kVGFibGUoKS0+ZGVzdHJveShjZWxs
KTsKIAogICAgIGNlbGwtPnphcCgpOwogfQogCi10ZW1wbGF0ZTxNYXJrZWRCbG9jazo6QmxvY2tT
dGF0ZSBibG9ja1N0YXRlLCBNYXJrZWRCbG9jazo6U3dlZXBNb2RlIHN3ZWVwTW9kZT4KK3RlbXBs
YXRlPE1hcmtlZEJsb2NrOjpCbG9ja1N0YXRlIGJsb2NrU3RhdGUsIE1hcmtlZEJsb2NrOjpTd2Vl
cE1vZGUgc3dlZXBNb2RlLCBib29sIGRlc3RydWN0b3JDYWxsTmVlZGVkPgogTWFya2VkQmxvY2s6
OkZyZWVDZWxsKiBNYXJrZWRCbG9jazo6c3BlY2lhbGl6ZWRTd2VlcCgpCiB7CiAgICAgQVNTRVJU
KGJsb2NrU3RhdGUgIT0gQWxsb2NhdGVkICYmIGJsb2NrU3RhdGUgIT0gRnJlZUxpc3RlZCk7Cisg
ICAgQVNTRVJUKGRlc3RydWN0b3JDYWxsTmVlZGVkIHx8IHN3ZWVwTW9kZSAhPSBTd2VlcE9ubHkp
OwogCiAgICAgLy8gVGhpcyBwcm9kdWNlcyBhIGZyZWUgbGlzdCB0aGF0IGlzIG9yZGVyZWQgaW4g
cmV2ZXJzZSB0aHJvdWdoIHRoZSBibG9jay4KICAgICAvLyBUaGlzIGlzIGZpbmUsIHNpbmNlIHRo
ZSBhbGxvY2F0aW9uIGNvZGUgbWFrZXMgbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlCkBAIC05Myw3
ICs5NSw3IEBAIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OnNwZWNpYWxpemVk
U3dlZXAoKQogICAgICAgICBpZiAoYmxvY2tTdGF0ZSA9PSBaYXBwZWQgJiYgIWNlbGwtPmlzWmFw
cGVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoYmxvY2tTdGF0ZSAh
PSBOZXcpCisgICAgICAgIGlmIChkZXN0cnVjdG9yQ2FsbE5lZWRlZCAmJiBibG9ja1N0YXRlICE9
IE5ldykKICAgICAgICAgICAgIGNhbGxEZXN0cnVjdG9yKGNlbGwpOwogCiAgICAgICAgIGlmIChz
d2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KSB7CkBAIC0xMDcsMTQgKzEwOSwxMyBAQCBNYXJr
ZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpzcGVjaWFsaXplZFN3ZWVwKCkKICAgICBy
ZXR1cm4gaGVhZDsKIH0KIAotTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBNYXJrZWRCbG9jazo6c3dl
ZXAoU3dlZXBNb2RlIHN3ZWVwTW9kZSkKK3RlbXBsYXRlPGJvb2wgZGVzdHJ1Y3RvckNhbGxOZWVk
ZWQ+CitNYXJrZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpzd2VlcFNsb3dDYXNlKFN3
ZWVwTW9kZSBzd2VlcE1vZGUpCiB7Ci0gICAgSEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElP
Tih0aGlzKTsKLQogICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgIGNhc2UgTmV3OgogICAgICAg
ICBBU1NFUlQoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCk7Ci0gICAgICAgIHJldHVybiBz
cGVjaWFsaXplZFN3ZWVwPE5ldywgU3dlZXBUb0ZyZWVMaXN0PigpOworICAgICAgICByZXR1cm4g
c3BlY2lhbGl6ZWRTd2VlcDxOZXcsIFN3ZWVwVG9GcmVlTGlzdCwgZGVzdHJ1Y3RvckNhbGxOZWVk
ZWQ+KCk7CiAgICAgY2FzZSBGcmVlTGlzdGVkOgogICAgICAgICAvLyBIYXBwZW5zIHdoZW4gYSBi
bG9jayB0cmFuc2l0aW9ucyB0byBmdWxseSBhbGxvY2F0ZWQuCiAgICAgICAgIEFTU0VSVChzd2Vl
cE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KTsKQEAgLTEyNCwxOCArMTI1LDIxIEBAIE1hcmtlZEJs
b2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OnN3ZWVwKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgTWFya2VkOgogICAgICAgICByZXR1cm4gc3dlZXBN
b2RlID09IFN3ZWVwVG9GcmVlTGlzdAotICAgICAgICAgICAgPyBzcGVjaWFsaXplZFN3ZWVwPE1h
cmtlZCwgU3dlZXBUb0ZyZWVMaXN0PigpCi0gICAgICAgICAgICA6IHNwZWNpYWxpemVkU3dlZXA8
TWFya2VkLCBTd2VlcE9ubHk+KCk7CisgICAgICAgICAgICA/IHNwZWNpYWxpemVkU3dlZXA8TWFy
a2VkLCBTd2VlcFRvRnJlZUxpc3QsIGRlc3RydWN0b3JDYWxsTmVlZGVkPigpCisgICAgICAgICAg
ICA6IHNwZWNpYWxpemVkU3dlZXA8TWFya2VkLCBTd2VlcE9ubHksIGRlc3RydWN0b3JDYWxsTmVl
ZGVkPigpOwogICAgIGNhc2UgWmFwcGVkOgogICAgICAgICByZXR1cm4gc3dlZXBNb2RlID09IFN3
ZWVwVG9GcmVlTGlzdAotICAgICAgICAgICAgPyBzcGVjaWFsaXplZFN3ZWVwPFphcHBlZCwgU3dl
ZXBUb0ZyZWVMaXN0PigpCi0gICAgICAgICAgICA6IHNwZWNpYWxpemVkU3dlZXA8WmFwcGVkLCBT
d2VlcE9ubHk+KCk7CisgICAgICAgICAgICA/IHNwZWNpYWxpemVkU3dlZXA8WmFwcGVkLCBTd2Vl
cFRvRnJlZUxpc3QsIGRlc3RydWN0b3JDYWxsTmVlZGVkPigpCisgICAgICAgICAgICA6IHNwZWNp
YWxpemVkU3dlZXA8WmFwcGVkLCBTd2VlcE9ubHksIGRlc3RydWN0b3JDYWxsTmVlZGVkPigpOwog
ICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwogfQogCit0
ZW1wbGF0ZSBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpzd2VlcFNsb3dDYXNl
PHRydWU+KFN3ZWVwTW9kZSk7Cit0ZW1wbGF0ZSBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtl
ZEJsb2NrOjpzd2VlcFNsb3dDYXNlPGZhbHNlPihTd2VlcE1vZGUpOworCiB2b2lkIE1hcmtlZEJs
b2NrOjp6YXBGcmVlTGlzdChGcmVlQ2VsbCogZmlyc3RGcmVlQ2VsbCkKIHsKICAgICBIRUFQX0xP
R19CTE9DS19TVEFURV9UUkFOU0lUSU9OKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrLmgKaW5kZXggMDBlYjU0YjFmZjk2MzBhY2JjMjcwNDVjNzhkOGUxZjVhYzQ4
ZDI5OS4uNzViYjExY2JmMmY0MDA1M2Q0YTJhMGUwNjZmMDc1NjljYjJhMGQ2NCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCkBAIC04OSw4ICs4OSw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgdm9pZCByZXR1cm5WYWx1ZSgpIHsgfQogICAgICAgICB9
OwogCi0gICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogY3JlYXRlKEhlYXAqLCBzaXplX3QgY2Vs
bFNpemUpOwotICAgICAgICBzdGF0aWMgTWFya2VkQmxvY2sqIHJlY3ljbGUoTWFya2VkQmxvY2sq
LCBIZWFwKiwgc2l6ZV90IGNlbGxTaXplKTsKKyAgICAgICAgc3RhdGljIE1hcmtlZEJsb2NrKiBj
cmVhdGUoSGVhcCosIHNpemVfdCBjZWxsU2l6ZSwgYm9vbCBjZWxsc05lZWREZXN0cnVjdGlvbik7
CisgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogcmVjeWNsZShNYXJrZWRCbG9jayosIEhlYXAq
LCBzaXplX3QgY2VsbFNpemUsIGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24pOwogICAgICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KE1hcmtlZEJsb2NrKik7CiAKICAgICAgICAgc3RhdGljIGJvb2wg
aXNBdG9tQWxpZ25lZChjb25zdCB2b2lkKik7CkBAIC0xMTUsNiArMTE1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGJvb2wgbWFya0NvdW50SXNaZXJvKCk7IC8vIEZhc3RlciB0aGFuIG1h
cmtDb3VudCgpLgogCiAgICAgICAgIHNpemVfdCBjZWxsU2l6ZSgpOworICAgICAgICBib29sIGNl
bGxzTmVlZERlc3RydWN0aW9uKCk7CiAKICAgICAgICAgc2l6ZV90IHNpemUoKTsKICAgICAgICAg
c2l6ZV90IGNhcGFjaXR5KCk7CkBAIC0xNTksMTQgKzE2MCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9tQWxpZ25tZW50TWFzayA9IGF0b21TaXpl
IC0gMTsgLy8gYXRvbVNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KIAogICAgICAgICBlbnVt
IEJsb2NrU3RhdGUgeyBOZXcsIEZyZWVMaXN0ZWQsIEFsbG9jYXRlZCwgTWFya2VkLCBaYXBwZWQg
fTsKKyAgICAgICAgdGVtcGxhdGU8Ym9vbCBkZXN0cnVjdG9yQ2FsbE5lZWRlZD4gRnJlZUNlbGwq
IHN3ZWVwU2xvd0Nhc2UoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKIAogICAgICAgICB0eXBlZGVm
IGNoYXIgQXRvbVthdG9tU2l6ZV07CiAKLSAgICAgICAgTWFya2VkQmxvY2soUGFnZUFsbG9jYXRp
b25BbGlnbmVkJiwgSGVhcCosIHNpemVfdCBjZWxsU2l6ZSk7CisgICAgICAgIE1hcmtlZEJsb2Nr
KFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYsIEhlYXAqLCBzaXplX3QgY2VsbFNpemUsIGJvb2wgY2Vs
bHNOZWVkRGVzdHJ1Y3Rpb24pOwogICAgICAgICBBdG9tKiBhdG9tcygpOwogICAgICAgICBzaXpl
X3QgYXRvbU51bWJlcihjb25zdCB2b2lkKik7CiAgICAgICAgIHZvaWQgY2FsbERlc3RydWN0b3Io
SlNDZWxsKik7Ci0gICAgICAgIHRlbXBsYXRlPEJsb2NrU3RhdGUsIFN3ZWVwTW9kZT4gRnJlZUNl
bGwqIHNwZWNpYWxpemVkU3dlZXAoKTsKKyAgICAgICAgdGVtcGxhdGU8QmxvY2tTdGF0ZSwgU3dl
ZXBNb2RlLCBib29sIGRlc3RydWN0b3JDYWxsTmVlZGVkPiBGcmVlQ2VsbCogc3BlY2lhbGl6ZWRT
d2VlcCgpOwogICAgICAgICAKICNpZiBFTkFCTEUoR0dDKQogICAgICAgICBDYXJkU2V0PGJ5dGVz
UGVyQ2FyZCwgYmxvY2tTaXplPiBtX2NhcmRzOwpAQCAtMTc5LDYgKzE4MSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogI2Vsc2UKICAgICAgICAgV1RGOjpCaXRtYXA8YXRvbXNQZXJCbG9jaywgV1RGOjpC
aXRtYXBOb3RBdG9taWM+IG1fbWFya3M7CiAjZW5kaWYKKyAgICAgICAgYm9vbCBtX2NlbGxzTmVl
ZERlc3RydWN0aW9uOwogICAgICAgICBCbG9ja1N0YXRlIG1fc3RhdGU7CiAgICAgICAgIEhlYXAq
IG1faGVhcDsKICAgICB9OwpAQCAtMjA4LDYgKzIxMSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgcmV0dXJuIG1faGVhcDsKICAgICB9CiAKKyAgICBpbmxpbmUgTWFya2VkQmxvY2s6OkZy
ZWVDZWxsKiBNYXJrZWRCbG9jazo6c3dlZXAoU3dlZXBNb2RlIHN3ZWVwTW9kZSkKKyAgICB7Cisg
ICAgICAgIEhFQVBfTE9HX0JMT0NLX1NUQVRFX1RSQU5TSVRJT04odGhpcyk7CisKKyAgICAgICAg
aWYgKHN3ZWVwTW9kZSA9PSBTd2VlcE9ubHkgJiYgIW1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb24pCisg
ICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBpZiAobV9jZWxsc05lZWREZXN0cnVjdGlv
bikKKyAgICAgICAgICAgIHJldHVybiBzd2VlcFNsb3dDYXNlPHRydWU+KHN3ZWVwTW9kZSk7Cisg
ICAgICAgIHJldHVybiBzd2VlcFNsb3dDYXNlPGZhbHNlPihzd2VlcE1vZGUpOworICAgIH0KKwog
ICAgIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpkaWRDb25zdW1lRnJlZUxpc3QoKQogICAgIHsK
ICAgICAgICAgSEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTih0aGlzKTsKQEAgLTI0Myw2
ICsyNTgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBtX2F0b21zUGVyQ2Vs
bCAqIGF0b21TaXplOwogICAgIH0KIAorICAgIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjpjZWxs
c05lZWREZXN0cnVjdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gbV9jZWxsc05lZWREZXN0
cnVjdGlvbjsgCisgICAgfQorCiAgICAgaW5saW5lIHNpemVfdCBNYXJrZWRCbG9jazo6c2l6ZSgp
CiAgICAgewogICAgICAgICByZXR1cm4gbWFya0NvdW50KCkgKiBjZWxsU2l6ZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCmluZGV4IDg3ZGMwNDkzZGM1ZTNm
MTkxZmRiMDgwMzk1YjFlOTk2MDI1OTc4NTYuLmJmODM5MDExZDIwNjhiZjdiN2UwZGEwOThkZmQw
MmNjNjc2ZmJmMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5j
cHAKQEAgLTM2LDE1ICszNiwxMyBAQCBNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2UoSGVhcCogaGVh
cCkKICAgICAsIG1faGVhcChoZWFwKQogewogICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gcHJl
Y2lzZVN0ZXA7IGNlbGxTaXplIDw9IHByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IHByZWNpc2VT
dGVwKSB7Ci0gICAgICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkuc2V0Q2VsbFNpemUoY2VsbFNp
emUpOwotICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLnNldEhlYXAoaGVhcCk7Ci0gICAg
ICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkuc2V0TWFya2VkU3BhY2UodGhpcyk7CisgICAgICAg
IGFsbG9jYXRvckZvcihjZWxsU2l6ZSkuaW5pdChoZWFwLCB0aGlzLCBjZWxsU2l6ZSwgZmFsc2Up
OworICAgICAgICBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGNlbGxTaXplKS5pbml0KGhlYXAsIHRo
aXMsIGNlbGxTaXplLCB0cnVlKTsKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9
IGltcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IGltcHJlY2lzZUN1dG9mZjsgY2VsbFNpemUgKz0g
aW1wcmVjaXNlU3RlcCkgewotICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLnNldENlbGxT
aXplKGNlbGxTaXplKTsKLSAgICAgICAgYWxsb2NhdG9yRm9yKGNlbGxTaXplKS5zZXRIZWFwKGhl
YXApOwotICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLnNldE1hcmtlZFNwYWNlKHRoaXMp
OworICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLmluaXQoaGVhcCwgdGhpcywgY2VsbFNp
emUsIGZhbHNlKTsKKyAgICAgICAgZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihjZWxsU2l6ZSkuaW5p
dChoZWFwLCB0aGlzLCBjZWxsU2l6ZSwgdHJ1ZSk7CiAgICAgfQogfQogCkBAIC01MywyMCArNTEs
MjggQEAgdm9pZCBNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3JzKCkKICAgICBtX3dhdGVyTWFy
ayA9IDA7CiAgICAgbV9udXJzZXJ5V2F0ZXJNYXJrID0gMDsKIAotICAgIGZvciAoc2l6ZV90IGNl
bGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHByZWNpc2VDdXRvZmY7IGNlbGxTaXpl
ICs9IHByZWNpc2VTdGVwKQorICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7
IGNlbGxTaXplIDw9IHByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IHByZWNpc2VTdGVwKSB7CiAg
ICAgICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKKyAgICAgICAgZGVzdHJ1Y3Rv
ckFsbG9jYXRvckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKKyAgICB9CiAKLSAgICBmb3IgKHNpemVf
dCBjZWxsU2l6ZSA9IGltcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IGltcHJlY2lzZUN1dG9mZjsg
Y2VsbFNpemUgKz0gaW1wcmVjaXNlU3RlcCkKKyAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IGlt
cHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IGltcHJlY2lzZUN1dG9mZjsgY2VsbFNpemUgKz0gaW1w
cmVjaXNlU3RlcCkgewogICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLnJlc2V0KCk7Cisg
ICAgICAgIGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLnJlc2V0KCk7CisgICAgfQog
fQogCiB2b2lkIE1hcmtlZFNwYWNlOjpjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKCkKIHsK
LSAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVj
aXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkKKyAgICBmb3IgKHNpemVfdCBjZWxs
U2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSAr
PSBwcmVjaXNlU3RlcCkgewogICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLnphcEZyZWVM
aXN0KCk7CisgICAgICAgIGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLnphcEZyZWVM
aXN0KCk7CisgICAgfQogCi0gICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBpbXByZWNpc2VTdGVw
OyBjZWxsU2l6ZSA8PSBpbXByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IGltcHJlY2lzZVN0ZXAp
CisgICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBpbXByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBp
bXByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IGltcHJlY2lzZVN0ZXApIHsKICAgICAgICAgYWxs
b2NhdG9yRm9yKGNlbGxTaXplKS56YXBGcmVlTGlzdCgpOworICAgICAgICBkZXN0cnVjdG9yQWxs
b2NhdG9yRm9yKGNlbGxTaXplKS56YXBGcmVlTGlzdCgpOworICAgIH0KIH0KIAogCkBAIC0xMDcs
NyArMTEzLDcgQEAgaW5saW5lIHZvaWQgVGFrZUlmVW5tYXJrZWQ6Om9wZXJhdG9yKCkoTWFya2Vk
QmxvY2sqIGJsb2NrKQogICAgIGlmICghYmxvY2stPm1hcmtDb3VudElzWmVybygpKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgbV9tYXJrZWRTcGFjZS0+YWxsb2NhdG9yRm9yKGJsb2NrLT5j
ZWxsU2l6ZSgpKS5yZW1vdmVCbG9jayhibG9jayk7CisgICAgbV9tYXJrZWRTcGFjZS0+YWxsb2Nh
dG9yRm9yKGJsb2NrKS5yZW1vdmVCbG9jayhibG9jayk7CiAgICAgbV9lbXB0aWVzLmFwcGVuZChi
bG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCmluZGV4
IDIxYTBiNDhkZThkMmQ5M2UzMTlmZTQyYjljZTY1MDM5NGFkYzE1OTIuLjIyMjg2YjQwZjM2ZGNj
YTRiOWZkZTBiMjc1OGY4M2Y5NzZjNzc1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuaApAQCAtNTIsNyArNTIsMTAgQEAgcHVibGljOgogICAgIE1hcmtlZFNwYWNl
KEhlYXAqKTsKIAogICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yKHNpemVfdCk7Cisg
ICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3IoTWFya2VkQmxvY2sqKTsKKyAgICBNYXJr
ZWRBbGxvY2F0b3ImIGRlc3RydWN0b3JBbGxvY2F0b3JGb3Ioc2l6ZV90KTsKICAgICB2b2lkKiBh
bGxvY2F0ZShzaXplX3QpOworICAgIHZvaWQqIGFsbG9jYXRlV2l0aERlc3RydWN0b3Ioc2l6ZV90
KTsKICAgICAKICAgICB2b2lkIHJlc2V0QWxsb2NhdG9ycygpOwogCkBAIC04Niw4ICs4OSwxNCBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaW1wcmVjaXNlQ3V0b2ZmID0gbWF4
Q2VsbFNpemU7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBpbXByZWNpc2VDb3VudCA9IGltcHJl
Y2lzZUN1dG9mZiAvIGltcHJlY2lzZVN0ZXA7CiAKLSAgICBGaXhlZEFycmF5PE1hcmtlZEFsbG9j
YXRvciwgcHJlY2lzZUNvdW50PiBtX3ByZWNpc2VTaXplQ2xhc3NlczsKLSAgICBGaXhlZEFycmF5
PE1hcmtlZEFsbG9jYXRvciwgaW1wcmVjaXNlQ291bnQ+IG1faW1wcmVjaXNlU2l6ZUNsYXNzZXM7
CisgICAgc3RydWN0IFN1YnNwYWNlIHsKKyAgICAgICAgRml4ZWRBcnJheTxNYXJrZWRBbGxvY2F0
b3IsIHByZWNpc2VDb3VudD4gcHJlY2lzZVNpemVDbGFzc2VzOworICAgICAgICBGaXhlZEFycmF5
PE1hcmtlZEFsbG9jYXRvciwgaW1wcmVjaXNlQ291bnQ+IGltcHJlY2lzZVNpemVDbGFzc2VzOwor
ICAgIH07CisKKyAgICBTdWJzcGFjZSBtX2Rlc3RydWN0b3JTcGFjZTsKKyAgICBTdWJzcGFjZSBt
X25vcm1hbFNwYWNlOworCiAgICAgc2l6ZV90IG1fd2F0ZXJNYXJrOwogICAgIHNpemVfdCBtX251
cnNlcnlXYXRlck1hcms7CiAgICAgSGVhcCogbV9oZWFwOwpAQCAtMTI0LDggKzEzMywyMyBAQCBp
bmxpbmUgTWFya2VkQWxsb2NhdG9yJiBNYXJrZWRTcGFjZTo6YWxsb2NhdG9yRm9yKHNpemVfdCBi
eXRlcykKIHsKICAgICBBU1NFUlQoYnl0ZXMgJiYgYnl0ZXMgPD0gbWF4Q2VsbFNpemUpOwogICAg
IGlmIChieXRlcyA8PSBwcmVjaXNlQ3V0b2ZmKQotICAgICAgICByZXR1cm4gbV9wcmVjaXNlU2l6
ZUNsYXNzZXNbKGJ5dGVzIC0gMSkgLyBwcmVjaXNlU3RlcF07Ci0gICAgcmV0dXJuIG1faW1wcmVj
aXNlU2l6ZUNsYXNzZXNbKGJ5dGVzIC0gMSkgLyBpbXByZWNpc2VTdGVwXTsKKyAgICAgICAgcmV0
dXJuIG1fbm9ybWFsU3BhY2UucHJlY2lzZVNpemVDbGFzc2VzWyhieXRlcyAtIDEpIC8gcHJlY2lz
ZVN0ZXBdOworICAgIHJldHVybiBtX25vcm1hbFNwYWNlLmltcHJlY2lzZVNpemVDbGFzc2VzWyhi
eXRlcyAtIDEpIC8gaW1wcmVjaXNlU3RlcF07Cit9CisKK2lubGluZSBNYXJrZWRBbGxvY2F0b3Im
IE1hcmtlZFNwYWNlOjphbGxvY2F0b3JGb3IoTWFya2VkQmxvY2sqIGJsb2NrKQoreworICAgIGlm
IChibG9jay0+Y2VsbHNOZWVkRGVzdHJ1Y3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIGRlc3RydWN0
b3JBbGxvY2F0b3JGb3IoYmxvY2stPmNlbGxTaXplKCkpOworICAgIHJldHVybiBhbGxvY2F0b3JG
b3IoYmxvY2stPmNlbGxTaXplKCkpOworfQorCitpbmxpbmUgTWFya2VkQWxsb2NhdG9yJiBNYXJr
ZWRTcGFjZTo6ZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihzaXplX3QgYnl0ZXMpCit7CisgICAgQVNT
RVJUKGJ5dGVzICYmIGJ5dGVzIDw9IG1heENlbGxTaXplKTsKKyAgICBpZiAoYnl0ZXMgPD0gcHJl
Y2lzZUN1dG9mZikKKyAgICAgICAgcmV0dXJuIG1fZGVzdHJ1Y3RvclNwYWNlLnByZWNpc2VTaXpl
Q2xhc3Nlc1soYnl0ZXMgLSAxKSAvIHByZWNpc2VTdGVwXTsKKyAgICByZXR1cm4gbV9kZXN0cnVj
dG9yU3BhY2UuaW1wcmVjaXNlU2l6ZUNsYXNzZXNbKGJ5dGVzIC0gMSkgLyBpbXByZWNpc2VTdGVw
XTsKIH0KIAogaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZShzaXplX3QgYnl0ZXMp
CkBAIC0xMzMsMTQgKzE1NywyMSBAQCBpbmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRl
KHNpemVfdCBieXRlcykKICAgICByZXR1cm4gYWxsb2NhdG9yRm9yKGJ5dGVzKS5hbGxvY2F0ZSgp
OwogfQogCitpbmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlV2l0aERlc3RydWN0b3Io
c2l6ZV90IGJ5dGVzKQoreworICAgIHJldHVybiBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVz
KS5hbGxvY2F0ZSgpOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5
cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgTWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayhGdW5j
dG9yJiBmdW5jdG9yKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlY2lzZUNvdW50
OyArK2kpIHsKLSAgICAgICAgbV9wcmVjaXNlU2l6ZUNsYXNzZXNbaV0uZm9yRWFjaEJsb2NrKGZ1
bmN0b3IpOworICAgICAgICBtX25vcm1hbFNwYWNlLnByZWNpc2VTaXplQ2xhc3Nlc1tpXS5mb3JF
YWNoQmxvY2soZnVuY3Rvcik7CisgICAgICAgIG1fZGVzdHJ1Y3RvclNwYWNlLnByZWNpc2VTaXpl
Q2xhc3Nlc1tpXS5mb3JFYWNoQmxvY2soZnVuY3Rvcik7CiAgICAgfQogCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBpbXByZWNpc2VDb3VudDsgKytpKSB7Ci0gICAgICAgIG1faW1wcmVjaXNl
U2l6ZUNsYXNzZXNbaV0uZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAgICAgICBtX25vcm1hbFNw
YWNlLmltcHJlY2lzZVNpemVDbGFzc2VzW2ldLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKKyAgICAg
ICAgbV9kZXN0cnVjdG9yU3BhY2UuaW1wcmVjaXNlU2l6ZUNsYXNzZXNbaV0uZm9yRWFjaEJsb2Nr
KGZ1bmN0b3IpOwogICAgIH0KIAogICAgIHJldHVybiBmdW5jdG9yLnJldHVyblZhbHVlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCBjMzU3ZThjMzliMjRlYmY3MzY0MmJlYTYyZGFmN2I0
NjBjNzc2ZWY5Li5jMDY4ZjZmYzdmYmFiODJlMjlkNGFjYmRlY2UxN2M3MjAzOTFlNGQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTMyOSw3ICszMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFJlZ2lzdGVySUQgb3duZXIsIFJlZ2lzdGVy
SUQgdmFsdWVUYWcsIFJlZ2lzdGVySUQgc2NyYXRjaCwgUmVnaXN0ZXJJRCBzY3JhdGNoMiwgV3Jp
dGVCYXJyaWVyTW9kZSwgV3JpdGVCYXJyaWVyVXNlS2luZCk7CiAgICAgICAgIHZvaWQgZW1pdFdy
aXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNj
cmF0Y2gsIFdyaXRlQmFycmllck1vZGUsIFdyaXRlQmFycmllclVzZUtpbmQpOwogCi0gICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4gdm9p
ZCBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KFN0cnVjdHVyZVR5cGUsIFJlZ2lzdGVySUQgcmVz
dWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
bGFzc1R5cGUsIGJvb2wgZGVzdHJ1Y3RvciwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4gdm9pZCBl
bWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KFN0cnVjdHVyZVR5cGUsIFJlZ2lzdGVySUQgcmVzdWx0
LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2
b2lkIGVtaXRBbGxvY2F0ZUpTRmluYWxPYmplY3QoVCBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVz
dWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpOwogICAgICAgICB2b2lkIGVtaXRBbGxvY2F0ZUpT
RnVuY3Rpb24oRnVuY3Rpb25FeGVjdXRhYmxlKiwgUmVnaXN0ZXJJRCBzY29wZUNoYWluLCBSZWdp
c3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKICAgICAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCmluZGV4IDAxNTQ1ZmI4Yzcy
NzQ1MDk4YjRiNmE3ZTg4NDAyNmNhNzEzNDNkMTUuLmMxNzc2OWQ4NTliNzJhZjhlNmE5ZjI2NmMx
OTI5MzhiNDY0ZGI5YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lTWV0aG9kcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5l
TWV0aG9kcy5oCkBAIC0zOTksOSArMzk5LDEzIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omlz
T3BlcmFuZENvbnN0YW50SW1tZWRpYXRlQ2hhcih1bnNpZ25lZCBzcmMpCiAgICAgcmV0dXJuIG1f
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
YXNDZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3NU
eXBlLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0
ZUJhc2ljSlNPYmplY3QoU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgcmVzdWx0
LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3NUeXBlLCBi
b29sIGRlc3RydWN0b3IsIHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+IGlubGluZSB2b2lkIEpJVDo6
ZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdChTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgUmVnaXN0
ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cikKIHsKLSAgICBNYXJrZWRBbGxvY2F0
b3IqIGFsbG9jYXRvciA9ICZtX2dsb2JhbERhdGEtPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0KHNp
emVvZihDbGFzc1R5cGUpKTsKKyAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9IDA7Cisg
ICAgaWYgKGRlc3RydWN0b3IpCisgICAgICAgIGFsbG9jYXRvciA9ICZtX2dsb2JhbERhdGEtPmhl
YXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aERlc3RydWN0b3Ioc2l6ZW9mKENsYXNzVHlwZSkpOwor
ICAgIGVsc2UKKyAgICAgICAgYWxsb2NhdG9yID0gJm1fZ2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0
b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihzaXplb2YoQ2xhc3NUeXBlKSk7CiAgICAgbG9h
ZFB0cigmYWxsb2NhdG9yLT5tX2ZpcnN0RnJlZUNlbGwsIHJlc3VsdCk7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZXN1bHQpKTsKIApAQCAtNDI1LDEyICs0MjksMTIgQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4gaW5s
aW5lIHZvaWQgSklUOjplbWl0QWxsb2MKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSB2
b2lkIEpJVDo6ZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChUIHN0cnVjdHVyZSwgUmVnaXN0ZXJJ
RCByZXN1bHQsIFJlZ2lzdGVySUQgc2NyYXRjaCkKIHsKLSAgICBlbWl0QWxsb2NhdGVCYXNpY0pT
T2JqZWN0PEpTRmluYWxPYmplY3Q+KHN0cnVjdHVyZSwgcmVzdWx0LCBzY3JhdGNoKTsKKyAgICBl
bWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpTRmluYWxPYmplY3QsIGZhbHNlLCBUPihzdHJ1Y3R1
cmUsIHJlc3VsdCwgc2NyYXRjaCk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRl
SlNGdW5jdGlvbihGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIFJlZ2lzdGVySUQgc2Nv
cGVDaGFpbiwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cikKIHsKLSAg
ICBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpTRnVuY3Rpb24+KFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5uYW1lZEZ1bmN0aW9uU3RydWN0dXJlKCkpLCByZXN1
bHQsIHN0b3JhZ2VQdHIpOworICAgIGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Q8SlNGdW5jdGlv
biwgdHJ1ZT4oVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPm5hbWVk
RnVuY3Rpb25TdHJ1Y3R1cmUoKSksIHJlc3VsdCwgc3RvcmFnZVB0cik7CiAKICAgICAvLyBzdG9y
ZSB0aGUgZnVuY3Rpb24ncyBzY29wZSBjaGFpbgogICAgIHN0b3JlUHRyKHNjb3BlQ2hhaW4sIEFk
ZHJlc3MocmVzdWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAppbmRleCBjODRmYjViMTA2YTU4ZjNi
Mzg1OTgzNGRjYmNiNDdlNDQyMDE4NDllLi43MWQ2NzhlMmNkOGJlYjRjMDlmMmIyMmMwYzk3NDk1
MWU2M2QzZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcApA
QCAtNDIsNiArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogbmFtZXNwYWNlIEpTQyB7CiAK
IEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNBcnJheSk7CitBU1NFUlRfSEFTX1RSSVZJQUxf
REVTVFJVQ1RPUihKU0FycmF5KTsKIAogLy8gT3ZlcnZpZXcgb2YgSlNBcnJheQogLy8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAppbmRleCBhMzM1NGM2MDI0YjA5NzNjOWZm
MmEwZTdmZWFkNzNkMzBkZjVmZmYzLi4xNWY4MzIzNGRmYTRmNTMzNDc0N2Q4MGY4MDVkN2RlY2Zi
N2I0Y2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCkBAIC0xMzUs
MjMgKzEzNSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBzdGF0aWMgdm9pZCBmaW5h
bGl6ZShKU0NlbGwqKTsKIAotICAgICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxM
ZW5ndGggPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXko
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybiBhcnJheTsK
LSAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGggPSAwKTsKIAogICAgICAgICAvLyB0
cnlDcmVhdGVVbmluaXRpYWxpemVkIGlzIHVzZWQgZm9yIGZhc3QgY29uc3RydWN0aW9uIG9mIGFy
cmF5cyB3aG9zZSBzaXplIGFuZAogICAgICAgICAvLyBjb250ZW50cyBhcmUga25vd24gYXQgdGlt
ZSBvZiBjcmVhdGlvbi4gQ2xpZW50cyBvZiB0aGlzIGludGVyZmFjZSBtdXN0OgogICAgICAgICAv
LyAgIC0gbnVsbC1jaGVjayB0aGUgcmVzdWx0IChpbmRpY2F0aW5nIG91dCBvZiBtZW1vcnksIG9y
IG90aGVyd2lzZSB1bmFibGUgdG8gYWxsb2NhdGUgdmVjdG9yKS4KICAgICAgICAgLy8gICAtIGNh
bGwgJ2luaXRpYWxpemVJbmRleCcgZm9yIGFsbCBwcm9wZXJ0aWVzIGluIHNlcXVlbmNlLCBmb3Ig
MCA8PSBpIDwgaW5pdGlhbExlbmd0aC4KICAgICAgICAgLy8gICAtIGNhbGxlZCAnY29tcGxldGVJ
bml0aWFsaXphdGlvbicgYWZ0ZXIgYWxsIHByb3BlcnRpZXMgaGF2ZSBiZWVuIGluaXRpYWxpemVk
LgotICAgICAgICBzdGF0aWMgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFs
TGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgIHJldHVybiBhcnJheS0+dHJ5RmluaXNo
Q3JlYXRpb25VbmluaXRpYWxpemVkKGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOwotICAgICAg
ICB9CisgICAgICAgIHN0YXRpYyBKU0FycmF5KiB0cnlDcmVhdGVVbmluaXRpYWxpemVkKEpTR2xv
YmFsRGF0YSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpOwogCiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgdGhyb3dFeGNlcHRpb24pOwogCkBAIC0yNjUsNiArMjU2LDEzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldFN1YmNsYXNzRGF0YSh2b2lkKik7
CiAKICAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsPEpTQXJy
YXk+KEhlYXAmKTsKKworICAgICAgICBzdGF0aWMgSlNDZWxsKiBhbGxvY2F0ZVdpdGhvdXREZXN0
cnVjdG9yKEhlYXAmIGhlYXApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxKU0NlbGwqPihIZWFwOjpEZXN0cnVjdG9yRnJlZUFsbG9jYXRvcjo6YWxsb2NhdGUoaGVh
cCwgc2l6ZW9mKEpTQXJyYXkpKSk7CisgICAgICAgIH0KKwogICAgICAgICBib29sIGlzTGVuZ3Ro
V3JpdGFibGUoKQogICAgICAgICB7CiAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBt
YXAgPSBtX3NwYXJzZVZhbHVlTWFwOwpAQCAtMjk5LDYgKzI5NywzMSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCogbV9zdWJjbGFzc0RhdGE7IC8vIEEgSlNBcnJheSBzdWJjbGFzcyBj
YW4gdXNlIHRoaXMgdG8gZmlsbCB0aGUgdmVjdG9yIGxhemlseS4KICAgICB9OwogCisgICAgdGVt
cGxhdGU8PiBpbmxpbmUgdm9pZCogYWxsb2NhdGVDZWxsPEpTQXJyYXk+KEhlYXAmIGhlYXApCisg
ICAgeworI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQorICAgICAgICBBU1NFUlQoc2l6ZW9mKEpT
QXJyYXkpID09IEpTQXJyYXk6OnNfaW5mby5jZWxsU2l6ZSk7CisgICAgICAgIEFTU0VSVCghaGVh
cC5nbG9iYWxEYXRhKCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOworICAgICAgICBoZWFwLmds
b2JhbERhdGEoKS0+c2V0SW5pdGlhbGl6aW5nT2JqZWN0KHRydWUpOworI2VuZGlmCisgICAgICAg
IEpTQ2VsbCogcmVzdWx0ID0gSlNBcnJheTo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihoZWFw
KTsKKyAgICAgICAgcmVzdWx0LT5jbGVhclN0cnVjdHVyZSgpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlh
bExlbmd0aCkKKyAgICB7CisgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUpOworICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwg
aW5pdGlhbExlbmd0aCk7CisgICAgICAgIHJldHVybiBhcnJheTsKKyAgICB9CisKKyAgICBpbmxp
bmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3Ro
KQorICAgIHsKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVj
dHVyZSk7CisgICAgICAgIHJldHVybiBhcnJheS0+dHJ5RmluaXNoQ3JlYXRpb25VbmluaXRpYWxp
emVkKGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgIH0KKwogICAgIEpTQXJyYXkqIGFz
QXJyYXkoSlNWYWx1ZSk7CiAKICAgICBpbmxpbmUgSlNBcnJheSogYXNBcnJheShKU0NlbGwqIGNl
bGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKaW5kZXggYTQ0
M2ZkYTg2YzFhYTcyMmEyMWM1YWUxYzM0YzgxMjMzNTMyNDA5Ni4uOWYyMDM1ZDAzZDI5Y2IyYTkw
MjUwZDNlM2UyOGM1ZjFlZDk0ZjQyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcApAQCAtNDgsNiArNDgsNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxM
KEpTTm9uRmluYWxPYmplY3QpOwogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU0ZpbmFsT2Jq
ZWN0KTsKIAogQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNUT1IoSlNPYmplY3QpOworQVNTRVJU
X0hBU19UUklWSUFMX0RFU1RSVUNUT1IoSlNGaW5hbE9iamVjdCk7CiAKIGNvbnN0IGNoYXIqIFN0
cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvciA9ICJBdHRlbXB0ZWQgdG8gYXNzaWdu
IHRvIHJlYWRvbmx5IHByb3BlcnR5LiI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCmluZGV4IDQzMzI0OWMyMDQ1OGMwN2U1OTg1OWU4NDgxODAwMDAxZjM1OTA2MWYu
LmFkODY1ODY4Yzk1NzdmY2E3YzdjOTY2Y2Q4MzE1Y2Y4ZDhhYmQ1NjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaApAQCAtMzQ5LDYgKzM0OSw4IEBAIENPTVBJTEVf
QVNTRVJUKChKU0ZpbmFsT2JqZWN0X2lubGluZVN0b3JhZ2VDYXBhY2l0eSA+PSBKU05vbkZpbmFs
T2JqZWN0X2lubGluZVN0CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX2lubGluZVN0
b3JhZ2VbSlNOb25GaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNpdHldOwogICAgIH07CiAK
KyAgICBjbGFzcyBKU0ZpbmFsT2JqZWN0OworCiAgICAgLy8gSlNGaW5hbE9iamVjdCBpcyBhIHR5
cGUgb2YgSlNPYmplY3QgdGhhdCBjb250YWlucyBzdWZmaWNlbnQgaW50ZXJuYWwKICAgICAvLyBz
dG9yYWdlIHRvIGZ1bGx5IG1ha2UgdXNlIG9mIHRoZSBjb2xsb2N0b3IgY2VsbCBjb250YWluaW5n
IGl0LgogICAgIGNsYXNzIEpTRmluYWxPYmplY3QgOiBwdWJsaWMgSlNPYmplY3QgewpAQCAtMzU3
LDEzICszNTksNyBAQCBDT01QSUxFX0FTU0VSVCgoSlNGaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdl
Q2FwYWNpdHkgPj0gSlNOb25GaW5hbE9iamVjdF9pbmxpbmVTdAogICAgIHB1YmxpYzoKICAgICAg
ICAgdHlwZWRlZiBKU09iamVjdCBCYXNlOwogCi0gICAgICAgIHN0YXRpYyBKU0ZpbmFsT2JqZWN0
KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgSlNGaW5hbE9iamVjdCogZmluYWxPYmplY3QgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU0ZpbmFsT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgSlNGaW5hbE9iamVj
dChleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBmaW5hbE9iamVj
dC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVy
biBmaW5hbE9iamVjdDsKLSAgICAgICAgfQotCisgICAgICAgIHN0YXRpYyBKU0ZpbmFsT2JqZWN0
KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKEZpbmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKQEAgLTM4MywxNiArMzc5LDQyIEBAIENPTVBJTEVfQVNTRVJUKChKU0ZpbmFsT2JqZWN0
X2lubGluZVN0b3JhZ2VDYXBhY2l0eSA+PSBKU05vbkZpbmFsT2JqZWN0X2lubGluZVN0CiAgICAg
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICBwcml2YXRlOgorICAgICAg
ICBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsPEpTRmluYWxPYmplY3Q+KEhlYXAmKTsKKwogICAg
ICAgICBleHBsaWNpdCBKU0ZpbmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgICAgICA6IEpTT2JqZWN0KGdsb2JhbERhdGEsIHN0
cnVjdHVyZSwgbV9pbmxpbmVTdG9yYWdlKQogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAg
ICBzdGF0aWMgSlNDZWxsKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKEhlYXAmIGhlYXApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0NlbGwqPihIZWFwOjpE
ZXN0cnVjdG9yRnJlZUFsbG9jYXRvcjo6YWxsb2NhdGUoaGVhcCwgc2l6ZW9mKEpTRmluYWxPYmpl
Y3QpKSk7CisgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICAgICAgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiBtX2lubGluZVN0b3JhZ2VbSlNGaW5hbE9iamVjdF9pbmxpbmVTdG9y
YWdlQ2FwYWNpdHldOwogICAgIH07CiAKK3RlbXBsYXRlPD4gaW5saW5lIHZvaWQqIGFsbG9jYXRl
Q2VsbDxKU0ZpbmFsT2JqZWN0PihIZWFwJiBoZWFwKQoreworI2lmIEVOQUJMRShHQ19WQUxJREFU
SU9OKQorICAgICAgICBBU1NFUlQoc2l6ZW9mKEpTRmluYWxPYmplY3QpID09IEpTRmluYWxPYmpl
Y3Q6OnNfaW5mby5jZWxsU2l6ZSk7CisgICAgICAgIEFTU0VSVCghaGVhcC5nbG9iYWxEYXRhKCkt
PmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOworICAgICAgICBoZWFwLmdsb2JhbERhdGEoKS0+c2V0
SW5pdGlhbGl6aW5nT2JqZWN0KHRydWUpOworI2VuZGlmCisgICAgICAgIEpTQ2VsbCogcmVzdWx0
ID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihoZWFwKTsKKyAgICAg
ICAgcmVzdWx0LT5jbGVhclN0cnVjdHVyZSgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworfQor
CitpbmxpbmUgSlNGaW5hbE9iamVjdCogSlNGaW5hbE9iamVjdDo6Y3JlYXRlKEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNGaW5hbE9iamVjdCogZmluYWxP
YmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0ZpbmFsT2JqZWN0PigqZXhlYy0+
aGVhcCgpKSkgSlNGaW5hbE9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSk7Cisg
ICAgZmluYWxPYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAg
cmV0dXJuIGZpbmFsT2JqZWN0OworfQorCiBpbmxpbmUgYm9vbCBpc0pTRmluYWxPYmplY3QoSlND
ZWxsKiBjZWxsKQogewogICAgIHJldHVybiBjZWxsLT5jbGFzc0luZm8oKSA9PSAmSlNGaW5hbE9i
amVjdDo6c19pbmZvOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125568</attachid>
            <date>2012-02-05 21:56:20 -0800</date>
            <delta_ts>2012-02-06 08:11:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77761-20120205215619.patch</filename>
            <type>text/plain</type>
            <size>36218</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NzczCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
YTlmMGM4ZWM1OGMwYjdjMjk5YjBjNTJkMzY5MGI3NDhjOGRhMTBlLi5lM2VkOTY2ZmE3NTMwZTdi
MzQ3NmRjODBiMzY4NDBiYTFjNmI1Y2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NyBAQAorMjAxMi0wMi0wNSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIFNwbGl0IE1hcmtlZFNwYWNlIGludG8gZGVzdHJ1Y3RvciBhbmQg
ZGVzdHJ1Y3Rvci1mcmVlIHN1YnNwYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Nzc3NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KTogQ2hhbmdl
ZCB0byB1c2UgdGhlIGRlc3RydWN0b3ItZnJlZSBhbGxvY2F0b3IuCisgICAgICAgICogaGVhcC9I
ZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0
cnVjdG9yKTogQWRkZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBkZXN0cnVjdG9yL2Rlc3RydWN0
b3ItZnJlZSBhbGxvY2F0b3JzIGZvcgorICAgICAgICBwYXJ0aWN1bGFyIHNpemVzLgorICAgICAg
ICAoSlNDOjpIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3Rvcik6CisgICAgICAg
IChIZWFwKToKKyAgICAgICAgKERlc3RydWN0b3JGcmVlQWxsb2NhdG9yKTogVGhpcyBjbGFzcyBp
cyB1c2VkIGFzIHRoZSBvcHQtaW4gbWVjaGFuaXNtIGZvciB1c2luZyB0aGUgZGVzdHJ1Y3Rvci1m
cmVlIAorICAgICAgICBzdWJzcGFjZSBvZiB0aGUgSGVhcC4gQWxsIGNsYXNzZXMgdGhhdCB1c2Ug
dGhlIGRlc3RydWN0b3ItZnJlZSBzdWJzcGFjZSBtdXN0IGJlIGRlY2xhcmVkIGZyaWVuZHMgb2Yg
CisgICAgICAgIHRoaXMgY2xhc3MgaW4gb3JkZXIgdG8gYWNjZXNzIGl0cyBhbGxvY2F0ZSBtZW1i
ZXIgZnVuY3Rpb24uIFRoZXkgY2FuIHRoZW4gc3BlY2lhbGl6ZSB0aGUgYWxsb2NhdGVDZWxsIAor
ICAgICAgICB0ZW1wbGF0ZSBmb3IgdGhlbXNlbHZlcyB0byB1c2UgdGhpcyBmdW5jdGlvbiByYXRo
ZXIgdGhhbiB0aGUgZGVmYXVsdCBwdWJsaWMgYWxsb2NhdGUoKSBmdW5jdGlvbiAKKyAgICAgICAg
cHJvdmlkZWQgYnkgSGVhcC4KKyAgICAgICAgKEpTQzo6SGVhcDo6RGVzdHJ1Y3RvckZyZWVBbGxv
Y2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdGUpOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZUJsb2NrKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5oOgor
ICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmNlbGxzTmVlZERlc3RydWN0aW9uKTogQWRk
ZWQgYSBuZXcgZmllbGQgdG8gYm90aCBNYXJrZWRBbGxvY2F0b3IgYW5kIE1hcmtlZEJsb2NrIAor
ICAgICAgICB0aGF0IHNwZWNpZnkgd2hldGhlciBvciBub3QgdGhhdCBwYXJ0aWN1bGFyIGFsbG9j
YXRvci9ibG9jayBjb250YWlucyBvYmplY3RzIHRoYXQgcmVxdWlyZSBkZXN0cnVjdGlvbi4KKyAg
ICAgICAgVGhpcyBmbGFnIGNhbiB0aGVuIGJlIGNoZWNrZWQgYXQgcnVudGltZSB3aGVuZXZlciBh
IGRlY2lzaW9uIG5lZWRzIHRvIGJlIG1hZGUgb24gd2hpY2ggdmVyc2lvbiBvZiB0aGUgCisgICAg
ICAgIHN3ZWVwKCkgZnVuY3Rpb24gdG8gcnVuLgorICAgICAgICAoTWFya2VkQWxsb2NhdG9yKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IpOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjppbml0KTogQWRkZWQgdGhp
cyBnZW5lcmljIGluaXQgZnVuY3Rpb24gdG8gcmVwbGFjZSBhbGwgb2YgdGhlIGN1c3RvbSBzZXR0
ZXJzIHRoYXQgCisgICAgICAgIGFyZSBvbmx5IHVzZWQgd2hlbiBpbml0aWFsaXppbmcgYWxsIG9m
IHRoZSB2YXJpb3VzIE1hcmtlZEFsbG9jYXRvcnMgd2l0aGluIHRoZSBNYXJrZWRTcGFjZSBjb25z
dHJ1Y3Rvci4KKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpyZWN5Y2xl
KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6OmNhbGxEZXN0cnVjdG9yKTogCisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6c3BlY2lhbGl6ZWRTd2VlcCk6IFRlbXBsYXRpemVkIHRvIG1h
a2UgY2hlY2tpbmcgd2hldGhlciB0aGUgZGVzdHJ1Y3RvciBuZWVkcyB0byBiZSAKKyAgICAgICAg
Y2FsbGVkIGEgY29tcGlsZS10aW1lIGNvbnN0YW50LiAKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OnN3ZWVwU2xvd0Nhc2UpOiBEaXR0by4KKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmg6
CisgICAgICAgIChNYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpzd2Vl
cCk6IE1hZGUgYW4gaW5saW5lIHZlcnNpb24gZm9yIHRoZSBmYXN0IHBhdGggd2hlbiBkb2luZyBT
d2VlcE9ubHkgd2l0aCBubyAKKyAgICAgICAgZGVzdHJ1Y3RvcnMsIG9yIHN1YnNlcXVlbnRseSBk
ZWNpZGluZyB3aGV0aGVyIHRvIGNhbGwgdGhlIGRlc3RydWN0b3IvZGVzdHJ1Y3Rvci1mcmVlIHZl
cnNpb25zIG9mIAorICAgICAgICBzd2VlcFNsb3dDYXNlLgorICAgICAgICAoSlNDKToKKyAgICAg
ICAgKEpTQzo6TWFya2VkQmxvY2s6OmNlbGxzTmVlZERlc3RydWN0aW9uKToKKyAgICAgICAgKiBo
ZWFwL01hcmtlZFNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6Ok1hcmtlZFNw
YWNlKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnJlc2V0QWxsb2NhdG9ycyk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKToKKyAg
ICAgICAgKEpTQzo6VGFrZUlmVW5tYXJrZWQ6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAv
TWFya2VkU3BhY2UuaDoKKyAgICAgICAgKE1hcmtlZFNwYWNlKToKKyAgICAgICAgKFN1YnNwYWNl
KToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFsbG9jYXRvckZvcik6CisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6ZGVzdHJ1Y3RvckFsbG9jYXRvckZvcik6
CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjphbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayk6CisgICAgICAgICogaml0L0pJ
VC5oOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdCk6IEFkZGVkIHRlbXBsYXRlIHBhcmFtZXRlciB0
byBkZWNpZGUgd2hldGhlciBvYmplY3RzIG5lZWQgdG8gYmUgCisgICAgICAgIGFsbG9jYXRlZCBp
biBhIGRlc3RydWN0b3IvZGVzdHJ1Y3Rvci1mcmVlIGFsbG9jYXRvci4KKyAgICAgICAgKEpTQzo6
SklUOjplbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
QWxsb2NhdGVKU0Z1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChKU0FycmF5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6YWxsb2NhdGVXaXRo
b3V0RGVzdHJ1Y3Rvcik6IEhlbHBlciBmdW5jdGlvbiB0aGF0IHV0aWxpemVzIHRoZSBmYWN0IHRo
YXQgSlNBcnJheSBpcyBhIAorICAgICAgICBmcmllbmQgY2xhc3Mgb2YgRGVzdHJ1Y3RvckZyZWVB
bGxvY2F0b3IuCisgICAgICAgIChKU0M6OkpTQXJyYXkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNP
YmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNGaW5hbE9iamVjdCk6CisgICAgICAgIChKU0M6
OkpTRmluYWxPYmplY3Q6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IpOiBEaXR0by4KKyAgICAg
ICAgKEpTQzo6SlNGaW5hbE9iamVjdCk6CisKIDIwMTItMDItMDUgIEd5dXlvdW5nIEtpbSAgPGd5
dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbQ01BS0VdIFN1cHBvcnQgamF2YXNj
cmlwdGNvcmUgdGVzdCBmb3IgRUZMIHBvcnQuIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGE3ZWViNzljZjliNmFh
NjA2YzNlYmZkY2Y5MDM5NjU3OTA0MWYyMmUuLjVlMjUxNDg2NjEzN2M2YzUwZmY3MDVhOGZiNzI0
ZGE0YTk4MzE0OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMi0wNSAgTWFy
ayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IE1h
cmtlZFNwYWNlIGludG8gZGVzdHJ1Y3RvciBhbmQgZGVzdHJ1Y3Rvci1mcmVlIHN1YnNwYWNlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc3NjEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6Om9wZXJhdG9yIG5ldyk6IENoYW5naW5nIHRv
IHVzZSBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9yLgorCiAyMDEyLTAyLTA1ICBLZW50YXJvIEhhcmEg
IDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW5hbWUgW0pTQ0N1c3RvbSpdIElE
TCB0byBbSlNDdXN0b20qXSBJREwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAppbmRleCA0OGJiZGM3ZjA2OGZiZDhhNzIyZjk4YzE1MzVjMjQ5ZTg0MzQ0
NWRhLi41ZDFlZGMwNGQzYzFmM2IxODRiOGI4MDIyNTlhMjQzYWQ0ZGM4NjcxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC0xNTUzLDcgKzE1
NTMsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgdm9pZCBlbWl0
QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQgc3RydWN0dXJlLCBHUFJSZWcgcmVzdWx0R1BSLCBHUFJS
ZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7
Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJm1faml0Lmdsb2JhbERhdGEo
KS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3Qoc2l6ZW9mKEpTRmluYWxPYmplY3QpKTsKKyAgICAg
ICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5oZWFw
LmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKHNpemVvZihKU0ZpbmFsT2JqZWN0
KSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKCZhbGxvY2F0b3ItPm1fZmlyc3RG
cmVlQ2VsbCwgcmVzdWx0R1BSKTsKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5j
aFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdEdQUikpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCmluZGV4IDFkMGFjNTQwNzY2ZjJlODgyZWFiZjYxZTcyNzA3ZDdkZTZmZTkw
ZTUuLmMyZmQ0MzZlYzM2NzA2Zjk2ZTg0ZjI2MzMyMDZiYTA3MjI5NWVhYzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgKQEAgLTM4LDYgKzM4LDEwIEBACiAKICNkZWZpbmUgQ09MTEVDVF9P
Tl9FVkVSWV9BTExPQ0FUSU9OIDAKIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSlNET01X
aW5kb3dTaGVsbDsKK30KKwogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBCdW1wU3BhY2U7
CkBAIC05NSw4ICs5OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyB0cnVlIGlmIGFu
IGFsbG9jYXRpb24gb3IgY29sbGVjdGlvbiBpcyBpbiBwcm9ncmVzcwogICAgICAgICBpbmxpbmUg
Ym9vbCBpc0J1c3koKTsKICAgICAgICAgCi0gICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2Nh
dG9yRm9yT2JqZWN0KHNpemVfdCBieXRlcykgeyByZXR1cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0
b3JGb3IoYnl0ZXMpOyB9Ci0gICAgICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgICAg
IE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3Ioc2l6
ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRvckZvcihieXRlcyk7IH0K
KyAgICAgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3Rv
cihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2UuZGVzdHJ1Y3RvckFsbG9jYXRv
ckZvcihieXRlcyk7IH0KICAgICAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVTdG9yYWdl
KHNpemVfdCwgdm9pZCoqKTsKICAgICAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5UmVhbGxvY2F0ZVN0
b3JhZ2Uodm9pZCoqLCBzaXplX3QsIHNpemVfdCk7CiAKQEAgLTE0Miw2ICsxNDYsMTEgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBCdW1wU3BhY2U7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgTmVlZHNEZXN0cnVjdG9yQXJn
PiBmcmllbmQgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmKTsKKyAgICAgICAgZnJpZW5kIGNsYXNz
IFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw7CisKKyAgICAgICAgdm9pZCogYWxsb2NhdGVXaXRo
RGVzdHJ1Y3RvcihzaXplX3QpOworICAgICAgICB2b2lkKiBhbGxvY2F0ZVdpdGhvdXREZXN0cnVj
dG9yKHNpemVfdCk7CiAKICAgICAgICAgc2l6ZV90IHdhdGVyTWFyaygpOwogICAgICAgICBzaXpl
X3QgaGlnaFdhdGVyTWFyaygpOwpAQCAtMzM0LDEwICszNDMsMTYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHJldHVybiBmb3JFYWNoUHJvdGVjdGVkQ2VsbChmdW5jdG9yKTsKICAgICB9CiAK
LSAgICBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQorICAgIGlubGlu
ZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKHNpemVfdCBieXRlcykKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc1ZhbGlkQWxsb2NhdGlvbihieXRlcykpOworICAgICAgICByZXR1
cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKGJ5dGVzKTsKKyAgICB9Cisg
ICAgCisgICAgaW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6
ZV90IGJ5dGVzKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVmFsaWRBbGxvY2F0aW9uKGJ5dGVz
KSk7Ci0gICAgICAgIHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRlKGJ5dGVzKTsKKyAgICAg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihieXRlcyk7
CiAgICAgfQogICAgIAogICAgIGlubGluZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0cnlBbGxvY2F0
ZVN0b3JhZ2Uoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKaW5kZXggODIzOWZiYWVkZmMwYzk4MTgy
ODEyYTExMmM5ZTFjYTQ5ZTcwYjUxYy4uZWI2ZDJjNjkxNTVjY2VlYmI5MTA5MjRhOGQ5YTIxOTg5
ZDcwNmUzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0
b3IuY3BwCkBAIC05NywxMSArOTcsMTEgQEAgTWFya2VkQmxvY2sqIE1hcmtlZEFsbG9jYXRvcjo6
YWxsb2NhdGVCbG9jayhBbGxvY2F0aW9uRWZmb3J0IGFsbG9jYXRpb25FZmZvcnQpCiAgICAgICAg
ICAgICBibG9jayA9IDA7CiAgICAgfQogICAgIGlmIChibG9jaykKLSAgICAgICAgYmxvY2sgPSBN
YXJrZWRCbG9jazo6cmVjeWNsZShibG9jaywgbV9oZWFwLCBtX2NlbGxTaXplKTsKKyAgICAgICAg
YmxvY2sgPSBNYXJrZWRCbG9jazo6cmVjeWNsZShibG9jaywgbV9oZWFwLCBtX2NlbGxTaXplLCBt
X2NlbGxzTmVlZERlc3RydWN0aW9uKTsKICAgICBlbHNlIGlmIChhbGxvY2F0aW9uRWZmb3J0ID09
IEFsbG9jYXRpb25DYW5GYWlsKQogICAgICAgICByZXR1cm4gMDsKICAgICBlbHNlCi0gICAgICAg
IGJsb2NrID0gTWFya2VkQmxvY2s6OmNyZWF0ZShtX2hlYXAsIG1fY2VsbFNpemUpOworICAgICAg
ICBibG9jayA9IE1hcmtlZEJsb2NrOjpjcmVhdGUobV9oZWFwLCBtX2NlbGxTaXplLCBtX2NlbGxz
TmVlZERlc3RydWN0aW9uKTsKICAgICAKICAgICBtX21hcmtlZFNwYWNlLT5kaWRBZGRCbG9jayhi
bG9jayk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5oCmluZGV4IDU2NDRjNjkxYjg3Y2Y3ZjIzYjAyYjU2NWQzY2RhZjY1ZmQyYWViZWMuLjE2MjA3
ZjZhNWY0M2QyNWIxMmMwOWNhMWEyYTdlYjQyZDIzMjVjNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCkBAIC0yMiw2ICsyMiw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHJlc2V0KCk7CiAgICAgdm9pZCB6YXBGcmVlTGlzdCgpOwogICAgIHNpemVfdCBj
ZWxsU2l6ZSgpIHsgcmV0dXJuIG1fY2VsbFNpemU7IH0KKyAgICBib29sIGNlbGxzTmVlZERlc3Ry
dWN0aW9uKCkgeyByZXR1cm4gbV9jZWxsc05lZWREZXN0cnVjdGlvbjsgfQogICAgIHZvaWQqIGFs
bG9jYXRlKCk7CiAgICAgSGVhcCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQogICAgIApAQCAt
MjksOSArMzAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhZGRCbG9jayhNYXJrZWRCbG9j
ayopOwogICAgIHZvaWQgcmVtb3ZlQmxvY2soTWFya2VkQmxvY2sqKTsKLSAgICB2b2lkIHNldEhl
YXAoSGVhcCogaGVhcCkgeyBtX2hlYXAgPSBoZWFwOyB9Ci0gICAgdm9pZCBzZXRDZWxsU2l6ZShz
aXplX3QgY2VsbFNpemUpIHsgbV9jZWxsU2l6ZSA9IGNlbGxTaXplOyB9Ci0gICAgdm9pZCBzZXRN
YXJrZWRTcGFjZShNYXJrZWRTcGFjZSogc3BhY2UpIHsgbV9tYXJrZWRTcGFjZSA9IHNwYWNlOyB9
CisgICAgdm9pZCBpbml0KEhlYXAqLCBNYXJrZWRTcGFjZSosIHNpemVfdCBjZWxsU2l6ZSwgYm9v
bCBjZWxsc05lZWREZXN0cnVjdGlvbik7CiAgICAgCiBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoKTsKQEAgLTQzLDYgKzQyLDcgQEAgcHJpdmF0
ZToKICAgICBNYXJrZWRCbG9jayogbV9jdXJyZW50QmxvY2s7CiAgICAgRG91Ymx5TGlua2VkTGlz
dDxIZWFwQmxvY2s+IG1fYmxvY2tMaXN0OwogICAgIHNpemVfdCBtX2NlbGxTaXplOworICAgIGJv
b2wgbV9jZWxsc05lZWREZXN0cnVjdGlvbjsKICAgICBIZWFwKiBtX2hlYXA7CiAgICAgTWFya2Vk
U3BhY2UqIG1fbWFya2VkU3BhY2U7CiB9OwpAQCAtNTEsMTEgKzUxLDIwIEBAIGlubGluZSBNYXJr
ZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcigpCiAgICAgOiBtX2ZpcnN0RnJlZUNlbGwoMCkK
ICAgICAsIG1fY3VycmVudEJsb2NrKDApCiAgICAgLCBtX2NlbGxTaXplKDApCisgICAgLCBtX2Nl
bGxzTmVlZERlc3RydWN0aW9uKHRydWUpCiAgICAgLCBtX2hlYXAoMCkKICAgICAsIG1fbWFya2Vk
U3BhY2UoMCkKIHsKIH0KLSAgICAKKworaW5saW5lIHZvaWQgTWFya2VkQWxsb2NhdG9yOjppbml0
KEhlYXAqIGhlYXAsIE1hcmtlZFNwYWNlKiBtYXJrZWRTcGFjZSwgc2l6ZV90IGNlbGxTaXplLCBi
b29sIGNlbGxzTmVlZERlc3RydWN0aW9uKQoreworICAgIG1faGVhcCA9IGhlYXA7CisgICAgbV9t
YXJrZWRTcGFjZSA9IG1hcmtlZFNwYWNlOworICAgIG1fY2VsbFNpemUgPSBjZWxsU2l6ZTsKKyAg
ICBtX2NlbGxzTmVlZERlc3RydWN0aW9uID0gY2VsbHNOZWVkRGVzdHJ1Y3Rpb247Cit9CisKIGlu
bGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlKCkKIHsKICAgICBNYXJrZWRCbG9j
azo6RnJlZUNlbGwqIGZpcnN0RnJlZUNlbGwgPSBtX2ZpcnN0RnJlZUNlbGw7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKaW5kZXggZGQ5MjMzMzAwNDA5OWRmZjIw
NTFlMTZhYmZlOTA0NDE3MmRiNWFkZi4uZjAwNGMzMTU4NGE4MDg4NGI5ZGM0YWI5MDk3Y2Q3MmQ1
OGVmMDI2NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcApA
QCAtMzIsMTcgKzMyLDE3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1NYXJrZWRCbG9jayogTWFy
a2VkQmxvY2s6OmNyZWF0ZShIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUpCitNYXJrZWRCbG9j
ayogTWFya2VkQmxvY2s6OmNyZWF0ZShIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUsIGJvb2wg
Y2VsbHNOZWVkRGVzdHJ1Y3Rpb24pCiB7CiAgICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkIGFsbG9j
YXRpb24gPSBQYWdlQWxsb2NhdGlvbkFsaWduZWQ6OmFsbG9jYXRlKGJsb2NrU2l6ZSwgYmxvY2tT
aXplLCBPU0FsbG9jYXRvcjo6SlNHQ0hlYXBQYWdlcyk7CiAgICAgaWYgKCFzdGF0aWNfY2FzdDxi
b29sPihhbGxvY2F0aW9uKSkKICAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gbmV3IChOb3RO
dWxsLCBhbGxvY2F0aW9uLmJhc2UoKSkgTWFya2VkQmxvY2soYWxsb2NhdGlvbiwgaGVhcCwgY2Vs
bFNpemUpOworICAgIHJldHVybiBuZXcgKE5vdE51bGwsIGFsbG9jYXRpb24uYmFzZSgpKSBNYXJr
ZWRCbG9jayhhbGxvY2F0aW9uLCBoZWFwLCBjZWxsU2l6ZSwgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24p
OwogfQogCi1NYXJrZWRCbG9jayogTWFya2VkQmxvY2s6OnJlY3ljbGUoTWFya2VkQmxvY2sqIGJs
b2NrLCBIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUpCitNYXJrZWRCbG9jayogTWFya2VkQmxv
Y2s6OnJlY3ljbGUoTWFya2VkQmxvY2sqIGJsb2NrLCBIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNp
emUsIGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24pCiB7Ci0gICAgcmV0dXJuIG5ldyAoTm90TnVs
bCwgYmxvY2spIE1hcmtlZEJsb2NrKGJsb2NrLT5tX2FsbG9jYXRpb24sIGhlYXAsIGNlbGxTaXpl
KTsKKyAgICByZXR1cm4gbmV3IChOb3ROdWxsLCBibG9jaykgTWFya2VkQmxvY2soYmxvY2stPm1f
YWxsb2NhdGlvbiwgaGVhcCwgY2VsbFNpemUsIGNlbGxzTmVlZERlc3RydWN0aW9uKTsKIH0KIAog
dm9pZCBNYXJrZWRCbG9jazo6ZGVzdHJveShNYXJrZWRCbG9jayogYmxvY2spCkBAIC01MCwxMCAr
NTAsMTEgQEAgdm9pZCBNYXJrZWRCbG9jazo6ZGVzdHJveShNYXJrZWRCbG9jayogYmxvY2spCiAg
ICAgYmxvY2stPm1fYWxsb2NhdGlvbi5kZWFsbG9jYXRlKCk7CiB9CiAKLU1hcmtlZEJsb2NrOjpN
YXJrZWRCbG9jayhQYWdlQWxsb2NhdGlvbkFsaWduZWQmIGFsbG9jYXRpb24sIEhlYXAqIGhlYXAs
IHNpemVfdCBjZWxsU2l6ZSkKK01hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayhQYWdlQWxsb2NhdGlv
bkFsaWduZWQmIGFsbG9jYXRpb24sIEhlYXAqIGhlYXAsIHNpemVfdCBjZWxsU2l6ZSwgYm9vbCBj
ZWxsc05lZWREZXN0cnVjdGlvbikKICAgICA6IEhlYXBCbG9jayhhbGxvY2F0aW9uKQogICAgICwg
bV9hdG9tc1BlckNlbGwoKGNlbGxTaXplICsgYXRvbVNpemUgLSAxKSAvIGF0b21TaXplKQogICAg
ICwgbV9lbmRBdG9tKGF0b21zUGVyQmxvY2sgLSBtX2F0b21zUGVyQ2VsbCArIDEpCisgICAgLCBt
X2NlbGxzTmVlZERlc3RydWN0aW9uKGNlbGxzTmVlZERlc3RydWN0aW9uKQogICAgICwgbV9zdGF0
ZShOZXcpIC8vIEFsbCBjZWxscyBzdGFydCBvdXQgdW5tYXJrZWQuCiAgICAgLCBtX2hlYXAoaGVh
cCkKIHsKQEAgLTcwLDE2ICs3MSwxNyBAQCBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6Y2FsbERl
c3RydWN0b3IoSlNDZWxsKiBjZWxsKQogI2lmIEVOQUJMRShTSU1QTEVfSEVBUF9QUk9GSUxJTkcp
CiAgICAgbV9oZWFwLT5tX2Rlc3Ryb3llZFR5cGVDb3VudHMuY291bnRWUHRyKHZwdHIpOwogI2Vu
ZGlmCi0gICAgaWYgKGNlbGwtPmNsYXNzSW5mbygpICE9ICZKU0ZpbmFsT2JqZWN0OjpzX2luZm8p
Ci0gICAgICAgIGNlbGwtPm1ldGhvZFRhYmxlKCktPmRlc3Ryb3koY2VsbCk7CisgICAgQVNTRVJU
KGNlbGwtPmNsYXNzSW5mbygpICE9ICZKU0ZpbmFsT2JqZWN0OjpzX2luZm8pOworICAgIGNlbGwt
Pm1ldGhvZFRhYmxlKCktPmRlc3Ryb3koY2VsbCk7CiAKICAgICBjZWxsLT56YXAoKTsKIH0KIAot
dGVtcGxhdGU8TWFya2VkQmxvY2s6OkJsb2NrU3RhdGUgYmxvY2tTdGF0ZSwgTWFya2VkQmxvY2s6
OlN3ZWVwTW9kZSBzd2VlcE1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6QmxvY2tTdGF0ZSBi
bG9ja1N0YXRlLCBNYXJrZWRCbG9jazo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgYm9vbCBkZXN0cnVj
dG9yQ2FsbE5lZWRlZD4KIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OnNwZWNp
YWxpemVkU3dlZXAoKQogewogICAgIEFTU0VSVChibG9ja1N0YXRlICE9IEFsbG9jYXRlZCAmJiBi
bG9ja1N0YXRlICE9IEZyZWVMaXN0ZWQpOworICAgIEFTU0VSVChkZXN0cnVjdG9yQ2FsbE5lZWRl
ZCB8fCBzd2VlcE1vZGUgIT0gU3dlZXBPbmx5KTsKIAogICAgIC8vIFRoaXMgcHJvZHVjZXMgYSBm
cmVlIGxpc3QgdGhhdCBpcyBvcmRlcmVkIGluIHJldmVyc2UgdGhyb3VnaCB0aGUgYmxvY2suCiAg
ICAgLy8gVGhpcyBpcyBmaW5lLCBzaW5jZSB0aGUgYWxsb2NhdGlvbiBjb2RlIG1ha2VzIG5vIGFz
c3VtcHRpb25zIGFib3V0IHRoZQpAQCAtOTMsNyArOTUsNyBAQCBNYXJrZWRCbG9jazo6RnJlZUNl
bGwqIE1hcmtlZEJsb2NrOjpzcGVjaWFsaXplZFN3ZWVwKCkKICAgICAgICAgaWYgKGJsb2NrU3Rh
dGUgPT0gWmFwcGVkICYmICFjZWxsLT5pc1phcHBlZCgpKQogICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgaWYgKGJsb2NrU3RhdGUgIT0gTmV3KQorICAgICAgICBpZiAoZGVzdHJ1Y3Rv
ckNhbGxOZWVkZWQgJiYgYmxvY2tTdGF0ZSAhPSBOZXcpCiAgICAgICAgICAgICBjYWxsRGVzdHJ1
Y3RvcihjZWxsKTsKIAogICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkg
ewpAQCAtMTA3LDE0ICsxMDksMTMgQEAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBNYXJrZWRCbG9j
azo6c3BlY2lhbGl6ZWRTd2VlcCgpCiAgICAgcmV0dXJuIGhlYWQ7CiB9CiAKLU1hcmtlZEJsb2Nr
OjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OnN3ZWVwKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCit0ZW1w
bGF0ZTxib29sIGRlc3RydWN0b3JDYWxsTmVlZGVkPgorTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBN
YXJrZWRCbG9jazo6c3dlZXBTbG93Q2FzZShTd2VlcE1vZGUgc3dlZXBNb2RlKQogewotICAgIEhF
QVBfTE9HX0JMT0NLX1NUQVRFX1RSQU5TSVRJT04odGhpcyk7Ci0KICAgICBzd2l0Y2ggKG1fc3Rh
dGUpIHsKICAgICBjYXNlIE5ldzoKICAgICAgICAgQVNTRVJUKHN3ZWVwTW9kZSA9PSBTd2VlcFRv
RnJlZUxpc3QpOwotICAgICAgICByZXR1cm4gc3BlY2lhbGl6ZWRTd2VlcDxOZXcsIFN3ZWVwVG9G
cmVlTGlzdD4oKTsKKyAgICAgICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8TmV3LCBTd2VlcFRv
RnJlZUxpc3QsIGRlc3RydWN0b3JDYWxsTmVlZGVkPigpOwogICAgIGNhc2UgRnJlZUxpc3RlZDoK
ICAgICAgICAgLy8gSGFwcGVucyB3aGVuIGEgYmxvY2sgdHJhbnNpdGlvbnMgdG8gZnVsbHkgYWxs
b2NhdGVkLgogICAgICAgICBBU1NFUlQoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCk7CkBA
IC0xMjQsMTggKzEyNSwyMSBAQCBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpz
d2VlcChTd2VlcE1vZGUgc3dlZXBNb2RlKQogICAgICAgICByZXR1cm4gMDsKICAgICBjYXNlIE1h
cmtlZDoKICAgICAgICAgcmV0dXJuIHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QKLSAgICAg
ICAgICAgID8gc3BlY2lhbGl6ZWRTd2VlcDxNYXJrZWQsIFN3ZWVwVG9GcmVlTGlzdD4oKQotICAg
ICAgICAgICAgOiBzcGVjaWFsaXplZFN3ZWVwPE1hcmtlZCwgU3dlZXBPbmx5PigpOworICAgICAg
ICAgICAgPyBzcGVjaWFsaXplZFN3ZWVwPE1hcmtlZCwgU3dlZXBUb0ZyZWVMaXN0LCBkZXN0cnVj
dG9yQ2FsbE5lZWRlZD4oKQorICAgICAgICAgICAgOiBzcGVjaWFsaXplZFN3ZWVwPE1hcmtlZCwg
U3dlZXBPbmx5LCBkZXN0cnVjdG9yQ2FsbE5lZWRlZD4oKTsKICAgICBjYXNlIFphcHBlZDoKICAg
ICAgICAgcmV0dXJuIHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QKLSAgICAgICAgICAgID8g
c3BlY2lhbGl6ZWRTd2VlcDxaYXBwZWQsIFN3ZWVwVG9GcmVlTGlzdD4oKQotICAgICAgICAgICAg
OiBzcGVjaWFsaXplZFN3ZWVwPFphcHBlZCwgU3dlZXBPbmx5PigpOworICAgICAgICAgICAgPyBz
cGVjaWFsaXplZFN3ZWVwPFphcHBlZCwgU3dlZXBUb0ZyZWVMaXN0LCBkZXN0cnVjdG9yQ2FsbE5l
ZWRlZD4oKQorICAgICAgICAgICAgOiBzcGVjaWFsaXplZFN3ZWVwPFphcHBlZCwgU3dlZXBPbmx5
LCBkZXN0cnVjdG9yQ2FsbE5lZWRlZD4oKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICByZXR1cm4gMDsKIH0KIAordGVtcGxhdGUgTWFya2VkQmxvY2s6OkZyZWVDZWxs
KiBNYXJrZWRCbG9jazo6c3dlZXBTbG93Q2FzZTx0cnVlPihTd2VlcE1vZGUpOwordGVtcGxhdGUg
TWFya2VkQmxvY2s6OkZyZWVDZWxsKiBNYXJrZWRCbG9jazo6c3dlZXBTbG93Q2FzZTxmYWxzZT4o
U3dlZXBNb2RlKTsKKwogdm9pZCBNYXJrZWRCbG9jazo6emFwRnJlZUxpc3QoRnJlZUNlbGwqIGZp
cnN0RnJlZUNlbGwpCiB7CiAgICAgSEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTih0aGlz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCmluZGV4IDBhNGViZTQ3
ZTBhMzljMjU2ZDIwMzcyMzhhZjQ3MmZjMzMxNGNiMmEuLjg1NjM0NjZiMTM1MWUwYzdkNGQ3M2Ez
OWFlZDZmODFkOGU1MThlYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suaApAQCAtODksOCArODksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHZvaWQg
cmV0dXJuVmFsdWUoKSB7IH0KICAgICAgICAgfTsKIAotICAgICAgICBzdGF0aWMgTWFya2VkQmxv
Y2sqIGNyZWF0ZShIZWFwKiwgc2l6ZV90IGNlbGxTaXplKTsKLSAgICAgICAgc3RhdGljIE1hcmtl
ZEJsb2NrKiByZWN5Y2xlKE1hcmtlZEJsb2NrKiwgSGVhcCosIHNpemVfdCBjZWxsU2l6ZSk7Cisg
ICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogY3JlYXRlKEhlYXAqLCBzaXplX3QgY2VsbFNpemUs
IGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24pOworICAgICAgICBzdGF0aWMgTWFya2VkQmxvY2sq
IHJlY3ljbGUoTWFya2VkQmxvY2sqLCBIZWFwKiwgc2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxz
TmVlZERlc3RydWN0aW9uKTsKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShNYXJrZWRCbG9j
ayopOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzQXRvbUFsaWduZWQoY29uc3Qgdm9pZCopOwpA
QCAtMTE1LDYgKzExNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1hcmtDb3Vu
dElzWmVybygpOyAvLyBGYXN0ZXIgdGhhbiBtYXJrQ291bnQoKS4KIAogICAgICAgICBzaXplX3Qg
Y2VsbFNpemUoKTsKKyAgICAgICAgYm9vbCBjZWxsc05lZWREZXN0cnVjdGlvbigpOwogCiAgICAg
ICAgIHNpemVfdCBzaXplKCk7CiAgICAgICAgIHNpemVfdCBjYXBhY2l0eSgpOwpAQCAtMTU5LDE0
ICsxNjAsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
YXRvbUFsaWdubWVudE1hc2sgPSBhdG9tU2l6ZSAtIDE7IC8vIGF0b21TaXplIG11c3QgYmUgYSBw
b3dlciBvZiB0d28uCiAKICAgICAgICAgZW51bSBCbG9ja1N0YXRlIHsgTmV3LCBGcmVlTGlzdGVk
LCBBbGxvY2F0ZWQsIE1hcmtlZCwgWmFwcGVkIH07CisgICAgICAgIHRlbXBsYXRlPGJvb2wgZGVz
dHJ1Y3RvckNhbGxOZWVkZWQ+IEZyZWVDZWxsKiBzd2VlcFNsb3dDYXNlKFN3ZWVwTW9kZSA9IFN3
ZWVwT25seSk7CiAKICAgICAgICAgdHlwZWRlZiBjaGFyIEF0b21bYXRvbVNpemVdOwogCi0gICAg
ICAgIE1hcmtlZEJsb2NrKFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYsIEhlYXAqLCBzaXplX3QgY2Vs
bFNpemUpOworICAgICAgICBNYXJrZWRCbG9jayhQYWdlQWxsb2NhdGlvbkFsaWduZWQmLCBIZWFw
Kiwgc2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uKTsKICAgICAgICAg
QXRvbSogYXRvbXMoKTsKICAgICAgICAgc2l6ZV90IGF0b21OdW1iZXIoY29uc3Qgdm9pZCopOwog
ICAgICAgICB2b2lkIGNhbGxEZXN0cnVjdG9yKEpTQ2VsbCopOwotICAgICAgICB0ZW1wbGF0ZTxC
bG9ja1N0YXRlLCBTd2VlcE1vZGU+IEZyZWVDZWxsKiBzcGVjaWFsaXplZFN3ZWVwKCk7CisgICAg
ICAgIHRlbXBsYXRlPEJsb2NrU3RhdGUsIFN3ZWVwTW9kZSwgYm9vbCBkZXN0cnVjdG9yQ2FsbE5l
ZWRlZD4gRnJlZUNlbGwqIHNwZWNpYWxpemVkU3dlZXAoKTsKICAgICAgICAgCiAjaWYgRU5BQkxF
KEdHQykKICAgICAgICAgQ2FyZFNldDxieXRlc1BlckNhcmQsIGJsb2NrU2l6ZT4gbV9jYXJkczsK
QEAgLTE3OSw2ICsxODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbHNlCiAgICAgICAgIFdURjo6
Qml0bWFwPGF0b21zUGVyQmxvY2ssIFdURjo6Qml0bWFwTm90QXRvbWljPiBtX21hcmtzOwogI2Vu
ZGlmCisgICAgICAgIGJvb2wgbV9jZWxsc05lZWREZXN0cnVjdGlvbjsKICAgICAgICAgQmxvY2tT
dGF0ZSBtX3N0YXRlOwogICAgICAgICBIZWFwKiBtX2hlYXA7CiAgICAgfTsKQEAgLTIwOCw2ICsy
MTEsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBtX2hlYXA7CiAgICAgfQog
CisgICAgaW5saW5lIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OnN3ZWVwKFN3
ZWVwTW9kZSBzd2VlcE1vZGUpCisgICAgeworICAgICAgICBIRUFQX0xPR19CTE9DS19TVEFURV9U
UkFOU0lUSU9OKHRoaXMpOworCisgICAgICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBPbmx5ICYm
ICFtX2NlbGxzTmVlZERlc3RydWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAg
ICAgaWYgKG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb24pCisgICAgICAgICAgICByZXR1cm4gc3dlZXBT
bG93Q2FzZTx0cnVlPihzd2VlcE1vZGUpOworICAgICAgICByZXR1cm4gc3dlZXBTbG93Q2FzZTxm
YWxzZT4oc3dlZXBNb2RlKTsKKyAgICB9CisKICAgICBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6
ZGlkQ29uc3VtZUZyZWVMaXN0KCkKICAgICB7CiAgICAgICAgIEhFQVBfTE9HX0JMT0NLX1NUQVRF
X1RSQU5TSVRJT04odGhpcyk7CkBAIC0yNDMsNiArMjU4LDExIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICByZXR1cm4gbV9hdG9tc1BlckNlbGwgKiBhdG9tU2l6ZTsKICAgICB9CiAKKyAgICBp
bmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6Y2VsbHNOZWVkRGVzdHJ1Y3Rpb24oKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb247IAorICAgIH0KKwogICAgIGlubGlu
ZSBzaXplX3QgTWFya2VkQmxvY2s6OnNpemUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1hcmtD
b3VudCgpICogY2VsbFNpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZFNwYWNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNw
YWNlLmNwcAppbmRleCA4N2RjMDQ5M2RjNWUzZjE5MWZkYjA4MDM5NWIxZTk5NjAyNTk3ODU2Li5i
ZjgzOTAxMWQyMDY4YmY3YjdlMGRhMDk4ZGZkMDJjYzY3NmZiZjJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCkBAIC0zNiwxNSArMzYsMTMgQEAgTWFya2Vk
U3BhY2U6Ok1hcmtlZFNwYWNlKEhlYXAqIGhlYXApCiAgICAgLCBtX2hlYXAoaGVhcCkKIHsKICAg
ICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNl
Q3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgewotICAgICAgICBhbGxvY2F0b3JGb3Io
Y2VsbFNpemUpLnNldENlbGxTaXplKGNlbGxTaXplKTsKLSAgICAgICAgYWxsb2NhdG9yRm9yKGNl
bGxTaXplKS5zZXRIZWFwKGhlYXApOwotICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLnNl
dE1hcmtlZFNwYWNlKHRoaXMpOworICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLmluaXQo
aGVhcCwgdGhpcywgY2VsbFNpemUsIGZhbHNlKTsKKyAgICAgICAgZGVzdHJ1Y3RvckFsbG9jYXRv
ckZvcihjZWxsU2l6ZSkuaW5pdChoZWFwLCB0aGlzLCBjZWxsU2l6ZSwgdHJ1ZSk7CiAgICAgfQog
CiAgICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBpbXByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBp
bXByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IGltcHJlY2lzZVN0ZXApIHsKLSAgICAgICAgYWxs
b2NhdG9yRm9yKGNlbGxTaXplKS5zZXRDZWxsU2l6ZShjZWxsU2l6ZSk7Ci0gICAgICAgIGFsbG9j
YXRvckZvcihjZWxsU2l6ZSkuc2V0SGVhcChoZWFwKTsKLSAgICAgICAgYWxsb2NhdG9yRm9yKGNl
bGxTaXplKS5zZXRNYXJrZWRTcGFjZSh0aGlzKTsKKyAgICAgICAgYWxsb2NhdG9yRm9yKGNlbGxT
aXplKS5pbml0KGhlYXAsIHRoaXMsIGNlbGxTaXplLCBmYWxzZSk7CisgICAgICAgIGRlc3RydWN0
b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLmluaXQoaGVhcCwgdGhpcywgY2VsbFNpemUsIHRydWUp
OwogICAgIH0KIH0KIApAQCAtNTMsMjAgKzUxLDI4IEBAIHZvaWQgTWFya2VkU3BhY2U6OnJlc2V0
QWxsb2NhdG9ycygpCiAgICAgbV93YXRlck1hcmsgPSAwOwogICAgIG1fbnVyc2VyeVdhdGVyTWFy
ayA9IDA7CiAKLSAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6
ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkKKyAgICBmb3IgKHNp
emVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBj
ZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgewogICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUp
LnJlc2V0KCk7CisgICAgICAgIGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLnJlc2V0
KCk7CisgICAgfQogCi0gICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBpbXByZWNpc2VTdGVwOyBj
ZWxsU2l6ZSA8PSBpbXByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IGltcHJlY2lzZVN0ZXApCisg
ICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBpbXByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBpbXBy
ZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IGltcHJlY2lzZVN0ZXApIHsKICAgICAgICAgYWxsb2Nh
dG9yRm9yKGNlbGxTaXplKS5yZXNldCgpOworICAgICAgICBkZXN0cnVjdG9yQWxsb2NhdG9yRm9y
KGNlbGxTaXplKS5yZXNldCgpOworICAgIH0KIH0KIAogdm9pZCBNYXJrZWRTcGFjZTo6Y2Fub25p
Y2FsaXplQ2VsbExpdmVuZXNzRGF0YSgpCiB7Ci0gICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBw
cmVjaXNlU3RlcDsgY2VsbFNpemUgPD0gcHJlY2lzZUN1dG9mZjsgY2VsbFNpemUgKz0gcHJlY2lz
ZVN0ZXApCisgICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBwcmVjaXNlU3RlcDsgY2VsbFNpemUg
PD0gcHJlY2lzZUN1dG9mZjsgY2VsbFNpemUgKz0gcHJlY2lzZVN0ZXApIHsKICAgICAgICAgYWxs
b2NhdG9yRm9yKGNlbGxTaXplKS56YXBGcmVlTGlzdCgpOworICAgICAgICBkZXN0cnVjdG9yQWxs
b2NhdG9yRm9yKGNlbGxTaXplKS56YXBGcmVlTGlzdCgpOworICAgIH0KIAotICAgIGZvciAoc2l6
ZV90IGNlbGxTaXplID0gaW1wcmVjaXNlU3RlcDsgY2VsbFNpemUgPD0gaW1wcmVjaXNlQ3V0b2Zm
OyBjZWxsU2l6ZSArPSBpbXByZWNpc2VTdGVwKQorICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0g
aW1wcmVjaXNlU3RlcDsgY2VsbFNpemUgPD0gaW1wcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBp
bXByZWNpc2VTdGVwKSB7CiAgICAgICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkuemFwRnJlZUxp
c3QoKTsKKyAgICAgICAgZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihjZWxsU2l6ZSkuemFwRnJlZUxp
c3QoKTsKKyAgICB9CiB9CiAKIApAQCAtMTA3LDcgKzExMyw3IEBAIGlubGluZSB2b2lkIFRha2VJ
ZlVubWFya2VkOjpvcGVyYXRvcigpKE1hcmtlZEJsb2NrKiBibG9jaykKICAgICBpZiAoIWJsb2Nr
LT5tYXJrQ291bnRJc1plcm8oKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fbWFya2Vk
U3BhY2UtPmFsbG9jYXRvckZvcihibG9jay0+Y2VsbFNpemUoKSkucmVtb3ZlQmxvY2soYmxvY2sp
OworICAgIG1fbWFya2VkU3BhY2UtPmFsbG9jYXRvckZvcihibG9jaykucmVtb3ZlQmxvY2soYmxv
Y2spOwogICAgIG1fZW1wdGllcy5hcHBlbmQoYmxvY2spOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkU3BhY2UuaAppbmRleCAyMWEwYjQ4ZGU4ZDJkOTNlMzE5ZmU0MmI5Y2U2
NTAzOTRhZGMxNTkyLi43ZGY2OGYwYzJlMjgwNzIyODgzYTVhNDQyNzU4ZjQ5MzI2ZWJjNWY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKQEAgLTUyLDcgKzUyLDEw
IEBAIHB1YmxpYzoKICAgICBNYXJrZWRTcGFjZShIZWFwKik7CiAKICAgICBNYXJrZWRBbGxvY2F0
b3ImIGFsbG9jYXRvckZvcihzaXplX3QpOwotICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7Cisg
ICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3IoTWFya2VkQmxvY2sqKTsKKyAgICBNYXJr
ZWRBbGxvY2F0b3ImIGRlc3RydWN0b3JBbGxvY2F0b3JGb3Ioc2l6ZV90KTsKKyAgICB2b2lkKiBh
bGxvY2F0ZVdpdGhEZXN0cnVjdG9yKHNpemVfdCk7CisgICAgdm9pZCogYWxsb2NhdGVXaXRob3V0
RGVzdHJ1Y3RvcihzaXplX3QpOwogICAgIAogICAgIHZvaWQgcmVzZXRBbGxvY2F0b3JzKCk7CiAK
QEAgLTg2LDggKzg5LDE0IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBpbXBy
ZWNpc2VDdXRvZmYgPSBtYXhDZWxsU2l6ZTsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGltcHJl
Y2lzZUNvdW50ID0gaW1wcmVjaXNlQ3V0b2ZmIC8gaW1wcmVjaXNlU3RlcDsKIAotICAgIEZpeGVk
QXJyYXk8TWFya2VkQWxsb2NhdG9yLCBwcmVjaXNlQ291bnQ+IG1fcHJlY2lzZVNpemVDbGFzc2Vz
OwotICAgIEZpeGVkQXJyYXk8TWFya2VkQWxsb2NhdG9yLCBpbXByZWNpc2VDb3VudD4gbV9pbXBy
ZWNpc2VTaXplQ2xhc3NlczsKKyAgICBzdHJ1Y3QgU3Vic3BhY2UgeworICAgICAgICBGaXhlZEFy
cmF5PE1hcmtlZEFsbG9jYXRvciwgcHJlY2lzZUNvdW50PiBwcmVjaXNlQWxsb2NhdG9yczsKKyAg
ICAgICAgRml4ZWRBcnJheTxNYXJrZWRBbGxvY2F0b3IsIGltcHJlY2lzZUNvdW50PiBpbXByZWNp
c2VBbGxvY2F0b3JzOworICAgIH07CisKKyAgICBTdWJzcGFjZSBtX2Rlc3RydWN0b3JTcGFjZTsK
KyAgICBTdWJzcGFjZSBtX25vcm1hbFNwYWNlOworCiAgICAgc2l6ZV90IG1fd2F0ZXJNYXJrOwog
ICAgIHNpemVfdCBtX251cnNlcnlXYXRlck1hcms7CiAgICAgSGVhcCogbV9oZWFwOwpAQCAtMTI0
LDIzICsxMzMsNDUgQEAgaW5saW5lIE1hcmtlZEFsbG9jYXRvciYgTWFya2VkU3BhY2U6OmFsbG9j
YXRvckZvcihzaXplX3QgYnl0ZXMpCiB7CiAgICAgQVNTRVJUKGJ5dGVzICYmIGJ5dGVzIDw9IG1h
eENlbGxTaXplKTsKICAgICBpZiAoYnl0ZXMgPD0gcHJlY2lzZUN1dG9mZikKLSAgICAgICAgcmV0
dXJuIG1fcHJlY2lzZVNpemVDbGFzc2VzWyhieXRlcyAtIDEpIC8gcHJlY2lzZVN0ZXBdOwotICAg
IHJldHVybiBtX2ltcHJlY2lzZVNpemVDbGFzc2VzWyhieXRlcyAtIDEpIC8gaW1wcmVjaXNlU3Rl
cF07CisgICAgICAgIHJldHVybiBtX25vcm1hbFNwYWNlLnByZWNpc2VBbGxvY2F0b3JzWyhieXRl
cyAtIDEpIC8gcHJlY2lzZVN0ZXBdOworICAgIHJldHVybiBtX25vcm1hbFNwYWNlLmltcHJlY2lz
ZUFsbG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBpbXByZWNpc2VTdGVwXTsKIH0KIAotaW5saW5lIHZv
aWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0ZShzaXplX3QgYnl0ZXMpCitpbmxpbmUgTWFya2VkQWxs
b2NhdG9yJiBNYXJrZWRTcGFjZTo6YWxsb2NhdG9yRm9yKE1hcmtlZEJsb2NrKiBibG9jaykKK3sK
KyAgICBpZiAoYmxvY2stPmNlbGxzTmVlZERlc3RydWN0aW9uKCkpCisgICAgICAgIHJldHVybiBk
ZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJsb2NrLT5jZWxsU2l6ZSgpKTsKKyAgICByZXR1cm4gYWxs
b2NhdG9yRm9yKGJsb2NrLT5jZWxsU2l6ZSgpKTsKK30KKworaW5saW5lIE1hcmtlZEFsbG9jYXRv
ciYgTWFya2VkU3BhY2U6OmRlc3RydWN0b3JBbGxvY2F0b3JGb3Ioc2l6ZV90IGJ5dGVzKQorewor
ICAgIEFTU0VSVChieXRlcyAmJiBieXRlcyA8PSBtYXhDZWxsU2l6ZSk7CisgICAgaWYgKGJ5dGVz
IDw9IHByZWNpc2VDdXRvZmYpCisgICAgICAgIHJldHVybiBtX2Rlc3RydWN0b3JTcGFjZS5wcmVj
aXNlQWxsb2NhdG9yc1soYnl0ZXMgLSAxKSAvIHByZWNpc2VTdGVwXTsKKyAgICByZXR1cm4gbV9k
ZXN0cnVjdG9yU3BhY2UuaW1wcmVjaXNlQWxsb2NhdG9yc1soYnl0ZXMgLSAxKSAvIGltcHJlY2lz
ZVN0ZXBdOworfQorCitpbmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlV2l0aG91dERl
c3RydWN0b3Ioc2l6ZV90IGJ5dGVzKQogewogICAgIHJldHVybiBhbGxvY2F0b3JGb3IoYnl0ZXMp
LmFsbG9jYXRlKCk7CiB9CiAKK2lubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVXaXRo
RGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpCit7CisgICAgcmV0dXJuIGRlc3RydWN0b3JBbGxvY2F0
b3JGb3IoYnl0ZXMpLmFsbG9jYXRlKCk7Cit9CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9y
PiBpbmxpbmUgdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBNYXJrZWRTcGFjZTo6Zm9yRWFj
aEJsb2NrKEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
cmVjaXNlQ291bnQ7ICsraSkgewotICAgICAgICBtX3ByZWNpc2VTaXplQ2xhc3Nlc1tpXS5mb3JF
YWNoQmxvY2soZnVuY3Rvcik7CisgICAgICAgIG1fbm9ybWFsU3BhY2UucHJlY2lzZUFsbG9jYXRv
cnNbaV0uZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAgICAgICBtX2Rlc3RydWN0b3JTcGFjZS5w
cmVjaXNlQWxsb2NhdG9yc1tpXS5mb3JFYWNoQmxvY2soZnVuY3Rvcik7CiAgICAgfQogCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbXByZWNpc2VDb3VudDsgKytpKSB7Ci0gICAgICAgIG1f
aW1wcmVjaXNlU2l6ZUNsYXNzZXNbaV0uZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAgICAgICBt
X25vcm1hbFNwYWNlLmltcHJlY2lzZUFsbG9jYXRvcnNbaV0uZm9yRWFjaEJsb2NrKGZ1bmN0b3Ip
OworICAgICAgICBtX2Rlc3RydWN0b3JTcGFjZS5pbXByZWNpc2VBbGxvY2F0b3JzW2ldLmZvckVh
Y2hCbG9jayhmdW5jdG9yKTsKICAgICB9CiAKICAgICByZXR1cm4gZnVuY3Rvci5yZXR1cm5WYWx1
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggYzM1N2U4YzM5YjI0ZWJmNzM2NDJiZWE2
MmRhZjdiNDYwYzc3NmVmOS4uYzA2OGY2ZmM3ZmJhYjgyZTI5ZDRhY2JkZWNlMTdjNzIwMzkxZTRk
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0zMjksNyArMzI5LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFdyaXRlQmFycmllcihSZWdpc3RlcklEIG93bmVyLCBS
ZWdpc3RlcklEIHZhbHVlVGFnLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFJlZ2lzdGVySUQgc2NyYXRj
aDIsIFdyaXRlQmFycmllck1vZGUsIFdyaXRlQmFycmllclVzZUtpbmQpOwogICAgICAgICB2b2lk
IGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0
ZXJJRCBzY3JhdGNoLCBXcml0ZUJhcnJpZXJNb2RlLCBXcml0ZUJhcnJpZXJVc2VLaW5kKTsKIAot
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIHR5cGVuYW1lIFN0cnVjdHVyZVR5
cGU+IHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdChTdHJ1Y3R1cmVUeXBlLCBSZWdpc3Rl
cklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ2xhc3NUeXBlLCBib29sIGRlc3RydWN0b3IsIHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+
IHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdChTdHJ1Y3R1cmVUeXBlLCBSZWdpc3RlcklE
IHJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdm9pZCBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQgc3RydWN0dXJlLCBSZWdpc3Rl
cklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKTsKICAgICAgICAgdm9pZCBlbWl0QWxs
b2NhdGVKU0Z1bmN0aW9uKEZ1bmN0aW9uRXhlY3V0YWJsZSosIFJlZ2lzdGVySUQgc2NvcGVDaGFp
biwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CiAgICAgICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAppbmRleCAwMTU0
NWZiOGM3Mjc0NTA5OGI0YjZhN2U4ODQwMjZjYTcxMzQzZDE1Li5jMTc3NjlkODU5YjcyYWY4ZTZh
OWYyNjZjMTkyOTM4YjQ2NGRiOWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZU1ldGhvZHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZU1ldGhvZHMuaApAQCAtMzk5LDkgKzM5OSwxMyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUNoYXIodW5zaWduZWQgc3JjKQogICAgIHJl
dHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5pc1N0cmluZygpICYmIGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmFzQ2VsbCgpKS0+bGVuZ3RoKCkgPT0gMTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1l
IENsYXNzVHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZT4gaW5saW5lIHZvaWQgSklUOjplbWl0
QWxsb2NhdGVCYXNpY0pTT2JqZWN0KFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBSZWdpc3RlcklE
IHJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9yYWdlUHRyKQordGVtcGxhdGUgPHR5cGVuYW1lIENsYXNz
VHlwZSwgYm9vbCBkZXN0cnVjdG9yLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3QoU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUs
IFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIpCiB7Ci0gICAgTWFya2Vk
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmbV9nbG9iYWxEYXRhLT5oZWFwLmFsbG9jYXRvckZvck9i
amVjdChzaXplb2YoQ2xhc3NUeXBlKSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3Ig
PSAwOworICAgIGlmIChkZXN0cnVjdG9yKQorICAgICAgICBhbGxvY2F0b3IgPSAmbV9nbG9iYWxE
YXRhLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhEZXN0cnVjdG9yKHNpemVvZihDbGFzc1R5
cGUpKTsKKyAgICBlbHNlCisgICAgICAgIGFsbG9jYXRvciA9ICZtX2dsb2JhbERhdGEtPmhlYXAu
YWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3Ioc2l6ZW9mKENsYXNzVHlwZSkpOwog
ICAgIGxvYWRQdHIoJmFsbG9jYXRvci0+bV9maXJzdEZyZWVDZWxsLCByZXN1bHQpOwogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0KSk7CiAKQEAgLTQyNSwxMiArNDI5
LDEyIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGUsIHR5cGVuYW1lIFN0cnVjdHVyZVR5
cGU+IGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvY2F0ZUpTRmluYWxPYmplY3QoVCBzdHJ1Y3R1cmUsIFJl
Z2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiB7Ci0gICAgZW1pdEFsbG9jYXRl
QmFzaWNKU09iamVjdDxKU0ZpbmFsT2JqZWN0PihzdHJ1Y3R1cmUsIHJlc3VsdCwgc2NyYXRjaCk7
CisgICAgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdDxKU0ZpbmFsT2JqZWN0LCBmYWxzZSwgVD4o
c3RydWN0dXJlLCByZXN1bHQsIHNjcmF0Y2gpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRB
bGxvY2F0ZUpTRnVuY3Rpb24oRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBSZWdpc3Rl
cklEIHNjb3BlQ2hhaW4sIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0b3JhZ2VQdHIp
CiB7Ci0gICAgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdDxKU0Z1bmN0aW9uPihUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+bmFtZWRGdW5jdGlvblN0cnVjdHVyZSgp
KSwgcmVzdWx0LCBzdG9yYWdlUHRyKTsKKyAgICBlbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0PEpT
RnVuY3Rpb24sIHRydWU+KFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT5uYW1lZEZ1bmN0aW9uU3RydWN0dXJlKCkpLCByZXN1bHQsIHN0b3JhZ2VQdHIpOwogCiAgICAg
Ly8gc3RvcmUgdGhlIGZ1bmN0aW9uJ3Mgc2NvcGUgY2hhaW4KICAgICBzdG9yZVB0cihzY29wZUNo
YWluLCBBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKaW5kZXggYzg0ZmI1YjEw
NmE1OGYzYjM4NTk4MzRkY2JjYjQ3ZTQ0MjAxODQ5ZS4uNzFkNjc4ZTJjZDhiZWI0YzA5ZjJiMjJj
MGM5NzQ5NTFlNjNkM2Q5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5jcHAKQEAgLTQyLDYgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIG5hbWVzcGFjZSBK
U0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTQXJyYXkpOworQVNTRVJUX0hBU19U
UklWSUFMX0RFU1RSVUNUT1IoSlNBcnJheSk7CiAKIC8vIE92ZXJ2aWV3IG9mIEpTQXJyYXkKIC8v
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKaW5kZXggYTMzNTRjNjAyNGIw
OTczYzlmZjJhMGU3ZmVhZDczZDMwZGY1ZmZmMy4uNjhlMzhjZjJjY2VmN2IzMzZkMzc0OGIxMmE3
NTk2MzQ0ZDcxNWRmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaApA
QCAtMTM1LDIzICsxMzUsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc3RhdGljIHZv
aWQgZmluYWxpemUoSlNDZWxsKik7CiAKLSAgICAgICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBp
bml0aWFsTGVuZ3RoID0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgSlNBcnJheSogYXJyYXkg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBK
U0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBhcnJheS0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAgICAgICByZXR1cm4g
YXJyYXk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZShKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCk7CiAKICAgICAg
ICAgLy8gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCBpcyB1c2VkIGZvciBmYXN0IGNvbnN0cnVjdGlv
biBvZiBhcnJheXMgd2hvc2Ugc2l6ZSBhbmQKICAgICAgICAgLy8gY29udGVudHMgYXJlIGtub3du
IGF0IHRpbWUgb2YgY3JlYXRpb24uIENsaWVudHMgb2YgdGhpcyBpbnRlcmZhY2UgbXVzdDoKICAg
ICAgICAgLy8gICAtIG51bGwtY2hlY2sgdGhlIHJlc3VsdCAoaW5kaWNhdGluZyBvdXQgb2YgbWVt
b3J5LCBvciBvdGhlcndpc2UgdW5hYmxlIHRvIGFsbG9jYXRlIHZlY3RvcikuCiAgICAgICAgIC8v
ICAgLSBjYWxsICdpbml0aWFsaXplSW5kZXgnIGZvciBhbGwgcHJvcGVydGllcyBpbiBzZXF1ZW5j
ZSwgZm9yIDAgPD0gaSA8IGluaXRpYWxMZW5ndGguCiAgICAgICAgIC8vICAgLSBjYWxsZWQgJ2Nv
bXBsZXRlSW5pdGlhbGl6YXRpb24nIGFmdGVyIGFsbCBwcm9wZXJ0aWVzIGhhdmUgYmVlbiBpbml0
aWFsaXplZC4KLSAgICAgICAgc3RhdGljIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQg
aW5pdGlhbExlbmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0Fy
cmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXktPnRy
eUZpbmlzaENyZWF0aW9uVW5pbml0aWFsaXplZChnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsK
LSAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKIAog
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShK
U09iamVjdCosIEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0
b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIApAQCAtMjk5LDYgKzI5MCwxOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCogbV9zdWJjbGFzc0RhdGE7IC8vIEEgSlNBcnJheSBzdWJj
bGFzcyBjYW4gdXNlIHRoaXMgdG8gZmlsbCB0aGUgdmVjdG9yIGxhemlseS4KICAgICB9OwogCisg
ICAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQorICAgIHsK
KyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Fy
cmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7Cisg
ICAgICAgIGFycmF5LT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhLCBpbml0aWFsTGVuZ3RoKTsK
KyAgICAgICAgcmV0dXJuIGFycmF5OworICAgIH0KKworICAgIGlubGluZSBKU0FycmF5KiBKU0Fy
cmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCisgICAgeworICAgICAg
ICBKU0FycmF5KiBhcnJheSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGds
b2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAg
cmV0dXJuIGFycmF5LT50cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwg
aW5pdGlhbExlbmd0aCk7CisgICAgfQorCiAgICAgSlNBcnJheSogYXNBcnJheShKU1ZhbHVlKTsK
IAogICAgIGlubGluZSBKU0FycmF5KiBhc0FycmF5KEpTQ2VsbCogY2VsbCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKaW5kZXggYTM2YmI3ZDU4NTM3YmNiZGYwYzE0ZGRhZjRl
NmIwNDUzYWI0YjM0NS4uOWE0Y2EwMjY1MzE4YTVhMGQ1OTY3NzQzZDhiNjllZTEwMWNkZDMwMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKQEAgLTMwOSwxNCArMzA5LDIy
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gaXNDZWxsKCkgPyBhc0NlbGwoKS0+
dG9PYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0KSA6IHRvT2JqZWN0U2xvd0Nhc2UoZXhlYywgZ2xv
YmFsT2JqZWN0KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCogYWxs
b2NhdGVDZWxsKEhlYXAmIGhlYXApCisgICAgLy8gV3JpdGUgbWFudWFsIHNwZWNpYWxpemF0aW9u
cyBmb3IgdGhpcyBzdHJ1Y3QgdGVtcGxhdGUgaWYgeW91IGNhcmUgYWJvdXQgbm9uLWNsYW5nIGNv
bXBpbGVycy4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBUPgorICAgIHN0cnVjdCBOZWVkc0Rlc3RydWN0
b3IgeworICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IF9faGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcihUKTsKKyAgICB9OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IE5lZWRzRGVzdHJ1Y3RvckFyZyA9IE5lZWRzRGVzdHJ1Y3RvcjxUPiA+IHZvaWQqIGFsbG9jYXRl
Q2VsbChIZWFwJiBoZWFwKQogICAgIHsKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKICAgICAg
ICAgQVNTRVJUKHNpemVvZihUKSA9PSBUOjpzX2luZm8uY2VsbFNpemUpOwogICAgICAgICBBU1NF
UlQoIWhlYXAuZ2xvYmFsRGF0YSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKICAgICAgICAg
aGVhcC5nbG9iYWxEYXRhKCktPnNldEluaXRpYWxpemluZ09iamVjdCh0cnVlKTsKICNlbmRpZgot
ICAgICAgICBKU0NlbGwqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXAuYWxsb2Nh
dGUoc2l6ZW9mKFQpKSk7CisgICAgICAgIEpTQ2VsbCogcmVzdWx0ID0gKE5lZWRzRGVzdHJ1Y3Rv
ckFyZzo6dmFsdWUpIAorICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwLmFs
bG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZW9mKFQpKSkKKyAgICAgICAgICAgIDogc3RhdGlj
X2Nhc3Q8SlNDZWxsKj4oaGVhcC5hbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKHNpemVvZihUKSkpOwog
ICAgICAgICByZXN1bHQtPmNsZWFyU3RydWN0dXJlKCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCmluZGV4
IGE0NDNmZGE4NmMxYWE3MjJhMjFjNWFlMWMzNGM4MTIzMzUzMjQwOTYuLjlmMjAzNWQwM2QyOWNi
MmE5MDI1MGQzZTNlMjhjNWYxZWQ5NGY0MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5f
Q0VMTChKU05vbkZpbmFsT2JqZWN0KTsKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNGaW5h
bE9iamVjdCk7CiAKIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEpTT2JqZWN0KTsKK0FT
U0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEpTRmluYWxPYmplY3QpOwogCiBjb25zdCBjaGFy
KiBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IgPSAiQXR0ZW1wdGVkIHRvIGFz
c2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAppbmRleCA0MzMyNDljMjA0NThjMDdlNTk4NTllODQ4MTgwMDAwMWYzNTkw
NjFmLi40NTI3NzcyNGM3ODUxOGQxMGEwOGFmMmZjZjc3MTkwZGUyZjJkYWYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKQEAgLTM0OSw2ICszNDksOCBAQCBDT01Q
SUxFX0FTU0VSVCgoSlNGaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNpdHkgPj0gSlNOb25G
aW5hbE9iamVjdF9pbmxpbmVTdAogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9pbmxp
bmVTdG9yYWdlW0pTTm9uRmluYWxPYmplY3RfaW5saW5lU3RvcmFnZUNhcGFjaXR5XTsKICAgICB9
OwogCisgICAgY2xhc3MgSlNGaW5hbE9iamVjdDsKKwogICAgIC8vIEpTRmluYWxPYmplY3QgaXMg
YSB0eXBlIG9mIEpTT2JqZWN0IHRoYXQgY29udGFpbnMgc3VmZmljZW50IGludGVybmFsCiAgICAg
Ly8gc3RvcmFnZSB0byBmdWxseSBtYWtlIHVzZSBvZiB0aGUgY29sbG9jdG9yIGNlbGwgY29udGFp
bmluZyBpdC4KICAgICBjbGFzcyBKU0ZpbmFsT2JqZWN0IDogcHVibGljIEpTT2JqZWN0IHsKQEAg
LTM1NywxMyArMzU5LDcgQEAgQ09NUElMRV9BU1NFUlQoKEpTRmluYWxPYmplY3RfaW5saW5lU3Rv
cmFnZUNhcGFjaXR5ID49IEpTTm9uRmluYWxPYmplY3RfaW5saW5lU3QKICAgICBwdWJsaWM6CiAg
ICAgICAgIHR5cGVkZWYgSlNPYmplY3QgQmFzZTsKIAotICAgICAgICBzdGF0aWMgSlNGaW5hbE9i
amVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEpTRmluYWxPYmplY3QqIGZpbmFsT2JqZWN0ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNGaW5hbE9iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIEpTRmluYWxP
YmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgZmluYWxP
YmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmluYWxPYmplY3Q7Ci0gICAgICAgIH0KLQorICAgICAgICBzdGF0aWMgSlNGaW5hbE9i
amVjdCogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwogICAgICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewogICAg
ICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhGaW5hbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7CkBAIC0zOTMsNiArMzg5LDEzIEBAIENPTVBJTEVfQVNTRVJUKChKU0ZpbmFsT2Jq
ZWN0X2lubGluZVN0b3JhZ2VDYXBhY2l0eSA+PSBKU05vbkZpbmFsT2JqZWN0X2lubGluZVN0CiAg
ICAgICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gbV9pbmxpbmVTdG9yYWdlW0pTRmluYWxP
YmplY3RfaW5saW5lU3RvcmFnZUNhcGFjaXR5XTsKICAgICB9OwogCitpbmxpbmUgSlNGaW5hbE9i
amVjdCogSlNGaW5hbE9iamVjdDo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCit7CisgICAgSlNGaW5hbE9iamVjdCogZmluYWxPYmplY3QgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU0ZpbmFsT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgSlNGaW5hbE9i
amVjdChleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSk7CisgICAgZmluYWxPYmplY3QtPmZp
bmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgcmV0dXJuIGZpbmFsT2JqZWN0
OworfQorCiBpbmxpbmUgYm9vbCBpc0pTRmluYWxPYmplY3QoSlNDZWxsKiBjZWxsKQogewogICAg
IHJldHVybiBjZWxsLT5jbGFzc0luZm8oKSA9PSAmSlNGaW5hbE9iamVjdDo6c19pbmZvOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAppbmRleCAw
M2JjZDQyOTI5ZDUwMmI4ZWFlOGY1YmMzYmY3M2FhODBhYWJmNmM3Li45MGI2ZTQyN2I0MDRiMTI0
ZmZmYzBmYzFkYmFmNzJlOTgyMDI1NjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcApAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQqIEpTRE9N
V2luZG93U2hlbGw6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSkKICAgICBBU1NFUlQoIWhlYXAu
Z2xvYmFsRGF0YSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKICAgICBoZWFwLmdsb2JhbERh
dGEoKS0+c2V0SW5pdGlhbGl6aW5nT2JqZWN0KHRydWUpOwogI2VuZGlmCi0gICAgcmV0dXJuIGhl
YXAuYWxsb2NhdGUoc2l6ZSk7CisgICAgcmV0dXJuIGhlYXAuYWxsb2NhdGVXaXRoRGVzdHJ1Y3Rv
cihzaXplKTsKIH0KIAogLy8gLS0tLQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125649</attachid>
            <date>2012-02-06 08:11:13 -0800</date>
            <delta_ts>2012-02-08 08:42:50 -0800</delta_ts>
            <desc>Fixing some build errors</desc>
            <filename>bug-77761-20120206081112.patch</filename>
            <type>text/plain</type>
            <size>36458</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NzczCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
YTlmMGM4ZWM1OGMwYjdjMjk5YjBjNTJkMzY5MGI3NDhjOGRhMTBlLi40NjUyMjMzNzM5NmM2OGMx
MTQ1Y2FjMjE4MTYzMTYzMjcwYmM3MzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NyBAQAorMjAxMi0wMi0wNiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIFNwbGl0IE1hcmtlZFNwYWNlIGludG8gZGVzdHJ1Y3RvciBhbmQg
ZGVzdHJ1Y3Rvci1mcmVlIHN1YnNwYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Nzc3NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KTogU3dpdGNo
ZWQgb3ZlciB0byB1c2UgZGVzdHJ1Y3Rvci1mcmVlIHNwYWNlLgorICAgICAgICAqIGhlYXAvSGVh
cC5oOgorICAgICAgICAoV2ViQ29yZSk6IEZvcndhcmQgZGVjbGFyYXRpb24gb2YgSlNET01XaW5k
b3dTaGVsbCwgd2hpY2ggaGFzIGl0cyBvd24gc3BlY2lhbCBvcGVyYXRvciBuZXcgdGhhdCBuZWVk
cyAKKyAgICAgICAgdG8gY2FsbCBhbGxvY2F0ZVdpdGhEZXN0cnVjdG9yLgorICAgICAgICAoSlND
OjpIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3Rvcik6IEFkZGVkIHRvIGdp
dmUgY2xpZW50cyAoZS5nLiB0aGUgSklUKSB0aGUgYWJpbGl0eSB0byAKKyAgICAgICAgcGljayB3
aGljaCBzdWJzcGFjZSB0aGV5IHdhbnQgdG8gYWxsb2NhdGUgb3V0IG9mLgorICAgICAgICAoSlND
OjpIZWFwOjphbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3Rvcik6IERpdHRvLgorICAgICAg
ICAoSGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRlV2l0aERlc3RydWN0b3IpOiBB
ZGRlZCBwcml2YXRlIGZ1bmN0aW9uIGZvciBDZWxsQWxsb2NhdG9yIHRvIHVzZS4KKyAgICAgICAg
KEpTQyk6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IpOiBE
aXR0by4KKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6IEFkZGVkIHRoZSBjZWxs
c05lZWREZXN0cnVjdGlvbiBmbGFnIHRvIGFsbG9jYXRvcnMgc28gdGhhdCB0aGV5IGNhbiBhbGxv
Y2F0ZSAKKyAgICAgICAgdGhlaXIgTWFya2VkQmxvY2tzIGNvcnJlY3RseS4KKyAgICAgICAgKEpT
Qzo6TWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKToKKyAgICAgICAgKiBoZWFwL01hcmtl
ZEFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OmNlbGxzTmVlZERl
c3RydWN0aW9uKToKKyAgICAgICAgKE1hcmtlZEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6Ok1h
cmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6aW5pdCk6IFJlcGxhY2VkIGN1c3RvbSBzZXQgZnVuY3Rp
b25zLCB3aGljaCB3ZXJlIG9ubHkgdXNlZCB1cG9uIGluaXRpYWxpemF0aW9uLCB3aXRoCisgICAg
ICAgIGFuIGluaXQgZnVuY3Rpb24gdGhhdCBkb2VzIGFsbCBvZiB0aGF0IHN0dWZmIGluIGZld2Vy
IGxpbmVzLgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpN
YXJrZWRCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OnJlY3ljbGUp
OgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6TWFya2VkQmxvY2spOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6Y2FsbERlc3RydWN0b3IpOiBUZW1wbGF0aXplZCwgYWxvbmcgd2l0aCBz
cGVjaWFsaXplZFN3ZWVwIGFuZCBzd2VlcFNsb3dDYXNlLCB0byBtYWtlIAorICAgICAgICBjaGVj
a2luZyB0aGUgbV9jZWxsc05lZWREZXN0cnVjdG9yIGZsYWcgZmFzdGVyLgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OnNwZWNpYWxpemVkU3dlZXApOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6c3dlZXBTbG93Q2FzZSk6CisgICAgICAgICogaGVhcC9NYXJr
ZWRCbG9jay5oOgorICAgICAgICAoTWFya2VkQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJrZWRC
bG9jazo6c3dlZXApOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OmNlbGxzTmVlZERlc3RydWN0aW9uKToKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmNwcDoK
KyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6Ok1hcmtlZFNwYWNlKToKKyAgICAgICAgKEpTQzo6
TWFya2VkU3BhY2U6OnJlc2V0QWxsb2NhdG9ycyk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNl
OjpjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKToKKyAgICAgICAgKEpTQzo6VGFrZUlmVW5t
YXJrZWQ6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAg
ICAgKE1hcmtlZFNwYWNlKToKKyAgICAgICAgKFN1YnNwYWNlKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkU3BhY2U6OmFsbG9jYXRvckZvcik6IE5lZWRlZCBmdW5jdGlvbiB0byBkaWZmZXJlbnRpYXRl
IGJldHdlZW4gdGhlIHR3byBicm9hZCBzdWJzcGFjZXMgb2YgCisgICAgICAgIGFsbG9jYXRvcnMu
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6ZGVzdHJ1Y3RvckFs
bG9jYXRvckZvcik6IERpdHRvLgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YWxsb2NhdGVX
aXRob3V0RGVzdHJ1Y3Rvcik6IERpdHRvLgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YWxs
b2NhdGVXaXRoRGVzdHJ1Y3Rvcik6IERpdHRvLgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6
Zm9yRWFjaEJsb2NrKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElu
bGluZU1ldGhvZHMuaDogTW9kaWZpZWQgdG8gdXNlIHRoZSBwcm9wZXIgYWxsb2NhdG9yIGZvciBK
U0ZpbmFsT2JqZWN0cyBhbmQgb3RoZXJzLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBbGxvY2F0
ZUJhc2ljSlNPYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBbGxvY2F0ZUpTRmluYWxP
YmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBbGxvY2F0ZUpTRnVuY3Rpb24pOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNBcnJheSk6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKE5lZWRzRGVzdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkNlbGxB
bGxvY2F0b3I6OmFsbG9jYXRlKTogV2UgdXNlIGEgc3RydWN0IHNpbmNlIG9sZGVyIGNvbXBpbGVy
cyBkb24ndCBhbGxvdyB5b3UgdG8gaGF2ZSBkZWZhdWx0IAorICAgICAgICB0ZW1wbGF0ZSBwYXJh
bWV0ZXJzIG9uIGZ1bmN0aW9uIHRlbXBsYXRlcy4KKyAgICAgICAgKEpTQzo6YWxsb2NhdGVDZWxs
KTogV3JhcHBlciBmb3IgY2FsbGluZyB0aGUgcHJvcGVyIENlbGxBbGxvY2F0b3IgY2FsbCBzbyB0
aGF0IHdlIGRvbid0IGhhdmUgdG8gY2hhbmdlIAorICAgICAgICBhbGwgb2YgdGhlIGNsaWVudHMg
b2YgYWxsb2NhdGVDZWxsIHRvIHVzZSBDZWxsQWxsb2NhdG9yOjphbGxvY2F0ZS4KKyAgICAgICAg
KiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGlt
ZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTRmluYWxPYmplY3QpOgor
ICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0OjpjcmVhdGUpOgorCiAyMDEyLTAyLTA1ICBHeXV5
b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0NNQUtFXSBT
dXBwb3J0IGphdmFzY3JpcHRjb3JlIHRlc3QgZm9yIEVGTCBwb3J0LiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBh
N2VlYjc5Y2Y5YjZhYTYwNmMzZWJmZGNmOTAzOTY1NzkwNDFmMjJlLi4xMzA2NTRjOTczNmJlNzc5
OWExMWY4MzE1NjIyNGM4MWMwZTJmMmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MTItMDItMDYgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAg
ICAgICBTcGxpdCBNYXJrZWRTcGFjZSBpbnRvIGRlc3RydWN0b3IgYW5kIGRlc3RydWN0b3ItZnJl
ZSBzdWJzcGFjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc3NzYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLiAKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hl
bGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dTaGVsbDo6b3BlcmF0b3IgbmV3
KTogQ2hhbmdlZCB0byB1c2UgdGhlIG5ldyBIZWFwOjphbGxvY2F0ZVdpdGhEZXN0cnVjdG9yLgor
CiAyMDEyLTAyLTA1ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZW5hbWUgW0pTQ0N1c3RvbSpdIElETCB0byBbSlNDdXN0b20qXSBJREwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCA0OGJiZGM3ZjA2
OGZiZDhhNzIyZjk4YzE1MzVjMjQ5ZTg0MzQ0NWRhLi41ZDFlZGMwNGQzYzFmM2IxODRiOGI4MDIy
NTlhMjQzYWQ0ZGM4NjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCkBAIC0xNTUzLDcgKzE1NTMsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KFQgc3RydWN0
dXJlLCBHUFJSZWcgcmVzdWx0R1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0JiBzbG93UGF0aCkKICAgICB7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxs
b2NhdG9yID0gJm1faml0Lmdsb2JhbERhdGEoKS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3Qoc2l6
ZW9mKEpTRmluYWxPYmplY3QpKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3Ig
PSAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0
cnVjdG9yKHNpemVvZihKU0ZpbmFsT2JqZWN0KSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5s
b2FkUHRyKCZhbGxvY2F0b3ItPm1fZmlyc3RGcmVlQ2VsbCwgcmVzdWx0R1BSKTsKICAgICAgICAg
c2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHJlc3VsdEdQUikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IDFkMGFjNTQwNzY2
ZjJlODgyZWFiZjYxZTcyNzA3ZDdkZTZmZTkwZTUuLmY4YzE5MDljZmM1ZmNiYmVlYzAzYmMxZmQw
ZTBiYjc5OTQ0ZmE5MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTM4LDYgKzM4
LDEwIEBACiAKICNkZWZpbmUgQ09MTEVDVF9PTl9FVkVSWV9BTExPQ0FUSU9OIDAKIAorbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgSlNET01XaW5kb3dTaGVsbDsKK30KKwogbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBjbGFzcyBCdW1wU3BhY2U7CkBAIC05NSw4ICs5OSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAvLyB0cnVlIGlmIGFuIGFsbG9jYXRpb24gb3IgY29sbGVjdGlvbiBpcyBp
biBwcm9ncmVzcwogICAgICAgICBpbmxpbmUgYm9vbCBpc0J1c3koKTsKICAgICAgICAgCi0gICAg
ICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yT2JqZWN0KHNpemVfdCBieXRlcykgeyBy
ZXR1cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0b3JGb3IoYnl0ZXMpOyB9Ci0gICAgICAgIHZvaWQq
IGFsbG9jYXRlKHNpemVfdCk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9y
T2JqZWN0V2l0aG91dERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKSB7IHJldHVybiBtX29iamVjdFNw
YWNlLmFsbG9jYXRvckZvcihieXRlcyk7IH0KKyAgICAgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxv
Y2F0b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpIHsgcmV0dXJuIG1fb2Jq
ZWN0U3BhY2UuZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihieXRlcyk7IH0KICAgICAgICAgQ2hlY2tl
ZEJvb2xlYW4gdHJ5QWxsb2NhdGVTdG9yYWdlKHNpemVfdCwgdm9pZCoqKTsKICAgICAgICAgQ2hl
Y2tlZEJvb2xlYW4gdHJ5UmVhbGxvY2F0ZVN0b3JhZ2Uodm9pZCoqLCBzaXplX3QsIHNpemVfdCk7
CiAKQEAgLTE0Miw2ICsxNDYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBCdW1wU3BhY2U7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKICAgICAg
ICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgTmVlZHNEZXN0cnVjdG9yQXJnPiBmcmllbmQgc3RydWN0IENlbGxBbGxvY2F0b3I7
CisgICAgICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOworCisgICAg
ICAgIHZvaWQqIGFsbG9jYXRlV2l0aERlc3RydWN0b3Ioc2l6ZV90KTsKKyAgICAgICAgdm9pZCog
YWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QpOwogCiAgICAgICAgIHNpemVfdCB3YXRl
ck1hcmsoKTsKICAgICAgICAgc2l6ZV90IGhpZ2hXYXRlck1hcmsoKTsKQEAgLTMzNCwxMCArMzQz
LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gZm9yRWFjaFByb3RlY3RlZENl
bGwoZnVuY3Rvcik7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlKHNp
emVfdCBieXRlcykKKyAgICBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVXaXRoRGVzdHJ1Y3Rv
cihzaXplX3QgYnl0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQoaXNWYWxpZEFsbG9jYXRpb24o
Ynl0ZXMpKTsKKyAgICAgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuYWxsb2NhdGVXaXRoRGVzdHJ1
Y3RvcihieXRlcyk7CisgICAgfQorICAgIAorICAgIGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0
ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCBieXRlcykKICAgICB7CiAgICAgICAgIEFTU0VSVChp
c1ZhbGlkQWxsb2NhdGlvbihieXRlcykpOwotICAgICAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5h
bGxvY2F0ZShieXRlcyk7CisgICAgICAgIHJldHVybiBtX29iamVjdFNwYWNlLmFsbG9jYXRlV2l0
aG91dERlc3RydWN0b3IoYnl0ZXMpOwogICAgIH0KICAgICAKICAgICBpbmxpbmUgQ2hlY2tlZEJv
b2xlYW4gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdlKHNpemVfdCBieXRlcywgdm9pZCoqIG91dFB0
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCmlu
ZGV4IDgyMzlmYmFlZGZjMGM5ODE4MjgxMmExMTJjOWUxY2E0OWU3MGI1MWMuLmViNmQyYzY5MTU1
Y2NlZWJiOTEwOTI0YThkOWEyMTk4OWQ3MDZlMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcApAQCAtOTcsMTEgKzk3LDExIEBAIE1hcmtlZEJs
b2NrKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmxvY2soQWxsb2NhdGlvbkVmZm9ydCBhbGxv
Y2F0aW9uRWZmb3J0KQogICAgICAgICAgICAgYmxvY2sgPSAwOwogICAgIH0KICAgICBpZiAoYmxv
Y2spCi0gICAgICAgIGJsb2NrID0gTWFya2VkQmxvY2s6OnJlY3ljbGUoYmxvY2ssIG1faGVhcCwg
bV9jZWxsU2l6ZSk7CisgICAgICAgIGJsb2NrID0gTWFya2VkQmxvY2s6OnJlY3ljbGUoYmxvY2ss
IG1faGVhcCwgbV9jZWxsU2l6ZSwgbV9jZWxsc05lZWREZXN0cnVjdGlvbik7CiAgICAgZWxzZSBp
ZiAoYWxsb2NhdGlvbkVmZm9ydCA9PSBBbGxvY2F0aW9uQ2FuRmFpbCkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgZWxzZQotICAgICAgICBibG9jayA9IE1hcmtlZEJsb2NrOjpjcmVhdGUobV9oZWFw
LCBtX2NlbGxTaXplKTsKKyAgICAgICAgYmxvY2sgPSBNYXJrZWRCbG9jazo6Y3JlYXRlKG1faGVh
cCwgbV9jZWxsU2l6ZSwgbV9jZWxsc05lZWREZXN0cnVjdGlvbik7CiAgICAgCiAgICAgbV9tYXJr
ZWRTcGFjZS0+ZGlkQWRkQmxvY2soYmxvY2spOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAppbmRleCA1NjQ0YzY5MWI4N2NmN2YyM2IwMmI1NjVk
M2NkYWY2NWZkMmFlYmVjLi4xNjIwN2Y2YTVmNDNkMjViMTJjMDljYTFhMmE3ZWI0MmQyMzI1Yzc0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3Iu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaApAQCAt
MjIsNiArMjIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgemFwRnJl
ZUxpc3QoKTsKICAgICBzaXplX3QgY2VsbFNpemUoKSB7IHJldHVybiBtX2NlbGxTaXplOyB9Cisg
ICAgYm9vbCBjZWxsc05lZWREZXN0cnVjdGlvbigpIHsgcmV0dXJuIG1fY2VsbHNOZWVkRGVzdHJ1
Y3Rpb247IH0KICAgICB2b2lkKiBhbGxvY2F0ZSgpOwogICAgIEhlYXAqIGhlYXAoKSB7IHJldHVy
biBtX2hlYXA7IH0KICAgICAKQEAgLTI5LDkgKzMwLDcgQEAgcHVibGljOgogICAgIAogICAgIHZv
aWQgYWRkQmxvY2soTWFya2VkQmxvY2sqKTsKICAgICB2b2lkIHJlbW92ZUJsb2NrKE1hcmtlZEJs
b2NrKik7Ci0gICAgdm9pZCBzZXRIZWFwKEhlYXAqIGhlYXApIHsgbV9oZWFwID0gaGVhcDsgfQot
ICAgIHZvaWQgc2V0Q2VsbFNpemUoc2l6ZV90IGNlbGxTaXplKSB7IG1fY2VsbFNpemUgPSBjZWxs
U2l6ZTsgfQotICAgIHZvaWQgc2V0TWFya2VkU3BhY2UoTWFya2VkU3BhY2UqIHNwYWNlKSB7IG1f
bWFya2VkU3BhY2UgPSBzcGFjZTsgfQorICAgIHZvaWQgaW5pdChIZWFwKiwgTWFya2VkU3BhY2Uq
LCBzaXplX3QgY2VsbFNpemUsIGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24pOwogICAgIAogcHJp
dmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKCk7CkBA
IC00Myw2ICs0Miw3IEBAIHByaXZhdGU6CiAgICAgTWFya2VkQmxvY2sqIG1fY3VycmVudEJsb2Nr
OwogICAgIERvdWJseUxpbmtlZExpc3Q8SGVhcEJsb2NrPiBtX2Jsb2NrTGlzdDsKICAgICBzaXpl
X3QgbV9jZWxsU2l6ZTsKKyAgICBib29sIG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb247CiAgICAgSGVh
cCogbV9oZWFwOwogICAgIE1hcmtlZFNwYWNlKiBtX21hcmtlZFNwYWNlOwogfTsKQEAgLTUxLDEx
ICs1MSwyMCBAQCBpbmxpbmUgTWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IoKQogICAg
IDogbV9maXJzdEZyZWVDZWxsKDApCiAgICAgLCBtX2N1cnJlbnRCbG9jaygwKQogICAgICwgbV9j
ZWxsU2l6ZSgwKQorICAgICwgbV9jZWxsc05lZWREZXN0cnVjdGlvbih0cnVlKQogICAgICwgbV9o
ZWFwKDApCiAgICAgLCBtX21hcmtlZFNwYWNlKDApCiB7CiB9Ci0gICAgCisKK2lubGluZSB2b2lk
IE1hcmtlZEFsbG9jYXRvcjo6aW5pdChIZWFwKiBoZWFwLCBNYXJrZWRTcGFjZSogbWFya2VkU3Bh
Y2UsIHNpemVfdCBjZWxsU2l6ZSwgYm9vbCBjZWxsc05lZWREZXN0cnVjdGlvbikKK3sKKyAgICBt
X2hlYXAgPSBoZWFwOworICAgIG1fbWFya2VkU3BhY2UgPSBtYXJrZWRTcGFjZTsKKyAgICBtX2Nl
bGxTaXplID0gY2VsbFNpemU7CisgICAgbV9jZWxsc05lZWREZXN0cnVjdGlvbiA9IGNlbGxzTmVl
ZERlc3RydWN0aW9uOworfQorCiBpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0
ZSgpCiB7CiAgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBmaXJzdEZyZWVDZWxsID0gbV9maXJz
dEZyZWVDZWxsOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCmlu
ZGV4IGRkOTIzMzMwMDQwOTlkZmYyMDUxZTE2YWJmZTkwNDQxNzJkYjVhZGYuLmYwMDRjMzE1ODRh
ODA4ODRiOWRjNGFiOTA5N2NkNzJkNThlZjAyNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5jcHAKQEAgLTMyLDE3ICszMiwxNyBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotTWFya2VkQmxvY2sqIE1hcmtlZEJsb2NrOjpjcmVhdGUoSGVhcCogaGVhcCwgc2l6ZV90
IGNlbGxTaXplKQorTWFya2VkQmxvY2sqIE1hcmtlZEJsb2NrOjpjcmVhdGUoSGVhcCogaGVhcCwg
c2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uKQogewogICAgIFBhZ2VB
bGxvY2F0aW9uQWxpZ25lZCBhbGxvY2F0aW9uID0gUGFnZUFsbG9jYXRpb25BbGlnbmVkOjphbGxv
Y2F0ZShibG9ja1NpemUsIGJsb2NrU2l6ZSwgT1NBbGxvY2F0b3I6OkpTR0NIZWFwUGFnZXMpOwog
ICAgIGlmICghc3RhdGljX2Nhc3Q8Ym9vbD4oYWxsb2NhdGlvbikpCiAgICAgICAgIENSQVNIKCk7
Ci0gICAgcmV0dXJuIG5ldyAoTm90TnVsbCwgYWxsb2NhdGlvbi5iYXNlKCkpIE1hcmtlZEJsb2Nr
KGFsbG9jYXRpb24sIGhlYXAsIGNlbGxTaXplKTsKKyAgICByZXR1cm4gbmV3IChOb3ROdWxsLCBh
bGxvY2F0aW9uLmJhc2UoKSkgTWFya2VkQmxvY2soYWxsb2NhdGlvbiwgaGVhcCwgY2VsbFNpemUs
IGNlbGxzTmVlZERlc3RydWN0aW9uKTsKIH0KIAotTWFya2VkQmxvY2sqIE1hcmtlZEJsb2NrOjpy
ZWN5Y2xlKE1hcmtlZEJsb2NrKiBibG9jaywgSGVhcCogaGVhcCwgc2l6ZV90IGNlbGxTaXplKQor
TWFya2VkQmxvY2sqIE1hcmtlZEJsb2NrOjpyZWN5Y2xlKE1hcmtlZEJsb2NrKiBibG9jaywgSGVh
cCogaGVhcCwgc2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uKQogewot
ICAgIHJldHVybiBuZXcgKE5vdE51bGwsIGJsb2NrKSBNYXJrZWRCbG9jayhibG9jay0+bV9hbGxv
Y2F0aW9uLCBoZWFwLCBjZWxsU2l6ZSk7CisgICAgcmV0dXJuIG5ldyAoTm90TnVsbCwgYmxvY2sp
IE1hcmtlZEJsb2NrKGJsb2NrLT5tX2FsbG9jYXRpb24sIGhlYXAsIGNlbGxTaXplLCBjZWxsc05l
ZWREZXN0cnVjdGlvbik7CiB9CiAKIHZvaWQgTWFya2VkQmxvY2s6OmRlc3Ryb3koTWFya2VkQmxv
Y2sqIGJsb2NrKQpAQCAtNTAsMTAgKzUwLDExIEBAIHZvaWQgTWFya2VkQmxvY2s6OmRlc3Ryb3ko
TWFya2VkQmxvY2sqIGJsb2NrKQogICAgIGJsb2NrLT5tX2FsbG9jYXRpb24uZGVhbGxvY2F0ZSgp
OwogfQogCi1NYXJrZWRCbG9jazo6TWFya2VkQmxvY2soUGFnZUFsbG9jYXRpb25BbGlnbmVkJiBh
bGxvY2F0aW9uLCBIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUpCitNYXJrZWRCbG9jazo6TWFy
a2VkQmxvY2soUGFnZUFsbG9jYXRpb25BbGlnbmVkJiBhbGxvY2F0aW9uLCBIZWFwKiBoZWFwLCBz
aXplX3QgY2VsbFNpemUsIGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24pCiAgICAgOiBIZWFwQmxv
Y2soYWxsb2NhdGlvbikKICAgICAsIG1fYXRvbXNQZXJDZWxsKChjZWxsU2l6ZSArIGF0b21TaXpl
IC0gMSkgLyBhdG9tU2l6ZSkKICAgICAsIG1fZW5kQXRvbShhdG9tc1BlckJsb2NrIC0gbV9hdG9t
c1BlckNlbGwgKyAxKQorICAgICwgbV9jZWxsc05lZWREZXN0cnVjdGlvbihjZWxsc05lZWREZXN0
cnVjdGlvbikKICAgICAsIG1fc3RhdGUoTmV3KSAvLyBBbGwgY2VsbHMgc3RhcnQgb3V0IHVubWFy
a2VkLgogICAgICwgbV9oZWFwKGhlYXApCiB7CkBAIC03MCwxNiArNzEsMTcgQEAgaW5saW5lIHZv
aWQgTWFya2VkQmxvY2s6OmNhbGxEZXN0cnVjdG9yKEpTQ2VsbCogY2VsbCkKICNpZiBFTkFCTEUo
U0lNUExFX0hFQVBfUFJPRklMSU5HKQogICAgIG1faGVhcC0+bV9kZXN0cm95ZWRUeXBlQ291bnRz
LmNvdW50VlB0cih2cHRyKTsKICNlbmRpZgotICAgIGlmIChjZWxsLT5jbGFzc0luZm8oKSAhPSAm
SlNGaW5hbE9iamVjdDo6c19pbmZvKQotICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSgpLT5kZXN0
cm95KGNlbGwpOworICAgIEFTU0VSVChjZWxsLT5jbGFzc0luZm8oKSAhPSAmSlNGaW5hbE9iamVj
dDo6c19pbmZvKTsKKyAgICBjZWxsLT5tZXRob2RUYWJsZSgpLT5kZXN0cm95KGNlbGwpOwogCiAg
ICAgY2VsbC0+emFwKCk7CiB9CiAKLXRlbXBsYXRlPE1hcmtlZEJsb2NrOjpCbG9ja1N0YXRlIGJs
b2NrU3RhdGUsIE1hcmtlZEJsb2NrOjpTd2VlcE1vZGUgc3dlZXBNb2RlPgordGVtcGxhdGU8TWFy
a2VkQmxvY2s6OkJsb2NrU3RhdGUgYmxvY2tTdGF0ZSwgTWFya2VkQmxvY2s6OlN3ZWVwTW9kZSBz
d2VlcE1vZGUsIGJvb2wgZGVzdHJ1Y3RvckNhbGxOZWVkZWQ+CiBNYXJrZWRCbG9jazo6RnJlZUNl
bGwqIE1hcmtlZEJsb2NrOjpzcGVjaWFsaXplZFN3ZWVwKCkKIHsKICAgICBBU1NFUlQoYmxvY2tT
dGF0ZSAhPSBBbGxvY2F0ZWQgJiYgYmxvY2tTdGF0ZSAhPSBGcmVlTGlzdGVkKTsKKyAgICBBU1NF
UlQoZGVzdHJ1Y3RvckNhbGxOZWVkZWQgfHwgc3dlZXBNb2RlICE9IFN3ZWVwT25seSk7CiAKICAg
ICAvLyBUaGlzIHByb2R1Y2VzIGEgZnJlZSBsaXN0IHRoYXQgaXMgb3JkZXJlZCBpbiByZXZlcnNl
IHRocm91Z2ggdGhlIGJsb2NrLgogICAgIC8vIFRoaXMgaXMgZmluZSwgc2luY2UgdGhlIGFsbG9j
YXRpb24gY29kZSBtYWtlcyBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUKQEAgLTkzLDcgKzk1LDcg
QEAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBNYXJrZWRCbG9jazo6c3BlY2lhbGl6ZWRTd2VlcCgp
CiAgICAgICAgIGlmIChibG9ja1N0YXRlID09IFphcHBlZCAmJiAhY2VsbC0+aXNaYXBwZWQoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChibG9ja1N0YXRlICE9IE5ldykK
KyAgICAgICAgaWYgKGRlc3RydWN0b3JDYWxsTmVlZGVkICYmIGJsb2NrU3RhdGUgIT0gTmV3KQog
ICAgICAgICAgICAgY2FsbERlc3RydWN0b3IoY2VsbCk7CiAKICAgICAgICAgaWYgKHN3ZWVwTW9k
ZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKQEAgLTEwNywxNCArMTA5LDEzIEBAIE1hcmtlZEJsb2Nr
OjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OnNwZWNpYWxpemVkU3dlZXAoKQogICAgIHJldHVybiBo
ZWFkOwogfQogCi1NYXJrZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpzd2VlcChTd2Vl
cE1vZGUgc3dlZXBNb2RlKQordGVtcGxhdGU8Ym9vbCBkZXN0cnVjdG9yQ2FsbE5lZWRlZD4KK01h
cmtlZEJsb2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OnN3ZWVwU2xvd0Nhc2UoU3dlZXBNb2Rl
IHN3ZWVwTW9kZSkKIHsKLSAgICBIRUFQX0xPR19CTE9DS19TVEFURV9UUkFOU0lUSU9OKHRoaXMp
OwotCiAgICAgc3dpdGNoIChtX3N0YXRlKSB7CiAgICAgY2FzZSBOZXc6CiAgICAgICAgIEFTU0VS
VChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KTsKLSAgICAgICAgcmV0dXJuIHNwZWNpYWxp
emVkU3dlZXA8TmV3LCBTd2VlcFRvRnJlZUxpc3Q+KCk7CisgICAgICAgIHJldHVybiBzcGVjaWFs
aXplZFN3ZWVwPE5ldywgU3dlZXBUb0ZyZWVMaXN0LCBkZXN0cnVjdG9yQ2FsbE5lZWRlZD4oKTsK
ICAgICBjYXNlIEZyZWVMaXN0ZWQ6CiAgICAgICAgIC8vIEhhcHBlbnMgd2hlbiBhIGJsb2NrIHRy
YW5zaXRpb25zIHRvIGZ1bGx5IGFsbG9jYXRlZC4KICAgICAgICAgQVNTRVJUKHN3ZWVwTW9kZSA9
PSBTd2VlcFRvRnJlZUxpc3QpOwpAQCAtMTI0LDE4ICsxMjUsMjEgQEAgTWFya2VkQmxvY2s6OkZy
ZWVDZWxsKiBNYXJrZWRCbG9jazo6c3dlZXAoU3dlZXBNb2RlIHN3ZWVwTW9kZSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgY2FzZSBNYXJrZWQ6CiAgICAgICAgIHJldHVybiBzd2VlcE1vZGUgPT0g
U3dlZXBUb0ZyZWVMaXN0Ci0gICAgICAgICAgICA/IHNwZWNpYWxpemVkU3dlZXA8TWFya2VkLCBT
d2VlcFRvRnJlZUxpc3Q+KCkKLSAgICAgICAgICAgIDogc3BlY2lhbGl6ZWRTd2VlcDxNYXJrZWQs
IFN3ZWVwT25seT4oKTsKKyAgICAgICAgICAgID8gc3BlY2lhbGl6ZWRTd2VlcDxNYXJrZWQsIFN3
ZWVwVG9GcmVlTGlzdCwgZGVzdHJ1Y3RvckNhbGxOZWVkZWQ+KCkKKyAgICAgICAgICAgIDogc3Bl
Y2lhbGl6ZWRTd2VlcDxNYXJrZWQsIFN3ZWVwT25seSwgZGVzdHJ1Y3RvckNhbGxOZWVkZWQ+KCk7
CiAgICAgY2FzZSBaYXBwZWQ6CiAgICAgICAgIHJldHVybiBzd2VlcE1vZGUgPT0gU3dlZXBUb0Zy
ZWVMaXN0Ci0gICAgICAgICAgICA/IHNwZWNpYWxpemVkU3dlZXA8WmFwcGVkLCBTd2VlcFRvRnJl
ZUxpc3Q+KCkKLSAgICAgICAgICAgIDogc3BlY2lhbGl6ZWRTd2VlcDxaYXBwZWQsIFN3ZWVwT25s
eT4oKTsKKyAgICAgICAgICAgID8gc3BlY2lhbGl6ZWRTd2VlcDxaYXBwZWQsIFN3ZWVwVG9GcmVl
TGlzdCwgZGVzdHJ1Y3RvckNhbGxOZWVkZWQ+KCkKKyAgICAgICAgICAgIDogc3BlY2lhbGl6ZWRT
d2VlcDxaYXBwZWQsIFN3ZWVwT25seSwgZGVzdHJ1Y3RvckNhbGxOZWVkZWQ+KCk7CiAgICAgfQog
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKK3RlbXBsYXRl
IE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OnN3ZWVwU2xvd0Nhc2U8dHJ1ZT4o
U3dlZXBNb2RlKTsKK3RlbXBsYXRlIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6
OnN3ZWVwU2xvd0Nhc2U8ZmFsc2U+KFN3ZWVwTW9kZSk7CisKIHZvaWQgTWFya2VkQmxvY2s6Onph
cEZyZWVMaXN0KEZyZWVDZWxsKiBmaXJzdEZyZWVDZWxsKQogewogICAgIEhFQVBfTE9HX0JMT0NL
X1NUQVRFX1RSQU5TSVRJT04odGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suaAppbmRleCAwYTRlYmU0N2UwYTM5YzI1NmQyMDM3MjM4YWY0NzJmYzMzMTRjYjJhLi44
NTYzNDY2YjEzNTFlMGM3ZDRkNzNhMzlhZWQ2ZjgxZDhlNTE4ZWM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKQEAgLTg5LDggKzg5LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICB2b2lkIHJldHVyblZhbHVlKCkgeyB9CiAgICAgICAgIH07CiAKLSAg
ICAgICAgc3RhdGljIE1hcmtlZEJsb2NrKiBjcmVhdGUoSGVhcCosIHNpemVfdCBjZWxsU2l6ZSk7
Ci0gICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogcmVjeWNsZShNYXJrZWRCbG9jayosIEhlYXAq
LCBzaXplX3QgY2VsbFNpemUpOworICAgICAgICBzdGF0aWMgTWFya2VkQmxvY2sqIGNyZWF0ZShI
ZWFwKiwgc2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uKTsKKyAgICAg
ICAgc3RhdGljIE1hcmtlZEJsb2NrKiByZWN5Y2xlKE1hcmtlZEJsb2NrKiwgSGVhcCosIHNpemVf
dCBjZWxsU2l6ZSwgYm9vbCBjZWxsc05lZWREZXN0cnVjdGlvbik7CiAgICAgICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koTWFya2VkQmxvY2sqKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc0F0b21B
bGlnbmVkKGNvbnN0IHZvaWQqKTsKQEAgLTExNSw2ICsxMTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBtYXJrQ291bnRJc1plcm8oKTsgLy8gRmFzdGVyIHRoYW4gbWFya0NvdW50
KCkuCiAKICAgICAgICAgc2l6ZV90IGNlbGxTaXplKCk7CisgICAgICAgIGJvb2wgY2VsbHNOZWVk
RGVzdHJ1Y3Rpb24oKTsKIAogICAgICAgICBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBzaXplX3Qg
Y2FwYWNpdHkoKTsKQEAgLTE1OSwxNCArMTYwLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21BbGlnbm1lbnRNYXNrID0gYXRvbVNpemUgLSAxOyAv
LyBhdG9tU2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgogCiAgICAgICAgIGVudW0gQmxvY2tT
dGF0ZSB7IE5ldywgRnJlZUxpc3RlZCwgQWxsb2NhdGVkLCBNYXJrZWQsIFphcHBlZCB9OworICAg
ICAgICB0ZW1wbGF0ZTxib29sIGRlc3RydWN0b3JDYWxsTmVlZGVkPiBGcmVlQ2VsbCogc3dlZXBT
bG93Q2FzZShTd2VlcE1vZGUgPSBTd2VlcE9ubHkpOwogCiAgICAgICAgIHR5cGVkZWYgY2hhciBB
dG9tW2F0b21TaXplXTsKIAotICAgICAgICBNYXJrZWRCbG9jayhQYWdlQWxsb2NhdGlvbkFsaWdu
ZWQmLCBIZWFwKiwgc2l6ZV90IGNlbGxTaXplKTsKKyAgICAgICAgTWFya2VkQmxvY2soUGFnZUFs
bG9jYXRpb25BbGlnbmVkJiwgSGVhcCosIHNpemVfdCBjZWxsU2l6ZSwgYm9vbCBjZWxsc05lZWRE
ZXN0cnVjdGlvbik7CiAgICAgICAgIEF0b20qIGF0b21zKCk7CiAgICAgICAgIHNpemVfdCBhdG9t
TnVtYmVyKGNvbnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBjYWxsRGVzdHJ1Y3RvcihKU0NlbGwq
KTsKLSAgICAgICAgdGVtcGxhdGU8QmxvY2tTdGF0ZSwgU3dlZXBNb2RlPiBGcmVlQ2VsbCogc3Bl
Y2lhbGl6ZWRTd2VlcCgpOworICAgICAgICB0ZW1wbGF0ZTxCbG9ja1N0YXRlLCBTd2VlcE1vZGUs
IGJvb2wgZGVzdHJ1Y3RvckNhbGxOZWVkZWQ+IEZyZWVDZWxsKiBzcGVjaWFsaXplZFN3ZWVwKCk7
CiAgICAgICAgIAogI2lmIEVOQUJMRShHR0MpCiAgICAgICAgIENhcmRTZXQ8Ynl0ZXNQZXJDYXJk
LCBibG9ja1NpemU+IG1fY2FyZHM7CkBAIC0xNzksNiArMTgxLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAjZWxzZQogICAgICAgICBXVEY6OkJpdG1hcDxhdG9tc1BlckJsb2NrLCBXVEY6OkJpdG1hcE5v
dEF0b21pYz4gbV9tYXJrczsKICNlbmRpZgorICAgICAgICBib29sIG1fY2VsbHNOZWVkRGVzdHJ1
Y3Rpb247CiAgICAgICAgIEJsb2NrU3RhdGUgbV9zdGF0ZTsKICAgICAgICAgSGVhcCogbV9oZWFw
OwogICAgIH07CkBAIC0yMDgsNiArMjExLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBy
ZXR1cm4gbV9oZWFwOwogICAgIH0KIAorICAgIGlubGluZSBNYXJrZWRCbG9jazo6RnJlZUNlbGwq
IE1hcmtlZEJsb2NrOjpzd2VlcChTd2VlcE1vZGUgc3dlZXBNb2RlKQorICAgIHsKKyAgICAgICAg
SEVBUF9MT0dfQkxPQ0tfU1RBVEVfVFJBTlNJVElPTih0aGlzKTsKKworICAgICAgICBpZiAoc3dl
ZXBNb2RlID09IFN3ZWVwT25seSAmJiAhbV9jZWxsc05lZWREZXN0cnVjdGlvbikKKyAgICAgICAg
ICAgIHJldHVybiAwOworCisgICAgICAgIGlmIChtX2NlbGxzTmVlZERlc3RydWN0aW9uKQorICAg
ICAgICAgICAgcmV0dXJuIHN3ZWVwU2xvd0Nhc2U8dHJ1ZT4oc3dlZXBNb2RlKTsKKyAgICAgICAg
cmV0dXJuIHN3ZWVwU2xvd0Nhc2U8ZmFsc2U+KHN3ZWVwTW9kZSk7CisgICAgfQorCiAgICAgaW5s
aW5lIHZvaWQgTWFya2VkQmxvY2s6OmRpZENvbnN1bWVGcmVlTGlzdCgpCiAgICAgewogICAgICAg
ICBIRUFQX0xPR19CTE9DS19TVEFURV9UUkFOU0lUSU9OKHRoaXMpOwpAQCAtMjQzLDYgKzI1OCwx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1fYXRvbXNQZXJDZWxsICogYXRv
bVNpemU7CiAgICAgfQogCisgICAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmNlbGxzTmVlZERl
c3RydWN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NlbGxzTmVlZERlc3RydWN0aW9u
OyAKKyAgICB9CisKICAgICBpbmxpbmUgc2l6ZV90IE1hcmtlZEJsb2NrOjpzaXplKCkKICAgICB7
CiAgICAgICAgIHJldHVybiBtYXJrQ291bnQoKSAqIGNlbGxTaXplKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKaW5kZXggODdkYzA0OTNkYzVlM2YxOTFmZGIw
ODAzOTViMWU5OTYwMjU5Nzg1Ni4uYmY4MzkwMTFkMjA2OGJmN2I3ZTBkYTA5OGRmZDAyY2M2NzZm
YmYyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcApAQCAt
MzYsMTUgKzM2LDEzIEBAIE1hcmtlZFNwYWNlOjpNYXJrZWRTcGFjZShIZWFwKiBoZWFwKQogICAg
ICwgbV9oZWFwKGhlYXApCiB7CiAgICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBwcmVjaXNlU3Rl
cDsgY2VsbFNpemUgPD0gcHJlY2lzZUN1dG9mZjsgY2VsbFNpemUgKz0gcHJlY2lzZVN0ZXApIHsK
LSAgICAgICAgYWxsb2NhdG9yRm9yKGNlbGxTaXplKS5zZXRDZWxsU2l6ZShjZWxsU2l6ZSk7Ci0g
ICAgICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkuc2V0SGVhcChoZWFwKTsKLSAgICAgICAgYWxs
b2NhdG9yRm9yKGNlbGxTaXplKS5zZXRNYXJrZWRTcGFjZSh0aGlzKTsKKyAgICAgICAgYWxsb2Nh
dG9yRm9yKGNlbGxTaXplKS5pbml0KGhlYXAsIHRoaXMsIGNlbGxTaXplLCBmYWxzZSk7CisgICAg
ICAgIGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLmluaXQoaGVhcCwgdGhpcywgY2Vs
bFNpemUsIHRydWUpOwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gaW1wcmVj
aXNlU3RlcDsgY2VsbFNpemUgPD0gaW1wcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBpbXByZWNp
c2VTdGVwKSB7Ci0gICAgICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkuc2V0Q2VsbFNpemUoY2Vs
bFNpemUpOwotICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLnNldEhlYXAoaGVhcCk7Ci0g
ICAgICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkuc2V0TWFya2VkU3BhY2UodGhpcyk7CisgICAg
ICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkuaW5pdChoZWFwLCB0aGlzLCBjZWxsU2l6ZSwgZmFs
c2UpOworICAgICAgICBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGNlbGxTaXplKS5pbml0KGhlYXAs
IHRoaXMsIGNlbGxTaXplLCB0cnVlKTsKICAgICB9CiB9CiAKQEAgLTUzLDIwICs1MSwyOCBAQCB2
b2lkIE1hcmtlZFNwYWNlOjpyZXNldEFsbG9jYXRvcnMoKQogICAgIG1fd2F0ZXJNYXJrID0gMDsK
ICAgICBtX251cnNlcnlXYXRlck1hcmsgPSAwOwogCi0gICAgZm9yIChzaXplX3QgY2VsbFNpemUg
PSBwcmVjaXNlU3RlcDsgY2VsbFNpemUgPD0gcHJlY2lzZUN1dG9mZjsgY2VsbFNpemUgKz0gcHJl
Y2lzZVN0ZXApCisgICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBwcmVjaXNlU3RlcDsgY2VsbFNp
emUgPD0gcHJlY2lzZUN1dG9mZjsgY2VsbFNpemUgKz0gcHJlY2lzZVN0ZXApIHsKICAgICAgICAg
YWxsb2NhdG9yRm9yKGNlbGxTaXplKS5yZXNldCgpOworICAgICAgICBkZXN0cnVjdG9yQWxsb2Nh
dG9yRm9yKGNlbGxTaXplKS5yZXNldCgpOworICAgIH0KIAotICAgIGZvciAoc2l6ZV90IGNlbGxT
aXplID0gaW1wcmVjaXNlU3RlcDsgY2VsbFNpemUgPD0gaW1wcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6
ZSArPSBpbXByZWNpc2VTdGVwKQorICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gaW1wcmVjaXNl
U3RlcDsgY2VsbFNpemUgPD0gaW1wcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBpbXByZWNpc2VT
dGVwKSB7CiAgICAgICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKKyAgICAgICAg
ZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKKyAgICB9CiB9CiAKIHZv
aWQgTWFya2VkU3BhY2U6OmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEoKQogewotICAgIGZv
ciAoc2l6ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHByZWNpc2VDdXRv
ZmY7IGNlbGxTaXplICs9IHByZWNpc2VTdGVwKQorICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0g
cHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IHByZWNp
c2VTdGVwKSB7CiAgICAgICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkuemFwRnJlZUxpc3QoKTsK
KyAgICAgICAgZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihjZWxsU2l6ZSkuemFwRnJlZUxpc3QoKTsK
KyAgICB9CiAKLSAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IGltcHJlY2lzZVN0ZXA7IGNlbGxT
aXplIDw9IGltcHJlY2lzZUN1dG9mZjsgY2VsbFNpemUgKz0gaW1wcmVjaXNlU3RlcCkKKyAgICBm
b3IgKHNpemVfdCBjZWxsU2l6ZSA9IGltcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IGltcHJlY2lz
ZUN1dG9mZjsgY2VsbFNpemUgKz0gaW1wcmVjaXNlU3RlcCkgewogICAgICAgICBhbGxvY2F0b3JG
b3IoY2VsbFNpemUpLnphcEZyZWVMaXN0KCk7CisgICAgICAgIGRlc3RydWN0b3JBbGxvY2F0b3JG
b3IoY2VsbFNpemUpLnphcEZyZWVMaXN0KCk7CisgICAgfQogfQogCiAKQEAgLTEwNyw3ICsxMTMs
NyBAQCBpbmxpbmUgdm9pZCBUYWtlSWZVbm1hcmtlZDo6b3BlcmF0b3IoKShNYXJrZWRCbG9jayog
YmxvY2spCiAgICAgaWYgKCFibG9jay0+bWFya0NvdW50SXNaZXJvKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBtX21hcmtlZFNwYWNlLT5hbGxvY2F0b3JGb3IoYmxvY2stPmNlbGxTaXpl
KCkpLnJlbW92ZUJsb2NrKGJsb2NrKTsKKyAgICBtX21hcmtlZFNwYWNlLT5hbGxvY2F0b3JGb3Io
YmxvY2spLnJlbW92ZUJsb2NrKGJsb2NrKTsKICAgICBtX2VtcHRpZXMuYXBwZW5kKGJsb2NrKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2Uu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKaW5kZXggMjFhMGI0
OGRlOGQyZDkzZTMxOWZlNDJiOWNlNjUwMzk0YWRjMTU5Mi4uN2RmNjhmMGMyZTI4MDcyMjg4M2E1
YTQ0Mjc1OGY0OTMyNmViYzVmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRT
cGFjZS5oCkBAIC01Miw3ICs1MiwxMCBAQCBwdWJsaWM6CiAgICAgTWFya2VkU3BhY2UoSGVhcCop
OwogCiAgICAgTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3JGb3Ioc2l6ZV90KTsKLSAgICB2b2lk
KiBhbGxvY2F0ZShzaXplX3QpOworICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yRm9yKE1h
cmtlZEJsb2NrKik7CisgICAgTWFya2VkQWxsb2NhdG9yJiBkZXN0cnVjdG9yQWxsb2NhdG9yRm9y
KHNpemVfdCk7CisgICAgdm9pZCogYWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihzaXplX3QpOworICAg
IHZvaWQqIGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90KTsKICAgICAKICAgICB2b2lk
IHJlc2V0QWxsb2NhdG9ycygpOwogCkBAIC04Niw4ICs4OSwxNCBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgaW1wcmVjaXNlQ3V0b2ZmID0gbWF4Q2VsbFNpemU7CiAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBpbXByZWNpc2VDb3VudCA9IGltcHJlY2lzZUN1dG9mZiAvIGltcHJl
Y2lzZVN0ZXA7CiAKLSAgICBGaXhlZEFycmF5PE1hcmtlZEFsbG9jYXRvciwgcHJlY2lzZUNvdW50
PiBtX3ByZWNpc2VTaXplQ2xhc3NlczsKLSAgICBGaXhlZEFycmF5PE1hcmtlZEFsbG9jYXRvciwg
aW1wcmVjaXNlQ291bnQ+IG1faW1wcmVjaXNlU2l6ZUNsYXNzZXM7CisgICAgc3RydWN0IFN1YnNw
YWNlIHsKKyAgICAgICAgRml4ZWRBcnJheTxNYXJrZWRBbGxvY2F0b3IsIHByZWNpc2VDb3VudD4g
cHJlY2lzZUFsbG9jYXRvcnM7CisgICAgICAgIEZpeGVkQXJyYXk8TWFya2VkQWxsb2NhdG9yLCBp
bXByZWNpc2VDb3VudD4gaW1wcmVjaXNlQWxsb2NhdG9yczsKKyAgICB9OworCisgICAgU3Vic3Bh
Y2UgbV9kZXN0cnVjdG9yU3BhY2U7CisgICAgU3Vic3BhY2UgbV9ub3JtYWxTcGFjZTsKKwogICAg
IHNpemVfdCBtX3dhdGVyTWFyazsKICAgICBzaXplX3QgbV9udXJzZXJ5V2F0ZXJNYXJrOwogICAg
IEhlYXAqIG1faGVhcDsKQEAgLTEyNCwyMyArMTMzLDQ1IEBAIGlubGluZSBNYXJrZWRBbGxvY2F0
b3ImIE1hcmtlZFNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IGJ5dGVzKQogewogICAgIEFTU0VS
VChieXRlcyAmJiBieXRlcyA8PSBtYXhDZWxsU2l6ZSk7CiAgICAgaWYgKGJ5dGVzIDw9IHByZWNp
c2VDdXRvZmYpCi0gICAgICAgIHJldHVybiBtX3ByZWNpc2VTaXplQ2xhc3Nlc1soYnl0ZXMgLSAx
KSAvIHByZWNpc2VTdGVwXTsKLSAgICByZXR1cm4gbV9pbXByZWNpc2VTaXplQ2xhc3Nlc1soYnl0
ZXMgLSAxKSAvIGltcHJlY2lzZVN0ZXBdOworICAgICAgICByZXR1cm4gbV9ub3JtYWxTcGFjZS5w
cmVjaXNlQWxsb2NhdG9yc1soYnl0ZXMgLSAxKSAvIHByZWNpc2VTdGVwXTsKKyAgICByZXR1cm4g
bV9ub3JtYWxTcGFjZS5pbXByZWNpc2VBbGxvY2F0b3JzWyhieXRlcyAtIDEpIC8gaW1wcmVjaXNl
U3RlcF07CiB9CiAKLWlubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGUoc2l6ZV90IGJ5
dGVzKQoraW5saW5lIE1hcmtlZEFsbG9jYXRvciYgTWFya2VkU3BhY2U6OmFsbG9jYXRvckZvcihN
YXJrZWRCbG9jayogYmxvY2spCit7CisgICAgaWYgKGJsb2NrLT5jZWxsc05lZWREZXN0cnVjdGlv
bigpKQorICAgICAgICByZXR1cm4gZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihibG9jay0+Y2VsbFNp
emUoKSk7CisgICAgcmV0dXJuIGFsbG9jYXRvckZvcihibG9jay0+Y2VsbFNpemUoKSk7Cit9CisK
K2lubGluZSBNYXJrZWRBbGxvY2F0b3ImIE1hcmtlZFNwYWNlOjpkZXN0cnVjdG9yQWxsb2NhdG9y
Rm9yKHNpemVfdCBieXRlcykKK3sKKyAgICBBU1NFUlQoYnl0ZXMgJiYgYnl0ZXMgPD0gbWF4Q2Vs
bFNpemUpOworICAgIGlmIChieXRlcyA8PSBwcmVjaXNlQ3V0b2ZmKQorICAgICAgICByZXR1cm4g
bV9kZXN0cnVjdG9yU3BhY2UucHJlY2lzZUFsbG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBwcmVjaXNl
U3RlcF07CisgICAgcmV0dXJuIG1fZGVzdHJ1Y3RvclNwYWNlLmltcHJlY2lzZUFsbG9jYXRvcnNb
KGJ5dGVzIC0gMSkgLyBpbXByZWNpc2VTdGVwXTsKK30KKworaW5saW5lIHZvaWQqIE1hcmtlZFNw
YWNlOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCBieXRlcykKIHsKICAgICByZXR1
cm4gYWxsb2NhdG9yRm9yKGJ5dGVzKS5hbGxvY2F0ZSgpOwogfQogCitpbmxpbmUgdm9pZCogTWFy
a2VkU3BhY2U6OmFsbG9jYXRlV2l0aERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVzKQoreworICAgIHJl
dHVybiBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVzKS5hbGxvY2F0ZSgpOworfQorCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5
cGUgTWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayhGdW5jdG9yJiBmdW5jdG9yKQogewogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlY2lzZUNvdW50OyArK2kpIHsKLSAgICAgICAgbV9wcmVj
aXNlU2l6ZUNsYXNzZXNbaV0uZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAgICAgICBtX25vcm1h
bFNwYWNlLnByZWNpc2VBbGxvY2F0b3JzW2ldLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKKyAgICAg
ICAgbV9kZXN0cnVjdG9yU3BhY2UucHJlY2lzZUFsbG9jYXRvcnNbaV0uZm9yRWFjaEJsb2NrKGZ1
bmN0b3IpOwogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW1wcmVjaXNlQ291
bnQ7ICsraSkgewotICAgICAgICBtX2ltcHJlY2lzZVNpemVDbGFzc2VzW2ldLmZvckVhY2hCbG9j
ayhmdW5jdG9yKTsKKyAgICAgICAgbV9ub3JtYWxTcGFjZS5pbXByZWNpc2VBbGxvY2F0b3JzW2ld
LmZvckVhY2hCbG9jayhmdW5jdG9yKTsKKyAgICAgICAgbV9kZXN0cnVjdG9yU3BhY2UuaW1wcmVj
aXNlQWxsb2NhdG9yc1tpXS5mb3JFYWNoQmxvY2soZnVuY3Rvcik7CiAgICAgfQogCiAgICAgcmV0
dXJuIGZ1bmN0b3IucmV0dXJuVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IGMz
NTdlOGMzOWIyNGViZjczNjQyYmVhNjJkYWY3YjQ2MGM3NzZlZjkuLmMwNjhmNmZjN2ZiYWI4MmUy
OWQ0YWNiZGVjZTE3YzcyMDM5MWU0ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMzI5
LDcgKzMyOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJp
ZXIoUmVnaXN0ZXJJRCBvd25lciwgUmVnaXN0ZXJJRCB2YWx1ZVRhZywgUmVnaXN0ZXJJRCBzY3Jh
dGNoLCBSZWdpc3RlcklEIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJNb2RlLCBXcml0ZUJhcnJpZXJV
c2VLaW5kKTsKICAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFJl
Z2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgV3JpdGVCYXJyaWVyTW9kZSwgV3Jp
dGVCYXJyaWVyVXNlS2luZCk7CiAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBl
LCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiB2b2lkIGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Qo
U3RydWN0dXJlVHlwZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZSwgYm9vbCBkZXN0cnVjdG9yLCB0
eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiB2b2lkIGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3QoU3Ry
dWN0dXJlVHlwZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVj
dChUIHN0cnVjdHVyZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cik7
CiAgICAgICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNGdW5jdGlvbihGdW5jdGlvbkV4ZWN1dGFibGUq
LCBSZWdpc3RlcklEIHNjb3BlQ2hhaW4sIFJlZ2lzdGVySUQgcmVzdWx0LCBSZWdpc3RlcklEIHN0
b3JhZ2VQdHIpOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lTWV0aG9kcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVNZXRob2RzLmgKaW5kZXggMDE1NDVmYjhjNzI3NDUwOThiNGI2YTdlODg0MDI2Y2E3MTM0M2Qx
NS4uYzE3NzY5ZDg1OWI3MmFmOGU2YTlmMjY2YzE5MjkzOGI0NjRkYjljOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKQEAgLTM5OSw5ICszOTksMTMg
QEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVDaGFy
KHVuc2lnbmVkIHNyYykKICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0
cmluZyhnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CiB9
CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGUsIHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+
IGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdChTdHJ1Y3R1cmVUeXBl
IHN0cnVjdHVyZSwgUmVnaXN0ZXJJRCByZXN1bHQsIFJlZ2lzdGVySUQgc3RvcmFnZVB0cikKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGUsIGJvb2wgZGVzdHJ1Y3RvciwgdHlwZW5hbWUgU3Ry
dWN0dXJlVHlwZT4gaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVCYXNpY0pTT2JqZWN0KFN0
cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzdG9y
YWdlUHRyKQogewotICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJm1fZ2xvYmFsRGF0
YS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3Qoc2l6ZW9mKENsYXNzVHlwZSkpOworICAgIE1hcmtl
ZEFsbG9jYXRvciogYWxsb2NhdG9yID0gMDsKKyAgICBpZiAoZGVzdHJ1Y3RvcikKKyAgICAgICAg
YWxsb2NhdG9yID0gJm1fZ2xvYmFsRGF0YS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVz
dHJ1Y3RvcihzaXplb2YoQ2xhc3NUeXBlKSk7CisgICAgZWxzZQorICAgICAgICBhbGxvY2F0b3Ig
PSAmbV9nbG9iYWxEYXRhLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9y
KHNpemVvZihDbGFzc1R5cGUpKTsKICAgICBsb2FkUHRyKCZhbGxvY2F0b3ItPm1fZmlyc3RGcmVl
Q2VsbCwgcmVzdWx0KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlc3Vs
dCkpOwogCkBAIC00MjUsMTIgKzQyOSwxMiBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3NUeXBl
LCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBbGxvYwogCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0ZpbmFs
T2JqZWN0KFQgc3RydWN0dXJlLCBSZWdpc3RlcklEIHJlc3VsdCwgUmVnaXN0ZXJJRCBzY3JhdGNo
KQogewotICAgIGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Q8SlNGaW5hbE9iamVjdD4oc3RydWN0
dXJlLCByZXN1bHQsIHNjcmF0Y2gpOworICAgIGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Q8SlNG
aW5hbE9iamVjdCwgZmFsc2UsIFQ+KHN0cnVjdHVyZSwgcmVzdWx0LCBzY3JhdGNoKTsKIH0KIAog
aW5saW5lIHZvaWQgSklUOjplbWl0QWxsb2NhdGVKU0Z1bmN0aW9uKEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSwgUmVnaXN0ZXJJRCBzY29wZUNoYWluLCBSZWdpc3RlcklEIHJlc3VsdCwg
UmVnaXN0ZXJJRCBzdG9yYWdlUHRyKQogewotICAgIGVtaXRBbGxvY2F0ZUJhc2ljSlNPYmplY3Q8
SlNGdW5jdGlvbj4oVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPm5h
bWVkRnVuY3Rpb25TdHJ1Y3R1cmUoKSksIHJlc3VsdCwgc3RvcmFnZVB0cik7CisgICAgZW1pdEFs
bG9jYXRlQmFzaWNKU09iamVjdDxKU0Z1bmN0aW9uLCB0cnVlPihUcnVzdGVkSW1tUHRyKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+bmFtZWRGdW5jdGlvblN0cnVjdHVyZSgpKSwgcmVzdWx0
LCBzdG9yYWdlUHRyKTsKIAogICAgIC8vIHN0b3JlIHRoZSBmdW5jdGlvbidzIHNjb3BlIGNoYWlu
CiAgICAgc3RvcmVQdHIoc2NvcGVDaGFpbiwgQWRkcmVzcyhyZXN1bHQsIEpTRnVuY3Rpb246Om9m
ZnNldE9mU2NvcGVDaGFpbigpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCmluZGV4IGM4NGZiNWIxMDZhNThmM2IzODU5ODM0ZGNiY2I0N2U0NDIwMTg0OWUuLjcx
ZDY3OGUyY2Q4YmViNGMwOWYyYjIyYzBjOTc0OTUxZTYzZDNkOWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBAIC00Miw2ICs0Miw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBXVEY7CiBuYW1lc3BhY2UgSlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChK
U0FycmF5KTsKK0FTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEpTQXJyYXkpOwogCiAvLyBP
dmVydmlldyBvZiBKU0FycmF5CiAvLwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5oCmluZGV4IGEzMzU0YzYwMjRiMDk3M2M5ZmYyYTBlN2ZlYWQ3M2QzMGRmNWZmZjMuLjY4ZTM4
Y2YyY2NlZjdiMzM2ZDM3NDhiMTJhNzU5NjM0NGQ3MTVkZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmgKQEAgLTEzNSwyMyArMTM1LDE0IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOwogCi0gICAgICAgIHN0
YXRpYyBKU0FycmF5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJh
eT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAg
ICAgICAgICAgYXJyYXktPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgp
OwotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9CisgICAgICAgIHN0YXRpYyBK
U0FycmF5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgaW5pdGlh
bExlbmd0aCA9IDApOwogCiAgICAgICAgIC8vIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQgaXMgdXNl
ZCBmb3IgZmFzdCBjb25zdHJ1Y3Rpb24gb2YgYXJyYXlzIHdob3NlIHNpemUgYW5kCiAgICAgICAg
IC8vIGNvbnRlbnRzIGFyZSBrbm93biBhdCB0aW1lIG9mIGNyZWF0aW9uLiBDbGllbnRzIG9mIHRo
aXMgaW50ZXJmYWNlIG11c3Q6CiAgICAgICAgIC8vICAgLSBudWxsLWNoZWNrIHRoZSByZXN1bHQg
KGluZGljYXRpbmcgb3V0IG9mIG1lbW9yeSwgb3Igb3RoZXJ3aXNlIHVuYWJsZSB0byBhbGxvY2F0
ZSB2ZWN0b3IpLgogICAgICAgICAvLyAgIC0gY2FsbCAnaW5pdGlhbGl6ZUluZGV4JyBmb3IgYWxs
IHByb3BlcnRpZXMgaW4gc2VxdWVuY2UsIGZvciAwIDw9IGkgPCBpbml0aWFsTGVuZ3RoLgogICAg
ICAgICAvLyAgIC0gY2FsbGVkICdjb21wbGV0ZUluaXRpYWxpemF0aW9uJyBhZnRlciBhbGwgcHJv
cGVydGllcyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQuCi0gICAgICAgIHN0YXRpYyBKU0FycmF5KiB0
cnlDcmVhdGVVbmluaXRpYWxpemVkKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4o
Z2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwotICAgICAg
ICAgICAgcmV0dXJuIGFycmF5LT50cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQoZ2xvYmFs
RGF0YSwgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdGljIEpTQXJyYXkq
IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCk7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJv
b2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlvbik7CiAKQEAgLTI5
OSw2ICsyOTAsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQqIG1fc3ViY2xhc3NE
YXRhOyAvLyBBIEpTQXJyYXkgc3ViY2xhc3MgY2FuIHVzZSB0aGlzIHRvIGZpbGwgdGhlIHZlY3Rv
ciBsYXppbHkuCiAgICAgfTsKIAorICAgIGlubGluZSBKU0FycmF5KiBKU0FycmF5OjpjcmVhdGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQg
aW5pdGlhbExlbmd0aCkKKyAgICB7CisgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgICAgICBhcnJheS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
RGF0YSwgaW5pdGlhbExlbmd0aCk7CisgICAgICAgIHJldHVybiBhcnJheTsKKyAgICB9CisKKyAg
ICBpbmxpbmUgSlNBcnJheSogSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFs
TGVuZ3RoKQorICAgIHsKKyAgICAgICAgSlNBcnJheSogYXJyYXkgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEs
IHN0cnVjdHVyZSk7CisgICAgICAgIHJldHVybiBhcnJheS0+dHJ5RmluaXNoQ3JlYXRpb25Vbmlu
aXRpYWxpemVkKGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOworICAgIH0KKwogICAgIEpTQXJy
YXkqIGFzQXJyYXkoSlNWYWx1ZSk7CiAKICAgICBpbmxpbmUgSlNBcnJheSogYXNBcnJheShKU0Nl
bGwqIGNlbGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCmluZGV4IGEzNmJi
N2Q1ODUzN2JjYmRmMGMxNGRkYWY0ZTZiMDQ1M2FiNGIzNDUuLjc1ZDgzNGJlMGYzOTA5ZGEwZDg1
MDMwMzQwYjhkMThiNmZkNDM5YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCkBAIC0zMDksMTYgKzMwOSwzMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJu
IGlzQ2VsbCgpID8gYXNDZWxsKCktPnRvT2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdCkgOiB0b09i
amVjdFNsb3dDYXNlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiBoZWFwKQotICAgIHsKKyAgICAv
LyBXcml0ZSBtYW51YWwgc3BlY2lhbGl6YXRpb25zIGZvciB0aGlzIHN0cnVjdCB0ZW1wbGF0ZSBp
ZiB5b3UgY2FyZSBhYm91dCBub24tY2xhbmcgY29tcGlsZXJzLgorICAgIHRlbXBsYXRlPGNsYXNz
IFQ+CisgICAgc3RydWN0IE5lZWRzRGVzdHJ1Y3RvciB7CisgICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHZhbHVlID0gX19oYXNfdHJpdmlhbF9kZXN0cnVjdG9yKFQpOworICAgIH07CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgTmVlZHNEZXN0cnVjdG9yQXJnID0gTmVlZHNE
ZXN0cnVjdG9yPFQ+ID4gCisgICAgc3RydWN0IENlbGxBbGxvY2F0b3IgeworICAgICAgICBzdGF0
aWMgdm9pZCogYWxsb2NhdGUoSGVhcCYgaGVhcCkKKyAgICAgICAgewogI2lmIEVOQUJMRShHQ19W
QUxJREFUSU9OKQotICAgICAgICBBU1NFUlQoc2l6ZW9mKFQpID09IFQ6OnNfaW5mby5jZWxsU2l6
ZSk7Ci0gICAgICAgIEFTU0VSVCghaGVhcC5nbG9iYWxEYXRhKCktPmlzSW5pdGlhbGl6aW5nT2Jq
ZWN0KCkpOwotICAgICAgICBoZWFwLmdsb2JhbERhdGEoKS0+c2V0SW5pdGlhbGl6aW5nT2JqZWN0
KHRydWUpOworICAgICAgICAgICAgQVNTRVJUKHNpemVvZihUKSA9PSBUOjpzX2luZm8uY2VsbFNp
emUpOworICAgICAgICAgICAgQVNTRVJUKCFoZWFwLmdsb2JhbERhdGEoKS0+aXNJbml0aWFsaXpp
bmdPYmplY3QoKSk7CisgICAgICAgICAgICBoZWFwLmdsb2JhbERhdGEoKS0+c2V0SW5pdGlhbGl6
aW5nT2JqZWN0KHRydWUpOwogI2VuZGlmCi0gICAgICAgIEpTQ2VsbCogcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8SlNDZWxsKj4oaGVhcC5hbGxvY2F0ZShzaXplb2YoVCkpKTsKLSAgICAgICAgcmVzdWx0
LT5jbGVhclN0cnVjdHVyZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
SlNDZWxsKiByZXN1bHQgPSAoTmVlZHNEZXN0cnVjdG9yQXJnOjp2YWx1ZSkgCisgICAgICAgICAg
ICAgICAgPyBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwLmFsbG9jYXRlV2l0aG91dERlc3RydWN0
b3Ioc2l6ZW9mKFQpKSkKKyAgICAgICAgICAgICAgICA6IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhl
YXAuYWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihzaXplb2YoVCkpKTsKKyAgICAgICAgICAgIHJlc3Vs
dC0+Y2xlYXJTdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkKiBhbGxvY2F0
ZUNlbGwoSGVhcCYgaGVhcCkKKyAgICB7CisgICAgICAgIHJldHVybiBDZWxsQWxsb2NhdG9yPFQ+
OjphbGxvY2F0ZShoZWFwKTsKICAgICB9CiAgICAgCiAgICAgaW5saW5lIGJvb2wgaXNaYXBwZWQo
Y29uc3QgSlNDZWxsKiBjZWxsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCmluZGV4IGE0NDNmZGE4NmMxYWE3MjJhMjFjNWFlMWMzNGM4MTIzMzUzMjQwOTYuLjlm
MjAzNWQwM2QyOWNiMmE5MDI1MGQzZTNlMjhjNWYxZWQ5NGY0MjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAgQVNTRVJUX0NM
QVNTX0ZJVFNfSU5fQ0VMTChKU05vbkZpbmFsT2JqZWN0KTsKIEFTU0VSVF9DTEFTU19GSVRTX0lO
X0NFTEwoSlNGaW5hbE9iamVjdCk7CiAKIEFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEpT
T2JqZWN0KTsKK0FTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKEpTRmluYWxPYmplY3QpOwog
CiBjb25zdCBjaGFyKiBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IgPSAiQXR0
ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25seSBwcm9wZXJ0eS4iOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAppbmRleCA0MzMyNDljMjA0NThjMDdlNTk4NTllODQ4
MTgwMDAwMWYzNTkwNjFmLi40NTI3NzcyNGM3ODUxOGQxMGEwOGFmMmZjZjc3MTkwZGUyZjJkYWYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKQEAgLTM0OSw2ICsz
NDksOCBAQCBDT01QSUxFX0FTU0VSVCgoSlNGaW5hbE9iamVjdF9pbmxpbmVTdG9yYWdlQ2FwYWNp
dHkgPj0gSlNOb25GaW5hbE9iamVjdF9pbmxpbmVTdAogICAgICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gbV9pbmxpbmVTdG9yYWdlW0pTTm9uRmluYWxPYmplY3RfaW5saW5lU3RvcmFnZUNhcGFj
aXR5XTsKICAgICB9OwogCisgICAgY2xhc3MgSlNGaW5hbE9iamVjdDsKKwogICAgIC8vIEpTRmlu
YWxPYmplY3QgaXMgYSB0eXBlIG9mIEpTT2JqZWN0IHRoYXQgY29udGFpbnMgc3VmZmljZW50IGlu
dGVybmFsCiAgICAgLy8gc3RvcmFnZSB0byBmdWxseSBtYWtlIHVzZSBvZiB0aGUgY29sbG9jdG9y
IGNlbGwgY29udGFpbmluZyBpdC4KICAgICBjbGFzcyBKU0ZpbmFsT2JqZWN0IDogcHVibGljIEpT
T2JqZWN0IHsKQEAgLTM1NywxMyArMzU5LDcgQEAgQ09NUElMRV9BU1NFUlQoKEpTRmluYWxPYmpl
Y3RfaW5saW5lU3RvcmFnZUNhcGFjaXR5ID49IEpTTm9uRmluYWxPYmplY3RfaW5saW5lU3QKICAg
ICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgSlNPYmplY3QgQmFzZTsKIAotICAgICAgICBzdGF0
aWMgSlNGaW5hbE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpTRmluYWxPYmplY3QqIGZpbmFsT2JqZWN0
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNGaW5hbE9iamVjdD4oKmV4ZWMtPmhlYXAo
KSkpIEpTRmluYWxPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpOwotICAgICAg
ICAgICAgZmluYWxPYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZmluYWxPYmplY3Q7Ci0gICAgICAgIH0KLQorICAgICAgICBzdGF0
aWMgSlNGaW5hbE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwogICAgICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhGaW5hbE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgJnNfaW5mbyk7CkBAIC0zOTMsNiArMzg5LDEzIEBAIENPTVBJTEVfQVNTRVJU
KChKU0ZpbmFsT2JqZWN0X2lubGluZVN0b3JhZ2VDYXBhY2l0eSA+PSBKU05vbkZpbmFsT2JqZWN0
X2lubGluZVN0CiAgICAgICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4gbV9pbmxpbmVTdG9y
YWdlW0pTRmluYWxPYmplY3RfaW5saW5lU3RvcmFnZUNhcGFjaXR5XTsKICAgICB9OwogCitpbmxp
bmUgSlNGaW5hbE9iamVjdCogSlNGaW5hbE9iamVjdDo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNGaW5hbE9iamVjdCogZmluYWxPYmplY3Qg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0ZpbmFsT2JqZWN0PigqZXhlYy0+aGVhcCgp
KSkgSlNGaW5hbE9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSk7CisgICAgZmlu
YWxPYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgcmV0dXJu
IGZpbmFsT2JqZWN0OworfQorCiBpbmxpbmUgYm9vbCBpc0pTRmluYWxPYmplY3QoSlNDZWxsKiBj
ZWxsKQogewogICAgIHJldHVybiBjZWxsLT5jbGFzc0luZm8oKSA9PSAmSlNGaW5hbE9iamVjdDo6
c19pbmZvOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dTaGVsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxs
LmNwcAppbmRleCAwM2JjZDQyOTI5ZDUwMmI4ZWFlOGY1YmMzYmY3M2FhODBhYWJmNmM3Li45MGI2
ZTQyN2I0MDRiMTI0ZmZmYzBmYzFkYmFmNzJlOTgyMDI1NjMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcApAQCAtMTY4LDcgKzE2OCw3IEBA
IHZvaWQqIEpTRE9NV2luZG93U2hlbGw6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSkKICAgICBB
U1NFUlQoIWhlYXAuZ2xvYmFsRGF0YSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKICAgICBo
ZWFwLmdsb2JhbERhdGEoKS0+c2V0SW5pdGlhbGl6aW5nT2JqZWN0KHRydWUpOwogI2VuZGlmCi0g
ICAgcmV0dXJuIGhlYXAuYWxsb2NhdGUoc2l6ZSk7CisgICAgcmV0dXJuIGhlYXAuYWxsb2NhdGVX
aXRoRGVzdHJ1Y3RvcihzaXplKTsKIH0KIAogLy8gLS0tLQo=
</data>
<flag name="review"
          id="127196"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>