<?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>33731</bug_id>
          
          <creation_ts>2010-01-15 12:40:48 -0800</creation_ts>
          <short_desc>[Dupe of] Many false leaks in release builds due to PtrAndFlags</short_desc>
          <delta_ts>2010-05-07 14:15:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>levin</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>181323</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-15 12:40:48 -0800</bug_when>
    <thetext>These break the Leaks tool on OS X.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181325</commentid>
    <comment_count>1</comment_count>
      <attachid>46700</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-15 12:47:01 -0800</bug_when>
    <thetext>Created attachment 46700
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181328</commentid>
    <comment_count>2</comment_count>
      <attachid>46702</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-15 12:49:57 -0800</bug_when>
    <thetext>Created attachment 46702
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181336</commentid>
    <comment_count>3</comment_count>
      <attachid>46704</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-15 12:54:10 -0800</bug_when>
    <thetext>Created attachment 46704
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181339</commentid>
    <comment_count>4</comment_count>
      <attachid>46700</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-01-15 12:58:58 -0800</bug_when>
    <thetext>Comment on attachment 46700
The patch

r-, i think 
cachedPrototypeStructure = (Structure*)1
 should be

static const Structure* seenFlag = (Structure*)1;

cachedPrototypeStructure = seenFlag

(with a better name for seenFlag)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181341</commentid>
    <comment_count>5</comment_count>
      <attachid>46704</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-01-15 13:01:34 -0800</bug_when>
    <thetext>Comment on attachment 46704
The patch

i&apos;d like maciej&apos;s opinion on stripping a bit from the string hash</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181342</commentid>
    <comment_count>6</comment_count>
      <attachid>46700</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-01-15 13:02:24 -0800</bug_when>
    <thetext>Comment on attachment 46700
The patch

bah, use a #define, otherwise r=me :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181344</commentid>
    <comment_count>7</comment_count>
      <attachid>46704</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-01-15 13:08:18 -0800</bug_when>
    <thetext>Comment on attachment 46704
The patch

r=me assuming maciej is okay ith the hash size reduction</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181357</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-01-15 13:34:06 -0800</bug_when>
    <thetext>Duplicate of bug 32754/&lt;rdar://problem/7486511&gt;? I&apos;m not sure if anything tracks related UntypedPtrAndBitfield issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181432</commentid>
    <comment_count>9</comment_count>
      <attachid>46718</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-15 16:44:46 -0800</bug_when>
    <thetext>Created attachment 46718
New implementation for UStringImpl.

Instead, merge the bits into the ref count (ty Alexey for the suggestion!)
No perf degradation, so let&apos;s go with this.  Restore the hash to a full 32-bits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181433</commentid>
    <comment_count>10</comment_count>
      <attachid>46704</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-15 16:46:37 -0800</bug_when>
    <thetext>Comment on attachment 46704
The patch

This patch is no longer valid, since we&apos;re not going to steal bits from the hash.
Will instead probably do something like UStringImpl, stealing bits from the refCount.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181434</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-15 16:50:23 -0800</bug_when>
    <thetext>Attachment 46718 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/runtime/UStringImpl.h:66:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
JavaScriptCore/runtime/UStringImpl.h:134:  More than one command on the same line  [whitespace/newline] [4]
JavaScriptCore/runtime/UStringImpl.h:135:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181581</commentid>
    <comment_count>12</comment_count>
      <attachid>46756</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-16 19:14:31 -0800</bug_when>
    <thetext>Created attachment 46756
New WebCore::StringImpl patch

New patch for StringImpl, stealing bits from refCount instead of hash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181582</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-16 19:16:07 -0800</bug_when>
    <thetext>Attachment 46756 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/text/StringImpl.h:105:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/text/StringImpl.h:106:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/text/StringImpl.h:180:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181584</commentid>
    <comment_count>14</comment_count>
      <attachid>46756</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-16 19:28:30 -0800</bug_when>
    <thetext>Comment on attachment 46756
New WebCore::StringImpl patch

&gt; +    OwnPtr&lt;const UChar*&gt; path(fileName.copyWithNullTermination());

This needs to be OwnArrayPtr&lt;const UChar&gt;, not OwnPtr&lt;const UChar*&gt;. Because delete [] and delete without the &quot;[]&quot; are not the same thing.

&gt; +    OwnPtr&lt;const UChar*&gt; m_queryWithNullTermination;

Same here.

&gt; +    const UChar* copyWithNullTermination() const;

This should probably return PassOwnArrayPtr, not a raw pointer. Otherwise it&apos;s too easy to get the type wrong for the smart pointer (as above). Unfortunately, there is no PassOwnArrayPtr as of this writing.

Another good possibility would be to have the function take in an OwnArrayPtr&lt;const UChar&gt;&amp; and set it to point to the newly allocated buffer.

&gt; +    static const unsigned s_refCountMask = 0xfffffffe;

I personally prefer capital hex.

review+ assuming you fix the OwnArrayPtr issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181585</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-16 19:33:32 -0800</bug_when>
    <thetext>Attachment 46756 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/192656</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181742</commentid>
    <comment_count>16</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-17 22:58:02 -0800</bug_when>
    <thetext>*** Bug 32754 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181747</commentid>
    <comment_count>17</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-17 23:31:24 -0800</bug_when>
    <thetext>JIT changes landed in r53391.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181749</commentid>
    <comment_count>18</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-17 23:37:15 -0800</bug_when>
    <thetext>UStringImpl changes landed in r53392.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181816</commentid>
    <comment_count>19</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-18 04:03:41 -0800</bug_when>
    <thetext>Looks like r 53392 broke several builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181818</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-18 04:09:11 -0800</bug_when>
    <thetext>By that, I mean it caused various SVG tests to crash on the builders:
svg/custom/resource-invalidate-on-target-update.svg crashed:
http://build.webkit.org/results/Leopard%20Intel%20Release%20(Tests)/r53392%20(9472)/results.html

20 tests crashed:
http://build.webkit.org/results/Windows%20Debug%20(Tests)/r53392%20(8626)/results.html

3 svg tests crashed:
http://build.webkit.org/results/GTK%20Linux%20Release/r53393%20(7754)/results.html
svg/custom/selectSubString.html	stderr
svg/dom/SVGScriptElement/script-load-and-error-events.svg	stderr
svg/dom/SVGScriptElement/script-set-href.svg	stderr

The bot seems to think it was related to this checkin.  I recommend we roll this out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181820</commentid>
    <comment_count>21</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-18 04:12:59 -0800</bug_when>
    <thetext>The crashes went away for Leopard 3 builds later and then came back again as:

svg/custom/scrolling-embedded-svg-file-image-repaint-problem.html	stderr
http://build.webkit.org/results/Leopard%20Intel%20Release%20(Tests)/r53397%20(9477)/results.html

Looks like flakiness, very possibly related to this checkin since I&apos;ve never seen this crash before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181823</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-18 04:17:19 -0800</bug_when>
    <thetext>I&apos;m going to roll out r53392 in an effort to re-green the bots.  If it doesn&apos;t help, I&quot;m happy to roll it back in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181824</commentid>
    <comment_count>23</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-01-18 04:19:03 -0800</bug_when>
    <thetext>r53391 and r53392 rolled out by http://trac.webkit.org/changeset/53400 because of flakey crashes on Leopard, Snow Leopard, Windows, GTK, Qt bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181936</commentid>
    <comment_count>24</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-18 11:29:31 -0800</bug_when>
    <thetext>WebCore::StringImpl changes landed in r53416.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181946</commentid>
    <comment_count>25</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-18 11:45:53 -0800</bug_when>
    <thetext>WebCore changes need more work on Windows, rolling out in r53418.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182000</commentid>
    <comment_count>26</comment_count>
      <attachid>46851</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-18 14:32:11 -0800</bug_when>
    <thetext>Created attachment 46851
WebCore::StringImpl patch take 3, re-introduce String::charactersWithNullTermination() / StringImpl::hasTerminatingNullCharacter()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182006</commentid>
    <comment_count>27</comment_count>
      <attachid>46851</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-18 14:46:10 -0800</bug_when>
    <thetext>Comment on attachment 46851
WebCore::StringImpl patch take 3, re-introduce String::charactersWithNullTermination() / StringImpl::hasTerminatingNullCharacter()

Gah! no, this will result in a string&apos;s length changing when you access the null terminated form.  Nevermind, I&apos;ll go with the simple solution &amp; burn another bit. :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182016</commentid>
    <comment_count>28</comment_count>
      <attachid>46858</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-18 15:13:38 -0800</bug_when>
    <thetext>Created attachment 46858
take 4.  Simple approach, add a flag back in for HasTerminatingNullCharacter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182017</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-18 15:16:38 -0800</bug_when>
    <thetext>Attachment 46858 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/text/StringImpl.h:109:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/text/StringImpl.h:110:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/text/StringImpl.h:184:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 3


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182085</commentid>
    <comment_count>30</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-18 18:23:45 -0800</bug_when>
    <thetext>WebCore changes relanded in r53447.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182422</commentid>
    <comment_count>31</comment_count>
      <attachid>46945</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-19 13:36:47 -0800</bug_when>
    <thetext>Created attachment 46945
New UStringImpl patch, without ancillary refactoring changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182426</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-19 13:39:45 -0800</bug_when>
    <thetext>Attachment 46945 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/runtime/UStringImpl.h:131:  More than one command on the same line  [whitespace/newline] [4]
JavaScriptCore/runtime/UStringImpl.h:132:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182484</commentid>
    <comment_count>33</comment_count>
      <attachid>46945</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-19 15:32:01 -0800</bug_when>
    <thetext>Comment on attachment 46945
New UStringImpl patch, without ancillary refactoring changes.

Damn, it removed my review comments!

There weren’t any important ones. One thing I asked was whether we needed more ALWAYS_INLINE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182964</commentid>
    <comment_count>34</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-20 16:21:19 -0800</bug_when>
    <thetext>The webkit patch caused leaks - this is probably also what was causing the JSC patches as originally landed to cause tests crashes on some machines (i.e. they were causing so much leakage DRT actually ran out of memory).

So, reverted in r53575. :-(  *sniff*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187142</commentid>
    <comment_count>35</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-02 14:17:17 -0800</bug_when>
    <thetext>I&apos;m not sure which (both?) of these patches was reverted.  Something tells me this probably doesn&apos;t need to be in the http://webkit.org/pending-commit list (by having patches marked r+).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187151</commentid>
    <comment_count>36</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-02-02 14:24:43 -0800</bug_when>
    <thetext>Hey Eric,

All patches are currently reverted, but the first one I think is probably good to go – probably didn&apos;t need reverting out in the first place, so I&apos;ll leave that r+ed &amp; reland soon.

Removed the r+ from the latter two patches, am working on updated patches for these at the mo.

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187153</commentid>
    <comment_count>37</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-02 14:26:07 -0800</bug_when>
    <thetext>Thanks for the quick reply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188777</commentid>
    <comment_count>38</comment_count>
      <attachid>46702</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-08 15:10:54 -0800</bug_when>
    <thetext>Comment on attachment 46702
The patch

Cleared Oliver Hunt&apos;s review+ from obsolete attachment 46702 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188778</commentid>
    <comment_count>39</comment_count>
      <attachid>46718</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-08 15:11:02 -0800</bug_when>
    <thetext>Comment on attachment 46718
New implementation for UStringImpl.

Cleared Oliver Hunt&apos;s review+ from obsolete attachment 46718 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188779</commentid>
    <comment_count>40</comment_count>
      <attachid>46756</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-08 15:11:10 -0800</bug_when>
    <thetext>Comment on attachment 46756
New WebCore::StringImpl patch

Cleared Darin Adler&apos;s review+ from obsolete attachment 46756 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190138</commentid>
    <comment_count>41</comment_count>
      <attachid>48663</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-02-12 13:53:12 -0800</bug_when>
    <thetext>Created attachment 48663
New StringImpl patch, also fix bufferIsInternal bug that was being triggered.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190140</commentid>
    <comment_count>42</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-12 13:56:44 -0800</bug_when>
    <thetext>Attachment 48663 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/text/StringImpl.h:120:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/text/StringImpl.h:121:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/text/StringImpl.h:121:  More than one command on the same line in if  [whitespace/parens] [4]
WebCore/platform/text/StringImpl.h:195:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 4


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190141</commentid>
    <comment_count>43</comment_count>
      <attachid>48663</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-02-12 14:02:42 -0800</bug_when>
    <thetext>Comment on attachment 48663
New StringImpl patch, also fix bufferIsInternal bug that was being triggered.

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 54731)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,38 @@
&gt; +2010-02-12  Gavin Barraclough  &lt;barraclough@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=33731
&gt; +        Remove uses of PtrAndFlags from WebCore::StringImpl.
&gt; +
&gt; +        These break the OS X Leaks tool.  Move the management of null-terminated copies
&gt; +        out from StringImpl to String, and use a bits stolen from the refCount to hold the

LIES!

Please fix the change log and add the extra assert in the StringImpl destructor.

Otherwise, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190146</commentid>
    <comment_count>44</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-12 14:14:46 -0800</bug_when>
    <thetext>(In reply to comment #43)
&gt; (From update of attachment 48663 [details])
&gt; &gt; Index: WebCore/ChangeLog
&gt; &gt; ===================================================================
&gt; &gt; --- WebCore/ChangeLog	(revision 54731)
&gt; &gt; +++ WebCore/ChangeLog	(working copy)
&gt; &gt; @@ -1,3 +1,38 @@
&gt; &gt; +2010-02-12  Gavin Barraclough  &lt;barraclough@apple.com&gt;
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=33731
&gt; &gt; +        Remove uses of PtrAndFlags from WebCore::StringImpl.
&gt; &gt; +
&gt; &gt; +        These break the OS X Leaks tool.  Move the management of null-terminated copies
&gt; &gt; +        out from StringImpl to String, and use a bits stolen from the refCount to hold the
&gt; 
&gt; LIES!
&gt; 
&gt; Please fix the change log and add the extra assert in the StringImpl
&gt; destructor.
&gt; 
&gt; Otherwise, r=me.

Well, I started reviewing it, but Sam was faster than me. Thanks for doing this (and sorry for breaking leaks).

Something to consider:
&gt; +    static const unsigned s_refCountMask = 0xFFFFFFF0;
What about 
 static const unsigned s_refCountMask = UINT_MAX &amp; ~(s_refCountIncrement - 1)
or just
 static const unsigned s_refCountMask = ~(s_refCountIncrement - 1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190149</commentid>
    <comment_count>45</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-02-12 14:23:45 -0800</bug_when>
    <thetext>New webcore::stringimpl patch landed in r54736.

/me crosses fingers, toes, noses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190196</commentid>
    <comment_count>46</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-02-12 16:00:56 -0800</bug_when>
    <thetext>Landed my previous UStringImpl patch in r54743.

This was r+ from Darin before I marked r-, while debugging an apparent leak.  The leak seems to be well understood now, it seems these patches change UStringImpl / StringImpl objects to be 32 bytes instead of 40, and this in turn triggers the pre existing bug (fixed in the StringImpl patch)  that if string data falls in the subsequent heap block WebCore::StringImpl would confuse this for an internal buffer &amp; fail to free it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190233</commentid>
    <comment_count>47</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-02-12 19:09:50 -0800</bug_when>
    <thetext>JIT patch landed in r54747.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190240</commentid>
    <comment_count>48</comment_count>
      <attachid>48693</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-02-12 20:03:44 -0800</bug_when>
    <thetext>Created attachment 48693
Last patch v0.1! Needs the ChnageLog filling out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190359</commentid>
    <comment_count>49</comment_count>
      <attachid>48735</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-02-14 17:25:26 -0800</bug_when>
    <thetext>Created attachment 48735
Final Patch!  Refactor StructureTransitionTable back into Structure, remove PtrAndFlags!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190361</commentid>
    <comment_count>50</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-14 17:31:40 -0800</bug_when>
    <thetext>Attachment 48735 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/runtime/Structure.h:249:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/runtime/Structure.h:264:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/runtime/Structure.h:328:  More than one command on the same line  [whitespace/newline] [4]
JavaScriptCore/runtime/Structure.h:340:  More than one command on the same line  [whitespace/newline] [4]
JavaScriptCore/runtime/Structure.h:341:  More than one command on the same line  [whitespace/newline] [4]
Skipping input &apos;JavaScriptCore/wtf/PtrAndFlags.h&apos;: Can&apos;t open for reading
Skipping input &apos;WebCore/ForwardingHeaders/wtf/PtrAndFlags.h&apos;: Can&apos;t open for reading
Total errors found: 5


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190539</commentid>
    <comment_count>51</comment_count>
      <attachid>48735</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-15 12:54:47 -0800</bug_when>
    <thetext>Comment on attachment 48735
Final Patch!  Refactor StructureTransitionTable back into Structure, remove PtrAndFlags!

&gt; +    , m_usingSingleSlot(true)

The naming scheme for booleans where we make them finish a sentence &quot;structure &lt;xxx&gt;&quot; would mean this should be named m_isUsingSingleSlot.

&gt; +        bool structureTransitionTableContains(const StructureTransitionTableHash::Key&amp; key, JSCell* specificValue)
&gt; +        Structure* structureTransitionTableGet(const StructureTransitionTableHash::Key&amp; key, JSCell* specificValue) const
&gt; +        bool structureTransitionTableHasTransition(const StructureTransitionTableHash::Key&amp; key) const
&gt; +        void structureTransitionTableRemove(const StructureTransitionTableHash::Key&amp; key, JSCell* specificValue)
&gt; +        void structureTransitionTableAdd(const StructureTransitionTableHash::Key&amp; key, Structure* structure, JSCell* specificValue)
&gt; +        TransitionTable* structureTransitionTable() const { ASSERT(!m_usingSingleSlot); return m_transitions.m_table; }
&gt; +        void setStructureTransitionTable(TransitionTable* table)

Seems we should name these function members transitionTableXXX since they are members of the Structure class.

It also seems like the header would be a little easier to read if the function bodies were outside the class definition, marked inline. Definitions of functions that are used only inside Structure.cpp can go in that file rather than the header.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190570</commentid>
    <comment_count>52</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-02-15 15:56:08 -0800</bug_when>
    <thetext>Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
Sending        JavaScriptCore/bytecode/CodeBlock.h
Sending        JavaScriptCore/runtime/Structure.cpp
Sending        JavaScriptCore/runtime/Structure.h
Sending        JavaScriptCore/runtime/StructureTransitionTable.h
Deleting       JavaScriptCore/wtf/PtrAndFlags.h
Sending        WebCore/ChangeLog
Deleting       WebCore/ForwardingHeaders/wtf/PtrAndFlags.h
Transmitting file data .......
Committed revision 54798.

PtrAndFlags is gone, resolved fixed.

A similar problem is know to exist due to our Rope implementation, but tracking that in a new bug ( https://bugs.webkit.org/show_bug.cgi?id=34964 ).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222607</commentid>
    <comment_count>53</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-05-07 14:15:48 -0700</bug_when>
    <thetext>The last patch removed PtrAndFlags.h. However, references to the file still exist:

    JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj
    444:			RelativePath=&quot;..\..\wtf\PtrAndFlags.h&quot;

    JavaScriptGlue/ForwardingHeaders/wtf/PtrAndFlags.h
    1:#include &lt;JavaScriptCore/PtrAndFlags.h&gt;

Any cause for worry?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46700</attachid>
            <date>2010-01-15 12:47:01 -0800</date>
            <delta_ts>2010-01-15 13:02:24 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>patch.ptrandjit.txt</filename>
            <type>text/plain</type>
            <size>5608</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUzMzIyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDEtMTUgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zMzczMQorICAgICAgICBSZW1vdmUgdXNlcyBvZiBQdHJBbmRGbGFncyBmcm9t
IEpJVCBkYXRhIHN0dWN0dXJlcy4KKworICAgICAgICBUaGVzZSBicmVhayB0aGUgT1MgWCBMZWFr
cyB0b29sLiAgRnJlZSB1cCBhIGJpdCBpbiBDYWxsTGlua0luZm8sIGFuZCBpbnZhbGlkCisgICAg
ICAgIHBlcm11dGF0aW9uIG9mIHBvaW50ZXIgc3RhdGVzIGluIE1ldGhvZENhbGxMaW5rSW5mbyB0
byByZXByZXNlbnQgdGhlIHJlbW92ZWQgYml0cy4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNlZW5PbmNlKToKKyAgICAgICAg
KEpTQzo6Q2FsbExpbmtJbmZvOjpzZXRTZWVuKToKKyAgICAgICAgKEpTQzo6TWV0aG9kQ2FsbExp
bmtJbmZvOjpNZXRob2RDYWxsTGlua0luZm8pOgorICAgICAgICAoSlNDOjpNZXRob2RDYWxsTGlu
a0luZm86OnNlZW5PbmNlKToKKyAgICAgICAgKEpTQzo6TWV0aG9kQ2FsbExpbmtJbmZvOjpzZXRT
ZWVuKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjp1bmxpbmtD
YWxsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OnBhdGNoTWV0aG9kQ2FsbFByb3RvKToKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmcu
aDoKKwogMjAxMC0wMS0xNCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA1MzMyMikKKysrIEphdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNDQgKzExMCw1NCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgY2FsbFJldHVybkxv
Y2F0aW9uOwogICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgaG90UGF0aEJlZ2luOwog
ICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXI7Ci0gICAgICAgIFB0ckFu
ZEZsYWdzPENvZGVCbG9jaywgSGFzU2VlblNob3VsZFJlcGF0Y2g+IG93bmVyQ29kZUJsb2NrOwor
ICAgICAgICBDb2RlQmxvY2sqIG93bmVyQ29kZUJsb2NrOwogICAgICAgICBDb2RlQmxvY2sqIGNh
bGxlZTsKLSAgICAgICAgdW5zaWduZWQgcG9zaXRpb247CisgICAgICAgIHVuc2lnbmVkIHBvc2l0
aW9uIDogMzE7CisgICAgICAgIHVuc2lnbmVkIGhhc1NlZW5TaG91bGRSZXBhdGNoIDogMTsKICAg
ICAgICAgCiAgICAgICAgIHZvaWQgc2V0VW5saW5rZWQoKSB7IGNhbGxlZSA9IDA7IH0KICAgICAg
ICAgYm9vbCBpc0xpbmtlZCgpIHsgcmV0dXJuIGNhbGxlZTsgfQogCiAgICAgICAgIGJvb2wgc2Vl
bk9uY2UoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gb3duZXJDb2RlQmxvY2suaXNG
bGFnU2V0KGhhc1NlZW5TaG91bGRSZXBhdGNoKTsKKyAgICAgICAgICAgIHJldHVybiBoYXNTZWVu
U2hvdWxkUmVwYXRjaDsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgc2V0U2VlbigpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIG93bmVyQ29kZUJsb2NrLnNldEZsYWcoaGFzU2VlblNob3VsZFJl
cGF0Y2gpOworICAgICAgICAgICAgaGFzU2VlblNob3VsZFJlcGF0Y2ggPSB0cnVlOwogICAgICAg
ICB9CiAgICAgfTsKIAogICAgIHN0cnVjdCBNZXRob2RDYWxsTGlua0luZm8gewogICAgICAgICBN
ZXRob2RDYWxsTGlua0luZm8oKQogICAgICAgICAgICAgOiBjYWNoZWRTdHJ1Y3R1cmUoMCkKKyAg
ICAgICAgICAgICwgY2FjaGVkUHJvdG90eXBlU3RydWN0dXJlKDApCiAgICAgICAgIHsKICAgICAg
ICAgfQogCiAgICAgICAgIGJvb2wgc2Vlbk9uY2UoKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gY2FjaGVkUHJvdG90eXBlU3RydWN0dXJlLmlzRmxhZ1NldChoYXNTZWVuU2hvdWxkUmVw
YXRjaCk7CisgICAgICAgICAgICBBU1NFUlQoIWNhY2hlZFN0cnVjdHVyZSk7CisgICAgICAgICAg
ICByZXR1cm4gY2FjaGVkUHJvdG90eXBlU3RydWN0dXJlOwogICAgICAgICB9CiAKICAgICAgICAg
dm9pZCBzZXRTZWVuKCkKICAgICAgICAgewotICAgICAgICAgICAgY2FjaGVkUHJvdG90eXBlU3Ry
dWN0dXJlLnNldEZsYWcoaGFzU2VlblNob3VsZFJlcGF0Y2gpOworICAgICAgICAgICAgQVNTRVJU
KCFjYWNoZWRTdHJ1Y3R1cmUgJiYgIWNhY2hlZFByb3RvdHlwZVN0cnVjdHVyZSk7CisgICAgICAg
ICAgICAvLyBXZSB1c2UgdGhlIHZhbHVlcyBvZiBjYWNoZWRTdHJ1Y3R1cmUgJiBjYWNoZWRQcm90
b3R5cGVTdHJ1Y3R1cmUgdG8gaW5kaWNhdGUgdGhlCisgICAgICAgICAgICAvLyBjdXJyZW50IHN0
YXRlLgorICAgICAgICAgICAgLy8gICAgIC0gSW4gdGhlIGluaXRpYWwgc3RhdGUsIGJvdGggYXJl
IG51bGwuCisgICAgICAgICAgICAvLyAgICAgLSBPbmNlIHRoaXMgdHJhbnNpdGlvbiBoYXMgYmVl
biB0YWtlbiBvbmNlLCBjYWNoZWRTdHJ1Y3R1cmUgaXMKKyAgICAgICAgICAgIC8vICAgICAgIG51
bGwgYW5kIGNhY2hlZFByb3RvdHlwZVN0cnVjdHVyZSBpcyBzZXQgdG8gYSBudW4tbnVsbCB2YWx1
ZS4KKyAgICAgICAgICAgIC8vICAgICAtIE9uY2UgdGhlIGNhbGwgaXMgbGlua2VkIGJvdGggc3Ry
dWN0dXJlcyBhcmUgc2V0IHRvIG5vbi1udWxsIHZhbHVlcy4KKyAgICAgICAgICAgIGNhY2hlZFBy
b3RvdHlwZVN0cnVjdHVyZSA9IChTdHJ1Y3R1cmUqKTE7CiAgICAgICAgIH0KIAogICAgICAgICBD
b2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKICAgICAgICAgQ29kZUxvY2F0aW9u
RGF0YUxhYmVsUHRyIHN0cnVjdHVyZUxhYmVsOwogICAgICAgICBTdHJ1Y3R1cmUqIGNhY2hlZFN0
cnVjdHVyZTsKLSAgICAgICAgUHRyQW5kRmxhZ3M8U3RydWN0dXJlLCBIYXNTZWVuU2hvdWxkUmVw
YXRjaD4gY2FjaGVkUHJvdG90eXBlU3RydWN0dXJlOworICAgICAgICBTdHJ1Y3R1cmUqIGNhY2hl
ZFByb3RvdHlwZVN0cnVjdHVyZTsKICAgICB9OwogCiAgICAgc3RydWN0IEZ1bmN0aW9uUmVnaXN0
ZXJJbmZvIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA1MzMyMikKKysrIEphdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODIsNyArNTgyLDcgQEAgdm9p
ZCBKSVQ6OnVubGlua0NhbGwoQ2FsbExpbmtJbmZvKiBjYWxsTAogICAgIC8vIFdoZW4gdGhlIEpT
RnVuY3Rpb24gaXMgZGVsZXRlZCB0aGUgcG9pbnRlciBlbWJlZGRlZCBpbiB0aGUgaW5zdHJ1Y3Rp
b24gc3RyZWFtIHdpbGwgbm8gbG9uZ2VyIGJlIHZhbGlkCiAgICAgLy8gKGFuZCwgaWYgYSBuZXcg
SlNGdW5jdGlvbiBoYXBwZW5lZCB0byBiZSBjb25zdHJ1Y3RlZCBhdCB0aGUgc2FtZSBsb2NhdGlv
biwgd2UgY291bGQgZ2V0IGEgZmFsc2UgcG9zaXRpdmUKICAgICAvLyBtYXRjaCkuICBSZXNldCB0
aGUgY2hlY2sgc28gaXQgbm8gbG9uZ2VyIG1hdGNoZXMuCi0gICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNhbGxMaW5rSW5mby0+b3duZXJDb2RlQmxvY2suZ2V0KCkpOworICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsTGlua0luZm8tPm93bmVyQ29kZUJsb2NrKTsKICNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChjYWxsTGlua0lu
Zm8tPmhvdFBhdGhCZWdpbiwgMCk7CiAjZWxzZQpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiA1MzMyMikKKysrIEphdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0NCw3ICs2NDQsNiBA
QCB2b2lkIEpJVDo6cGF0Y2hNZXRob2RDYWxsUHJvdG8oQ29kZUJsb2NrCiAgICAgc3RydWN0dXJl
LT5yZWYoKTsKIAogICAgIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlID0gcHJvdG8tPnN0
cnVjdHVyZSgpOwotICAgIEFTU0VSVCghbWV0aG9kQ2FsbExpbmtJbmZvLmNhY2hlZFByb3RvdHlw
ZVN0cnVjdHVyZSk7CiAgICAgbWV0aG9kQ2FsbExpbmtJbmZvLmNhY2hlZFByb3RvdHlwZVN0cnVj
dHVyZSA9IHByb3RvdHlwZVN0cnVjdHVyZTsKICAgICBwcm90b3R5cGVTdHJ1Y3R1cmUtPnJlZigp
OwogCkBAIC0xNTk0LDcgKzE1OTMsNiBAQCB2b2lkIEpJVDo6cGF0Y2hNZXRob2RDYWxsUHJvdG8o
Q29kZUJsb2NrCiAgICAgc3RydWN0dXJlLT5yZWYoKTsKIAogICAgIFN0cnVjdHVyZSogcHJvdG90
eXBlU3RydWN0dXJlID0gcHJvdG8tPnN0cnVjdHVyZSgpOwotICAgIEFTU0VSVCghbWV0aG9kQ2Fs
bExpbmtJbmZvLmNhY2hlZFByb3RvdHlwZVN0cnVjdHVyZSk7CiAgICAgbWV0aG9kQ2FsbExpbmtJ
bmZvLmNhY2hlZFByb3RvdHlwZVN0cnVjdHVyZSA9IHByb3RvdHlwZVN0cnVjdHVyZTsKICAgICBw
cm90b3R5cGVTdHJ1Y3R1cmUtPnJlZigpOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1VTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcu
aAkocmV2aXNpb24gNTMzMjIpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVh
ZFJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvT3duRmFzdE1hbGxvY1B0ci5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1B0ckFuZEZsYWdzLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvdW5pY29kZS9Vbmljb2RlLmg+Cg==
</data>
<flag name="review"
          id="29005"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46702</attachid>
            <date>2010-01-15 12:49:57 -0800</date>
            <delta_ts>2010-02-08 15:10:54 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>patch.ptrandustring.txt</filename>
            <type>text/plain</type>
            <size>11536</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUzMzI3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDEtMTUgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zMzczMQorICAgICAgICBSZW1vdmUgVW50eXBlZFB0ckFuZEJpdGZpZWxkIGZy
b20gVVN0cmluZ0ltcGwgKGFraW4gdG8gUHRyQW5kRmxhZ3MpLgorCisgICAgICAgIFRoaXMgYnJl
YWsgdGhlIE9TIFggTGVha3MgdG9vbC4gIEluc3RlYWQsIGZyZWUgdXAgc29tZSBtb3JlIGJpdHMg
ZnJvbSB0aGUgaGFzaC4KKworICAgICAgICAqIHJ1bnRpbWUvVVN0cmluZ0ltcGwuY3BwOgorICAg
ICAgICAoSlNDOjpVU3RyaW5nSW1wbDo6c2hhcmVkQnVmZmVyKToKKyAgICAgICAgKEpTQzo6VVN0
cmluZ0ltcGw6On5VU3RyaW5nSW1wbCk6CisgICAgICAgICogcnVudGltZS9VU3RyaW5nSW1wbC5o
OgorICAgICAgICAoSlNDOjpVU3RyaW5nSW1wbDo6Y29zdCk6CisgICAgICAgIChKU0M6OlVTdHJp
bmdJbXBsOjpjaGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6VVN0cmluZ0ltcGw6OlVT
dHJpbmdJbXBsKToKKyAgICAgICAgKEpTQzo6VVN0cmluZ0ltcGw6OmJ1ZmZlck93bmVyU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6VVN0cmluZ0ltcGw6Oik6CisgICAgICAgICogd3RmL1N0cmluZ0hh
c2hGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdURjo6c3RyaW5nSGFzaCk6CisKIDIwMTAtMDEtMTQg
IEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3Ry
aW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5n
SW1wbC5jcHAJKHJldmlzaW9uIDUzMzI3KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3Ry
aW5nSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDI4ICszNSwyNiBAQCB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgSlNDIHsKICAKLVNoYXJlZFVDaGFyKiBVU3RyaW5nSW1w
bDo6YmFzZVNoYXJlZEJ1ZmZlcigpCi17Ci0gICAgQVNTRVJUKChidWZmZXJPd25lcnNoaXAoKSA9
PSBCdWZmZXJTaGFyZWQpCi0gICAgICAgIHx8ICgoYnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVy
T3duZWQpICYmICFtX2RhdGFCdWZmZXIuYXNQdHI8dm9pZCo+KCkpKTsKLQotICAgIGlmIChidWZm
ZXJPd25lcnNoaXAoKSAhPSBCdWZmZXJTaGFyZWQpCi0gICAgICAgIG1fZGF0YUJ1ZmZlciA9IFVu
dHlwZWRQdHJBbmRCaXRmaWVsZChTaGFyZWRVQ2hhcjo6Y3JlYXRlKG5ldyBPd25GYXN0TWFsbG9j
UHRyPFVDaGFyPihtX2RhdGEpKS5yZWxlYXNlUmVmKCksIEJ1ZmZlclNoYXJlZCk7Ci0KLSAgICBy
ZXR1cm4gbV9kYXRhQnVmZmVyLmFzUHRyPFNoYXJlZFVDaGFyKj4oKTsKLX0KLQogU2hhcmVkVUNo
YXIqIFVTdHJpbmdJbXBsOjpzaGFyZWRCdWZmZXIoKQogewotICAgIGlmIChtX2xlbmd0aCA8IHNf
bWluTGVuZ3RoVG9TaGFyZSkKKyAgICBpZiAobV9sZW5ndGggPCBzX21pbkxlbmd0aFRvU2hhcmUg
fHwgaXNTdGF0aWMoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKCFpc1N0YXRpYygp
KTsKIAotICAgIFVTdHJpbmdJbXBsKiBvd25lciA9IGJ1ZmZlck93bmVyU3RyaW5nKCk7Ci0gICAg
aWYgKG93bmVyLT5idWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJJbnRlcm5hbCkKKyAgICBzd2l0
Y2ggKG1fYnVmZmVyT3duZXJzaGlwKSB7CisgICAgY2FzZSBCdWZmZXJJbnRlcm5hbDoKICAgICAg
ICAgcmV0dXJuIDA7CisgICAgY2FzZSBCdWZmZXJPd25lZDoKKyAgICAgICAgbV9idWZmZXJTaGFy
ZWQgPSBTaGFyZWRVQ2hhcjo6Y3JlYXRlKG5ldyBPd25GYXN0TWFsbG9jUHRyPFVDaGFyPihtX2Rh
dGEpKS5yZWxlYXNlUmVmKCk7CisgICAgICAgIG1fYnVmZmVyT3duZXJzaGlwID0gQnVmZmVyU2hh
cmVkOworICAgICAgICByZXR1cm4gbV9idWZmZXJTaGFyZWQ7CisgICAgY2FzZSBCdWZmZXJTdWJz
dHJpbmc6CisgICAgICAgIHJldHVybiBtX2J1ZmZlclN1YnN0cmluZy0+c2hhcmVkQnVmZmVyKCk7
CisgICAgY2FzZSBCdWZmZXJTaGFyZWQ6CisgICAgICAgIHJldHVybiBtX2J1ZmZlclNoYXJlZDsK
KyAgICB9CiAKLSAgICByZXR1cm4gb3duZXItPmJhc2VTaGFyZWRCdWZmZXIoKTsKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKIH0KIAogVVN0cmluZ0ltcGw6On5VU3Ry
aW5nSW1wbCgpCkBAIC02NywxNiArNjUsMTggQEAgVVN0cmluZ0ltcGw6On5VU3RyaW5nSW1wbCgp
CiAgICAgaWYgKGlzSWRlbnRpZmllcigpKQogICAgICAgICBJZGVudGlmaWVyOjpyZW1vdmUodGhp
cyk7CiAKLSAgICBpZiAoYnVmZmVyT3duZXJzaGlwKCkgIT0gQnVmZmVySW50ZXJuYWwpIHsKLSAg
ICAgICAgaWYgKGJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlck93bmVkKQotICAgICAgICAgICAg
ZmFzdEZyZWUobV9kYXRhKTsKLSAgICAgICAgZWxzZSBpZiAoYnVmZmVyT3duZXJzaGlwKCkgPT0g
QnVmZmVyU3Vic3RyaW5nKQotICAgICAgICAgICAgbV9kYXRhQnVmZmVyLmFzUHRyPFVTdHJpbmdJ
bXBsKj4oKS0+ZGVyZWYoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoYnVm
ZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVyU2hhcmVkKTsKLSAgICAgICAgICAgIG1fZGF0YUJ1ZmZl
ci5hc1B0cjxTaGFyZWRVQ2hhcio+KCktPmRlcmVmKCk7Ci0gICAgICAgIH0KKyAgICBzd2l0Y2gg
KG1fYnVmZmVyT3duZXJzaGlwKSB7CisgICAgY2FzZSBCdWZmZXJJbnRlcm5hbDoKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQnVmZmVyT3duZWQ6CisgICAgICAgIGZhc3RGcmVlKG1fZGF0YSk7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJ1ZmZlclN1YnN0cmluZzoKKyAgICAgICAgbV9i
dWZmZXJTdWJzdHJpbmctPmRlcmVmKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJ1ZmZl
clNoYXJlZDoKKyAgICAgICAgbV9idWZmZXJTdWJzdHJpbmctPmRlcmVmKCk7CiAgICAgfQogfQog
Ci19Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0
cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmdJ
bXBsLmgJKHJldmlzaW9uIDUzMzI3KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5n
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw0OCArNDAsNiBAQCBjbGFzcyBJZGVudGlmaWVy
VGFibGU7CiAgIAogdHlwZWRlZiBDcm9zc1RocmVhZFJlZkNvdW50ZWQ8T3duRmFzdE1hbGxvY1B0
cjxVQ2hhcj4gPiBTaGFyZWRVQ2hhcjsKIAotY2xhc3MgVW50eXBlZFB0ckFuZEJpdGZpZWxkIHsK
LXB1YmxpYzoKLSAgICBVbnR5cGVkUHRyQW5kQml0ZmllbGQoKSB7fQotCi0gICAgVW50eXBlZFB0
ckFuZEJpdGZpZWxkKHZvaWQqIHB0clZhbHVlLCB1aW50cHRyX3QgYml0VmFsdWUpCi0gICAgICAg
IDogbV92YWx1ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocHRyVmFsdWUpIHwgYml0VmFs
dWUpCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICAsIG1fbGVha3NQdHIocHRyVmFsdWUpCi0jZW5k
aWYKLSAgICB7Ci0gICAgICAgIEFTU0VSVChwdHJWYWx1ZSA9PSBhc1B0cjx2b2lkKj4oKSk7Ci0g
ICAgICAgIEFTU0VSVCgoKnRoaXMgJiB+c19hbGlnbm1lbnRNYXNrKSA9PSBiaXRWYWx1ZSk7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGFzUHRyKCkgY29uc3QgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUPihtX3ZhbHVlICYgc19hbGlnbm1lbnRNYXNrKTsgfQot
Ci0gICAgVW50eXBlZFB0ckFuZEJpdGZpZWxkJiBvcGVyYXRvciY9KHVpbnRwdHJfdCBiaXRzKQot
ICAgIHsKLSAgICAgICAgbV92YWx1ZSAmPSBiaXRzIHwgc19hbGlnbm1lbnRNYXNrOwotICAgICAg
ICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgVW50eXBlZFB0ckFuZEJpdGZpZWxkJiBvcGVy
YXRvcnw9KHVpbnRwdHJfdCBiaXRzKQotICAgIHsKLSAgICAgICAgbV92YWx1ZSB8PSBiaXRzICYg
fnNfYWxpZ25tZW50TWFzazsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIHVp
bnRwdHJfdCBvcGVyYXRvciYodWludHB0cl90IG1hc2spIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV92YWx1ZSAmIG1hc2sgJiB+c19hbGlnbm1lbnRNYXNrOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHNfYWxpZ25tZW50TWFzayA9IH5zdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KDB4Nyk7Ci0gICAgdWludHB0cl90IG1fdmFsdWU7Ci0jaWZuZGVmIE5E
RUJVRwotICAgICAgICB2b2lkKiBtX2xlYWtzUHRyOyAvLyBPbmx5IHVzZWQgdG8gYWxsb3cgdG9v
bHMgbGlrZSBsZWFrcyBvbiBPU1ggdG8gZGV0ZWN0IHRoYXQgdGhlIG1lbW9yeSBpcyByZWZlcmVu
Y2VkLgotI2VuZGlmCi19OwotCiBjbGFzcyBVU3RyaW5nSW1wbCA6IE5vbmNvcHlhYmxlIHsKIHB1
YmxpYzoKICAgICB0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+CkBAIC0xNTAsMTIgKzEw
OCwxMiBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGNvc3QoKQogICAgIHsKICAgICAgICAgLy8gRm9y
IHN1YnN0cmluZ3MsIHJldHVybiB0aGUgY29zdCBvZiB0aGUgYmFzZSBzdHJpbmcuCi0gICAgICAg
IGlmIChidWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJTdWJzdHJpbmcpCi0gICAgICAgICAgICBy
ZXR1cm4gbV9kYXRhQnVmZmVyLmFzUHRyPFVTdHJpbmdJbXBsKj4oKS0+Y29zdCgpOworICAgICAg
ICBpZiAobV9idWZmZXJPd25lcnNoaXAgPT0gQnVmZmVyU3Vic3RyaW5nKQorICAgICAgICAgICAg
cmV0dXJuIG1fYnVmZmVyU3Vic3RyaW5nLT5jb3N0KCk7CiAKLSAgICAgICAgaWYgKG1fZGF0YUJ1
ZmZlciAmIHNfcmVwb3J0ZWRDb3N0Qml0KQorICAgICAgICBpZiAobV9oYXNSZXBvcnRlZENvc3Qp
CiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgbV9kYXRhQnVmZmVyIHw9IHNfcmVwb3J0
ZWRDb3N0Qml0OworICAgICAgICBtX2hhc1JlcG9ydGVkQ29zdCA9IHRydWU7CiAgICAgICAgIHJl
dHVybiBtX2xlbmd0aDsKICAgICB9CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgaWYgKCFt
X2hhc2gpIG1faGFzaCA9IGNvbXB1dGVIYXNoKGRhdGEoKSwgbV9sZW5ndGgpOyByZXR1cm4gbV9o
YXNoOyB9CkBAIC0xODYsNyArMTQ0LDcgQEAgcHVibGljOgogICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKICAgICB7CiAgICAgICAgIC8vIFRoZXJlIGlzIG5v
IHJlY3Vyc2lvbiBvZiBzdWJzdHJpbmdzLgotICAgICAgICBBU1NFUlQoYnVmZmVyT3duZXJTdHJp
bmcoKS0+YnVmZmVyT3duZXJzaGlwKCkgIT0gQnVmZmVyU3Vic3RyaW5nKTsKKyAgICAgICAgQVNT
RVJUKGJ1ZmZlck93bmVyU3RyaW5nKCktPm1fYnVmZmVyT3duZXJzaGlwICE9IEJ1ZmZlclN1YnN0
cmluZyk7CiAgICAgICAgIC8vIFN0YXRpYyBzdHJpbmdzIGNhbm5vdCBiZSBwdXQgaW4gaWRlbnRp
ZmllciB0YWJsZXMsIGJlY2F1c2UgdGhleSBhcmUgZ2xvYmFsbHkgc2hhcmVkLgogICAgICAgICBB
U1NFUlQoIWlzU3RhdGljKCkgfHwgIWlzSWRlbnRpZmllcigpKTsKICAgICB9CkBAIC0yMDksNyAr
MTY3LDkgQEAgcHJpdmF0ZToKICAgICAgICAgLCBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1l
bnQpCiAgICAgICAgICwgbV9oYXNoKDApCiAgICAgICAgICwgbV9pc0lkZW50aWZpZXIoZmFsc2Up
Ci0gICAgICAgICwgbV9kYXRhQnVmZmVyKDAsIG93bmVyc2hpcCkKKyAgICAgICAgLCBtX2hhc1Jl
cG9ydGVkQ29zdChmYWxzZSkKKyAgICAgICAgLCBtX2J1ZmZlck93bmVyc2hpcChvd25lcnNoaXAp
CisgICAgICAgICwgbV9idWZmZXIoMCkKICAgICB7CiAgICAgICAgIEFTU0VSVCgob3duZXJzaGlw
ID09IEJ1ZmZlckludGVybmFsKSB8fCAob3duZXJzaGlwID09IEJ1ZmZlck93bmVkKSk7CiAgICAg
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTIyNSw3ICsxODUsOSBAQCBwcml2YXRlOgogICAg
ICAgICAsIG1fcmVmQ291bnQoc19zdGF0aWNSZWZDb3VudEluaXRpYWxWYWx1ZSkKICAgICAgICAg
LCBtX2hhc2goMCkKICAgICAgICAgLCBtX2lzSWRlbnRpZmllcihmYWxzZSkKLSAgICAgICAgLCBt
X2RhdGFCdWZmZXIoMCwgQnVmZmVyT3duZWQpCisgICAgICAgICwgbV9oYXNSZXBvcnRlZENvc3Qo
ZmFsc2UpCisgICAgICAgICwgbV9idWZmZXJPd25lcnNoaXAoQnVmZmVyT3duZWQpCisgICAgICAg
ICwgbV9idWZmZXIoMCkKICAgICB7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9
CkBAIC0yMzcsMTMgKzE5OSwxNSBAQCBwcml2YXRlOgogICAgICAgICAsIG1fcmVmQ291bnQoc19y
ZWZDb3VudEluY3JlbWVudCkKICAgICAgICAgLCBtX2hhc2goMCkKICAgICAgICAgLCBtX2lzSWRl
bnRpZmllcihmYWxzZSkKLSAgICAgICAgLCBtX2RhdGFCdWZmZXIoYmFzZS5yZWxlYXNlUmVmKCks
IEJ1ZmZlclN1YnN0cmluZykKKyAgICAgICAgLCBtX2hhc1JlcG9ydGVkQ29zdChmYWxzZSkKKyAg
ICAgICAgLCBtX2J1ZmZlck93bmVyc2hpcChCdWZmZXJTdWJzdHJpbmcpCisgICAgICAgICwgbV9i
dWZmZXJTdWJzdHJpbmcoYmFzZS5yZWxlYXNlUmVmKCkpCiAgICAgewogICAgICAgICAvLyBEbyB1
c2Ugc3RhdGljIHN0cmluZ3MgYXMgYSBiYXNlIGZvciBzdWJzdHJpbmdzOyBVbnR5cGVkUHRyQW5k
Qml0ZmllbGQgYXNzdW1lcwogICAgICAgICAvLyB0aGF0IGFsbCBwb2ludGVycyB3aWxsIGJlIGF0
IGxlYXN0IDgtYnl0ZSBhbGlnbmVkLCB3ZSBjYW5ub3QgZ3VhcmFudGVlIHRoYXQgb2YKICAgICAg
ICAgLy8gVVN0cmluZ0ltcGxzIHRoYXQgYXJlIG5vdCBoZWFwIGFsbG9jYXRlZC4KLSAgICAgICAg
QVNTRVJUKG1fZGF0YUJ1ZmZlci5hc1B0cjxVU3RyaW5nSW1wbCo+KCktPnNpemUoKSk7Ci0gICAg
ICAgIEFTU0VSVCghbV9kYXRhQnVmZmVyLmFzUHRyPFVTdHJpbmdJbXBsKj4oKS0+aXNTdGF0aWMo
KSk7CisgICAgICAgIEFTU0VSVChtX2J1ZmZlclN1YnN0cmluZy0+c2l6ZSgpKTsKKyAgICAgICAg
QVNTRVJUKCFtX2J1ZmZlclN1YnN0cmluZy0+aXNTdGF0aWMoKSk7CiAgICAgICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKICAgICB9CiAKQEAgLTI1NCw3ICsyMTgsOSBAQCBwcml2YXRlOgogICAgICAg
ICAsIG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkKICAgICAgICAgLCBtX2hhc2goMCkK
ICAgICAgICAgLCBtX2lzSWRlbnRpZmllcihmYWxzZSkKLSAgICAgICAgLCBtX2RhdGFCdWZmZXIo
c2hhcmVkQnVmZmVyLnJlbGVhc2VSZWYoKSwgQnVmZmVyU2hhcmVkKQorICAgICAgICAsIG1faGFz
UmVwb3J0ZWRDb3N0KGZhbHNlKQorICAgICAgICAsIG1fYnVmZmVyT3duZXJzaGlwKEJ1ZmZlclNo
YXJlZCkKKyAgICAgICAgLCBtX2J1ZmZlclNoYXJlZChzaGFyZWRCdWZmZXIucmVsZWFzZVJlZigp
KQogICAgIHsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KQEAgLTI2NywyNiAr
MjMzLDI4IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBudW1iZXIgbXVzdCBiZSBhdCBsZWFzdCAy
IHRvIGF2b2lkIHNoYXJpbmcgZW1wdHksIG51bGwgYXMgd2VsbCBhcyAxIGNoYXJhY3RlciBzdHJp
bmdzIGZyb20gU21hbGxTdHJpbmdzLgogICAgIHN0YXRpYyBjb25zdCBpbnQgc19taW5MZW5ndGhU
b1NoYXJlID0gMTA7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfY29weUNoYXJzSW5saW5l
Q3V0T2ZmID0gMjA7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBzX2J1ZmZlck93bmVyc2hp
cE1hc2sgPSAzOwotICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3Qgc19yZXBvcnRlZENvc3RCaXQg
PSA0OwogICAgIC8vIFdlIGluaXRpYWxpemUgYW5kIGluY3JlbWVudC9kZWNyZW1lbnQgdGhlIHJl
ZkNvdW50IGZvciBhbGwgbm9ybWFsIChub24tc3RhdGljKSBzdHJpbmdzIGJ5IHRoZSB2YWx1ZSAy
LgogICAgIC8vIFdlIGluaXRpYWxpemUgc3RhdGljIHN0cmluZ3Mgd2l0aCBhbiBvZGQgbnVtYmVy
IChzcGVjaWZpY2FsbHksIDEpLCBzdWNoIHRoYXQgdGhlIHJlZkNvdW50IGNhbm5vdCByZWFjaCB6
ZXJvLgogICAgIHN0YXRpYyBjb25zdCBpbnQgc19yZWZDb3VudEluY3JlbWVudCA9IDI7CiAgICAg
c3RhdGljIGNvbnN0IGludCBzX3N0YXRpY1JlZkNvdW50SW5pdGlhbFZhbHVlID0gMTsKIAotICAg
IFVTdHJpbmdJbXBsKiBidWZmZXJPd25lclN0cmluZygpIHsgcmV0dXJuIChidWZmZXJPd25lcnNo
aXAoKSA9PSBCdWZmZXJTdWJzdHJpbmcpID8gbV9kYXRhQnVmZmVyLmFzUHRyPFVTdHJpbmdJbXBs
Kj4oKSA6ICB0aGlzOyB9Ci0gICAgY29uc3QgVVN0cmluZ0ltcGwqIGJ1ZmZlck93bmVyU3RyaW5n
KCkgY29uc3QgeyByZXR1cm4gKGJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmluZykg
PyBtX2RhdGFCdWZmZXIuYXNQdHI8VVN0cmluZ0ltcGwqPigpIDogIHRoaXM7IH0KLSAgICBTaGFy
ZWRVQ2hhciogYmFzZVNoYXJlZEJ1ZmZlcigpOwotICAgIHVuc2lnbmVkIGJ1ZmZlck93bmVyc2hp
cCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YUJ1ZmZlciAmIHNfYnVmZmVyT3duZXJzaGlwTWFzazsg
fQorICAgIFVTdHJpbmdJbXBsKiBidWZmZXJPd25lclN0cmluZygpIHsgcmV0dXJuIChtX2J1ZmZl
ck93bmVyc2hpcCA9PSBCdWZmZXJTdWJzdHJpbmcpID8gbV9idWZmZXJTdWJzdHJpbmcgOiAgdGhp
czsgfQorICAgIGNvbnN0IFVTdHJpbmdJbXBsKiBidWZmZXJPd25lclN0cmluZygpIGNvbnN0IHsg
cmV0dXJuIChtX2J1ZmZlck93bmVyc2hpcCA9PSBCdWZmZXJTdWJzdHJpbmcpID8gbV9idWZmZXJT
dWJzdHJpbmcgOiAgdGhpczsgfQogICAgIGJvb2wgaXNTdGF0aWMoKSBjb25zdCB7IHJldHVybiBt
X3JlZkNvdW50ICYgMTsgfQogCiAgICAgLy8gdW5zaGFyZWQgZGF0YQogICAgIFVDaGFyKiBtX2Rh
dGE7CiAgICAgaW50IG1fbGVuZ3RoOwogICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7Ci0gICAgbXV0
YWJsZSB1bnNpZ25lZCBtX2hhc2ggOiAzMTsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1faGFzaCA6
IDI4OwogICAgIG11dGFibGUgdW5zaWduZWQgbV9pc0lkZW50aWZpZXIgOiAxOwotICAgIFVudHlw
ZWRQdHJBbmRCaXRmaWVsZCBtX2RhdGFCdWZmZXI7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2hh
c1JlcG9ydGVkQ29zdCA6IDE7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2J1ZmZlck93bmVyc2hp
cCA6IDI7CisgICAgdW5pb24geworICAgICAgICB2b2lkKiBtX2J1ZmZlcjsKKyAgICAgICAgVVN0
cmluZ0ltcGwqIG1fYnVmZmVyU3Vic3RyaW5nOworICAgICAgICBTaGFyZWRVQ2hhciogbV9idWZm
ZXJTaGFyZWQ7CisgICAgfTsKIAogICAgIEpTX0VYUE9SVERBVEEgc3RhdGljIFVTdHJpbmdJbXBs
KiBzX251bGw7CiAgICAgSlNfRVhQT1JUREFUQSBzdGF0aWMgVVN0cmluZ0ltcGwqIHNfZW1wdHk7
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvU3RyaW5nSGFzaEZ1bmN0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9TdHJpbmdIYXNoRnVuY3Rpb25zLmgJKHJldmlzaW9u
IDUzMzI3KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1N0cmluZ0hhc2hGdW5jdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNjAsMTMgKzYwLDEzIEBAIGlubGluZSB1bnNpZ25lZCBzdHJpbmdIYXNo
KGNvbnN0IFVDaGFyKiAKICAgICBoYXNoICs9IGhhc2ggPj4gMTU7CiAgICAgaGFzaCBePSBoYXNo
IDw8IDEwOwogCi0gICAgaGFzaCAmPSAweDdmZmZmZmZmOworICAgIGhhc2ggJj0gMHgwZmZmZmZm
ZjsKIAogICAgIC8vIHRoaXMgYXZvaWRzIGV2ZXIgcmV0dXJuaW5nIGEgaGFzaCBjb2RlIG9mIDAs
IHNpbmNlIHRoYXQgaXMgdXNlZCB0bwogICAgIC8vIHNpZ25hbCAiaGFzaCBub3QgY29tcHV0ZWQg
eWV0IiwgdXNpbmcgYSB2YWx1ZSB0aGF0IGlzIGxpa2VseSB0byBiZQogICAgIC8vIGVmZmVjdGl2
ZWx5IHRoZSBzYW1lIGFzIDAgd2hlbiB0aGUgbG93IGJpdHMgYXJlIG1hc2tlZAogICAgIGlmICho
YXNoID09IDApCi0gICAgICAgIGhhc2ggPSAweDQwMDAwMDAwOworICAgICAgICBoYXNoID0gMHgw
ODAwMDAwMDsKIAogICAgIHJldHVybiBoYXNoOwogfQpAQCAtMTAwLDEzICsxMDAsMTMgQEAgaW5s
aW5lIHVuc2lnbmVkIHN0cmluZ0hhc2goY29uc3QgY2hhciogZAogICAgIGhhc2ggKz0gaGFzaCA+
PiAxNTsKICAgICBoYXNoIF49IGhhc2ggPDwgMTA7CiAKLSAgICBoYXNoICY9IDB4N2ZmZmZmZmY7
CisgICAgaGFzaCAmPSAweDBmZmZmZmZmOwogCiAgICAgLy8gdGhpcyBhdm9pZHMgZXZlciByZXR1
cm5pbmcgYSBoYXNoIGNvZGUgb2YgMCwgc2luY2UgdGhhdCBpcyB1c2VkIHRvCiAgICAgLy8gc2ln
bmFsICJoYXNoIG5vdCBjb21wdXRlZCB5ZXQiLCB1c2luZyBhIHZhbHVlIHRoYXQgaXMgbGlrZWx5
IHRvIGJlCiAgICAgLy8gZWZmZWN0aXZlbHkgdGhlIHNhbWUgYXMgMCB3aGVuIHRoZSBsb3cgYml0
cyBhcmUgbWFza2VkCiAgICAgaWYgKGhhc2ggPT0gMCkKLSAgICAgICAgaGFzaCA9IDB4NDAwMDAw
MDA7CisgICAgICAgIGhhc2ggPSAweDA4MDAwMDAwOwogCiAgICAgcmV0dXJuIGhhc2g7CiB9CkBA
IC0xNDEsMTMgKzE0MSwxMyBAQCBpbmxpbmUgdW5zaWduZWQgc3RyaW5nSGFzaChjb25zdCBjaGFy
KiBkCiAgICAgaGFzaCArPSBoYXNoID4+IDE1OwogICAgIGhhc2ggXj0gaGFzaCA8PCAxMDsKIAot
ICAgIGhhc2ggJj0gMHg3ZmZmZmZmZjsKKyAgICBoYXNoICY9IDB4MGZmZmZmZmY7CiAKICAgICAv
LyBUaGlzIGF2b2lkcyBldmVyIHJldHVybmluZyBhIGhhc2ggY29kZSBvZiAwLCBzaW5jZSB0aGF0
IGlzIHVzZWQgdG8KICAgICAvLyBzaWduYWwgImhhc2ggbm90IGNvbXB1dGVkIHlldCIsIHVzaW5n
IGEgdmFsdWUgdGhhdCBpcyBsaWtlbHkgdG8gYmUKICAgICAvLyBlZmZlY3RpdmVseSB0aGUgc2Ft
ZSBhcyAwIHdoZW4gdGhlIGxvdyBiaXRzIGFyZSBtYXNrZWQuCiAgICAgaWYgKGhhc2ggPT0gMCkK
LSAgICAgICAgaGFzaCA9IDB4NDAwMDAwMDA7CisgICAgICAgIGhhc2ggPSAweDA4MDAwMDAwOwog
CiAgICAgcmV0dXJuIGhhc2g7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46704</attachid>
            <date>2010-01-15 12:54:10 -0800</date>
            <delta_ts>2010-01-16 19:14:31 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>patch.ptrandstring.txt</filename>
            <type>text/plain</type>
            <size>10792</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzMyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDEtMTUgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91
Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzczMQorICAg
ICAgICBSZW1vdmUgdXNlcyBvZiBQdHJBbmRGbGFncyBmcm9tIFdlYkNvcmU6OlN0cmluZ0ltcGwu
CisKKyAgICAgICAgVGhlc2UgYnJlYWsgdGhlIE9TIFggTGVha3MgdG9vbC4gIE1vdmUgdGhlIG1h
bmFnZW1lbnQgb2YgbnVsbC10ZXJtaW5hdGVkIGNvcGllcworICAgICAgICBvdXQgZnJvbSBTdHJp
bmdJbXBsIHRvIFN0cmluZywgYW5kIHVzZSBhIGJpdCBzdG9sZW4gZnJvbSB0aGUgaGFzaCB0byBo
b2xkIHRoZQorICAgICAgICAnSW5UYWJsZScgZmxhZy4KKworICAgICAgICAqIHBsYXRmb3JtL3Nx
bC9TUUxpdGVGaWxlU3lzdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0
ZW06Om9wZW5EYXRhYmFzZSk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OnByZXBhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS90ZXh0L1BsYXRmb3JtU3RyaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpjb3B5V2l0aE51bGxUZXJtaW5hdGlvbik6
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0cmluZ0ltcGw6OlN0cmluZ0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1w
bDo6flN0cmluZ0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmNyb3NzVGhyZWFkU3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnNoYXJlZEJ1ZmZlcik6CisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjppblRh
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OnNldEluVGFibGUpOgorCiAyMDEw
LTAxLTE0ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSdWJiZXIgc3RhbXBlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDUzMzIyKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDgg
KzQ5LDggQEAgdm9pZCBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUwogaW50IFNR
TGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzcWxp
dGUzKiogZGF0YWJhc2UpCiB7CiAgICAgLy8gU1FMaXRlIGV4cGVjdHMgYSBudWxsIHRlcm1pbmF0
b3Igb24gaXRzIFVURi0xNiBzdHJpbmdzLgotICAgIFN0cmluZyBwYXRoID0gZmlsZU5hbWU7Ci0g
ICAgcmV0dXJuIHNxbGl0ZTNfb3BlbjE2KHBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRp
b24oKSwgZGF0YWJhc2UpOworICAgIE93blB0cjxjb25zdCBVQ2hhcio+IHBhdGgoZmlsZU5hbWUu
Y29weVdpdGhOdWxsVGVybWluYXRpb24oKSk7CisgICAgcmV0dXJuIHNxbGl0ZTNfb3BlbjE2KHBh
dGguZ2V0KCksIGRhdGFiYXNlKTsKIH0KIAogU3RyaW5nIFNRTGl0ZUZpbGVTeXN0ZW06OmdldEZp
bGVOYW1lRm9yTmV3RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBkYkRpciwgY29uc3QgU3RyaW5nJiwK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAkocmV2aXNpb24g
NTMzMjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw5IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OnByZXBhcmUo
KQogICAgIEFTU0VSVCghbV9pc1ByZXBhcmVkKTsKICAgICBjb25zdCB2b2lkKiB0YWlsOwogICAg
IExPRyhTUUxEYXRhYmFzZSwgIlNRTCAtIHByZXBhcmUgLSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5k
YXRhKCkpOwotICAgIGludCBlcnJvciA9IHNxbGl0ZTNfcHJlcGFyZTE2X3YyKG1fZGF0YWJhc2Uu
c3FsaXRlM0hhbmRsZSgpLCBtX3F1ZXJ5LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCks
IC0xLCAmbV9zdGF0ZW1lbnQsICZ0YWlsKTsKKyAgICBpZiAoIW1fcXVlcnlXaXRoTnVsbFRlcm1p
bmF0aW9uKQorICAgICAgICBtX3F1ZXJ5V2l0aE51bGxUZXJtaW5hdGlvbi5zZXQobV9xdWVyeS5j
b3B5V2l0aE51bGxUZXJtaW5hdGlvbigpKTsKKyAgICBpbnQgZXJyb3IgPSBzcWxpdGUzX3ByZXBh
cmUxNl92MihtX2RhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwgbV9xdWVyeVdpdGhOdWxsVGVybWlu
YXRpb24uZ2V0KCksIC0xLCAmbV9zdGF0ZW1lbnQsICZ0YWlsKTsKICAgICBpZiAoZXJyb3IgIT0g
U1FMSVRFX09LKQogICAgICAgICBMT0coU1FMRGF0YWJhc2UsICJzcWxpdGUzX3ByZXBhcmUxNiBm
YWlsZWQgKCVpKVxuJXNcbiVzIiwgZXJyb3IsIG1fcXVlcnkuYXNjaWkoKS5kYXRhKCksIHNxbGl0
ZTNfZXJybXNnKG1fZGF0YWJhc2Uuc3FsaXRlM0hhbmRsZSgpKSk7CiAjaWZuZGVmIE5ERUJVRwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgJKHJldmlzaW9uIDUzMzIy
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTkxLDYgKzkxLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTUUxpdGVEYXRhYmFz
ZSYgbV9kYXRhYmFzZTsKICAgICBTdHJpbmcgbV9xdWVyeTsKKyAgICBPd25QdHI8Y29uc3QgVUNo
YXIqPiBtX3F1ZXJ5V2l0aE51bGxUZXJtaW5hdGlvbjsKICAgICBzcWxpdGUzX3N0bXQqIG1fc3Rh
dGVtZW50OwogI2lmbmRlZiBOREVCVUcKICAgICBib29sIG1faXNQcmVwYXJlZDsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCShyZXZpc2lvbiA1MzMyMikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC05
Myw3ICs5Myw3IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAg
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3Q7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCk7CisgICAgY29uc3QgVUNoYXIqIGNvcHlXaXRoTnVs
bFRlcm1pbmF0aW9uKCkgY29uc3Q7CiAgICAgCiAgICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25l
ZCBpKSBjb25zdDsgLy8gaWYgaSA+PSBsZW5ndGgoKSwgcmV0dXJucyAwICAgIAogICAgIFVDaGFy
MzIgY2hhcmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCkgY29uc3Q7IC8vIERpdHRvLgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAJKHJldmlzaW9uIDUzMzIyKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyOSwxNCArMzI5LDE1IEBA
IGNvbnN0IFVDaGFyKiBTdHJpbmc6OmNoYXJhY3RlcnMoKSBjb25zdAogICAgIHJldHVybiBtX2lt
cGwtPmNoYXJhY3RlcnMoKTsKIH0KIAotY29uc3QgVUNoYXIqIFN0cmluZzo6Y2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKQorY29uc3QgVUNoYXIqIFN0cmluZzo6Y29weVdpdGhOdWxsVGVy
bWluYXRpb24oKSBjb25zdAogewogICAgIGlmICghbV9pbXBsKQogICAgICAgICByZXR1cm4gMDsK
LSAgICBpZiAobV9pbXBsLT5oYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoKSkKLSAgICAgICAg
cmV0dXJuIG1faW1wbC0+Y2hhcmFjdGVycygpOwotICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNy
ZWF0ZVdpdGhUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoKm1faW1wbCk7Ci0gICAgcmV0dXJuIG1f
aW1wbC0+Y2hhcmFjdGVycygpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1faW1wbC0+bGVuZ3Ro
KCk7CisgICAgVUNoYXIqIGJ1ZmZlciA9IG5ldyBVQ2hhcltsZW5ndGggKyAxXTsKKyAgICBtZW1j
cHkoYnVmZmVyLCBtX2ltcGwtPmNoYXJhY3RlcnMoKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7
CisgICAgYnVmZmVyW2xlbmd0aF0gPSAwOworICAgIHJldHVybiBidWZmZXI7CiB9CiAKIFN0cmlu
ZyBTdHJpbmc6OmZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDUzMzIyKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw4IEBA
IFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoKQogICAgIDogbV9kYXRhKDApCiAgICAgLCBtX2xlbmd0
aCgwKQogICAgICwgbV9oYXNoKDApCisgICAgLCBtX2luVGFibGUoZmFsc2UpCisgICAgLCBtX3No
YXJlZEJ1ZmZlcigwKQogewogICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXNoIGlzIGNvbXB1dGVk
IHNvIHRoYXQgQXRvbWljU3RyaW5nSGFzaCBjYW4gY2FsbCBleGlzdGluZ0hhc2goKQogICAgIC8v
IHdpdGggaW1wdW5pdHkuIFRoZSBlbXB0eSBzdHJpbmcgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGlz
IG5ldmVyIGVudGVyZWQgaW50bwpAQCAtOTQsNiArOTYsOCBAQCBpbmxpbmUgU3RyaW5nSW1wbDo6
U3RyaW5nSW1wbChjb25zdCBVQ2hhCiAgICAgOiBtX2RhdGEoY2hhcmFjdGVycykKICAgICAsIG1f
bGVuZ3RoKGxlbmd0aCkKICAgICAsIG1faGFzaCgwKQorICAgICwgbV9pblRhYmxlKGZhbHNlKQor
ICAgICwgbV9zaGFyZWRCdWZmZXIoMCkKIHsKICAgICBBU1NFUlQoY2hhcmFjdGVycyk7CiAgICAg
QVNTRVJUKGxlbmd0aCk7CkBAIC0xMDQsNyArMTA4LDcgQEAgU3RyaW5nSW1wbDo6flN0cmluZ0lt
cGwoKQogICAgIGlmIChpblRhYmxlKCkpCiAgICAgICAgIEF0b21pY1N0cmluZzo6cmVtb3ZlKHRo
aXMpOwogICAgIGlmICghYnVmZmVySXNJbnRlcm5hbCgpKSB7Ci0gICAgICAgIFNoYXJlZFVDaGFy
KiBzaGFyZWRCdWZmZXIgPSBtX3NoYXJlZEJ1ZmZlckFuZEZsYWdzLmdldCgpOworICAgICAgICBT
aGFyZWRVQ2hhciogc2hhcmVkQnVmZmVyID0gbV9zaGFyZWRCdWZmZXI7CiAgICAgICAgIGlmIChz
aGFyZWRCdWZmZXIpCiAgICAgICAgICAgICBzaGFyZWRCdWZmZXItPmRlcmVmKCk7CiAgICAgICAg
IGVsc2UKQEAgLTk3MCw3ICs5NzQsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0lt
cGw6OmNyZWF0CiAgICAgaWYgKHNoYXJlZEJ1ZmZlcikgewogICAgICAgICBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IGltcGwgPSBhZG9wdFJlZihuZXcgU3RyaW5nSW1wbChzdHIuZGF0YSgpLCBzdHIu
c2l6ZSgpKSk7CiAgICAgICAgIHNoYXJlZEJ1ZmZlci0+cmVmKCk7Ci0gICAgICAgIGltcGwtPm1f
c2hhcmVkQnVmZmVyQW5kRmxhZ3Muc2V0KHNoYXJlZEJ1ZmZlcik7CisgICAgICAgIGltcGwtPm1f
c2hhcmVkQnVmZmVyID0gc2hhcmVkQnVmZmVyOwogICAgICAgICByZXR1cm4gaW1wbDsKICAgICB9
CiAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZShzdHIuZGF0YSgpLCBzdHIuc2l6ZSgpKTsK
QEAgLTk4NiwyMSArOTkwLDYgQEAgSlNDOjpVU3RyaW5nIFN0cmluZ0ltcGw6OnVzdHJpbmcoKQog
fQogI2VuZGlmCiAKLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXRlV2l0
aFRlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcihjb25zdCBTdHJpbmdJbXBsJiBzdHJpbmcpCi17Ci0g
ICAgLy8gVXNlIGNyZWF0ZVVuaW5pdGlhbGl6ZWQgaW5zdGVhZCBvZiAnbmV3IFN0cmluZ0ltcGwn
IHNvIHRoYXQgdGhlIHN0cmluZyBhbmQgaXRzIGJ1ZmZlcgotICAgIC8vIGdldCBhbGxvY2F0ZWQg
aW4gYSBzaW5nbGUgbWFsbG9jIGJsb2NrLgotICAgIFVDaGFyKiBkYXRhOwotICAgIGludCBsZW5n
dGggPSBzdHJpbmcubV9sZW5ndGg7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHRlcm1pbmF0ZWRT
dHJpbmcgPSBjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCArIDEsIGRhdGEpOwotICAgIG1lbWNw
eShkYXRhLCBzdHJpbmcubV9kYXRhLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKLSAgICBkYXRh
W2xlbmd0aF0gPSAwOwotICAgIHRlcm1pbmF0ZWRTdHJpbmctPm1fbGVuZ3RoLS07Ci0gICAgdGVy
bWluYXRlZFN0cmluZy0+bV9oYXNoID0gc3RyaW5nLm1faGFzaDsKLSAgICB0ZXJtaW5hdGVkU3Ry
aW5nLT5tX3NoYXJlZEJ1ZmZlckFuZEZsYWdzLnNldEZsYWcoSGFzVGVybWluYXRpbmdOdWxsQ2hh
cmFjdGVyKTsKLSAgICByZXR1cm4gdGVybWluYXRlZFN0cmluZy5yZWxlYXNlKCk7Ci19Ci0KIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6dGhyZWFkc2FmZUNvcHkoKSBjb25zdAog
ewogICAgIC8vIFNwZWNpYWwtY2FzZSBlbXB0eSBzdHJpbmdzIHRvIG1ha2Ugc3VyZSB0aGF0IHBl
ci10aHJlYWQgZW1wdHkgc3RyaW5nIGluc3RhbmNlIGlzbid0IHJldHVybmVkLgpAQCAtMTAxNCw3
ICsxMDAzLDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcm9zcwogICAg
IFNoYXJlZFVDaGFyKiBzaGFyZWQgPSBzaGFyZWRCdWZmZXIoKTsKICAgICBpZiAoc2hhcmVkKSB7
CiAgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBpbXBsID0gYWRvcHRSZWYobmV3IFN0cmluZ0lt
cGwobV9kYXRhLCBtX2xlbmd0aCkpOwotICAgICAgICBpbXBsLT5tX3NoYXJlZEJ1ZmZlckFuZEZs
YWdzLnNldChzaGFyZWQtPmNyb3NzVGhyZWFkQ29weSgpLnJlbGVhc2VSZWYoKSk7CisgICAgICAg
IGltcGwtPm1fc2hhcmVkQnVmZmVyID0gc2hhcmVkLT5jcm9zc1RocmVhZENvcHkoKS5yZWxlYXNl
UmVmKCk7CiAgICAgICAgIHJldHVybiBpbXBsLnJlbGVhc2UoKTsKICAgICB9CiAKQEAgLTEwMjcs
OSArMTAxNiw5IEBAIFN0cmluZ0ltcGw6OlNoYXJlZFVDaGFyKiBTdHJpbmdJbXBsOjpzaGEKICAg
ICBpZiAobV9sZW5ndGggPCBtaW5MZW5ndGhUb1NoYXJlIHx8IGJ1ZmZlcklzSW50ZXJuYWwoKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoIW1fc2hhcmVkQnVmZmVyQW5kRmxhZ3MuZ2V0
KCkpCi0gICAgICAgIG1fc2hhcmVkQnVmZmVyQW5kRmxhZ3Muc2V0KFNoYXJlZFVDaGFyOjpjcmVh
dGUobmV3IE93bkZhc3RNYWxsb2NQdHI8VUNoYXI+KGNvbnN0X2Nhc3Q8VUNoYXIqPihtX2RhdGEp
KSkucmVsZWFzZVJlZigpKTsKLSAgICByZXR1cm4gbV9zaGFyZWRCdWZmZXJBbmRGbGFncy5nZXQo
KTsKKyAgICBpZiAoIW1fc2hhcmVkQnVmZmVyKQorICAgICAgICBtX3NoYXJlZEJ1ZmZlciA9IFNo
YXJlZFVDaGFyOjpjcmVhdGUobmV3IE93bkZhc3RNYWxsb2NQdHI8VUNoYXI+KGNvbnN0X2Nhc3Q8
VUNoYXIqPihtX2RhdGEpKSkucmVsZWFzZVJlZigpOworICAgIHJldHVybiBtX3NoYXJlZEJ1ZmZl
cjsKIH0KIAogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDUz
MzIyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVk
ZSA8d3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25GYXN0TWFs
bG9jUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1B0ckFuZEZsYWdzLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTgyLDggKzgxLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBjaGFyKik7CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgs
IFVDaGFyKiYgZGF0YSk7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVh
dGVXaXRoVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKGNvbnN0IFN0cmluZ0ltcGwmKTsKLQogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0
ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBhZG9wdChTdHJpbmdCdWZmZXImKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBhZG9wdChWZWN0b3I8VUNoYXI+Jik7CkBAIC05NiwxMCArOTMsOCBAQCBw
dWJsaWM6CiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSB7IHJldHVybiBtX2RhdGE7IH0K
ICAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsgfQogCi0gICAgYm9vbCBo
YXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEJ1ZmZl
ckFuZEZsYWdzLmlzRmxhZ1NldChIYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIpOyB9Ci0KLSAg
ICBib29sIGluVGFibGUoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEJ1ZmZlckFuZEZsYWdzLmlz
RmxhZ1NldChJblRhYmxlKTsgfQotICAgIHZvaWQgc2V0SW5UYWJsZSgpIHsgcmV0dXJuIG1fc2hh
cmVkQnVmZmVyQW5kRmxhZ3Muc2V0RmxhZyhJblRhYmxlKTsgfQorICAgIGJvb2wgaW5UYWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW5UYWJsZTsgfQorICAgIHZvaWQgc2V0SW5UYWJsZSgpIHsgbV9p
blRhYmxlID0gdHJ1ZTsgfQogCiAgICAgdW5zaWduZWQgaGFzaCgpIHsgaWYgKG1faGFzaCA9PSAw
KSBtX2hhc2ggPSBjb21wdXRlSGFzaChtX2RhdGEsIG1fbGVuZ3RoKTsgcmV0dXJuIG1faGFzaDsg
fQogICAgIHVuc2lnbmVkIGV4aXN0aW5nSGFzaCgpIGNvbnN0IHsgQVNTRVJUKG1faGFzaCk7IHJl
dHVybiBtX2hhc2g7IH0KQEAgLTE4OSwxNSArMTg0LDExIEBAIHByaXZhdGU6CiAgICAgLy8gSW4g
dGhpcyBjYXNlLCB0aGUgbV9kYXRhIHBvaW50ZXIgaXMgYW4gImludGVybmFsIGJ1ZmZlciIsIGFu
ZCBkb2VzIG5vdCBuZWVkIHRvIGJlIGRlYWxsb2NhdGVkLgogICAgIGJvb2wgYnVmZmVySXNJbnRl
cm5hbCgpIHsgcmV0dXJuIG1fZGF0YSA9PSByZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4o
dGhpcyArIDEpOyB9CiAKLSAgICBlbnVtIFN0cmluZ0ltcGxGbGFncyB7Ci0gICAgICAgIEhhc1Rl
cm1pbmF0aW5nTnVsbENoYXJhY3RlciwKLSAgICAgICAgSW5UYWJsZSwKLSAgICB9OwotCiAgICAg
Y29uc3QgVUNoYXIqIG1fZGF0YTsKICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKLSAgICBtdXRhYmxl
IHVuc2lnbmVkIG1faGFzaDsKLSAgICBQdHJBbmRGbGFnczxTaGFyZWRVQ2hhciwgU3RyaW5nSW1w
bEZsYWdzPiBtX3NoYXJlZEJ1ZmZlckFuZEZsYWdzOworICAgIG11dGFibGUgdW5zaWduZWQgbV9o
YXNoIDogMzE7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2luVGFibGUgOiAxOworICAgIFNoYXJl
ZFVDaGFyKiBtX3NoYXJlZEJ1ZmZlcjsKICAgICAvLyBUaGVyZSBpcyBhIGZpY3RpdGlvdXMgdmFy
aWFibGUtbGVuZ3RoIFVDaGFyIGFycmF5IGF0IHRoZSBlbmQsIHdoaWNoIGlzIHVzZWQKICAgICAv
LyBhcyB0aGUgaW50ZXJuYWwgYnVmZmVyIGJ5IHRoZSBjcmVhdGVVbmluaXRpYWxpemVkIGFuZCBj
cmVhdGUgbWV0aG9kcy4KIH07Cg==
</data>
<flag name="review"
          id="29009"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46718</attachid>
            <date>2010-01-15 16:44:46 -0800</date>
            <delta_ts>2010-02-08 15:11:02 -0800</delta_ts>
            <desc>New implementation for UStringImpl.</desc>
            <filename>patch.ptrandustring.2.txt</filename>
            <type>text/plain</type>
            <size>14126</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUzMzI3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDEtMTUgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zMzczMQorICAgICAgICBSZW1vdmUgVW50eXBlZFB0ckFuZEJpdGZpZWxkIGZy
b20gVVN0cmluZ0ltcGwgKGFraW4gdG8gUHRyQW5kRmxhZ3MpLgorCisgICAgICAgIFRoaXMgYnJl
YWsgdGhlIE9TIFggTGVha3MgdG9vbC4gIEluc3RlYWQsIGZyZWUgdXAgc29tZSBtb3JlIGJpdHMg
ZnJvbSB0aGUgaGFzaC4KKworICAgICAgICAqIHJ1bnRpbWUvVVN0cmluZ0ltcGwuY3BwOgorICAg
ICAgICAoSlNDOjpVU3RyaW5nSW1wbDo6c2hhcmVkQnVmZmVyKToKKyAgICAgICAgKEpTQzo6VVN0
cmluZ0ltcGw6On5VU3RyaW5nSW1wbCk6CisgICAgICAgICogcnVudGltZS9VU3RyaW5nSW1wbC5o
OgorICAgICAgICAoSlNDOjpVU3RyaW5nSW1wbDo6Y29zdCk6CisgICAgICAgIChKU0M6OlVTdHJp
bmdJbXBsOjpjaGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6VVN0cmluZ0ltcGw6OlVT
dHJpbmdJbXBsKToKKyAgICAgICAgKEpTQzo6VVN0cmluZ0ltcGw6OmJ1ZmZlck93bmVyU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6VVN0cmluZ0ltcGw6Oik6CisgICAgICAgICogd3RmL1N0cmluZ0hh
c2hGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdURjo6c3RyaW5nSGFzaCk6CisKIDIwMTAtMDEtMTQg
IEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3Ry
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3Bw
CShyZXZpc2lvbiA1MzMyNykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0OCw4ICszNDgsNiBAQCBVU3RyaW5nIFVTdHJpbmc6OmZyb20o
ZG91YmxlIGQpCiAKIFVTdHJpbmcgVVN0cmluZzo6c3BsaWNlU3Vic3RyaW5nc1dpdGhTZXBhcmF0
b3JzKGNvbnN0IFJhbmdlKiBzdWJzdHJpbmdSYW5nZXMsIGludCByYW5nZUNvdW50LCBjb25zdCBV
U3RyaW5nKiBzZXBhcmF0b3JzLCBpbnQgc2VwYXJhdG9yQ291bnQpIGNvbnN0CiB7Ci0gICAgbV9y
ZXAtPmNoZWNrQ29uc2lzdGVuY3koKTsKLQogICAgIGlmIChyYW5nZUNvdW50ID09IDEgJiYgc2Vw
YXJhdG9yQ291bnQgPT0gMCkgewogICAgICAgICBpbnQgdGhpc1NpemUgPSBzaXplKCk7CiAgICAg
ICAgIGludCBwb3NpdGlvbiA9IHN1YnN0cmluZ1Jhbmdlc1swXS5wb3NpdGlvbjsKQEAgLTM5MSw4
ICszODksNiBAQCBVU3RyaW5nIFVTdHJpbmc6OnNwbGljZVN1YnN0cmluZ3NXaXRoU2VwCiAKIFVT
dHJpbmcgVVN0cmluZzo6cmVwbGFjZVJhbmdlKGludCByYW5nZVN0YXJ0LCBpbnQgcmFuZ2VMZW5n
dGgsIGNvbnN0IFVTdHJpbmcmIHJlcGxhY2VtZW50KSBjb25zdAogewotICAgIG1fcmVwLT5jaGVj
a0NvbnNpc3RlbmN5KCk7Ci0KICAgICBpbnQgcmVwbGFjZW1lbnRMZW5ndGggPSByZXBsYWNlbWVu
dC5zaXplKCk7CiAgICAgaW50IHRvdGFsTGVuZ3RoID0gc2l6ZSgpIC0gcmFuZ2VMZW5ndGggKyBy
ZXBsYWNlbWVudExlbmd0aDsKICAgICBpZiAodG90YWxMZW5ndGggPT0gMCkKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZ0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVVN0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiA1MzMyNykKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw0
OCArMzUsNDggQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIEpTQyB7CiAgCi1T
aGFyZWRVQ2hhciogVVN0cmluZ0ltcGw6OmJhc2VTaGFyZWRCdWZmZXIoKQotewotICAgIEFTU0VS
VCgoYnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVyU2hhcmVkKQotICAgICAgICB8fCAoKGJ1ZmZl
ck93bmVyc2hpcCgpID09IEJ1ZmZlck93bmVkKSAmJiAhbV9kYXRhQnVmZmVyLmFzUHRyPHZvaWQq
PigpKSk7Ci0KLSAgICBpZiAoYnVmZmVyT3duZXJzaGlwKCkgIT0gQnVmZmVyU2hhcmVkKQotICAg
ICAgICBtX2RhdGFCdWZmZXIgPSBVbnR5cGVkUHRyQW5kQml0ZmllbGQoU2hhcmVkVUNoYXI6OmNy
ZWF0ZShuZXcgT3duRmFzdE1hbGxvY1B0cjxVQ2hhcj4obV9kYXRhKSkucmVsZWFzZVJlZigpLCBC
dWZmZXJTaGFyZWQpOwotCi0gICAgcmV0dXJuIG1fZGF0YUJ1ZmZlci5hc1B0cjxTaGFyZWRVQ2hh
cio+KCk7Ci19Ci0KIFNoYXJlZFVDaGFyKiBVU3RyaW5nSW1wbDo6c2hhcmVkQnVmZmVyKCkKIHsK
LSAgICBpZiAobV9sZW5ndGggPCBzX21pbkxlbmd0aFRvU2hhcmUpCisgICAgaWYgKG1fbGVuZ3Ro
IDwgc19taW5MZW5ndGhUb1NoYXJlIHx8IGlzU3RhdGljKCkpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIEFTU0VSVCghaXNTdGF0aWMoKSk7CiAKLSAgICBVU3RyaW5nSW1wbCogb3duZXIgPSBidWZm
ZXJPd25lclN0cmluZygpOwotICAgIGlmIChvd25lci0+YnVmZmVyT3duZXJzaGlwKCkgPT0gQnVm
ZmVySW50ZXJuYWwpCisgICAgc3dpdGNoIChidWZmZXJPd25lcnNoaXAoKSkgeworICAgIGNhc2Ug
QnVmZmVySW50ZXJuYWw6CiAgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgQnVmZmVyT3duZWQ6
CisgICAgICAgIG1fYnVmZmVyU2hhcmVkID0gU2hhcmVkVUNoYXI6OmNyZWF0ZShuZXcgT3duRmFz
dE1hbGxvY1B0cjxVQ2hhcj4obV9kYXRhKSkucmVsZWFzZVJlZigpOworICAgICAgICBtX3JlZkNv
dW50QW5kRmxhZ3MgJj0gfnNfcmVmQ291bnRNYXNrQnVmZmVyT3duZXJzaGlwOworICAgICAgICBt
X3JlZkNvdW50QW5kRmxhZ3MgfD0gQnVmZmVyU2hhcmVkOworICAgICAgICByZXR1cm4gbV9idWZm
ZXJTaGFyZWQ7CisgICAgY2FzZSBCdWZmZXJTdWJzdHJpbmc6CisgICAgICAgIHJldHVybiBtX2J1
ZmZlclN1YnN0cmluZy0+c2hhcmVkQnVmZmVyKCk7CisgICAgY2FzZSBCdWZmZXJTaGFyZWQ6Cisg
ICAgICAgIHJldHVybiBtX2J1ZmZlclNoYXJlZDsKKyAgICB9CiAKLSAgICByZXR1cm4gb3duZXIt
PmJhc2VTaGFyZWRCdWZmZXIoKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gMDsKIH0KIAogVVN0cmluZ0ltcGw6On5VU3RyaW5nSW1wbCgpCiB7CiAgICAgQVNTRVJUKCFp
c1N0YXRpYygpKTsKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKICAgICBpZiAoaXNJZGVudGlm
aWVyKCkpCiAgICAgICAgIElkZW50aWZpZXI6OnJlbW92ZSh0aGlzKTsKIAotICAgIGlmIChidWZm
ZXJPd25lcnNoaXAoKSAhPSBCdWZmZXJJbnRlcm5hbCkgewotICAgICAgICBpZiAoYnVmZmVyT3du
ZXJzaGlwKCkgPT0gQnVmZmVyT3duZWQpCi0gICAgICAgICAgICBmYXN0RnJlZShtX2RhdGEpOwot
ICAgICAgICBlbHNlIGlmIChidWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJTdWJzdHJpbmcpCi0g
ICAgICAgICAgICBtX2RhdGFCdWZmZXIuYXNQdHI8VVN0cmluZ0ltcGwqPigpLT5kZXJlZigpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChidWZmZXJPd25lcnNoaXAoKSA9PSBC
dWZmZXJTaGFyZWQpOwotICAgICAgICAgICAgbV9kYXRhQnVmZmVyLmFzUHRyPFNoYXJlZFVDaGFy
Kj4oKS0+ZGVyZWYoKTsKLSAgICAgICAgfQorICAgIHN3aXRjaCAoYnVmZmVyT3duZXJzaGlwKCkp
IHsKKyAgICBjYXNlIEJ1ZmZlckludGVybmFsOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBC
dWZmZXJPd25lZDoKKyAgICAgICAgZmFzdEZyZWUobV9kYXRhKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQnVmZmVyU3Vic3RyaW5nOgorICAgICAgICBtX2J1ZmZlclN1YnN0cmluZy0+ZGVy
ZWYoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQnVmZmVyU2hhcmVkOgorICAgICAgICBt
X2J1ZmZlclN1YnN0cmluZy0+ZGVyZWYoKTsKICAgICB9CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nSW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZ0ltcGwuaAkocmV2aXNpb24gNTMz
MjcpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDQ4ICs0MCw2IEBAIGNsYXNzIElkZW50aWZpZXJUYWJsZTsKICAgCiB0eXBlZGVm
IENyb3NzVGhyZWFkUmVmQ291bnRlZDxPd25GYXN0TWFsbG9jUHRyPFVDaGFyPiA+IFNoYXJlZFVD
aGFyOwogCi1jbGFzcyBVbnR5cGVkUHRyQW5kQml0ZmllbGQgewotcHVibGljOgotICAgIFVudHlw
ZWRQdHJBbmRCaXRmaWVsZCgpIHt9Ci0KLSAgICBVbnR5cGVkUHRyQW5kQml0ZmllbGQodm9pZCog
cHRyVmFsdWUsIHVpbnRwdHJfdCBiaXRWYWx1ZSkKLSAgICAgICAgOiBtX3ZhbHVlKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihwdHJWYWx1ZSkgfCBiaXRWYWx1ZSkKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgICAgICwgbV9sZWFrc1B0cihwdHJWYWx1ZSkKLSNlbmRpZgotICAgIHsKLSAgICAgICAg
QVNTRVJUKHB0clZhbHVlID09IGFzUHRyPHZvaWQqPigpKTsKLSAgICAgICAgQVNTRVJUKCgqdGhp
cyAmIH5zX2FsaWdubWVudE1hc2spID09IGJpdFZhbHVlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIFQgYXNQdHIoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9j
YXN0PFQ+KG1fdmFsdWUgJiBzX2FsaWdubWVudE1hc2spOyB9Ci0KLSAgICBVbnR5cGVkUHRyQW5k
Qml0ZmllbGQmIG9wZXJhdG9yJj0odWludHB0cl90IGJpdHMpCi0gICAgewotICAgICAgICBtX3Zh
bHVlICY9IGJpdHMgfCBzX2FsaWdubWVudE1hc2s7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAg
ICB9Ci0KLSAgICBVbnR5cGVkUHRyQW5kQml0ZmllbGQmIG9wZXJhdG9yfD0odWludHB0cl90IGJp
dHMpCi0gICAgewotICAgICAgICBtX3ZhbHVlIHw9IGJpdHMgJiB+c19hbGlnbm1lbnRNYXNrOwot
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgdWludHB0cl90IG9wZXJhdG9yJih1
aW50cHRyX3QgbWFzaykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlICYgbWFz
ayAmIH5zX2FsaWdubWVudE1hc2s7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25z
dCB1aW50cHRyX3Qgc19hbGlnbm1lbnRNYXNrID0gfnN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMHg3
KTsKLSAgICB1aW50cHRyX3QgbV92YWx1ZTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIHZvaWQq
IG1fbGVha3NQdHI7IC8vIE9ubHkgdXNlZCB0byBhbGxvdyB0b29scyBsaWtlIGxlYWtzIG9uIE9T
WCB0byBkZXRlY3QgdGhhdCB0aGUgbWVtb3J5IGlzIHJlZmVyZW5jZWQuCi0jZW5kaWYKLX07Ci0K
IGNsYXNzIFVTdHJpbmdJbXBsIDogTm9uY29weWFibGUgewogcHVibGljOgogICAgIHRlbXBsYXRl
PHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KQEAgLTEwNSw4ICs2MywxMCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8VVN0cmluZ0ltcGw+IGNyZWF0ZShQYXNzUmVmUHRyPFVTdHJpbmdJ
bXBsPiByZXAsIGludCBvZmZzZXQsIGludCBsZW5ndGgpCiAgICAgewogICAgICAgICBBU1NFUlQo
cmVwKTsKLSAgICAgICAgcmVwLT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVVN0cmluZ0ltcGwocmVwLT5tX2RhdGEgKyBvZmZzZXQsIGxlbmd0aCwgcmVw
LT5idWZmZXJPd25lclN0cmluZygpKSk7CisgICAgICAgIGlmIChyZXAtPmJ1ZmZlck93bmVyc2hp
cCgpID09IEJ1ZmZlclN1YnN0cmluZykKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
VVN0cmluZ0ltcGwocmVwLT5tX2RhdGEgKyBvZmZzZXQsIGxlbmd0aCwgcmVwLT5tX2J1ZmZlclN1
YnN0cmluZykpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFVTdHJpbmdJbXBsKHJlcC0+bV9kYXRhICsgb2Zmc2V0LCBsZW5ndGgsIHJlcCkpOwogICAgIH0K
IAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVTdHJpbmdJbXBsPiBjcmVhdGUoUGFzc1JlZlB0cjxT
aGFyZWRVQ2hhcj4gc2hhcmVkQnVmZmVyLCBVQ2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQpAQCAt
MTUxLDIxICsxMTEsMjggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgLy8gRm9yIHN1YnN0cmlu
Z3MsIHJldHVybiB0aGUgY29zdCBvZiB0aGUgYmFzZSBzdHJpbmcuCiAgICAgICAgIGlmIChidWZm
ZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJTdWJzdHJpbmcpCi0gICAgICAgICAgICByZXR1cm4gbV9k
YXRhQnVmZmVyLmFzUHRyPFVTdHJpbmdJbXBsKj4oKS0+Y29zdCgpOwotCi0gICAgICAgIGlmICht
X2RhdGFCdWZmZXIgJiBzX3JlcG9ydGVkQ29zdEJpdCkKKyAgICAgICAgICAgIHJldHVybiBtX2J1
ZmZlclN1YnN0cmluZy0+Y29zdCgpOworICAgICAgICBpZiAobV9yZWZDb3VudEFuZEZsYWdzICYg
c19yZWZDb3VudEZsYWdIYXNSZXBvcnRlZENvc3QpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgbV9kYXRhQnVmZmVyIHw9IHNfcmVwb3J0ZWRDb3N0Qml0OworICAgICAgICBBU1NFUlQo
IWlzU3RhdGljKCkpOworICAgICAgICBtX3JlZkNvdW50QW5kRmxhZ3MgfD0gc19yZWZDb3VudEZs
YWdIYXNSZXBvcnRlZENvc3Q7CiAgICAgICAgIHJldHVybiBtX2xlbmd0aDsKICAgICB9CiAgICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgaWYgKCFtX2hhc2gpIG1faGFzaCA9IGNvbXB1dGVIYXNo
KGRhdGEoKSwgbV9sZW5ndGgpOyByZXR1cm4gbV9oYXNoOyB9CiAgICAgdW5zaWduZWQgZXhpc3Rp
bmdIYXNoKCkgY29uc3QgeyBBU1NFUlQobV9oYXNoKTsgcmV0dXJuIG1faGFzaDsgfSAvLyBmYXN0
IHBhdGggZm9yIElkZW50aWZpZXJzCiAgICAgdm9pZCBzZXRIYXNoKHVuc2lnbmVkIGhhc2gpIHsg
QVNTRVJUKGhhc2ggPT0gY29tcHV0ZUhhc2goZGF0YSgpLCBtX2xlbmd0aCkpOyBtX2hhc2ggPSBo
YXNoOyB9IC8vIGZhc3QgcGF0aCBmb3IgSWRlbnRpZmllcnMKLSAgICBib29sIGlzSWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1faXNJZGVudGlmaWVyOyB9Ci0gICAgdm9pZCBzZXRJc0lkZW50
aWZpZXIoYm9vbCBpc0lkZW50aWZpZXIpIHsgbV9pc0lkZW50aWZpZXIgPSBpc0lkZW50aWZpZXI7
IH0KKyAgICBib29sIGlzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVmQ291bnRBbmRG
bGFncyAmIHNfcmVmQ291bnRGbGFnSXNJZGVudGlmaWVyOyB9CisgICAgdm9pZCBzZXRJc0lkZW50
aWZpZXIoYm9vbCBpc0lkZW50aWZpZXIpCisgICAgeworICAgICAgICBBU1NFUlQoIWlzU3RhdGlj
KCkpOworICAgICAgICBpZiAoaXNJZGVudGlmaWVyKQorICAgICAgICAgICAgbV9yZWZDb3VudEFu
ZEZsYWdzIHw9IHNfcmVmQ291bnRGbGFnSXNJZGVudGlmaWVyOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX3JlZkNvdW50QW5kRmxhZ3MgJj0gfnNfcmVmQ291bnRGbGFnSXNJZGVudGlmaWVy
OworICAgIH0KIAotICAgIFVTdHJpbmdJbXBsKiByZWYoKSB7IG1fcmVmQ291bnQgKz0gc19yZWZD
b3VudEluY3JlbWVudDsgcmV0dXJuIHRoaXM7IH0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZGVy
ZWYoKSB7IGlmICghKG1fcmVmQ291bnQgLT0gc19yZWZDb3VudEluY3JlbWVudCkpIGRlbGV0ZSB0
aGlzOyB9CisgICAgVVN0cmluZ0ltcGwqIHJlZigpIHsgbV9yZWZDb3VudEFuZEZsYWdzICs9IHNf
cmVmQ291bnRJbmNyZW1lbnQ7IHJldHVybiB0aGlzOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lk
IGRlcmVmKCkgeyBtX3JlZkNvdW50QW5kRmxhZ3MgLT0gc19yZWZDb3VudEluY3JlbWVudDsgaWYg
KCEobV9yZWZDb3VudEFuZEZsYWdzICYgc19yZWZDb3VudE1hc2spKSBkZWxldGUgdGhpczsgfQog
CiAgICAgc3RhdGljIHZvaWQgY29weUNoYXJzKFVDaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgVUNo
YXIqIHNvdXJjZSwgdW5zaWduZWQgbnVtQ2hhcmFjdGVycykKICAgICB7CkBAIC0xODMsMTQgKzE1
MCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVVN0cmluZ0ltcGwmIG51bGwoKSB7IHJldHVybiAq
c19udWxsOyB9CiAgICAgc3RhdGljIFVTdHJpbmdJbXBsJiBlbXB0eSgpIHsgcmV0dXJuICpzX2Vt
cHR5OyB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0
Ci0gICAgewotICAgICAgICAvLyBUaGVyZSBpcyBubyByZWN1cnNpb24gb2Ygc3Vic3RyaW5ncy4K
LSAgICAgICAgQVNTRVJUKGJ1ZmZlck93bmVyU3RyaW5nKCktPmJ1ZmZlck93bmVyc2hpcCgpICE9
IEJ1ZmZlclN1YnN0cmluZyk7Ci0gICAgICAgIC8vIFN0YXRpYyBzdHJpbmdzIGNhbm5vdCBiZSBw
dXQgaW4gaWRlbnRpZmllciB0YWJsZXMsIGJlY2F1c2UgdGhleSBhcmUgZ2xvYmFsbHkgc2hhcmVk
LgotICAgICAgICBBU1NFUlQoIWlzU3RhdGljKCkgfHwgIWlzSWRlbnRpZmllcigpKTsKLSAgICB9
Ci0KIHByaXZhdGU6CiAgICAgZW51bSBCdWZmZXJPd25lcnNoaXAgewogICAgICAgICBCdWZmZXJJ
bnRlcm5hbCwKQEAgLTIwNSwxNCArMTY0LDEyIEBAIHByaXZhdGU6CiAgICAgLy8gVXNlZCB0byBj
b25zdHJ1Y3Qgbm9ybWFsIHN0cmluZ3Mgd2l0aCBhbiBpbnRlcm5hbCBvciBleHRlcm5hbCBidWZm
ZXIuCiAgICAgVVN0cmluZ0ltcGwoVUNoYXIqIGRhdGEsIGludCBsZW5ndGgsIEJ1ZmZlck93bmVy
c2hpcCBvd25lcnNoaXApCiAgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgICAgICwgbV9idWZm
ZXIoMCkKICAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgICAgICwgbV9yZWZDb3VudChz
X3JlZkNvdW50SW5jcmVtZW50KQorICAgICAgICAsIG1fcmVmQ291bnRBbmRGbGFncyhzX3JlZkNv
dW50SW5jcmVtZW50IHwgb3duZXJzaGlwKQogICAgICAgICAsIG1faGFzaCgwKQotICAgICAgICAs
IG1faXNJZGVudGlmaWVyKGZhbHNlKQotICAgICAgICAsIG1fZGF0YUJ1ZmZlcigwLCBvd25lcnNo
aXApCiAgICAgewogICAgICAgICBBU1NFUlQoKG93bmVyc2hpcCA9PSBCdWZmZXJJbnRlcm5hbCkg
fHwgKG93bmVyc2hpcCA9PSBCdWZmZXJPd25lZCkpOwotICAgICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CiAgICAgfQogCiAgICAgLy8gVXNlZCB0byBjb25zdHJ1Y3Qgc3RhdGljIHN0cmluZ3MsIHdo
aWNoIGhhdmUgYW4gc3BlY2lhbCByZWZDb3VudCB0aGF0IGNhbiBuZXZlciBoaXQgemVyby4KQEAg
LTIyMSw0MiArMTc4LDM3IEBAIHByaXZhdGU6CiAgICAgZW51bSBTdGF0aWNTdHJpbmdDb25zdHJ1
Y3RUeXBlIHsgQ29uc3RydWN0U3RhdGljU3RyaW5nIH07CiAgICAgVVN0cmluZ0ltcGwoVUNoYXIq
IGRhdGEsIGludCBsZW5ndGgsIFN0YXRpY1N0cmluZ0NvbnN0cnVjdFR5cGUpCiAgICAgICAgIDog
bV9kYXRhKGRhdGEpCisgICAgICAgICwgbV9idWZmZXIoMCkKICAgICAgICAgLCBtX2xlbmd0aChs
ZW5ndGgpCi0gICAgICAgICwgbV9yZWZDb3VudChzX3N0YXRpY1JlZkNvdW50SW5pdGlhbFZhbHVl
KQorICAgICAgICAsIG1fcmVmQ291bnRBbmRGbGFncyhzX3JlZkNvdW50RmxhZ1N0YXRpYyB8IHNf
cmVmQ291bnRGbGFnSGFzUmVwb3J0ZWRDb3N0IHwgQnVmZmVyT3duZWQpCiAgICAgICAgICwgbV9o
YXNoKDApCi0gICAgICAgICwgbV9pc0lkZW50aWZpZXIoZmFsc2UpCi0gICAgICAgICwgbV9kYXRh
QnVmZmVyKDAsIEJ1ZmZlck93bmVkKQogICAgIHsKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgIH0KIAogICAgIC8vIFVzZWQgdG8gY3JlYXRlIG5ldyBzdHJpbmdzIHRoYXQgYXJlIGEg
c3Vic3RyaW5nIG9mIGFuIGV4aXN0aW5nIHN0cmluZy4KICAgICBVU3RyaW5nSW1wbChVQ2hhciog
ZGF0YSwgaW50IGxlbmd0aCwgUGFzc1JlZlB0cjxVU3RyaW5nSW1wbD4gYmFzZSkKICAgICAgICAg
OiBtX2RhdGEoZGF0YSkKKyAgICAgICAgLCBtX2J1ZmZlclN1YnN0cmluZyhiYXNlLnJlbGVhc2VS
ZWYoKSkKICAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgICAgICwgbV9yZWZDb3VudChz
X3JlZkNvdW50SW5jcmVtZW50KQorICAgICAgICAsIG1fcmVmQ291bnRBbmRGbGFncyhzX3JlZkNv
dW50SW5jcmVtZW50IHwgQnVmZmVyU3Vic3RyaW5nKQogICAgICAgICAsIG1faGFzaCgwKQotICAg
ICAgICAsIG1faXNJZGVudGlmaWVyKGZhbHNlKQotICAgICAgICAsIG1fZGF0YUJ1ZmZlcihiYXNl
LnJlbGVhc2VSZWYoKSwgQnVmZmVyU3Vic3RyaW5nKQogICAgIHsKICAgICAgICAgLy8gRG8gdXNl
IHN0YXRpYyBzdHJpbmdzIGFzIGEgYmFzZSBmb3Igc3Vic3RyaW5nczsgVW50eXBlZFB0ckFuZEJp
dGZpZWxkIGFzc3VtZXMKICAgICAgICAgLy8gdGhhdCBhbGwgcG9pbnRlcnMgd2lsbCBiZSBhdCBs
ZWFzdCA4LWJ5dGUgYWxpZ25lZCwgd2UgY2Fubm90IGd1YXJhbnRlZSB0aGF0IG9mCiAgICAgICAg
IC8vIFVTdHJpbmdJbXBscyB0aGF0IGFyZSBub3QgaGVhcCBhbGxvY2F0ZWQuCi0gICAgICAgIEFT
U0VSVChtX2RhdGFCdWZmZXIuYXNQdHI8VVN0cmluZ0ltcGwqPigpLT5zaXplKCkpOwotICAgICAg
ICBBU1NFUlQoIW1fZGF0YUJ1ZmZlci5hc1B0cjxVU3RyaW5nSW1wbCo+KCktPmlzU3RhdGljKCkp
OwotICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIEFTU0VSVChtX2J1ZmZlclN1
YnN0cmluZy0+c2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKCFtX2J1ZmZlclN1YnN0cmluZy0+aXNT
dGF0aWMoKSk7CisgICAgICAgIEFTU0VSVChtX2J1ZmZlclN1YnN0cmluZy0+YnVmZmVyT3duZXJz
aGlwKCkgIT0gQnVmZmVyU3Vic3RyaW5nKTsKICAgICB9CiAKICAgICAvLyBVc2VkIHRvIGNvbnN0
cnVjdCBuZXcgc3RyaW5ncyBzaGFyaW5nIGFuIGV4aXN0aW5nIHNoYXJlZCBidWZmZXIuCiAgICAg
VVN0cmluZ0ltcGwoVUNoYXIqIGRhdGEsIGludCBsZW5ndGgsIFBhc3NSZWZQdHI8U2hhcmVkVUNo
YXI+IHNoYXJlZEJ1ZmZlcikKICAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAgICAgLCBtX2J1
ZmZlclNoYXJlZChzaGFyZWRCdWZmZXIucmVsZWFzZVJlZigpKQogICAgICAgICAsIG1fbGVuZ3Ro
KGxlbmd0aCkKLSAgICAgICAgLCBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCisgICAg
ICAgICwgbV9yZWZDb3VudEFuZEZsYWdzKHNfcmVmQ291bnRJbmNyZW1lbnQgfCBCdWZmZXJTaGFy
ZWQpCiAgICAgICAgICwgbV9oYXNoKDApCi0gICAgICAgICwgbV9pc0lkZW50aWZpZXIoZmFsc2Up
Ci0gICAgICAgICwgbV9kYXRhQnVmZmVyKHNoYXJlZEJ1ZmZlci5yZWxlYXNlUmVmKCksIEJ1ZmZl
clNoYXJlZCkKICAgICB7Ci0gICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAKICAg
ICB1c2luZyBOb25jb3B5YWJsZTo6b3BlcmF0b3IgbmV3OwpAQCAtMjY1LDI4ICsyMTcsMzAgQEAg
cHJpdmF0ZToKICAgICB+VVN0cmluZ0ltcGwoKTsKIAogICAgIC8vIFRoaXMgbnVtYmVyIG11c3Qg
YmUgYXQgbGVhc3QgMiB0byBhdm9pZCBzaGFyaW5nIGVtcHR5LCBudWxsIGFzIHdlbGwgYXMgMSBj
aGFyYWN0ZXIgc3RyaW5ncyBmcm9tIFNtYWxsU3RyaW5ncy4KLSAgICBzdGF0aWMgY29uc3QgaW50
IHNfbWluTGVuZ3RoVG9TaGFyZSA9IDEwOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX21p
bkxlbmd0aFRvU2hhcmUgPSAxMDsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19jb3B5Q2hh
cnNJbmxpbmVDdXRPZmYgPSAyMDsKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHNfYnVmZmVy
T3duZXJzaGlwTWFzayA9IDM7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBzX3JlcG9ydGVk
Q29zdEJpdCA9IDQ7CisKKyAgICBib29sIGlzU3RhdGljKCkgY29uc3QgeyByZXR1cm4gbV9yZWZD
b3VudEFuZEZsYWdzICYgc19yZWZDb3VudEZsYWdTdGF0aWM7IH0KKyAgICBCdWZmZXJPd25lcnNo
aXAgYnVmZmVyT3duZXJzaGlwKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QnVmZmVyT3du
ZXJzaGlwPihtX3JlZkNvdW50QW5kRmxhZ3MgJiBzX3JlZkNvdW50TWFza0J1ZmZlck93bmVyc2hp
cCk7IH0KKwogICAgIC8vIFdlIGluaXRpYWxpemUgYW5kIGluY3JlbWVudC9kZWNyZW1lbnQgdGhl
IHJlZkNvdW50IGZvciBhbGwgbm9ybWFsIChub24tc3RhdGljKSBzdHJpbmdzIGJ5IHRoZSB2YWx1
ZSAyLgogICAgIC8vIFdlIGluaXRpYWxpemUgc3RhdGljIHN0cmluZ3Mgd2l0aCBhbiBvZGQgbnVt
YmVyIChzcGVjaWZpY2FsbHksIDEpLCBzdWNoIHRoYXQgdGhlIHJlZkNvdW50IGNhbm5vdCByZWFj
aCB6ZXJvLgotICAgIHN0YXRpYyBjb25zdCBpbnQgc19yZWZDb3VudEluY3JlbWVudCA9IDI7Ci0g
ICAgc3RhdGljIGNvbnN0IGludCBzX3N0YXRpY1JlZkNvdW50SW5pdGlhbFZhbHVlID0gMTsKLQot
ICAgIFVTdHJpbmdJbXBsKiBidWZmZXJPd25lclN0cmluZygpIHsgcmV0dXJuIChidWZmZXJPd25l
cnNoaXAoKSA9PSBCdWZmZXJTdWJzdHJpbmcpID8gbV9kYXRhQnVmZmVyLmFzUHRyPFVTdHJpbmdJ
bXBsKj4oKSA6ICB0aGlzOyB9Ci0gICAgY29uc3QgVVN0cmluZ0ltcGwqIGJ1ZmZlck93bmVyU3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gKGJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmlu
ZykgPyBtX2RhdGFCdWZmZXIuYXNQdHI8VVN0cmluZ0ltcGwqPigpIDogIHRoaXM7IH0KLSAgICBT
aGFyZWRVQ2hhciogYmFzZVNoYXJlZEJ1ZmZlcigpOwotICAgIHVuc2lnbmVkIGJ1ZmZlck93bmVy
c2hpcCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YUJ1ZmZlciAmIHNfYnVmZmVyT3duZXJzaGlwTWFz
azsgfQotICAgIGJvb2wgaXNTdGF0aWMoKSBjb25zdCB7IHJldHVybiBtX3JlZkNvdW50ICYgMTsg
fQorICAgIHN0YXRpYyBjb25zdCBpbnQgc19yZWZDb3VudE1hc2sgPSAweGZmZmZmZmYwOworICAg
IHN0YXRpYyBjb25zdCBpbnQgc19yZWZDb3VudEluY3JlbWVudCA9IDB4MjA7CisgICAgc3RhdGlj
IGNvbnN0IGludCBzX3JlZkNvdW50RmxhZ1N0YXRpYyA9IDB4MTA7CisgICAgc3RhdGljIGNvbnN0
IGludCBzX3JlZkNvdW50RmxhZ0hhc1JlcG9ydGVkQ29zdCA9IDB4ODsKKyAgICBzdGF0aWMgY29u
c3QgaW50IHNfcmVmQ291bnRGbGFnSXNJZGVudGlmaWVyID0gMHg0OworICAgIHN0YXRpYyBjb25z
dCBpbnQgc19yZWZDb3VudE1hc2tCdWZmZXJPd25lcnNoaXAgPSAweDM7CiAKLSAgICAvLyB1bnNo
YXJlZCBkYXRhCiAgICAgVUNoYXIqIG1fZGF0YTsKLSAgICBpbnQgbV9sZW5ndGg7Ci0gICAgdW5z
aWduZWQgbV9yZWZDb3VudDsKLSAgICBtdXRhYmxlIHVuc2lnbmVkIG1faGFzaCA6IDMxOwotICAg
IG11dGFibGUgdW5zaWduZWQgbV9pc0lkZW50aWZpZXIgOiAxOwotICAgIFVudHlwZWRQdHJBbmRC
aXRmaWVsZCBtX2RhdGFCdWZmZXI7CisgICAgdW5pb24geworICAgICAgICB2b2lkKiBtX2J1ZmZl
cjsKKyAgICAgICAgVVN0cmluZ0ltcGwqIG1fYnVmZmVyU3Vic3RyaW5nOworICAgICAgICBTaGFy
ZWRVQ2hhciogbV9idWZmZXJTaGFyZWQ7CisgICAgfTsKKyAgICB1bnNpZ25lZCBtX2xlbmd0aDsK
KyAgICB1bnNpZ25lZCBtX3JlZkNvdW50QW5kRmxhZ3M7CisgICAgbXV0YWJsZSB1bnNpZ25lZCBt
X2hhc2g7CiAKICAgICBKU19FWFBPUlREQVRBIHN0YXRpYyBVU3RyaW5nSW1wbCogc19udWxsOwog
ICAgIEpTX0VYUE9SVERBVEEgc3RhdGljIFVTdHJpbmdJbXBsKiBzX2VtcHR5Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46756</attachid>
            <date>2010-01-16 19:14:31 -0800</date>
            <delta_ts>2010-02-08 15:11:10 -0800</delta_ts>
            <desc>New WebCore::StringImpl patch</desc>
            <filename>patch.ptrandstring.2.txt</filename>
            <type>text/plain</type>
            <size>15136</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzMyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDEtMTUgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91
Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzczMQorICAg
ICAgICBSZW1vdmUgdXNlcyBvZiBQdHJBbmRGbGFncyBmcm9tIFdlYkNvcmU6OlN0cmluZ0ltcGwu
CisKKyAgICAgICAgVGhlc2UgYnJlYWsgdGhlIE9TIFggTGVha3MgdG9vbC4gIE1vdmUgdGhlIG1h
bmFnZW1lbnQgb2YgbnVsbC10ZXJtaW5hdGVkIGNvcGllcworICAgICAgICBvdXQgZnJvbSBTdHJp
bmdJbXBsIHRvIFN0cmluZywgYW5kIHVzZSBhIGJpdCBzdG9sZW4gZnJvbSB0aGUgcmVmQ291bnQg
dG8gaG9sZCB0aGUKKyAgICAgICAgJ0luVGFibGUnIGZsYWcuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9zcWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxl
U3lzdGVtOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpwcmVwYXJlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogcGxh
dGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3Ry
aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZzo6Y29weVdpdGhOdWxsVGVybWluYXRp
b24pOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmlu
Z0ltcGw6On5TdHJpbmdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpjcm9zc1RocmVhZFN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpzaGFyZWRCdWZmZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6
aW5UYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpzZXRJblRhYmxlKToKKwog
MjAxMC0wMS0xNCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgUnViYmVyIHN0YW1wZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJl
dmlzaW9uIDUzMzIyKQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDIsNyArMTQyLDYgQEAgX19aTjdXZWJDb3JlMTBTdHJpbmdJbXBsN3JlcGxhY2VFdHQK
IF9fWk43V2ViQ29yZTEwU3RyaW5nSW1wbDhlbmRzV2l0aEVQUzBfYgogX19aTjdXZWJDb3JlMTBT
dHJpbmdJbXBsRDFFdgogX19aTjdXZWJDb3JlMTBTdHJpbmdJbXBsY3ZQOE5TU3RyaW5nRXYKLV9f
Wk43V2ViQ29yZTEwU3RyaW5nSW1wbGRsRVB2CiBfX1pON1dlYkNvcmUxMGhhbmRDdXJzb3JFdgog
X19aTjdXZWJDb3JlMTBzZXRDb29raWVzRVBOU184RG9jdW1lbnRFUktOU180S1VSTEVSS05TXzZT
dHJpbmdFCiBfX1pON1dlYkNvcmUxMUJpdG1hcEltYWdlQzFFUDdDR0ltYWdlUE5TXzEzSW1hZ2VP
YnNlcnZlckUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3Bw
CShyZXZpc2lvbiA1MzMyMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0
ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSw4IEBAIHZvaWQgU1FMaXRlRmlsZVN5
c3RlbTo6cmVnaXN0ZXJTUUxpdGVWRlMKIGludCBTUUxpdGVGaWxlU3lzdGVtOjpvcGVuRGF0YWJh
c2UoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgc3FsaXRlMyoqIGRhdGFiYXNlKQogewogICAgIC8v
IFNRTGl0ZSBleHBlY3RzIGEgbnVsbCB0ZXJtaW5hdG9yIG9uIGl0cyBVVEYtMTYgc3RyaW5ncy4K
LSAgICBTdHJpbmcgcGF0aCA9IGZpbGVOYW1lOwotICAgIHJldHVybiBzcWxpdGUzX29wZW4xNihw
YXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIGRhdGFiYXNlKTsKKyAgICBPd25Q
dHI8Y29uc3QgVUNoYXIqPiBwYXRoKGZpbGVOYW1lLmNvcHlXaXRoTnVsbFRlcm1pbmF0aW9uKCkp
OworICAgIHJldHVybiBzcWxpdGUzX29wZW4xNihwYXRoLmdldCgpLCBkYXRhYmFzZSk7CiB9CiAK
IFN0cmluZyBTUUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNlKGNvbnN0
IFN0cmluZyYgZGJEaXIsIGNvbnN0IFN0cmluZyYsCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVTdGF0ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZVN0YXRlbWVudC5jcHAJKHJldmlzaW9uIDUzMzIyKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsOSBA
QCBpbnQgU1FMaXRlU3RhdGVtZW50OjpwcmVwYXJlKCkKICAgICBBU1NFUlQoIW1faXNQcmVwYXJl
ZCk7CiAgICAgY29uc3Qgdm9pZCogdGFpbDsKICAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSBw
cmVwYXJlIC0gJXMiLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKLSAgICBpbnQgZXJyb3IgPSBz
cWxpdGUzX3ByZXBhcmUxNl92MihtX2RhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwgbV9xdWVyeS5j
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAtMSwgJm1fc3RhdGVtZW50LCAmdGFpbCk7
CisgICAgaWYgKCFtX3F1ZXJ5V2l0aE51bGxUZXJtaW5hdGlvbikKKyAgICAgICAgbV9xdWVyeVdp
dGhOdWxsVGVybWluYXRpb24uc2V0KG1fcXVlcnkuY29weVdpdGhOdWxsVGVybWluYXRpb24oKSk7
CisgICAgaW50IGVycm9yID0gc3FsaXRlM19wcmVwYXJlMTZfdjIobV9kYXRhYmFzZS5zcWxpdGUz
SGFuZGxlKCksIG1fcXVlcnlXaXRoTnVsbFRlcm1pbmF0aW9uLmdldCgpLCAtMSwgJm1fc3RhdGVt
ZW50LCAmdGFpbCk7CiAgICAgaWYgKGVycm9yICE9IFNRTElURV9PSykKICAgICAgICAgTE9HKFNR
TERhdGFiYXNlLCAic3FsaXRlM19wcmVwYXJlMTYgZmFpbGVkICglaSlcbiVzXG4lcyIsIGVycm9y
LCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgpLCBzcWxpdGUzX2Vycm1zZyhtX2RhdGFiYXNlLnNxbGl0
ZTNIYW5kbGUoKSkpOwogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZVN0YXRlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NR
TGl0ZVN0YXRlbWVudC5oCShyZXZpc2lvbiA1MzMyMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZVN0YXRlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgU1FMaXRlRGF0YWJhc2UmIG1fZGF0YWJhc2U7CiAgICAgU3RyaW5n
IG1fcXVlcnk7CisgICAgT3duUHRyPGNvbnN0IFVDaGFyKj4gbV9xdWVyeVdpdGhOdWxsVGVybWlu
YXRpb247CiAgICAgc3FsaXRlM19zdG10KiBtX3N0YXRlbWVudDsKICNpZm5kZWYgTkRFQlVHCiAg
ICAgYm9vbCBtX2lzUHJlcGFyZWQ7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZv
cm1TdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1T
dHJpbmcuaAkocmV2aXNpb24gNTMzMjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZv
cm1TdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAKICAg
ICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygp
IGNvbnN0OwotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
OworICAgIGNvbnN0IFVDaGFyKiBjb3B5V2l0aE51bGxUZXJtaW5hdGlvbigpIGNvbnN0OwogICAg
IAogICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3Q7IC8vIGlmIGkgPj0gbGVu
Z3RoKCksIHJldHVybnMgMCAgICAKICAgICBVQ2hhcjMyIGNoYXJhY3RlclN0YXJ0aW5nQXQodW5z
aWduZWQpIGNvbnN0OyAvLyBEaXR0by4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCShy
ZXZpc2lvbiA1MzMyMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjksMTQgKzMyOSwxNSBAQCBjb25zdCBVQ2hhciogU3RyaW5nOjpjaGFy
YWN0ZXJzKCkgY29uc3QKICAgICByZXR1cm4gbV9pbXBsLT5jaGFyYWN0ZXJzKCk7CiB9CiAKLWNv
bnN0IFVDaGFyKiBTdHJpbmc6OmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkKK2NvbnN0
IFVDaGFyKiBTdHJpbmc6OmNvcHlXaXRoTnVsbFRlcm1pbmF0aW9uKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1faW1wbCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG1faW1wbC0+aGFzVGVybWlu
YXRpbmdOdWxsQ2hhcmFjdGVyKCkpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmNoYXJhY3RlcnMo
KTsKLSAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGVXaXRoVGVybWluYXRpbmdOdWxsQ2hh
cmFjdGVyKCptX2ltcGwpOwotICAgIHJldHVybiBtX2ltcGwtPmNoYXJhY3RlcnMoKTsKKyAgICB1
bnNpZ25lZCBsZW5ndGggPSBtX2ltcGwtPmxlbmd0aCgpOworICAgIFVDaGFyKiBidWZmZXIgPSBu
ZXcgVUNoYXJbbGVuZ3RoICsgMV07CisgICAgbWVtY3B5KGJ1ZmZlciwgbV9pbXBsLT5jaGFyYWN0
ZXJzKCksIGxlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgIGJ1ZmZlcltsZW5ndGhdID0gMDsK
KyAgICByZXR1cm4gYnVmZmVyOwogfQogCiBTdHJpbmcgU3RyaW5nOjpmb3JtYXQoY29uc3QgY2hh
ciAqZm9ybWF0LCAuLi4pCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCShy
ZXZpc2lvbiA1MzMyMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsMzEgKzU3LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWxl
dGVVQ2hhclZlY3Rvcihjb24KICAgICBmYXN0RnJlZShjb25zdF9jYXN0PFVDaGFyKj4ocCkpOwog
fQogCi0vLyBTb21lIG9mIHRoZSBmYWN0b3J5IG1ldGhvZHMgY3JlYXRlIGJ1ZmZlcnMgdXNpbmcg
ZmFzdE1hbGxvYy4KLS8vIFdlIG11c3QgZW5zdXJlIHRoYXQgYWxsIGFsbG9jYXRpb25zIG9mIFN0
cmluZ0ltcGwgYXJlIGFsbG9jYXRlZCB1c2luZwotLy8gZmFzdE1hbGxvYyBzbyB0aGF0IHdlIGRv
bid0IGhhdmUgbWlzLW1hdGNoZWQgZnJlZXMuIFdlIGFjY29tcGxpc2ggCi0vLyB0aGlzIGJ5IG92
ZXJyaWRpbmcgdGhlIG5ldyBhbmQgZGVsZXRlIG9wZXJhdG9ycy4KLXZvaWQqIFN0cmluZ0ltcGw6
Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgdm9pZCogYWRkcmVzcykKLXsKLSAgICBpZiAoYWRk
cmVzcykKLSAgICAgICAgcmV0dXJuIGFkZHJlc3M7ICAvLyBBbGxvY2F0aW5nIHVzaW5nIGFuIGlu
dGVybmFsIGJ1ZmZlcgotICAgIHJldHVybiBmYXN0TWFsbG9jKHNpemUpOwotfQotCi12b2lkKiBT
dHJpbmdJbXBsOjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUpCi17Ci0gICAgcmV0dXJuIGZhc3RN
YWxsb2Moc2l6ZSk7Ci19Ci0KLXZvaWQgU3RyaW5nSW1wbDo6b3BlcmF0b3IgZGVsZXRlKHZvaWQq
IGFkZHJlc3MpCi17Ci0gICAgZmFzdEZyZWUoYWRkcmVzcyk7Ci19Ci0KIC8vIFRoaXMgY29uc3Ry
dWN0b3IgaXMgdXNlZCBvbmx5IHRvIGNyZWF0ZSB0aGUgZW1wdHkgc3RyaW5nLgogU3RyaW5nSW1w
bDo6U3RyaW5nSW1wbCgpCiAgICAgOiBtX2RhdGEoMCkKKyAgICAsIG1fc2hhcmVkQnVmZmVyKDAp
CiAgICAgLCBtX2xlbmd0aCgwKQorICAgICwgbV9yZWZDb3VudEFuZEZsYWdzKHNfcmVmQ291bnRJ
bmNyZW1lbnQpCiAgICAgLCBtX2hhc2goMCkKIHsKICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgaGFz
aCBpcyBjb21wdXRlZCBzbyB0aGF0IEF0b21pY1N0cmluZ0hhc2ggY2FuIGNhbGwgZXhpc3RpbmdI
YXNoKCkKQEAgLTkyLDcgKzczLDkgQEAgU3RyaW5nSW1wbDo6U3RyaW5nSW1wbCgpCiAKIGlubGlu
ZSBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgpCiAgICAgOiBtX2RhdGEoY2hhcmFjdGVycykKKyAgICAsIG1fc2hhcmVkQnVmZmVy
KDApCiAgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX3JlZkNvdW50QW5kRmxhZ3Moc19y
ZWZDb3VudEluY3JlbWVudCkKICAgICAsIG1faGFzaCgwKQogewogICAgIEFTU0VSVChjaGFyYWN0
ZXJzKTsKQEAgLTEwNCw3ICs4Nyw3IEBAIFN0cmluZ0ltcGw6On5TdHJpbmdJbXBsKCkKICAgICBp
ZiAoaW5UYWJsZSgpKQogICAgICAgICBBdG9taWNTdHJpbmc6OnJlbW92ZSh0aGlzKTsKICAgICBp
ZiAoIWJ1ZmZlcklzSW50ZXJuYWwoKSkgewotICAgICAgICBTaGFyZWRVQ2hhciogc2hhcmVkQnVm
ZmVyID0gbV9zaGFyZWRCdWZmZXJBbmRGbGFncy5nZXQoKTsKKyAgICAgICAgU2hhcmVkVUNoYXIq
IHNoYXJlZEJ1ZmZlciA9IG1fc2hhcmVkQnVmZmVyOwogICAgICAgICBpZiAoc2hhcmVkQnVmZmVy
KQogICAgICAgICAgICAgc2hhcmVkQnVmZmVyLT5kZXJlZigpOwogICAgICAgICBlbHNlCkBAIC05
NzAsNyArOTUzLDcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdAog
ICAgIGlmIChzaGFyZWRCdWZmZXIpIHsKICAgICAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBp
bXBsID0gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwoc3RyLmRhdGEoKSwgc3RyLnNpemUoKSkpOwog
ICAgICAgICBzaGFyZWRCdWZmZXItPnJlZigpOwotICAgICAgICBpbXBsLT5tX3NoYXJlZEJ1ZmZl
ckFuZEZsYWdzLnNldChzaGFyZWRCdWZmZXIpOworICAgICAgICBpbXBsLT5tX3NoYXJlZEJ1ZmZl
ciA9IHNoYXJlZEJ1ZmZlcjsKICAgICAgICAgcmV0dXJuIGltcGw7CiAgICAgfQogICAgIHJldHVy
biBTdHJpbmdJbXBsOjpjcmVhdGUoc3RyLmRhdGEoKSwgc3RyLnNpemUoKSk7CkBAIC05ODYsMjEg
Kzk2OSw2IEBAIEpTQzo6VVN0cmluZyBTdHJpbmdJbXBsOjp1c3RyaW5nKCkKIH0KICNlbmRpZgog
Ci1QYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhUZXJtaW5hdGlu
Z051bGxDaGFyYWN0ZXIoY29uc3QgU3RyaW5nSW1wbCYgc3RyaW5nKQotewotICAgIC8vIFVzZSBj
cmVhdGVVbmluaXRpYWxpemVkIGluc3RlYWQgb2YgJ25ldyBTdHJpbmdJbXBsJyBzbyB0aGF0IHRo
ZSBzdHJpbmcgYW5kIGl0cyBidWZmZXIKLSAgICAvLyBnZXQgYWxsb2NhdGVkIGluIGEgc2luZ2xl
IG1hbGxvYyBibG9jay4KLSAgICBVQ2hhciogZGF0YTsKLSAgICBpbnQgbGVuZ3RoID0gc3RyaW5n
Lm1fbGVuZ3RoOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiB0ZXJtaW5hdGVkU3RyaW5nID0gY3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGggKyAxLCBkYXRhKTsKLSAgICBtZW1jcHkoZGF0YSwgc3Ry
aW5nLm1fZGF0YSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Ci0gICAgZGF0YVtsZW5ndGhdID0g
MDsKLSAgICB0ZXJtaW5hdGVkU3RyaW5nLT5tX2xlbmd0aC0tOwotICAgIHRlcm1pbmF0ZWRTdHJp
bmctPm1faGFzaCA9IHN0cmluZy5tX2hhc2g7Ci0gICAgdGVybWluYXRlZFN0cmluZy0+bV9zaGFy
ZWRCdWZmZXJBbmRGbGFncy5zZXRGbGFnKEhhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcik7Ci0g
ICAgcmV0dXJuIHRlcm1pbmF0ZWRTdHJpbmcucmVsZWFzZSgpOwotfQotCiBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnRocmVhZHNhZmVDb3B5KCkgY29uc3QKIHsKICAgICAvLyBT
cGVjaWFsLWNhc2UgZW1wdHkgc3RyaW5ncyB0byBtYWtlIHN1cmUgdGhhdCBwZXItdGhyZWFkIGVt
cHR5IHN0cmluZyBpbnN0YW5jZSBpc24ndCByZXR1cm5lZC4KQEAgLTEwMTQsNyArOTgyLDcgQEAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcm9zcwogICAgIFNoYXJlZFVDaGFy
KiBzaGFyZWQgPSBzaGFyZWRCdWZmZXIoKTsKICAgICBpZiAoc2hhcmVkKSB7CiAgICAgICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiBpbXBsID0gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwobV9kYXRhLCBt
X2xlbmd0aCkpOwotICAgICAgICBpbXBsLT5tX3NoYXJlZEJ1ZmZlckFuZEZsYWdzLnNldChzaGFy
ZWQtPmNyb3NzVGhyZWFkQ29weSgpLnJlbGVhc2VSZWYoKSk7CisgICAgICAgIGltcGwtPm1fc2hh
cmVkQnVmZmVyID0gc2hhcmVkLT5jcm9zc1RocmVhZENvcHkoKS5yZWxlYXNlUmVmKCk7CiAgICAg
ICAgIHJldHVybiBpbXBsLnJlbGVhc2UoKTsKICAgICB9CiAKQEAgLTEwMjcsOSArOTk1LDkgQEAg
U3RyaW5nSW1wbDo6U2hhcmVkVUNoYXIqIFN0cmluZ0ltcGw6OnNoYQogICAgIGlmIChtX2xlbmd0
aCA8IG1pbkxlbmd0aFRvU2hhcmUgfHwgYnVmZmVySXNJbnRlcm5hbCgpKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIGlmICghbV9zaGFyZWRCdWZmZXJBbmRGbGFncy5nZXQoKSkKLSAgICAgICAg
bV9zaGFyZWRCdWZmZXJBbmRGbGFncy5zZXQoU2hhcmVkVUNoYXI6OmNyZWF0ZShuZXcgT3duRmFz
dE1hbGxvY1B0cjxVQ2hhcj4oY29uc3RfY2FzdDxVQ2hhcio+KG1fZGF0YSkpKS5yZWxlYXNlUmVm
KCkpOwotICAgIHJldHVybiBtX3NoYXJlZEJ1ZmZlckFuZEZsYWdzLmdldCgpOworICAgIGlmICgh
bV9zaGFyZWRCdWZmZXIpCisgICAgICAgIG1fc2hhcmVkQnVmZmVyID0gU2hhcmVkVUNoYXI6OmNy
ZWF0ZShuZXcgT3duRmFzdE1hbGxvY1B0cjxVQ2hhcj4oY29uc3RfY2FzdDxVQ2hhcio+KG1fZGF0
YSkpKS5yZWxlYXNlUmVmKCk7CisgICAgcmV0dXJuIG1fc2hhcmVkQnVmZmVyOwogfQogCiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaAkocmV2aXNpb24gNTMzMjIpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsy
Niw4IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4K
ICNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093bkZhc3RNYWxsb2NQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvUHRyQW5kRmxhZ3MuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1
ZGUgPHd0Zi9TdHJpbmdIYXNoRnVuY3Rpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpA
QCAtNTgsNyArNTgsNyBAQCBlbnVtIFRleHRDYXNlU2Vuc2l0aXZpdHkgeyBUZXh0Q2FzZVNlbnNp
CiAKIHR5cGVkZWYgYm9vbCAoKkNoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIpKFVDaGFyKTsKIAot
Y2xhc3MgU3RyaW5nSW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPFN0cmluZ0ltcGw+IHsKK2NsYXNz
IFN0cmluZ0ltcGwgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIGZyaWVuZCBzdHJ1Y3QgQ1N0
cmluZ1RyYW5zbGF0b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBIYXNoQW5kQ2hhcmFjdGVyc1RyYW5z
bGF0b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBVQ2hhckJ1ZmZlclRyYW5zbGF0b3I7CkBAIC04Miw4
ICs4Miw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVh
dGUoY29uc3QgY2hhciopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0
ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIGRhdGEpOwogCi0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlV2l0aFRlcm1pbmF0aW5nTnVsbENoYXJh
Y3Rlcihjb25zdCBTdHJpbmdJbXBsJik7Ci0KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBjcmVhdGVTdHJpcHBpbmdOdWxsQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIHVuc2lnbmVk
IGxlbmd0aCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRvcHQoU3RyaW5n
QnVmZmVyJik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRvcHQoVmVjdG9y
PFVDaGFyPiYpOwpAQCAtOTYsMTYgKzk0LDE4IEBAIHB1YmxpYzoKICAgICBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycygpIHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsg
cmV0dXJuIG1fbGVuZ3RoOyB9CiAKLSAgICBib29sIGhhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3Rl
cigpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkQnVmZmVyQW5kRmxhZ3MuaXNGbGFnU2V0KEhhc1Rl
cm1pbmF0aW5nTnVsbENoYXJhY3Rlcik7IH0KLQotICAgIGJvb2wgaW5UYWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hhcmVkQnVmZmVyQW5kRmxhZ3MuaXNGbGFnU2V0KEluVGFibGUpOyB9Ci0gICAg
dm9pZCBzZXRJblRhYmxlKCkgeyByZXR1cm4gbV9zaGFyZWRCdWZmZXJBbmRGbGFncy5zZXRGbGFn
KEluVGFibGUpOyB9CisgICAgYm9vbCBpblRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9yZWZDb3Vu
dEFuZEZsYWdzICYgc19yZWZDb3VudEZsYWdJblRhYmxlOyB9CisgICAgdm9pZCBzZXRJblRhYmxl
KCkgeyBtX3JlZkNvdW50QW5kRmxhZ3MgfD0gc19yZWZDb3VudEZsYWdJblRhYmxlOyB9CiAKICAg
ICB1bnNpZ25lZCBoYXNoKCkgeyBpZiAobV9oYXNoID09IDApIG1faGFzaCA9IGNvbXB1dGVIYXNo
KG1fZGF0YSwgbV9sZW5ndGgpOyByZXR1cm4gbV9oYXNoOyB9CiAgICAgdW5zaWduZWQgZXhpc3Rp
bmdIYXNoKCkgY29uc3QgeyBBU1NFUlQobV9oYXNoKTsgcmV0dXJuIG1faGFzaDsgfQogICAgIGlu
bGluZSBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgVUNoYXIqIGRhdGEsIHVuc2ln
bmVkIGxlbmd0aCkgeyByZXR1cm4gV1RGOjpzdHJpbmdIYXNoKGRhdGEsIGxlbmd0aCk7IH0KICAg
ICBpbmxpbmUgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IGNoYXIqIGRhdGEpIHsg
cmV0dXJuIFdURjo6c3RyaW5nSGFzaChkYXRhKTsgfQogICAgIAorICAgIFN0cmluZ0ltcGwqIHJl
ZigpIHsgbV9yZWZDb3VudEFuZEZsYWdzICs9IHNfcmVmQ291bnRJbmNyZW1lbnQ7IHJldHVybiB0
aGlzOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGRlcmVmKCkgeyBtX3JlZkNvdW50QW5kRmxh
Z3MgLT0gc19yZWZDb3VudEluY3JlbWVudDsgaWYgKCEobV9yZWZDb3VudEFuZEZsYWdzICYgc19y
ZWZDb3VudE1hc2spKSBkZWxldGUgdGhpczsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBoYXNP
bmVSZWYoKSBjb25zdCB7IHJldHVybiAobV9yZWZDb3VudEFuZEZsYWdzICYgc19yZWZDb3VudE1h
c2spID09IHNfcmVmQ291bnRJbmNyZW1lbnQ7IH0KKwogICAgIC8vIFJldHVybnMgYSBTdHJpbmdJ
bXBsIHN1aXRhYmxlIGZvciB1c2Ugb24gYW5vdGhlciB0aHJlYWQuCiAgICAgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBjcm9zc1RocmVhZFN0cmluZygpOwogICAgIC8vIE1ha2VzIGEgZGVlcCBjb3B5
LiBIZWxwZnVsIG9ubHkgaWYgeW91IG5lZWQgdG8gdXNlIGEgU3RyaW5nIG9uIGFub3RoZXIgdGhy
ZWFkCkBAIC0xNzUsMTMgKzE3NSw5IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBOU1N0cmluZyoo
KTsKICNlbmRpZgogCi0gICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCopOwotCiBwcml2YXRl
OgotICAgIC8vIEFsbG9jYXRpb24gZnJvbSBhIGN1c3RvbSBidWZmZXIgaXMgb25seSBhbGxvd2Vk
IGludGVybmFsbHkgdG8gYXZvaWQKLSAgICAvLyBtaXNtYXRjaGVkIGFsbG9jYXRvcnMuIENhbGxl
cnMgc2hvdWxkIHVzZSBjcmVhdGUoKS4KLSAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHNp
emUpOwotICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgdm9pZCogYWRkcmVzcyk7
CisgICAgdXNpbmcgTm9uY29weWFibGU6Om9wZXJhdG9yIG5ldzsKKyAgICB2b2lkKiBvcGVyYXRv
ciBuZXcoc2l6ZV90LCB2b2lkKiBpblBsYWNlKSB7IEFTU0VSVChpblBsYWNlKTsgcmV0dXJuIGlu
UGxhY2U7IH0KIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVN0cmlw
cGluZ051bGxDaGFyYWN0ZXJzU2xvd0Nhc2UoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgp
OwogICAgIApAQCAtMTg5LDE1ICsxODUsMTUgQEAgcHJpdmF0ZToKICAgICAvLyBJbiB0aGlzIGNh
c2UsIHRoZSBtX2RhdGEgcG9pbnRlciBpcyBhbiAiaW50ZXJuYWwgYnVmZmVyIiwgYW5kIGRvZXMg
bm90IG5lZWQgdG8gYmUgZGVhbGxvY2F0ZWQuCiAgICAgYm9vbCBidWZmZXJJc0ludGVybmFsKCkg
eyByZXR1cm4gbV9kYXRhID09IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPih0aGlzICsg
MSk7IH0KIAotICAgIGVudW0gU3RyaW5nSW1wbEZsYWdzIHsKLSAgICAgICAgSGFzVGVybWluYXRp
bmdOdWxsQ2hhcmFjdGVyLAotICAgICAgICBJblRhYmxlLAotICAgIH07CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHNfcmVmQ291bnRNYXNrID0gMHhmZmZmZmZmZTsKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgc19yZWZDb3VudEluY3JlbWVudCA9IDB4MjsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgc19yZWZDb3VudEZsYWdJblRhYmxlID0gMHgxOwogCiAgICAgY29uc3QgVUNoYXIq
IG1fZGF0YTsKKyAgICBTaGFyZWRVQ2hhciogbV9zaGFyZWRCdWZmZXI7CiAgICAgdW5zaWduZWQg
bV9sZW5ndGg7CisgICAgdW5zaWduZWQgbV9yZWZDb3VudEFuZEZsYWdzOwogICAgIG11dGFibGUg
dW5zaWduZWQgbV9oYXNoOwotICAgIFB0ckFuZEZsYWdzPFNoYXJlZFVDaGFyLCBTdHJpbmdJbXBs
RmxhZ3M+IG1fc2hhcmVkQnVmZmVyQW5kRmxhZ3M7CiAgICAgLy8gVGhlcmUgaXMgYSBmaWN0aXRp
b3VzIHZhcmlhYmxlLWxlbmd0aCBVQ2hhciBhcnJheSBhdCB0aGUgZW5kLCB3aGljaCBpcyB1c2Vk
CiAgICAgLy8gYXMgdGhlIGludGVybmFsIGJ1ZmZlciBieSB0aGUgY3JlYXRlVW5pbml0aWFsaXpl
ZCBhbmQgY3JlYXRlIG1ldGhvZHMuCiB9OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL09yaWdpblVz
YWdlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvT3JpZ2luVXNhZ2VS
ZWNvcmQuY3BwCShyZXZpc2lvbiA1MzMyMikKKysrIFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2Fn
ZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAgT3JpZ2luVXNhZ2VS
ZWNvcmQ6Ok9yaWdpblVzYWdlUmVjb3JkKCkKIHZvaWQgT3JpZ2luVXNhZ2VSZWNvcmQ6OmFkZERh
dGFiYXNlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBmdWxsUGF0aCkK
IHsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2VNYXAuY29udGFpbnMoaWRlbnRpZmllcikpOwotICAg
IEFTU0VSVF9BUkcoaWRlbnRpZmllciwgaWRlbnRpZmllci5pbXBsKCktPnJlZkNvdW50KCkgPT0g
MSk7Ci0gICAgQVNTRVJUX0FSRyhmdWxsUGF0aCwgZnVsbFBhdGguaW1wbCgpLT5yZWZDb3VudCgp
ID09IDEpOworICAgIEFTU0VSVF9BUkcoaWRlbnRpZmllciwgaWRlbnRpZmllci5pbXBsKCktPmhh
c09uZVJlZigpKTsKKyAgICBBU1NFUlRfQVJHKGZ1bGxQYXRoLCBmdWxsUGF0aC5pbXBsKCktPmhh
c09uZVJlZigpKTsKIAogICAgIG1fZGF0YWJhc2VNYXAuc2V0KGlkZW50aWZpZXIsIERhdGFiYXNl
RW50cnkoZnVsbFBhdGgpKTsKICAgICBtX3Vua25vd25TZXQuYWRkKGlkZW50aWZpZXIpOwpAQCAt
NjMsNyArNjMsNyBAQCB2b2lkIE9yaWdpblVzYWdlUmVjb3JkOjpyZW1vdmVEYXRhYmFzZShjCiB2
b2lkIE9yaWdpblVzYWdlUmVjb3JkOjptYXJrRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyKQogewogICAgIEFTU0VSVChtX2RhdGFiYXNlTWFwLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsK
LSAgICBBU1NFUlRfQVJHKGlkZW50aWZpZXIsIGlkZW50aWZpZXIuaW1wbCgpLT5yZWZDb3VudCgp
ID09IDEpOworICAgIEFTU0VSVF9BUkcoaWRlbnRpZmllciwgaWRlbnRpZmllci5pbXBsKCktPmhh
c09uZVJlZigpKTsKIAogICAgIG1fdW5rbm93blNldC5hZGQoaWRlbnRpZmllcik7CiAgICAgbV9j
YWNoZWREaXNrVXNhZ2VJc1ZhbGlkID0gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46851</attachid>
            <date>2010-01-18 14:32:11 -0800</date>
            <delta_ts>2010-01-18 15:13:38 -0800</delta_ts>
            <desc>WebCore::StringImpl patch take 3, re-introduce String::charactersWithNullTermination() / StringImpl::hasTerminatingNullCharacter()</desc>
            <filename>patch.ptrandstring.3.txt</filename>
            <type>text/plain</type>
            <size>10229</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzQyNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDEtMTUgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91
Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzczMQorICAgICAg
ICBSZW1vdmUgdXNlcyBvZiBQdHJBbmRGbGFncyBmcm9tIFdlYkNvcmU6OlN0cmluZ0ltcGwuCisK
KyAgICAgICAgVGhlc2UgYnJlYWsgdGhlIE9TIFggTGVha3MgdG9vbC4gIE1vdmUgdGhlIG1hbmFn
ZW1lbnQgb2YgbnVsbC10ZXJtaW5hdGVkIGNvcGllcworICAgICAgICBvdXQgZnJvbSBTdHJpbmdJ
bXBsIHRvIFN0cmluZywgYW5kIHVzZSBhIGJpdCBzdG9sZW4gZnJvbSB0aGUgcmVmQ291bnQgdG8g
aG9sZCB0aGUKKyAgICAgICAgJ0luVGFibGUnIGZsYWcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9z
cWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lz
dGVtOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpwcmVwYXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5n
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZzo6Y29weVdpdGhOdWxsVGVybWluYXRpb24p
OgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0lt
cGw6On5TdHJpbmdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpjcm9zc1RocmVhZFN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpzaGFyZWRCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6aW5U
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpzZXRJblRhYmxlKToKKwogMjAx
MC0wMS0xOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CiAKICAgICAgICAg
QWRqdXN0IHRoZSBzY3JvbGwgcG9zaXRpb24gd2hlbiBkb2luZyBhIGZ1bGwgcGFnZSB6b29tLCBz
byB0aGUgY29udGVudApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gNTM0MjcpCisrKyBXZWJDb3Jl
L1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNiBAQCBfX1pO
N1dlYkNvcmUxMFN0cmluZ0ltcGw3cmVwbGFjZUV0dAogX19aTjdXZWJDb3JlMTBTdHJpbmdJbXBs
OGVuZHNXaXRoRVBTMF9iCiBfX1pON1dlYkNvcmUxMFN0cmluZ0ltcGxEMUV2CiBfX1pON1dlYkNv
cmUxMFN0cmluZ0ltcGxjdlA4TlNTdHJpbmdFdgotX19aTjdXZWJDb3JlMTBTdHJpbmdJbXBsZGxF
UHYKIF9fWk43V2ViQ29yZTEwaGFuZEN1cnNvckV2CiBfX1pON1dlYkNvcmUxMHNldENvb2tpZXNF
UE5TXzhEb2N1bWVudEVSS05TXzRLVVJMRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTExQml0
bWFwSW1hZ2VDMUVQN0NHSW1hZ2VQTlNfMTNJbWFnZU9ic2VydmVyRQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9TdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gNTM0MjcpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvU3RyaW5nSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDMxICs1NywxMiBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgZGVsZXRlVUNoYXJWZWN0b3IoY29uCiAgICAgZmFzdEZyZWUo
Y29uc3RfY2FzdDxVQ2hhcio+KHApKTsKIH0KIAotLy8gU29tZSBvZiB0aGUgZmFjdG9yeSBtZXRo
b2RzIGNyZWF0ZSBidWZmZXJzIHVzaW5nIGZhc3RNYWxsb2MuCi0vLyBXZSBtdXN0IGVuc3VyZSB0
aGF0IGFsbCBhbGxvY2F0aW9ucyBvZiBTdHJpbmdJbXBsIGFyZSBhbGxvY2F0ZWQgdXNpbmcKLS8v
IGZhc3RNYWxsb2Mgc28gdGhhdCB3ZSBkb24ndCBoYXZlIG1pcy1tYXRjaGVkIGZyZWVzLiBXZSBh
Y2NvbXBsaXNoIAotLy8gdGhpcyBieSBvdmVycmlkaW5nIHRoZSBuZXcgYW5kIGRlbGV0ZSBvcGVy
YXRvcnMuCi12b2lkKiBTdHJpbmdJbXBsOjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIHZvaWQq
IGFkZHJlc3MpCi17Ci0gICAgaWYgKGFkZHJlc3MpCi0gICAgICAgIHJldHVybiBhZGRyZXNzOyAg
Ly8gQWxsb2NhdGluZyB1c2luZyBhbiBpbnRlcm5hbCBidWZmZXIKLSAgICByZXR1cm4gZmFzdE1h
bGxvYyhzaXplKTsKLX0KLQotdm9pZCogU3RyaW5nSW1wbDo6b3BlcmF0b3IgbmV3KHNpemVfdCBz
aXplKQotewotICAgIHJldHVybiBmYXN0TWFsbG9jKHNpemUpOwotfQotCi12b2lkIFN0cmluZ0lt
cGw6Om9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBhZGRyZXNzKQotewotICAgIGZhc3RGcmVlKGFkZHJl
c3MpOwotfQotCiAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWQgb25seSB0byBjcmVhdGUgdGhl
IGVtcHR5IHN0cmluZy4KIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoKQogICAgIDogbV9kYXRhKDAp
CisgICAgLCBtX3NoYXJlZEJ1ZmZlcigwKQogICAgICwgbV9sZW5ndGgoMCkKKyAgICAsIG1fcmVm
Q291bnRBbmRGbGFncyhzX3JlZkNvdW50SW5jcmVtZW50KQogICAgICwgbV9oYXNoKDApCiB7CiAg
ICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhc2ggaXMgY29tcHV0ZWQgc28gdGhhdCBBdG9taWNTdHJp
bmdIYXNoIGNhbiBjYWxsIGV4aXN0aW5nSGFzaCgpCkBAIC05Miw3ICs3Myw5IEBAIFN0cmluZ0lt
cGw6OlN0cmluZ0ltcGwoKQogCiBpbmxpbmUgU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogICAgIDogbV9kYXRhKGNoYXJhY3Rl
cnMpCisgICAgLCBtX3NoYXJlZEJ1ZmZlcigwKQogICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAg
ICwgbV9yZWZDb3VudEFuZEZsYWdzKHNfcmVmQ291bnRJbmNyZW1lbnQpCiAgICAgLCBtX2hhc2go
MCkKIHsKICAgICBBU1NFUlQoY2hhcmFjdGVycyk7CkBAIC0xMDQsNyArODcsNyBAQCBTdHJpbmdJ
bXBsOjp+U3RyaW5nSW1wbCgpCiAgICAgaWYgKGluVGFibGUoKSkKICAgICAgICAgQXRvbWljU3Ry
aW5nOjpyZW1vdmUodGhpcyk7CiAgICAgaWYgKCFidWZmZXJJc0ludGVybmFsKCkpIHsKLSAgICAg
ICAgU2hhcmVkVUNoYXIqIHNoYXJlZEJ1ZmZlciA9IG1fc2hhcmVkQnVmZmVyQW5kRmxhZ3MuZ2V0
KCk7CisgICAgICAgIFNoYXJlZFVDaGFyKiBzaGFyZWRCdWZmZXIgPSBtX3NoYXJlZEJ1ZmZlcjsK
ICAgICAgICAgaWYgKHNoYXJlZEJ1ZmZlcikKICAgICAgICAgICAgIHNoYXJlZEJ1ZmZlci0+ZGVy
ZWYoKTsKICAgICAgICAgZWxzZQpAQCAtOTcwLDcgKzk1Myw3IEBAIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXQKICAgICBpZiAoc2hhcmVkQnVmZmVyKSB7CiAgICAgICAg
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gaW1wbCA9IGFkb3B0UmVmKG5ldyBTdHJpbmdJbXBsKHN0
ci5kYXRhKCksIHN0ci5zaXplKCkpKTsKICAgICAgICAgc2hhcmVkQnVmZmVyLT5yZWYoKTsKLSAg
ICAgICAgaW1wbC0+bV9zaGFyZWRCdWZmZXJBbmRGbGFncy5zZXQoc2hhcmVkQnVmZmVyKTsKKyAg
ICAgICAgaW1wbC0+bV9zaGFyZWRCdWZmZXIgPSBzaGFyZWRCdWZmZXI7CiAgICAgICAgIHJldHVy
biBpbXBsOwogICAgIH0KICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlKHN0ci5kYXRhKCks
IHN0ci5zaXplKCkpOwpAQCAtMTAxNCw3ICs5OTcsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OmNyb3NzCiAgICAgU2hhcmVkVUNoYXIqIHNoYXJlZCA9IHNoYXJlZEJ1ZmZl
cigpOwogICAgIGlmIChzaGFyZWQpIHsKICAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IGltcGwg
PSBhZG9wdFJlZihuZXcgU3RyaW5nSW1wbChtX2RhdGEsIG1fbGVuZ3RoKSk7Ci0gICAgICAgIGlt
cGwtPm1fc2hhcmVkQnVmZmVyQW5kRmxhZ3Muc2V0KHNoYXJlZC0+Y3Jvc3NUaHJlYWRDb3B5KCku
cmVsZWFzZVJlZigpKTsKKyAgICAgICAgaW1wbC0+bV9zaGFyZWRCdWZmZXIgPSBzaGFyZWQtPmNy
b3NzVGhyZWFkQ29weSgpLnJlbGVhc2VSZWYoKTsKICAgICAgICAgcmV0dXJuIGltcGwucmVsZWFz
ZSgpOwogICAgIH0KIApAQCAtMTAyNyw5ICsxMDEwLDkgQEAgU3RyaW5nSW1wbDo6U2hhcmVkVUNo
YXIqIFN0cmluZ0ltcGw6OnNoYQogICAgIGlmIChtX2xlbmd0aCA8IG1pbkxlbmd0aFRvU2hhcmUg
fHwgYnVmZmVySXNJbnRlcm5hbCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmICghbV9z
aGFyZWRCdWZmZXJBbmRGbGFncy5nZXQoKSkKLSAgICAgICAgbV9zaGFyZWRCdWZmZXJBbmRGbGFn
cy5zZXQoU2hhcmVkVUNoYXI6OmNyZWF0ZShuZXcgT3duRmFzdE1hbGxvY1B0cjxVQ2hhcj4oY29u
c3RfY2FzdDxVQ2hhcio+KG1fZGF0YSkpKS5yZWxlYXNlUmVmKCkpOwotICAgIHJldHVybiBtX3No
YXJlZEJ1ZmZlckFuZEZsYWdzLmdldCgpOworICAgIGlmICghbV9zaGFyZWRCdWZmZXIpCisgICAg
ICAgIG1fc2hhcmVkQnVmZmVyID0gU2hhcmVkVUNoYXI6OmNyZWF0ZShuZXcgT3duRmFzdE1hbGxv
Y1B0cjxVQ2hhcj4oY29uc3RfY2FzdDxVQ2hhcio+KG1fZGF0YSkpKS5yZWxlYXNlUmVmKCk7Cisg
ICAgcmV0dXJuIG1fc2hhcmVkQnVmZmVyOwogfQogCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
dGV4dC9TdHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0
cmluZ0ltcGwuaAkocmV2aXNpb24gNTM0MjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3Ry
aW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaW5jbHVkZSA8bGlt
aXRzLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvQ3Jvc3NU
aHJlYWRSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVk
ZSA8d3RmL093bkZhc3RNYWxsb2NQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUHRyQW5kRmxhZ3MuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdIYXNoRnVu
Y3Rpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNTgsNyArNTgsNyBAQCBlbnVt
IFRleHRDYXNlU2Vuc2l0aXZpdHkgeyBUZXh0Q2FzZVNlbnNpCiAKIHR5cGVkZWYgYm9vbCAoKkNo
YXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIpKFVDaGFyKTsKIAotY2xhc3MgU3RyaW5nSW1wbCA6IHB1
YmxpYyBSZWZDb3VudGVkPFN0cmluZ0ltcGw+IHsKK2NsYXNzIFN0cmluZ0ltcGwgOiBwdWJsaWMg
Tm9uY29weWFibGUgewogICAgIGZyaWVuZCBzdHJ1Y3QgQ1N0cmluZ1RyYW5zbGF0b3I7CiAgICAg
ZnJpZW5kIHN0cnVjdCBIYXNoQW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I7CiAgICAgZnJpZW5kIHN0
cnVjdCBVQ2hhckJ1ZmZlclRyYW5zbGF0b3I7CkBAIC05NiwxNiArOTYsMjAgQEAgcHVibGljOgog
ICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgeyByZXR1cm4gbV9kYXRhOyB9CiAgICAgdW5z
aWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KIAotICAgIGJvb2wgaGFzVGVybWlu
YXRpbmdOdWxsQ2hhcmFjdGVyKCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRCdWZmZXJBbmRGbGFn
cy5pc0ZsYWdTZXQoSGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKTsgfQorICAgIGJvb2wgaGFz
VGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGggJiYgIW1f
ZGF0YVttX2xlbmd0aCAtIDFdOyB9CiAKLSAgICBib29sIGluVGFibGUoKSBjb25zdCB7IHJldHVy
biBtX3NoYXJlZEJ1ZmZlckFuZEZsYWdzLmlzRmxhZ1NldChJblRhYmxlKTsgfQotICAgIHZvaWQg
c2V0SW5UYWJsZSgpIHsgcmV0dXJuIG1fc2hhcmVkQnVmZmVyQW5kRmxhZ3Muc2V0RmxhZyhJblRh
YmxlKTsgfQorICAgIGJvb2wgaW5UYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVmQ291bnRBbmRG
bGFncyAmIHNfcmVmQ291bnRGbGFnSW5UYWJsZTsgfQorICAgIHZvaWQgc2V0SW5UYWJsZSgpIHsg
bV9yZWZDb3VudEFuZEZsYWdzIHw9IHNfcmVmQ291bnRGbGFnSW5UYWJsZTsgfQogCiAgICAgdW5z
aWduZWQgaGFzaCgpIHsgaWYgKG1faGFzaCA9PSAwKSBtX2hhc2ggPSBjb21wdXRlSGFzaChtX2Rh
dGEsIG1fbGVuZ3RoKTsgcmV0dXJuIG1faGFzaDsgfQogICAgIHVuc2lnbmVkIGV4aXN0aW5nSGFz
aCgpIGNvbnN0IHsgQVNTRVJUKG1faGFzaCk7IHJldHVybiBtX2hhc2g7IH0KICAgICBpbmxpbmUg
c3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IFVDaGFyKiBkYXRhLCB1bnNpZ25lZCBs
ZW5ndGgpIHsgcmV0dXJuIFdURjo6c3RyaW5nSGFzaChkYXRhLCBsZW5ndGgpOyB9CiAgICAgaW5s
aW5lIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBjaGFyKiBkYXRhKSB7IHJldHVy
biBXVEY6OnN0cmluZ0hhc2goZGF0YSk7IH0KICAgICAKKyAgICBTdHJpbmdJbXBsKiByZWYoKSB7
IG1fcmVmQ291bnRBbmRGbGFncyArPSBzX3JlZkNvdW50SW5jcmVtZW50OyByZXR1cm4gdGhpczsg
fQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkZXJlZigpIHsgbV9yZWZDb3VudEFuZEZsYWdzIC09
IHNfcmVmQ291bnRJbmNyZW1lbnQ7IGlmICghKG1fcmVmQ291bnRBbmRGbGFncyAmIHNfcmVmQ291
bnRNYXNrKSkgZGVsZXRlIHRoaXM7IH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzT25lUmVm
KCkgY29uc3QgeyByZXR1cm4gKG1fcmVmQ291bnRBbmRGbGFncyAmIHNfcmVmQ291bnRNYXNrKSA9
PSBzX3JlZkNvdW50SW5jcmVtZW50OyB9CisKICAgICAvLyBSZXR1cm5zIGEgU3RyaW5nSW1wbCBz
dWl0YWJsZSBmb3IgdXNlIG9uIGFub3RoZXIgdGhyZWFkLgogICAgIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gY3Jvc3NUaHJlYWRTdHJpbmcoKTsKICAgICAvLyBNYWtlcyBhIGRlZXAgY29weS4gSGVs
cGZ1bCBvbmx5IGlmIHlvdSBuZWVkIHRvIHVzZSBhIFN0cmluZyBvbiBhbm90aGVyIHRocmVhZApA
QCAtMTc1LDEzICsxNzksOSBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgTlNTdHJpbmcqKCk7CiAj
ZW5kaWYKIAotICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqKTsKLQogcHJpdmF0ZToKLSAg
ICAvLyBBbGxvY2F0aW9uIGZyb20gYSBjdXN0b20gYnVmZmVyIGlzIG9ubHkgYWxsb3dlZCBpbnRl
cm5hbGx5IHRvIGF2b2lkCi0gICAgLy8gbWlzbWF0Y2hlZCBhbGxvY2F0b3JzLiBDYWxsZXJzIHNo
b3VsZCB1c2UgY3JlYXRlKCkuCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKTsK
LSAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIHZvaWQqIGFkZHJlc3MpOworICAg
IHVzaW5nIE5vbmNvcHlhYmxlOjpvcGVyYXRvciBuZXc7CisgICAgdm9pZCogb3BlcmF0b3IgbmV3
KHNpemVfdCwgdm9pZCogaW5QbGFjZSkgeyBBU1NFUlQoaW5QbGFjZSk7IHJldHVybiBpblBsYWNl
OyB9CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGVTdHJpcHBpbmdO
dWxsQ2hhcmFjdGVyc1Nsb3dDYXNlKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAg
ICAKQEAgLTE4OSwxNSArMTg5LDE1IEBAIHByaXZhdGU6CiAgICAgLy8gSW4gdGhpcyBjYXNlLCB0
aGUgbV9kYXRhIHBvaW50ZXIgaXMgYW4gImludGVybmFsIGJ1ZmZlciIsIGFuZCBkb2VzIG5vdCBu
ZWVkIHRvIGJlIGRlYWxsb2NhdGVkLgogICAgIGJvb2wgYnVmZmVySXNJbnRlcm5hbCgpIHsgcmV0
dXJuIG1fZGF0YSA9PSByZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4odGhpcyArIDEpOyB9
CiAKLSAgICBlbnVtIFN0cmluZ0ltcGxGbGFncyB7Ci0gICAgICAgIEhhc1Rlcm1pbmF0aW5nTnVs
bENoYXJhY3RlciwKLSAgICAgICAgSW5UYWJsZSwKLSAgICB9OworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBzX3JlZkNvdW50TWFzayA9IDB4RkZGRkZGRkU7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHNfcmVmQ291bnRJbmNyZW1lbnQgPSAweDI7CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIHNfcmVmQ291bnRGbGFnSW5UYWJsZSA9IDB4MTsKIAogICAgIGNvbnN0IFVDaGFyKiBtX2Rh
dGE7CisgICAgU2hhcmVkVUNoYXIqIG1fc2hhcmVkQnVmZmVyOwogICAgIHVuc2lnbmVkIG1fbGVu
Z3RoOworICAgIHVuc2lnbmVkIG1fcmVmQ291bnRBbmRGbGFnczsKICAgICBtdXRhYmxlIHVuc2ln
bmVkIG1faGFzaDsKLSAgICBQdHJBbmRGbGFnczxTaGFyZWRVQ2hhciwgU3RyaW5nSW1wbEZsYWdz
PiBtX3NoYXJlZEJ1ZmZlckFuZEZsYWdzOwogICAgIC8vIFRoZXJlIGlzIGEgZmljdGl0aW91cyB2
YXJpYWJsZS1sZW5ndGggVUNoYXIgYXJyYXkgYXQgdGhlIGVuZCwgd2hpY2ggaXMgdXNlZAogICAg
IC8vIGFzIHRoZSBpbnRlcm5hbCBidWZmZXIgYnkgdGhlIGNyZWF0ZVVuaW5pdGlhbGl6ZWQgYW5k
IGNyZWF0ZSBtZXRob2RzLgogfTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2FnZVJl
Y29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3Jk
LmNwcAkocmV2aXNpb24gNTM0MjcpCisrKyBXZWJDb3JlL3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNv
cmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw4IEBAIE9yaWdpblVzYWdlUmVjb3Jk
OjpPcmlnaW5Vc2FnZVJlY29yZCgpCiB2b2lkIE9yaWdpblVzYWdlUmVjb3JkOjphZGREYXRhYmFz
ZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZnVsbFBhdGgpCiB7CiAg
ICAgQVNTRVJUKCFtX2RhdGFiYXNlTWFwLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKLSAgICBBU1NF
UlRfQVJHKGlkZW50aWZpZXIsIGlkZW50aWZpZXIuaW1wbCgpLT5yZWZDb3VudCgpID09IDEpOwot
ICAgIEFTU0VSVF9BUkcoZnVsbFBhdGgsIGZ1bGxQYXRoLmltcGwoKS0+cmVmQ291bnQoKSA9PSAx
KTsKKyAgICBBU1NFUlRfQVJHKGlkZW50aWZpZXIsIGlkZW50aWZpZXIuaW1wbCgpLT5oYXNPbmVS
ZWYoKSk7CisgICAgQVNTRVJUX0FSRyhmdWxsUGF0aCwgZnVsbFBhdGguaW1wbCgpLT5oYXNPbmVS
ZWYoKSk7CiAKICAgICBtX2RhdGFiYXNlTWFwLnNldChpZGVudGlmaWVyLCBEYXRhYmFzZUVudHJ5
KGZ1bGxQYXRoKSk7CiAgICAgbV91bmtub3duU2V0LmFkZChpZGVudGlmaWVyKTsKQEAgLTYzLDcg
KzYzLDcgQEAgdm9pZCBPcmlnaW5Vc2FnZVJlY29yZDo6cmVtb3ZlRGF0YWJhc2UoYwogdm9pZCBP
cmlnaW5Vc2FnZVJlY29yZDo6bWFya0RhdGFiYXNlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikK
IHsKICAgICBBU1NFUlQobV9kYXRhYmFzZU1hcC5jb250YWlucyhpZGVudGlmaWVyKSk7Ci0gICAg
QVNTRVJUX0FSRyhpZGVudGlmaWVyLCBpZGVudGlmaWVyLmltcGwoKS0+cmVmQ291bnQoKSA9PSAx
KTsKKyAgICBBU1NFUlRfQVJHKGlkZW50aWZpZXIsIGlkZW50aWZpZXIuaW1wbCgpLT5oYXNPbmVS
ZWYoKSk7CiAKICAgICBtX3Vua25vd25TZXQuYWRkKGlkZW50aWZpZXIpOwogICAgIG1fY2FjaGVk
RGlza1VzYWdlSXNWYWxpZCA9IGZhbHNlOwo=
</data>
<flag name="review"
          id="29182"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46858</attachid>
            <date>2010-01-18 15:13:38 -0800</date>
            <delta_ts>2010-02-12 13:53:12 -0800</delta_ts>
            <desc>take 4.  Simple approach, add a flag back in for HasTerminatingNullCharacter.</desc>
            <filename>patch.ptrandstring.4.txt</filename>
            <type>text/plain</type>
            <size>10717</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzQyNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDEtMTUgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91
Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzczMQorICAgICAg
ICBSZW1vdmUgdXNlcyBvZiBQdHJBbmRGbGFncyBmcm9tIFdlYkNvcmU6OlN0cmluZ0ltcGwuCisK
KyAgICAgICAgVGhlc2UgYnJlYWsgdGhlIE9TIFggTGVha3MgdG9vbC4gIE1vdmUgdGhlIG1hbmFn
ZW1lbnQgb2YgbnVsbC10ZXJtaW5hdGVkIGNvcGllcworICAgICAgICBvdXQgZnJvbSBTdHJpbmdJ
bXBsIHRvIFN0cmluZywgYW5kIHVzZSBhIGJpdCBzdG9sZW4gZnJvbSB0aGUgcmVmQ291bnQgdG8g
aG9sZCB0aGUKKyAgICAgICAgJ0luVGFibGUnIGZsYWcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9z
cWwvU1FMaXRlRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lz
dGVtOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpwcmVwYXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50Lmg6CisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5n
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZzo6Y29weVdpdGhOdWxsVGVybWluYXRpb24p
OgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0lt
cGw6On5TdHJpbmdJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpjcm9zc1RocmVhZFN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpzaGFyZWRCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6aW5U
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpzZXRJblRhYmxlKToKKwogMjAx
MC0wMS0xOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CiAKICAgICAgICAg
QWRqdXN0IHRoZSBzY3JvbGwgcG9zaXRpb24gd2hlbiBkb2luZyBhIGZ1bGwgcGFnZSB6b29tLCBz
byB0aGUgY29udGVudApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gNTM0MjcpCisrKyBXZWJDb3Jl
L1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNiBAQCBfX1pO
N1dlYkNvcmUxMFN0cmluZ0ltcGw3cmVwbGFjZUV0dAogX19aTjdXZWJDb3JlMTBTdHJpbmdJbXBs
OGVuZHNXaXRoRVBTMF9iCiBfX1pON1dlYkNvcmUxMFN0cmluZ0ltcGxEMUV2CiBfX1pON1dlYkNv
cmUxMFN0cmluZ0ltcGxjdlA4TlNTdHJpbmdFdgotX19aTjdXZWJDb3JlMTBTdHJpbmdJbXBsZGxF
UHYKIF9fWk43V2ViQ29yZTEwaGFuZEN1cnNvckV2CiBfX1pON1dlYkNvcmUxMHNldENvb2tpZXNF
UE5TXzhEb2N1bWVudEVSS05TXzRLVVJMRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTExQml0
bWFwSW1hZ2VDMUVQN0NHSW1hZ2VQTlNfMTNJbWFnZU9ic2VydmVyRQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9TdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gNTM0MjcpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvU3RyaW5nSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDMxICs1NywxMiBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgZGVsZXRlVUNoYXJWZWN0b3IoY29uCiAgICAgZmFzdEZyZWUo
Y29uc3RfY2FzdDxVQ2hhcio+KHApKTsKIH0KIAotLy8gU29tZSBvZiB0aGUgZmFjdG9yeSBtZXRo
b2RzIGNyZWF0ZSBidWZmZXJzIHVzaW5nIGZhc3RNYWxsb2MuCi0vLyBXZSBtdXN0IGVuc3VyZSB0
aGF0IGFsbCBhbGxvY2F0aW9ucyBvZiBTdHJpbmdJbXBsIGFyZSBhbGxvY2F0ZWQgdXNpbmcKLS8v
IGZhc3RNYWxsb2Mgc28gdGhhdCB3ZSBkb24ndCBoYXZlIG1pcy1tYXRjaGVkIGZyZWVzLiBXZSBh
Y2NvbXBsaXNoIAotLy8gdGhpcyBieSBvdmVycmlkaW5nIHRoZSBuZXcgYW5kIGRlbGV0ZSBvcGVy
YXRvcnMuCi12b2lkKiBTdHJpbmdJbXBsOjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIHZvaWQq
IGFkZHJlc3MpCi17Ci0gICAgaWYgKGFkZHJlc3MpCi0gICAgICAgIHJldHVybiBhZGRyZXNzOyAg
Ly8gQWxsb2NhdGluZyB1c2luZyBhbiBpbnRlcm5hbCBidWZmZXIKLSAgICByZXR1cm4gZmFzdE1h
bGxvYyhzaXplKTsKLX0KLQotdm9pZCogU3RyaW5nSW1wbDo6b3BlcmF0b3IgbmV3KHNpemVfdCBz
aXplKQotewotICAgIHJldHVybiBmYXN0TWFsbG9jKHNpemUpOwotfQotCi12b2lkIFN0cmluZ0lt
cGw6Om9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBhZGRyZXNzKQotewotICAgIGZhc3RGcmVlKGFkZHJl
c3MpOwotfQotCiAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWQgb25seSB0byBjcmVhdGUgdGhl
IGVtcHR5IHN0cmluZy4KIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoKQogICAgIDogbV9kYXRhKDAp
CisgICAgLCBtX3NoYXJlZEJ1ZmZlcigwKQogICAgICwgbV9sZW5ndGgoMCkKKyAgICAsIG1fcmVm
Q291bnRBbmRGbGFncyhzX3JlZkNvdW50SW5jcmVtZW50KQogICAgICwgbV9oYXNoKDApCiB7CiAg
ICAgLy8gRW5zdXJlIHRoYXQgdGhlIGhhc2ggaXMgY29tcHV0ZWQgc28gdGhhdCBBdG9taWNTdHJp
bmdIYXNoIGNhbiBjYWxsIGV4aXN0aW5nSGFzaCgpCkBAIC05Miw3ICs3Myw5IEBAIFN0cmluZ0lt
cGw6OlN0cmluZ0ltcGwoKQogCiBpbmxpbmUgU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogICAgIDogbV9kYXRhKGNoYXJhY3Rl
cnMpCisgICAgLCBtX3NoYXJlZEJ1ZmZlcigwKQogICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAg
ICwgbV9yZWZDb3VudEFuZEZsYWdzKHNfcmVmQ291bnRJbmNyZW1lbnQpCiAgICAgLCBtX2hhc2go
MCkKIHsKICAgICBBU1NFUlQoY2hhcmFjdGVycyk7CkBAIC0xMDQsNyArODcsNyBAQCBTdHJpbmdJ
bXBsOjp+U3RyaW5nSW1wbCgpCiAgICAgaWYgKGluVGFibGUoKSkKICAgICAgICAgQXRvbWljU3Ry
aW5nOjpyZW1vdmUodGhpcyk7CiAgICAgaWYgKCFidWZmZXJJc0ludGVybmFsKCkpIHsKLSAgICAg
ICAgU2hhcmVkVUNoYXIqIHNoYXJlZEJ1ZmZlciA9IG1fc2hhcmVkQnVmZmVyQW5kRmxhZ3MuZ2V0
KCk7CisgICAgICAgIFNoYXJlZFVDaGFyKiBzaGFyZWRCdWZmZXIgPSBtX3NoYXJlZEJ1ZmZlcjsK
ICAgICAgICAgaWYgKHNoYXJlZEJ1ZmZlcikKICAgICAgICAgICAgIHNoYXJlZEJ1ZmZlci0+ZGVy
ZWYoKTsKICAgICAgICAgZWxzZQpAQCAtOTcwLDcgKzk1Myw3IEBAIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXQKICAgICBpZiAoc2hhcmVkQnVmZmVyKSB7CiAgICAgICAg
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gaW1wbCA9IGFkb3B0UmVmKG5ldyBTdHJpbmdJbXBsKHN0
ci5kYXRhKCksIHN0ci5zaXplKCkpKTsKICAgICAgICAgc2hhcmVkQnVmZmVyLT5yZWYoKTsKLSAg
ICAgICAgaW1wbC0+bV9zaGFyZWRCdWZmZXJBbmRGbGFncy5zZXQoc2hhcmVkQnVmZmVyKTsKKyAg
ICAgICAgaW1wbC0+bV9zaGFyZWRCdWZmZXIgPSBzaGFyZWRCdWZmZXI7CiAgICAgICAgIHJldHVy
biBpbXBsOwogICAgIH0KICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y3JlYXRlKHN0ci5kYXRhKCks
IHN0ci5zaXplKCkpOwpAQCAtOTk3LDcgKzk4MCw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6Y3JlYXQKICAgICBkYXRhW2xlbmd0aF0gPSAwOwogICAgIHRlcm1pbmF0ZWRT
dHJpbmctPm1fbGVuZ3RoLS07CiAgICAgdGVybWluYXRlZFN0cmluZy0+bV9oYXNoID0gc3RyaW5n
Lm1faGFzaDsKLSAgICB0ZXJtaW5hdGVkU3RyaW5nLT5tX3NoYXJlZEJ1ZmZlckFuZEZsYWdzLnNl
dEZsYWcoSGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKTsKKyAgICB0ZXJtaW5hdGVkU3RyaW5n
LT5tX3JlZkNvdW50QW5kRmxhZ3MgfD0gc19yZWZDb3VudEZsYWdIYXNUZXJtaW5hdGluZ051bGxD
aGFyYWN0ZXI7CiAgICAgcmV0dXJuIHRlcm1pbmF0ZWRTdHJpbmcucmVsZWFzZSgpOwogfQogCkBA
IC0xMDE0LDcgKzk5Nyw3IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3Jv
c3MKICAgICBTaGFyZWRVQ2hhciogc2hhcmVkID0gc2hhcmVkQnVmZmVyKCk7CiAgICAgaWYgKHNo
YXJlZCkgewogICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gaW1wbCA9IGFkb3B0UmVmKG5ldyBT
dHJpbmdJbXBsKG1fZGF0YSwgbV9sZW5ndGgpKTsKLSAgICAgICAgaW1wbC0+bV9zaGFyZWRCdWZm
ZXJBbmRGbGFncy5zZXQoc2hhcmVkLT5jcm9zc1RocmVhZENvcHkoKS5yZWxlYXNlUmVmKCkpOwor
ICAgICAgICBpbXBsLT5tX3NoYXJlZEJ1ZmZlciA9IHNoYXJlZC0+Y3Jvc3NUaHJlYWRDb3B5KCku
cmVsZWFzZVJlZigpOwogICAgICAgICByZXR1cm4gaW1wbC5yZWxlYXNlKCk7CiAgICAgfQogCkBA
IC0xMDI3LDkgKzEwMTAsOSBAQCBTdHJpbmdJbXBsOjpTaGFyZWRVQ2hhciogU3RyaW5nSW1wbDo6
c2hhCiAgICAgaWYgKG1fbGVuZ3RoIDwgbWluTGVuZ3RoVG9TaGFyZSB8fCBidWZmZXJJc0ludGVy
bmFsKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKCFtX3NoYXJlZEJ1ZmZlckFuZEZs
YWdzLmdldCgpKQotICAgICAgICBtX3NoYXJlZEJ1ZmZlckFuZEZsYWdzLnNldChTaGFyZWRVQ2hh
cjo6Y3JlYXRlKG5ldyBPd25GYXN0TWFsbG9jUHRyPFVDaGFyPihjb25zdF9jYXN0PFVDaGFyKj4o
bV9kYXRhKSkpLnJlbGVhc2VSZWYoKSk7Ci0gICAgcmV0dXJuIG1fc2hhcmVkQnVmZmVyQW5kRmxh
Z3MuZ2V0KCk7CisgICAgaWYgKCFtX3NoYXJlZEJ1ZmZlcikKKyAgICAgICAgbV9zaGFyZWRCdWZm
ZXIgPSBTaGFyZWRVQ2hhcjo6Y3JlYXRlKG5ldyBPd25GYXN0TWFsbG9jUHRyPFVDaGFyPihjb25z
dF9jYXN0PFVDaGFyKj4obV9kYXRhKSkpLnJlbGVhc2VSZWYoKTsKKyAgICByZXR1cm4gbV9zaGFy
ZWRCdWZmZXI7CiB9CiAKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCShyZXZp
c2lvbiA1MzQyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRl
IDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3duRmFzdE1h
bGxvY1B0ci5oPgotI2luY2x1ZGUgPHd0Zi9QdHJBbmRGbGFncy5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0hhc2hGdW5jdGlvbnMuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CkBAIC01OCw3ICs1OCw3IEBAIGVudW0gVGV4dENhc2VTZW5zaXRp
dml0eSB7IFRleHRDYXNlU2Vuc2kKIAogdHlwZWRlZiBib29sICgqQ2hhcmFjdGVyTWF0Y2hGdW5j
dGlvblB0cikoVUNoYXIpOwogCi1jbGFzcyBTdHJpbmdJbXBsIDogcHVibGljIFJlZkNvdW50ZWQ8
U3RyaW5nSW1wbD4geworY2xhc3MgU3RyaW5nSW1wbCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAg
ICAgZnJpZW5kIHN0cnVjdCBDU3RyaW5nVHJhbnNsYXRvcjsKICAgICBmcmllbmQgc3RydWN0IEhh
c2hBbmRDaGFyYWN0ZXJzVHJhbnNsYXRvcjsKICAgICBmcmllbmQgc3RydWN0IFVDaGFyQnVmZmVy
VHJhbnNsYXRvcjsKQEAgLTk2LDE2ICs5NiwyMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMoKSB7IHJldHVybiBtX2RhdGE7IH0KICAgICB1bnNpZ25lZCBsZW5ndGgoKSB7
IHJldHVybiBtX2xlbmd0aDsgfQogCi0gICAgYm9vbCBoYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0
ZXIoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEJ1ZmZlckFuZEZsYWdzLmlzRmxhZ1NldChIYXNU
ZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIpOyB9CisgICAgYm9vbCBoYXNUZXJtaW5hdGluZ051bGxD
aGFyYWN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3JlZkNvdW50QW5kRmxhZ3MgJiBzX3JlZkNvdW50
RmxhZ0hhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlcjsgfQogCi0gICAgYm9vbCBpblRhYmxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zaGFyZWRCdWZmZXJBbmRGbGFncy5pc0ZsYWdTZXQoSW5UYWJsZSk7
IH0KLSAgICB2b2lkIHNldEluVGFibGUoKSB7IHJldHVybiBtX3NoYXJlZEJ1ZmZlckFuZEZsYWdz
LnNldEZsYWcoSW5UYWJsZSk7IH0KKyAgICBib29sIGluVGFibGUoKSBjb25zdCB7IHJldHVybiBt
X3JlZkNvdW50QW5kRmxhZ3MgJiBzX3JlZkNvdW50RmxhZ0luVGFibGU7IH0KKyAgICB2b2lkIHNl
dEluVGFibGUoKSB7IG1fcmVmQ291bnRBbmRGbGFncyB8PSBzX3JlZkNvdW50RmxhZ0luVGFibGU7
IH0KIAogICAgIHVuc2lnbmVkIGhhc2goKSB7IGlmIChtX2hhc2ggPT0gMCkgbV9oYXNoID0gY29t
cHV0ZUhhc2gobV9kYXRhLCBtX2xlbmd0aCk7IHJldHVybiBtX2hhc2g7IH0KICAgICB1bnNpZ25l
ZCBleGlzdGluZ0hhc2goKSBjb25zdCB7IEFTU0VSVChtX2hhc2gpOyByZXR1cm4gbV9oYXNoOyB9
CiAgICAgaW5saW5lIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBVQ2hhciogZGF0
YSwgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiBXVEY6OnN0cmluZ0hhc2goZGF0YSwgbGVuZ3Ro
KTsgfQogICAgIGlubGluZSBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgY2hhciog
ZGF0YSkgeyByZXR1cm4gV1RGOjpzdHJpbmdIYXNoKGRhdGEpOyB9CiAgICAgCisgICAgU3RyaW5n
SW1wbCogcmVmKCkgeyBtX3JlZkNvdW50QW5kRmxhZ3MgKz0gc19yZWZDb3VudEluY3JlbWVudDsg
cmV0dXJuIHRoaXM7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZGVyZWYoKSB7IG1fcmVmQ291
bnRBbmRGbGFncyAtPSBzX3JlZkNvdW50SW5jcmVtZW50OyBpZiAoIShtX3JlZkNvdW50QW5kRmxh
Z3MgJiBzX3JlZkNvdW50TWFzaykpIGRlbGV0ZSB0aGlzOyB9CisgICAgQUxXQVlTX0lOTElORSBi
b29sIGhhc09uZVJlZigpIGNvbnN0IHsgcmV0dXJuIChtX3JlZkNvdW50QW5kRmxhZ3MgJiBzX3Jl
ZkNvdW50TWFzaykgPT0gc19yZWZDb3VudEluY3JlbWVudDsgfQorCiAgICAgLy8gUmV0dXJucyBh
IFN0cmluZ0ltcGwgc3VpdGFibGUgZm9yIHVzZSBvbiBhbm90aGVyIHRocmVhZC4KICAgICBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IGNyb3NzVGhyZWFkU3RyaW5nKCk7CiAgICAgLy8gTWFrZXMgYSBk
ZWVwIGNvcHkuIEhlbHBmdWwgb25seSBpZiB5b3UgbmVlZCB0byB1c2UgYSBTdHJpbmcgb24gYW5v
dGhlciB0aHJlYWQKQEAgLTE3NSwxMyArMTc5LDkgQEAgcHVibGljOgogICAgIG9wZXJhdG9yIE5T
U3RyaW5nKigpOwogI2VuZGlmCiAKLSAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKik7Ci0K
IHByaXZhdGU6Ci0gICAgLy8gQWxsb2NhdGlvbiBmcm9tIGEgY3VzdG9tIGJ1ZmZlciBpcyBvbmx5
IGFsbG93ZWQgaW50ZXJuYWxseSB0byBhdm9pZAotICAgIC8vIG1pc21hdGNoZWQgYWxsb2NhdG9y
cy4gQ2FsbGVycyBzaG91bGQgdXNlIGNyZWF0ZSgpLgotICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhz
aXplX3Qgc2l6ZSk7Ci0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCB2b2lkKiBh
ZGRyZXNzKTsKKyAgICB1c2luZyBOb25jb3B5YWJsZTo6b3BlcmF0b3IgbmV3OworICAgIHZvaWQq
IG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQqIGluUGxhY2UpIHsgQVNTRVJUKGluUGxhY2UpOyBy
ZXR1cm4gaW5QbGFjZTsgfQogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3Jl
YXRlU3RyaXBwaW5nTnVsbENoYXJhY3RlcnNTbG93Q2FzZShjb25zdCBVQ2hhciosIHVuc2lnbmVk
IGxlbmd0aCk7CiAgICAgCkBAIC0xODksMTUgKzE4OSwxNiBAQCBwcml2YXRlOgogICAgIC8vIElu
IHRoaXMgY2FzZSwgdGhlIG1fZGF0YSBwb2ludGVyIGlzIGFuICJpbnRlcm5hbCBidWZmZXIiLCBh
bmQgZG9lcyBub3QgbmVlZCB0byBiZSBkZWFsbG9jYXRlZC4KICAgICBib29sIGJ1ZmZlcklzSW50
ZXJuYWwoKSB7IHJldHVybiBtX2RhdGEgPT0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+
KHRoaXMgKyAxKTsgfQogCi0gICAgZW51bSBTdHJpbmdJbXBsRmxhZ3MgewotICAgICAgICBIYXNU
ZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIsCi0gICAgICAgIEluVGFibGUsCi0gICAgfTsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudE1hc2sgPSAweEZGRkZGRkZDOworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNvdW50SW5jcmVtZW50ID0gMHg0OworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBzX3JlZkNvdW50RmxhZ0hhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3Rl
ciA9IDB4MjsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudEZsYWdJblRhYmxl
ID0gMHgxOwogCiAgICAgY29uc3QgVUNoYXIqIG1fZGF0YTsKKyAgICBTaGFyZWRVQ2hhciogbV9z
aGFyZWRCdWZmZXI7CiAgICAgdW5zaWduZWQgbV9sZW5ndGg7CisgICAgdW5zaWduZWQgbV9yZWZD
b3VudEFuZEZsYWdzOwogICAgIG11dGFibGUgdW5zaWduZWQgbV9oYXNoOwotICAgIFB0ckFuZEZs
YWdzPFNoYXJlZFVDaGFyLCBTdHJpbmdJbXBsRmxhZ3M+IG1fc2hhcmVkQnVmZmVyQW5kRmxhZ3M7
CiAgICAgLy8gVGhlcmUgaXMgYSBmaWN0aXRpb3VzIHZhcmlhYmxlLWxlbmd0aCBVQ2hhciBhcnJh
eSBhdCB0aGUgZW5kLCB3aGljaCBpcyB1c2VkCiAgICAgLy8gYXMgdGhlIGludGVybmFsIGJ1ZmZl
ciBieSB0aGUgY3JlYXRlVW5pbml0aWFsaXplZCBhbmQgY3JlYXRlIG1ldGhvZHMuCiB9OwpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwCShyZXZpc2lvbiA1MzQyNykKKysr
IFdlYkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDggKzQyLDggQEAgT3JpZ2luVXNhZ2VSZWNvcmQ6Ok9yaWdpblVzYWdlUmVjb3JkKCkKIHZv
aWQgT3JpZ2luVXNhZ2VSZWNvcmQ6OmFkZERhdGFiYXNlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBmdWxsUGF0aCkKIHsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2VNYXAu
Y29udGFpbnMoaWRlbnRpZmllcikpOwotICAgIEFTU0VSVF9BUkcoaWRlbnRpZmllciwgaWRlbnRp
Zmllci5pbXBsKCktPnJlZkNvdW50KCkgPT0gMSk7Ci0gICAgQVNTRVJUX0FSRyhmdWxsUGF0aCwg
ZnVsbFBhdGguaW1wbCgpLT5yZWZDb3VudCgpID09IDEpOworICAgIEFTU0VSVF9BUkcoaWRlbnRp
ZmllciwgaWRlbnRpZmllci5pbXBsKCktPmhhc09uZVJlZigpKTsKKyAgICBBU1NFUlRfQVJHKGZ1
bGxQYXRoLCBmdWxsUGF0aC5pbXBsKCktPmhhc09uZVJlZigpKTsKIAogICAgIG1fZGF0YWJhc2VN
YXAuc2V0KGlkZW50aWZpZXIsIERhdGFiYXNlRW50cnkoZnVsbFBhdGgpKTsKICAgICBtX3Vua25v
d25TZXQuYWRkKGlkZW50aWZpZXIpOwpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIE9yaWdpblVzYWdl
UmVjb3JkOjpyZW1vdmVEYXRhYmFzZShjCiB2b2lkIE9yaWdpblVzYWdlUmVjb3JkOjptYXJrRGF0
YWJhc2UoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVChtX2RhdGFiYXNl
TWFwLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKLSAgICBBU1NFUlRfQVJHKGlkZW50aWZpZXIsIGlk
ZW50aWZpZXIuaW1wbCgpLT5yZWZDb3VudCgpID09IDEpOworICAgIEFTU0VSVF9BUkcoaWRlbnRp
ZmllciwgaWRlbnRpZmllci5pbXBsKCktPmhhc09uZVJlZigpKTsKIAogICAgIG1fdW5rbm93blNl
dC5hZGQoaWRlbnRpZmllcik7CiAgICAgbV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkID0gZmFsc2U7
Cg==
</data>
<flag name="review"
          id="29190"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46945</attachid>
            <date>2010-01-19 13:36:47 -0800</date>
            <delta_ts>2010-02-02 14:22:56 -0800</delta_ts>
            <desc>New UStringImpl patch, without ancillary refactoring changes.</desc>
            <filename>patch.ptrandustringimpl.blue1.txt</filename>
            <type>text/plain</type>
            <size>10877</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUzNDg3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTAtMDEtMTkgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zMzczMQorICAgICAgICBNYW55IGZhbHNlIGxlYWtzIGluIHJlbGVhc2UgYnVp
bGRzIGR1ZSB0byBQdHJBbmRGbGFncworCisgICAgICAgIFJlbW92ZSBVbnR5cGVkUHRyQW5kQml0
ZmllbGQgKHNpbWlsYXIgdG8gUHRyQW5kRmxhZ3MpIGluIFVTdHJpbmdJbXBsLAorICAgICAgICBh
bmQgc3RlYWwgYml0cyBmcm9tIHRoZSByZWZDb3VudCBpbnN0ZWFkLgorCisgICAgICAgICogcnVu
dGltZS9VU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChKU0M6OlVTdHJpbmdJbXBsOjpiYXNlU2hh
cmVkQnVmZmVyKToKKyAgICAgICAgKEpTQzo6VVN0cmluZ0ltcGw6On5VU3RyaW5nSW1wbCk6Cisg
ICAgICAgICogcnVudGltZS9VU3RyaW5nSW1wbC5oOgorICAgICAgICAoSlNDOjpVU3RyaW5nSW1w
bDo6Y29zdCk6CisgICAgICAgIChKU0M6OlVTdHJpbmdJbXBsOjppc0lkZW50aWZpZXIpOgorICAg
ICAgICAoSlNDOjpVU3RyaW5nSW1wbDo6c2V0SXNJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6
VVN0cmluZ0ltcGw6OnJlZik6CisgICAgICAgIChKU0M6OlVTdHJpbmdJbXBsOjpkZXJlZik6Cisg
ICAgICAgIChKU0M6OlVTdHJpbmdJbXBsOjpVU3RyaW5nSW1wbCk6CisgICAgICAgIChKU0M6OlVT
dHJpbmdJbXBsOjpidWZmZXJPd25lclN0cmluZyk6CisgICAgICAgIChKU0M6OlVTdHJpbmdJbXBs
OjpidWZmZXJPd25lcnNoaXApOgorICAgICAgICAoSlNDOjpVU3RyaW5nSW1wbDo6aXNTdGF0aWMp
OgorICAgICAgICAoSlNDOjpVU3RyaW5nSW1wbDo6KToKKwogMjAxMC0wMS0xOSAgTGFzemxvIEdv
bWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBi
dWlsZCBmaXggZm9yIEpJVCB3aXRoIFJWQ1QuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1VTdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VT
dHJpbmdJbXBsLmNwcAkocmV2aXNpb24gNTM0NTkpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1VTdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTIgKzM4LDE0IEBAIG5hbWVz
cGFjZSBKU0MgewogU2hhcmVkVUNoYXIqIFVTdHJpbmdJbXBsOjpiYXNlU2hhcmVkQnVmZmVyKCkK
IHsKICAgICBBU1NFUlQoKGJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclNoYXJlZCkKLSAgICAg
ICAgfHwgKChidWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJPd25lZCkgJiYgIW1fZGF0YUJ1ZmZl
ci5hc1B0cjx2b2lkKj4oKSkpOworICAgICAgICB8fCAoKGJ1ZmZlck93bmVyc2hpcCgpID09IEJ1
ZmZlck93bmVkKSAmJiAhbV9idWZmZXIpKTsKIAotICAgIGlmIChidWZmZXJPd25lcnNoaXAoKSAh
PSBCdWZmZXJTaGFyZWQpCi0gICAgICAgIG1fZGF0YUJ1ZmZlciA9IFVudHlwZWRQdHJBbmRCaXRm
aWVsZChTaGFyZWRVQ2hhcjo6Y3JlYXRlKG5ldyBPd25GYXN0TWFsbG9jUHRyPFVDaGFyPihtX2Rh
dGEpKS5yZWxlYXNlUmVmKCksIEJ1ZmZlclNoYXJlZCk7CisgICAgaWYgKGJ1ZmZlck93bmVyc2hp
cCgpICE9IEJ1ZmZlclNoYXJlZCkgeworICAgICAgICBtX3JlZkNvdW50QW5kRmxhZ3MgPSAobV9y
ZWZDb3VudEFuZEZsYWdzICYgfnNfcmVmQ291bnRNYXNrQnVmZmVyT3duZXJzaGlwKSB8IEJ1ZmZl
clNoYXJlZDsKKyAgICAgICAgbV9idWZmZXJTaGFyZWQgPSBTaGFyZWRVQ2hhcjo6Y3JlYXRlKG5l
dyBPd25GYXN0TWFsbG9jUHRyPFVDaGFyPihtX2RhdGEpKS5yZWxlYXNlUmVmKCk7CisgICAgfQog
Ci0gICAgcmV0dXJuIG1fZGF0YUJ1ZmZlci5hc1B0cjxTaGFyZWRVQ2hhcio+KCk7CisgICAgcmV0
dXJuIG1fYnVmZmVyU2hhcmVkOwogfQogCiBTaGFyZWRVQ2hhciogVVN0cmluZ0ltcGw6OnNoYXJl
ZEJ1ZmZlcigpCkBAIC03MSwxMCArNzMsMTAgQEAgVVN0cmluZ0ltcGw6On5VU3RyaW5nSW1wbCgp
CiAgICAgICAgIGlmIChidWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJPd25lZCkKICAgICAgICAg
ICAgIGZhc3RGcmVlKG1fZGF0YSk7CiAgICAgICAgIGVsc2UgaWYgKGJ1ZmZlck93bmVyc2hpcCgp
ID09IEJ1ZmZlclN1YnN0cmluZykKLSAgICAgICAgICAgIG1fZGF0YUJ1ZmZlci5hc1B0cjxVU3Ry
aW5nSW1wbCo+KCktPmRlcmVmKCk7CisgICAgICAgICAgICBtX2J1ZmZlclN1YnN0cmluZy0+ZGVy
ZWYoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoYnVmZmVyT3duZXJzaGlw
KCkgPT0gQnVmZmVyU2hhcmVkKTsKLSAgICAgICAgICAgIG1fZGF0YUJ1ZmZlci5hc1B0cjxTaGFy
ZWRVQ2hhcio+KCktPmRlcmVmKCk7CisgICAgICAgICAgICBtX2J1ZmZlclNoYXJlZC0+ZGVyZWYo
KTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0
cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmdJ
bXBsLmgJKHJldmlzaW9uIDUzNDU5KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5n
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw0OCArNDAsNiBAQCBjbGFzcyBJZGVudGlmaWVy
VGFibGU7CiAgIAogdHlwZWRlZiBDcm9zc1RocmVhZFJlZkNvdW50ZWQ8T3duRmFzdE1hbGxvY1B0
cjxVQ2hhcj4gPiBTaGFyZWRVQ2hhcjsKIAotY2xhc3MgVW50eXBlZFB0ckFuZEJpdGZpZWxkIHsK
LXB1YmxpYzoKLSAgICBVbnR5cGVkUHRyQW5kQml0ZmllbGQoKSB7fQotCi0gICAgVW50eXBlZFB0
ckFuZEJpdGZpZWxkKHZvaWQqIHB0clZhbHVlLCB1aW50cHRyX3QgYml0VmFsdWUpCi0gICAgICAg
IDogbV92YWx1ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocHRyVmFsdWUpIHwgYml0VmFs
dWUpCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICAsIG1fbGVha3NQdHIocHRyVmFsdWUpCi0jZW5k
aWYKLSAgICB7Ci0gICAgICAgIEFTU0VSVChwdHJWYWx1ZSA9PSBhc1B0cjx2b2lkKj4oKSk7Ci0g
ICAgICAgIEFTU0VSVCgoKnRoaXMgJiB+c19hbGlnbm1lbnRNYXNrKSA9PSBiaXRWYWx1ZSk7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGFzUHRyKCkgY29uc3QgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUPihtX3ZhbHVlICYgc19hbGlnbm1lbnRNYXNrKTsgfQot
Ci0gICAgVW50eXBlZFB0ckFuZEJpdGZpZWxkJiBvcGVyYXRvciY9KHVpbnRwdHJfdCBiaXRzKQot
ICAgIHsKLSAgICAgICAgbV92YWx1ZSAmPSBiaXRzIHwgc19hbGlnbm1lbnRNYXNrOwotICAgICAg
ICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgVW50eXBlZFB0ckFuZEJpdGZpZWxkJiBvcGVy
YXRvcnw9KHVpbnRwdHJfdCBiaXRzKQotICAgIHsKLSAgICAgICAgbV92YWx1ZSB8PSBiaXRzICYg
fnNfYWxpZ25tZW50TWFzazsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIHVp
bnRwdHJfdCBvcGVyYXRvciYodWludHB0cl90IG1hc2spIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV92YWx1ZSAmIG1hc2sgJiB+c19hbGlnbm1lbnRNYXNrOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHNfYWxpZ25tZW50TWFzayA9IH5zdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KDB4Nyk7Ci0gICAgdWludHB0cl90IG1fdmFsdWU7Ci0jaWZuZGVmIE5E
RUJVRwotICAgICAgICB2b2lkKiBtX2xlYWtzUHRyOyAvLyBPbmx5IHVzZWQgdG8gYWxsb3cgdG9v
bHMgbGlrZSBsZWFrcyBvbiBPU1ggdG8gZGV0ZWN0IHRoYXQgdGhlIG1lbW9yeSBpcyByZWZlcmVu
Y2VkLgotI2VuZGlmCi19OwotCiBjbGFzcyBVU3RyaW5nSW1wbCA6IE5vbmNvcHlhYmxlIHsKIHB1
YmxpYzoKICAgICB0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+CkBAIC0xNTEsMjEgKzEw
OSwyNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICAvLyBGb3Igc3Vic3RyaW5ncywgcmV0dXJu
IHRoZSBjb3N0IG9mIHRoZSBiYXNlIHN0cmluZy4KICAgICAgICAgaWYgKGJ1ZmZlck93bmVyc2hp
cCgpID09IEJ1ZmZlclN1YnN0cmluZykKLSAgICAgICAgICAgIHJldHVybiBtX2RhdGFCdWZmZXIu
YXNQdHI8VVN0cmluZ0ltcGwqPigpLT5jb3N0KCk7CisgICAgICAgICAgICByZXR1cm4gbV9idWZm
ZXJTdWJzdHJpbmctPmNvc3QoKTsKIAotICAgICAgICBpZiAobV9kYXRhQnVmZmVyICYgc19yZXBv
cnRlZENvc3RCaXQpCisgICAgICAgIGlmIChtX3JlZkNvdW50QW5kRmxhZ3MgJiBzX3JlZkNvdW50
RmxhZ0hhc1JlcG9ydGVkQ29zdCkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBtX2Rh
dGFCdWZmZXIgfD0gc19yZXBvcnRlZENvc3RCaXQ7CisgICAgICAgIG1fcmVmQ291bnRBbmRGbGFn
cyB8PSBzX3JlZkNvdW50RmxhZ0hhc1JlcG9ydGVkQ29zdDsKICAgICAgICAgcmV0dXJuIG1fbGVu
Z3RoOwogICAgIH0KICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyBpZiAoIW1faGFzaCkgbV9o
YXNoID0gY29tcHV0ZUhhc2goZGF0YSgpLCBtX2xlbmd0aCk7IHJldHVybiBtX2hhc2g7IH0KICAg
ICB1bnNpZ25lZCBleGlzdGluZ0hhc2goKSBjb25zdCB7IEFTU0VSVChtX2hhc2gpOyByZXR1cm4g
bV9oYXNoOyB9IC8vIGZhc3QgcGF0aCBmb3IgSWRlbnRpZmllcnMKICAgICB2b2lkIHNldEhhc2go
dW5zaWduZWQgaGFzaCkgeyBBU1NFUlQoaGFzaCA9PSBjb21wdXRlSGFzaChkYXRhKCksIG1fbGVu
Z3RoKSk7IG1faGFzaCA9IGhhc2g7IH0gLy8gZmFzdCBwYXRoIGZvciBJZGVudGlmaWVycwotICAg
IGJvb2wgaXNJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc0lkZW50aWZpZXI7IH0KLSAg
ICB2b2lkIHNldElzSWRlbnRpZmllcihib29sIGlzSWRlbnRpZmllcikgeyBtX2lzSWRlbnRpZmll
ciA9IGlzSWRlbnRpZmllcjsgfQorICAgIGJvb2wgaXNJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gbV9yZWZDb3VudEFuZEZsYWdzICYgc19yZWZDb3VudEZsYWdJc0lkZW50aWZpZXI7IH0KKyAg
ICB2b2lkIHNldElzSWRlbnRpZmllcihib29sIGlzSWRlbnRpZmllcikKKyAgICB7CisgICAgICAg
IGlmIChpc0lkZW50aWZpZXIpCisgICAgICAgICAgICBtX3JlZkNvdW50QW5kRmxhZ3MgfD0gc19y
ZWZDb3VudEZsYWdJc0lkZW50aWZpZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcmVm
Q291bnRBbmRGbGFncyAmPSB+c19yZWZDb3VudEZsYWdJc0lkZW50aWZpZXI7CisgICAgfQogCi0g
ICAgVVN0cmluZ0ltcGwqIHJlZigpIHsgbV9yZWZDb3VudCArPSBzX3JlZkNvdW50SW5jcmVtZW50
OyByZXR1cm4gdGhpczsgfQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkZXJlZigpIHsgaWYgKCEo
bV9yZWZDb3VudCAtPSBzX3JlZkNvdW50SW5jcmVtZW50KSkgZGVsZXRlIHRoaXM7IH0KKyAgICBV
U3RyaW5nSW1wbCogcmVmKCkgeyBtX3JlZkNvdW50QW5kRmxhZ3MgKz0gc19yZWZDb3VudEluY3Jl
bWVudDsgcmV0dXJuIHRoaXM7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZGVyZWYoKSB7IG1f
cmVmQ291bnRBbmRGbGFncyAtPSBzX3JlZkNvdW50SW5jcmVtZW50OyBpZiAoIShtX3JlZkNvdW50
QW5kRmxhZ3MgJiBzX3JlZkNvdW50TWFzaykpIGRlbGV0ZSB0aGlzOyB9CiAKICAgICBzdGF0aWMg
dm9pZCBjb3B5Q2hhcnMoVUNoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCBVQ2hhciogc291cmNlLCB1
bnNpZ25lZCBudW1DaGFyYWN0ZXJzKQogICAgIHsKQEAgLTIwNiwxMCArMTcwLDkgQEAgcHJpdmF0
ZToKICAgICBVU3RyaW5nSW1wbChVQ2hhciogZGF0YSwgaW50IGxlbmd0aCwgQnVmZmVyT3duZXJz
aGlwIG93bmVyc2hpcCkKICAgICAgICAgOiBtX2RhdGEoZGF0YSkKICAgICAgICAgLCBtX2xlbmd0
aChsZW5ndGgpCi0gICAgICAgICwgbV9yZWZDb3VudChzX3JlZkNvdW50SW5jcmVtZW50KQorICAg
ICAgICAsIG1fcmVmQ291bnRBbmRGbGFncyhzX3JlZkNvdW50SW5jcmVtZW50IHwgb3duZXJzaGlw
KQogICAgICAgICAsIG1faGFzaCgwKQotICAgICAgICAsIG1faXNJZGVudGlmaWVyKGZhbHNlKQot
ICAgICAgICAsIG1fZGF0YUJ1ZmZlcigwLCBvd25lcnNoaXApCisgICAgICAgICwgbV9idWZmZXIo
MCkKICAgICB7CiAgICAgICAgIEFTU0VSVCgob3duZXJzaGlwID09IEJ1ZmZlckludGVybmFsKSB8
fCAob3duZXJzaGlwID09IEJ1ZmZlck93bmVkKSk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKQEAgLTIyMiwxMCArMTg1LDkgQEAgcHJpdmF0ZToKICAgICBVU3RyaW5nSW1wbChVQ2hhciog
ZGF0YSwgaW50IGxlbmd0aCwgU3RhdGljU3RyaW5nQ29uc3RydWN0VHlwZSkKICAgICAgICAgOiBt
X2RhdGEoZGF0YSkKICAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgICAgICwgbV9yZWZD
b3VudChzX3N0YXRpY1JlZkNvdW50SW5pdGlhbFZhbHVlKQorICAgICAgICAsIG1fcmVmQ291bnRB
bmRGbGFncyhzX3JlZkNvdW50RmxhZ1N0YXRpYyB8IEJ1ZmZlck93bmVkKQogICAgICAgICAsIG1f
aGFzaCgwKQotICAgICAgICAsIG1faXNJZGVudGlmaWVyKGZhbHNlKQotICAgICAgICAsIG1fZGF0
YUJ1ZmZlcigwLCBCdWZmZXJPd25lZCkKKyAgICAgICAgLCBtX2J1ZmZlcigwKQogICAgIHsKICAg
ICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KQEAgLTIzNCwxNiArMTk2LDE1IEBAIHBy
aXZhdGU6CiAgICAgVVN0cmluZ0ltcGwoVUNoYXIqIGRhdGEsIGludCBsZW5ndGgsIFBhc3NSZWZQ
dHI8VVN0cmluZ0ltcGw+IGJhc2UpCiAgICAgICAgIDogbV9kYXRhKGRhdGEpCiAgICAgICAgICwg
bV9sZW5ndGgobGVuZ3RoKQotICAgICAgICAsIG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVu
dCkKKyAgICAgICAgLCBtX3JlZkNvdW50QW5kRmxhZ3Moc19yZWZDb3VudEluY3JlbWVudCB8IEJ1
ZmZlclN1YnN0cmluZykKICAgICAgICAgLCBtX2hhc2goMCkKLSAgICAgICAgLCBtX2lzSWRlbnRp
ZmllcihmYWxzZSkKLSAgICAgICAgLCBtX2RhdGFCdWZmZXIoYmFzZS5yZWxlYXNlUmVmKCksIEJ1
ZmZlclN1YnN0cmluZykKKyAgICAgICAgLCBtX2J1ZmZlclN1YnN0cmluZyhiYXNlLnJlbGVhc2VS
ZWYoKSkKICAgICB7CiAgICAgICAgIC8vIERvIHVzZSBzdGF0aWMgc3RyaW5ncyBhcyBhIGJhc2Ug
Zm9yIHN1YnN0cmluZ3M7IFVudHlwZWRQdHJBbmRCaXRmaWVsZCBhc3N1bWVzCiAgICAgICAgIC8v
IHRoYXQgYWxsIHBvaW50ZXJzIHdpbGwgYmUgYXQgbGVhc3QgOC1ieXRlIGFsaWduZWQsIHdlIGNh
bm5vdCBndWFyYW50ZWUgdGhhdCBvZgogICAgICAgICAvLyBVU3RyaW5nSW1wbHMgdGhhdCBhcmUg
bm90IGhlYXAgYWxsb2NhdGVkLgotICAgICAgICBBU1NFUlQobV9kYXRhQnVmZmVyLmFzUHRyPFVT
dHJpbmdJbXBsKj4oKS0+c2l6ZSgpKTsKLSAgICAgICAgQVNTRVJUKCFtX2RhdGFCdWZmZXIuYXNQ
dHI8VVN0cmluZ0ltcGwqPigpLT5pc1N0YXRpYygpKTsKKyAgICAgICAgQVNTRVJUKG1fYnVmZmVy
U3Vic3RyaW5nLT5zaXplKCkpOworICAgICAgICBBU1NFUlQoIW1fYnVmZmVyU3Vic3RyaW5nLT5p
c1N0YXRpYygpKTsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KIApAQCAtMjUx
LDEwICsyMTIsOSBAQCBwcml2YXRlOgogICAgIFVTdHJpbmdJbXBsKFVDaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoLCBQYXNzUmVmUHRyPFNoYXJlZFVDaGFyPiBzaGFyZWRCdWZmZXIpCiAgICAgICAgIDog
bV9kYXRhKGRhdGEpCiAgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQotICAgICAgICAsIG1fcmVm
Q291bnQoc19yZWZDb3VudEluY3JlbWVudCkKKyAgICAgICAgLCBtX3JlZkNvdW50QW5kRmxhZ3Mo
c19yZWZDb3VudEluY3JlbWVudCB8IEJ1ZmZlclNoYXJlZCkKICAgICAgICAgLCBtX2hhc2goMCkK
LSAgICAgICAgLCBtX2lzSWRlbnRpZmllcihmYWxzZSkKLSAgICAgICAgLCBtX2RhdGFCdWZmZXIo
c2hhcmVkQnVmZmVyLnJlbGVhc2VSZWYoKSwgQnVmZmVyU2hhcmVkKQorICAgICAgICAsIG1fYnVm
ZmVyU2hhcmVkKHNoYXJlZEJ1ZmZlci5yZWxlYXNlUmVmKCkpCiAgICAgewogICAgICAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7CiAgICAgfQpAQCAtMjY3LDI2ICsyMjcsMzEgQEAgcHJpdmF0ZToKICAg
ICAvLyBUaGlzIG51bWJlciBtdXN0IGJlIGF0IGxlYXN0IDIgdG8gYXZvaWQgc2hhcmluZyBlbXB0
eSwgbnVsbCBhcyB3ZWxsIGFzIDEgY2hhcmFjdGVyIHN0cmluZ3MgZnJvbSBTbWFsbFN0cmluZ3Mu
CiAgICAgc3RhdGljIGNvbnN0IGludCBzX21pbkxlbmd0aFRvU2hhcmUgPSAxMDsKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgc19jb3B5Q2hhcnNJbmxpbmVDdXRPZmYgPSAyMDsKLSAgICBzdGF0
aWMgY29uc3QgdWludHB0cl90IHNfYnVmZmVyT3duZXJzaGlwTWFzayA9IDM7Ci0gICAgc3RhdGlj
IGNvbnN0IHVpbnRwdHJfdCBzX3JlcG9ydGVkQ29zdEJpdCA9IDQ7CiAgICAgLy8gV2UgaW5pdGlh
bGl6ZSBhbmQgaW5jcmVtZW50L2RlY3JlbWVudCB0aGUgcmVmQ291bnQgZm9yIGFsbCBub3JtYWwg
KG5vbi1zdGF0aWMpIHN0cmluZ3MgYnkgdGhlIHZhbHVlIDIuCiAgICAgLy8gV2UgaW5pdGlhbGl6
ZSBzdGF0aWMgc3RyaW5ncyB3aXRoIGFuIG9kZCBudW1iZXIgKHNwZWNpZmljYWxseSwgMSksIHN1
Y2ggdGhhdCB0aGUgcmVmQ291bnQgY2Fubm90IHJlYWNoIHplcm8uCi0gICAgc3RhdGljIGNvbnN0
IGludCBzX3JlZkNvdW50SW5jcmVtZW50ID0gMjsKLSAgICBzdGF0aWMgY29uc3QgaW50IHNfc3Rh
dGljUmVmQ291bnRJbml0aWFsVmFsdWUgPSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBz
X3JlZkNvdW50TWFzayA9IDB4RkZGRkZGRjA7CisgICAgc3RhdGljIGNvbnN0IGludCBzX3JlZkNv
dW50SW5jcmVtZW50ID0gMHgyMDsKKyAgICBzdGF0aWMgY29uc3QgaW50IHNfcmVmQ291bnRGbGFn
U3RhdGljID0gMHgxMDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudEZsYWdI
YXNSZXBvcnRlZENvc3QgPSAweDg7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfcmVmQ291
bnRGbGFnSXNJZGVudGlmaWVyID0gMHg0OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3Jl
ZkNvdW50TWFza0J1ZmZlck93bmVyc2hpcCA9IDB4MzsKIAotICAgIFVTdHJpbmdJbXBsKiBidWZm
ZXJPd25lclN0cmluZygpIHsgcmV0dXJuIChidWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJTdWJz
dHJpbmcpID8gbV9kYXRhQnVmZmVyLmFzUHRyPFVTdHJpbmdJbXBsKj4oKSA6ICB0aGlzOyB9Ci0g
ICAgY29uc3QgVVN0cmluZ0ltcGwqIGJ1ZmZlck93bmVyU3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
KGJ1ZmZlck93bmVyc2hpcCgpID09IEJ1ZmZlclN1YnN0cmluZykgPyBtX2RhdGFCdWZmZXIuYXNQ
dHI8VVN0cmluZ0ltcGwqPigpIDogIHRoaXM7IH0KKyAgICBVU3RyaW5nSW1wbCogYnVmZmVyT3du
ZXJTdHJpbmcoKSB7IHJldHVybiAoYnVmZmVyT3duZXJzaGlwKCkgPT0gQnVmZmVyU3Vic3RyaW5n
KSA/IG1fYnVmZmVyU3Vic3RyaW5nIDogIHRoaXM7IH0KKyAgICBjb25zdCBVU3RyaW5nSW1wbCog
YnVmZmVyT3duZXJTdHJpbmcoKSBjb25zdCB7IHJldHVybiAoYnVmZmVyT3duZXJzaGlwKCkgPT0g
QnVmZmVyU3Vic3RyaW5nKSA/IG1fYnVmZmVyU3Vic3RyaW5nIDogIHRoaXM7IH0KICAgICBTaGFy
ZWRVQ2hhciogYmFzZVNoYXJlZEJ1ZmZlcigpOwotICAgIHVuc2lnbmVkIGJ1ZmZlck93bmVyc2hp
cCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YUJ1ZmZlciAmIHNfYnVmZmVyT3duZXJzaGlwTWFzazsg
fQotICAgIGJvb2wgaXNTdGF0aWMoKSBjb25zdCB7IHJldHVybiBtX3JlZkNvdW50ICYgMTsgfQor
ICAgIHVuc2lnbmVkIGJ1ZmZlck93bmVyc2hpcCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVmQ291bnRB
bmRGbGFncyAmIHNfcmVmQ291bnRNYXNrQnVmZmVyT3duZXJzaGlwOyB9CisgICAgYm9vbCBpc1N0
YXRpYygpIGNvbnN0IHsgcmV0dXJuIG1fcmVmQ291bnRBbmRGbGFncyAmIHNfcmVmQ291bnRGbGFn
U3RhdGljOyB9CiAKICAgICAvLyB1bnNoYXJlZCBkYXRhCiAgICAgVUNoYXIqIG1fZGF0YTsKICAg
ICBpbnQgbV9sZW5ndGg7Ci0gICAgdW5zaWduZWQgbV9yZWZDb3VudDsKLSAgICBtdXRhYmxlIHVu
c2lnbmVkIG1faGFzaCA6IDMxOwotICAgIG11dGFibGUgdW5zaWduZWQgbV9pc0lkZW50aWZpZXIg
OiAxOwotICAgIFVudHlwZWRQdHJBbmRCaXRmaWVsZCBtX2RhdGFCdWZmZXI7CisgICAgdW5zaWdu
ZWQgbV9yZWZDb3VudEFuZEZsYWdzOworICAgIG11dGFibGUgdW5zaWduZWQgbV9oYXNoOworICAg
IHVuaW9uIHsKKyAgICAgICAgdm9pZCogbV9idWZmZXI7CisgICAgICAgIFVTdHJpbmdJbXBsKiBt
X2J1ZmZlclN1YnN0cmluZzsKKyAgICAgICAgU2hhcmVkVUNoYXIqIG1fYnVmZmVyU2hhcmVkOwor
ICAgIH07CiAKICAgICBKU19FWFBPUlREQVRBIHN0YXRpYyBVU3RyaW5nSW1wbCogc19udWxsOwog
ICAgIEpTX0VYUE9SVERBVEEgc3RhdGljIFVTdHJpbmdJbXBsKiBzX2VtcHR5Owo=
</data>
<flag name="review"
          id="29288"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48663</attachid>
            <date>2010-02-12 13:53:12 -0800</date>
            <delta_ts>2010-02-12 14:02:41 -0800</delta_ts>
            <desc>New StringImpl patch, also fix bufferIsInternal bug that was being triggered.</desc>
            <filename>patch.ptrandstring.VII.txt</filename>
            <type>text/plain</type>
            <size>14971</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDczMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMTAtMDItMTIgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91
Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzczMQorICAg
ICAgICBSZW1vdmUgdXNlcyBvZiBQdHJBbmRGbGFncyBmcm9tIFdlYkNvcmU6OlN0cmluZ0ltcGwu
CisKKyAgICAgICAgVGhlc2UgYnJlYWsgdGhlIE9TIFggTGVha3MgdG9vbC4gIE1vdmUgdGhlIG1h
bmFnZW1lbnQgb2YgbnVsbC10ZXJtaW5hdGVkIGNvcGllcworICAgICAgICBvdXQgZnJvbSBTdHJp
bmdJbXBsIHRvIFN0cmluZywgYW5kIHVzZSBhIGJpdHMgc3RvbGVuIGZyb20gdGhlIHJlZkNvdW50
IHRvIGhvbGQgdGhlCisgICAgICAgICdJblRhYmxlJyBhbmQgJ0hhc1Rlcm1pbmF0aW5nTnVsbENo
YXJhY3RlcicgZmxhZ3MsIGFsb25nIHdpdGggdGhlIHN0cmluZyB0eXBlCisgICAgICAgIChmaXhl
cyBhIGxlYWsgd2hlcmUgdGhlIHN0cmluZyBkYXRhIGlzIGFsbG9jYXRlZCBhdCB0aGUgYWRkcmVz
cyAodGhpcyArIDEpLCBhbmQgaXMKKyAgICAgICAgbWlzaW50ZXJwcmV0ZWQgYXMgYmVpbmcgYW4g
aW50ZXJuYWwgYnVmZmVyKS4KKworICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6CisgICAgICAg
ICogcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmlu
Z0ltcGw6OlN0cmluZ0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6flN0cmlu
Z0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6Y3Jvc3NUaHJlYWRTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6c2hhcmVkQnVmZmVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6Oik6
CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpoYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6aW5UYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdJbXBsOjpzZXRJblRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmlu
Z0ltcGw6OnJlZik6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpkZXJlZik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpoYXNPbmVSZWYpOgorICAgICAgICAoV2ViQ29yZTo6
U3RyaW5nSW1wbDo6b3BlcmF0b3IgbmV3KToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6
OmJ1ZmZlck93bmVyc2hpcCk6CisgICAgICAgICogc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpPcmlnaW5Vc2FnZVJlY29yZDo6YWRkRGF0YWJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6T3JpZ2luVXNhZ2VSZWNvcmQ6Om1hcmtEYXRhYmFzZSk6CisKIDIw
MTAtMDItMTIgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZpc2lvbiA1NDczMCkKKysr
IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw2
IEBAIF9fWk43V2ViQ29yZTEwU3RyaW5nSW1wbDd1c3RyaW5nRXYKIF9fWk43V2ViQ29yZTEwU3Ry
aW5nSW1wbDhlbmRzV2l0aEVQUzBfYgogX19aTjdXZWJDb3JlMTBTdHJpbmdJbXBsRDFFdgogX19a
TjdXZWJDb3JlMTBTdHJpbmdJbXBsY3ZQOE5TU3RyaW5nRXYKLV9fWk43V2ViQ29yZTEwU3RyaW5n
SW1wbGRsRVB2CiBfX1pON1dlYkNvcmUxMGhhbmRDdXJzb3JFdgogX19aTjdXZWJDb3JlMTBzZXRD
b29raWVzRVBOU184RG9jdW1lbnRFUktOU180S1VSTEVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNv
cmUxMUJpdG1hcEltYWdlQzFFUDdDR0ltYWdlUE5TXzEzSW1hZ2VPYnNlcnZlckUKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDU0NzMwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwzNiAr
NTIsMTIgQEAgc3RhdGljIGlubGluZSBVQ2hhciogbmV3VUNoYXJWZWN0b3IodW5zaQogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxVQ2hhcio+KGZhc3RNYWxsb2Moc2l6ZW9mKFVDaGFyKSAqIG4pKTsK
IH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRlbGV0ZVVDaGFyVmVjdG9yKGNvbnN0IFVDaGFyKiBw
KQotewotICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8VUNoYXIqPihwKSk7Ci19Ci0KLS8vIFNvbWUg
b2YgdGhlIGZhY3RvcnkgbWV0aG9kcyBjcmVhdGUgYnVmZmVycyB1c2luZyBmYXN0TWFsbG9jLgot
Ly8gV2UgbXVzdCBlbnN1cmUgdGhhdCBhbGwgYWxsb2NhdGlvbnMgb2YgU3RyaW5nSW1wbCBhcmUg
YWxsb2NhdGVkIHVzaW5nCi0vLyBmYXN0TWFsbG9jIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSBtaXMt
bWF0Y2hlZCBmcmVlcy4gV2UgYWNjb21wbGlzaCAKLS8vIHRoaXMgYnkgb3ZlcnJpZGluZyB0aGUg
bmV3IGFuZCBkZWxldGUgb3BlcmF0b3JzLgotdm9pZCogU3RyaW5nSW1wbDo6b3BlcmF0b3IgbmV3
KHNpemVfdCBzaXplLCB2b2lkKiBhZGRyZXNzKQotewotICAgIGlmIChhZGRyZXNzKQotICAgICAg
ICByZXR1cm4gYWRkcmVzczsgIC8vIEFsbG9jYXRpbmcgdXNpbmcgYW4gaW50ZXJuYWwgYnVmZmVy
Ci0gICAgcmV0dXJuIGZhc3RNYWxsb2Moc2l6ZSk7Ci19Ci0KLXZvaWQqIFN0cmluZ0ltcGw6Om9w
ZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gZmFzdE1hbGxvYyhzaXplKTsK
LX0KLQotdm9pZCBTdHJpbmdJbXBsOjpvcGVyYXRvciBkZWxldGUodm9pZCogYWRkcmVzcykKLXsK
LSAgICBmYXN0RnJlZShhZGRyZXNzKTsKLX0KLQogLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyB1c2Vk
IG9ubHkgdG8gY3JlYXRlIHRoZSBlbXB0eSBzdHJpbmcuCiBTdHJpbmdJbXBsOjpTdHJpbmdJbXBs
KCkKICAgICA6IG1fZGF0YSgwKQorICAgICwgbV9zaGFyZWRCdWZmZXIoMCkKICAgICAsIG1fbGVu
Z3RoKDApCisgICAgLCBtX3JlZkNvdW50QW5kRmxhZ3Moc19yZWZDb3VudEluY3JlbWVudCB8IEJ1
ZmZlckludGVybmFsKQogICAgICwgbV9oYXNoKDApCiB7CiAgICAgLy8gRW5zdXJlIHRoYXQgdGhl
IGhhc2ggaXMgY29tcHV0ZWQgc28gdGhhdCBBdG9taWNTdHJpbmdIYXNoIGNhbiBjYWxsIGV4aXN0
aW5nSGFzaCgpCkBAIC05MCwzNSArNjYsNTQgQEAgU3RyaW5nSW1wbDo6U3RyaW5nSW1wbCgpCiAg
ICAgaGFzaCgpOwogfQogCitpbmxpbmUgU3RyaW5nSW1wbDo6U3RyaW5nSW1wbCh1bnNpZ25lZCBs
ZW5ndGgpCisgICAgOiBtX2RhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHRoaXMg
KyAxKSkKKyAgICAsIG1fc2hhcmVkQnVmZmVyKDApCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisg
ICAgLCBtX3JlZkNvdW50QW5kRmxhZ3Moc19yZWZDb3VudEluY3JlbWVudCB8IEJ1ZmZlckludGVy
bmFsKQorICAgICwgbV9oYXNoKDApCit7CisgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgQVNTRVJU
KG1fbGVuZ3RoKTsKK30KKwogaW5saW5lIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKICAgICA6IG1fZGF0YShjaGFyYWN0ZXJz
KQorICAgICwgbV9zaGFyZWRCdWZmZXIoMCkKICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAs
IG1fcmVmQ291bnRBbmRGbGFncyhzX3JlZkNvdW50SW5jcmVtZW50IHwgQnVmZmVyT3duZWQpCiAg
ICAgLCBtX2hhc2goMCkKIHsKLSAgICBBU1NFUlQoY2hhcmFjdGVycyk7Ci0gICAgQVNTRVJUKGxl
bmd0aCk7Ci0gICAgQVNTRVJUKCFidWZmZXJJc0ludGVybmFsKCkpOworICAgIEFTU0VSVChtX2Rh
dGEpOworICAgIEFTU0VSVChtX2xlbmd0aCk7CiB9CiAKLWlubGluZSBTdHJpbmdJbXBsOjpTdHJp
bmdJbXBsKHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IG1fZGF0YShyZWludGVycHJldF9jYXN0PGNv
bnN0IFVDaGFyKj4odGhpcyArIDEpKQoraW5saW5lIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgUGFzc1JlZlB0cjxTaGFyZWRV
Q2hhcj4gc2hhcmVkQnVmZmVyKQorICAgIDogbV9kYXRhKGNoYXJhY3RlcnMpCisgICAgLCBtX3No
YXJlZEJ1ZmZlcihzaGFyZWRCdWZmZXIucmVsZWFzZVJlZigpKQogICAgICwgbV9sZW5ndGgobGVu
Z3RoKQorICAgICwgbV9yZWZDb3VudEFuZEZsYWdzKHNfcmVmQ291bnRJbmNyZW1lbnQgfCBCdWZm
ZXJTaGFyZWQpCiAgICAgLCBtX2hhc2goMCkKIHsKLSAgICBBU1NFUlQobGVuZ3RoKTsKLSAgICBB
U1NFUlQoYnVmZmVySXNJbnRlcm5hbCgpKTsKKyAgICBBU1NFUlQobV9kYXRhKTsKKyAgICBBU1NF
UlQobV9sZW5ndGgpOwogfQogCiBTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCgpCiB7CiAgICAgaWYg
KGluVGFibGUoKSkKICAgICAgICAgQXRvbWljU3RyaW5nOjpyZW1vdmUodGhpcyk7Ci0gICAgaWYg
KCFidWZmZXJJc0ludGVybmFsKCkpIHsKLSAgICAgICAgU2hhcmVkVUNoYXIqIHNoYXJlZEJ1ZmZl
ciA9IG1fc2hhcmVkQnVmZmVyQW5kRmxhZ3MuZ2V0KCk7Ci0gICAgICAgIGlmIChzaGFyZWRCdWZm
ZXIpCi0gICAgICAgICAgICBzaGFyZWRCdWZmZXItPmRlcmVmKCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGRlbGV0ZVVDaGFyVmVjdG9yKG1fZGF0YSk7CisKKyAgICBCdWZmZXJPd25lcnNo
aXAgb3duZXJzaGlwID0gYnVmZmVyT3duZXJzaGlwKCk7CisgICAgaWYgKG93bmVyc2hpcCAhPSBC
dWZmZXJJbnRlcm5hbCkgeworICAgICAgICBpZiAob3duZXJzaGlwID09IEJ1ZmZlck93bmVkKSB7
CisgICAgICAgICAgICBBU1NFUlQoIW1fc2hhcmVkQnVmZmVyKTsKKyAgICAgICAgICAgIEFTU0VS
VChtX2RhdGEpOworICAgICAgICAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDxVQ2hhcio+KG1fZGF0
YSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKG1fc2hhcmVkQnVmZmVy
KTsKKyAgICAgICAgICAgIG1fc2hhcmVkQnVmZmVyLT5kZXJlZigpOworICAgICAgICB9CiAgICAg
fQogfQogCkBAIC05NzYsMTMgKzk3MSw4IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5n
SW1wbDo6Y3JlYXQKICNpZiBVU0UoSlNDKQogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjpjcmVhdGUoY29uc3QgSlNDOjpVU3RyaW5nJiBzdHIpCiB7Ci0gICAgU2hhcmVkVUNoYXIq
IHNoYXJlZEJ1ZmZlciA9IGNvbnN0X2Nhc3Q8SlNDOjpVU3RyaW5nKj4oJnN0ciktPnJlcCgpLT5z
aGFyZWRCdWZmZXIoKTsKLSAgICBpZiAoc2hhcmVkQnVmZmVyKSB7Ci0gICAgICAgIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gaW1wbCA9IGFkb3B0UmVmKG5ldyBTdHJpbmdJbXBsKHN0ci5kYXRhKCks
IHN0ci5zaXplKCkpKTsKLSAgICAgICAgc2hhcmVkQnVmZmVyLT5yZWYoKTsKLSAgICAgICAgaW1w
bC0+bV9zaGFyZWRCdWZmZXJBbmRGbGFncy5zZXQoc2hhcmVkQnVmZmVyKTsKLSAgICAgICAgcmV0
dXJuIGltcGw7Ci0gICAgfQorICAgIGlmIChTaGFyZWRVQ2hhciogc2hhcmVkQnVmZmVyID0gY29u
c3RfY2FzdDxKU0M6OlVTdHJpbmcqPigmc3RyKS0+cmVwKCktPnNoYXJlZEJ1ZmZlcigpKQorICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwoc3RyLmRhdGEoKSwgc3RyLnNpemUo
KSwgc2hhcmVkQnVmZmVyKSk7CiAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZShzdHIuZGF0
YSgpLCBzdHIuc2l6ZSgpKTsKIH0KIApAQCAtMTAwNyw3ICs5OTcsNyBAQCBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0CiAgICAgZGF0YVtsZW5ndGhdID0gMDsKICAgICB0
ZXJtaW5hdGVkU3RyaW5nLT5tX2xlbmd0aC0tOwogICAgIHRlcm1pbmF0ZWRTdHJpbmctPm1faGFz
aCA9IHN0cmluZy5tX2hhc2g7Ci0gICAgdGVybWluYXRlZFN0cmluZy0+bV9zaGFyZWRCdWZmZXJB
bmRGbGFncy5zZXRGbGFnKEhhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcik7CisgICAgdGVybWlu
YXRlZFN0cmluZy0+bV9yZWZDb3VudEFuZEZsYWdzIHw9IHNfcmVmQ291bnRGbGFnSGFzVGVybWlu
YXRpbmdOdWxsQ2hhcmFjdGVyOwogICAgIHJldHVybiB0ZXJtaW5hdGVkU3RyaW5nLnJlbGVhc2Uo
KTsKIH0KIApAQCAtMTAyMSwxMiArMTAxMSw4IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3Ry
aW5nSW1wbDo6dGhyZWEKIAogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcm9z
c1RocmVhZFN0cmluZygpCiB7Ci0gICAgU2hhcmVkVUNoYXIqIHNoYXJlZCA9IHNoYXJlZEJ1ZmZl
cigpOwotICAgIGlmIChzaGFyZWQpIHsKLSAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IGltcGwg
PSBhZG9wdFJlZihuZXcgU3RyaW5nSW1wbChtX2RhdGEsIG1fbGVuZ3RoKSk7Ci0gICAgICAgIGlt
cGwtPm1fc2hhcmVkQnVmZmVyQW5kRmxhZ3Muc2V0KHNoYXJlZC0+Y3Jvc3NUaHJlYWRDb3B5KCku
cmVsZWFzZVJlZigpKTsKLSAgICAgICAgcmV0dXJuIGltcGwucmVsZWFzZSgpOwotICAgIH0KKyAg
ICBpZiAoU2hhcmVkVUNoYXIqIHNoYXJlZEJ1ZmZlciA9IHRoaXMtPnNoYXJlZEJ1ZmZlcigpKQor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwobV9kYXRhLCBtX2xlbmd0aCwg
c2hhcmVkQnVmZmVyLT5jcm9zc1RocmVhZENvcHkoKSkpOwogCiAgICAgLy8gSWYgbm8gc2hhcmVk
IGJ1ZmZlciBpcyBhdmFpbGFibGUsIGNyZWF0ZSBhIGNvcHkuCiAgICAgcmV0dXJuIHRocmVhZHNh
ZmVDb3B5KCk7CkBAIC0xMDM0LDEzICsxMDIwLDIzIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
U3RyaW5nSW1wbDo6Y3Jvc3MKIAogU3RyaW5nSW1wbDo6U2hhcmVkVUNoYXIqIFN0cmluZ0ltcGw6
OnNoYXJlZEJ1ZmZlcigpCiB7Ci0gICAgaWYgKG1fbGVuZ3RoIDwgbWluTGVuZ3RoVG9TaGFyZSB8
fCBidWZmZXJJc0ludGVybmFsKCkpCisgICAgaWYgKG1fbGVuZ3RoIDwgbWluTGVuZ3RoVG9TaGFy
ZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoIW1fc2hhcmVkQnVmZmVyQW5kRmxhZ3Mu
Z2V0KCkpCi0gICAgICAgIG1fc2hhcmVkQnVmZmVyQW5kRmxhZ3Muc2V0KFNoYXJlZFVDaGFyOjpj
cmVhdGUobmV3IE93bkZhc3RNYWxsb2NQdHI8VUNoYXI+KGNvbnN0X2Nhc3Q8VUNoYXIqPihtX2Rh
dGEpKSkucmVsZWFzZVJlZigpKTsKLSAgICByZXR1cm4gbV9zaGFyZWRCdWZmZXJBbmRGbGFncy5n
ZXQoKTsKLX0KKyAgICBCdWZmZXJPd25lcnNoaXAgb3duZXJzaGlwID0gYnVmZmVyT3duZXJzaGlw
KCk7CiAKKyAgICBpZiAob3duZXJzaGlwID09IEJ1ZmZlckludGVybmFsKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGlmIChvd25lcnNoaXAgPT0gQnVmZmVyT3duZWQpIHsKKyAgICAgICAgQVNT
RVJUKCFtX3NoYXJlZEJ1ZmZlcik7CisgICAgICAgIG1fc2hhcmVkQnVmZmVyID0gU2hhcmVkVUNo
YXI6OmNyZWF0ZShuZXcgT3duRmFzdE1hbGxvY1B0cjxVQ2hhcj4oY29uc3RfY2FzdDxVQ2hhcio+
KG1fZGF0YSkpKS5yZWxlYXNlUmVmKCk7CisgICAgICAgIG1fcmVmQ291bnRBbmRGbGFncyA9ICht
X3JlZkNvdW50QW5kRmxhZ3MgJiB+c19yZWZDb3VudE1hc2tCdWZmZXJPd25lcnNoaXApIHwgQnVm
ZmVyU2hhcmVkOworICAgIH0KKworICAgIEFTU0VSVChidWZmZXJPd25lcnNoaXAoKSA9PSBCdWZm
ZXJTaGFyZWQpOworICAgIEFTU0VSVChtX3NoYXJlZEJ1ZmZlcik7CisgICAgcmV0dXJuIG1fc2hh
cmVkQnVmZmVyOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
dGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDU0NzMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1N0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1
ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3Rm
L0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgog
I2luY2x1ZGUgPHd0Zi9Pd25GYXN0TWFsbG9jUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1B0ckFuZEZs
YWdzLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5n
SGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTU4LDI1ICs1OCwz
MyBAQCBlbnVtIFRleHRDYXNlU2Vuc2l0aXZpdHkgeyBUZXh0Q2FzZVNlbnNpCiAKIHR5cGVkZWYg
Ym9vbCAoKkNoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIpKFVDaGFyKTsKIAotY2xhc3MgU3RyaW5n
SW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPFN0cmluZ0ltcGw+IHsKK2NsYXNzIFN0cmluZ0ltcGwg
OiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIGZyaWVuZCBzdHJ1Y3QgQ1N0cmluZ1RyYW5zbGF0
b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBIYXNoQW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I7CiAgICAg
ZnJpZW5kIHN0cnVjdCBVQ2hhckJ1ZmZlclRyYW5zbGF0b3I7CiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBUaHJlYWRHbG9iYWxEYXRhOwotICAgIFN0cmluZ0ltcGwoKTsKLSAgICAKLSAgICAv
LyBUaGlzIGNvbnN0cnVjdG9yIGFkb3B0cyB0aGUgVUNoYXIqIHdpdGhvdXQgY29weWluZyB0aGUg
YnVmZmVyLgotICAgIFN0cmluZ0ltcGwoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwog
Ci0gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBhc3N1bWVzIHRoYXQgJ3RoaXMnIHdhcyBhbGxvY2F0
ZWQgd2l0aCBhIFVDaGFyIGJ1ZmZlciBvZiBzaXplICdsZW5ndGgnIGF0IHRoZSBlbmQuCisgICAg
ZW51bSBCdWZmZXJPd25lcnNoaXAgeworICAgICAgICBCdWZmZXJJbnRlcm5hbCwKKyAgICAgICAg
QnVmZmVyT3duZWQsCisgICAgICAgIEJ1ZmZlclNoYXJlZCwKKyAgICB9OworCisgICAgdHlwZWRl
ZiBDcm9zc1RocmVhZFJlZkNvdW50ZWQ8T3duRmFzdE1hbGxvY1B0cjxVQ2hhcj4gPiBTaGFyZWRV
Q2hhcjsKKworICAgIC8vIFVzZWQgdG8gY3JlYXRlIHRoZSBlbXB0eSBzdHJpbmcgKCIiKSwgYXV0
b21hdGljYWxseSBoYXNoZXMuCisgICAgU3RyaW5nSW1wbCgpOworICAgIC8vIENyZWF0ZSBhIFN0
cmluZ0ltcGwgd2l0aCBpbnRlcm5hbCBzdG9yYWdlIChCdWZmZXJJbnRlcm5hbCkKICAgICBTdHJp
bmdJbXBsKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgLy8gQ3JlYXRlIGEgU3RyaW5nSW1wbCBhZG9w
dGluZyBvd25lcnNoaXAgb2YgdGhlIHByb3ZpZGVkIGJ1ZmZlciAoQnVmZmVyT3duZWQpCisgICAg
U3RyaW5nSW1wbChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgLy8gQ3JlYXRl
IGEgU3RyaW5nSW1wbCB1c2luZyBhIHNoYXJlZCBidWZmZXIgKEJ1ZmZlclNoYXJlZCkKKyAgICBT
dHJpbmdJbXBsKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBQYXNzUmVmUHRyPFNoYXJl
ZFVDaGFyPik7CiAKICAgICAvLyBGb3IgdXNlIG9ubHkgYnkgQXRvbWljU3RyaW5nJ3MgWFhYVHJh
bnNsYXRvciBoZWxwZXJzLgogICAgIHZvaWQgc2V0SGFzaCh1bnNpZ25lZCBoYXNoKSB7IEFTU0VS
VCghbV9oYXNoKTsgbV9oYXNoID0gaGFzaDsgfQogICAgIAotICAgIHR5cGVkZWYgQ3Jvc3NUaHJl
YWRSZWZDb3VudGVkPE93bkZhc3RNYWxsb2NQdHI8VUNoYXI+ID4gU2hhcmVkVUNoYXI7Ci0KIHB1
YmxpYzoKICAgICB+U3RyaW5nSW1wbCgpOwogCkBAIC05OSwxNiArMTA3LDIwIEBAIHB1YmxpYzoK
ICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIHVu
c2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKLSAgICBib29sIGhhc1Rlcm1p
bmF0aW5nTnVsbENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkQnVmZmVyQW5kRmxh
Z3MuaXNGbGFnU2V0KEhhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3Rlcik7IH0KKyAgICBib29sIGhh
c1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVmQ291bnRBbmRG
bGFncyAmIHNfcmVmQ291bnRGbGFnSGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyOyB9CiAKLSAg
ICBib29sIGluVGFibGUoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEJ1ZmZlckFuZEZsYWdzLmlz
RmxhZ1NldChJblRhYmxlKTsgfQotICAgIHZvaWQgc2V0SW5UYWJsZSgpIHsgcmV0dXJuIG1fc2hh
cmVkQnVmZmVyQW5kRmxhZ3Muc2V0RmxhZyhJblRhYmxlKTsgfQorICAgIGJvb2wgaW5UYWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVmQ291bnRBbmRGbGFncyAmIHNfcmVmQ291bnRGbGFnSW5UYWJs
ZTsgfQorICAgIHZvaWQgc2V0SW5UYWJsZSgpIHsgbV9yZWZDb3VudEFuZEZsYWdzIHw9IHNfcmVm
Q291bnRGbGFnSW5UYWJsZTsgfQogCiAgICAgdW5zaWduZWQgaGFzaCgpIHsgaWYgKG1faGFzaCA9
PSAwKSBtX2hhc2ggPSBjb21wdXRlSGFzaChtX2RhdGEsIG1fbGVuZ3RoKTsgcmV0dXJuIG1faGFz
aDsgfQogICAgIHVuc2lnbmVkIGV4aXN0aW5nSGFzaCgpIGNvbnN0IHsgQVNTRVJUKG1faGFzaCk7
IHJldHVybiBtX2hhc2g7IH0KICAgICBpbmxpbmUgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNo
KGNvbnN0IFVDaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIFdURjo6c3RyaW5n
SGFzaChkYXRhLCBsZW5ndGgpOyB9CiAgICAgaW5saW5lIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRl
SGFzaChjb25zdCBjaGFyKiBkYXRhKSB7IHJldHVybiBXVEY6OnN0cmluZ0hhc2goZGF0YSk7IH0K
LSAgICAKKworICAgIFN0cmluZ0ltcGwqIHJlZigpIHsgbV9yZWZDb3VudEFuZEZsYWdzICs9IHNf
cmVmQ291bnRJbmNyZW1lbnQ7IHJldHVybiB0aGlzOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lk
IGRlcmVmKCkgeyBtX3JlZkNvdW50QW5kRmxhZ3MgLT0gc19yZWZDb3VudEluY3JlbWVudDsgaWYg
KCEobV9yZWZDb3VudEFuZEZsYWdzICYgc19yZWZDb3VudE1hc2spKSBkZWxldGUgdGhpczsgfQor
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBoYXNPbmVSZWYoKSBjb25zdCB7IHJldHVybiAobV9yZWZD
b3VudEFuZEZsYWdzICYgc19yZWZDb3VudE1hc2spID09IHNfcmVmQ291bnRJbmNyZW1lbnQ7IH0K
KwogICAgIC8vIFJldHVybnMgYSBTdHJpbmdJbXBsIHN1aXRhYmxlIGZvciB1c2Ugb24gYW5vdGhl
ciB0aHJlYWQuCiAgICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBjcm9zc1RocmVhZFN0cmluZygp
OwogICAgIC8vIE1ha2VzIGEgZGVlcCBjb3B5LiBIZWxwZnVsIG9ubHkgaWYgeW91IG5lZWQgdG8g
dXNlIGEgU3RyaW5nIG9uIGFub3RoZXIgdGhyZWFkCkBAIC0xNzgsMzEgKzE5MCwyNyBAQCBwdWJs
aWM6CiAgICAgb3BlcmF0b3IgTlNTdHJpbmcqKCk7CiAjZW5kaWYKIAotICAgIHZvaWQgb3BlcmF0
b3IgZGVsZXRlKHZvaWQqKTsKLQogcHJpdmF0ZToKLSAgICAvLyBBbGxvY2F0aW9uIGZyb20gYSBj
dXN0b20gYnVmZmVyIGlzIG9ubHkgYWxsb3dlZCBpbnRlcm5hbGx5IHRvIGF2b2lkCi0gICAgLy8g
bWlzbWF0Y2hlZCBhbGxvY2F0b3JzLiBDYWxsZXJzIHNob3VsZCB1c2UgY3JlYXRlKCkuCi0gICAg
dm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKTsKLSAgICB2b2lkKiBvcGVyYXRvciBuZXco
c2l6ZV90IHNpemUsIHZvaWQqIGFkZHJlc3MpOworICAgIHVzaW5nIE5vbmNvcHlhYmxlOjpvcGVy
YXRvciBuZXc7CisgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCogaW5QbGFjZSkg
eyBBU1NFUlQoaW5QbGFjZSk7IHJldHVybiBpblBsYWNlOyB9CiAKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGVTdHJpcHBpbmdOdWxsQ2hhcmFjdGVyc1Nsb3dDYXNlKGNv
bnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICAKICAgICAvLyBUaGUgU3RyaW5nSW1w
bCBzdHJ1Y3QgYW5kIGl0cyBkYXRhIG1heSBiZSBhbGxvY2F0ZWQgd2l0aGluIGEgc2luZ2xlIGhl
YXAgYmxvY2suCiAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgbV9kYXRhIHBvaW50ZXIgaXMgYW4g
ImludGVybmFsIGJ1ZmZlciIsIGFuZCBkb2VzIG5vdCBuZWVkIHRvIGJlIGRlYWxsb2NhdGVkLgot
ICAgIGJvb2wgYnVmZmVySXNJbnRlcm5hbCgpIHsgcmV0dXJuIG1fZGF0YSA9PSByZWludGVycHJl
dF9jYXN0PGNvbnN0IFVDaGFyKj4odGhpcyArIDEpOyB9CisgICAgQnVmZmVyT3duZXJzaGlwIGJ1
ZmZlck93bmVyc2hpcCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEJ1ZmZlck93bmVyc2hp
cD4obV9yZWZDb3VudEFuZEZsYWdzICYgc19yZWZDb3VudE1hc2tCdWZmZXJPd25lcnNoaXApOyB9
CiAKLSAgICBlbnVtIFN0cmluZ0ltcGxGbGFncyB7Ci0gICAgICAgIEhhc1Rlcm1pbmF0aW5nTnVs
bENoYXJhY3RlciwKLSAgICAgICAgSW5UYWJsZSwKLSAgICB9OworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBzX3JlZkNvdW50TWFzayA9IDB4RkZGRkZGRjA7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHNfcmVmQ291bnRJbmNyZW1lbnQgPSAweDEwOworICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBzX3JlZkNvdW50RmxhZ0hhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlciA9IDB4ODsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19yZWZDb3VudEZsYWdJblRhYmxlID0gMHg0OworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNvdW50TWFza0J1ZmZlck93bmVyc2hpcCA9IDB4
MzsKIAogICAgIGNvbnN0IFVDaGFyKiBtX2RhdGE7CisgICAgU2hhcmVkVUNoYXIqIG1fc2hhcmVk
QnVmZmVyOwogICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworICAgIHVuc2lnbmVkIG1fcmVmQ291bnRB
bmRGbGFnczsKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1faGFzaDsKLSAgICBQdHJBbmRGbGFnczxT
aGFyZWRVQ2hhciwgU3RyaW5nSW1wbEZsYWdzPiBtX3NoYXJlZEJ1ZmZlckFuZEZsYWdzOwotICAg
IC8vIFRoZXJlIGlzIGEgZmljdGl0aW91cyB2YXJpYWJsZS1sZW5ndGggVUNoYXIgYXJyYXkgYXQg
dGhlIGVuZCwgd2hpY2ggaXMgdXNlZAotICAgIC8vIGFzIHRoZSBpbnRlcm5hbCBidWZmZXIgYnkg
dGhlIGNyZWF0ZVVuaW5pdGlhbGl6ZWQgYW5kIGNyZWF0ZSBtZXRob2RzLgogfTsKIAogYm9vbCBl
cXVhbChTdHJpbmdJbXBsKiwgU3RyaW5nSW1wbCopOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL09y
aWdpblVzYWdlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvT3JpZ2lu
VXNhZ2VSZWNvcmQuY3BwCShyZXZpc2lvbiA1NDczMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9Pcmln
aW5Vc2FnZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAgT3JpZ2lu
VXNhZ2VSZWNvcmQ6Ok9yaWdpblVzYWdlUmVjb3JkKCkKIHZvaWQgT3JpZ2luVXNhZ2VSZWNvcmQ6
OmFkZERhdGFiYXNlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBmdWxs
UGF0aCkKIHsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2VNYXAuY29udGFpbnMoaWRlbnRpZmllcikp
OwotICAgIEFTU0VSVF9BUkcoaWRlbnRpZmllciwgaWRlbnRpZmllci5pbXBsKCktPnJlZkNvdW50
KCkgPT0gMSk7Ci0gICAgQVNTRVJUX0FSRyhmdWxsUGF0aCwgZnVsbFBhdGguaW1wbCgpLT5yZWZD
b3VudCgpID09IDEpOworICAgIEFTU0VSVF9BUkcoaWRlbnRpZmllciwgaWRlbnRpZmllci5pbXBs
KCktPmhhc09uZVJlZigpKTsKKyAgICBBU1NFUlRfQVJHKGZ1bGxQYXRoLCBmdWxsUGF0aC5pbXBs
KCktPmhhc09uZVJlZigpKTsKIAogICAgIG1fZGF0YWJhc2VNYXAuc2V0KGlkZW50aWZpZXIsIERh
dGFiYXNlRW50cnkoZnVsbFBhdGgpKTsKICAgICBtX3Vua25vd25TZXQuYWRkKGlkZW50aWZpZXIp
OwpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIE9yaWdpblVzYWdlUmVjb3JkOjpyZW1vdmVEYXRhYmFz
ZShjCiB2b2lkIE9yaWdpblVzYWdlUmVjb3JkOjptYXJrRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBp
ZGVudGlmaWVyKQogewogICAgIEFTU0VSVChtX2RhdGFiYXNlTWFwLmNvbnRhaW5zKGlkZW50aWZp
ZXIpKTsKLSAgICBBU1NFUlRfQVJHKGlkZW50aWZpZXIsIGlkZW50aWZpZXIuaW1wbCgpLT5yZWZD
b3VudCgpID09IDEpOworICAgIEFTU0VSVF9BUkcoaWRlbnRpZmllciwgaWRlbnRpZmllci5pbXBs
KCktPmhhc09uZVJlZigpKTsKIAogICAgIG1fdW5rbm93blNldC5hZGQoaWRlbnRpZmllcik7CiAg
ICAgbV9jYWNoZWREaXNrVXNhZ2VJc1ZhbGlkID0gZmFsc2U7Cg==
</data>
<flag name="review"
          id="31379"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48693</attachid>
            <date>2010-02-12 20:03:44 -0800</date>
            <delta_ts>2010-02-14 17:25:26 -0800</delta_ts>
            <desc>Last patch v0.1! Needs the ChnageLog filling out.</desc>
            <filename>patch.ptrAndStructureTraTa.noChangeLog.txt</filename>
            <type>text/plain</type>
            <size>25205</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU0NzQ4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTAtMDItMTIgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiBhbmQg
YnVnIFVSTCAoT09QUyEpCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6On5TdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6aGFzVHJhbnNpdGlvbik6CisgICAgICAgICogcnVudGltZS9TdHJ1
Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjopOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OnN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZUNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpzdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVHZXQpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZUhhc1RyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZVJlbW92ZSk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6c3RydWN0dXJlVHJhbnNpdGlvblRhYmxlQWRkKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpzdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OnNldFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6c2luZ2xlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6c2V0U2luZ2xlVHJhbnNpdGlvbik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGUuaDoKKyAgICAgICAgKiB3dGYvUHRyQW5kRmxhZ3MuaDogUmVtb3ZlZC4KKwog
MjAxMC0wMi0xMiAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDU0NzQ3KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQAogCQkwODhG
QTVCQjBFRjc2RDQzMDA1NzhFNkYgLyogUmFuZG9tTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4OEZBNUI5MEVGNzZENDMwMDU3OEU2RiAv
KiBSYW5kb21OdW1iZXIuY3BwICovOyB9OwogCQkwODhGQTVCQzBFRjc2RDQzMDA1NzhFNkYgLyog
UmFuZG9tTnVtYmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwODhGQTVCQTBFRjc2RDQzMDA1NzhFNkYgLyogUmFuZG9tTnVtYmVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDhFMjc5RTkwRUY4M0Ix
MDAwN0RCNTIzIC8qIFJhbmRvbU51bWJlclNlZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4RTI3OUU4MEVGODNCMTAwMDdEQjUyMyAvKiBSYW5kb21O
dW1iZXJTZWVkLmggKi87IH07Ci0JCTBCMUY5MjFEMEYxNzUzNTAwMDM2NDY4RSAvKiBQdHJBbmRG
bGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEIx
RjkyMUIwRjE3NTAyRDAwMzY0NjhFIC8qIFB0ckFuZEZsYWdzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEIzMzBDMjcwRjM4QzYyMzAwNjkyREUz
IC8qIFR5cGVUcmFpdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEIzMzBDMjYwRjM4QzYyMzAwNjkyREUzIC8qIFR5cGVUcmFpdHMuY3BwICovOyB9
OwogCQkwQjREN0U2MzBGMzE5QUM4MDBBRDdFNTggLyogVHlwZVRyYWl0cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEI0RDdFNjIwRjMxOUFDODAwQUQ3
RTU4IC8qIFR5cGVUcmFpdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwQkRGRkFFMDBGQzYxOTI5MDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZD
b3VudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
QkRGRkFENDBGQzYxNzEwMDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE5ODEsNyArMTk4
MCw2IEBACiAJCQkJQkMxOEM0NTUwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3BlcnR5U2xvdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTYwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3RlY3QuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMjU3REY0MEUxRjUzNzQwMDE2QjZDOSAvKiBQcm90b3R5cGVG
dW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEIxRjkyMUQwRjE3NTM1MDAwMzY0NjhFIC8q
IFB0ckFuZEZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1
QTQgLyogUHV0UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5REE0QTBFRDI0
NUVDMDBCODk2MTkgLyogUXVhbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4RkE1QkMw
RUY3NkQ0MzAwNTc4RTZGIC8qIFJhbmRvbU51bWJlci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gNTQ3NDcpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
NiBAQAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSnVtcFRhYmxlLmgi
CiAjaW5jbHVkZSAiTm9kZXMuaCIKLSNpbmNsdWRlICJQdHJBbmRGbGFncy5oIgogI2luY2x1ZGUg
IlJlZ0V4cC5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvRmFzdEFsbG9j
QmFzZS5oPgpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24g
NTQ3NDcpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNyw2ICsxMzcsOSBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShKU1ZhbHVlIHBy
b3RvdHlwZSwgCiAgICAgLCBtX3NwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgwKQogICAgICwg
bV9hbm9ueW1vdXNTbG90Q291bnQoYW5vbnltb3VzU2xvdENvdW50KQogeworICAgIG1fdHJhbnNp
dGlvbnMubV9zaW5nbGVUcmFuc2l0aW9uID0gMDsKKyAgICBtX3VzaW5nU2luZ2xlU2xvdCA9IHRy
dWU7CisKICAgICBBU1NFUlQobV9wcm90b3R5cGUpOwogICAgIEFTU0VSVChtX3Byb3RvdHlwZS5p
c09iamVjdCgpIHx8IG1fcHJvdG90eXBlLmlzTnVsbCgpKTsKIApAQCAtMTU5LDcgKzE2Miw3IEBA
IFN0cnVjdHVyZTo6flN0cnVjdHVyZSgpCiB7CiAgICAgaWYgKG1fcHJldmlvdXMpIHsKICAgICAg
ICAgQVNTRVJUKG1fbmFtZUluUHJldmlvdXMpOwotICAgICAgICBtX3ByZXZpb3VzLT50YWJsZS5y
ZW1vdmUobWFrZV9wYWlyKG1fbmFtZUluUHJldmlvdXMuZ2V0KCksIG1fYXR0cmlidXRlc0luUHJl
dmlvdXMpLCBtX3NwZWNpZmljVmFsdWVJblByZXZpb3VzKTsKKyAgICAgICAgbV9wcmV2aW91cy0+
c3RydWN0dXJlVHJhbnNpdGlvblRhYmxlUmVtb3ZlKG1ha2VfcGFpcihtX25hbWVJblByZXZpb3Vz
LmdldCgpLCBtX2F0dHJpYnV0ZXNJblByZXZpb3VzKSwgbV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91
cyk7CiAKICAgICB9CiAgICAgCkBAIC0xNzcsNiArMTgwLDkgQEAgU3RydWN0dXJlOjp+U3RydWN0
dXJlKCkKICAgICAgICAgZmFzdEZyZWUobV9wcm9wZXJ0eVRhYmxlKTsKICAgICB9CiAKKyAgICBp
ZiAoIW1fdXNpbmdTaW5nbGVTbG90KQorICAgICAgICBkZWxldGUgc3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlKCk7CisKICNpZm5kZWYgTkRFQlVHCiAjaWYgRU5BQkxFKEpTQ19NVUxUSVBMRV9USFJF
QURTKQogICAgIE11dGV4TG9ja2VyIHByb3RlY3QoaWdub3JlU2V0TXV0ZXgpOwpAQCAtMzQwLDcg
KzM0Niw3IEBAIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBTdHJ1Y3R1cmU6OmFkZFByb3AKICAgICBB
U1NFUlQoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpID09IE9iamVjdFR5cGUpOwogCi0gICAgaWYgKFN0cnVjdHVyZSog
ZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT50YWJsZS5nZXQobWFrZV9wYWlyKHByb3Bl
cnR5TmFtZS51c3RyaW5nKCkucmVwKCksIGF0dHJpYnV0ZXMpLCBzcGVjaWZpY1ZhbHVlKSkgewor
ICAgIGlmIChTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+c3RydWN0
dXJlVHJhbnNpdGlvblRhYmxlR2V0KG1ha2VfcGFpcihwcm9wZXJ0eU5hbWUudXN0cmluZygpLnJl
cCgpLCBhdHRyaWJ1dGVzKSwgc3BlY2lmaWNWYWx1ZSkpIHsKICAgICAgICAgQVNTRVJUKGV4aXN0
aW5nVHJhbnNpdGlvbi0+bV9vZmZzZXQgIT0gbm9PZmZzZXQpOwogICAgICAgICBvZmZzZXQgPSBl
eGlzdGluZ1RyYW5zaXRpb24tPm1fb2Zmc2V0ICsgZXhpc3RpbmdUcmFuc2l0aW9uLT5tX2Fub255
bW91c1Nsb3RDb3VudDsKICAgICAgICAgQVNTRVJUKG9mZnNldCA+PSBzdHJ1Y3R1cmUtPm1fYW5v
bnltb3VzU2xvdENvdW50KTsKQEAgLTQwNSw3ICs0MTEsNyBAQCBQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4gU3RydWN0dXJlOjphZGRQcm9wCiAKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IG9mZnNl
dCAtIHN0cnVjdHVyZS0+bV9hbm9ueW1vdXNTbG90Q291bnQ7CiAgICAgQVNTRVJUKHN0cnVjdHVy
ZS0+YW5vbnltb3VzU2xvdENvdW50KCkgPT0gdHJhbnNpdGlvbi0+YW5vbnltb3VzU2xvdENvdW50
KCkpOwotICAgIHN0cnVjdHVyZS0+dGFibGUuYWRkKG1ha2VfcGFpcihwcm9wZXJ0eU5hbWUudXN0
cmluZygpLnJlcCgpLCBhdHRyaWJ1dGVzKSwgdHJhbnNpdGlvbi5nZXQoKSwgc3BlY2lmaWNWYWx1
ZSk7CisgICAgc3RydWN0dXJlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVBZGQobWFrZV9wYWly
KHByb3BlcnR5TmFtZS51c3RyaW5nKCkucmVwKCksIGF0dHJpYnV0ZXMpLCB0cmFuc2l0aW9uLmdl
dCgpLCBzcGVjaWZpY1ZhbHVlKTsKICAgICByZXR1cm4gdHJhbnNpdGlvbi5yZWxlYXNlKCk7CiB9
CiAKQEAgLTg1Miw3ICs4NTgsNyBAQCBzaXplX3QgU3RydWN0dXJlOjpwdXQoY29uc3QgSWRlbnRp
ZmllciYgCiAKIGJvb2wgU3RydWN0dXJlOjpoYXNUcmFuc2l0aW9uKFVTdHJpbmc6OlJlcCogcmVw
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewotICAgIHJldHVybiB0YWJsZS5oYXNUcmFuc2l0aW9u
KG1ha2VfcGFpcihyZXAsIGF0dHJpYnV0ZXMpKTsKKyAgICByZXR1cm4gc3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlSGFzVHJhbnNpdGlvbihtYWtlX3BhaXIocmVwLCBhdHRyaWJ1dGVzKSk7CiB9CiAK
IHNpemVfdCBTdHJ1Y3R1cmU6OnJlbW92ZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUp
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDU0NzQ3KQorKysg
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5
LDcgKzE5OSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVmUHRyPFVTdHJpbmc6OlJl
cD4gbV9uYW1lSW5QcmV2aW91czsKICAgICAgICAgSlNDZWxsKiBtX3NwZWNpZmljVmFsdWVJblBy
ZXZpb3VzOwogCi0gICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB0YWJsZTsKKyAgICAg
ICAgdHlwZWRlZiBzdGQ6OnBhaXI8U3RydWN0dXJlKiwgU3RydWN0dXJlKj4gVHJhbnNpdGlvbjsK
KyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZUhhc2g6Oktl
eSwgVHJhbnNpdGlvbiwgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlSGFzaCwgU3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlSGFzaFRyYWl0cz4gVHJhbnNpdGlvblRhYmxlOworCisgICAgICAgIC8vIExh
c3QgYml0IGluZGljYXRlcyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgc2luZ2xlIHRyYW5zaXRp
b24gb3B0aW1pc2F0aW9uCisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRyYW5zaXRpb25U
YWJsZSogbV90YWJsZTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogbV9zaW5nbGVUcmFuc2l0aW9u
OworICAgICAgICB9IG1fdHJhbnNpdGlvbnM7CiAKICAgICAgICAgV2Vha0dDUHRyPEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3I+IG1fZW51bWVyYXRpb25DYWNoZTsKIApAQCAtMjI0LDcgKzIzMSwxMTQg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgdW5zaWduZWQgbV9zcGVjaWZpY0Z1
bmN0aW9uVGhyYXNoQ291bnQgOiAyOwogICAgICAgICB1bnNpZ25lZCBtX2Fub255bW91c1Nsb3RD
b3VudCA6IDU7Ci0gICAgICAgIC8vIDUgZnJlZSBiaXRzCisgICAgICAgIHVuc2lnbmVkIG1fdXNp
bmdTaW5nbGVTbG90IDogMTsKKyAgICAgICAgLy8gNCBmcmVlIGJpdHMKKworCisgICAgICAgIC8v
IFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSBtYW5hZ2VtZW50IG1ldGhvZHMgZm9sbG93IGJlbG93
OgorCisgICAgICAgIC8vIFRoZSBjb250YWlucyBhbmQgZ2V0IG1ldGhvZHMgYWNjZXB0IGltcHJl
Y2lzZSBtYXRjaGVzLCBzbyBpZiBhbiB1bnNwZWNpYWxpc2VkIHRyYW5zaXRpb24gZXhpc3RzCisg
ICAgICAgIC8vIGZvciB0aGUgZ2l2ZW4ga2V5IHRoZXkgd2lsbCBjb25zaWRlciB0aGF0IHRyYW5z
aXRpb24gdG8gYmUgYSBtYXRjaC4gIElmIGEgc3BlY2lhbGlzZWQgdHJhbnNpdGlvbgorICAgICAg
ICAvLyBleGlzdHMgYW5kIGl0IG1hdGNoZXMgdGhlIHByb3ZpZGVkIHNwZWNpZmljVmFsdWUsIGdl
dCB3aWxsIHJldHVybiB0aGUgc3BlY2lmaWMgdHJhbnNpdGlvbi4KKyAgICAgICAgYm9vbCBzdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGVDb250YWlucyhjb25zdCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGVIYXNoOjpLZXkmIGtleSwgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAobV91c2luZ1NpbmdsZVNsb3QpIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5zaXRpb24oKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uICYmIGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9u
YW1lSW5QcmV2aW91cy5nZXQoKSA9PSBrZXkuZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgICAg
JiYgZXhpc3RpbmdUcmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzID09IGtleS5zZWNv
bmQKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgKGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9zcGVj
aWZpY1ZhbHVlSW5QcmV2aW91cyA9PSBzcGVjaWZpY1ZhbHVlIHx8IGV4aXN0aW5nVHJhbnNpdGlv
bi0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyA9PSAwKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIFRyYW5zaXRpb25UYWJsZTo6aXRlcmF0b3IgZmluZCA9IHN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZSgpLT5maW5kKGtleSk7CisgICAgICAgICAgICBpZiAoZmluZCA9PSBzdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGUoKS0+ZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgICAgICByZXR1cm4gZmluZC0+c2Vjb25kLmZpcnN0IHx8IGZpbmQtPnNlY29uZC5z
ZWNvbmQtPnRyYW5zaXRpb25lZEZvcihzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlVHJhbnNpdGlvblRhYmxlR2V0KGNvbnN0IFN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZUhhc2g6OktleSYga2V5LCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzaW5nU2luZ2xlU2xvdCkgeworICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc2luZ2xlVHJhbnNp
dGlvbigpOworICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYW5zaXRpb24gJiYgZXhpc3Rp
bmdUcmFuc2l0aW9uLT5tX25hbWVJblByZXZpb3VzLmdldCgpID09IGtleS5maXJzdAorICAgICAg
ICAgICAgICAgICAgICAmJiBleGlzdGluZ1RyYW5zaXRpb24tPm1fYXR0cmlidXRlc0luUHJldmlv
dXMgPT0ga2V5LnNlY29uZAorICAgICAgICAgICAgICAgICAgICAmJiAoZXhpc3RpbmdUcmFuc2l0
aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzID09IHNwZWNpZmljVmFsdWUgfHwgZXhpc3Rp
bmdUcmFuc2l0aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzID09IDApKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOworICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUcmFuc2l0aW9uIHRyYW5zaXRp
b24gPSBzdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUoKS0+Z2V0KGtleSk7CisgICAgICAgICAgICBp
ZiAodHJhbnNpdGlvbi5zZWNvbmQgJiYgdHJhbnNpdGlvbi5zZWNvbmQtPnRyYW5zaXRpb25lZEZv
cihzcGVjaWZpY1ZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNpdGlvbi5zZWNv
bmQ7CisgICAgICAgICAgICByZXR1cm4gdHJhbnNpdGlvbi5maXJzdDsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgc3RydWN0dXJlVHJhbnNpdGlvblRhYmxlSGFzVHJhbnNpdGlvbihjb25zdCBT
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVIYXNoOjpLZXkmIGtleSkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG1fdXNpbmdTaW5nbGVTbG90KSB7CisgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiB0cmFuc2l0aW9uID0gc2luZ2xlVHJhbnNpdGlvbigpOworICAgICAgICAgICAgICAg
IHJldHVybiB0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPm1fbmFtZUluUHJldmlvdXMgPT0ga2V5
LmZpcnN0CisgICAgICAgICAgICAgICAgJiYgdHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2
aW91cyA9PSBrZXkuc2Vjb25kOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZSgpLT5jb250YWlucyhrZXkpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBzdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVSZW1vdmUoY29uc3QgU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlSGFzaDo6S2V5JiBrZXksIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNpbmdTaW5nbGVTbG90KSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKHN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZUNvbnRhaW5zKGtleSwgc3BlY2lm
aWNWYWx1ZSkpOworICAgICAgICAgICAgICAgIHNldFNpbmdsZVRyYW5zaXRpb24oMCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVHJhbnNpdGlv
blRhYmxlOjppdGVyYXRvciBmaW5kID0gc3RydWN0dXJlVHJhbnNpdGlvblRhYmxlKCktPmZpbmQo
a2V5KTsKKyAgICAgICAgICAgIGlmICghc3BlY2lmaWNWYWx1ZSkKKyAgICAgICAgICAgICAgICBm
aW5kLT5zZWNvbmQuZmlyc3QgPSAwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGZpbmQtPnNlY29uZC5zZWNvbmQgPSAwOworICAgICAgICAgICAgaWYgKCFmaW5kLT5zZWNvbmQu
Zmlyc3QgJiYgIWZpbmQtPnNlY29uZC5zZWNvbmQpCisgICAgICAgICAgICAgICAgc3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlKCktPnJlbW92ZShmaW5kKTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgc3RydWN0dXJlVHJhbnNpdGlvblRhYmxlQWRkKGNvbnN0IFN0cnVjdHVyZVRyYW5zaXRpb25U
YWJsZUhhc2g6OktleSYga2V5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNDZWxsKiBzcGVjaWZp
Y1ZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2luZ1NpbmdsZVNsb3QpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIXNpbmdsZVRyYW5zaXRpb24oKSkgeworICAgICAgICAgICAg
ICAgICAgICBzZXRTaW5nbGVUcmFuc2l0aW9uKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU3RydWN0dXJl
KiBleGlzdGluZ1RyYW5zaXRpb24gPSBzaW5nbGVUcmFuc2l0aW9uKCk7CisgICAgICAgICAgICAg
ICAgVHJhbnNpdGlvblRhYmxlKiB0cmFuc2l0aW9uVGFibGUgPSBuZXcgVHJhbnNpdGlvblRhYmxl
OworICAgICAgICAgICAgICAgIHNldFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSh0cmFuc2l0aW9u
VGFibGUpOworICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYW5zaXRpb24pCisgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZUFkZChzdGQ6Om1ha2VfcGFpcihl
eGlzdGluZ1RyYW5zaXRpb24tPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIGV4aXN0aW5nVHJhbnNp
dGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyksIGV4aXN0aW5nVHJhbnNpdGlvbiwgZXhpc3Rp
bmdUcmFuc2l0aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICghc3BlY2lmaWNWYWx1ZSkgeworICAgICAgICAgICAgICAgIFRyYW5z
aXRpb25UYWJsZTo6aXRlcmF0b3IgZmluZCA9IHN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSgpLT5m
aW5kKGtleSk7CisgICAgICAgICAgICAgICAgaWYgKGZpbmQgPT0gc3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlKCktPmVuZCgpKQorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGUoKS0+YWRkKGtleSwgVHJhbnNpdGlvbihzdHJ1Y3R1cmUsIDApKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZpbmQtPnNlY29uZC5maXJzdCA9IHN0cnVj
dHVyZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUg
YWRkaW5nIGEgdHJhbnNpdGlvbiB0byBhIHNwZWNpZmljIHZhbHVlLCB0aGVuIHRoZXJlIGNhbm5v
dCBiZQorICAgICAgICAgICAgICAgIC8vIGFuIGV4aXN0aW5nIHRyYW5zaXRpb24KKyAgICAgICAg
ICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSgpLT5jb250YWlucyhrZXkp
KTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUoKS0+YWRkKGtleSwg
VHJhbnNpdGlvbigwLCBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIFRyYW5zaXRpb25UYWJsZSogc3RydWN0dXJlVHJhbnNpdGlvblRhYmxlKCkgY29uc3Qg
eyBBU1NFUlQoIW1fdXNpbmdTaW5nbGVTbG90KTsgcmV0dXJuIG1fdHJhbnNpdGlvbnMubV90YWJs
ZTsgfQorICAgICAgICB2b2lkIHNldFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZShUcmFuc2l0aW9u
VGFibGUqIHRhYmxlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV91c2luZ1Npbmds
ZVNsb3QpOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgIHNldFNpbmdsZVRyYW5zaXRpb24o
MCk7CisjZW5kaWYKKyAgICAgICAgICAgIG1fdXNpbmdTaW5nbGVTbG90ID0gZmFsc2U7CisgICAg
ICAgICAgICBtX3RyYW5zaXRpb25zLm1fdGFibGUgPSB0YWJsZTsKKyAgICAgICAgICAgIC8vIFRo
aXMgaW1wbGljaXRseSBjbGVhcnMgdGhlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgd2UncmUgdXNpbmcg
YSBzaW5nbGUgdHJhbnNpdGlvbgorICAgICAgICAgICAgQVNTRVJUKCFtX3VzaW5nU2luZ2xlU2xv
dCk7CisgICAgICAgIH0KKyAgICAgICAgU3RydWN0dXJlKiBzaW5nbGVUcmFuc2l0aW9uKCkgY29u
c3QgeyBBU1NFUlQobV91c2luZ1NpbmdsZVNsb3QpOyByZXR1cm4gbV90cmFuc2l0aW9ucy5tX3Np
bmdsZVRyYW5zaXRpb247IH0KKyAgICAgICAgdm9pZCBzZXRTaW5nbGVUcmFuc2l0aW9uKFN0cnVj
dHVyZSogc3RydWN0dXJlKSB7IEFTU0VSVChtX3VzaW5nU2luZ2xlU2xvdCk7IG1fdHJhbnNpdGlv
bnMubV9zaW5nbGVUcmFuc2l0aW9uID0gc3RydWN0dXJlOyB9CiAgICAgfTsKIAogICAgIGlubGlu
ZSBzaXplX3QgU3RydWN0dXJlOjpnZXQoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQpA
QCAtMjcxLDU4ICszODUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gbV9wcm9wZXJ0eVRhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRleCAtIDFdLm9mZnNldDsKICAg
ICAgICAgfQogICAgIH0KLSAgICAKLSAgICBib29sIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6
Y29udGFpbnMoY29uc3QgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlSGFzaDo6S2V5JiBrZXksIEpT
Q2VsbCogc3BlY2lmaWNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh1c2luZ1NpbmdsZVRyYW5z
aXRpb25TbG90KCkpIHsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9u
ID0gc2luZ2xlVHJhbnNpdGlvbigpOwotICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNp
dGlvbiAmJiBleGlzdGluZ1RyYW5zaXRpb24tPm1fbmFtZUluUHJldmlvdXMuZ2V0KCkgPT0ga2V5
LmZpcnN0Ci0gICAgICAgICAgICAgICAgICAgJiYgZXhpc3RpbmdUcmFuc2l0aW9uLT5tX2F0dHJp
YnV0ZXNJblByZXZpb3VzID09IGtleS5zZWNvbmQKLSAgICAgICAgICAgICAgICAgICAmJiAoZXhp
c3RpbmdUcmFuc2l0aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzID09IHNwZWNpZmljVmFs
dWUgfHwgZXhpc3RpbmdUcmFuc2l0aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzID09IDAp
OwotICAgICAgICB9Ci0gICAgICAgIFRyYW5zaXRpb25UYWJsZTo6aXRlcmF0b3IgZmluZCA9IHRh
YmxlKCktPmZpbmQoa2V5KTsKLSAgICAgICAgaWYgKGZpbmQgPT0gdGFibGUoKS0+ZW5kKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIGZpbmQtPnNlY29uZC5m
aXJzdCB8fCBmaW5kLT5zZWNvbmQuc2Vjb25kLT50cmFuc2l0aW9uZWRGb3Ioc3BlY2lmaWNWYWx1
ZSk7Ci0gICAgfQotCi0gICAgU3RydWN0dXJlKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Omdl
dChjb25zdCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVIYXNoOjpLZXkmIGtleSwgSlNDZWxsKiBz
cGVjaWZpY1ZhbHVlKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKHVzaW5nU2luZ2xlVHJhbnNp
dGlvblNsb3QoKSkgewotICAgICAgICAgICAgU3RydWN0dXJlKiBleGlzdGluZ1RyYW5zaXRpb24g
PSBzaW5nbGVUcmFuc2l0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFuc2l0aW9u
ICYmIGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSA9PSBrZXkuZmly
c3QKLSAgICAgICAgICAgICAgICAmJiBleGlzdGluZ1RyYW5zaXRpb24tPm1fYXR0cmlidXRlc0lu
UHJldmlvdXMgPT0ga2V5LnNlY29uZAotICAgICAgICAgICAgICAgICYmIChleGlzdGluZ1RyYW5z
aXRpb24tPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMgPT0gc3BlY2lmaWNWYWx1ZSB8fCBleGlz
dGluZ1RyYW5zaXRpb24tPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMgPT0gMCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICB9Ci0KLSAgICAgICAgVHJhbnNpdGlvbiB0cmFuc2l0aW9uID0gdGFibGUoKS0+
Z2V0KGtleSk7Ci0gICAgICAgIGlmICh0cmFuc2l0aW9uLnNlY29uZCAmJiB0cmFuc2l0aW9uLnNl
Y29uZC0+dHJhbnNpdGlvbmVkRm9yKHNwZWNpZmljVmFsdWUpKQotICAgICAgICAgICAgcmV0dXJu
IHRyYW5zaXRpb24uc2Vjb25kOwotICAgICAgICByZXR1cm4gdHJhbnNpdGlvbi5maXJzdDsKLSAg
ICB9Ci0KLSAgICBib29sIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6aGFzVHJhbnNpdGlvbihj
b25zdCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVIYXNoOjpLZXkmIGtleSkgY29uc3QKLSAgICB7
Ci0gICAgICAgIGlmICh1c2luZ1NpbmdsZVRyYW5zaXRpb25TbG90KCkpIHsKLSAgICAgICAgICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5zaXRpb24oKTsKLSAgICAgICAgICAg
IHJldHVybiB0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPm1fbmFtZUluUHJldmlvdXMgPT0ga2V5
LmZpcnN0Ci0gICAgICAgICAgICAmJiB0cmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3Vz
ID09IGtleS5zZWNvbmQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRhYmxlKCktPmNvbnRh
aW5zKGtleSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxl
OjpyZWlmeVNpbmdsZVRyYW5zaXRpb24oKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHVzaW5nU2lu
Z2xlVHJhbnNpdGlvblNsb3QoKSk7Ci0gICAgICAgIFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0
aW9uID0gc2luZ2xlVHJhbnNpdGlvbigpOwotICAgICAgICBUcmFuc2l0aW9uVGFibGUqIHRyYW5z
aXRpb25UYWJsZSA9IG5ldyBUcmFuc2l0aW9uVGFibGU7Ci0gICAgICAgIHNldFRyYW5zaXRpb25U
YWJsZSh0cmFuc2l0aW9uVGFibGUpOwotICAgICAgICBpZiAoZXhpc3RpbmdUcmFuc2l0aW9uKQot
ICAgICAgICAgICAgYWRkKHN0ZDo6bWFrZV9wYWlyKGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9uYW1l
SW5QcmV2aW91cy5nZXQoKSwgZXhpc3RpbmdUcmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZp
b3VzKSwgZXhpc3RpbmdUcmFuc2l0aW9uLCBleGlzdGluZ1RyYW5zaXRpb24tPm1fc3BlY2lmaWNW
YWx1ZUluUHJldmlvdXMpOwotICAgIH0KKyAgICAgICAgCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIFN0cnVjdHVyZV9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZVRyYW5zaXRpb25UYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgJKHJldmlzaW9uIDU0NzQ3KQorKysgSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgotI2luY2x1
ZGUgPHd0Zi9QdHJBbmRGbGFncy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAKQEAgLTY3LDk5ICs2Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBUcmFpdFR5cGUmIHZhbHVlKSB7
IHJldHVybiBGaXJzdFRyYWl0czo6aXNEZWxldGVkVmFsdWUodmFsdWUuZmlyc3QpOyB9CiAgICAg
fTsKIAotICAgIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7Ci0gICAgICAgIHR5cGVk
ZWYgc3RkOjpwYWlyPFN0cnVjdHVyZSosIFN0cnVjdHVyZSo+IFRyYW5zaXRpb247Ci0gICAgICAg
IHR5cGVkZWYgSGFzaE1hcDxTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVIYXNoOjpLZXksIFRyYW5z
aXRpb24sIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZUhhc2gsIFN0cnVjdHVyZVRyYW5zaXRpb25U
YWJsZUhhc2hUcmFpdHM+IFRyYW5zaXRpb25UYWJsZTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFN0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZSgpIHsKLSAgICAgICAgICAgIG1fdHJhbnNpdGlvbnMubV9z
aW5nbGVUcmFuc2l0aW9uLnNldCgwKTsKLSAgICAgICAgICAgIG1fdHJhbnNpdGlvbnMubV9zaW5n
bGVUcmFuc2l0aW9uLnNldEZsYWcodXNpbmdTaW5nbGVTbG90KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIH5TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUoKSB7Ci0gICAgICAgICAgICBpZiAoIXVzaW5n
U2luZ2xlVHJhbnNpdGlvblNsb3QoKSkKLSAgICAgICAgICAgICAgICBkZWxldGUgdGFibGUoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZSBjb250YWlucyBhbmQgZ2V0IG1ldGhvZHMgYWNj
ZXB0IGltcHJlY2lzZSBtYXRjaGVzLCBzbyBpZiBhbiB1bnNwZWNpYWxpc2VkIHRyYW5zaXRpb24g
ZXhpc3RzCi0gICAgICAgIC8vIGZvciB0aGUgZ2l2ZW4ga2V5IHRoZXkgd2lsbCBjb25zaWRlciB0
aGF0IHRyYW5zaXRpb24gdG8gYmUgYSBtYXRjaC4gIElmIGEgc3BlY2lhbGlzZWQgdHJhbnNpdGlv
bgotICAgICAgICAvLyBleGlzdHMgYW5kIGl0IG1hdGNoZXMgdGhlIHByb3ZpZGVkIHNwZWNpZmlj
VmFsdWUsIGdldCB3aWxsIHJldHVybiB0aGUgc3BlY2lmaWMgdHJhbnNpdGlvbi4KLSAgICAgICAg
aW5saW5lIGJvb2wgY29udGFpbnMoY29uc3QgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlSGFzaDo6
S2V5JiwgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKTsKLSAgICAgICAgaW5saW5lIFN0cnVjdHVyZSog
Z2V0KGNvbnN0IFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZUhhc2g6OktleSYsIEpTQ2VsbCogc3Bl
Y2lmaWNWYWx1ZSkgY29uc3Q7Ci0gICAgICAgIGlubGluZSBib29sIGhhc1RyYW5zaXRpb24oY29u
c3QgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlSGFzaDo6S2V5JiBrZXkpIGNvbnN0OwotICAgICAg
ICB2b2lkIHJlbW92ZShjb25zdCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVIYXNoOjpLZXkmIGtl
eSwgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodXNp
bmdTaW5nbGVUcmFuc2l0aW9uU2xvdCgpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNvbnRh
aW5zKGtleSwgc3BlY2lmaWNWYWx1ZSkpOwotICAgICAgICAgICAgICAgIHNldFNpbmdsZVRyYW5z
aXRpb24oMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgVHJhbnNpdGlvblRhYmxlOjppdGVyYXRvciBmaW5kID0gdGFibGUoKS0+ZmluZChrZXkp
OwotICAgICAgICAgICAgaWYgKCFzcGVjaWZpY1ZhbHVlKQotICAgICAgICAgICAgICAgIGZpbmQt
PnNlY29uZC5maXJzdCA9IDA7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZmlu
ZC0+c2Vjb25kLnNlY29uZCA9IDA7Ci0gICAgICAgICAgICBpZiAoIWZpbmQtPnNlY29uZC5maXJz
dCAmJiAhZmluZC0+c2Vjb25kLnNlY29uZCkKLSAgICAgICAgICAgICAgICB0YWJsZSgpLT5yZW1v
dmUoZmluZCk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBhZGQoY29uc3QgU3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlSGFzaDo6S2V5JiBrZXksIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0NlbGwq
IHNwZWNpZmljVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh1c2luZ1NpbmdsZVRy
YW5zaXRpb25TbG90KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXNpbmdsZVRyYW5zaXRpb24o
KSkgewotICAgICAgICAgICAgICAgICAgICBzZXRTaW5nbGVUcmFuc2l0aW9uKHN0cnVjdHVyZSk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcmVpZnlTaW5nbGVUcmFuc2l0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoIXNwZWNpZmljVmFsdWUpIHsKLSAgICAgICAgICAgICAgICBUcmFuc2l0aW9uVGFi
bGU6Oml0ZXJhdG9yIGZpbmQgPSB0YWJsZSgpLT5maW5kKGtleSk7Ci0gICAgICAgICAgICAgICAg
aWYgKGZpbmQgPT0gdGFibGUoKS0+ZW5kKCkpCi0gICAgICAgICAgICAgICAgICAgIHRhYmxlKCkt
PmFkZChrZXksIFRyYW5zaXRpb24oc3RydWN0dXJlLCAwKSk7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBmaW5kLT5zZWNvbmQuZmlyc3QgPSBzdHJ1Y3R1cmU7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGFkZGluZyBh
IHRyYW5zaXRpb24gdG8gYSBzcGVjaWZpYyB2YWx1ZSwgdGhlbiB0aGVyZSBjYW5ub3QgYmUKLSAg
ICAgICAgICAgICAgICAvLyBhbiBleGlzdGluZyB0cmFuc2l0aW9uCi0gICAgICAgICAgICAgICAg
QVNTRVJUKCF0YWJsZSgpLT5jb250YWlucyhrZXkpKTsKLSAgICAgICAgICAgICAgICB0YWJsZSgp
LT5hZGQoa2V5LCBUcmFuc2l0aW9uKDAsIHN0cnVjdHVyZSkpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBUcmFuc2l0aW9uVGFibGUqIHRhYmxlKCkg
Y29uc3QgeyBBU1NFUlQoIXVzaW5nU2luZ2xlVHJhbnNpdGlvblNsb3QoKSk7IHJldHVybiBtX3Ry
YW5zaXRpb25zLm1fdGFibGU7IH0KLSAgICAgICAgU3RydWN0dXJlKiBzaW5nbGVUcmFuc2l0aW9u
KCkgY29uc3QgewotICAgICAgICAgICAgQVNTRVJUKHVzaW5nU2luZ2xlVHJhbnNpdGlvblNsb3Qo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gbV90cmFuc2l0aW9ucy5tX3NpbmdsZVRyYW5zaXRpb24u
Z2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCB1c2luZ1NpbmdsZVRyYW5zaXRpb25TbG90
KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2l0aW9ucy5tX3NpbmdsZVRyYW5zaXRpb24uaXNGbGFn
U2V0KHVzaW5nU2luZ2xlU2xvdCk7IH0KLSAgICAgICAgdm9pZCBzZXRTaW5nbGVUcmFuc2l0aW9u
KFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICB7IAotICAgICAgICAgICAgQVNTRVJUKHVz
aW5nU2luZ2xlVHJhbnNpdGlvblNsb3QoKSk7Ci0gICAgICAgICAgICBtX3RyYW5zaXRpb25zLm1f
c2luZ2xlVHJhbnNpdGlvbi5zZXQoc3RydWN0dXJlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZv
aWQgc2V0VHJhbnNpdGlvblRhYmxlKFRyYW5zaXRpb25UYWJsZSogdGFibGUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVCh1c2luZ1NpbmdsZVRyYW5zaXRpb25TbG90KCkpOwotI2lmbmRl
ZiBOREVCVUcKLSAgICAgICAgICAgIHNldFNpbmdsZVRyYW5zaXRpb24oMCk7Ci0jZW5kaWYKLSAg
ICAgICAgICAgIG1fdHJhbnNpdGlvbnMubV90YWJsZSA9IHRhYmxlOwotICAgICAgICAgICAgLy8g
VGhpcyBpbXBsaWNpdGx5IGNsZWFycyB0aGUgZmxhZyB0aGF0IGluZGljYXRlcyB3ZSdyZSB1c2lu
ZyBhIHNpbmdsZSB0cmFuc2l0aW9uCi0gICAgICAgICAgICBBU1NFUlQoIXVzaW5nU2luZ2xlVHJh
bnNpdGlvblNsb3QoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaW5saW5lIHZvaWQgcmVpZnlTaW5n
bGVUcmFuc2l0aW9uKCk7Ci0KLSAgICAgICAgZW51bSBVc2luZ1NpbmdsZVNsb3QgewotICAgICAg
ICAgICAgdXNpbmdTaW5nbGVTbG90Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIExhc3QgYml0IGlu
ZGljYXRlcyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgc2luZ2xlIHRyYW5zaXRpb24gb3B0aW1p
c2F0aW9uCi0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIFRyYW5zaXRpb25UYWJsZSogbV90
YWJsZTsKLSAgICAgICAgICAgIFB0ckFuZEZsYWdzQmFzZTxTdHJ1Y3R1cmUsIFVzaW5nU2luZ2xl
U2xvdD4gbV9zaW5nbGVUcmFuc2l0aW9uOwotICAgICAgICB9IG1fdHJhbnNpdGlvbnM7Ci0gICAg
fTsKLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBTdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGVfaApJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1B0ckFuZEZsYWdzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1B0ckFuZEZsYWdzLmgJKHJldmlzaW9uIDU0NzQ3KQor
KysgSmF2YVNjcmlwdENvcmUvd3RmL1B0ckFuZEZsYWdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgUHRyQW5kRmxhZ3NfaAotI2RlZmluZSBQdHJBbmRGbGFnc19oCi0K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBULCB0eXBlbmFtZSBGbGFnRW51bT4gY2xhc3MgUHRyQW5kRmxhZ3NCYXNlIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgaXNGbGFnU2V0KEZsYWdFbnVtIGZsYWdOdW1iZXIp
IGNvbnN0IHsgQVNTRVJUKGZsYWdOdW1iZXIgPCAyKTsgcmV0dXJuIG1fcHRyQW5kRmxhZ3MgJiAo
MSA8PCBmbGFnTnVtYmVyKTsgfQotICAgICAgICB2b2lkIHNldEZsYWcoRmxhZ0VudW0gZmxhZ051
bWJlcikgeyBBU1NFUlQoZmxhZ051bWJlciA8IDIpOyBtX3B0ckFuZEZsYWdzIHw9ICgxIDw8IGZs
YWdOdW1iZXIpO30KLSAgICAgICAgdm9pZCBjbGVhckZsYWcoRmxhZ0VudW0gZmxhZ051bWJlcikg
eyBBU1NFUlQoZmxhZ051bWJlciA8IDIpOyBtX3B0ckFuZEZsYWdzICY9IH4oMSA8PCBmbGFnTnVt
YmVyKTt9Ci0gICAgICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
VCo+KG1fcHRyQW5kRmxhZ3MgJiB+Myk7IH0KLSAgICAgICAgdm9pZCBzZXQoVCogcHRyKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pihw
dHIpICYgMykpOwotICAgICAgICAgICAgbV9wdHJBbmRGbGFncyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KHB0cikgfCAobV9wdHJBbmRGbGFncyAmIDMpOwotI2lmbmRlZiBOREVCVUcKLSAg
ICAgICAgICAgIG1fbGVha3NQdHIgPSBwdHI7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWdldCgpOyB9Ci0gICAgICAgIFQqIG9w
ZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihtX3B0ckFuZEZs
YWdzICYgfjMpOyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGludHB0cl90IG1fcHRyQW5k
RmxhZ3M7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICB2b2lkKiBtX2xlYWtzUHRyOyAvLyBPbmx5
IHVzZWQgdG8gYWxsb3cgdG9vbHMgbGlrZSBsZWFrcyBvbiBPU1ggdG8gZGV0ZWN0IHRoYXQgdGhl
IG1lbW9yeSBpcyByZWZlcmVuY2VkLgotI2VuZGlmCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGNs
YXNzIFQsIHR5cGVuYW1lIEZsYWdFbnVtPiBjbGFzcyBQdHJBbmRGbGFncyA6IHB1YmxpYyBQdHJB
bmRGbGFnc0Jhc2U8VCwgRmxhZ0VudW0+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFB0ckFuZEZs
YWdzKCkKLSAgICAgICAgewotICAgICAgICAgICAgUHRyQW5kRmxhZ3NCYXNlPFQsIEZsYWdFbnVt
Pjo6bV9wdHJBbmRGbGFncyA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgUHRyQW5kRmxhZ3MoVCog
cHRyKQotICAgICAgICB7Ci0gICAgICAgICAgICBQdHJBbmRGbGFnc0Jhc2U8VCwgRmxhZ0VudW0+
OjptX3B0ckFuZEZsYWdzID0gMDsKLSAgICAgICAgICAgIFB0ckFuZEZsYWdzQmFzZTxULCBGbGFn
RW51bT46OnNldChwdHIpOwotICAgICAgICB9Ci0gICAgfTsKLX0gLy8gbmFtZXNwYWNlIFdURgot
Ci11c2luZyBXVEY6OlB0ckFuZEZsYWdzQmFzZTsKLXVzaW5nIFdURjo6UHRyQW5kRmxhZ3M7Ci0K
LSNlbmRpZiAvLyBQdHJBbmRGbGFnc19oCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNTQ3NDgpCisrKyBXZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTAyLTEyICBHYXZp
biBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24g
YW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisg
ICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1B0ckFuZEZsYWdzLmg6IFJlbW92ZWQuCisK
IDIwMTAtMDEtMDUgIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDogV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy93dGYvUHRyQW5kRmxhZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3d0Zi9QdHJBbmRGbGFncy5oCShyZXZpc2lvbiA1NDc0NykKKysrIFdlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvd3RmL1B0ckFuZEZsYWdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMCww
IEBACi0jaWZuZGVmIFdlYkNvcmVfRldEX1B0ckFuZEZsYWdzX2gKLSNkZWZpbmUgV2ViQ29yZV9G
V0RfUHRyQW5kRmxhZ3NfaAotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1B0ckFuZEZsYWdzLmg+
Ci0jZW5kaWYKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48735</attachid>
            <date>2010-02-14 17:25:26 -0800</date>
            <delta_ts>2010-02-15 12:54:46 -0800</delta_ts>
            <desc>Final Patch!  Refactor StructureTransitionTable back into Structure, remove PtrAndFlags!</desc>
            <filename>patch.ptrAndStructureTraTa.txt</filename>
            <type>text/plain</type>
            <size>26407</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU0NzU3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTAtMDItMTQgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zMzczMQorICAgICAgICBNYW55IGZhbHNlIGxlYWtzIGluIHJlbGVhc2UgYnVp
bGRzIGR1ZSB0byBQdHJBbmRGbGFncworCisgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZSB3YXMgZWZmZWN0aXZlbHkgYSBzbWFydCBwb2ludGVyIHR5cGUsCisgICAgICAgIG9uZSBtYWNo
aW5lIHdvcmQgaW4gc2l6ZSBhbmQgd2hvbGx5IGNvbnRhaW5lZCBhcyBhIG1lbWJlciBvZgorICAg
ICAgICBvZiBTdHJ1Y3R1cmUuICBJdCBlaXRoZXIgcG9pbnRlZCB0byBhbiBhY3R1YWwgdGFibGUs
IG9yIGNvdWxkCisgICAgICAgIGJlIHVzZWQgdG8gZGVzY3JpYmUgYSBzaW5nbGUgdHJhbnN0aW9u
IGVudHJ5IHdpdGhvdXQgdXNlIG9mIGEKKyAgICAgICAgdGFibGUuCisKKyAgICAgICAgVGhpcywg
aG93ZXZlciwgd29ya2VkIGJ5IHVzaW5nIGEgUHRyQW5kRmxhZ3MsIHdoaWNoIGlzIG5vdAorICAg
ICAgICBjb21wYXRpYmxlIHdpdGggdGhlIGxlYWtzIHRvb2wuICBTaW5jZSB0aGVyZSBpcyBubyBj
bGVhciB3YXkgdG8KKyAgICAgICAgb2J0YWluIGFub3RoZXIgYml0IGZvciAnZnJlZScgaGVyZSwg
YW5kIHNpbmNlIHRoZXJlIGFyZSBiaXRzCisgICAgICAgIGF2YWlsYWJsZSB1cCBpbiBTdHJ1Y3R1
cmUsIG1lcmdlIHRoaXMgZnVuY3Rpb25hbGl0eSBiYWNrIHVwIGludG8KKyAgICAgICAgU3RydWN0
dXJlLiAgSGF2aW5nIHRoaXMgaW4gYSBzZXBhcmF0ZSBjbGFzcyB3YXMgcXVpdGUgY2xlYW4KKyAg
ICAgICAgZnJvbSBhbiBlbmFjYXBzdWxhdGlvbiBwZXJzcGVjdGl2ZSwgYnV0IHRoaXMgc29sdXRp
b24gZG9lc24ndAorICAgICAgICBzZWVtIHRvIGJhZCAtIGFsbCB0YWJsZSBhY2Nlc3MgaXMgbm93
IGludGVybWVkaWF0ZWQgdGhyb3VnaCB0aGUKKyAgICAgICAgU3RydWN0dXJlOjpzdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGVGb28gbWV0aG9kcywga2VlcGluZyB0aGUKKyAgICAgICAgb3B0aW1pemF0
aW9uIGZhaXJseSB3ZWxsIGNvbnRhaW5lZC4KKworICAgICAgICBUaGlzIHdhcyB0aGUgbGFzdCB1
c2Ugb2YgUHRyQW5kRmxhZ3MsIHNvIHJlbW92aW5nIHRoZSBmaWxlIHRvby4KKworICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OlN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6flN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFu
c2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRk
UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpoYXNUcmFuc2l0
aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6Oik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlQ29udGFpbnMpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZUdldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlSGFzVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlUmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGVBZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0U3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzaW5nbGVUcmFuc2l0
aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRTaW5nbGVUcmFuc2l0aW9uKToKKyAg
ICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAqIHd0
Zi9QdHJBbmRGbGFncy5oOiBSZW1vdmVkLgorCiAyMDEwLTAyLTEyICBHYXZpbiBCYXJyYWNsb3Vn
aCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIg
SHVudC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNTQ3NTcpCisrKyBKYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw3ICszOSw2IEBACiAJCTA4OEZBNUJCMEVGNzZENDMwMDU3OEU2RiAvKiBSYW5k
b21OdW1iZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDg4RkE1QjkwRUY3NkQ0MzAwNTc4RTZGIC8qIFJhbmRvbU51bWJlci5jcHAgKi87IH07CiAJ
CTA4OEZBNUJDMEVGNzZENDMwMDU3OEU2RiAvKiBSYW5kb21OdW1iZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4OEZBNUJBMEVGNzZENDMwMDU3OEU2
RiAvKiBSYW5kb21OdW1iZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwOEUyNzlFOTBFRjgzQjEwMDA3REI1MjMgLyogUmFuZG9tTnVtYmVyU2Vl
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhFMjc5
RTgwRUY4M0IxMDAwN0RCNTIzIC8qIFJhbmRvbU51bWJlclNlZWQuaCAqLzsgfTsKLQkJMEIxRjky
MUQwRjE3NTM1MDAwMzY0NjhFIC8qIFB0ckFuZEZsYWdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQjFGOTIxQjBGMTc1MDJEMDAzNjQ2OEUgLyogUHRy
QW5kRmxhZ3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwQjMzMEMyNzBGMzhDNjIzMDA2OTJERTMgLyogVHlwZVRyYWl0cy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQjMzMEMyNjBGMzhDNjIzMDA2
OTJERTMgLyogVHlwZVRyYWl0cy5jcHAgKi87IH07CiAJCTBCNEQ3RTYzMEYzMTlBQzgwMEFEN0U1
OCAvKiBUeXBlVHJhaXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwQjREN0U2MjBGMzE5QUM4MDBBRDdFNTggLyogVHlwZVRyYWl0cy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBCREZGQUUwMEZDNjE5
MjkwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCREZGQUQ0MEZDNjE3MTAwMEQ2OUVGNCAvKiBD
cm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMTk4MSw3ICsxOTgwLDYgQEAKIAkJCQlCQzE4QzQ1NTBFMTZGNUNE
MDBCMzQ0NjAgLyogUHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1NjBF
MTZGNUNEMDBCMzQ0NjAgLyogUHJvdGVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyNTdERjQw
RTFGNTM3NDAwMTZCNkM5IC8qIFByb3RvdHlwZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwQjFGOTIxRDBGMTc1MzUwMDAzNjQ2OEUgLyogUHRyQW5kRmxhZ3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MjlEQTRBMEVEMjQ1RUMwMEI4OTYxOSAvKiBRdWFudGlmaWVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwODhGQTVCQzBFRjc2RDQzMDA1NzhFNkYgLyogUmFuZG9tTnVt
YmVyLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CShyZXZpc2lvbiA1NDc1NykKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3QuaCIKICNpbmNsdWRlICJKdW1wVGFibGUuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgotI2luY2x1
ZGUgIlB0ckFuZEZsYWdzLmgiCiAjaW5jbHVkZSAiUmVnRXhwLmgiCiAjaW5jbHVkZSAiVVN0cmlu
Zy5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiA1NDc1NykKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiwxMCBAQCBT
dHJ1Y3R1cmU6OlN0cnVjdHVyZShKU1ZhbHVlIHByb3RvdHlwZSwgCiAgICAgLCBtX2F0dHJpYnV0
ZXNJblByZXZpb3VzKDApCiAgICAgLCBtX3NwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgwKQog
ICAgICwgbV9hbm9ueW1vdXNTbG90Q291bnQoYW5vbnltb3VzU2xvdENvdW50KQorICAgICwgbV91
c2luZ1NpbmdsZVNsb3QodHJ1ZSkKIHsKKyAgICBtX3RyYW5zaXRpb25zLm1fc2luZ2xlVHJhbnNp
dGlvbiA9IDA7CisKICAgICBBU1NFUlQobV9wcm90b3R5cGUpOwogICAgIEFTU0VSVChtX3Byb3Rv
dHlwZS5pc09iamVjdCgpIHx8IG1fcHJvdG90eXBlLmlzTnVsbCgpKTsKIApAQCAtMTU5LDcgKzE2
Miw3IEBAIFN0cnVjdHVyZTo6flN0cnVjdHVyZSgpCiB7CiAgICAgaWYgKG1fcHJldmlvdXMpIHsK
ICAgICAgICAgQVNTRVJUKG1fbmFtZUluUHJldmlvdXMpOwotICAgICAgICBtX3ByZXZpb3VzLT50
YWJsZS5yZW1vdmUobWFrZV9wYWlyKG1fbmFtZUluUHJldmlvdXMuZ2V0KCksIG1fYXR0cmlidXRl
c0luUHJldmlvdXMpLCBtX3NwZWNpZmljVmFsdWVJblByZXZpb3VzKTsKKyAgICAgICAgbV9wcmV2
aW91cy0+c3RydWN0dXJlVHJhbnNpdGlvblRhYmxlUmVtb3ZlKG1ha2VfcGFpcihtX25hbWVJblBy
ZXZpb3VzLmdldCgpLCBtX2F0dHJpYnV0ZXNJblByZXZpb3VzKSwgbV9zcGVjaWZpY1ZhbHVlSW5Q
cmV2aW91cyk7CiAKICAgICB9CiAgICAgCkBAIC0xNzcsNiArMTgwLDkgQEAgU3RydWN0dXJlOjp+
U3RydWN0dXJlKCkKICAgICAgICAgZmFzdEZyZWUobV9wcm9wZXJ0eVRhYmxlKTsKICAgICB9CiAK
KyAgICBpZiAoIW1fdXNpbmdTaW5nbGVTbG90KQorICAgICAgICBkZWxldGUgc3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlKCk7CisKICNpZm5kZWYgTkRFQlVHCiAjaWYgRU5BQkxFKEpTQ19NVUxUSVBM
RV9USFJFQURTKQogICAgIE11dGV4TG9ja2VyIHByb3RlY3QoaWdub3JlU2V0TXV0ZXgpOwpAQCAt
MzQwLDcgKzM0Niw3IEBAIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBTdHJ1Y3R1cmU6OmFkZFByb3AK
ICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOwogICAgIEFTU0VSVChzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IE9iamVjdFR5cGUpOwogCi0gICAgaWYgKFN0cnVj
dHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT50YWJsZS5nZXQobWFrZV9wYWly
KHByb3BlcnR5TmFtZS51c3RyaW5nKCkucmVwKCksIGF0dHJpYnV0ZXMpLCBzcGVjaWZpY1ZhbHVl
KSkgeworICAgIGlmIChTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+
c3RydWN0dXJlVHJhbnNpdGlvblRhYmxlR2V0KG1ha2VfcGFpcihwcm9wZXJ0eU5hbWUudXN0cmlu
ZygpLnJlcCgpLCBhdHRyaWJ1dGVzKSwgc3BlY2lmaWNWYWx1ZSkpIHsKICAgICAgICAgQVNTRVJU
KGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9vZmZzZXQgIT0gbm9PZmZzZXQpOwogICAgICAgICBvZmZz
ZXQgPSBleGlzdGluZ1RyYW5zaXRpb24tPm1fb2Zmc2V0ICsgZXhpc3RpbmdUcmFuc2l0aW9uLT5t
X2Fub255bW91c1Nsb3RDb3VudDsKICAgICAgICAgQVNTRVJUKG9mZnNldCA+PSBzdHJ1Y3R1cmUt
Pm1fYW5vbnltb3VzU2xvdENvdW50KTsKQEAgLTQwNSw3ICs0MTEsNyBAQCBQYXNzUmVmUHRyPFN0
cnVjdHVyZT4gU3RydWN0dXJlOjphZGRQcm9wCiAKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9
IG9mZnNldCAtIHN0cnVjdHVyZS0+bV9hbm9ueW1vdXNTbG90Q291bnQ7CiAgICAgQVNTRVJUKHN0
cnVjdHVyZS0+YW5vbnltb3VzU2xvdENvdW50KCkgPT0gdHJhbnNpdGlvbi0+YW5vbnltb3VzU2xv
dENvdW50KCkpOwotICAgIHN0cnVjdHVyZS0+dGFibGUuYWRkKG1ha2VfcGFpcihwcm9wZXJ0eU5h
bWUudXN0cmluZygpLnJlcCgpLCBhdHRyaWJ1dGVzKSwgdHJhbnNpdGlvbi5nZXQoKSwgc3BlY2lm
aWNWYWx1ZSk7CisgICAgc3RydWN0dXJlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVBZGQobWFr
ZV9wYWlyKHByb3BlcnR5TmFtZS51c3RyaW5nKCkucmVwKCksIGF0dHJpYnV0ZXMpLCB0cmFuc2l0
aW9uLmdldCgpLCBzcGVjaWZpY1ZhbHVlKTsKICAgICByZXR1cm4gdHJhbnNpdGlvbi5yZWxlYXNl
KCk7CiB9CiAKQEAgLTg1Miw3ICs4NTgsNyBAQCBzaXplX3QgU3RydWN0dXJlOjpwdXQoY29uc3Qg
SWRlbnRpZmllciYgCiAKIGJvb2wgU3RydWN0dXJlOjpoYXNUcmFuc2l0aW9uKFVTdHJpbmc6OlJl
cCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewotICAgIHJldHVybiB0YWJsZS5oYXNUcmFu
c2l0aW9uKG1ha2VfcGFpcihyZXAsIGF0dHJpYnV0ZXMpKTsKKyAgICByZXR1cm4gc3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlSGFzVHJhbnNpdGlvbihtYWtlX3BhaXIocmVwLCBhdHRyaWJ1dGVzKSk7
CiB9CiAKIHNpemVfdCBTdHJ1Y3R1cmU6OnJlbW92ZShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDU0NzU3
KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTk5LDcgKzE5OSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVmUHRyPFVTdHJp
bmc6OlJlcD4gbV9uYW1lSW5QcmV2aW91czsKICAgICAgICAgSlNDZWxsKiBtX3NwZWNpZmljVmFs
dWVJblByZXZpb3VzOwogCi0gICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB0YWJsZTsK
KyAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8U3RydWN0dXJlKiwgU3RydWN0dXJlKj4gVHJhbnNp
dGlvbjsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZUhh
c2g6OktleSwgVHJhbnNpdGlvbiwgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlSGFzaCwgU3RydWN0
dXJlVHJhbnNpdGlvblRhYmxlSGFzaFRyYWl0cz4gVHJhbnNpdGlvblRhYmxlOworCisgICAgICAg
IC8vICdtX3VzaW5nU2luZ2xlU2xvdCcgaW5kaWNhdGVzIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRo
ZSBzaW5nbGUgdHJhbnNpdGlvbiBvcHRpbWlzYXRpb24uCisgICAgICAgIHVuaW9uIHsKKyAgICAg
ICAgICAgIFRyYW5zaXRpb25UYWJsZSogbV90YWJsZTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSog
bV9zaW5nbGVUcmFuc2l0aW9uOworICAgICAgICB9IG1fdHJhbnNpdGlvbnM7CiAKICAgICAgICAg
V2Vha0dDUHRyPEpTUHJvcGVydHlOYW1lSXRlcmF0b3I+IG1fZW51bWVyYXRpb25DYWNoZTsKIApA
QCAtMjI0LDcgKzIzMSwxMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgdW5z
aWduZWQgbV9zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgOiAyOwogICAgICAgICB1bnNpZ25l
ZCBtX2Fub255bW91c1Nsb3RDb3VudCA6IDU7Ci0gICAgICAgIC8vIDUgZnJlZSBiaXRzCisgICAg
ICAgIHVuc2lnbmVkIG1fdXNpbmdTaW5nbGVTbG90IDogMTsKKyAgICAgICAgLy8gNCBmcmVlIGJp
dHMKKworCisgICAgICAgIC8vIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSBtYW5hZ2VtZW50IG1l
dGhvZHMgZm9sbG93IGJlbG93OgorCisgICAgICAgIC8vIFRoZSBjb250YWlucyBhbmQgZ2V0IG1l
dGhvZHMgYWNjZXB0IGltcHJlY2lzZSBtYXRjaGVzLCBzbyBpZiBhbiB1bnNwZWNpYWxpc2VkIHRy
YW5zaXRpb24gZXhpc3RzCisgICAgICAgIC8vIGZvciB0aGUgZ2l2ZW4ga2V5IHRoZXkgd2lsbCBj
b25zaWRlciB0aGF0IHRyYW5zaXRpb24gdG8gYmUgYSBtYXRjaC4gIElmIGEgc3BlY2lhbGlzZWQg
dHJhbnNpdGlvbgorICAgICAgICAvLyBleGlzdHMgYW5kIGl0IG1hdGNoZXMgdGhlIHByb3ZpZGVk
IHNwZWNpZmljVmFsdWUsIGdldCB3aWxsIHJldHVybiB0aGUgc3BlY2lmaWMgdHJhbnNpdGlvbi4K
KyAgICAgICAgYm9vbCBzdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVDb250YWlucyhjb25zdCBTdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGVIYXNoOjpLZXkmIGtleSwgSlNDZWxsKiBzcGVjaWZpY1ZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91c2luZ1NpbmdsZVNsb3QpIHsKKyAgICAg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5zaXRp
b24oKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uICYmIGV4aXN0
aW5nVHJhbnNpdGlvbi0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSA9PSBrZXkuZmlyc3QKKyAgICAg
ICAgICAgICAgICAgICAgICAgJiYgZXhpc3RpbmdUcmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblBy
ZXZpb3VzID09IGtleS5zZWNvbmQKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgKGV4aXN0aW5n
VHJhbnNpdGlvbi0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyA9PSBzcGVjaWZpY1ZhbHVlIHx8
IGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyA9PSAwKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIFRyYW5zaXRpb25UYWJsZTo6aXRlcmF0b3IgZmluZCA9
IHN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSgpLT5maW5kKGtleSk7CisgICAgICAgICAgICBpZiAo
ZmluZCA9PSBzdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUoKS0+ZW5kKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICByZXR1cm4gZmluZC0+c2Vjb25kLmZpcnN0
IHx8IGZpbmQtPnNlY29uZC5zZWNvbmQtPnRyYW5zaXRpb25lZEZvcihzcGVjaWZpY1ZhbHVlKTsK
KyAgICAgICAgfQorCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlVHJhbnNpdGlvblRhYmxl
R2V0KGNvbnN0IFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZUhhc2g6OktleSYga2V5LCBKU0NlbGwq
IHNwZWNpZmljVmFsdWUpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3VzaW5n
U2luZ2xlU2xvdCkgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0
aW9uID0gc2luZ2xlVHJhbnNpdGlvbigpOworICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1Ry
YW5zaXRpb24gJiYgZXhpc3RpbmdUcmFuc2l0aW9uLT5tX25hbWVJblByZXZpb3VzLmdldCgpID09
IGtleS5maXJzdAorICAgICAgICAgICAgICAgICAgICAmJiBleGlzdGluZ1RyYW5zaXRpb24tPm1f
YXR0cmlidXRlc0luUHJldmlvdXMgPT0ga2V5LnNlY29uZAorICAgICAgICAgICAgICAgICAgICAm
JiAoZXhpc3RpbmdUcmFuc2l0aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzID09IHNwZWNp
ZmljVmFsdWUgfHwgZXhpc3RpbmdUcmFuc2l0aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3Vz
ID09IDApKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOwor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBU
cmFuc2l0aW9uIHRyYW5zaXRpb24gPSBzdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUoKS0+Z2V0KGtl
eSk7CisgICAgICAgICAgICBpZiAodHJhbnNpdGlvbi5zZWNvbmQgJiYgdHJhbnNpdGlvbi5zZWNv
bmQtPnRyYW5zaXRpb25lZEZvcihzcGVjaWZpY1ZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJhbnNpdGlvbi5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gdHJhbnNpdGlvbi5maXJz
dDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc3RydWN0dXJlVHJhbnNpdGlvblRhYmxlSGFz
VHJhbnNpdGlvbihjb25zdCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVIYXNoOjpLZXkmIGtleSkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNpbmdTaW5nbGVTbG90KSB7Cisg
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gc2luZ2xlVHJhbnNpdGlvbigp
OworICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPm1fbmFt
ZUluUHJldmlvdXMgPT0ga2V5LmZpcnN0CisgICAgICAgICAgICAgICAgJiYgdHJhbnNpdGlvbi0+
bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9PSBrZXkuc2Vjb25kOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSgpLT5jb250YWlucyhrZXkp
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVSZW1v
dmUoY29uc3QgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlSGFzaDo6S2V5JiBrZXksIEpTQ2VsbCog
c3BlY2lmaWNWYWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdXNpbmdTaW5nbGVT
bG90KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZUNv
bnRhaW5zKGtleSwgc3BlY2lmaWNWYWx1ZSkpOworICAgICAgICAgICAgICAgIHNldFNpbmdsZVRy
YW5zaXRpb24oMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgVHJhbnNpdGlvblRhYmxlOjppdGVyYXRvciBmaW5kID0gc3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlKCktPmZpbmQoa2V5KTsKKyAgICAgICAgICAgIGlmICghc3BlY2lmaWNWYWx1ZSkK
KyAgICAgICAgICAgICAgICBmaW5kLT5zZWNvbmQuZmlyc3QgPSAwOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGZpbmQtPnNlY29uZC5zZWNvbmQgPSAwOworICAgICAgICAgICAg
aWYgKCFmaW5kLT5zZWNvbmQuZmlyc3QgJiYgIWZpbmQtPnNlY29uZC5zZWNvbmQpCisgICAgICAg
ICAgICAgICAgc3RydWN0dXJlVHJhbnNpdGlvblRhYmxlKCktPnJlbW92ZShmaW5kKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgc3RydWN0dXJlVHJhbnNpdGlvblRhYmxlQWRkKGNvbnN0IFN0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZUhhc2g6OktleSYga2V5LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV91
c2luZ1NpbmdsZVNsb3QpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNpbmdsZVRyYW5zaXRpb24o
KSkgeworICAgICAgICAgICAgICAgICAgICBzZXRTaW5nbGVUcmFuc2l0aW9uKHN0cnVjdHVyZSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBleGlzdGluZ1RyYW5zaXRpb24gPSBzaW5nbGVUcmFuc2l0aW9u
KCk7CisgICAgICAgICAgICAgICAgVHJhbnNpdGlvblRhYmxlKiB0cmFuc2l0aW9uVGFibGUgPSBu
ZXcgVHJhbnNpdGlvblRhYmxlOworICAgICAgICAgICAgICAgIHNldFN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZSh0cmFuc2l0aW9uVGFibGUpOworICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1Ry
YW5zaXRpb24pCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZUFk
ZChzdGQ6Om1ha2VfcGFpcihleGlzdGluZ1RyYW5zaXRpb24tPm1fbmFtZUluUHJldmlvdXMuZ2V0
KCksIGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyksIGV4aXN0aW5n
VHJhbnNpdGlvbiwgZXhpc3RpbmdUcmFuc2l0aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3Vz
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc3BlY2lmaWNWYWx1ZSkgeworICAg
ICAgICAgICAgICAgIFRyYW5zaXRpb25UYWJsZTo6aXRlcmF0b3IgZmluZCA9IHN0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZSgpLT5maW5kKGtleSk7CisgICAgICAgICAgICAgICAgaWYgKGZpbmQgPT0g
c3RydWN0dXJlVHJhbnNpdGlvblRhYmxlKCktPmVuZCgpKQorICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUoKS0+YWRkKGtleSwgVHJhbnNpdGlvbihzdHJ1Y3R1cmUs
IDApKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZpbmQtPnNl
Y29uZC5maXJzdCA9IHN0cnVjdHVyZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgLy8gSWYgd2UncmUgYWRkaW5nIGEgdHJhbnNpdGlvbiB0byBhIHNwZWNpZmljIHZhbHVl
LCB0aGVuIHRoZXJlIGNhbm5vdCBiZQorICAgICAgICAgICAgICAgIC8vIGFuIGV4aXN0aW5nIHRy
YW5zaXRpb24KKyAgICAgICAgICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZSgpLT5jb250YWlucyhrZXkpKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGUoKS0+YWRkKGtleSwgVHJhbnNpdGlvbigwLCBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIFRyYW5zaXRpb25UYWJsZSogc3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlKCkgY29uc3QgeyBBU1NFUlQoIW1fdXNpbmdTaW5nbGVTbG90KTsgcmV0dXJuIG1f
dHJhbnNpdGlvbnMubV90YWJsZTsgfQorICAgICAgICB2b2lkIHNldFN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZShUcmFuc2l0aW9uVGFibGUqIHRhYmxlKQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQobV91c2luZ1NpbmdsZVNsb3QpOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgIHNl
dFNpbmdsZVRyYW5zaXRpb24oMCk7CisjZW5kaWYKKyAgICAgICAgICAgIG1fdXNpbmdTaW5nbGVT
bG90ID0gZmFsc2U7CisgICAgICAgICAgICBtX3RyYW5zaXRpb25zLm1fdGFibGUgPSB0YWJsZTsK
KyAgICAgICAgICAgIC8vIFRoaXMgaW1wbGljaXRseSBjbGVhcnMgdGhlIGZsYWcgdGhhdCBpbmRp
Y2F0ZXMgd2UncmUgdXNpbmcgYSBzaW5nbGUgdHJhbnNpdGlvbgorICAgICAgICAgICAgQVNTRVJU
KCFtX3VzaW5nU2luZ2xlU2xvdCk7CisgICAgICAgIH0KKyAgICAgICAgU3RydWN0dXJlKiBzaW5n
bGVUcmFuc2l0aW9uKCkgY29uc3QgeyBBU1NFUlQobV91c2luZ1NpbmdsZVNsb3QpOyByZXR1cm4g
bV90cmFuc2l0aW9ucy5tX3NpbmdsZVRyYW5zaXRpb247IH0KKyAgICAgICAgdm9pZCBzZXRTaW5n
bGVUcmFuc2l0aW9uKFN0cnVjdHVyZSogc3RydWN0dXJlKSB7IEFTU0VSVChtX3VzaW5nU2luZ2xl
U2xvdCk7IG1fdHJhbnNpdGlvbnMubV9zaW5nbGVUcmFuc2l0aW9uID0gc3RydWN0dXJlOyB9CiAg
ICAgfTsKIAogICAgIGlubGluZSBzaXplX3QgU3RydWN0dXJlOjpnZXQoY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKQpAQCAtMjcxLDU4ICszODUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlLT5lbnRyaWVzKClbZW50cnlJbmRl
eCAtIDFdLm9mZnNldDsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBib29sIFN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZTo6Y29udGFpbnMoY29uc3QgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxl
SGFzaDo6S2V5JiBrZXksIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIGlm
ICh1c2luZ1NpbmdsZVRyYW5zaXRpb25TbG90KCkpIHsKLSAgICAgICAgICAgIFN0cnVjdHVyZSog
ZXhpc3RpbmdUcmFuc2l0aW9uID0gc2luZ2xlVHJhbnNpdGlvbigpOwotICAgICAgICAgICAgcmV0
dXJuIGV4aXN0aW5nVHJhbnNpdGlvbiAmJiBleGlzdGluZ1RyYW5zaXRpb24tPm1fbmFtZUluUHJl
dmlvdXMuZ2V0KCkgPT0ga2V5LmZpcnN0Ci0gICAgICAgICAgICAgICAgICAgJiYgZXhpc3RpbmdU
cmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3VzID09IGtleS5zZWNvbmQKLSAgICAgICAg
ICAgICAgICAgICAmJiAoZXhpc3RpbmdUcmFuc2l0aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZp
b3VzID09IHNwZWNpZmljVmFsdWUgfHwgZXhpc3RpbmdUcmFuc2l0aW9uLT5tX3NwZWNpZmljVmFs
dWVJblByZXZpb3VzID09IDApOwotICAgICAgICB9Ci0gICAgICAgIFRyYW5zaXRpb25UYWJsZTo6
aXRlcmF0b3IgZmluZCA9IHRhYmxlKCktPmZpbmQoa2V5KTsKLSAgICAgICAgaWYgKGZpbmQgPT0g
dGFibGUoKS0+ZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0
dXJuIGZpbmQtPnNlY29uZC5maXJzdCB8fCBmaW5kLT5zZWNvbmQuc2Vjb25kLT50cmFuc2l0aW9u
ZWRGb3Ioc3BlY2lmaWNWYWx1ZSk7Ci0gICAgfQotCi0gICAgU3RydWN0dXJlKiBTdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGU6OmdldChjb25zdCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVIYXNoOjpL
ZXkmIGtleSwgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYg
KHVzaW5nU2luZ2xlVHJhbnNpdGlvblNsb3QoKSkgewotICAgICAgICAgICAgU3RydWN0dXJlKiBl
eGlzdGluZ1RyYW5zaXRpb24gPSBzaW5nbGVUcmFuc2l0aW9uKCk7Ci0gICAgICAgICAgICBpZiAo
ZXhpc3RpbmdUcmFuc2l0aW9uICYmIGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9uYW1lSW5QcmV2aW91
cy5nZXQoKSA9PSBrZXkuZmlyc3QKLSAgICAgICAgICAgICAgICAmJiBleGlzdGluZ1RyYW5zaXRp
b24tPm1fYXR0cmlidXRlc0luUHJldmlvdXMgPT0ga2V5LnNlY29uZAotICAgICAgICAgICAgICAg
ICYmIChleGlzdGluZ1RyYW5zaXRpb24tPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMgPT0gc3Bl
Y2lmaWNWYWx1ZSB8fCBleGlzdGluZ1RyYW5zaXRpb24tPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlv
dXMgPT0gMCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CiAKLSAgICAgICAgVHJhbnNpdGlvbiB0cmFu
c2l0aW9uID0gdGFibGUoKS0+Z2V0KGtleSk7Ci0gICAgICAgIGlmICh0cmFuc2l0aW9uLnNlY29u
ZCAmJiB0cmFuc2l0aW9uLnNlY29uZC0+dHJhbnNpdGlvbmVkRm9yKHNwZWNpZmljVmFsdWUpKQot
ICAgICAgICAgICAgcmV0dXJuIHRyYW5zaXRpb24uc2Vjb25kOwotICAgICAgICByZXR1cm4gdHJh
bnNpdGlvbi5maXJzdDsKLSAgICB9Ci0KLSAgICBib29sIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZTo6aGFzVHJhbnNpdGlvbihjb25zdCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVIYXNoOjpLZXkm
IGtleSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICh1c2luZ1NpbmdsZVRyYW5zaXRpb25TbG90
KCkpIHsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5zaXRp
b24oKTsKLSAgICAgICAgICAgIHJldHVybiB0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPm1fbmFt
ZUluUHJldmlvdXMgPT0ga2V5LmZpcnN0Ci0gICAgICAgICAgICAmJiB0cmFuc2l0aW9uLT5tX2F0
dHJpYnV0ZXNJblByZXZpb3VzID09IGtleS5zZWNvbmQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHRhYmxlKCktPmNvbnRhaW5zKGtleSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgU3RydWN0
dXJlVHJhbnNpdGlvblRhYmxlOjpyZWlmeVNpbmdsZVRyYW5zaXRpb24oKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKHVzaW5nU2luZ2xlVHJhbnNpdGlvblNsb3QoKSk7Ci0gICAgICAgIFN0cnVjdHVy
ZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc2luZ2xlVHJhbnNpdGlvbigpOwotICAgICAgICBUcmFu
c2l0aW9uVGFibGUqIHRyYW5zaXRpb25UYWJsZSA9IG5ldyBUcmFuc2l0aW9uVGFibGU7Ci0gICAg
ICAgIHNldFRyYW5zaXRpb25UYWJsZSh0cmFuc2l0aW9uVGFibGUpOwotICAgICAgICBpZiAoZXhp
c3RpbmdUcmFuc2l0aW9uKQotICAgICAgICAgICAgYWRkKHN0ZDo6bWFrZV9wYWlyKGV4aXN0aW5n
VHJhbnNpdGlvbi0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgZXhpc3RpbmdUcmFuc2l0aW9uLT5t
X2F0dHJpYnV0ZXNJblByZXZpb3VzKSwgZXhpc3RpbmdUcmFuc2l0aW9uLCBleGlzdGluZ1RyYW5z
aXRpb24tPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMpOwotICAgIH0KIH0gLy8gbmFtZXNwYWNl
IEpTQwogCiAjZW5kaWYgLy8gU3RydWN0dXJlX2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkocmV2aXNpb24gNTQ3NTcpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+
Ci0jaW5jbHVkZSA8d3RmL1B0ckFuZEZsYWdzLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNjcsOTkgKzY2LDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFRyYWl0VHlwZSYg
dmFsdWUpIHsgcmV0dXJuIEZpcnN0VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5maXJzdCk7
IH0KICAgICB9OwogCi0gICAgY2xhc3MgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIHsKLSAgICAg
ICAgdHlwZWRlZiBzdGQ6OnBhaXI8U3RydWN0dXJlKiwgU3RydWN0dXJlKj4gVHJhbnNpdGlvbjsK
LSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZUhhc2g6Oktl
eSwgVHJhbnNpdGlvbiwgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlSGFzaCwgU3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlSGFzaFRyYWl0cz4gVHJhbnNpdGlvblRhYmxlOwotICAgIHB1YmxpYzoKLSAg
ICAgICAgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlKCkgewotICAgICAgICAgICAgbV90cmFuc2l0
aW9ucy5tX3NpbmdsZVRyYW5zaXRpb24uc2V0KDApOwotICAgICAgICAgICAgbV90cmFuc2l0aW9u
cy5tX3NpbmdsZVRyYW5zaXRpb24uc2V0RmxhZyh1c2luZ1NpbmdsZVNsb3QpOwotICAgICAgICB9
Ci0KLSAgICAgICAgflN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSgpIHsKLSAgICAgICAgICAgIGlm
ICghdXNpbmdTaW5nbGVUcmFuc2l0aW9uU2xvdCgpKQotICAgICAgICAgICAgICAgIGRlbGV0ZSB0
YWJsZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhlIGNvbnRhaW5zIGFuZCBnZXQgbWV0
aG9kcyBhY2NlcHQgaW1wcmVjaXNlIG1hdGNoZXMsIHNvIGlmIGFuIHVuc3BlY2lhbGlzZWQgdHJh
bnNpdGlvbiBleGlzdHMKLSAgICAgICAgLy8gZm9yIHRoZSBnaXZlbiBrZXkgdGhleSB3aWxsIGNv
bnNpZGVyIHRoYXQgdHJhbnNpdGlvbiB0byBiZSBhIG1hdGNoLiAgSWYgYSBzcGVjaWFsaXNlZCB0
cmFuc2l0aW9uCi0gICAgICAgIC8vIGV4aXN0cyBhbmQgaXQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQg
c3BlY2lmaWNWYWx1ZSwgZ2V0IHdpbGwgcmV0dXJuIHRoZSBzcGVjaWZpYyB0cmFuc2l0aW9uLgot
ICAgICAgICBpbmxpbmUgYm9vbCBjb250YWlucyhjb25zdCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGVIYXNoOjpLZXkmLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpOwotICAgICAgICBpbmxpbmUgU3Ry
dWN0dXJlKiBnZXQoY29uc3QgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlSGFzaDo6S2V5JiwgSlND
ZWxsKiBzcGVjaWZpY1ZhbHVlKSBjb25zdDsKLSAgICAgICAgaW5saW5lIGJvb2wgaGFzVHJhbnNp
dGlvbihjb25zdCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGVIYXNoOjpLZXkmIGtleSkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZUhhc2g6
OktleSYga2V5LCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmICh1c2luZ1NpbmdsZVRyYW5zaXRpb25TbG90KCkpIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoY29udGFpbnMoa2V5LCBzcGVjaWZpY1ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgc2V0U2lu
Z2xlVHJhbnNpdGlvbigwKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBUcmFuc2l0aW9uVGFibGU6Oml0ZXJhdG9yIGZpbmQgPSB0YWJsZSgpLT5m
aW5kKGtleSk7Ci0gICAgICAgICAgICBpZiAoIXNwZWNpZmljVmFsdWUpCi0gICAgICAgICAgICAg
ICAgZmluZC0+c2Vjb25kLmZpcnN0ID0gMDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBmaW5kLT5zZWNvbmQuc2Vjb25kID0gMDsKLSAgICAgICAgICAgIGlmICghZmluZC0+c2Vj
b25kLmZpcnN0ICYmICFmaW5kLT5zZWNvbmQuc2Vjb25kKQotICAgICAgICAgICAgICAgIHRhYmxl
KCktPnJlbW92ZShmaW5kKTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIGFkZChjb25zdCBTdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGVIYXNoOjpLZXkmIGtleSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHVzaW5n
U2luZ2xlVHJhbnNpdGlvblNsb3QoKSkgewotICAgICAgICAgICAgICAgIGlmICghc2luZ2xlVHJh
bnNpdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFNpbmdsZVRyYW5zaXRpb24oc3Ry
dWN0dXJlKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZWlmeVNpbmdsZVRyYW5zaXRpb24oKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmICghc3BlY2lmaWNWYWx1ZSkgewotICAgICAgICAgICAgICAgIFRyYW5z
aXRpb25UYWJsZTo6aXRlcmF0b3IgZmluZCA9IHRhYmxlKCktPmZpbmQoa2V5KTsKLSAgICAgICAg
ICAgICAgICBpZiAoZmluZCA9PSB0YWJsZSgpLT5lbmQoKSkKLSAgICAgICAgICAgICAgICAgICAg
dGFibGUoKS0+YWRkKGtleSwgVHJhbnNpdGlvbihzdHJ1Y3R1cmUsIDApKTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGZpbmQtPnNlY29uZC5maXJzdCA9IHN0cnVj
dHVyZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgd2UncmUg
YWRkaW5nIGEgdHJhbnNpdGlvbiB0byBhIHNwZWNpZmljIHZhbHVlLCB0aGVuIHRoZXJlIGNhbm5v
dCBiZQotICAgICAgICAgICAgICAgIC8vIGFuIGV4aXN0aW5nIHRyYW5zaXRpb24KLSAgICAgICAg
ICAgICAgICBBU1NFUlQoIXRhYmxlKCktPmNvbnRhaW5zKGtleSkpOwotICAgICAgICAgICAgICAg
IHRhYmxlKCktPmFkZChrZXksIFRyYW5zaXRpb24oMCwgc3RydWN0dXJlKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFRyYW5zaXRpb25UYWJsZSog
dGFibGUoKSBjb25zdCB7IEFTU0VSVCghdXNpbmdTaW5nbGVUcmFuc2l0aW9uU2xvdCgpKTsgcmV0
dXJuIG1fdHJhbnNpdGlvbnMubV90YWJsZTsgfQotICAgICAgICBTdHJ1Y3R1cmUqIHNpbmdsZVRy
YW5zaXRpb24oKSBjb25zdCB7Ci0gICAgICAgICAgICBBU1NFUlQodXNpbmdTaW5nbGVUcmFuc2l0
aW9uU2xvdCgpKTsKLSAgICAgICAgICAgIHJldHVybiBtX3RyYW5zaXRpb25zLm1fc2luZ2xlVHJh
bnNpdGlvbi5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBib29sIHVzaW5nU2luZ2xlVHJhbnNp
dGlvblNsb3QoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zaXRpb25zLm1fc2luZ2xlVHJhbnNpdGlv
bi5pc0ZsYWdTZXQodXNpbmdTaW5nbGVTbG90KTsgfQotICAgICAgICB2b2lkIHNldFNpbmdsZVRy
YW5zaXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIHsgCi0gICAgICAgICAgICBB
U1NFUlQodXNpbmdTaW5nbGVUcmFuc2l0aW9uU2xvdCgpKTsKLSAgICAgICAgICAgIG1fdHJhbnNp
dGlvbnMubV9zaW5nbGVUcmFuc2l0aW9uLnNldChzdHJ1Y3R1cmUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCBzZXRUcmFuc2l0aW9uVGFibGUoVHJhbnNpdGlvblRhYmxlKiB0YWJsZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHVzaW5nU2luZ2xlVHJhbnNpdGlvblNsb3QoKSk7
Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgc2V0U2luZ2xlVHJhbnNpdGlvbigwKTsKLSNl
bmRpZgotICAgICAgICAgICAgbV90cmFuc2l0aW9ucy5tX3RhYmxlID0gdGFibGU7Ci0gICAgICAg
ICAgICAvLyBUaGlzIGltcGxpY2l0bHkgY2xlYXJzIHRoZSBmbGFnIHRoYXQgaW5kaWNhdGVzIHdl
J3JlIHVzaW5nIGEgc2luZ2xlIHRyYW5zaXRpb24KLSAgICAgICAgICAgIEFTU0VSVCghdXNpbmdT
aW5nbGVUcmFuc2l0aW9uU2xvdCgpKTsKLSAgICAgICAgfQotICAgICAgICBpbmxpbmUgdm9pZCBy
ZWlmeVNpbmdsZVRyYW5zaXRpb24oKTsKLQotICAgICAgICBlbnVtIFVzaW5nU2luZ2xlU2xvdCB7
Ci0gICAgICAgICAgICB1c2luZ1NpbmdsZVNsb3QKLSAgICAgICAgfTsKLSAgICAgICAgLy8gTGFz
dCBiaXQgaW5kaWNhdGVzIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBzaW5nbGUgdHJhbnNpdGlv
biBvcHRpbWlzYXRpb24KLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgVHJhbnNpdGlvblRh
YmxlKiBtX3RhYmxlOwotICAgICAgICAgICAgUHRyQW5kRmxhZ3NCYXNlPFN0cnVjdHVyZSwgVXNp
bmdTaW5nbGVTbG90PiBtX3NpbmdsZVRyYW5zaXRpb247Ci0gICAgICAgIH0gbV90cmFuc2l0aW9u
czsKLSAgICB9OwotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFN0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZV9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvUHRyQW5kRmxhZ3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUHRyQW5kRmxhZ3MuaAkocmV2aXNpb24g
NTQ3NTcpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvUHRyQW5kRmxhZ3MuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQdHJBbmRGbGFnc19oCi0jZGVmaW5lIFB0ckFuZEZs
YWdzX2gKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewot
ICAgIHRlbXBsYXRlPGNsYXNzIFQsIHR5cGVuYW1lIEZsYWdFbnVtPiBjbGFzcyBQdHJBbmRGbGFn
c0Jhc2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBpc0ZsYWdTZXQoRmxhZ0VudW0gZmxh
Z051bWJlcikgY29uc3QgeyBBU1NFUlQoZmxhZ051bWJlciA8IDIpOyByZXR1cm4gbV9wdHJBbmRG
bGFncyAmICgxIDw8IGZsYWdOdW1iZXIpOyB9Ci0gICAgICAgIHZvaWQgc2V0RmxhZyhGbGFnRW51
bSBmbGFnTnVtYmVyKSB7IEFTU0VSVChmbGFnTnVtYmVyIDwgMik7IG1fcHRyQW5kRmxhZ3MgfD0g
KDEgPDwgZmxhZ051bWJlcik7fQotICAgICAgICB2b2lkIGNsZWFyRmxhZyhGbGFnRW51bSBmbGFn
TnVtYmVyKSB7IEFTU0VSVChmbGFnTnVtYmVyIDwgMik7IG1fcHRyQW5kRmxhZ3MgJj0gfigxIDw8
IGZsYWdOdW1iZXIpO30KLSAgICAgICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxUKj4obV9wdHJBbmRGbGFncyAmIH4zKTsgfQotICAgICAgICB2b2lkIHNldChUKiBw
dHIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KHB0cikgJiAzKSk7Ci0gICAgICAgICAgICBtX3B0ckFuZEZsYWdzID0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4ocHRyKSB8IChtX3B0ckFuZEZsYWdzICYgMyk7Ci0jaWZuZGVmIE5E
RUJVRwotICAgICAgICAgICAgbV9sZWFrc1B0ciA9IHB0cjsKLSNlbmRpZgotICAgICAgICB9Ci0K
LSAgICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhZ2V0KCk7IH0KLSAgICAg
ICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KG1f
cHRyQW5kRmxhZ3MgJiB+Myk7IH0KLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgaW50cHRyX3Qg
bV9wdHJBbmRGbGFnczsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIHZvaWQqIG1fbGVha3NQdHI7
IC8vIE9ubHkgdXNlZCB0byBhbGxvdyB0b29scyBsaWtlIGxlYWtzIG9uIE9TWCB0byBkZXRlY3Qg
dGhhdCB0aGUgbWVtb3J5IGlzIHJlZmVyZW5jZWQuCi0jZW5kaWYKLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8Y2xhc3MgVCwgdHlwZW5hbWUgRmxhZ0VudW0+IGNsYXNzIFB0ckFuZEZsYWdzIDogcHVi
bGljIFB0ckFuZEZsYWdzQmFzZTxULCBGbGFnRW51bT4gewotICAgIHB1YmxpYzoKLSAgICAgICAg
UHRyQW5kRmxhZ3MoKQotICAgICAgICB7Ci0gICAgICAgICAgICBQdHJBbmRGbGFnc0Jhc2U8VCwg
RmxhZ0VudW0+OjptX3B0ckFuZEZsYWdzID0gMDsKLSAgICAgICAgfQotICAgICAgICBQdHJBbmRG
bGFncyhUKiBwdHIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFB0ckFuZEZsYWdzQmFzZTxULCBG
bGFnRW51bT46Om1fcHRyQW5kRmxhZ3MgPSAwOwotICAgICAgICAgICAgUHRyQW5kRmxhZ3NCYXNl
PFQsIEZsYWdFbnVtPjo6c2V0KHB0cik7Ci0gICAgICAgIH0KLSAgICB9OwotfSAvLyBuYW1lc3Bh
Y2UgV1RGCi0KLXVzaW5nIFdURjo6UHRyQW5kRmxhZ3NCYXNlOwotdXNpbmcgV1RGOjpQdHJBbmRG
bGFnczsKLQotI2VuZGlmIC8vIFB0ckFuZEZsYWdzX2gKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA1NDc1NykKKysrIFdl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDIt
MTQgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzczMQorICAgICAgICBNYW55IGZhbHNlIGxlYWtzIGlu
IHJlbGVhc2UgYnVpbGRzIGR1ZSB0byBQdHJBbmRGbGFncworCisgICAgICAgIFB0ckFuZEZsYWdz
IGhhcyBub3cgYmVlbiByZW1vdmVkOyByZW1vdmUgZm9yd2FyZGluZyBoZWFkZXIuCisKKyAgICAg
ICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvUHRyQW5kRmxhZ3MuaDogUmVtb3ZlZC4KKwogMjAx
MC0wMi0xMyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCkluZGV4OiBXZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL3d0Zi9QdHJBbmRGbGFncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvd3RmL1B0ckFuZEZsYWdzLmgJKHJldmlzaW9uIDU0NzU3KQorKysgV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy93dGYvUHRyQW5kRmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICswLDAgQEAKLSNpZm5kZWYgV2ViQ29yZV9GV0RfUHRyQW5kRmxhZ3NfaAotI2RlZmluZSBXZWJD
b3JlX0ZXRF9QdHJBbmRGbGFnc19oCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUHRyQW5kRmxh
Z3MuaD4KLSNlbmRpZgotCg==
</data>
<flag name="review"
          id="31459"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>