<?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>108027</bug_id>
          
          <creation_ts>2013-01-27 00:24:06 -0800</creation_ts>
          <short_desc>Enable the preload scanner on the background parser thread</short_desc>
          <delta_ts>2013-02-15 14:16:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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>107807</dependson>
    
    <dependson>109861</dependson>
          <blocked>106127</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>abarth</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>817335</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-27 00:24:06 -0800</bug_when>
    <thetext>Enable the preload scanner on the background parser thread</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817341</commentid>
    <comment_count>1</comment_count>
      <attachid>184903</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-27 01:19:48 -0800</bug_when>
    <thetext>Created attachment 184903
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817439</commentid>
    <comment_count>2</comment_count>
      <attachid>184903</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-27 17:15:27 -0800</bug_when>
    <thetext>Comment on attachment 184903
Patch

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

IMHO, we should use CompactHTMLTokens rather than HTMLTokens.  This patch means we&apos;re creating 2x the number of strings on the background thread (because both the preload scanner and the compact HTML token make strings for every tag and attribute).  Our profiles tell us that we&apos;re spending a significant amount of time creating strings, which means we don&apos;t want to double that work.

&gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:476
&gt; +    KURL documentURL = document()-&gt;url().copy();

Is this a thread-safe copy?

&gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:95
&gt; +            String attributeName(iter-&gt;m_name.data(), iter-&gt;m_name.size());

Here we&apos;re making another copy of every attribute name and value.  If we used CompactHTMLToken, then we could use the String we&apos;ve already created.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817440</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-27 17:24:38 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 184903 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184903&amp;action=review
&gt; 
&gt; IMHO, we should use CompactHTMLTokens rather than HTMLTokens.  This patch means we&apos;re creating 2x the number of strings on the background thread (because both the preload scanner and the compact HTML token make strings for every tag and attribute).  Our profiles tell us that we&apos;re spending a significant amount of time creating strings, which means we don&apos;t want to double that work.

That&apos;s fine.  I took this path in order to keep the main-thread working as much as it was as possible.

Either we&apos;ll need to templatize the code, fork HTMLPreloadScanner, or use CompactHTMLTokens on teh main thread.  Likely we&apos;ll end up with the later, but it&apos;s slightly tricky as you&apos;ll want to do the compacting as late as possible so as to avoid making them if possible.  On the parser thread we obviously never avoid making them.

&gt; &gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:476
&gt; &gt; +    KURL documentURL = document()-&gt;url().copy();
&gt; 
&gt; Is this a thread-safe copy?


    // Makes a deep copy. Helpful only if you need to use a KURL on another
    // thread.  Since the underlying StringImpl objects are immutable, there&apos;s
    // no other reason to ever prefer copy() over plain old assignment.
    KURL copy() const;


&gt; &gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:95
&gt; &gt; +            String attributeName(iter-&gt;m_name.data(), iter-&gt;m_name.size());
&gt; 
&gt; Here we&apos;re making another copy of every attribute name and value.  If we used CompactHTMLToken, then we could use the String we&apos;ve already created.

Agreed.  The having to satisfy two masters is the problem.  I chose not to fork the preload scanner, but instead redesign it so that it was threadsafe while still useable from the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817455</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-27 18:16:20 -0800</bug_when>
    <thetext>It seems like you could have the shared logic work in terms of Strings and then have a controller-like code that calls the shared code starting from either an HTMLToken or a CompactHTMLToken.  You&apos;ve looked at this code in more detail than I have, so maybe there&apos;s some reason why that wouldn&apos;t work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817467</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-27 18:57:45 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; It seems like you could have the shared logic work in terms of Strings and then have a controller-like code that calls the shared code starting from either an HTMLToken or a CompactHTMLToken.  You&apos;ve looked at this code in more detail than I have, so maybe there&apos;s some reason why that wouldn&apos;t work.

Yes, I think there is some potential there.  We can discuss in person tomrorow.  I&apos;m not planning on landing this tonight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833483</commentid>
    <comment_count>6</comment_count>
      <attachid>188437</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-14 15:32:31 -0800</bug_when>
    <thetext>Created attachment 188437
WIP: Compiles but crashes every test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833574</commentid>
    <comment_count>7</comment_count>
      <attachid>188452</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-14 16:59:51 -0800</bug_when>
    <thetext>Created attachment 188452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833998</commentid>
    <comment_count>8</comment_count>
      <attachid>188452</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-15 07:18:34 -0800</bug_when>
    <thetext>Comment on attachment 188452
Patch

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

&gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:565
&gt; +    config-&gt;preloadScanner = adoptPtr(new TokenPreloadScanner(document()-&gt;url().copy()));

Why create this from the main thread?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834068</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-15 08:52:45 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 188452 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=188452&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:565
&gt; &gt; +    config-&gt;preloadScanner = adoptPtr(new TokenPreloadScanner(document()-&gt;url().copy()));
&gt; 
&gt; Why create this from the main thread?

Mostly to match the XSSAuditor and to be ready for future changes (like supporting rewinding the TokenPreloadScanner on document.write).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834118</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-15 09:51:12 -0800</bug_when>
    <thetext>Note: We need to move to a struct in any case because we&apos;d otherwise need to send the documentURL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834154</commentid>
    <comment_count>11</comment_count>
      <attachid>188452</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-02-15 10:31:38 -0800</bug_when>
    <thetext>Comment on attachment 188452
Patch

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

&gt; Source/WebCore/html/parser/BackgroundHTMLParser.h:87
&gt; +    explicit BackgroundHTMLParser(PassRefPtr&lt;WeakReference&lt;BackgroundHTMLParser&gt; &gt;, PassOwnPtr&lt;Configuration&gt;);

Remove explicit, this has 2 args.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834157</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-15 10:32:34 -0800</bug_when>
    <thetext>Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834158</commentid>
    <comment_count>13</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-02-15 10:32:43 -0800</bug_when>
    <thetext>It would be nice to rebase so EWS can chomp on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834187</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-15 11:03:54 -0800</bug_when>
    <thetext>Yep!  Will do after bug 109861 lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834243</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-15 12:00:08 -0800</bug_when>
    <thetext>Its not clear to me that sending everything over in one hunk is the right design. I think we may want to issue preloads sooner.  But this is definitely fine to get us going.  Thank you for finishing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834248</commentid>
    <comment_count>16</comment_count>
      <attachid>188612</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-15 12:01:49 -0800</bug_when>
    <thetext>Created attachment 188612
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834251</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-15 12:03:39 -0800</bug_when>
    <thetext>&gt; Its not clear to me that sending everything over in one hunk is the right design. I think we may want to issue preloads sooner.  But this is definitely fine to get us going.  Thank you for finishing this.

Yeah, this patch is just a first step.  We&apos;ll definitely want to iterate from here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834369</commentid>
    <comment_count>18</comment_count>
      <attachid>188612</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-15 14:16:12 -0800</bug_when>
    <thetext>Comment on attachment 188612
Patch

Clearing flags on attachment: 188612

Committed r143051: &lt;http://trac.webkit.org/changeset/143051&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834370</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-15 14:16:17 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184903</attachid>
            <date>2013-01-27 01:19:48 -0800</date>
            <delta_ts>2013-02-14 15:32:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108027-20130127011641.patch</filename>
            <type>text/plain</type>
            <size>12374</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2Y1OGRlNzUzOWI4NjMw
ZmZmMzE5Y2I4NDM1OThhMjliODU3YTNlYi4uNDlkMDQ0YTA0YjFkOTg2NDgyMzQ2ZTIzNzAyM2Y1
ZWU4OGFhYTA2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEzLTAxLTI3ICBFcmlj
IFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICBFbmFibGUgdGhlIHByZWxvYWQg
c2Nhbm5lciBvbiB0aGUgYmFja2dyb3VuZCBwYXJzZXIgdGhyZWFkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgwMjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMTA3ODA3IG1hZGUgdGhlIHByZWxv
YWQgc2Nhbm5lciByZWFkeSBmb3IgYmFja2dyb3VuZCBwYXJzaW5nCisgICAgICAgIGFuZCB0aGlz
IHBhdGNoIGFjdHVhbGx5IHR1cm5zIGl0IG9uLgorCisgICAgICAgIE1vc3RseSB0aGlzIHJlcXVp
cmVkIHJlbW92aW5nIEF0b21pY1N0cmluZyB1c2FnZSBzaW5jZSB3ZSBuZXZlciBjYWxsCisgICAg
ICAgIEF0b21pY1N0cmluZzo6aW5pdCgpIG9uIHRoZSBwYXJzZXIgdGhyZWFkIGN1cnJlbnRseSAo
YW5kIHRodXMgY2FuJ3QgdXNlIEF0b21pY1N0cmluZykuCisKKyAgICAgICAgSSBiZWxpZXZlIHdl
J3JlIGdvaW5nIHRvIHJlLXZpc2l0IG91ciBBdG9taWNTdHJpbmcgZGVjaXNpb24gc29vbiwgcG9z
c2libHkKKyAgICAgICAgY2xlYW5pbmcgdXAgdGhpcyBjb2RlIHRvIG5vdCBoYXZlIHRvIGRvIHNw
ZWNpYWwgd29yayB0byBiZSB0aHJlYWRpbmctYXdhcmUuCisKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9CYWNrZ3JvdW5kSFRNTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCYWNrZ3JvdW5k
SFRNTFBhcnNlcjo6QmFja2dyb3VuZEhUTUxQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmFj
a2dyb3VuZEhUTUxQYXJzZXI6OnB1bXBUb2tlbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmFj
a2dyb3VuZEhUTUxQYXJzZXI6OmNyZWF0ZVBhcnRpYWwpOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0JhY2tncm91bmRIVE1MUGFyc2VyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkJhY2tncm91bmRIVE1MUGFyc2VyOjpjcmVhdGUpOgorICAgICAgICAoQmFja2dyb3Vu
ZEhUTUxQYXJzZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0QmFja2dyb3Vu
ZFBhcnNlcik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlByZWxvYWRUYXNrOjpQcmVsb2FkVGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpQcmVsb2FkVGFzazo6cHJvY2Vzc0F0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UHJlbG9hZFRhc2s6OnRhZ05hbWUpOgorICAgICAgICAoUHJlbG9hZFRhc2spOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzUG9zc2libGVUZW1wbGF0ZVRh
Zyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NQb3NzaWJs
ZVN0eWxlVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vz
c1Bvc3NpYmxlQmFzZVRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJlbG9hZFNjYW5uZXI6
OnByb2Nlc3NUb2tlbik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVy
Lmg6CisgICAgICAgIChIVE1MUHJlbG9hZFNjYW5uZXIpOgorCiAyMDEzLTAxLTI1ICBFcmljIFNl
aWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBUaHJlYWRlZCBIVE1MIFBhcnNlciBz
aG91bGQgYmUgYWJsZSB0byBpc3N1ZSBwcmVsb2FkIHJlcXVlc3RzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9CYWNrZ3JvdW5kSFRNTFBhcnNlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9CYWNrZ3JvdW5kSFRNTFBhcnNlci5jcHAKaW5kZXggY2Y4Yzk3
MmE4YmY4YzY5YjhkNjQ4ZjJhM2YzNGRhOGQ2ZDQyNmQwNi4uZGI5MmQzMWFiYmYxZjdlOTg5MDZl
MGM2ZDU4Y2IzOTM5YzYzNjg3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvQmFja2dyb3VuZEhUTUxQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0JhY2tncm91bmRIVE1MUGFyc2VyLmNwcApAQCAtODIsMTEgKzgyLDEyIEBAIFBhcnNlck1h
cDo6QmFja2dyb3VuZFBhcnNlck1hcCYgUGFyc2VyTWFwOjpiYWNrZ3JvdW5kUGFyc2VycygpCiAg
ICAgcmV0dXJuIG1fYmFja2dyb3VuZFBhcnNlcnM7CiB9CiAKLUJhY2tncm91bmRIVE1MUGFyc2Vy
OjpCYWNrZ3JvdW5kSFRNTFBhcnNlcihjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYgb3B0aW9ucywg
Y29uc3QgV2Vha1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+JiBwYXJzZXIpCitCYWNrZ3JvdW5kSFRN
TFBhcnNlcjo6QmFja2dyb3VuZEhUTUxQYXJzZXIoY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmIG9w
dGlvbnMsIGNvbnN0IFdlYWtQdHI8SFRNTERvY3VtZW50UGFyc2VyPiYgcGFyc2VyLCBjb25zdCBX
ZWFrUHRyPEhUTUxSZXNvdXJjZVByZWxvYWRlcj4mIHByZWxvYWRlciwgY29uc3QgS1VSTCYgZG9j
dW1lbnRVUkwpCiAgICAgOiBtX2luRm9yZWlnbkNvbnRlbnQoZmFsc2UpCiAgICAgLCBtX3Rva2Vu
aXplcihIVE1MVG9rZW5pemVyOjpjcmVhdGUob3B0aW9ucykpCiAgICAgLCBtX29wdGlvbnMob3B0
aW9ucykKICAgICAsIG1fcGFyc2VyKHBhcnNlcikKKyAgICAsIG1fcHJlbG9hZFNjYW5uZXIoYWRv
cHRQdHIobmV3IEhUTUxQcmVsb2FkU2Nhbm5lcihwcmVsb2FkZXIsIG9wdGlvbnMsIGRvY3VtZW50
VVJMKSkpCiAgICAgLCBtX3BlbmRpbmdUb2tlbnMoYWRvcHRQdHIobmV3IENvbXBhY3RIVE1MVG9r
ZW5TdHJlYW0pKQogewogfQpAQCAtMTU1LDYgKzE1Niw4IEBAIHZvaWQgQmFja2dyb3VuZEhUTUxQ
YXJzZXI6OnB1bXBUb2tlbml6ZXIoKQogewogICAgIHdoaWxlIChtX3Rva2VuaXplci0+bmV4dFRv
a2VuKG1faW5wdXQsIG1fdG9rZW4pKSB7CiAgICAgICAgIG1fcGVuZGluZ1Rva2Vucy0+YXBwZW5k
KENvbXBhY3RIVE1MVG9rZW4obV90b2tlbiwgVGV4dFBvc2l0aW9uKG1faW5wdXQuY3VycmVudExp
bmUoKSwgbV9pbnB1dC5jdXJyZW50Q29sdW1uKCkpKSk7CisgICAgICAgIC8vIEZJWE1FOiBUaGUg
cHJlbG9hZCBzY2FubmVyIHNob3VsZCB1c2UgQ29tcGFjdEhUTUxUb2tlbnMgaW5zdGVhZCBvZiBI
VE1MVG9rZW4uCisgICAgICAgIG1fcHJlbG9hZFNjYW5uZXItPnByb2Nlc3NUb2tlbihtX3Rva2Vu
KTsKICAgICAgICAgbV90b2tlbi5jbGVhcigpOwogCiAgICAgICAgIGlmICghc2ltdWxhdGVUcmVl
QnVpbGRlcihtX3BlbmRpbmdUb2tlbnMtPmxhc3QoKSkgfHwgbV9wZW5kaW5nVG9rZW5zLT5zaXpl
KCkgPj0gcGVuZGluZ1Rva2VuTGltaXQpCkBAIC0xNzgsMTAgKzE4MSwxMCBAQCB2b2lkIEJhY2tn
cm91bmRIVE1MUGFyc2VyOjpzZW5kVG9rZW5zVG9NYWluVGhyZWFkKCkKICAgICBtX3BlbmRpbmdU
b2tlbnMgPSBhZG9wdFB0cihuZXcgQ29tcGFjdEhUTUxUb2tlblN0cmVhbSk7CiB9CiAKLXZvaWQg
QmFja2dyb3VuZEhUTUxQYXJzZXI6OmNyZWF0ZVBhcnRpYWwoUGFyc2VySWRlbnRpZmllciBpZGVu
dGlmaWVyLCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgV2Vha1B0cjxI
VE1MRG9jdW1lbnRQYXJzZXI+JiBwYXJzZXIpCit2b2lkIEJhY2tncm91bmRIVE1MUGFyc2VyOjpj
cmVhdGVQYXJ0aWFsKFBhcnNlcklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgSFRNTFBhcnNl
ck9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IFdlYWtQdHI8SFRNTERvY3VtZW50UGFyc2VyPiYgcGFy
c2VyLCBjb25zdCBXZWFrUHRyPEhUTUxSZXNvdXJjZVByZWxvYWRlcj4mIHByZWxvYWRlciwgY29u
c3QgS1VSTCYgZG9jdW1lbnRVUkwpCiB7CiAgICAgQVNTRVJUKCFwYXJzZXJNYXAoKS5iYWNrZ3Jv
dW5kUGFyc2VycygpLmdldChpZGVudGlmaWVyKSk7Ci0gICAgcGFyc2VyTWFwKCkuYmFja2dyb3Vu
ZFBhcnNlcnMoKS5zZXQoaWRlbnRpZmllciwgQmFja2dyb3VuZEhUTUxQYXJzZXI6OmNyZWF0ZShv
cHRpb25zLCBwYXJzZXIpKTsKKyAgICBwYXJzZXJNYXAoKS5iYWNrZ3JvdW5kUGFyc2VycygpLnNl
dChpZGVudGlmaWVyLCBCYWNrZ3JvdW5kSFRNTFBhcnNlcjo6Y3JlYXRlKG9wdGlvbnMsIHBhcnNl
ciwgcHJlbG9hZGVyLCBkb2N1bWVudFVSTCkpOwogfQogCiB2b2lkIEJhY2tncm91bmRIVE1MUGFy
c2VyOjpzdG9wUGFydGlhbChQYXJzZXJJZGVudGlmaWVyIGlkZW50aWZpZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9CYWNrZ3JvdW5kSFRNTFBhcnNlci5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQmFja2dyb3VuZEhUTUxQYXJzZXIuaAppbmRleCBlYjhh
MmIwOGMwYjgyMGYzNWJiOGVlNWVjMGRlMDlmMDY3NDM2YmJkLi44YTQ0OWFkNTZiZWY1ZDYxODdj
MTI0MTYyMTczMjdmMTQxMWZiNGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9CYWNrZ3JvdW5kSFRNTFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0JhY2tncm91bmRIVE1MUGFyc2VyLmgKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUg
IkNvbXBhY3RIVE1MVG9rZW4uaCIKICNpbmNsdWRlICJIVE1MUGFyc2VyT3B0aW9ucy5oIgorI2lu
Y2x1ZGUgIkhUTUxQcmVsb2FkU2Nhbm5lci5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbi5oIgogI2lu
Y2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAtMzgs
NiArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHR5cGVkZWYgY29uc3Qgdm9pZCogUGFy
c2VySWRlbnRpZmllcjsKIGNsYXNzIEhUTUxEb2N1bWVudFBhcnNlcjsKK2NsYXNzIEhUTUxSZXNv
dXJjZVByZWxvYWRlcjsKIAogY2xhc3MgQmFja2dyb3VuZEhUTUxQYXJzZXIgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNDUsMTggKzQ3LDE4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFwcGVuZChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGZpbmlzaCgpOwogCi0gICAgc3RhdGlj
IFBhc3NPd25QdHI8QmFja2dyb3VuZEhUTUxQYXJzZXI+IGNyZWF0ZShjb25zdCBIVE1MUGFyc2Vy
T3B0aW9ucyYgb3B0aW9ucywgY29uc3QgV2Vha1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+JiBwYXJz
ZXIpCisgICAgc3RhdGljIFBhc3NPd25QdHI8QmFja2dyb3VuZEhUTUxQYXJzZXI+IGNyZWF0ZShj
b25zdCBIVE1MUGFyc2VyT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgV2Vha1B0cjxIVE1MRG9jdW1l
bnRQYXJzZXI+JiBwYXJzZXIsICBjb25zdCBXZWFrUHRyPEhUTUxSZXNvdXJjZVByZWxvYWRlcj4m
IHByZWxvYWRlciwgY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IEJhY2tncm91bmRIVE1MUGFyc2VyKG9wdGlvbnMsIHBhcnNlcikpOwor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEJhY2tncm91bmRIVE1MUGFyc2VyKG9wdGlvbnMs
IHBhcnNlciwgcHJlbG9hZGVyLCBkb2N1bWVudFVSTCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIGNyZWF0ZVBhcnRpYWwoUGFyc2VySWRlbnRpZmllciwgY29uc3QgSFRNTFBhcnNlck9wdGlv
bnMmLCBjb25zdCBXZWFrUHRyPEhUTUxEb2N1bWVudFBhcnNlcj4mKTsKKyAgICBzdGF0aWMgdm9p
ZCBjcmVhdGVQYXJ0aWFsKFBhcnNlcklkZW50aWZpZXIsIGNvbnN0IEhUTUxQYXJzZXJPcHRpb25z
JiwgY29uc3QgV2Vha1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+JiwgIGNvbnN0IFdlYWtQdHI8SFRN
TFJlc291cmNlUHJlbG9hZGVyPiYsIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMKTsKICAgICBzdGF0
aWMgdm9pZCBzdG9wUGFydGlhbChQYXJzZXJJZGVudGlmaWVyKTsKICAgICBzdGF0aWMgdm9pZCBh
cHBlbmRQYXJ0aWFsKFBhcnNlcklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5wdXQpOwogICAg
IHN0YXRpYyB2b2lkIGZpbmlzaFBhcnRpYWwoUGFyc2VySWRlbnRpZmllcik7CiAKIHByaXZhdGU6
Ci0gICAgQmFja2dyb3VuZEhUTUxQYXJzZXIoY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmLCBjb25z
dCBXZWFrUHRyPEhUTUxEb2N1bWVudFBhcnNlcj4mKTsKKyAgICBCYWNrZ3JvdW5kSFRNTFBhcnNl
cihjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYsIGNvbnN0IFdlYWtQdHI8SFRNTERvY3VtZW50UGFy
c2VyPiYsICBjb25zdCBXZWFrUHRyPEhUTUxSZXNvdXJjZVByZWxvYWRlcj4mLCBjb25zdCBLVVJM
JiBkb2N1bWVudFVSTCk7CiAKICAgICB2b2lkIG1hcmtFbmRPZkZpbGUoKTsKICAgICB2b2lkIHB1
bXBUb2tlbml6ZXIoKTsKQEAgLTcwLDYgKzcyLDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8SFRN
TFRva2VuaXplcj4gbV90b2tlbml6ZXI7CiAgICAgSFRNTFBhcnNlck9wdGlvbnMgbV9vcHRpb25z
OwogICAgIFdlYWtQdHI8SFRNTERvY3VtZW50UGFyc2VyPiBtX3BhcnNlcjsKKyAgICBPd25QdHI8
SFRNTFByZWxvYWRTY2FubmVyPiBtX3ByZWxvYWRTY2FubmVyOwogICAgIE93blB0cjxDb21wYWN0
SFRNTFRva2VuU3RyZWFtPiBtX3BlbmRpbmdUb2tlbnM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAppbmRleCA2ZWVjNGUyMDAz
MWQ4Y2YxNDEwNGM2ZTdjODU3YzIzMTA4ZWYzNzlhLi4xY2E4MTQzMTMyMDIyZTYyNGE2OWJkNTky
ZWQ4ZGQ5MzMxZjk5ODYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTQ3Miw3ICs0NzIsOSBAQCB2b2lkIEhUTUxEb2N1bWVu
dFBhcnNlcjo6c3RhcnRCYWNrZ3JvdW5kUGFyc2VyKCkKIAogICAgIFBhcnNlcklkZW50aWZpZXIg
aWRlbnRpZmllciA9IFBhcnNlck1hcDo6aWRlbnRpZmllckZvclBhcnNlcih0aGlzKTsKICAgICBX
ZWFrUHRyPEhUTUxEb2N1bWVudFBhcnNlcj4gcGFyc2VyID0gbV93ZWFrRmFjdG9yeS5jcmVhdGVX
ZWFrUHRyKCk7Ci0gICAgSFRNTFBhcnNlclRocmVhZDo6c2hhcmVkKCktPnBvc3RUYXNrKGJpbmQo
JkJhY2tncm91bmRIVE1MUGFyc2VyOjpjcmVhdGVQYXJ0aWFsLCBpZGVudGlmaWVyLCBtX29wdGlv
bnMsIHBhcnNlcikpOworICAgIFdlYWtQdHI8SFRNTFJlc291cmNlUHJlbG9hZGVyPiBwcmVsb2Fk
ZXIgPSBtX3ByZWxvYWRlci0+Y3JlYXRlV2Vha1B0cigpOworICAgIEtVUkwgZG9jdW1lbnRVUkwg
PSBkb2N1bWVudCgpLT51cmwoKS5jb3B5KCk7CisgICAgSFRNTFBhcnNlclRocmVhZDo6c2hhcmVk
KCktPnBvc3RUYXNrKGJpbmQoJkJhY2tncm91bmRIVE1MUGFyc2VyOjpjcmVhdGVQYXJ0aWFsLCBp
ZGVudGlmaWVyLCBtX29wdGlvbnMsIHBhcnNlciwgcHJlbG9hZGVyLCBkb2N1bWVudFVSTCkpOwog
fQogCiB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6c3RvcEJhY2tncm91bmRQYXJzZXIoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKaW5k
ZXggZGMyMDUxYzkyODRhZDc0NmIyMTQxNzIxMDdiOTNhMjY3YWNkZDI4Ny4uMTJmN2E4MzlhOWE0
YzhjMDgxZmZjMWJmNWI2N2Y2OTYyNzQ0YjI2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRp
YyBib29sIGlzU3RhcnRPckVuZFRhZyhjb25zdCBIVE1MVG9rZW4mIHRva2VuKQogCiBjbGFzcyBQ
cmVsb2FkVGFzayB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgUHJlbG9hZFRhc2soY29uc3QgQXRv
bWljU3RyaW5nJiB0YWdOYW1lLCBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3QmIGF0dHJp
YnV0ZXMpCisgICAgZXhwbGljaXQgUHJlbG9hZFRhc2soY29uc3QgU3RyaW5nJiB0YWdOYW1lLCBj
b25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3QmIGF0dHJpYnV0ZXMpCiAgICAgICAgIDogbV90
YWdOYW1lKHRhZ05hbWUpCiAgICAgICAgICwgbV9saW5rSXNTdHlsZVNoZWV0KGZhbHNlKQogICAg
ICAgICAsIG1fbGlua01lZGlhQXR0cmlidXRlSXNTY3JlZW4odHJ1ZSkKQEAgLTkyLDcgKzkyLDcg
QEAgcHVibGljOgogCiAgICAgICAgIGZvciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0Ojpjb25z
dF9pdGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5iZWdpbigpOwogICAgICAgICAgICAgIGl0ZXIg
IT0gYXR0cmlidXRlcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBBdG9taWNTdHJpbmcg
YXR0cmlidXRlTmFtZShpdGVyLT5tX25hbWUuZGF0YSgpLCBpdGVyLT5tX25hbWUuc2l6ZSgpKTsK
KyAgICAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lKGl0ZXItPm1fbmFtZS5kYXRhKCksIGl0
ZXItPm1fbmFtZS5zaXplKCkpOwogICAgICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0g
U3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoaXRlci0+bV92YWx1ZS5kYXRhKCksIGl0
ZXItPm1fdmFsdWUuc2l6ZSgpKTsKIAogICAgICAgICAgICAgaWYgKHRocmVhZFNhZmVNYXRjaChh
dHRyaWJ1dGVOYW1lLCBjaGFyc2V0QXR0cikpCkBAIC0xOTEsNyArMTkxLDcgQEAgcHVibGljOgog
ICAgICAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJkhUTUxSZXNvdXJjZVByZWxvYWRlcjo6cHJl
bG9hZCwgcHJlbG9hZGVyLCByZXF1ZXN0LnJlbGVhc2UoKSkpOwogICAgIH0KIAotICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdGFnTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZTsgfQorICAg
IGNvbnN0IFN0cmluZyYgdGFnTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZTsgfQogCiBw
cml2YXRlOgogCkBAIC0yMDAsNyArMjAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1f
Y3Jvc3NPcmlnaW5Nb2RlLmlzTnVsbCgpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1fY3Jvc3NPcmln
aW5Nb2RlLCAidXNlLWNyZWRlbnRpYWxzIik7CiAgICAgfQogCi0gICAgQXRvbWljU3RyaW5nIG1f
dGFnTmFtZTsKKyAgICBTdHJpbmcgbV90YWdOYW1lOwogICAgIFN0cmluZyBtX3VybFRvTG9hZDsK
ICAgICBTdHJpbmcgbV9jaGFyc2V0OwogICAgIFN0cmluZyBtX2Nyb3NzT3JpZ2luTW9kZTsKQEAg
LTI0NSw3ICsyNDUsNyBAQCB2b2lkIEhUTUxQcmVsb2FkU2Nhbm5lcjo6c2Nhbihjb25zdCBLVVJM
JiBzdGFydGluZ0Jhc2VFbGVtZW50VVJMKQogfQogCiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1F
TlQpCi1ib29sIEhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1Bvc3NpYmxlVGVtcGxhdGVUYWco
Y29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4mIHRva2VuKQorYm9v
bCBIVE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NQb3NzaWJsZVRlbXBsYXRlVGFnKGNvbnN0IFN0
cmluZyYgdGFnTmFtZSwgY29uc3QgSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBpZiAoaXNTdGFy
dE9yRW5kVGFnKHRva2VuKSAmJiB0aHJlYWRTYWZlTWF0Y2godGFnTmFtZSwgdGVtcGxhdGVUYWcp
KSB7CiAgICAgICAgIGlmIChpc1N0YXJ0VGFnKHRva2VuKSkKQEAgLTI2Nyw3ICsyNjcsNyBAQCBi
b29sIEhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1N0eWxlQ2hhcmFjdGVycyhjb25zdCBIVE1M
VG9rZW4mIHRva2VuKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEhUTUxQcmVsb2FkU2Nh
bm5lcjo6cHJvY2Vzc1Bvc3NpYmxlU3R5bGVUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1l
LCBjb25zdCBIVE1MVG9rZW4mIHRva2VuKQorYm9vbCBIVE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nl
c3NQb3NzaWJsZVN0eWxlVGFnKGNvbnN0IFN0cmluZyYgdGFnTmFtZSwgY29uc3QgSFRNTFRva2Vu
JiB0b2tlbikKIHsKICAgICBBU1NFUlQoaXNTdGFydE9yRW5kVGFnKHRva2VuKSk7CiAgICAgaWYg
KHRocmVhZFNhZmVNYXRjaCh0YWdOYW1lLCBzdHlsZVRhZykpIHsKQEAgLTI3OSw3ICsyNzksNyBA
QCBib29sIEhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1Bvc3NpYmxlU3R5bGVUYWcoY29uc3Qg
QXRvbWljU3RyaW5nJiB0YWdOYW1lLCBjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBI
VE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NQb3NzaWJsZUJhc2VUYWcoY29uc3QgQXRvbWljU3Ry
aW5nJiB0YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4mIHRva2VuKQorYm9vbCBIVE1MUHJlbG9hZFNj
YW5uZXI6OnByb2Nlc3NQb3NzaWJsZUJhc2VUYWcoY29uc3QgU3RyaW5nJiB0YWdOYW1lLCBjb25z
dCBIVE1MVG9rZW4mIHRva2VuKQogewogICAgIEFTU0VSVChpc1N0YXJ0VGFnKHRva2VuKSk7CiAg
ICAgaWYgKHRocmVhZFNhZmVNYXRjaCh0YWdOYW1lLCBiYXNlVGFnKSkgewpAQCAtMzA3LDcgKzMw
Nyw3IEBAIHZvaWQgSFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzVG9rZW4oY29uc3QgSFRNTFRv
a2VuJiB0b2tlbikKICAgICBpZiAoIWlzU3RhcnRPckVuZFRhZyh0b2tlbikpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEF0b21pY1N0cmluZyB0YWdOYW1lKHRva2VuLm5hbWUoKS5kYXRhKCksIHRv
a2VuLm5hbWUoKS5zaXplKCkpOworICAgIFN0cmluZyB0YWdOYW1lKHRva2VuLm5hbWUoKS5kYXRh
KCksIHRva2VuLm5hbWUoKS5zaXplKCkpOwogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQog
ICAgIGlmIChwcm9jZXNzUG9zc2libGVUZW1wbGF0ZVRhZyh0YWdOYW1lLCB0b2tlbikpCiAgICAg
ICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQ
cmVsb2FkU2Nhbm5lci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRT
Y2FubmVyLmgKaW5kZXggOWQxOWEzZWJmNDIyNGVlOTdhMmE5NjY3ZTE1MmYwODZjYzBlYjk1ZC4u
YjM4ZGUyNmQ1YmQ2Yzk4ZDk5MzNlZGNjZWY1M2Y5MjdjMGYyYmZkMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmgKQEAgLTQ3LDE3ICs0Nywx
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRUb0VuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcm
KTsKICAgICB2b2lkIHNjYW4oY29uc3QgS1VSTCYgZG9jdW1lbnRCYXNlRWxlbWVudFVSTCk7CiAK
LXByaXZhdGU6CiAgICAgdm9pZCBwcm9jZXNzVG9rZW4oY29uc3QgSFRNTFRva2VuJik7CiAKK3By
aXZhdGU6CiAgICAgYm9vbCBwcm9jZXNzU3R5bGVDaGFyYWN0ZXJzKGNvbnN0IEhUTUxUb2tlbiYp
OwogCiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgYm9vbCBwcm9jZXNzUG9zc2li
bGVUZW1wbGF0ZVRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGNvbnN0IEhUTUxUb2tl
biYpOworICAgIGJvb2wgcHJvY2Vzc1Bvc3NpYmxlVGVtcGxhdGVUYWcoY29uc3QgU3RyaW5nJiB0
YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4mKTsKICNlbmRpZgogCi0gICAgYm9vbCBwcm9jZXNzUG9z
c2libGVTdHlsZVRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGNvbnN0IEhUTUxUb2tl
biYpOwotICAgIGJvb2wgcHJvY2Vzc1Bvc3NpYmxlQmFzZVRhZyhjb25zdCBBdG9taWNTdHJpbmcm
IHRhZ05hbWUsIGNvbnN0IEhUTUxUb2tlbiYpOworICAgIGJvb2wgcHJvY2Vzc1Bvc3NpYmxlU3R5
bGVUYWcoY29uc3QgU3RyaW5nJiB0YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4mKTsKKyAgICBib29s
IHByb2Nlc3NQb3NzaWJsZUJhc2VUYWcoY29uc3QgU3RyaW5nJiB0YWdOYW1lLCBjb25zdCBIVE1M
VG9rZW4mKTsKIAogICAgIFdlYWtQdHI8SFRNTFJlc291cmNlUHJlbG9hZGVyPiBtX3ByZWxvYWRl
cjsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188437</attachid>
            <date>2013-02-14 15:32:31 -0800</date>
            <delta_ts>2013-02-14 16:59:48 -0800</delta_ts>
            <desc>WIP: Compiles but crashes every test</desc>
            <filename>bug-108027-20130214152859.patch</filename>
            <type>text/plain</type>
            <size>17134</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyODYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9CYWNrZ3JvdW5kSFRNTFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9CYWNrZ3JvdW5kSFRNTFBhcnNlci5jcHAKaW5kZXggYmI4NTM0YjdkMzllY2MzYzYx
OGZlNjY1MzkyM2NlZmRhZjViYzU1Yi4uNjEzMTY0NTU5NDNkN2FlNTczNGVkOWY4MWIzMWQzMjhl
MDcyMTU2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQmFja2dyb3Vu
ZEhUTUxQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0JhY2tncm91
bmRIVE1MUGFyc2VyLmNwcApAQCAtMTA2LDE3ICsxMDYsMTggQEAgc3RhdGljIGlubGluZSBib29s
IHRva2VuRXhpdHNGb3JlaWduQ29udGVudChjb25zdCBDb21wYWN0SFRNTFRva2VuJiB0b2tlbikK
ICAgICAgICAgfHwgKHRocmVhZFNhZmVNYXRjaCh0YWdOYW1lLCBmb250VGFnKSAmJiAodG9rZW4u
Z2V0QXR0cmlidXRlSXRlbShjb2xvckF0dHIpIHx8IHRva2VuLmdldEF0dHJpYnV0ZUl0ZW0oZmFj
ZUF0dHIpIHx8IHRva2VuLmdldEF0dHJpYnV0ZUl0ZW0oc2l6ZUF0dHIpKSk7CiB9CiAKLS8vIEZJ
WE1FOiBUdW5lIHRoaXMgY29uc3RhbnQgYmFzZWQgb24gYSBiZW5jaG1hcmsuIFRoZSBjdXJyZW50
IHZhbHVlIHdhcyBjaG9vc2VuIGFyYml0cmFyaWx5LgorLy8gRklYTUU6IFR1bmUgdGhpcyBjb25z
dGFudCBiYXNlZCBvbiBhIGJlbmNobWFyay4gVGhlIGN1cnJlbnQgdmFsdWUgd2FzIGNob3NlbiBh
cmJpdHJhcmlseS4KIHN0YXRpYyBjb25zdCBzaXplX3QgcGVuZGluZ1Rva2VuTGltaXQgPSA0MDAw
OwogCi1CYWNrZ3JvdW5kSFRNTFBhcnNlcjo6QmFja2dyb3VuZEhUTUxQYXJzZXIoUGFzc1JlZlB0
cjxXZWFrUmVmZXJlbmNlPEJhY2tncm91bmRIVE1MUGFyc2VyPiA+IHJlZmVyZW5jZSwgY29uc3Qg
SFRNTFBhcnNlck9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IFdlYWtQdHI8SFRNTERvY3VtZW50UGFy
c2VyPiYgcGFyc2VyLCBQYXNzT3duUHRyPFhTU0F1ZGl0b3I+IHhzc0F1ZGl0b3IpCi0gICAgOiBt
X3dlYWtGYWN0b3J5KHJlZmVyZW5jZSwgdGhpcykKK0JhY2tncm91bmRIVE1MUGFyc2VyOjpCYWNr
Z3JvdW5kSFRNTFBhcnNlcihjb25zdCBDb25maWd1cmF0aW9uJiBjb25maWcpCisgICAgOiBtX3dl
YWtGYWN0b3J5KGNvbmZpZy5yZWZlcmVuY2UsIHRoaXMpCiAgICAgLCBtX3Rva2VuKGFkb3B0UHRy
KG5ldyBIVE1MVG9rZW4pKQotICAgICwgbV90b2tlbml6ZXIoSFRNTFRva2VuaXplcjo6Y3JlYXRl
KG9wdGlvbnMpKQotICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCi0gICAgLCBtX3BhcnNlcihwYXJz
ZXIpCisgICAgLCBtX3Rva2VuaXplcihIVE1MVG9rZW5pemVyOjpjcmVhdGUoY29uZmlnLm9wdGlv
bnMpKQorICAgICwgbV9vcHRpb25zKGNvbmZpZy5vcHRpb25zKQorICAgICwgbV9wYXJzZXIoY29u
ZmlnLnBhcnNlcikKICAgICAsIG1fcGVuZGluZ1Rva2VucyhhZG9wdFB0cihuZXcgQ29tcGFjdEhU
TUxUb2tlblN0cmVhbSkpCi0gICAgLCBtX3hzc0F1ZGl0b3IoeHNzQXVkaXRvcikKKyAgICAsIG1f
eHNzQXVkaXRvcihjb25maWcueHNzQXVkaXRvcikKKyAgICAsIG1fcHJlbG9hZFNjYW5uZXIoY29u
ZmlnLnByZWxvYWRTY2FubmVyKQogewogICAgIG1fbmFtZXNwYWNlU3RhY2suYXBwZW5kKEhUTUwp
OwogfQpAQCAtMTMzLDYgKzEzNCw3IEBAIHZvaWQgQmFja2dyb3VuZEhUTUxQYXJzZXI6OnJlc3Vt
ZUZyb20oUGFzc093blB0cjxDaGVja3BvaW50PiBjaGVja3BvaW50KQogICAgIG1fdG9rZW4gPSBj
aGVja3BvaW50LT50b2tlbi5yZWxlYXNlKCk7CiAgICAgbV90b2tlbml6ZXIgPSBjaGVja3BvaW50
LT50b2tlbml6ZXIucmVsZWFzZSgpOwogICAgIG1faW5wdXQucmV3aW5kVG8oY2hlY2twb2ludC0+
aW5wdXRDaGVja3BvaW50LCBjaGVja3BvaW50LT51bnBhcnNlZElucHV0KTsKKyAgICBtX3ByZWxv
YWRTY2FubmVyLmNsZWFyKCk7IC8vIEZJWE1FOiBXZSBzaG91bGQgcmV3aW5kIHRoZSBwcmVsb2Fk
IHNjYW5uZXIgcmF0aGVyIHRoYW4gY2xlYXJpbmcgaXQuCiAgICAgcHVtcFRva2VuaXplcigpOwog
fQogCkBAIC0yMjMsOCArMjI1LDEzIEBAIHZvaWQgQmFja2dyb3VuZEhUTUxQYXJzZXI6OnB1bXBU
b2tlbml6ZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBPd25QdHI8WFNTSW5mbz4geHNzSW5m
byA9IG1feHNzQXVkaXRvci0+ZmlsdGVyVG9rZW4oRmlsdGVyVG9rZW5SZXF1ZXN0KCptX3Rva2Vu
LCBtX3NvdXJjZVRyYWNrZXIsIG1fdG9rZW5pemVyLT5zaG91bGRBbGxvd0NEQVRBKCkpKTsKICAg
ICAgICAgICAgIENvbXBhY3RIVE1MVG9rZW4gdG9rZW4obV90b2tlbi5nZXQoKSwgVGV4dFBvc2l0
aW9uKG1faW5wdXQuY3VycmVudCgpLmN1cnJlbnRMaW5lKCksIG1faW5wdXQuY3VycmVudCgpLmN1
cnJlbnRDb2x1bW4oKSkpOworCiAgICAgICAgICAgICBpZiAoeHNzSW5mbykKICAgICAgICAgICAg
ICAgICB0b2tlbi5zZXRYU1NJbmZvKHhzc0luZm8ucmVsZWFzZSgpKTsKKworICAgICAgICAgICAg
aWYgKG1fcHJlbG9hZFNjYW5uZXIpCisgICAgICAgICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci0+
c2Nhbih0b2tlbiwgbV9wZW5kaW5nUHJlbG9hZHMpOworCiAgICAgICAgICAgICBtX3BlbmRpbmdU
b2tlbnMtPmFwcGVuZCh0b2tlbik7CiAgICAgICAgIH0KIApAQCAtMjQ4LDYgKzI1NSw3IEBAIHZv
aWQgQmFja2dyb3VuZEhUTUxQYXJzZXI6OnNlbmRUb2tlbnNUb01haW5UaHJlYWQoKQogCiAgICAg
T3duUHRyPEhUTUxEb2N1bWVudFBhcnNlcjo6UGFyc2VkQ2h1bms+IGNodW5rID0gYWRvcHRQdHIo
bmV3IEhUTUxEb2N1bWVudFBhcnNlcjo6UGFyc2VkQ2h1bmspOwogICAgIGNodW5rLT50b2tlbnMg
PSBtX3BlbmRpbmdUb2tlbnMucmVsZWFzZSgpOworICAgIGNodW5rLT5wcmVsb2Fkcy5zd2FwKG1f
cGVuZGluZ1ByZWxvYWRzKTsKICAgICBjaHVuay0+Y2hlY2twb2ludCA9IG1faW5wdXQuY3JlYXRl
Q2hlY2twb2ludCgpOwogICAgIGNhbGxPbk1haW5UaHJlYWQoYmluZCgmSFRNTERvY3VtZW50UGFy
c2VyOjpkaWRSZWNlaXZlUGFyc2VkQ2h1bmtGcm9tQmFja2dyb3VuZFBhcnNlciwgbV9wYXJzZXIs
IGNodW5rLnJlbGVhc2UoKSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9CYWNrZ3JvdW5kSFRNTFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
QmFja2dyb3VuZEhUTUxQYXJzZXIuaAppbmRleCA3YTAxMTQ4YzhhZDdiZjE4MDdiZDRjMjU0NDU0
ODI2OTVlNjFlOWUzLi40Yjc4OTBkYzRmOTQzODRjYWEzYzFkYzI0YjBhNWZjYTQ2YThhNGE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9CYWNrZ3JvdW5kSFRNTFBhcnNl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0JhY2tncm91bmRIVE1MUGFyc2Vy
LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJCYWNrZ3JvdW5kSFRNTElucHV0U3RyZWFt
LmgiCiAjaW5jbHVkZSAiQ29tcGFjdEhUTUxUb2tlbi5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJP
cHRpb25zLmgiCisjaW5jbHVkZSAiSFRNTFByZWxvYWRTY2FubmVyLmgiCiAjaW5jbHVkZSAiSFRN
TFNvdXJjZVRyYWNrZXIuaCIKICNpbmNsdWRlICJIVE1MVG9rZW4uaCIKICNpbmNsdWRlICJIVE1M
VG9rZW5pemVyLmgiCkBAIC00OCw5ICs0OSwzMCBAQCBjbGFzcyBYU1NBdWRpdG9yOwogY2xhc3Mg
QmFja2dyb3VuZEhUTUxQYXJzZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIHN0YXRpYyB2b2lkIGNyZWF0ZShQYXNzUmVmUHRyPFdlYWtSZWZlcmVuY2U8QmFj
a2dyb3VuZEhUTUxQYXJzZXI+ID4gcmVmZXJlbmNlLCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYg
b3B0aW9ucywgY29uc3QgV2Vha1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+JiBwYXJzZXIsIFBhc3NP
d25QdHI8WFNTQXVkaXRvcj4geHNzQXVkaXRvcikKKyAgICBzdHJ1Y3QgQ29uZmlndXJhdGlvbiB7
CisgICAgICAgIENvbmZpZ3VyYXRpb24oUGFzc1JlZlB0cjxXZWFrUmVmZXJlbmNlPEJhY2tncm91
bmRIVE1MUGFyc2VyPiA+IHJlZiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIVE1MUGFy
c2VyT3B0aW9ucyYgcGFyc2VyT3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBX
ZWFrUHRyPEhUTUxEb2N1bWVudFBhcnNlcj4mIGRvY3VtZW50UGFyc2VyLAorICAgICAgICAgICAg
ICAgICAgICAgIFBhc3NPd25QdHI8WFNTQXVkaXRvcj4gYXVkaXRvciwKKyAgICAgICAgICAgICAg
ICAgICAgICBQYXNzT3duUHRyPFRva2VuUHJlbG9hZFNjYW5uZXI+IHNjYW5uZXIpCisgICAgICAg
ICAgICA6IHJlZmVyZW5jZShyZWYpCisgICAgICAgICAgICAsIG9wdGlvbnMocGFyc2VyT3B0aW9u
cykKKyAgICAgICAgICAgICwgcGFyc2VyKGRvY3VtZW50UGFyc2VyKQorICAgICAgICAgICAgLCB4
c3NBdWRpdG9yKGF1ZGl0b3IpCisgICAgICAgICAgICAsIHByZWxvYWRTY2FubmVyKHNjYW5uZXIp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8V2Vha1JlZmVyZW5j
ZTxCYWNrZ3JvdW5kSFRNTFBhcnNlcj4gPiByZWZlcmVuY2U7CisgICAgICAgIEhUTUxQYXJzZXJP
cHRpb25zIG9wdGlvbnM7CisgICAgICAgIFdlYWtQdHI8SFRNTERvY3VtZW50UGFyc2VyPiBwYXJz
ZXI7CisgICAgICAgIFBhc3NPd25QdHI8WFNTQXVkaXRvcj4geHNzQXVkaXRvcjsKKyAgICAgICAg
UGFzc093blB0cjxUb2tlblByZWxvYWRTY2FubmVyPiBwcmVsb2FkU2Nhbm5lcjsKKyAgICB9Owor
CisgICAgc3RhdGljIHZvaWQgY3JlYXRlKGNvbnN0IENvbmZpZ3VyYXRpb24mIGNvbmZpZykKICAg
ICB7Ci0gICAgICAgIG5ldyBCYWNrZ3JvdW5kSFRNTFBhcnNlcihyZWZlcmVuY2UsIG9wdGlvbnMs
IHBhcnNlciwgeHNzQXVkaXRvcik7CisgICAgICAgIG5ldyBCYWNrZ3JvdW5kSFRNTFBhcnNlcihj
b25maWcpOwogICAgICAgICAvLyBDYWxsZXIgbXVzdCBmcmVlIGJ5IGNhbGxpbmcgc3RvcCgpLgog
ICAgIH0KIApAQCAtNzYsNyArOTgsNyBAQCBwcml2YXRlOgogICAgICAgICBNYXRoTUwKICAgICB9
OwogCi0gICAgQmFja2dyb3VuZEhUTUxQYXJzZXIoUGFzc1JlZlB0cjxXZWFrUmVmZXJlbmNlPEJh
Y2tncm91bmRIVE1MUGFyc2VyPiA+LCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYsIGNvbnN0IFdl
YWtQdHI8SFRNTERvY3VtZW50UGFyc2VyPiYsIFBhc3NPd25QdHI8WFNTQXVkaXRvcj4pOworICAg
IGV4cGxpY2l0IEJhY2tncm91bmRIVE1MUGFyc2VyKGNvbnN0IENvbmZpZ3VyYXRpb24mKTsKIAog
ICAgIHZvaWQgbWFya0VuZE9mRmlsZSgpOwogICAgIHZvaWQgcHVtcFRva2VuaXplcigpOwpAQCAt
OTMsOCArMTE1LDEyIEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEhUTUxUb2tlbml6ZXI+IG1fdG9r
ZW5pemVyOwogICAgIEhUTUxQYXJzZXJPcHRpb25zIG1fb3B0aW9uczsKICAgICBXZWFrUHRyPEhU
TUxEb2N1bWVudFBhcnNlcj4gbV9wYXJzZXI7CisKICAgICBPd25QdHI8Q29tcGFjdEhUTUxUb2tl
blN0cmVhbT4gbV9wZW5kaW5nVG9rZW5zOworICAgIFByZWxvYWRSZXF1ZXN0U3RyZWFtIG1fcGVu
ZGluZ1ByZWxvYWRzOworCiAgICAgT3duUHRyPFhTU0F1ZGl0b3I+IG1feHNzQXVkaXRvcjsKKyAg
ICBPd25QdHI8VG9rZW5QcmVsb2FkU2Nhbm5lcj4gbV9wcmVsb2FkU2Nhbm5lcjsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcApp
bmRleCBjZjliYzI0OTQ0Y2M5NjljZDc0Yjc2Y2I2OWI5ZWE0NTQzZjE5OGUxLi41MzlkNTVmY2U3
N2EyNDhlNDYzOTUzYzQzNmNiOGI0MjA0Y2UwOGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHZvaWQg
Q1NTUHJlbG9hZFNjYW5uZXI6OnJlc2V0KCkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcj4K
LXZvaWQgQ1NTUHJlbG9hZFNjYW5uZXI6OnNjYW5Db21tb24oY29uc3QgQ2hhciogYmVnaW4sIGNv
bnN0IENoYXIqIGVuZCwgVmVjdG9yPE93blB0cjxQcmVsb2FkUmVxdWVzdD4gPiYgcmVxdWVzdHMp
Cit2b2lkIENTU1ByZWxvYWRTY2FubmVyOjpzY2FuQ29tbW9uKGNvbnN0IENoYXIqIGJlZ2luLCBj
b25zdCBDaGFyKiBlbmQsIFByZWxvYWRSZXF1ZXN0U3RyZWFtJiByZXF1ZXN0cykKIHsKICAgICBt
X3JlcXVlc3RzID0gJnJlcXVlc3RzOwogICAgIGZvciAoY29uc3QgQ2hhciogaXQgPSBiZWdpbjsg
aXQgIT0gZW5kICYmIG1fc3RhdGUgIT0gRG9uZVBhcnNpbmdJbXBvcnRSdWxlczsgKytpdCkKQEAg
LTU5LDEyICs1OSwxMiBAQCB2b2lkIENTU1ByZWxvYWRTY2FubmVyOjpzY2FuQ29tbW9uKGNvbnN0
IENoYXIqIGJlZ2luLCBjb25zdCBDaGFyKiBlbmQsIFZlY3RvcjxPdwogICAgIG1fcmVxdWVzdHMg
PSAwOwogfQogCi12b2lkIENTU1ByZWxvYWRTY2FubmVyOjpzY2FuKGNvbnN0IEhUTUxUb2tlbjo6
RGF0YVZlY3RvciYgZGF0YSwgVmVjdG9yPE93blB0cjxQcmVsb2FkUmVxdWVzdD4gPiYgcmVxdWVz
dHMpCit2b2lkIENTU1ByZWxvYWRTY2FubmVyOjpzY2FuKGNvbnN0IEhUTUxUb2tlbjo6RGF0YVZl
Y3RvciYgZGF0YSwgUHJlbG9hZFJlcXVlc3RTdHJlYW0mIHJlcXVlc3RzKQogewogICAgIHNjYW5D
b21tb24oZGF0YS5kYXRhKCksIGRhdGEuZGF0YSgpICsgZGF0YS5zaXplKCksIHJlcXVlc3RzKTsK
IH0KIAotdm9pZCBDU1NQcmVsb2FkU2Nhbm5lcjo6c2Nhbihjb25zdCBTdHJpbmcmIGRhdGEsIFZl
Y3RvcjxPd25QdHI8UHJlbG9hZFJlcXVlc3Q+ID4mIHJlcXVlc3RzKQordm9pZCBDU1NQcmVsb2Fk
U2Nhbm5lcjo6c2Nhbihjb25zdCBTdHJpbmcmIGRhdGEsIFByZWxvYWRSZXF1ZXN0U3RyZWFtJiBy
ZXF1ZXN0cykKIHsKICAgICBpZiAoZGF0YS5pczhCaXQoKSkgewogICAgICAgICBjb25zdCBMQ2hh
ciogYmVnaW4gPSBkYXRhLmNoYXJhY3RlcnM4KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaAppbmRleCA2Y2I2NmZhNzc5MmFjODMxZjNkOGRjNDYy
MjdmOThlODYxZDc3YTJkLi40YjY5YmMzMjM1NmI0YzIxODEzM2ZiMTNkY2E0MjEwZmIzYjZmNmE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5l
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmgK
QEAgLTQxLDggKzQxLDggQEAgcHVibGljOgogCiAgICAgdm9pZCByZXNldCgpOwogCi0gICAgdm9p
ZCBzY2FuKGNvbnN0IEhUTUxUb2tlbjo6RGF0YVZlY3RvciYsIFZlY3RvcjxPd25QdHI8UHJlbG9h
ZFJlcXVlc3Q+ID4mKTsKLSAgICB2b2lkIHNjYW4oY29uc3QgU3RyaW5nJiwgVmVjdG9yPE93blB0
cjxQcmVsb2FkUmVxdWVzdD4gPiYpOworICAgIHZvaWQgc2Nhbihjb25zdCBIVE1MVG9rZW46OkRh
dGFWZWN0b3ImLCBQcmVsb2FkUmVxdWVzdFN0cmVhbSYpOworICAgIHZvaWQgc2Nhbihjb25zdCBT
dHJpbmcmLCBQcmVsb2FkUmVxdWVzdFN0cmVhbSYpOwogCiBwcml2YXRlOgogICAgIGVudW0gU3Rh
dGUgewpAQCAtNTksNyArNTksNyBAQCBwcml2YXRlOgogICAgIH07CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyPgotICAgIHZvaWQgc2NhbkNvbW1vbihjb25zdCBDaGFyKiBiZWdpbiwgY29u
c3QgQ2hhciogZW5kLCBWZWN0b3I8T3duUHRyPFByZWxvYWRSZXF1ZXN0PiA+Jik7CisgICAgdm9p
ZCBzY2FuQ29tbW9uKGNvbnN0IENoYXIqIGJlZ2luLCBjb25zdCBDaGFyKiBlbmQsIFByZWxvYWRS
ZXF1ZXN0U3RyZWFtJik7CiAKICAgICBpbmxpbmUgdm9pZCB0b2tlbml6ZShVQ2hhcik7CiAgICAg
dm9pZCBlbWl0UnVsZSgpOwpAQCAtNjksNyArNjksNyBAQCBwcml2YXRlOgogICAgIFN0cmluZ0J1
aWxkZXIgbV9ydWxlVmFsdWU7CiAKICAgICAvLyBPbmx5IG5vbi16ZXJvIGR1cmluZyBzY2FuKCkK
LSAgICBWZWN0b3I8T3duUHRyPFByZWxvYWRSZXF1ZXN0PiA+KiBtX3JlcXVlc3RzOworICAgIFBy
ZWxvYWRSZXF1ZXN0U3RyZWFtKiBtX3JlcXVlc3RzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggNDg1YjA2Yzcw
MmUwNDY2ZWY1OTMwMDNmNTE2MjQ5YWU2ZDdjMzI4Yi4uYzI5NDI2MmYwMDhjZWY4YTJiYjkwNDQx
MGY2NTNhM2YxZGQ1ZGNkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC0yODYsMTAgKzI4NiwxMiBAQCBib29sIEhUTUxEb2N1
bWVudFBhcnNlcjo6Y2FuVGFrZU5leHRUb2tlbihTeW5jaHJvbm91c01vZGUgbW9kZSwgUHVtcFNl
c3Npb24mIHNlcwogdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmRpZFJlY2VpdmVQYXJzZWRDaHVu
a0Zyb21CYWNrZ3JvdW5kUGFyc2VyKFBhc3NPd25QdHI8UGFyc2VkQ2h1bms+IGNodW5rKQogewog
ICAgIGlmIChpc1dhaXRpbmdGb3JTY3JpcHRzKCkpIHsKKyAgICAgICAgbV9wcmVsb2FkZXItPnRh
a2VBbmRQcmVsb2FkKGNodW5rLT5wcmVsb2Fkcyk7CiAgICAgICAgIG1fc3BlY3VsYXRpb25zLmFw
cGVuZChjaHVuayk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUKG1fc3BlY3Vs
YXRpb25zLmlzRW1wdHkoKSk7CisgICAgY2h1bmstPnByZWxvYWRzLmNsZWFyKCk7IC8vIFdlIGRv
bid0IG5lZWQgdG8gcHJlbG9hZCBiZWNhdXNlIHdlJ3JlIGdvaW5nIHRvIHBhcnNlIGltbWVkaWF0
ZWx5LgogICAgIHByb2Nlc3NQYXJzZWRDaHVua0Zyb21CYWNrZ3JvdW5kUGFyc2VyKGNodW5rKTsK
IH0KIApAQCAtNTUyLDE0ICs1NTQsMTkgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0
QmFja2dyb3VuZFBhcnNlcigpCiAgICAgQVNTRVJUKCFtX2hhdmVCYWNrZ3JvdW5kUGFyc2VyKTsK
ICAgICBtX2hhdmVCYWNrZ3JvdW5kUGFyc2VyID0gdHJ1ZTsKIAotICAgIFJlZlB0cjxXZWFrUmVm
ZXJlbmNlPEJhY2tncm91bmRIVE1MUGFyc2VyPiA+IHJlZmVyZW5jZSA9IFdlYWtSZWZlcmVuY2U8
QmFja2dyb3VuZEhUTUxQYXJzZXI+OjpjcmVhdGVVbmJvdW5kKCk7Ci0gICAgbV9iYWNrZ3JvdW5k
UGFyc2VyID0gV2Vha1B0cjxCYWNrZ3JvdW5kSFRNTFBhcnNlcj4ocmVmZXJlbmNlKTsKKyAgICBC
YWNrZ3JvdW5kSFRNTFBhcnNlcjo6Q29uZmlndXJhdGlvbiBjb25maWcoCisgICAgICAgIFdlYWtS
ZWZlcmVuY2U8QmFja2dyb3VuZEhUTUxQYXJzZXI+OjpjcmVhdGVVbmJvdW5kKCksCisgICAgICAg
IG1fb3B0aW9ucywKKyAgICAgICAgbV93ZWFrRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCksCisgICAg
ICAgIGFkb3B0UHRyKG5ldyBYU1NBdWRpdG9yKSwKKyAgICAgICAgYWRvcHRQdHIobmV3IFRva2Vu
UHJlbG9hZFNjYW5uZXIoZG9jdW1lbnQoKS0+dXJsKCkuY29weSgpKSkpOwogCi0gICAgV2Vha1B0
cjxIVE1MRG9jdW1lbnRQYXJzZXI+IHBhcnNlciA9IG1fd2Vha0ZhY3RvcnkuY3JlYXRlV2Vha1B0
cigpOwotICAgIE93blB0cjxYU1NBdWRpdG9yPiB4c3NBdWRpdG9yID0gYWRvcHRQdHIobmV3IFhT
U0F1ZGl0b3IpOwotICAgIHhzc0F1ZGl0b3ItPmluaXQoZG9jdW1lbnQoKSk7Ci0gICAgQVNTRVJU
KHhzc0F1ZGl0b3ItPmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpKTsKLSAgICBIVE1MUGFy
c2VyVGhyZWFkOjpzaGFyZWQoKS0+cG9zdFRhc2soYmluZCgmQmFja2dyb3VuZEhUTUxQYXJzZXI6
OmNyZWF0ZSwgcmVmZXJlbmNlLnJlbGVhc2UoKSwgbV9vcHRpb25zLCBwYXJzZXIsIHhzc0F1ZGl0
b3IucmVsZWFzZSgpKSk7CisgICAgbV9iYWNrZ3JvdW5kUGFyc2VyID0gV2Vha1B0cjxCYWNrZ3Jv
dW5kSFRNTFBhcnNlcj4oY29uZmlnLnJlZmVyZW5jZSk7CisgICAgY29uZmlnLnhzc0F1ZGl0b3It
PmluaXQoZG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKGNvbmZpZy54c3NBdWRpdG9yLT5pc1NhZmVU
b1NlbmRUb0Fub3RoZXJUaHJlYWQoKSk7CisgICAgQVNTRVJUKGNvbmZpZy5wcmVsb2FkU2Nhbm5l
ci0+aXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkpOworCisgICAgSFRNTFBhcnNlclRocmVh
ZDo6c2hhcmVkKCktPnBvc3RUYXNrKGJpbmQoJkJhY2tncm91bmRIVE1MUGFyc2VyOjpjcmVhdGUs
IGNvbmZpZykpOwogfQogCiB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6c3RvcEJhY2tncm91bmRQ
YXJzZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3Vt
ZW50UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJz
ZXIuaAppbmRleCA3NDI4OWJiNmI3NTAxYzVhOTI2ZjI1OTIyMjI0ZWEyMjRlZWMyNTJmLi5kMWM0
NjRlYWU5NjkwNmQ2YzVmOTdkZTRlMjFhMTAwOTMxNWY0NzY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbi5oIgogI2luY2x1ZGUgIkhUTUxJ
bnB1dFN0cmVhbS5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJPcHRpb25zLmgiCisjaW5jbHVkZSAi
SFRNTFByZWxvYWRTY2FubmVyLmgiCiAjaW5jbHVkZSAiSFRNTFNjcmlwdFJ1bm5lckhvc3QuaCIK
ICNpbmNsdWRlICJIVE1MU291cmNlVHJhY2tlci5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbi5oIgpA
QCAtNTYsNyArNTcsNiBAQCBjbGFzcyBIVE1MUGFyc2VyU2NoZWR1bGVyOwogY2xhc3MgSFRNTFRv
a2VuaXplcjsKIGNsYXNzIEhUTUxTY3JpcHRSdW5uZXI7CiBjbGFzcyBIVE1MVHJlZUJ1aWxkZXI7
Ci1jbGFzcyBIVE1MUHJlbG9hZFNjYW5uZXI7CiBjbGFzcyBIVE1MUmVzb3VyY2VQcmVsb2FkZXI7
CiBjbGFzcyBTY3JpcHRDb250cm9sbGVyOwogY2xhc3MgU2NyaXB0U291cmNlQ29kZTsKQEAgLTg4
LDYgKzg4LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShUSFJFQURFRF9IVE1MX1BBUlNFUikKICAg
ICBzdHJ1Y3QgUGFyc2VkQ2h1bmsgewogICAgICAgICBPd25QdHI8Q29tcGFjdEhUTUxUb2tlblN0
cmVhbT4gdG9rZW5zOworICAgICAgICBQcmVsb2FkUmVxdWVzdFN0cmVhbSBwcmVsb2FkczsKICAg
ICAgICAgSFRNTElucHV0Q2hlY2twb2ludCBjaGVja3BvaW50OwogICAgIH07CiAgICAgdm9pZCBk
aWRSZWNlaXZlUGFyc2VkQ2h1bmtGcm9tQmFja2dyb3VuZFBhcnNlcihQYXNzT3duUHRyPFBhcnNl
ZENodW5rPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFy
c2VyT3B0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlck9wdGlv
bnMuaAppbmRleCAxMjVmM2U3Y2E5NjhiMzMxYTljNzM0MGViYWZmMzI4ZTE0YjQ0ZDYwLi40Njli
ZTAxZGQ0NDBiN2QxZDljYzMwZWJiYjJlNjljNTA2ODMyNDA3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VyT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJPcHRpb25zLmgKQEAgLTM4LDcgKzM4LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgdXNlVGhyZWFkaW5nOwogICAgIHVuc2lnbmVkIG1heGltdW1ET01UcmVl
RGVwdGg7CiAKLSAgICBleHBsaWNpdCBIVE1MUGFyc2VyT3B0aW9ucyhEb2N1bWVudCopOworICAg
IGV4cGxpY2l0IEhUTUxQYXJzZXJPcHRpb25zKERvY3VtZW50KiA9IDApOwogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKaW5k
ZXggYWRjNjRkZTMwOGM0OGVjMTAwYmJkZGRiNTMwZWQ5YWE2YWQ0ZTdiYy4uNWI2MjFkYmI5YTM4
NTAzNjQxZTQzYTVlMzI4Zjg1MWE2ZWUyY2VlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCkBAIC0yNjAsMTggKzI2MCwxOCBAQCBU
b2tlblByZWxvYWRTY2FubmVyOjp+VG9rZW5QcmVsb2FkU2Nhbm5lcigpCiB7CiB9CiAKLXZvaWQg
VG9rZW5QcmVsb2FkU2Nhbm5lcjo6c2Nhbihjb25zdCBIVE1MVG9rZW4mIHRva2VuLCBWZWN0b3I8
T3duUHRyPFByZWxvYWRSZXF1ZXN0PiA+JiByZXF1ZXN0cykKK3ZvaWQgVG9rZW5QcmVsb2FkU2Nh
bm5lcjo6c2Nhbihjb25zdCBIVE1MVG9rZW4mIHRva2VuLCBQcmVsb2FkUmVxdWVzdFN0cmVhbSYg
cmVxdWVzdHMpCiB7CiAgICAgc2NhbkNvbW1vbih0b2tlbiwgcmVxdWVzdHMpOwogfQogCi12b2lk
IFRva2VuUHJlbG9hZFNjYW5uZXI6OnNjYW4oY29uc3QgQ29tcGFjdEhUTUxUb2tlbiYgdG9rZW4s
IFZlY3RvcjxPd25QdHI8UHJlbG9hZFJlcXVlc3Q+ID4mIHJlcXVlc3RzKQordm9pZCBUb2tlblBy
ZWxvYWRTY2FubmVyOjpzY2FuKGNvbnN0IENvbXBhY3RIVE1MVG9rZW4mIHRva2VuLCBQcmVsb2Fk
UmVxdWVzdFN0cmVhbSYgcmVxdWVzdHMpCiB7CiAgICAgc2NhbkNvbW1vbih0b2tlbiwgcmVxdWVz
dHMpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUb2tlbj4KLXZvaWQgVG9rZW5QcmVsb2FkU2Nh
bm5lcjo6c2NhbkNvbW1vbihjb25zdCBUb2tlbiYgdG9rZW4sIFZlY3RvcjxPd25QdHI8UHJlbG9h
ZFJlcXVlc3Q+ID4mIHJlcXVlc3RzKQordm9pZCBUb2tlblByZWxvYWRTY2FubmVyOjpzY2FuQ29t
bW9uKGNvbnN0IFRva2VuJiB0b2tlbiwgUHJlbG9hZFJlcXVlc3RTdHJlYW0mIHJlcXVlc3RzKQog
ewogICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CiAgICAgY2FzZSBIVE1MVG9rZW46OkNoYXJh
Y3RlcjogewpAQCAtMzc1LDE1ICszNzUsMTYgQEAgdm9pZCBIVE1MUHJlbG9hZFNjYW5uZXI6OnNj
YW4oSFRNTFJlc291cmNlUHJlbG9hZGVyKiBwcmVsb2FkZXIsIGNvbnN0IEtVUkwmIHN0YXIKICAg
ICBpZiAoIXN0YXJ0aW5nQmFzZUVsZW1lbnRVUkwuaXNFbXB0eSgpKQogICAgICAgICBtX3NjYW5u
ZXIuc2V0UHJlZGljdGVkQmFzZUVsZW1lbnRVUkwoc3RhcnRpbmdCYXNlRWxlbWVudFVSTCk7CiAK
LSAgICBWZWN0b3I8T3duUHRyPFByZWxvYWRSZXF1ZXN0PiA+IHJlcXVlc3RzOworICAgIFByZWxv
YWRSZXF1ZXN0U3RyZWFtIHJlcXVlc3RzOworCiAgICAgd2hpbGUgKG1fdG9rZW5pemVyLT5uZXh0
VG9rZW4obV9zb3VyY2UsIG1fdG9rZW4pKSB7CiAgICAgICAgIGlmIChtX3Rva2VuLnR5cGUoKSA9
PSBIVE1MVG9rZW46OlN0YXJ0VGFnKQogICAgICAgICAgICAgbV90b2tlbml6ZXItPnVwZGF0ZVN0
YXRlRm9yKEF0b21pY1N0cmluZyhtX3Rva2VuLm5hbWUoKSkpOwogICAgICAgICBtX3NjYW5uZXIu
c2NhbihtX3Rva2VuLCByZXF1ZXN0cyk7CiAgICAgICAgIG1fdG9rZW4uY2xlYXIoKTsKICAgICB9
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXF1ZXN0cy5zaXplKCk7IGkrKykKLSAgICAg
ICAgcHJlbG9hZGVyLT5wcmVsb2FkKHJlcXVlc3RzW2ldLnJlbGVhc2UoKSk7CisKKyAgICBwcmVs
b2FkZXItPnRha2VBbmRQcmVsb2FkKHJlcXVlc3RzKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuaAppbmRleCAwYWY5MDRhZjI1YTlk
NGY1ODU4OTAxZDMyMjljNzlmNzBjY2M5ZTEyLi5kYWM1OTU4MDBjNGFlNThlZmQyYmIzYjgyNmY2
NzliYmE4MTRlMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
UHJlbG9hZFNjYW5uZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJl
bG9hZFNjYW5uZXIuaApAQCAtNDQsMTEgKzQ0LDE3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBU
b2tlblByZWxvYWRTY2FubmVyKGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMKTsKICAgICB+VG9rZW5Q
cmVsb2FkU2Nhbm5lcigpOwogCi0gICAgdm9pZCBzY2FuKGNvbnN0IEhUTUxUb2tlbiYsIFZlY3Rv
cjxPd25QdHI8UHJlbG9hZFJlcXVlc3Q+ID4mIHJlcXVlc3RzKTsKLSAgICB2b2lkIHNjYW4oY29u
c3QgQ29tcGFjdEhUTUxUb2tlbiYsIFZlY3RvcjxPd25QdHI8UHJlbG9hZFJlcXVlc3Q+ID4mIHJl
cXVlc3RzKTsKKyAgICB2b2lkIHNjYW4oY29uc3QgSFRNTFRva2VuJiwgUHJlbG9hZFJlcXVlc3RT
dHJlYW0mIHJlcXVlc3RzKTsKKyAgICB2b2lkIHNjYW4oY29uc3QgQ29tcGFjdEhUTUxUb2tlbiYs
IFByZWxvYWRSZXF1ZXN0U3RyZWFtJiByZXF1ZXN0cyk7CiAKICAgICB2b2lkIHNldFByZWRpY3Rl
ZEJhc2VFbGVtZW50VVJMKGNvbnN0IEtVUkwmIHVybCkgeyBtX3ByZWRpY3RlZEJhc2VFbGVtZW50
VVJMID0gdXJsOyB9CiAKKyAgICBib29sIGlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9kb2N1bWVudFVSTC5pc1NhZmVUb1NlbmRUb0Fub3RoZXJU
aHJlYWQoKQorICAgICAgICAgICAgJiYgbV9kb2N1bWVudFVSTC5pc1NhZmVUb1NlbmRUb0Fub3Ro
ZXJUaHJlYWQoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgZW51bSBUYWdJZCB7CiAgICAgICAg
IC8vIFRoZXNlIHRhZ3MgYXJlIHNjYW5uZWQgYnkgdGhlIFN0YXJ0VGFnU2Nhbm5lci4KQEAgLTY3
LDcgKzczLDcgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBTdGFydFRhZ1NjYW5uZXI7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUb2tlbj4KLSAgICBpbmxpbmUgdm9pZCBzY2FuQ29tbW9uKGNvbnN0
IFRva2VuJiwgVmVjdG9yPE93blB0cjxQcmVsb2FkUmVxdWVzdD4gPiYgcmVxdWVzdHMpOworICAg
IGlubGluZSB2b2lkIHNjYW5Db21tb24oY29uc3QgVG9rZW4mLCBQcmVsb2FkUmVxdWVzdFN0cmVh
bSYgcmVxdWVzdHMpOwogCiAgICAgc3RhdGljIFRhZ0lkIHRhZ0lkRm9yKGNvbnN0IEhUTUxUb2tl
bjo6RGF0YVZlY3RvciYpOwogICAgIHN0YXRpYyBUYWdJZCB0YWdJZEZvcihjb25zdCBTdHJpbmcm
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVBy
ZWxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVs
b2FkZXIuY3BwCmluZGV4IDc3MGZmMGUzOWZmZjY2OWQ3NzdkZjUzOTdmOTBmZjcxYWZjMDNjOTUu
LmZhNWFkZmJlNjkwMzYzZGNmNmI1OWEwMzIwN2YxNDViMjU0MDlmMDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcApAQCAt
NTYsNiArNTYsMTUgQEAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IFByZWxvYWRSZXF1ZXN0OjpyZXNv
dXJjZVJlcXVlc3QoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIHJldHVybiByZXF1ZXN0OwogfQog
Cit2b2lkIEhUTUxSZXNvdXJjZVByZWxvYWRlcjo6dGFrZUFuZFByZWxvYWQoUHJlbG9hZFJlcXVl
c3RTdHJlYW0mIHIpCit7CisgICAgUHJlbG9hZFJlcXVlc3RTdHJlYW0gcmVxdWVzdHM7CisgICAg
cmVxdWVzdHMuc3dhcChyKTsKKworICAgIGZvciAoUHJlbG9hZFJlcXVlc3RTdHJlYW06Oml0ZXJh
dG9yIGl0ID0gcmVxdWVzdHMuYmVnaW4oKTsgaXQgIT0gcmVxdWVzdHMuZW5kKCk7ICsraXQpCisg
ICAgICAgIHByZWxvYWQoaXQtPnJlbGVhc2UoKSk7Cit9CisKIHZvaWQgSFRNTFJlc291cmNlUHJl
bG9hZGVyOjpwcmVsb2FkKFBhc3NPd25QdHI8UHJlbG9hZFJlcXVlc3Q+IHByZWxvYWQpCiB7CiAg
ICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBwcmVsb2FkLT5yZXNvdXJjZVJlcXVl
c3QobV9kb2N1bWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MUmVzb3VyY2VQcmVsb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxS
ZXNvdXJjZVByZWxvYWRlci5oCmluZGV4IGRkNDUyM2VjYmRmMDQ3ZTgxODFhOGU0YzkyZWVkNzhk
M2M1NDc0MjYuLjUyODQ1NjhjNmFiNDQwNmMxMTUwZGMwN2Q5NzA1MmI0Yjc4NDE4MTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5o
CkBAIC02Nyw2ICs2Nyw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2Nyb3NzT3JpZ2luTW9kZUFs
bG93c0Nvb2tpZXM7CiB9OwogCit0eXBlZGVmIFZlY3RvcjxPd25QdHI8UHJlbG9hZFJlcXVlc3Q+
ID4gUHJlbG9hZFJlcXVlc3RTdHJlYW07CisKIGNsYXNzIEhUTUxSZXNvdXJjZVByZWxvYWRlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSFRNTFJlc291cmNlUHJlbG9hZGVyKTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC03Niw2ICs3OCw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgfQogCisgICAgdm9pZCB0YWtlQW5kUHJlbG9hZChQcmVsb2FkUmVxdWVzdFN0cmVh
bSYpOwogICAgIHZvaWQgcHJlbG9hZChQYXNzT3duUHRyPFByZWxvYWRSZXF1ZXN0Pik7CiAKICAg
ICBXZWFrUHRyPEhUTUxSZXNvdXJjZVByZWxvYWRlcj4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJu
IG1fd2Vha0ZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188452</attachid>
            <date>2013-02-14 16:59:51 -0800</date>
            <delta_ts>2013-02-15 12:01:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108027-20130214165619.patch</filename>
            <type>text/plain</type>
            <size>22757</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyODYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGEzMzBiNDllZTcwMWMy
NjgzNjEzNzFiM2UwMzE2ZWRiY2JmMTg5OC4uNmRkODRhYTI1ZDI0ZTY0NDg0ODEwNTBkNGMyNTc5
NWQyMGFmMTBkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDc0IEBACiAyMDEzLTAyLTE0ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKKyAgICAgICAgRW5hYmxlIHRoZSBwcmVsb2Fk
IHNjYW5uZXIgb24gdGhlIGJhY2tncm91bmQgcGFyc2VyIHRocmVhZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MDI3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHBhdGNoIGNhdXNlcyB1cyB0byBw
YXNzIGFsbCB0aGUgZmFzdC9wcmVsb2FkZXIgdGVzdHMgd2l0aCB0aGUKKyAgICAgICAgdGhyZWFk
ZWQgcGFyc2VyIGVuYWJsZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCB3aXJlcyB1cCB0aGUgQmFj
a2dyb3VuZEhUTUxQYXJzZXIgdG8gdGhlCisgICAgICAgIFRva2VuUHJlbG9hZFNjYW5uZXIuICBD
dXJyZW50bHksIHdlIGJhaWwgb3V0IG9mIHByZWxvYWQgc2Nhbm5pbmcgaWYgd2UKKyAgICAgICAg
ZW5jb3VudGVyIGEgZG9jdW1lbnQud3JpdGUgYmVjYXVlcyB3ZSBkb24ndCBrbm93IGhvdyB0byBy
ZXdpbmQgdGhlCisgICAgICAgIHByZWxvYWQgc2Nhbm5lciwgYnV0IHRoYXQncyBzb21ldGhpbmcg
d2UgY2FuIHR1bmUgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBUaGUgQmFja2dyb3VuZEhUTUxQ
YXJzZXIgZGVsaXZlcnMgdGhlIHByZWxvYWRzIHRvIHRoZQorICAgICAgICBIVE1MRG9jdW1lbnRQ
YXJzZXIgdG9nZXRoZXIgd2l0aCB0aGUgdG9rZW4gc3RyZWFtLiBJZiB0aGUKKyAgICAgICAgSFRN
TERvY3VtZW50UGFyc2VyIGlzbid0IGFibGUgdG8gdXNlIHRoZSB0b2tlbiBzdHJlYW0gaW1tZWRp
YXRlbHksIGl0CisgICAgICAgIGtpY2tzIG9mZiB0aGUgcHJlbG9hZHMuCisKKyAgICAgICAgKiBo
dG1sL3BhcnNlci9CYWNrZ3JvdW5kSFRNTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
aGVja1RoYXRQcmVsb2Fkc0FyZVNhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6QmFja2dyb3VuZEhUTUxQYXJzZXI6OkJhY2tncm91bmRIVE1MUGFyc2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJhY2tncm91bmRIVE1MUGFyc2VyOjpyZXN1bWVGcm9tKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJhY2tncm91bmRIVE1MUGFyc2VyOjpwdW1wVG9rZW5pemVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJhY2tncm91bmRIVE1MUGFyc2VyOjpzZW5kVG9rZW5zVG9NYWluVGhyZWFk
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9CYWNrZ3JvdW5kSFRNTFBhcnNlci5oOgorICAgICAg
ICAoQ29uZmlndXJhdGlvbik6CisgICAgICAgICAgICAtIFdlIG5lZWQgdG8gYWRkIGEgc3RydWN0
IGZvciB0aGUgY3JlYXRlIGZ1bmN0aW9uIGJlY2F1c2UgdGhlCisgICAgICAgICAgICAgIG51bWJl
ciBvZiBhcmd1bWVudHMgZXhjZWVkcyB0aGUgbGltaXRzIG9mIEZ1bmN0aW9uYWwuaC4KKyAgICAg
ICAgKEJhY2tncm91bmRIVE1MUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhY2tncm91bmRI
VE1MUGFyc2VyOjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2Fu
bmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByZWxvYWRTY2FubmVyOjpzY2FuQ29tbW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByZWxvYWRTY2FubmVyOjpzY2FuKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1ByZWxvYWRTY2FubmVyOjplbWl0UnVsZSk6CisgICAgICAgICAgICAtIFdl
IG5lZWQgdG8gdXNlIGEgbmV3IHN0cmluZyBoZXJlIHNvIHRoYXQgdGhlIHN0cmluZyBpcyBzYWZl
IHRvCisgICAgICAgICAgICAgIHNlbmQgdG8gYW5vdGhlciB0aHJlYWQuCisgICAgICAgICogaHRt
bC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaDoKKyAgICAgICAgKENTU1ByZWxvYWRTY2FubmVy
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpkaWRSZWNlaXZlUGFyc2VkQ2h1bmtGcm9t
QmFja2dyb3VuZFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6
OnN0YXJ0QmFja2dyb3VuZFBhcnNlcik6CisgICAgICAgICAgICAtIEZvbGxvd2luZyB0aGUgZXhh
bXBsZSBvZiB0aGUgWFNTQXVkaXRvciwgd2UgY3JlYXRlIHRoZQorICAgICAgICAgICAgICBUb2tl
blByZWxvYWRTY2FubmVyIG9uIHRoZSBtYWluIHRocmVhZCBhbmQgdGhlbiBzZW5kIGl0IHRvIHRo
ZQorICAgICAgICAgICAgICBiYWNrZ3JvdW5kIHRocmVhZCBmb3Igb3BlcmF0aW9uLgorICAgICAg
ICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChQYXJzZWRDaHVuayk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFBhcnNl
ck9wdGlvbnMuaDoKKyAgICAgICAgKEhUTUxQYXJzZXJPcHRpb25zKToKKyAgICAgICAgICAgIC0g
V2UgbmVlZCB0byBhZGQgYSBkZWZhdWx0IGNvbnN0cnVjdG9yIHNvIHRoYXQgdGhlCisgICAgICAg
ICAgICAgIEhUTUxEb2N1bWVudFBhcnNlciBjYW4gY3JlYXRlIGFuIGVtcHR5CisgICAgICAgICAg
ICAgIEJhY2tncm91bmRIVE1MUGFyc2VyOjpDb25maWd1cmF0aW9uIHN0cnVjdC4KKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VG9rZW5QcmVsb2FkU2Nhbm5lcjo6c2Nhbik6CisgICAgICAgIChXZWJDb3JlOjpUb2tlblByZWxv
YWRTY2FubmVyOjpzY2FuQ29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQcmVsb2FkU2Nh
bm5lcjo6c2Nhbik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmg6
CisgICAgICAgIChUb2tlblByZWxvYWRTY2FubmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRva2Vu
UHJlbG9hZFNjYW5uZXI6OmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCk6CisgICAgICAgICog
aHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxSZXNvdXJjZVByZWxvYWRlcjo6dGFrZUFuZFByZWxvYWQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpQcmVsb2FkUmVxdWVzdDo6UHJlbG9hZFJlcXVlc3QpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChIVE1MUmVzb3VyY2VQcmVsb2FkZXIpOgorCisyMDEzLTAyLTE0
ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKICAgICAgICAgVG9rZW5QcmVsb2Fk
U2Nhbm5lciBzaG91bGQgYmUgYWJsZSB0byBzY2FuIENvbXBhY3RIVE1MVG9rZW5zCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk4NjEKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQmFja2dyb3VuZEhUTUxQYXJzZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQmFja2dyb3VuZEhUTUxQYXJzZXIuY3BwCmlu
ZGV4IGJiODUzNGI3ZDM5ZWNjM2M2MThmZTY2NTM5MjNjZWZkYWY1YmM1NWIuLjdkODM4ZDEyNGQ3
YTYyZmQxOTQ3MWJhNzk5ZDZmNTJmOTIwZTc2MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0JhY2tncm91bmRIVE1MUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9CYWNrZ3JvdW5kSFRNTFBhcnNlci5jcHAKQEAgLTUzLDYgKzUzLDEyIEBA
IHN0YXRpYyB2b2lkIGNoZWNrVGhhdFRva2Vuc0FyZVNhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQo
Y29uc3QgQ29tcGFjdEhUTUxUb2tlblN0CiAgICAgICAgIEFTU0VSVCh0b2tlbnMtPmF0KGkpLmlz
U2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpKTsKIH0KIAorc3RhdGljIHZvaWQgY2hlY2tUaGF0
UHJlbG9hZHNBcmVTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKGNvbnN0IFByZWxvYWRSZXF1ZXN0
U3RyZWFtJiBwcmVsb2FkcykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWxvYWRz
LnNpemUoKTsgKytpKQorICAgICAgICBBU1NFUlQocHJlbG9hZHNbaV0tPmlzU2FmZVRvU2VuZFRv
QW5vdGhlclRocmVhZCgpKTsKK30KKwogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB0b2tl
bkV4aXRzRm9yZWlnbkNvbnRlbnQoY29uc3QgQ29tcGFjdEhUTUxUb2tlbiYgdG9rZW4pCkBAIC0x
MDYsMTcgKzExMiwxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdG9rZW5FeGl0c0ZvcmVpZ25Db250
ZW50KGNvbnN0IENvbXBhY3RIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICB8fCAodGhyZWFkU2Fm
ZU1hdGNoKHRhZ05hbWUsIGZvbnRUYWcpICYmICh0b2tlbi5nZXRBdHRyaWJ1dGVJdGVtKGNvbG9y
QXR0cikgfHwgdG9rZW4uZ2V0QXR0cmlidXRlSXRlbShmYWNlQXR0cikgfHwgdG9rZW4uZ2V0QXR0
cmlidXRlSXRlbShzaXplQXR0cikpKTsKIH0KIAotLy8gRklYTUU6IFR1bmUgdGhpcyBjb25zdGFu
dCBiYXNlZCBvbiBhIGJlbmNobWFyay4gVGhlIGN1cnJlbnQgdmFsdWUgd2FzIGNob29zZW4gYXJi
aXRyYXJpbHkuCisvLyBGSVhNRTogVHVuZSB0aGlzIGNvbnN0YW50IGJhc2VkIG9uIGEgYmVuY2ht
YXJrLiBUaGUgY3VycmVudCB2YWx1ZSB3YXMgY2hvc2VuIGFyYml0cmFyaWx5Lgogc3RhdGljIGNv
bnN0IHNpemVfdCBwZW5kaW5nVG9rZW5MaW1pdCA9IDQwMDA7CiAKLUJhY2tncm91bmRIVE1MUGFy
c2VyOjpCYWNrZ3JvdW5kSFRNTFBhcnNlcihQYXNzUmVmUHRyPFdlYWtSZWZlcmVuY2U8QmFja2dy
b3VuZEhUTUxQYXJzZXI+ID4gcmVmZXJlbmNlLCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYgb3B0
aW9ucywgY29uc3QgV2Vha1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+JiBwYXJzZXIsIFBhc3NPd25Q
dHI8WFNTQXVkaXRvcj4geHNzQXVkaXRvcikKK0JhY2tncm91bmRIVE1MUGFyc2VyOjpCYWNrZ3Jv
dW5kSFRNTFBhcnNlcihQYXNzUmVmUHRyPFdlYWtSZWZlcmVuY2U8QmFja2dyb3VuZEhUTUxQYXJz
ZXI+ID4gcmVmZXJlbmNlLCBQYXNzT3duUHRyPENvbmZpZ3VyYXRpb24+IGNvbmZpZykKICAgICA6
IG1fd2Vha0ZhY3RvcnkocmVmZXJlbmNlLCB0aGlzKQogICAgICwgbV90b2tlbihhZG9wdFB0cihu
ZXcgSFRNTFRva2VuKSkKLSAgICAsIG1fdG9rZW5pemVyKEhUTUxUb2tlbml6ZXI6OmNyZWF0ZShv
cHRpb25zKSkKLSAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQotICAgICwgbV9wYXJzZXIocGFyc2Vy
KQorICAgICwgbV90b2tlbml6ZXIoSFRNTFRva2VuaXplcjo6Y3JlYXRlKGNvbmZpZy0+b3B0aW9u
cykpCisgICAgLCBtX29wdGlvbnMoY29uZmlnLT5vcHRpb25zKQorICAgICwgbV9wYXJzZXIoY29u
ZmlnLT5wYXJzZXIpCiAgICAgLCBtX3BlbmRpbmdUb2tlbnMoYWRvcHRQdHIobmV3IENvbXBhY3RI
VE1MVG9rZW5TdHJlYW0pKQotICAgICwgbV94c3NBdWRpdG9yKHhzc0F1ZGl0b3IpCisgICAgLCBt
X3hzc0F1ZGl0b3IoY29uZmlnLT54c3NBdWRpdG9yLnJlbGVhc2UoKSkKKyAgICAsIG1fcHJlbG9h
ZFNjYW5uZXIoY29uZmlnLT5wcmVsb2FkU2Nhbm5lci5yZWxlYXNlKCkpCiB7CiAgICAgbV9uYW1l
c3BhY2VTdGFjay5hcHBlbmQoSFRNTCk7CiB9CkBAIC0xMzMsNiArMTQwLDcgQEAgdm9pZCBCYWNr
Z3JvdW5kSFRNTFBhcnNlcjo6cmVzdW1lRnJvbShQYXNzT3duUHRyPENoZWNrcG9pbnQ+IGNoZWNr
cG9pbnQpCiAgICAgbV90b2tlbiA9IGNoZWNrcG9pbnQtPnRva2VuLnJlbGVhc2UoKTsKICAgICBt
X3Rva2VuaXplciA9IGNoZWNrcG9pbnQtPnRva2VuaXplci5yZWxlYXNlKCk7CiAgICAgbV9pbnB1
dC5yZXdpbmRUbyhjaGVja3BvaW50LT5pbnB1dENoZWNrcG9pbnQsIGNoZWNrcG9pbnQtPnVucGFy
c2VkSW5wdXQpOworICAgIG1fcHJlbG9hZFNjYW5uZXIuY2xlYXIoKTsgLy8gRklYTUU6IFdlIHNo
b3VsZCByZXdpbmQgdGhlIHByZWxvYWQgc2Nhbm5lciByYXRoZXIgdGhhbiBjbGVhcmluZyBpdC4K
ICAgICBwdW1wVG9rZW5pemVyKCk7CiB9CiAKQEAgLTIyMyw4ICsyMzEsMTMgQEAgdm9pZCBCYWNr
Z3JvdW5kSFRNTFBhcnNlcjo6cHVtcFRva2VuaXplcigpCiAgICAgICAgIHsKICAgICAgICAgICAg
IE93blB0cjxYU1NJbmZvPiB4c3NJbmZvID0gbV94c3NBdWRpdG9yLT5maWx0ZXJUb2tlbihGaWx0
ZXJUb2tlblJlcXVlc3QoKm1fdG9rZW4sIG1fc291cmNlVHJhY2tlciwgbV90b2tlbml6ZXItPnNo
b3VsZEFsbG93Q0RBVEEoKSkpOwogICAgICAgICAgICAgQ29tcGFjdEhUTUxUb2tlbiB0b2tlbiht
X3Rva2VuLmdldCgpLCBUZXh0UG9zaXRpb24obV9pbnB1dC5jdXJyZW50KCkuY3VycmVudExpbmUo
KSwgbV9pbnB1dC5jdXJyZW50KCkuY3VycmVudENvbHVtbigpKSk7CisKICAgICAgICAgICAgIGlm
ICh4c3NJbmZvKQogICAgICAgICAgICAgICAgIHRva2VuLnNldFhTU0luZm8oeHNzSW5mby5yZWxl
YXNlKCkpOworCisgICAgICAgICAgICBpZiAobV9wcmVsb2FkU2Nhbm5lcikKKyAgICAgICAgICAg
ICAgICBtX3ByZWxvYWRTY2FubmVyLT5zY2FuKHRva2VuLCBtX3BlbmRpbmdQcmVsb2Fkcyk7CisK
ICAgICAgICAgICAgIG1fcGVuZGluZ1Rva2Vucy0+YXBwZW5kKHRva2VuKTsKICAgICAgICAgfQog
CkBAIC0yNDQsMTAgKzI1NywxMiBAQCB2b2lkIEJhY2tncm91bmRIVE1MUGFyc2VyOjpzZW5kVG9r
ZW5zVG9NYWluVGhyZWFkKCkKIAogI2lmbmRlZiBOREVCVUcKICAgICBjaGVja1RoYXRUb2tlbnNB
cmVTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKG1fcGVuZGluZ1Rva2Vucy5nZXQoKSk7CisgICAg
Y2hlY2tUaGF0UHJlbG9hZHNBcmVTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKG1fcGVuZGluZ1By
ZWxvYWRzKTsKICNlbmRpZgogCiAgICAgT3duUHRyPEhUTUxEb2N1bWVudFBhcnNlcjo6UGFyc2Vk
Q2h1bms+IGNodW5rID0gYWRvcHRQdHIobmV3IEhUTUxEb2N1bWVudFBhcnNlcjo6UGFyc2VkQ2h1
bmspOwogICAgIGNodW5rLT50b2tlbnMgPSBtX3BlbmRpbmdUb2tlbnMucmVsZWFzZSgpOworICAg
IGNodW5rLT5wcmVsb2Fkcy5zd2FwKG1fcGVuZGluZ1ByZWxvYWRzKTsKICAgICBjaHVuay0+Y2hl
Y2twb2ludCA9IG1faW5wdXQuY3JlYXRlQ2hlY2twb2ludCgpOwogICAgIGNhbGxPbk1haW5UaHJl
YWQoYmluZCgmSFRNTERvY3VtZW50UGFyc2VyOjpkaWRSZWNlaXZlUGFyc2VkQ2h1bmtGcm9tQmFj
a2dyb3VuZFBhcnNlciwgbV9wYXJzZXIsIGNodW5rLnJlbGVhc2UoKSkpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9CYWNrZ3JvdW5kSFRNTFBhcnNlci5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQmFja2dyb3VuZEhUTUxQYXJzZXIuaAppbmRleCA3YTAx
MTQ4YzhhZDdiZjE4MDdiZDRjMjU0NDU0ODI2OTVlNjFlOWUzLi45ZTBlZWVhYThmMjY3M2U5ZTU5
MzI2M2U3NzZiNjBkZDkyYjk3YzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9CYWNrZ3JvdW5kSFRNTFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0JhY2tncm91bmRIVE1MUGFyc2VyLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJC
YWNrZ3JvdW5kSFRNTElucHV0U3RyZWFtLmgiCiAjaW5jbHVkZSAiQ29tcGFjdEhUTUxUb2tlbi5o
IgogI2luY2x1ZGUgIkhUTUxQYXJzZXJPcHRpb25zLmgiCisjaW5jbHVkZSAiSFRNTFByZWxvYWRT
Y2FubmVyLmgiCiAjaW5jbHVkZSAiSFRNTFNvdXJjZVRyYWNrZXIuaCIKICNpbmNsdWRlICJIVE1M
VG9rZW4uaCIKICNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCkBAIC00OCw5ICs0OSwxNiBAQCBj
bGFzcyBYU1NBdWRpdG9yOwogY2xhc3MgQmFja2dyb3VuZEhUTUxQYXJzZXIgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGNyZWF0ZShQYXNz
UmVmUHRyPFdlYWtSZWZlcmVuY2U8QmFja2dyb3VuZEhUTUxQYXJzZXI+ID4gcmVmZXJlbmNlLCBj
b25zdCBIVE1MUGFyc2VyT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgV2Vha1B0cjxIVE1MRG9jdW1l
bnRQYXJzZXI+JiBwYXJzZXIsIFBhc3NPd25QdHI8WFNTQXVkaXRvcj4geHNzQXVkaXRvcikKKyAg
ICBzdHJ1Y3QgQ29uZmlndXJhdGlvbiB7CisgICAgICAgIEhUTUxQYXJzZXJPcHRpb25zIG9wdGlv
bnM7CisgICAgICAgIFdlYWtQdHI8SFRNTERvY3VtZW50UGFyc2VyPiBwYXJzZXI7CisgICAgICAg
IE93blB0cjxYU1NBdWRpdG9yPiB4c3NBdWRpdG9yOworICAgICAgICBPd25QdHI8VG9rZW5QcmVs
b2FkU2Nhbm5lcj4gcHJlbG9hZFNjYW5uZXI7CisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIGNy
ZWF0ZShQYXNzUmVmUHRyPFdlYWtSZWZlcmVuY2U8QmFja2dyb3VuZEhUTUxQYXJzZXI+ID4gcmVm
ZXJlbmNlLCBQYXNzT3duUHRyPENvbmZpZ3VyYXRpb24+IGNvbmZpZykKICAgICB7Ci0gICAgICAg
IG5ldyBCYWNrZ3JvdW5kSFRNTFBhcnNlcihyZWZlcmVuY2UsIG9wdGlvbnMsIHBhcnNlciwgeHNz
QXVkaXRvcik7CisgICAgICAgIG5ldyBCYWNrZ3JvdW5kSFRNTFBhcnNlcihyZWZlcmVuY2UsIGNv
bmZpZyk7CiAgICAgICAgIC8vIENhbGxlciBtdXN0IGZyZWUgYnkgY2FsbGluZyBzdG9wKCkuCiAg
ICAgfQogCkBAIC03Niw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIE1hdGhNTAogICAgIH07
CiAKLSAgICBCYWNrZ3JvdW5kSFRNTFBhcnNlcihQYXNzUmVmUHRyPFdlYWtSZWZlcmVuY2U8QmFj
a2dyb3VuZEhUTUxQYXJzZXI+ID4sIGNvbnN0IEhUTUxQYXJzZXJPcHRpb25zJiwgY29uc3QgV2Vh
a1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+JiwgUGFzc093blB0cjxYU1NBdWRpdG9yPik7CisgICAg
ZXhwbGljaXQgQmFja2dyb3VuZEhUTUxQYXJzZXIoUGFzc1JlZlB0cjxXZWFrUmVmZXJlbmNlPEJh
Y2tncm91bmRIVE1MUGFyc2VyPiA+LCBQYXNzT3duUHRyPENvbmZpZ3VyYXRpb24+KTsKIAogICAg
IHZvaWQgbWFya0VuZE9mRmlsZSgpOwogICAgIHZvaWQgcHVtcFRva2VuaXplcigpOwpAQCAtOTMs
OCArMTAxLDEyIEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEhUTUxUb2tlbml6ZXI+IG1fdG9rZW5p
emVyOwogICAgIEhUTUxQYXJzZXJPcHRpb25zIG1fb3B0aW9uczsKICAgICBXZWFrUHRyPEhUTUxE
b2N1bWVudFBhcnNlcj4gbV9wYXJzZXI7CisKICAgICBPd25QdHI8Q29tcGFjdEhUTUxUb2tlblN0
cmVhbT4gbV9wZW5kaW5nVG9rZW5zOworICAgIFByZWxvYWRSZXF1ZXN0U3RyZWFtIG1fcGVuZGlu
Z1ByZWxvYWRzOworCiAgICAgT3duUHRyPFhTU0F1ZGl0b3I+IG1feHNzQXVkaXRvcjsKKyAgICBP
d25QdHI8VG9rZW5QcmVsb2FkU2Nhbm5lcj4gbV9wcmVsb2FkU2Nhbm5lcjsKIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcAppbmRl
eCBjZjliYzI0OTQ0Y2M5NjljZDc0Yjc2Y2I2OWI5ZWE0NTQzZjE5OGUxLi4wYzY2ZmMxYWM5ZmZh
NjQ5ZjUzYmQxODQzNDYzYWIyNmU0MmZkZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHZvaWQgQ1NT
UHJlbG9hZFNjYW5uZXI6OnJlc2V0KCkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcj4KLXZv
aWQgQ1NTUHJlbG9hZFNjYW5uZXI6OnNjYW5Db21tb24oY29uc3QgQ2hhciogYmVnaW4sIGNvbnN0
IENoYXIqIGVuZCwgVmVjdG9yPE93blB0cjxQcmVsb2FkUmVxdWVzdD4gPiYgcmVxdWVzdHMpCit2
b2lkIENTU1ByZWxvYWRTY2FubmVyOjpzY2FuQ29tbW9uKGNvbnN0IENoYXIqIGJlZ2luLCBjb25z
dCBDaGFyKiBlbmQsIFByZWxvYWRSZXF1ZXN0U3RyZWFtJiByZXF1ZXN0cykKIHsKICAgICBtX3Jl
cXVlc3RzID0gJnJlcXVlc3RzOwogICAgIGZvciAoY29uc3QgQ2hhciogaXQgPSBiZWdpbjsgaXQg
IT0gZW5kICYmIG1fc3RhdGUgIT0gRG9uZVBhcnNpbmdJbXBvcnRSdWxlczsgKytpdCkKQEAgLTU5
LDEyICs1OSwxMiBAQCB2b2lkIENTU1ByZWxvYWRTY2FubmVyOjpzY2FuQ29tbW9uKGNvbnN0IENo
YXIqIGJlZ2luLCBjb25zdCBDaGFyKiBlbmQsIFZlY3RvcjxPdwogICAgIG1fcmVxdWVzdHMgPSAw
OwogfQogCi12b2lkIENTU1ByZWxvYWRTY2FubmVyOjpzY2FuKGNvbnN0IEhUTUxUb2tlbjo6RGF0
YVZlY3RvciYgZGF0YSwgVmVjdG9yPE93blB0cjxQcmVsb2FkUmVxdWVzdD4gPiYgcmVxdWVzdHMp
Cit2b2lkIENTU1ByZWxvYWRTY2FubmVyOjpzY2FuKGNvbnN0IEhUTUxUb2tlbjo6RGF0YVZlY3Rv
ciYgZGF0YSwgUHJlbG9hZFJlcXVlc3RTdHJlYW0mIHJlcXVlc3RzKQogewogICAgIHNjYW5Db21t
b24oZGF0YS5kYXRhKCksIGRhdGEuZGF0YSgpICsgZGF0YS5zaXplKCksIHJlcXVlc3RzKTsKIH0K
IAotdm9pZCBDU1NQcmVsb2FkU2Nhbm5lcjo6c2Nhbihjb25zdCBTdHJpbmcmIGRhdGEsIFZlY3Rv
cjxPd25QdHI8UHJlbG9hZFJlcXVlc3Q+ID4mIHJlcXVlc3RzKQordm9pZCBDU1NQcmVsb2FkU2Nh
bm5lcjo6c2Nhbihjb25zdCBTdHJpbmcmIGRhdGEsIFByZWxvYWRSZXF1ZXN0U3RyZWFtJiByZXF1
ZXN0cykKIHsKICAgICBpZiAoZGF0YS5pczhCaXQoKSkgewogICAgICAgICBjb25zdCBMQ2hhciog
YmVnaW4gPSBkYXRhLmNoYXJhY3RlcnM4KCk7CkBAIC0yMTMsOCArMjEzLDcgQEAgdm9pZCBDU1NQ
cmVsb2FkU2Nhbm5lcjo6ZW1pdFJ1bGUoKQogICAgICAgICBTdHJpbmcgdXJsID0gcGFyc2VDU1NT
dHJpbmdPclVSTChtX3J1bGVWYWx1ZS5jaGFyYWN0ZXJzKCksIG1fcnVsZVZhbHVlLmxlbmd0aCgp
KTsKICAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBLVVJMIGJhc2VF
bGVtZW50VVJMOyAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcGFzc2VkIGluIGZyb20gdGhlIEhU
TUxQcmVsb2FkU2NhbmVyIHZpYSBzY2FuKCkhCi0gICAgICAgICAgICBPd25QdHI8UHJlbG9hZFJl
cXVlc3Q+IHJlcXVlc3QgPSBQcmVsb2FkUmVxdWVzdDo6Y3JlYXRlKAotICAgICAgICAgICAgICAg
IGNhY2hlZFJlc291cmNlUmVxdWVzdEluaXRpYXRvcnMoKS5jc3MsIHVybCwgYmFzZUVsZW1lbnRV
UkwsIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KTsKKyAgICAgICAgICAgIE93blB0cjxQ
cmVsb2FkUmVxdWVzdD4gcmVxdWVzdCA9IFByZWxvYWRSZXF1ZXN0OjpjcmVhdGUoImNzcyIsIHVy
bCwgYmFzZUVsZW1lbnRVUkwsIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KTsKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBpbmNsdWRpbmcgdGhlIGNoYXJzZXQgaW4g
dGhlIHByZWxvYWQgcmVxdWVzdD8KICAgICAgICAgICAgIG1fcmVxdWVzdHMtPmFwcGVuZChyZXF1
ZXN0LnJlbGVhc2UoKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9DU1NQcmVsb2FkU2Nhbm5lci5oCmluZGV4IDZjYjY2ZmE3NzkyYWM4MzFmM2Q4ZGM0NjIyN2Y5
OGU4NjFkNzdhMmQuLjRiNjliYzMyMzU2YjRjMjE4MTMzZmIxM2RjYTQyMTBmYjNiNmY2YTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaApAQCAt
NDEsOCArNDEsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2V0KCk7CiAKLSAgICB2b2lkIHNj
YW4oY29uc3QgSFRNTFRva2VuOjpEYXRhVmVjdG9yJiwgVmVjdG9yPE93blB0cjxQcmVsb2FkUmVx
dWVzdD4gPiYpOwotICAgIHZvaWQgc2Nhbihjb25zdCBTdHJpbmcmLCBWZWN0b3I8T3duUHRyPFBy
ZWxvYWRSZXF1ZXN0PiA+Jik7CisgICAgdm9pZCBzY2FuKGNvbnN0IEhUTUxUb2tlbjo6RGF0YVZl
Y3RvciYsIFByZWxvYWRSZXF1ZXN0U3RyZWFtJik7CisgICAgdm9pZCBzY2FuKGNvbnN0IFN0cmlu
ZyYsIFByZWxvYWRSZXF1ZXN0U3RyZWFtJik7CiAKIHByaXZhdGU6CiAgICAgZW51bSBTdGF0ZSB7
CkBAIC01OSw3ICs1OSw3IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXI+Ci0gICAgdm9pZCBzY2FuQ29tbW9uKGNvbnN0IENoYXIqIGJlZ2luLCBjb25zdCBD
aGFyKiBlbmQsIFZlY3RvcjxPd25QdHI8UHJlbG9hZFJlcXVlc3Q+ID4mKTsKKyAgICB2b2lkIHNj
YW5Db21tb24oY29uc3QgQ2hhciogYmVnaW4sIGNvbnN0IENoYXIqIGVuZCwgUHJlbG9hZFJlcXVl
c3RTdHJlYW0mKTsKIAogICAgIGlubGluZSB2b2lkIHRva2VuaXplKFVDaGFyKTsKICAgICB2b2lk
IGVtaXRSdWxlKCk7CkBAIC02OSw3ICs2OSw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nQnVpbGRl
ciBtX3J1bGVWYWx1ZTsKIAogICAgIC8vIE9ubHkgbm9uLXplcm8gZHVyaW5nIHNjYW4oKQotICAg
IFZlY3RvcjxPd25QdHI8UHJlbG9hZFJlcXVlc3Q+ID4qIG1fcmVxdWVzdHM7CisgICAgUHJlbG9h
ZFJlcXVlc3RTdHJlYW0qIG1fcmVxdWVzdHM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAppbmRleCA0ODViMDZjNzAyZTA0
NjZlZjU5MzAwM2Y1MTYyNDlhZTZkN2MzMjhiLi4xM2UxOWE0ZmUzMzRkNjAzOTg4YTE2Y2MwYWNl
NmEwZDI5YjMzZWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
RG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxE
b2N1bWVudFBhcnNlci5jcHAKQEAgLTI4NiwxMCArMjg2LDEyIEBAIGJvb2wgSFRNTERvY3VtZW50
UGFyc2VyOjpjYW5UYWtlTmV4dFRva2VuKFN5bmNocm9ub3VzTW9kZSBtb2RlLCBQdW1wU2Vzc2lv
biYgc2VzCiB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6ZGlkUmVjZWl2ZVBhcnNlZENodW5rRnJv
bUJhY2tncm91bmRQYXJzZXIoUGFzc093blB0cjxQYXJzZWRDaHVuaz4gY2h1bmspCiB7CiAgICAg
aWYgKGlzV2FpdGluZ0ZvclNjcmlwdHMoKSkgeworICAgICAgICBtX3ByZWxvYWRlci0+dGFrZUFu
ZFByZWxvYWQoY2h1bmstPnByZWxvYWRzKTsKICAgICAgICAgbV9zcGVjdWxhdGlvbnMuYXBwZW5k
KGNodW5rKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlQobV9zcGVjdWxhdGlv
bnMuaXNFbXB0eSgpKTsKKyAgICBjaHVuay0+cHJlbG9hZHMuY2xlYXIoKTsgLy8gV2UgZG9uJ3Qg
bmVlZCB0byBwcmVsb2FkIGJlY2F1c2Ugd2UncmUgZ29pbmcgdG8gcGFyc2UgaW1tZWRpYXRlbHku
CiAgICAgcHJvY2Vzc1BhcnNlZENodW5rRnJvbUJhY2tncm91bmRQYXJzZXIoY2h1bmspOwogfQog
CkBAIC01NTUsMTEgKzU1NywxNiBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6c3RhcnRCYWNr
Z3JvdW5kUGFyc2VyKCkKICAgICBSZWZQdHI8V2Vha1JlZmVyZW5jZTxCYWNrZ3JvdW5kSFRNTFBh
cnNlcj4gPiByZWZlcmVuY2UgPSBXZWFrUmVmZXJlbmNlPEJhY2tncm91bmRIVE1MUGFyc2VyPjo6
Y3JlYXRlVW5ib3VuZCgpOwogICAgIG1fYmFja2dyb3VuZFBhcnNlciA9IFdlYWtQdHI8QmFja2dy
b3VuZEhUTUxQYXJzZXI+KHJlZmVyZW5jZSk7CiAKLSAgICBXZWFrUHRyPEhUTUxEb2N1bWVudFBh
cnNlcj4gcGFyc2VyID0gbV93ZWFrRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7Ci0gICAgT3duUHRy
PFhTU0F1ZGl0b3I+IHhzc0F1ZGl0b3IgPSBhZG9wdFB0cihuZXcgWFNTQXVkaXRvcik7Ci0gICAg
eHNzQXVkaXRvci0+aW5pdChkb2N1bWVudCgpKTsKLSAgICBBU1NFUlQoeHNzQXVkaXRvci0+aXNT
YWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkpOwotICAgIEhUTUxQYXJzZXJUaHJlYWQ6OnNoYXJl
ZCgpLT5wb3N0VGFzayhiaW5kKCZCYWNrZ3JvdW5kSFRNTFBhcnNlcjo6Y3JlYXRlLCByZWZlcmVu
Y2UucmVsZWFzZSgpLCBtX29wdGlvbnMsIHBhcnNlciwgeHNzQXVkaXRvci5yZWxlYXNlKCkpKTsK
KyAgICBPd25QdHI8QmFja2dyb3VuZEhUTUxQYXJzZXI6OkNvbmZpZ3VyYXRpb24+IGNvbmZpZyA9
IGFkb3B0UHRyKG5ldyBCYWNrZ3JvdW5kSFRNTFBhcnNlcjo6Q29uZmlndXJhdGlvbik7CisgICAg
Y29uZmlnLT5vcHRpb25zID0gbV9vcHRpb25zOworICAgIGNvbmZpZy0+cGFyc2VyID0gbV93ZWFr
RmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7CisgICAgY29uZmlnLT54c3NBdWRpdG9yID0gYWRvcHRQ
dHIobmV3IFhTU0F1ZGl0b3IpOworICAgIGNvbmZpZy0+eHNzQXVkaXRvci0+aW5pdChkb2N1bWVu
dCgpKTsKKyAgICBjb25maWctPnByZWxvYWRTY2FubmVyID0gYWRvcHRQdHIobmV3IFRva2VuUHJl
bG9hZFNjYW5uZXIoZG9jdW1lbnQoKS0+dXJsKCkuY29weSgpKSk7CisKKyAgICBBU1NFUlQoY29u
ZmlnLT54c3NBdWRpdG9yLT5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSk7CisgICAgQVNT
RVJUKGNvbmZpZy0+cHJlbG9hZFNjYW5uZXItPmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgp
KTsKKyAgICBIVE1MUGFyc2VyVGhyZWFkOjpzaGFyZWQoKS0+cG9zdFRhc2soYmluZCgmQmFja2dy
b3VuZEhUTUxQYXJzZXI6OmNyZWF0ZSwgcmVmZXJlbmNlLnJlbGVhc2UoKSwgY29uZmlnLnJlbGVh
c2UoKSkpOwogfQogCiB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6c3RvcEJhY2tncm91bmRQYXJz
ZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50
UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIu
aAppbmRleCA3NDI4OWJiNmI3NTAxYzVhOTI2ZjI1OTIyMjI0ZWEyMjRlZWMyNTJmLi5kMWM0NjRl
YWU5NjkwNmQ2YzVmOTdkZTRlMjFhMTAwOTMxNWY0NzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbi5oIgogI2luY2x1ZGUgIkhUTUxJbnB1
dFN0cmVhbS5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJPcHRpb25zLmgiCisjaW5jbHVkZSAiSFRN
TFByZWxvYWRTY2FubmVyLmgiCiAjaW5jbHVkZSAiSFRNTFNjcmlwdFJ1bm5lckhvc3QuaCIKICNp
bmNsdWRlICJIVE1MU291cmNlVHJhY2tlci5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbi5oIgpAQCAt
NTYsNyArNTcsNiBAQCBjbGFzcyBIVE1MUGFyc2VyU2NoZWR1bGVyOwogY2xhc3MgSFRNTFRva2Vu
aXplcjsKIGNsYXNzIEhUTUxTY3JpcHRSdW5uZXI7CiBjbGFzcyBIVE1MVHJlZUJ1aWxkZXI7Ci1j
bGFzcyBIVE1MUHJlbG9hZFNjYW5uZXI7CiBjbGFzcyBIVE1MUmVzb3VyY2VQcmVsb2FkZXI7CiBj
bGFzcyBTY3JpcHRDb250cm9sbGVyOwogY2xhc3MgU2NyaXB0U291cmNlQ29kZTsKQEAgLTg4LDYg
Kzg4LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShUSFJFQURFRF9IVE1MX1BBUlNFUikKICAgICBz
dHJ1Y3QgUGFyc2VkQ2h1bmsgewogICAgICAgICBPd25QdHI8Q29tcGFjdEhUTUxUb2tlblN0cmVh
bT4gdG9rZW5zOworICAgICAgICBQcmVsb2FkUmVxdWVzdFN0cmVhbSBwcmVsb2FkczsKICAgICAg
ICAgSFRNTElucHV0Q2hlY2twb2ludCBjaGVja3BvaW50OwogICAgIH07CiAgICAgdm9pZCBkaWRS
ZWNlaXZlUGFyc2VkQ2h1bmtGcm9tQmFja2dyb3VuZFBhcnNlcihQYXNzT3duUHRyPFBhcnNlZENo
dW5rPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2Vy
T3B0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlck9wdGlvbnMu
aAppbmRleCAxMjVmM2U3Y2E5NjhiMzMxYTljNzM0MGViYWZmMzI4ZTE0YjQ0ZDYwLi40NjliZTAx
ZGQ0NDBiN2QxZDljYzMwZWJiYjJlNjljNTA2ODMyNDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VyT3B0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJPcHRpb25zLmgKQEAgLTM4LDcgKzM4LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgdXNlVGhyZWFkaW5nOwogICAgIHVuc2lnbmVkIG1heGltdW1ET01UcmVlRGVw
dGg7CiAKLSAgICBleHBsaWNpdCBIVE1MUGFyc2VyT3B0aW9ucyhEb2N1bWVudCopOworICAgIGV4
cGxpY2l0IEhUTUxQYXJzZXJPcHRpb25zKERvY3VtZW50KiA9IDApOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKaW5kZXgg
YWRjNjRkZTMwOGM0OGVjMTAwYmJkZGRiNTMwZWQ5YWE2YWQ0ZTdiYy4uMmQ0NzYxNjdiMDg2YmYw
YTQzZTEyNmEyMTQyYzI4Zjg4YmQwOWQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCkBAIC0yNjAsMTggKzI2MCwxOCBAQCBUb2tl
blByZWxvYWRTY2FubmVyOjp+VG9rZW5QcmVsb2FkU2Nhbm5lcigpCiB7CiB9CiAKLXZvaWQgVG9r
ZW5QcmVsb2FkU2Nhbm5lcjo6c2Nhbihjb25zdCBIVE1MVG9rZW4mIHRva2VuLCBWZWN0b3I8T3du
UHRyPFByZWxvYWRSZXF1ZXN0PiA+JiByZXF1ZXN0cykKK3ZvaWQgVG9rZW5QcmVsb2FkU2Nhbm5l
cjo6c2Nhbihjb25zdCBIVE1MVG9rZW4mIHRva2VuLCBQcmVsb2FkUmVxdWVzdFN0cmVhbSYgcmVx
dWVzdHMpCiB7CiAgICAgc2NhbkNvbW1vbih0b2tlbiwgcmVxdWVzdHMpOwogfQogCi12b2lkIFRv
a2VuUHJlbG9hZFNjYW5uZXI6OnNjYW4oY29uc3QgQ29tcGFjdEhUTUxUb2tlbiYgdG9rZW4sIFZl
Y3RvcjxPd25QdHI8UHJlbG9hZFJlcXVlc3Q+ID4mIHJlcXVlc3RzKQordm9pZCBUb2tlblByZWxv
YWRTY2FubmVyOjpzY2FuKGNvbnN0IENvbXBhY3RIVE1MVG9rZW4mIHRva2VuLCBQcmVsb2FkUmVx
dWVzdFN0cmVhbSYgcmVxdWVzdHMpCiB7CiAgICAgc2NhbkNvbW1vbih0b2tlbiwgcmVxdWVzdHMp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUb2tlbj4KLXZvaWQgVG9rZW5QcmVsb2FkU2Nhbm5l
cjo6c2NhbkNvbW1vbihjb25zdCBUb2tlbiYgdG9rZW4sIFZlY3RvcjxPd25QdHI8UHJlbG9hZFJl
cXVlc3Q+ID4mIHJlcXVlc3RzKQordm9pZCBUb2tlblByZWxvYWRTY2FubmVyOjpzY2FuQ29tbW9u
KGNvbnN0IFRva2VuJiB0b2tlbiwgUHJlbG9hZFJlcXVlc3RTdHJlYW0mIHJlcXVlc3RzKQogewog
ICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CiAgICAgY2FzZSBIVE1MVG9rZW46OkNoYXJhY3Rl
cjogewpAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgVG9rZW5QcmVsb2FkU2Nhbm5lcjo6dXBkYXRl
UHJlZGljdGVkQmFzZVVSTChjb25zdCBIVE1MVG9rZW4mIHRva2VuKQogdm9pZCBUb2tlblByZWxv
YWRTY2FubmVyOjp1cGRhdGVQcmVkaWN0ZWRCYXNlVVJMKGNvbnN0IENvbXBhY3RIVE1MVG9rZW4m
IHRva2VuKQogewogICAgIEFTU0VSVChtX3ByZWRpY3RlZEJhc2VFbGVtZW50VVJMLmlzRW1wdHko
KSk7Ci0gICAgbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVSTCA9IEtVUkwobV9kb2N1bWVudFVSTCwg
c3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHRva2VuLmdldEF0dHJpYnV0ZUl0ZW0o
aHJlZkF0dHIpLT52YWx1ZSgpKSk7CisgICAgbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVSTCA9IEtV
UkwobV9kb2N1bWVudFVSTCwgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHRva2Vu
LmdldEF0dHJpYnV0ZUl0ZW0oaHJlZkF0dHIpLT52YWx1ZSgpKSkuY29weSgpOwogfQogCiBIVE1M
UHJlbG9hZFNjYW5uZXI6OkhUTUxQcmVsb2FkU2Nhbm5lcihjb25zdCBIVE1MUGFyc2VyT3B0aW9u
cyYgb3B0aW9ucywgY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwpCkBAIC0zNzUsMTUgKzM3NSwxNiBA
QCB2b2lkIEhUTUxQcmVsb2FkU2Nhbm5lcjo6c2NhbihIVE1MUmVzb3VyY2VQcmVsb2FkZXIqIHBy
ZWxvYWRlciwgY29uc3QgS1VSTCYgc3RhcgogICAgIGlmICghc3RhcnRpbmdCYXNlRWxlbWVudFVS
TC5pc0VtcHR5KCkpCiAgICAgICAgIG1fc2Nhbm5lci5zZXRQcmVkaWN0ZWRCYXNlRWxlbWVudFVS
TChzdGFydGluZ0Jhc2VFbGVtZW50VVJMKTsKIAotICAgIFZlY3RvcjxPd25QdHI8UHJlbG9hZFJl
cXVlc3Q+ID4gcmVxdWVzdHM7CisgICAgUHJlbG9hZFJlcXVlc3RTdHJlYW0gcmVxdWVzdHM7CisK
ICAgICB3aGlsZSAobV90b2tlbml6ZXItPm5leHRUb2tlbihtX3NvdXJjZSwgbV90b2tlbikpIHsK
ICAgICAgICAgaWYgKG1fdG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpCiAgICAg
ICAgICAgICBtX3Rva2VuaXplci0+dXBkYXRlU3RhdGVGb3IoQXRvbWljU3RyaW5nKG1fdG9rZW4u
bmFtZSgpKSk7CiAgICAgICAgIG1fc2Nhbm5lci5zY2FuKG1fdG9rZW4sIHJlcXVlc3RzKTsKICAg
ICAgICAgbV90b2tlbi5jbGVhcigpOwogICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHJlcXVlc3RzLnNpemUoKTsgaSsrKQotICAgICAgICBwcmVsb2FkZXItPnByZWxvYWQocmVxdWVz
dHNbaV0ucmVsZWFzZSgpKTsKKworICAgIHByZWxvYWRlci0+dGFrZUFuZFByZWxvYWQocmVxdWVz
dHMpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
UHJlbG9hZFNjYW5uZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2Fk
U2Nhbm5lci5oCmluZGV4IDBhZjkwNGFmMjVhOWQ0ZjU4NTg5MDFkMzIyOWM3OWY3MGNjYzllMTIu
LmQ4NmVkNWQwNTBjYmFkOWQ4YjNlM2RhNWQzZDEwOGVmMjQ3Mjk2YTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oCkBAIC00NCwxMSArNDQs
MTcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IFRva2VuUHJlbG9hZFNjYW5uZXIoY29uc3QgS1VS
TCYgZG9jdW1lbnRVUkwpOwogICAgIH5Ub2tlblByZWxvYWRTY2FubmVyKCk7CiAKLSAgICB2b2lk
IHNjYW4oY29uc3QgSFRNTFRva2VuJiwgVmVjdG9yPE93blB0cjxQcmVsb2FkUmVxdWVzdD4gPiYg
cmVxdWVzdHMpOwotICAgIHZvaWQgc2Nhbihjb25zdCBDb21wYWN0SFRNTFRva2VuJiwgVmVjdG9y
PE93blB0cjxQcmVsb2FkUmVxdWVzdD4gPiYgcmVxdWVzdHMpOworICAgIHZvaWQgc2Nhbihjb25z
dCBIVE1MVG9rZW4mLCBQcmVsb2FkUmVxdWVzdFN0cmVhbSYgcmVxdWVzdHMpOworICAgIHZvaWQg
c2Nhbihjb25zdCBDb21wYWN0SFRNTFRva2VuJiwgUHJlbG9hZFJlcXVlc3RTdHJlYW0mIHJlcXVl
c3RzKTsKIAogICAgIHZvaWQgc2V0UHJlZGljdGVkQmFzZUVsZW1lbnRVUkwoY29uc3QgS1VSTCYg
dXJsKSB7IG1fcHJlZGljdGVkQmFzZUVsZW1lbnRVUkwgPSB1cmw7IH0KIAorICAgIGJvb2wgaXNT
YWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RvY3Vt
ZW50VVJMLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpCisgICAgICAgICAgICAmJiBtX3By
ZWRpY3RlZEJhc2VFbGVtZW50VVJMLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpOworICAg
IH0KKwogcHJpdmF0ZToKICAgICBlbnVtIFRhZ0lkIHsKICAgICAgICAgLy8gVGhlc2UgdGFncyBh
cmUgc2Nhbm5lZCBieSB0aGUgU3RhcnRUYWdTY2FubmVyLgpAQCAtNjcsNyArNzMsNyBAQCBwcml2
YXRlOgogICAgIGNsYXNzIFN0YXJ0VGFnU2Nhbm5lcjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFRva2VuPgotICAgIGlubGluZSB2b2lkIHNjYW5Db21tb24oY29uc3QgVG9rZW4mLCBWZWN0b3I8
T3duUHRyPFByZWxvYWRSZXF1ZXN0PiA+JiByZXF1ZXN0cyk7CisgICAgaW5saW5lIHZvaWQgc2Nh
bkNvbW1vbihjb25zdCBUb2tlbiYsIFByZWxvYWRSZXF1ZXN0U3RyZWFtJiByZXF1ZXN0cyk7CiAK
ICAgICBzdGF0aWMgVGFnSWQgdGFnSWRGb3IoY29uc3QgSFRNTFRva2VuOjpEYXRhVmVjdG9yJik7
CiAgICAgc3RhdGljIFRhZ0lkIHRhZ0lkRm9yKGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAKaW5kZXgg
NzcwZmYwZTM5ZmZmNjY5ZDc3N2RmNTM5N2Y5MGZmNzFhZmMwM2M5NS4uZmE1YWRmYmU2OTAzNjNk
Y2Y2YjU5YTAzMjA3ZjE0NWIyNTQwOWYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwCkBAIC01Niw2ICs1NiwxNSBAQCBD
YWNoZWRSZXNvdXJjZVJlcXVlc3QgUHJlbG9hZFJlcXVlc3Q6OnJlc291cmNlUmVxdWVzdChEb2N1
bWVudCogZG9jdW1lbnQpCiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKK3ZvaWQgSFRNTFJlc291
cmNlUHJlbG9hZGVyOjp0YWtlQW5kUHJlbG9hZChQcmVsb2FkUmVxdWVzdFN0cmVhbSYgcikKK3sK
KyAgICBQcmVsb2FkUmVxdWVzdFN0cmVhbSByZXF1ZXN0czsKKyAgICByZXF1ZXN0cy5zd2FwKHIp
OworCisgICAgZm9yIChQcmVsb2FkUmVxdWVzdFN0cmVhbTo6aXRlcmF0b3IgaXQgPSByZXF1ZXN0
cy5iZWdpbigpOyBpdCAhPSByZXF1ZXN0cy5lbmQoKTsgKytpdCkKKyAgICAgICAgcHJlbG9hZChp
dC0+cmVsZWFzZSgpKTsKK30KKwogdm9pZCBIVE1MUmVzb3VyY2VQcmVsb2FkZXI6OnByZWxvYWQo
UGFzc093blB0cjxQcmVsb2FkUmVxdWVzdD4gcHJlbG9hZCkKIHsKICAgICBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdCA9IHByZWxvYWQtPnJlc291cmNlUmVxdWVzdChtX2RvY3VtZW50KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxv
YWRlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVy
LmgKaW5kZXggZGQ0NTIzZWNiZGYwNDdlODE4MWE4ZTRjOTJlZWQ3OGQzYzU0NzQyNi4uYjlmMjIx
ZmNiNDhhMzgxNGQ2MjJjNTgyNDdiM2Y0ZjFiOWY0NWM3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmgKQEAgLTUwLDggKzUwLDgg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBQcmVsb2FkUmVxdWVzdChjb25zdCBTdHJpbmcmIGlu
aXRpYXRvciwgY29uc3QgU3RyaW5nJiByZXNvdXJjZVVSTCwgY29uc3QgS1VSTCYgYmFzZVVSTCwg
Q2FjaGVkUmVzb3VyY2U6OlR5cGUgcmVzb3VyY2VUeXBlKQogICAgICAgICA6IG1faW5pdGlhdG9y
KGluaXRpYXRvcikKLSAgICAgICAgLCBtX3Jlc291cmNlVVJMKHJlc291cmNlVVJMKQotICAgICAg
ICAsIG1fYmFzZVVSTChiYXNlVVJMKQorICAgICAgICAsIG1fcmVzb3VyY2VVUkwocmVzb3VyY2VV
UkwuaXNvbGF0ZWRDb3B5KCkpCisgICAgICAgICwgbV9iYXNlVVJMKGJhc2VVUkwuY29weSgpKQog
ICAgICAgICAsIG1fcmVzb3VyY2VUeXBlKHJlc291cmNlVHlwZSkKICAgICAgICAgLCBtX2Nyb3Nz
T3JpZ2luTW9kZUFsbG93c0Nvb2tpZXMoZmFsc2UpCiAgICAgewpAQCAtNjcsNiArNjcsOCBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9jcm9zc09yaWdpbk1vZGVBbGxvd3NDb29raWVzOwogfTsKIAor
dHlwZWRlZiBWZWN0b3I8T3duUHRyPFByZWxvYWRSZXF1ZXN0PiA+IFByZWxvYWRSZXF1ZXN0U3Ry
ZWFtOworCiBjbGFzcyBIVE1MUmVzb3VyY2VQcmVsb2FkZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEhUTUxSZXNvdXJjZVByZWxvYWRlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgpAQCAtNzYsNiArNzgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIHZv
aWQgdGFrZUFuZFByZWxvYWQoUHJlbG9hZFJlcXVlc3RTdHJlYW0mKTsKICAgICB2b2lkIHByZWxv
YWQoUGFzc093blB0cjxQcmVsb2FkUmVxdWVzdD4pOwogCiAgICAgV2Vha1B0cjxIVE1MUmVzb3Vy
Y2VQcmVsb2FkZXI+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtGYWN0b3J5LmNyZWF0
ZVdlYWtQdHIoKTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188612</attachid>
            <date>2013-02-15 12:01:49 -0800</date>
            <delta_ts>2013-02-15 14:16:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108027-20130215115815.patch</filename>
            <type>text/plain</type>
            <size>21847</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzMDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTE0N2JlZGVhOGRlZTRm
ZmQ3ZjlhNTgzZWYzN2Y2MTUzZjY1YTY5OS4uNWNiZTI1YjBkZDVmMGNjMjQ4ZGVkZmY3MzE4MmMw
OTE2OGJmNDA3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEzLTAyLTE1ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRW5hYmxlIHRoZSBwcmVsb2Fk
IHNjYW5uZXIgb24gdGhlIGJhY2tncm91bmQgcGFyc2VyIHRocmVhZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MDI3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgVG9ueSBHZW50aWxjb3JlLgorCisgICAgICAgIFRoZSBwYXRjaCBjYXVzZXMgdXMgdG8g
cGFzcyBhbGwgdGhlIGZhc3QvcHJlbG9hZGVyIHRlc3RzIHdpdGggdGhlCisgICAgICAgIHRocmVh
ZGVkIHBhcnNlciBlbmFibGVkLgorCisgICAgICAgIFRoaXMgcGF0Y2ggd2lyZXMgdXAgdGhlIEJh
Y2tncm91bmRIVE1MUGFyc2VyIHRvIHRoZQorICAgICAgICBUb2tlblByZWxvYWRTY2FubmVyLiAg
Q3VycmVudGx5LCB3ZSBiYWlsIG91dCBvZiBwcmVsb2FkIHNjYW5uaW5nIGlmIHdlCisgICAgICAg
IGVuY291bnRlciBhIGRvY3VtZW50LndyaXRlIGJlY2F1ZXMgd2UgZG9uJ3Qga25vdyBob3cgdG8g
cmV3aW5kIHRoZQorICAgICAgICBwcmVsb2FkIHNjYW5uZXIsIGJ1dCB0aGF0J3Mgc29tZXRoaW5n
IHdlIGNhbiB0dW5lIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAgVGhlIEJhY2tncm91bmRIVE1M
UGFyc2VyIGRlbGl2ZXJzIHRoZSBwcmVsb2FkcyB0byB0aGUKKyAgICAgICAgSFRNTERvY3VtZW50
UGFyc2VyIHRvZ2V0aGVyIHdpdGggdGhlIHRva2VuIHN0cmVhbS4gSWYgdGhlCisgICAgICAgIEhU
TUxEb2N1bWVudFBhcnNlciBpc24ndCBhYmxlIHRvIHVzZSB0aGUgdG9rZW4gc3RyZWFtIGltbWVk
aWF0ZWx5LCBpdAorICAgICAgICBraWNrcyBvZmYgdGhlIHByZWxvYWRzLgorCisgICAgICAgICog
aHRtbC9wYXJzZXIvQmFja2dyb3VuZEhUTUxQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y2hlY2tUaGF0UHJlbG9hZHNBcmVTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkJhY2tncm91bmRIVE1MUGFyc2VyOjpCYWNrZ3JvdW5kSFRNTFBhcnNlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpCYWNrZ3JvdW5kSFRNTFBhcnNlcjo6cmVzdW1lRnJvbSk6CisgICAg
ICAgIChXZWJDb3JlOjpCYWNrZ3JvdW5kSFRNTFBhcnNlcjo6cHVtcFRva2VuaXplcik6CisgICAg
ICAgIChXZWJDb3JlOjpCYWNrZ3JvdW5kSFRNTFBhcnNlcjo6c2VuZFRva2Vuc1RvTWFpblRocmVh
ZCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvQmFja2dyb3VuZEhUTUxQYXJzZXIuaDoKKyAgICAg
ICAgKENvbmZpZ3VyYXRpb24pOgorICAgICAgICAgICAgLSBXZSBuZWVkIHRvIGFkZCBhIHN0cnVj
dCBmb3IgdGhlIGNyZWF0ZSBmdW5jdGlvbiBiZWNhdXNlIHRoZQorICAgICAgICAgICAgICBudW1i
ZXIgb2YgYXJndW1lbnRzIGV4Y2VlZHMgdGhlIGxpbWl0cyBvZiBGdW5jdGlvbmFsLmguCisgICAg
ICAgIChCYWNrZ3JvdW5kSFRNTFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpCYWNrZ3JvdW5k
SFRNTFBhcnNlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nh
bm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmVsb2FkU2Nhbm5lcjo6c2NhbkNvbW1v
bik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmVsb2FkU2Nhbm5lcjo6c2Nhbik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcmVsb2FkU2Nhbm5lcjo6ZW1pdFJ1bGUpOgorICAgICAgICAgICAgLSBX
ZSBuZWVkIHRvIHVzZSBhIG5ldyBzdHJpbmcgaGVyZSBzbyB0aGF0IHRoZSBzdHJpbmcgaXMgc2Fm
ZSB0bworICAgICAgICAgICAgICBzZW5kIHRvIGFub3RoZXIgdGhyZWFkLgorICAgICAgICAqIGh0
bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmg6CisgICAgICAgIChDU1NQcmVsb2FkU2Nhbm5l
cik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6ZGlkUmVjZWl2ZVBhcnNlZENodW5rRnJv
bUJhY2tncm91bmRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2Vy
OjpzdGFydEJhY2tncm91bmRQYXJzZXIpOgorICAgICAgICAgICAgLSBGb2xsb3dpbmcgdGhlIGV4
YW1wbGUgb2YgdGhlIFhTU0F1ZGl0b3IsIHdlIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgICAgVG9r
ZW5QcmVsb2FkU2Nhbm5lciBvbiB0aGUgbWFpbiB0aHJlYWQgYW5kIHRoZW4gc2VuZCBpdCB0byB0
aGUKKyAgICAgICAgICAgICAgYmFja2dyb3VuZCB0aHJlYWQgZm9yIG9wZXJhdGlvbi4KKyAgICAg
ICAgKiBodG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoUGFyc2VkQ2h1bmspOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQYXJz
ZXJPcHRpb25zLmg6CisgICAgICAgIChIVE1MUGFyc2VyT3B0aW9ucyk6CisgICAgICAgICAgICAt
IFdlIG5lZWQgdG8gYWRkIGEgZGVmYXVsdCBjb25zdHJ1Y3RvciBzbyB0aGF0IHRoZQorICAgICAg
ICAgICAgICBIVE1MRG9jdW1lbnRQYXJzZXIgY2FuIGNyZWF0ZSBhbiBlbXB0eQorICAgICAgICAg
ICAgICBCYWNrZ3JvdW5kSFRNTFBhcnNlcjo6Q29uZmlndXJhdGlvbiBzdHJ1Y3QuCisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRva2VuUHJlbG9hZFNjYW5uZXI6OnNjYW4pOgorICAgICAgICAoV2ViQ29yZTo6VG9rZW5QcmVs
b2FkU2Nhbm5lcjo6c2NhbkNvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJlbG9hZFNj
YW5uZXI6OnNjYW4pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5o
OgorICAgICAgICAoVG9rZW5QcmVsb2FkU2Nhbm5lcik6CisgICAgICAgIChXZWJDb3JlOjpUb2tl
blByZWxvYWRTY2FubmVyOjppc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQpOgorICAgICAgICAq
IGh0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MUmVzb3VyY2VQcmVsb2FkZXI6OnRha2VBbmRQcmVsb2FkKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6UHJlbG9hZFJlcXVlc3Q6OlByZWxvYWRSZXF1ZXN0KToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoSFRNTFJlc291cmNlUHJlbG9hZGVyKToKKwogMjAxMy0wMi0x
NSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBDcmFz
aCBvY2N1cnMgYXQgV2ViQ29yZTo6VGV4dFRyYWNrTGlzdDo6bGVuZ3RoKCkgd2hlbiBlbmFibGlu
ZyBjbG9zZWQgY2FwdGlvbnMgaW4gbW92aWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0JhY2tncm91bmRIVE1MUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0JhY2tncm91bmRIVE1MUGFyc2VyLmNwcAppbmRleCBiYjg1MzRiN2QzOWVjYzNjNjE4
ZmU2NjUzOTIzY2VmZGFmNWJjNTViLi43ZDgzOGQxMjRkN2E2MmZkMTk0NzFiYTc5OWQ2ZjUyZjky
MGU3NjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9CYWNrZ3JvdW5k
SFRNTFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQmFja2dyb3Vu
ZEhUTUxQYXJzZXIuY3BwCkBAIC01Myw2ICs1MywxMiBAQCBzdGF0aWMgdm9pZCBjaGVja1RoYXRU
b2tlbnNBcmVTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKGNvbnN0IENvbXBhY3RIVE1MVG9rZW5T
dAogICAgICAgICBBU1NFUlQodG9rZW5zLT5hdChpKS5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJl
YWQoKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGNoZWNrVGhhdFByZWxvYWRzQXJlU2FmZVRvU2VuZFRv
QW5vdGhlclRocmVhZChjb25zdCBQcmVsb2FkUmVxdWVzdFN0cmVhbSYgcHJlbG9hZHMpCit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVsb2Fkcy5zaXplKCk7ICsraSkKKyAgICAgICAg
QVNTRVJUKHByZWxvYWRzW2ldLT5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSk7Cit9CisK
ICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIGJvb2wgdG9rZW5FeGl0c0ZvcmVpZ25Db250ZW50KGNv
bnN0IENvbXBhY3RIVE1MVG9rZW4mIHRva2VuKQpAQCAtMTA2LDE3ICsxMTIsMTggQEAgc3RhdGlj
IGlubGluZSBib29sIHRva2VuRXhpdHNGb3JlaWduQ29udGVudChjb25zdCBDb21wYWN0SFRNTFRv
a2VuJiB0b2tlbikKICAgICAgICAgfHwgKHRocmVhZFNhZmVNYXRjaCh0YWdOYW1lLCBmb250VGFn
KSAmJiAodG9rZW4uZ2V0QXR0cmlidXRlSXRlbShjb2xvckF0dHIpIHx8IHRva2VuLmdldEF0dHJp
YnV0ZUl0ZW0oZmFjZUF0dHIpIHx8IHRva2VuLmdldEF0dHJpYnV0ZUl0ZW0oc2l6ZUF0dHIpKSk7
CiB9CiAKLS8vIEZJWE1FOiBUdW5lIHRoaXMgY29uc3RhbnQgYmFzZWQgb24gYSBiZW5jaG1hcmsu
IFRoZSBjdXJyZW50IHZhbHVlIHdhcyBjaG9vc2VuIGFyYml0cmFyaWx5LgorLy8gRklYTUU6IFR1
bmUgdGhpcyBjb25zdGFudCBiYXNlZCBvbiBhIGJlbmNobWFyay4gVGhlIGN1cnJlbnQgdmFsdWUg
d2FzIGNob3NlbiBhcmJpdHJhcmlseS4KIHN0YXRpYyBjb25zdCBzaXplX3QgcGVuZGluZ1Rva2Vu
TGltaXQgPSA0MDAwOwogCi1CYWNrZ3JvdW5kSFRNTFBhcnNlcjo6QmFja2dyb3VuZEhUTUxQYXJz
ZXIoUGFzc1JlZlB0cjxXZWFrUmVmZXJlbmNlPEJhY2tncm91bmRIVE1MUGFyc2VyPiA+IHJlZmVy
ZW5jZSwgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IFdlYWtQdHI8SFRN
TERvY3VtZW50UGFyc2VyPiYgcGFyc2VyLCBQYXNzT3duUHRyPFhTU0F1ZGl0b3I+IHhzc0F1ZGl0
b3IpCitCYWNrZ3JvdW5kSFRNTFBhcnNlcjo6QmFja2dyb3VuZEhUTUxQYXJzZXIoUGFzc1JlZlB0
cjxXZWFrUmVmZXJlbmNlPEJhY2tncm91bmRIVE1MUGFyc2VyPiA+IHJlZmVyZW5jZSwgUGFzc093
blB0cjxDb25maWd1cmF0aW9uPiBjb25maWcpCiAgICAgOiBtX3dlYWtGYWN0b3J5KHJlZmVyZW5j
ZSwgdGhpcykKICAgICAsIG1fdG9rZW4oYWRvcHRQdHIobmV3IEhUTUxUb2tlbikpCi0gICAgLCBt
X3Rva2VuaXplcihIVE1MVG9rZW5pemVyOjpjcmVhdGUob3B0aW9ucykpCi0gICAgLCBtX29wdGlv
bnMob3B0aW9ucykKLSAgICAsIG1fcGFyc2VyKHBhcnNlcikKKyAgICAsIG1fdG9rZW5pemVyKEhU
TUxUb2tlbml6ZXI6OmNyZWF0ZShjb25maWctPm9wdGlvbnMpKQorICAgICwgbV9vcHRpb25zKGNv
bmZpZy0+b3B0aW9ucykKKyAgICAsIG1fcGFyc2VyKGNvbmZpZy0+cGFyc2VyKQogICAgICwgbV9w
ZW5kaW5nVG9rZW5zKGFkb3B0UHRyKG5ldyBDb21wYWN0SFRNTFRva2VuU3RyZWFtKSkKLSAgICAs
IG1feHNzQXVkaXRvcih4c3NBdWRpdG9yKQorICAgICwgbV94c3NBdWRpdG9yKGNvbmZpZy0+eHNz
QXVkaXRvci5yZWxlYXNlKCkpCisgICAgLCBtX3ByZWxvYWRTY2FubmVyKGNvbmZpZy0+cHJlbG9h
ZFNjYW5uZXIucmVsZWFzZSgpKQogewogICAgIG1fbmFtZXNwYWNlU3RhY2suYXBwZW5kKEhUTUwp
OwogfQpAQCAtMTMzLDYgKzE0MCw3IEBAIHZvaWQgQmFja2dyb3VuZEhUTUxQYXJzZXI6OnJlc3Vt
ZUZyb20oUGFzc093blB0cjxDaGVja3BvaW50PiBjaGVja3BvaW50KQogICAgIG1fdG9rZW4gPSBj
aGVja3BvaW50LT50b2tlbi5yZWxlYXNlKCk7CiAgICAgbV90b2tlbml6ZXIgPSBjaGVja3BvaW50
LT50b2tlbml6ZXIucmVsZWFzZSgpOwogICAgIG1faW5wdXQucmV3aW5kVG8oY2hlY2twb2ludC0+
aW5wdXRDaGVja3BvaW50LCBjaGVja3BvaW50LT51bnBhcnNlZElucHV0KTsKKyAgICBtX3ByZWxv
YWRTY2FubmVyLmNsZWFyKCk7IC8vIEZJWE1FOiBXZSBzaG91bGQgcmV3aW5kIHRoZSBwcmVsb2Fk
IHNjYW5uZXIgcmF0aGVyIHRoYW4gY2xlYXJpbmcgaXQuCiAgICAgcHVtcFRva2VuaXplcigpOwog
fQogCkBAIC0yMjMsOCArMjMxLDEzIEBAIHZvaWQgQmFja2dyb3VuZEhUTUxQYXJzZXI6OnB1bXBU
b2tlbml6ZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBPd25QdHI8WFNTSW5mbz4geHNzSW5m
byA9IG1feHNzQXVkaXRvci0+ZmlsdGVyVG9rZW4oRmlsdGVyVG9rZW5SZXF1ZXN0KCptX3Rva2Vu
LCBtX3NvdXJjZVRyYWNrZXIsIG1fdG9rZW5pemVyLT5zaG91bGRBbGxvd0NEQVRBKCkpKTsKICAg
ICAgICAgICAgIENvbXBhY3RIVE1MVG9rZW4gdG9rZW4obV90b2tlbi5nZXQoKSwgVGV4dFBvc2l0
aW9uKG1faW5wdXQuY3VycmVudCgpLmN1cnJlbnRMaW5lKCksIG1faW5wdXQuY3VycmVudCgpLmN1
cnJlbnRDb2x1bW4oKSkpOworCiAgICAgICAgICAgICBpZiAoeHNzSW5mbykKICAgICAgICAgICAg
ICAgICB0b2tlbi5zZXRYU1NJbmZvKHhzc0luZm8ucmVsZWFzZSgpKTsKKworICAgICAgICAgICAg
aWYgKG1fcHJlbG9hZFNjYW5uZXIpCisgICAgICAgICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci0+
c2Nhbih0b2tlbiwgbV9wZW5kaW5nUHJlbG9hZHMpOworCiAgICAgICAgICAgICBtX3BlbmRpbmdU
b2tlbnMtPmFwcGVuZCh0b2tlbik7CiAgICAgICAgIH0KIApAQCAtMjQ0LDEwICsyNTcsMTIgQEAg
dm9pZCBCYWNrZ3JvdW5kSFRNTFBhcnNlcjo6c2VuZFRva2Vuc1RvTWFpblRocmVhZCgpCiAKICNp
Zm5kZWYgTkRFQlVHCiAgICAgY2hlY2tUaGF0VG9rZW5zQXJlU2FmZVRvU2VuZFRvQW5vdGhlclRo
cmVhZChtX3BlbmRpbmdUb2tlbnMuZ2V0KCkpOworICAgIGNoZWNrVGhhdFByZWxvYWRzQXJlU2Fm
ZVRvU2VuZFRvQW5vdGhlclRocmVhZChtX3BlbmRpbmdQcmVsb2Fkcyk7CiAjZW5kaWYKIAogICAg
IE93blB0cjxIVE1MRG9jdW1lbnRQYXJzZXI6OlBhcnNlZENodW5rPiBjaHVuayA9IGFkb3B0UHRy
KG5ldyBIVE1MRG9jdW1lbnRQYXJzZXI6OlBhcnNlZENodW5rKTsKICAgICBjaHVuay0+dG9rZW5z
ID0gbV9wZW5kaW5nVG9rZW5zLnJlbGVhc2UoKTsKKyAgICBjaHVuay0+cHJlbG9hZHMuc3dhcCht
X3BlbmRpbmdQcmVsb2Fkcyk7CiAgICAgY2h1bmstPmNoZWNrcG9pbnQgPSBtX2lucHV0LmNyZWF0
ZUNoZWNrcG9pbnQoKTsKICAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJkhUTUxEb2N1bWVudFBh
cnNlcjo6ZGlkUmVjZWl2ZVBhcnNlZENodW5rRnJvbUJhY2tncm91bmRQYXJzZXIsIG1fcGFyc2Vy
LCBjaHVuay5yZWxlYXNlKCkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvQmFja2dyb3VuZEhUTUxQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0JhY2tncm91bmRIVE1MUGFyc2VyLmgKaW5kZXggN2EwMTE0OGM4YWQ3YmYxODA3YmQ0YzI1NDQ1
NDgyNjk1ZTYxZTllMy4uOGM5ZTgwNThkNTI1ZjM1YzBjOTQ5N2QwYTYxMzEyOGI2YTY4NmIyNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQmFja2dyb3VuZEhUTUxQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9CYWNrZ3JvdW5kSFRNTFBhcnNl
ci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQmFja2dyb3VuZEhUTUxJbnB1dFN0cmVh
bS5oIgogI2luY2x1ZGUgIkNvbXBhY3RIVE1MVG9rZW4uaCIKICNpbmNsdWRlICJIVE1MUGFyc2Vy
T3B0aW9ucy5oIgorI2luY2x1ZGUgIkhUTUxQcmVsb2FkU2Nhbm5lci5oIgogI2luY2x1ZGUgIkhU
TUxTb3VyY2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuLmgiCiAjaW5jbHVkZSAiSFRN
TFRva2VuaXplci5oIgpAQCAtNDgsOSArNDksMTYgQEAgY2xhc3MgWFNTQXVkaXRvcjsKIGNsYXNz
IEJhY2tncm91bmRIVE1MUGFyc2VyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBjcmVhdGUoUGFzc1JlZlB0cjxXZWFrUmVmZXJlbmNlPEJh
Y2tncm91bmRIVE1MUGFyc2VyPiA+IHJlZmVyZW5jZSwgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMm
IG9wdGlvbnMsIGNvbnN0IFdlYWtQdHI8SFRNTERvY3VtZW50UGFyc2VyPiYgcGFyc2VyLCBQYXNz
T3duUHRyPFhTU0F1ZGl0b3I+IHhzc0F1ZGl0b3IpCisgICAgc3RydWN0IENvbmZpZ3VyYXRpb24g
eworICAgICAgICBIVE1MUGFyc2VyT3B0aW9ucyBvcHRpb25zOworICAgICAgICBXZWFrUHRyPEhU
TUxEb2N1bWVudFBhcnNlcj4gcGFyc2VyOworICAgICAgICBPd25QdHI8WFNTQXVkaXRvcj4geHNz
QXVkaXRvcjsKKyAgICAgICAgT3duUHRyPFRva2VuUHJlbG9hZFNjYW5uZXI+IHByZWxvYWRTY2Fu
bmVyOworICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBjcmVhdGUoUGFzc1JlZlB0cjxXZWFrUmVm
ZXJlbmNlPEJhY2tncm91bmRIVE1MUGFyc2VyPiA+IHJlZmVyZW5jZSwgUGFzc093blB0cjxDb25m
aWd1cmF0aW9uPiBjb25maWcpCiAgICAgewotICAgICAgICBuZXcgQmFja2dyb3VuZEhUTUxQYXJz
ZXIocmVmZXJlbmNlLCBvcHRpb25zLCBwYXJzZXIsIHhzc0F1ZGl0b3IpOworICAgICAgICBuZXcg
QmFja2dyb3VuZEhUTUxQYXJzZXIocmVmZXJlbmNlLCBjb25maWcpOwogICAgICAgICAvLyBDYWxs
ZXIgbXVzdCBmcmVlIGJ5IGNhbGxpbmcgc3RvcCgpLgogICAgIH0KIApAQCAtNzYsNyArODQsNyBA
QCBwcml2YXRlOgogICAgICAgICBNYXRoTUwKICAgICB9OwogCi0gICAgQmFja2dyb3VuZEhUTUxQ
YXJzZXIoUGFzc1JlZlB0cjxXZWFrUmVmZXJlbmNlPEJhY2tncm91bmRIVE1MUGFyc2VyPiA+LCBj
b25zdCBIVE1MUGFyc2VyT3B0aW9ucyYsIGNvbnN0IFdlYWtQdHI8SFRNTERvY3VtZW50UGFyc2Vy
PiYsIFBhc3NPd25QdHI8WFNTQXVkaXRvcj4pOworICAgIEJhY2tncm91bmRIVE1MUGFyc2VyKFBh
c3NSZWZQdHI8V2Vha1JlZmVyZW5jZTxCYWNrZ3JvdW5kSFRNTFBhcnNlcj4gPiwgUGFzc093blB0
cjxDb25maWd1cmF0aW9uPik7CiAKICAgICB2b2lkIG1hcmtFbmRPZkZpbGUoKTsKICAgICB2b2lk
IHB1bXBUb2tlbml6ZXIoKTsKQEAgLTkzLDggKzEwMSwxMiBAQCBwcml2YXRlOgogICAgIE93blB0
cjxIVE1MVG9rZW5pemVyPiBtX3Rva2VuaXplcjsKICAgICBIVE1MUGFyc2VyT3B0aW9ucyBtX29w
dGlvbnM7CiAgICAgV2Vha1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+IG1fcGFyc2VyOworCiAgICAg
T3duUHRyPENvbXBhY3RIVE1MVG9rZW5TdHJlYW0+IG1fcGVuZGluZ1Rva2VuczsKKyAgICBQcmVs
b2FkUmVxdWVzdFN0cmVhbSBtX3BlbmRpbmdQcmVsb2FkczsKKwogICAgIE93blB0cjxYU1NBdWRp
dG9yPiBtX3hzc0F1ZGl0b3I7CisgICAgT3duUHRyPFRva2VuUHJlbG9hZFNjYW5uZXI+IG1fcHJl
bG9hZFNjYW5uZXI7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9D
U1NQcmVsb2FkU2Nhbm5lci5jcHAKaW5kZXggY2Y5YmMyNDk0NGNjOTY5Y2Q3NGI3NmNiNjliOWVh
NDU0M2YxOThlMS4uMGM2NmZjMWFjOWZmYTY0OWY1M2JkMTg0MzQ2M2FiMjZlNDJmZGU1MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcApA
QCAtNTEsNyArNTEsNyBAQCB2b2lkIENTU1ByZWxvYWRTY2FubmVyOjpyZXNldCgpCiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENoYXI+Ci12b2lkIENTU1ByZWxvYWRTY2FubmVyOjpzY2FuQ29tbW9u
KGNvbnN0IENoYXIqIGJlZ2luLCBjb25zdCBDaGFyKiBlbmQsIFZlY3RvcjxPd25QdHI8UHJlbG9h
ZFJlcXVlc3Q+ID4mIHJlcXVlc3RzKQordm9pZCBDU1NQcmVsb2FkU2Nhbm5lcjo6c2NhbkNvbW1v
bihjb25zdCBDaGFyKiBiZWdpbiwgY29uc3QgQ2hhciogZW5kLCBQcmVsb2FkUmVxdWVzdFN0cmVh
bSYgcmVxdWVzdHMpCiB7CiAgICAgbV9yZXF1ZXN0cyA9ICZyZXF1ZXN0czsKICAgICBmb3IgKGNv
bnN0IENoYXIqIGl0ID0gYmVnaW47IGl0ICE9IGVuZCAmJiBtX3N0YXRlICE9IERvbmVQYXJzaW5n
SW1wb3J0UnVsZXM7ICsraXQpCkBAIC01OSwxMiArNTksMTIgQEAgdm9pZCBDU1NQcmVsb2FkU2Nh
bm5lcjo6c2NhbkNvbW1vbihjb25zdCBDaGFyKiBiZWdpbiwgY29uc3QgQ2hhciogZW5kLCBWZWN0
b3I8T3cKICAgICBtX3JlcXVlc3RzID0gMDsKIH0KIAotdm9pZCBDU1NQcmVsb2FkU2Nhbm5lcjo6
c2Nhbihjb25zdCBIVE1MVG9rZW46OkRhdGFWZWN0b3ImIGRhdGEsIFZlY3RvcjxPd25QdHI8UHJl
bG9hZFJlcXVlc3Q+ID4mIHJlcXVlc3RzKQordm9pZCBDU1NQcmVsb2FkU2Nhbm5lcjo6c2Nhbihj
b25zdCBIVE1MVG9rZW46OkRhdGFWZWN0b3ImIGRhdGEsIFByZWxvYWRSZXF1ZXN0U3RyZWFtJiBy
ZXF1ZXN0cykKIHsKICAgICBzY2FuQ29tbW9uKGRhdGEuZGF0YSgpLCBkYXRhLmRhdGEoKSArIGRh
dGEuc2l6ZSgpLCByZXF1ZXN0cyk7CiB9CiAKLXZvaWQgQ1NTUHJlbG9hZFNjYW5uZXI6OnNjYW4o
Y29uc3QgU3RyaW5nJiBkYXRhLCBWZWN0b3I8T3duUHRyPFByZWxvYWRSZXF1ZXN0PiA+JiByZXF1
ZXN0cykKK3ZvaWQgQ1NTUHJlbG9hZFNjYW5uZXI6OnNjYW4oY29uc3QgU3RyaW5nJiBkYXRhLCBQ
cmVsb2FkUmVxdWVzdFN0cmVhbSYgcmVxdWVzdHMpCiB7CiAgICAgaWYgKGRhdGEuaXM4Qml0KCkp
IHsKICAgICAgICAgY29uc3QgTENoYXIqIGJlZ2luID0gZGF0YS5jaGFyYWN0ZXJzOCgpOwpAQCAt
MjEzLDggKzIxMyw3IEBAIHZvaWQgQ1NTUHJlbG9hZFNjYW5uZXI6OmVtaXRSdWxlKCkKICAgICAg
ICAgU3RyaW5nIHVybCA9IHBhcnNlQ1NTU3RyaW5nT3JVUkwobV9ydWxlVmFsdWUuY2hhcmFjdGVy
cygpLCBtX3J1bGVWYWx1ZS5sZW5ndGgoKSk7CiAgICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgS1VSTCBiYXNlRWxlbWVudFVSTDsgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIHBhc3NlZCBpbiBmcm9tIHRoZSBIVE1MUHJlbG9hZFNjYW5lciB2aWEgc2NhbigpIQotICAg
ICAgICAgICAgT3duUHRyPFByZWxvYWRSZXF1ZXN0PiByZXF1ZXN0ID0gUHJlbG9hZFJlcXVlc3Q6
OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICBjYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3Jz
KCkuY3NzLCB1cmwsIGJhc2VFbGVtZW50VVJMLCBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVl
dCk7CisgICAgICAgICAgICBPd25QdHI8UHJlbG9hZFJlcXVlc3Q+IHJlcXVlc3QgPSBQcmVsb2Fk
UmVxdWVzdDo6Y3JlYXRlKCJjc3MiLCB1cmwsIGJhc2VFbGVtZW50VVJMLCBDYWNoZWRSZXNvdXJj
ZTo6Q1NTU3R5bGVTaGVldCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUg
aW5jbHVkaW5nIHRoZSBjaGFyc2V0IGluIHRoZSBwcmVsb2FkIHJlcXVlc3Q/CiAgICAgICAgICAg
ICBtX3JlcXVlc3RzLT5hcHBlbmQocmVxdWVzdC5yZWxlYXNlKCkpOwogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaAppbmRleCA2Y2I2
NmZhNzc5MmFjODMxZjNkOGRjNDYyMjdmOThlODYxZDc3YTJkLi40YjY5YmMzMjM1NmI0YzIxODEz
M2ZiMTNkY2E0MjEwZmIzYjZmNmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0NTU1ByZWxvYWRTY2FubmVyLmgKQEAgLTQxLDggKzQxLDggQEAgcHVibGljOgogCiAgICAgdm9p
ZCByZXNldCgpOwogCi0gICAgdm9pZCBzY2FuKGNvbnN0IEhUTUxUb2tlbjo6RGF0YVZlY3RvciYs
IFZlY3RvcjxPd25QdHI8UHJlbG9hZFJlcXVlc3Q+ID4mKTsKLSAgICB2b2lkIHNjYW4oY29uc3Qg
U3RyaW5nJiwgVmVjdG9yPE93blB0cjxQcmVsb2FkUmVxdWVzdD4gPiYpOworICAgIHZvaWQgc2Nh
bihjb25zdCBIVE1MVG9rZW46OkRhdGFWZWN0b3ImLCBQcmVsb2FkUmVxdWVzdFN0cmVhbSYpOwor
ICAgIHZvaWQgc2Nhbihjb25zdCBTdHJpbmcmLCBQcmVsb2FkUmVxdWVzdFN0cmVhbSYpOwogCiBw
cml2YXRlOgogICAgIGVudW0gU3RhdGUgewpAQCAtNTksNyArNTksNyBAQCBwcml2YXRlOgogICAg
IH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyPgotICAgIHZvaWQgc2NhbkNvbW1vbihj
b25zdCBDaGFyKiBiZWdpbiwgY29uc3QgQ2hhciogZW5kLCBWZWN0b3I8T3duUHRyPFByZWxvYWRS
ZXF1ZXN0PiA+Jik7CisgICAgdm9pZCBzY2FuQ29tbW9uKGNvbnN0IENoYXIqIGJlZ2luLCBjb25z
dCBDaGFyKiBlbmQsIFByZWxvYWRSZXF1ZXN0U3RyZWFtJik7CiAKICAgICBpbmxpbmUgdm9pZCB0
b2tlbml6ZShVQ2hhcik7CiAgICAgdm9pZCBlbWl0UnVsZSgpOwpAQCAtNjksNyArNjksNyBAQCBw
cml2YXRlOgogICAgIFN0cmluZ0J1aWxkZXIgbV9ydWxlVmFsdWU7CiAKICAgICAvLyBPbmx5IG5v
bi16ZXJvIGR1cmluZyBzY2FuKCkKLSAgICBWZWN0b3I8T3duUHRyPFByZWxvYWRSZXF1ZXN0PiA+
KiBtX3JlcXVlc3RzOworICAgIFByZWxvYWRSZXF1ZXN0U3RyZWFtKiBtX3JlcXVlc3RzOwogfTsK
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50
UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNl
ci5jcHAKaW5kZXggNDg1YjA2YzcwMmUwNDY2ZWY1OTMwMDNmNTE2MjQ5YWU2ZDdjMzI4Yi4uMTNl
MTlhNGZlMzM0ZDYwMzk4OGExNmNjMGFjZTZhMGQyOWIzM2VkMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC0yODYsMTAgKzI4
NiwxMiBAQCBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6Y2FuVGFrZU5leHRUb2tlbihTeW5jaHJv
bm91c01vZGUgbW9kZSwgUHVtcFNlc3Npb24mIHNlcwogdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6
OmRpZFJlY2VpdmVQYXJzZWRDaHVua0Zyb21CYWNrZ3JvdW5kUGFyc2VyKFBhc3NPd25QdHI8UGFy
c2VkQ2h1bms+IGNodW5rKQogewogICAgIGlmIChpc1dhaXRpbmdGb3JTY3JpcHRzKCkpIHsKKyAg
ICAgICAgbV9wcmVsb2FkZXItPnRha2VBbmRQcmVsb2FkKGNodW5rLT5wcmVsb2Fkcyk7CiAgICAg
ICAgIG1fc3BlY3VsYXRpb25zLmFwcGVuZChjaHVuayk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgQVNTRVJUKG1fc3BlY3VsYXRpb25zLmlzRW1wdHkoKSk7CisgICAgY2h1bmstPnByZWxv
YWRzLmNsZWFyKCk7IC8vIFdlIGRvbid0IG5lZWQgdG8gcHJlbG9hZCBiZWNhdXNlIHdlJ3JlIGdv
aW5nIHRvIHBhcnNlIGltbWVkaWF0ZWx5LgogICAgIHByb2Nlc3NQYXJzZWRDaHVua0Zyb21CYWNr
Z3JvdW5kUGFyc2VyKGNodW5rKTsKIH0KIApAQCAtNTU1LDExICs1NTcsMTYgQEAgdm9pZCBIVE1M
RG9jdW1lbnRQYXJzZXI6OnN0YXJ0QmFja2dyb3VuZFBhcnNlcigpCiAgICAgUmVmUHRyPFdlYWtS
ZWZlcmVuY2U8QmFja2dyb3VuZEhUTUxQYXJzZXI+ID4gcmVmZXJlbmNlID0gV2Vha1JlZmVyZW5j
ZTxCYWNrZ3JvdW5kSFRNTFBhcnNlcj46OmNyZWF0ZVVuYm91bmQoKTsKICAgICBtX2JhY2tncm91
bmRQYXJzZXIgPSBXZWFrUHRyPEJhY2tncm91bmRIVE1MUGFyc2VyPihyZWZlcmVuY2UpOwogCi0g
ICAgV2Vha1B0cjxIVE1MRG9jdW1lbnRQYXJzZXI+IHBhcnNlciA9IG1fd2Vha0ZhY3RvcnkuY3Jl
YXRlV2Vha1B0cigpOwotICAgIE93blB0cjxYU1NBdWRpdG9yPiB4c3NBdWRpdG9yID0gYWRvcHRQ
dHIobmV3IFhTU0F1ZGl0b3IpOwotICAgIHhzc0F1ZGl0b3ItPmluaXQoZG9jdW1lbnQoKSk7Ci0g
ICAgQVNTRVJUKHhzc0F1ZGl0b3ItPmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpKTsKLSAg
ICBIVE1MUGFyc2VyVGhyZWFkOjpzaGFyZWQoKS0+cG9zdFRhc2soYmluZCgmQmFja2dyb3VuZEhU
TUxQYXJzZXI6OmNyZWF0ZSwgcmVmZXJlbmNlLnJlbGVhc2UoKSwgbV9vcHRpb25zLCBwYXJzZXIs
IHhzc0F1ZGl0b3IucmVsZWFzZSgpKSk7CisgICAgT3duUHRyPEJhY2tncm91bmRIVE1MUGFyc2Vy
OjpDb25maWd1cmF0aW9uPiBjb25maWcgPSBhZG9wdFB0cihuZXcgQmFja2dyb3VuZEhUTUxQYXJz
ZXI6OkNvbmZpZ3VyYXRpb24pOworICAgIGNvbmZpZy0+b3B0aW9ucyA9IG1fb3B0aW9uczsKKyAg
ICBjb25maWctPnBhcnNlciA9IG1fd2Vha0ZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOworICAgIGNv
bmZpZy0+eHNzQXVkaXRvciA9IGFkb3B0UHRyKG5ldyBYU1NBdWRpdG9yKTsKKyAgICBjb25maWct
Pnhzc0F1ZGl0b3ItPmluaXQoZG9jdW1lbnQoKSk7CisgICAgY29uZmlnLT5wcmVsb2FkU2Nhbm5l
ciA9IGFkb3B0UHRyKG5ldyBUb2tlblByZWxvYWRTY2FubmVyKGRvY3VtZW50KCktPnVybCgpLmNv
cHkoKSkpOworCisgICAgQVNTRVJUKGNvbmZpZy0+eHNzQXVkaXRvci0+aXNTYWZlVG9TZW5kVG9B
bm90aGVyVGhyZWFkKCkpOworICAgIEFTU0VSVChjb25maWctPnByZWxvYWRTY2FubmVyLT5pc1Nh
ZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSk7CisgICAgSFRNTFBhcnNlclRocmVhZDo6c2hhcmVk
KCktPnBvc3RUYXNrKGJpbmQoJkJhY2tncm91bmRIVE1MUGFyc2VyOjpjcmVhdGUsIHJlZmVyZW5j
ZS5yZWxlYXNlKCksIGNvbmZpZy5yZWxlYXNlKCkpKTsKIH0KIAogdm9pZCBIVE1MRG9jdW1lbnRQ
YXJzZXI6OnN0b3BCYWNrZ3JvdW5kUGFyc2VyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKaW5kZXggNzQyODliYjZiNzUwMWM1YTkyNmYyNTky
MjIyNGVhMjI0ZWVjMjUyZi4uZDFjNDY0ZWFlOTY5MDZkNmM1Zjk3ZGU0ZTIxYTEwMDkzMTVmNDc2
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFy
c2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2Vy
LmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Np
b24uaCIKICNpbmNsdWRlICJIVE1MSW5wdXRTdHJlYW0uaCIKICNpbmNsdWRlICJIVE1MUGFyc2Vy
T3B0aW9ucy5oIgorI2luY2x1ZGUgIkhUTUxQcmVsb2FkU2Nhbm5lci5oIgogI2luY2x1ZGUgIkhU
TUxTY3JpcHRSdW5uZXJIb3N0LmgiCiAjaW5jbHVkZSAiSFRNTFNvdXJjZVRyYWNrZXIuaCIKICNp
bmNsdWRlICJIVE1MVG9rZW4uaCIKQEAgLTU2LDcgKzU3LDYgQEAgY2xhc3MgSFRNTFBhcnNlclNj
aGVkdWxlcjsKIGNsYXNzIEhUTUxUb2tlbml6ZXI7CiBjbGFzcyBIVE1MU2NyaXB0UnVubmVyOwog
Y2xhc3MgSFRNTFRyZWVCdWlsZGVyOwotY2xhc3MgSFRNTFByZWxvYWRTY2FubmVyOwogY2xhc3Mg
SFRNTFJlc291cmNlUHJlbG9hZGVyOwogY2xhc3MgU2NyaXB0Q29udHJvbGxlcjsKIGNsYXNzIFNj
cmlwdFNvdXJjZUNvZGU7CkBAIC04OCw2ICs4OCw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoVEhS
RUFERURfSFRNTF9QQVJTRVIpCiAgICAgc3RydWN0IFBhcnNlZENodW5rIHsKICAgICAgICAgT3du
UHRyPENvbXBhY3RIVE1MVG9rZW5TdHJlYW0+IHRva2VuczsKKyAgICAgICAgUHJlbG9hZFJlcXVl
c3RTdHJlYW0gcHJlbG9hZHM7CiAgICAgICAgIEhUTUxJbnB1dENoZWNrcG9pbnQgY2hlY2twb2lu
dDsKICAgICB9OwogICAgIHZvaWQgZGlkUmVjZWl2ZVBhcnNlZENodW5rRnJvbUJhY2tncm91bmRQ
YXJzZXIoUGFzc093blB0cjxQYXJzZWRDaHVuaz4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlck9wdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxQYXJzZXJPcHRpb25zLmgKaW5kZXggMTI1ZjNlN2NhOTY4YjMzMWE5YzczNDBl
YmFmZjMyOGUxNGI0NGQ2MC4uNDY5YmUwMWRkNDQwYjdkMWQ5Y2MzMGViYmIyZTY5YzUwNjgzMjQw
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlck9wdGlv
bnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VyT3B0aW9ucy5o
CkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBib29sIHVzZVRocmVhZGluZzsKICAgICB1
bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoOwogCi0gICAgZXhwbGljaXQgSFRNTFBhcnNlck9w
dGlvbnMoRG9jdW1lbnQqKTsKKyAgICBleHBsaWNpdCBIVE1MUGFyc2VyT3B0aW9ucyhEb2N1bWVu
dCogPSAwKTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
UHJlbG9hZFNjYW5uZXIuY3BwCmluZGV4IDAxNjBlNWY5MTY4YTg5YjIxYTRiYmEyZWY0OGRlYmI0
N2Q1YTc3MmQuLjgzZDAzN2RjMmQwMTE1OTk3OTZmYWIwZGIxNTIwZWRkYjQ1MzNhNWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcApA
QCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQgVG9rZW5QcmVsb2FkU2Nhbm5lcjo6dXBkYXRlUHJlZGlj
dGVkQmFzZVVSTChjb25zdCBIVE1MVG9rZW4mIHRva2VuKQogdm9pZCBUb2tlblByZWxvYWRTY2Fu
bmVyOjp1cGRhdGVQcmVkaWN0ZWRCYXNlVVJMKGNvbnN0IENvbXBhY3RIVE1MVG9rZW4mIHRva2Vu
KQogewogICAgIEFTU0VSVChtX3ByZWRpY3RlZEJhc2VFbGVtZW50VVJMLmlzRW1wdHkoKSk7Ci0g
ICAgbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVSTCA9IEtVUkwobV9kb2N1bWVudFVSTCwgc3RyaXBM
ZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHRva2VuLmdldEF0dHJpYnV0ZUl0ZW0oaHJlZkF0
dHIpLT52YWx1ZSgpKSk7CisgICAgbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVSTCA9IEtVUkwobV9k
b2N1bWVudFVSTCwgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHRva2VuLmdldEF0
dHJpYnV0ZUl0ZW0oaHJlZkF0dHIpLT52YWx1ZSgpKSkuY29weSgpOwogfQogI2VuZGlmCiAKQEAg
LTM4MSwxNSArMzgxLDE2IEBAIHZvaWQgSFRNTFByZWxvYWRTY2FubmVyOjpzY2FuKEhUTUxSZXNv
dXJjZVByZWxvYWRlciogcHJlbG9hZGVyLCBjb25zdCBLVVJMJiBzdGFyCiAgICAgaWYgKCFzdGFy
dGluZ0Jhc2VFbGVtZW50VVJMLmlzRW1wdHkoKSkKICAgICAgICAgbV9zY2FubmVyLnNldFByZWRp
Y3RlZEJhc2VFbGVtZW50VVJMKHN0YXJ0aW5nQmFzZUVsZW1lbnRVUkwpOwogCi0gICAgVmVjdG9y
PE93blB0cjxQcmVsb2FkUmVxdWVzdD4gPiByZXF1ZXN0czsKKyAgICBQcmVsb2FkUmVxdWVzdFN0
cmVhbSByZXF1ZXN0czsKKwogICAgIHdoaWxlIChtX3Rva2VuaXplci0+bmV4dFRva2VuKG1fc291
cmNlLCBtX3Rva2VuKSkgewogICAgICAgICBpZiAobV90b2tlbi50eXBlKCkgPT0gSFRNTFRva2Vu
OjpTdGFydFRhZykKICAgICAgICAgICAgIG1fdG9rZW5pemVyLT51cGRhdGVTdGF0ZUZvcihBdG9t
aWNTdHJpbmcobV90b2tlbi5uYW1lKCkpKTsKICAgICAgICAgbV9zY2FubmVyLnNjYW4obV90b2tl
biwgcmVxdWVzdHMpOwogICAgICAgICBtX3Rva2VuLmNsZWFyKCk7CiAgICAgfQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcmVxdWVzdHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHByZWxvYWRl
ci0+cHJlbG9hZChyZXF1ZXN0c1tpXS5yZWxlYXNlKCkpOworCisgICAgcHJlbG9hZGVyLT50YWtl
QW5kUHJlbG9hZChyZXF1ZXN0cyk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmgKaW5kZXggYjc0Yjk2MWY5YjNjYjgzZDc1YWEzNjg3
MmE3N2NkOTk2ZDM3MDI1MC4uM2Q4ZWVlNTFhOTk5MTkzMjQ1MTczOWZhOTJmZDE0MDZjYmMzM2Q3
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2Fu
bmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVy
LmgKQEAgLTQ0LDEzICs0NCwxOSBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgVG9rZW5QcmVsb2Fk
U2Nhbm5lcihjb25zdCBLVVJMJiBkb2N1bWVudFVSTCk7CiAgICAgflRva2VuUHJlbG9hZFNjYW5u
ZXIoKTsKIAotICAgIHZvaWQgc2Nhbihjb25zdCBIVE1MVG9rZW4mLCBWZWN0b3I8T3duUHRyPFBy
ZWxvYWRSZXF1ZXN0PiA+JiByZXF1ZXN0cyk7CisgICAgdm9pZCBzY2FuKGNvbnN0IEhUTUxUb2tl
biYsIFByZWxvYWRSZXF1ZXN0U3RyZWFtJiByZXF1ZXN0cyk7CiAjaWYgRU5BQkxFKFRIUkVBREVE
X0hUTUxfUEFSU0VSKQotICAgIHZvaWQgc2Nhbihjb25zdCBDb21wYWN0SFRNTFRva2VuJiwgVmVj
dG9yPE93blB0cjxQcmVsb2FkUmVxdWVzdD4gPiYgcmVxdWVzdHMpOworICAgIHZvaWQgc2Nhbihj
b25zdCBDb21wYWN0SFRNTFRva2VuJiwgUHJlbG9hZFJlcXVlc3RTdHJlYW0mIHJlcXVlc3RzKTsK
ICNlbmRpZgogCiAgICAgdm9pZCBzZXRQcmVkaWN0ZWRCYXNlRWxlbWVudFVSTChjb25zdCBLVVJM
JiB1cmwpIHsgbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVSTCA9IHVybDsgfQogCisgICAgYm9vbCBp
c1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZG9j
dW1lbnRVUkwuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkKKyAgICAgICAgICAgICYmIG1f
cHJlZGljdGVkQmFzZUVsZW1lbnRVUkwuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCk7Cisg
ICAgfQorCiBwcml2YXRlOgogICAgIGVudW0gVGFnSWQgewogICAgICAgICAvLyBUaGVzZSB0YWdz
IGFyZSBzY2FubmVkIGJ5IHRoZSBTdGFydFRhZ1NjYW5uZXIuCkBAIC02OSw3ICs3NSw3IEBAIHBy
aXZhdGU6CiAgICAgY2xhc3MgU3RhcnRUYWdTY2FubmVyOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVG9rZW4+Ci0gICAgaW5saW5lIHZvaWQgc2NhbkNvbW1vbihjb25zdCBUb2tlbiYsIFZlY3Rv
cjxPd25QdHI8UHJlbG9hZFJlcXVlc3Q+ID4mIHJlcXVlc3RzKTsKKyAgICBpbmxpbmUgdm9pZCBz
Y2FuQ29tbW9uKGNvbnN0IFRva2VuJiwgUHJlbG9hZFJlcXVlc3RTdHJlYW0mIHJlcXVlc3RzKTsK
IAogICAgIHN0YXRpYyBUYWdJZCB0YWdJZEZvcihjb25zdCBIVE1MVG9rZW46OkRhdGFWZWN0b3Im
KTsKICAgICBzdGF0aWMgVGFnSWQgdGFnSWRGb3IoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcAppbmRl
eCA3NzBmZjBlMzlmZmY2NjlkNzc3ZGY1Mzk3ZjkwZmY3MWFmYzAzYzk1Li5mYTVhZGZiZTY5MDM2
M2RjZjZiNTlhMDMyMDdmMTQ1YjI1NDA5ZjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAKQEAgLTU2LDYgKzU2LDE1IEBA
IENhY2hlZFJlc291cmNlUmVxdWVzdCBQcmVsb2FkUmVxdWVzdDo6cmVzb3VyY2VSZXF1ZXN0KERv
Y3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIAordm9pZCBIVE1MUmVz
b3VyY2VQcmVsb2FkZXI6OnRha2VBbmRQcmVsb2FkKFByZWxvYWRSZXF1ZXN0U3RyZWFtJiByKQor
eworICAgIFByZWxvYWRSZXF1ZXN0U3RyZWFtIHJlcXVlc3RzOworICAgIHJlcXVlc3RzLnN3YXAo
cik7CisKKyAgICBmb3IgKFByZWxvYWRSZXF1ZXN0U3RyZWFtOjppdGVyYXRvciBpdCA9IHJlcXVl
c3RzLmJlZ2luKCk7IGl0ICE9IHJlcXVlc3RzLmVuZCgpOyArK2l0KQorICAgICAgICBwcmVsb2Fk
KGl0LT5yZWxlYXNlKCkpOworfQorCiB2b2lkIEhUTUxSZXNvdXJjZVByZWxvYWRlcjo6cHJlbG9h
ZChQYXNzT3duUHRyPFByZWxvYWRSZXF1ZXN0PiBwcmVsb2FkKQogewogICAgIENhY2hlZFJlc291
cmNlUmVxdWVzdCByZXF1ZXN0ID0gcHJlbG9hZC0+cmVzb3VyY2VSZXF1ZXN0KG1fZG9jdW1lbnQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJl
bG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2Fk
ZXIuaAppbmRleCBkZDQ1MjNlY2JkZjA0N2U4MTgxYThlNGM5MmVlZDc4ZDNjNTQ3NDI2Li5iOWYy
MjFmY2I0OGEzODE0ZDYyMmM1ODI0N2IzZjRmMWI5ZjQ1YzcwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuaApAQCAtNTAsOCArNTAs
OCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFByZWxvYWRSZXF1ZXN0KGNvbnN0IFN0cmluZyYg
aW5pdGlhdG9yLCBjb25zdCBTdHJpbmcmIHJlc291cmNlVVJMLCBjb25zdCBLVVJMJiBiYXNlVVJM
LCBDYWNoZWRSZXNvdXJjZTo6VHlwZSByZXNvdXJjZVR5cGUpCiAgICAgICAgIDogbV9pbml0aWF0
b3IoaW5pdGlhdG9yKQotICAgICAgICAsIG1fcmVzb3VyY2VVUkwocmVzb3VyY2VVUkwpCi0gICAg
ICAgICwgbV9iYXNlVVJMKGJhc2VVUkwpCisgICAgICAgICwgbV9yZXNvdXJjZVVSTChyZXNvdXJj
ZVVSTC5pc29sYXRlZENvcHkoKSkKKyAgICAgICAgLCBtX2Jhc2VVUkwoYmFzZVVSTC5jb3B5KCkp
CiAgICAgICAgICwgbV9yZXNvdXJjZVR5cGUocmVzb3VyY2VUeXBlKQogICAgICAgICAsIG1fY3Jv
c3NPcmlnaW5Nb2RlQWxsb3dzQ29va2llcyhmYWxzZSkKICAgICB7CkBAIC02Nyw2ICs2Nyw4IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2Nyb3NzT3JpZ2luTW9kZUFsbG93c0Nvb2tpZXM7CiB9Owog
Cit0eXBlZGVmIFZlY3RvcjxPd25QdHI8UHJlbG9hZFJlcXVlc3Q+ID4gUHJlbG9hZFJlcXVlc3RT
dHJlYW07CisKIGNsYXNzIEhUTUxSZXNvdXJjZVByZWxvYWRlciB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoSFRNTFJlc291cmNlUHJlbG9hZGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CkBAIC03Niw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAg
dm9pZCB0YWtlQW5kUHJlbG9hZChQcmVsb2FkUmVxdWVzdFN0cmVhbSYpOwogICAgIHZvaWQgcHJl
bG9hZChQYXNzT3duUHRyPFByZWxvYWRSZXF1ZXN0Pik7CiAKICAgICBXZWFrUHRyPEhUTUxSZXNv
dXJjZVByZWxvYWRlcj4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vha0ZhY3RvcnkuY3Jl
YXRlV2Vha1B0cigpOyB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>