<?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>21818</bug_id>
          
          <creation_ts>2008-10-22 17:20:38 -0700</creation_ts>
          <short_desc>Should be able to use AtomicString as the key for a HashMap and HashSet</short_desc>
          <delta_ts>2008-10-31 08:24:45 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>96267</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-22 17:20:38 -0700</bug_when>
    <thetext>It&apos;s currently not possible to use an AtomicString as the key for a HashMap or HashSet; AtomicStringImpl is used instead (which is just a StringImpl).

This has the unfortunate side-effect that, even while an item in the hash is live, all AtomicStrings referencing the key can go out of scope, leaving the key dangling. The next matching AtomicString will pick up a new AtomicStringImpl, but this will no longer match the hash entry.

The solution is to allow AtomicString as the hash key. This would require implementing hash functions for AtomicString, which should be easy (they can just call through to the impl).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96276</commentid>
    <comment_count>1</comment_count>
      <attachid>24584</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-22 18:15:18 -0700</bug_when>
    <thetext>Created attachment 24584
WIP patch

Something along these lines?

constructDeletedValue() is wrong; AtomicString actually dereferences the impl, so we can&apos;t use HashTableDeletedValue as the impl. address.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96323</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-23 06:20:35 -0700</bug_when>
    <thetext>FWIW, we use RefPtr&lt;AtomicString&gt; when there is no external guarantee that the string will persist. I do not know if there is any reason for such a mismatch with String, which can be used directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96354</commentid>
    <comment_count>3</comment_count>
      <attachid>24604</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-23 11:20:01 -0700</bug_when>
    <thetext>Created attachment 24604
Patch, changelog

Final patch. This uses an AtomicString with a NULL impl as the constructDeletedValue, which seems to work OK.

I tested it with this code:

diff --git a/WebCore/dom/Document.cpp b/WebCore/dom/Document.cpp
index f43eda1..c1984e6 100644
--- a/WebCore/dom/Document.cpp
+++ b/WebCore/dom/Document.cpp
@@ -279,6 +279,53 @@ private:
     RefPtr&lt;Document&gt; m_document;
 };
 
+
+#include &lt;wtf/HashMap.h&gt;
+#include &quot;AtomicString.h&quot;
+#include &quot;AtomicStringHash.h&quot;
+
+void testAtomicStringHashMap()
+{
+    HashMap&lt;AtomicString, bool&gt; testMap;
+    
+    testMap.add(&quot;test1&quot;, true);
+    testMap.add(&quot;test2&quot;, false);
+    
+    assert(testMap.contains(&quot;test1&quot;) &amp;&amp; testMap.get(&quot;test1&quot;));
+    assert(testMap.contains(&quot;test2&quot;) &amp;&amp; !testMap.get(&quot;test2&quot;));
+    assert(!testMap.contains(&quot;test3&quot;));
+
+    testMap.remove(&quot;test2&quot;);
+    assert(!testMap.contains(&quot;test2&quot;));
+    
+    AtomicString test1(&quot;test1&quot;);
+    assert(testMap.contains(test1) &amp;&amp; testMap.get(&quot;test1&quot;));
+
+    testMap.remove(&quot;test1&quot;);
+    assert(!testMap.contains(test1));
+
+    testMap.clear();
+    
+    {
+        AtomicString one(&quot;foobar_one&quot;);
+        testMap.add(one, true);
+
+        AtomicString two(&quot;foobar_two&quot;);
+        testMap.add(two, true);
+    }
+    
+    {
+        AtomicString one(&quot;foobar_one&quot;);
+        AtomicString two(&quot;foobar_two&quot;);
+        AtomicString three(&quot;foobar_three&quot;);
+        assert(testMap.contains(one));
+        assert(testMap.contains(two));
+        assert(!testMap.contains(three));
+    }
+}
+
+
+
 Document::Document(Frame* frame, bool isXHTML)
     : ContainerNode(0)
     , m_domtree_version(0)
@@ -320,6 +367,9 @@ Document::Document(Frame* frame, bool isXHTML)
     , m_inLowBandwidthDisplay(false)
 #endif
 {
+
+testAtomicStringHashMap();
+
     m_document.resetSkippingRef(this);
 
     m_printing = false;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96357</commentid>
    <comment_count>4</comment_count>
      <attachid>24604</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-23 11:26:46 -0700</bug_when>
    <thetext>Comment on attachment 24604
Patch, changelog

Patch is bad; isDeletedValue() and nullAtom compare to be the same thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96429</commentid>
    <comment_count>5</comment_count>
      <attachid>24622</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-23 15:28:25 -0700</bug_when>
    <thetext>Created attachment 24622
Patch, changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96438</commentid>
    <comment_count>6</comment_count>
      <attachid>24622</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-23 16:04:04 -0700</bug_when>
    <thetext>Comment on attachment 24622
Patch, changelog

&gt; +    unsigned existingHash() const { return m_hash; }

You need an ASSERT(m_hash) in here.

How did you test?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96447</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-23 16:30:38 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 24622 [edit])
&gt; &gt; +    unsigned existingHash() const { return m_hash; }
&gt; 
&gt; You need an ASSERT(m_hash) in here.

I had, but that fires if someone uses &quot;&quot; as a key.

&gt; How did you test?

Using the code pasted above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96448</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-23 16:41:59 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; You need an ASSERT(m_hash) in here.
&gt; 
&gt; I had, but that fires if someone uses &quot;&quot; as a key.

If so, that indicates a bug. The hash value of an empty string should be 0x80000000 due to this code in StringImpl::computeHash:

    // This avoids ever returning a hash code of 0, since that is used to
    // signal &quot;hash not computed yet&quot;, using a value that is likely to be
    // effectively the same as 0 when the low bits are masked.
    hash |= !hash &lt;&lt; 31;

We need to investigate why this happens and fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96450</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-23 16:45:21 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; You need an ASSERT(m_hash) in here.
&gt; &gt; 
&gt; &gt; I had, but that fires if someone uses &quot;&quot; as a key.
&gt; 
&gt; If so, that indicates a bug. The hash value of an empty string should be
&gt; 0x80000000 due to this code in StringImpl::computeHash:
&gt; 
&gt;     // This avoids ever returning a hash code of 0, since that is used to
&gt;     // signal &quot;hash not computed yet&quot;, using a value that is likely to be
&gt;     // effectively the same as 0 when the low bits are masked.
&gt;     hash |= !hash &lt;&lt; 31;
&gt; 
&gt; We need to investigate why this happens and fix it.

I&apos;m sorry, I misspoke; I saw that code too. It does NOT fire for empty sting, but it does for nullAtom, but we agreed that nullAtom was not a valid key.

I&apos;ll add the assert back and re-test.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96482</commentid>
    <comment_count>10</comment_count>
      <attachid>24633</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-23 21:40:53 -0700</bug_when>
    <thetext>Created attachment 24633
Patch adding assert back

So the assert in existingHash() does fire in one particular case: when the empty string is used as a hash key. The reason is that AtomicString::add(const char* c) doesn&apos;t actually add the StringImpl::empty() to the HashSet: StringImpl::empty() returns a singleton, so it&apos;s guaranteed to self-compare. Because of this, hash() may never be called on this instance.

So in order to avoid the assertion in existingHash(), I force the hash to be computed on the StringImpl returned by StringImpl::empty() in AtomicString::add(). Is this the best place to do this, or should I do it in the StringImpl() ctor, or in the emptyString() method?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96513</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-24 09:36:55 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; So in order to avoid the assertion in existingHash(), I force the hash to be
&gt; computed on the StringImpl returned by StringImpl::empty() in
&gt; AtomicString::add(). Is this the best place to do this, or should I do it in
&gt; the StringImpl() ctor, or in the emptyString() method?

In the StringImpl() constructor. I would probably just initialize the hash to 0x80000000 rather than actually calling the hash function, and maybe call the hash function in an assertion. But calling the hash function would also be fine.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96515</commentid>
    <comment_count>12</comment_count>
      <attachid>24641</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-24 09:58:07 -0700</bug_when>
    <thetext>Created attachment 24641
Final patch

Call hash() in the StringImpl() ctor for empty strings (the hash is actually 0x4ec889e for an empty string).

Add AtomicStringHash.h to other build systems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96539</commentid>
    <comment_count>13</comment_count>
      <attachid>24641</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-24 12:03:30 -0700</bug_when>
    <thetext>Comment on attachment 24641
Final patch

+        * platform/text/AtomicString.h:
+        (WebCore::AtomicString::AtomicString):
+        (WebCore::AtomicString::isHashTableDeletedValue):
+        (WTF::): specialize DefaultHash for AtomicString to use AtomicStringHash
+        * platform/text/AtomicStringHash.h: Added.
+        (WebCore::AtomicStringHash::hash):
+        (WebCore::AtomicStringHash::equal):
+        (WTF::):

For future reference, there&apos;s no need to leave bogus things like &quot;(WTF::)&quot; in the ChangeLog just because a buggy prepare-ChangeLog script put them in there!

@@ -44,6 +44,7 @@
 		0A4844990CA44CB200B7BD48 /* SoftLinking.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A4844980CA44CB200B7BD48 /* SoftLinking.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		0F56028F0E4B76580065B038 /* RenderMarquee.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F56028D0E4B76580065B038 /* RenderMarquee.h */; };
 		0F5602900E4B76580065B038 /* RenderMarquee.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F56028E0E4B76580065B038 /* RenderMarquee.cpp */; };
+		0FC705210EB1815600B90AD8 /* AtomicStringHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FC705200EB1815600B90AD8 /* AtomicStringHash.h */; };
 		1402645E0AFDC19B005919E2 /* LoggingMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1402645D0AFDC19B005919E2 /* LoggingMac.mm */; };
 		1403B99709EB13AF00797C7F /* DOMWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 1403B99509EB13AF00797C7F /* DOMWindow.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		1403B99809EB13AF00797C7F /* DOMWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1403B99609EB13AF00797C7F /* DOMWindow.cpp */; };
@@ -4716,6 +4717,7 @@
 		0A4844980CA44CB200B7BD48 /* SoftLinking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SoftLinking.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		0F56028D0E4B76580065B038 /* RenderMarquee.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMarquee.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		0F56028E0E4B76580065B038 /* RenderMarquee.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMarquee.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+		0FC705200EB1815600B90AD8 /* AtomicStringHash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AtomicStringHash.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		1402645D0AFDC19B005919E2 /* LoggingMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = LoggingMac.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
 		1403B90C09EB124500797C7F /* DOMWindow.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DOMWindow.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
 		1403B99509EB13AF00797C7F /* DOMWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMWindow.h; sourceTree = &quot;&lt;group&gt;&quot;; };

What is this change? It&apos;s not mentioned in the ChangeLog.

 {
+    hash();
 }

I think you should add a comment. Calling a function that&apos;s normally used for its result, but just for its side effect, is unusual enough that I think you should call it out.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96545</commentid>
    <comment_count>14</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-10-24 12:33:50 -0700</bug_when>
    <thetext>Committed, with changes to address the review comments.

	M	WebCore/GNUmakefile.am
	A	WebCore/platform/text/AtomicStringHash.h
	M	WebCore/platform/text/StringImpl.h
	M	WebCore/platform/text/AtomicString.h
	M	WebCore/platform/text/StringImpl.cpp
	M	WebCore/WebCore.xcodeproj/project.pbxproj
	M	WebCore/ChangeLog
	M	WebCore/WebCore.vcproj/WebCore.vcproj
r37852 = 912ac415fe8d6672047de379d807eefebee98158 (trunk)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97246</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-31 08:24:45 -0700</bug_when>
    <thetext>I just found a case where HashMap key was actually destroyed: bug 22001.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24584</attachid>
            <date>2008-10-22 18:15:18 -0700</date>
            <delta_ts>2008-10-23 11:20:01 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>wip_patch.txt</filename>
            <type>text/plain</type>
            <size>2911</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuaAppbmRleCBhZjcyYzQ2Li5jNTYwZGM3IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmgKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5oCkBAIC0yNiw2ICsyNiw4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IEF0b21pY1N0cmluZ0hhc2g7CisKIGNsYXNzIEF0
b21pY1N0cmluZyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdCgpOwpAQCAtMTM4LDQg
KzE0MCwxNSBAQCBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBTdHJpbmcmIGEs
IGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gZQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKKworbmFtZXNwYWNlIFdURiB7CisKKyAgICAvLyBBdG9taWNTdHJpbmdIYXNoIGlzIHRo
ZSBkZWZhdWx0IGhhc2ggZm9yIEF0b21pY1N0cmluZworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxX
ZWJDb3JlOjpBdG9taWNTdHJpbmc+IHsKKyAgICAgICAgdHlwZWRlZiBXZWJDb3JlOjpBdG9taWNT
dHJpbmdIYXNoIEhhc2g7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAv
LyBBdG9taWNTdHJpbmdfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21p
Y1N0cmluZ0hhc2guaCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmdIYXNoLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVlZDlmZgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmdIYXNoLmgKQEAgLTAsMCAr
MSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgQXRvbWljU3RyaW5nSGFzaF9oCisjZGVm
aW5lIEF0b21pY1N0cmluZ0hhc2hfaAorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgc3Ry
dWN0IEF0b21pY1N0cmluZ0hhc2ggeworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBBdG9taWNTdHJpbmcmIGtleSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGtleS5p
bXBsKCktPmhhc2goKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYSA9PSBiOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICB9Owor
Cit9CisKK25hbWVzcGFjZSBXVEYgeworCisgICAgLy8gV2ViQ29yZTo6QXRvbWljU3RyaW5nSGFz
aCBpcyB0aGUgZGVmYXVsdCBoYXNoIGZvciBBdG9taWNTdHJpbmcKKyAgICB0ZW1wbGF0ZTw+IHN0
cnVjdCBIYXNoVHJhaXRzPFdlYkNvcmU6OkF0b21pY1N0cmluZz4gOiBHZW5lcmljSGFzaFRyYWl0
czxXZWJDb3JlOjpBdG9taWNTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1w
dHlWYWx1ZUlzWmVybyA9IHRydWU7CisjZXJyb3IgbmVlZHMgYSB2YWxpZCBpbXBsCisgICAgICAg
IHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShXZWJDb3JlOjpBdG9taWNTdHJpbmcm
IHNsb3QpIHsgbmV3ICgmc2xvdCkgV2ViQ29yZTo6QXRvbWljU3RyaW5nKFdlYkNvcmU6OlN0cmlu
ZyhIYXNoVGFibGVEZWxldGVkVmFsdWUpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0
ZWRWYWx1ZShjb25zdCBXZWJDb3JlOjpBdG9taWNTdHJpbmcmIHNsb3QpIHsgcmV0dXJuIHNsb3Qu
c3RyaW5nKCkuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQorICAgIH07CisKK30KKworI2Vu
ZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24604</attachid>
            <date>2008-10-23 11:20:01 -0700</date>
            <delta_ts>2008-10-23 11:26:46 -0700</delta_ts>
            <desc>Patch, changelog</desc>
            <filename>21818_patch.txt</filename>
            <type>text/plain</type>
            <size>4309</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWY0MTkxYS4uYTAwMDRiNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAwOC0xMC0yMyAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgSGFzaFRyYWl0cyBmb3IgQXRvbWljU3RyaW5nIHNvIHRo
YXQgQXRvbWljU3RyaW5nIGNhbiBiZSB1c2VkIGFzCisgICAgICAgIHRoZSBrZXkgZm9yIGEgSGFz
aE1hcCBvciBIYXNoU2V0LgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcu
aDoKKyAgICAgICAgKFdURjo6KTogc3BlY2lhbGl6ZSBEZWZhdWx0SGFzaCBmb3IgQXRvbWljU3Ry
aW5nIHRvIHVzZSBBdG9taWNTdHJpbmdIYXNoCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9BdG9t
aWNTdHJpbmdIYXNoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljU3RyaW5nSGFz
aDo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNTdHJpbmdIYXNoOjplcXVhbCk6Cisg
ICAgICAgIChXVEY6Oik6CisKIDIwMDgtMTAtMjIgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuaCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9BdG9taWNTdHJpbmcuaAppbmRleCBhZjcyYzQ2Li5jNTYwZGM3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0F0b21pY1N0cmluZy5oCkBAIC0yNiw2ICsyNiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorc3RydWN0IEF0b21pY1N0cmluZ0hhc2g7CisKIGNsYXNzIEF0b21pY1N0cmluZyB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdCgpOwpAQCAtMTM4LDQgKzE0MCwxNSBAQCBpbmxp
bmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IEF0b21pY1N0
cmluZyYgYikgeyByZXR1cm4gZQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKKworbmFtZXNw
YWNlIFdURiB7CisKKyAgICAvLyBBdG9taWNTdHJpbmdIYXNoIGlzIHRoZSBkZWZhdWx0IGhhc2gg
Zm9yIEF0b21pY1N0cmluZworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0
SGFzaDsKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxXZWJDb3JlOjpBdG9taWNT
dHJpbmc+IHsKKyAgICAgICAgdHlwZWRlZiBXZWJDb3JlOjpBdG9taWNTdHJpbmdIYXNoIEhhc2g7
CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBBdG9taWNTdHJpbmdf
aApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZ0hhc2guaCBi
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmdIYXNoLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMDY2OTZmMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmdIYXNoLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBBdG9taWNTdHJpbmdIYXNoX2gKKyNkZWZpbmUgQXRvbWljU3RyaW5nSGFzaF9oCisKKyNp
bmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBzdHJ1Y3QgQXRvbWljU3RyaW5nSGFzaCB7CisgICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEF0b21pY1N0cmluZyYga2V5KQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4ga2V5LmltcGwoKS0+aGFzaCgpOworICAgICAgICB9CisK
KyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBB
dG9taWNTdHJpbmcmIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhID09IGI7Cisg
ICAgICAgIH0KKworICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0
eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIH07CisKK30KKworbmFtZXNwYWNlIFdURiB7CisKKyAg
ICAvLyBXZWJDb3JlOjpBdG9taWNTdHJpbmdIYXNoIGlzIHRoZSBkZWZhdWx0IGhhc2ggZm9yIEF0
b21pY1N0cmluZworICAgIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6QXRv
bWljU3RyaW5nPiA6IEdlbmVyaWNIYXNoVHJhaXRzPFdlYkNvcmU6OkF0b21pY1N0cmluZz4gewor
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKKyAgICAg
ICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFdlYkNvcmU6OkF0b21pY1N0cmlu
ZyYgc2xvdCkgeyBuZXcgKCZzbG90KSBXZWJDb3JlOjpBdG9taWNTdHJpbmcoc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6U3RyaW5nSW1wbCo+KDApKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0
ZWRWYWx1ZShjb25zdCBXZWJDb3JlOjpBdG9taWNTdHJpbmcmIHNsb3QpIHsgcmV0dXJuICFzbG90
LmltcGwoKTsgfQorICAgIH07CisKK30KKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24622</attachid>
            <date>2008-10-23 15:28:25 -0700</date>
            <delta_ts>2008-10-23 21:40:53 -0700</delta_ts>
            <desc>Patch, changelog</desc>
            <filename>21818_patch.txt</filename>
            <type>text/plain</type>
            <size>5772</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWY0MTkxYS4uNWE3MjY2MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAwOC0xMC0yMyAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgSGFzaFRyYWl0cyBmb3IgQXRvbWljU3RyaW5nIHNvIHRo
YXQgQXRvbWljU3RyaW5nIGNhbiBiZSB1c2VkIGFzCisgICAgICAgIHRoZSBrZXkgZm9yIGEgSGFz
aE1hcCBvciBIYXNoU2V0LgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkF0b21pY1N0cmluZzo6QXRvbWljU3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF0b21pY1N0cmluZzo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAg
ICAgICAoV1RGOjopOiBzcGVjaWFsaXplIERlZmF1bHRIYXNoIGZvciBBdG9taWNTdHJpbmcgdG8g
dXNlIEF0b21pY1N0cmluZ0hhc2gKKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9B
dG9taWNTdHJpbmdIYXNoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljU3RyaW5n
SGFzaDo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNTdHJpbmdIYXNoOjplcXVhbCk6
CisgICAgICAgIChXVEY6Oik6CisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6OmV4aXN0aW5nSGFzaCk6IG1ldGhvZCB0
byBnZXQgdGhlIGhhc2ggd2l0aG91dCBhIHRlc3QKKyAgICAgICAgYW5kIGJyYW5jaCwgZm9yIGNh
bGxlcnMgbGlrZSBBdG9taWNTdHJpbmdIYXNoIHdobyBjYW4gZ3VhcmFudGVlIHRoYXQgdGhlIGhh
c2gKKyAgICAgICAgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZC4KKwogMjAwOC0xMC0yMiAgQ2hy
aXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2
ZSBIeWF0dApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5oCmluZGV4IGFmNzJjNDYuLmEx
OWM4ZDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmgKQEAgLTI2LDYgKzI2LDgg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQXRvbWljU3RyaW5nSGFzaDsKKwog
Y2xhc3MgQXRvbWljU3RyaW5nIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0KCk7CkBA
IC00Miw2ICs0NCwxMCBAQCBwdWJsaWM6CiAgICAgQXRvbWljU3RyaW5nKEF0b21pY1N0cmluZ0lt
cGwqIGltcCkgOiBtX3N0cmluZyhpbXApIHsgfQogICAgIEF0b21pY1N0cmluZyhjb25zdCBTdHJp
bmcmIHMpIDogbV9zdHJpbmcoYWRkKHMuaW1wbCgpKSkgeyB9CiAKKyAgICAvLyBIYXNoIHRhYmxl
IGRlbGV0ZWQgdmFsdWVzLCB3aGljaCBhcmUgb25seSBjb25zdHJ1Y3RlZCBhbmQgbmV2ZXIgY29w
aWVkIG9yIGRlc3Ryb3llZC4KKyAgICBBdG9taWNTdHJpbmcoV1RGOjpIYXNoVGFibGVEZWxldGVk
VmFsdWVUeXBlKSA6IG1fc3RyaW5nKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKSB7IH0KKyAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcu
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQorCiAjaWYgVVNFKEpTQykKICAgICBzdGF0aWMg
QXRvbWljU3RyaW5nSW1wbCogZmluZChjb25zdCBKU0M6OklkZW50aWZpZXImKTsKICNlbmRpZgpA
QCAtMTM4LDQgKzE0NCwxNSBAQCBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBT
dHJpbmcmIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gZQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKKworbmFtZXNwYWNlIFdURiB7CisKKyAgICAvLyBBdG9taWNTdHJpbmdI
YXNoIGlzIHRoZSBkZWZhdWx0IGhhc2ggZm9yIEF0b21pY1N0cmluZworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZh
dWx0SGFzaDxXZWJDb3JlOjpBdG9taWNTdHJpbmc+IHsKKyAgICAgICAgdHlwZWRlZiBXZWJDb3Jl
OjpBdG9taWNTdHJpbmdIYXNoIEhhc2g7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
ICNlbmRpZiAvLyBBdG9taWNTdHJpbmdfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0F0b21pY1N0cmluZ0hhc2guaCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJp
bmdIYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdhNDVkZQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmdIYXNoLmgK
QEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdG9taWNTdHJpbmdIYXNoX2gKKyNkZWZpbmUg
QXRvbWljU3RyaW5nSGFzaF9oCisKKyNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaFRyYWl0cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBzdHJ1Y3Qg
QXRvbWljU3RyaW5nSGFzaCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEF0
b21pY1N0cmluZyYga2V5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga2V5LmltcGwo
KS0+ZXhpc3RpbmdIYXNoKCk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRp
YyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAg
fTsKKworfQorCituYW1lc3BhY2UgV1RGIHsKKworICAgIC8vIFdlYkNvcmU6OkF0b21pY1N0cmlu
Z0hhc2ggaXMgdGhlIGRlZmF1bHQgaGFzaCBmb3IgQXRvbWljU3RyaW5nCisgICAgdGVtcGxhdGU8
PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJDb3JlOjpBdG9taWNTdHJpbmc+IDogR2VuZXJpY0hhc2hU
cmFpdHM8V2ViQ29yZTo6QXRvbWljU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGVtcHR5VmFsdWVJc1plcm8gPSB0cnVlOworICAgICAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3RE
ZWxldGVkVmFsdWUoV2ViQ29yZTo6QXRvbWljU3RyaW5nJiBzbG90KSB7IG5ldyAoJnNsb3QpIFdl
YkNvcmU6OkF0b21pY1N0cmluZyhIYXNoVGFibGVEZWxldGVkVmFsdWUpOyB9CisgICAgICAgIHN0
YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFdlYkNvcmU6OkF0b21pY1N0cmluZyYgc2xv
dCkgeyByZXR1cm4gc2xvdC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CisgICAgfTsKKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBs
LmggYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCmluZGV4IGNjOGY4MTUuLjlk
MDI4NzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaApAQCAtODYsNiArODYsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBoYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoKSB7IHJldHVybiBt
X2hhc1Rlcm1pbmF0aW5nTnVsbENoYXJhY3RlcjsgfQogCiAgICAgdW5zaWduZWQgaGFzaCgpIHsg
aWYgKG1faGFzaCA9PSAwKSBtX2hhc2ggPSBjb21wdXRlSGFzaChtX2RhdGEsIG1fbGVuZ3RoKTsg
cmV0dXJuIG1faGFzaDsgfQorICAgIHVuc2lnbmVkIGV4aXN0aW5nSGFzaCgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzaDsgfQogICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBVQ2hh
ciosIHVuc2lnbmVkIGxlbik7CiAgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0
IGNoYXIqKTsKICAgICAK
</data>
<flag name="review"
          id="11240"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24633</attachid>
            <date>2008-10-23 21:40:53 -0700</date>
            <delta_ts>2008-10-24 09:58:07 -0700</delta_ts>
            <desc>Patch adding assert back</desc>
            <filename>21818_patch.txt</filename>
            <type>text/plain</type>
            <size>10178</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cNaW5kZXgg
NDEwYmZkZC4uNzMxMzRkMiAxMDA2NDQNLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cNKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cNQEAgLTEsMyArMSwyOCBAQA0rMjAwOC0xMC0yMyAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4NKw0rICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4NKw0rICAgICAgICBBZGQgSGFzaFRyYWl0cyBmb3IgQXRvbWljU3RyaW5nIHNvIHRo
YXQgQXRvbWljU3RyaW5nIGNhbiBiZSB1c2VkIGFzDSsgICAgICAgIHRoZSBrZXkgZm9yIGEgSGFz
aE1hcCBvciBIYXNoU2V0Lg0rDSsgICAgICAgICogQ2hhbmdlTG9nOg0rICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoNKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0F0
b21pY1N0cmluZy5jcHA6DSsgICAgICAgIChXZWJDb3JlOjpBdG9taWNTdHJpbmc6OmFkZCk6IGVu
c3VyZSB0aGF0IHRoZSBoYXNoIGZvciBlbXB0eVN0cmluZygpIGlzDSsgICAgICAgIHByZWNvbXB1
dGVkLg0rICAgICAgICAqIHBsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmg6DSsgICAgICAgIChX
ZWJDb3JlOjpBdG9taWNTdHJpbmc6OkF0b21pY1N0cmluZyk6DSsgICAgICAgIChXZWJDb3JlOjpB
dG9taWNTdHJpbmc6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToNKyAgICAgICAgKFdURjo6KTog
c3BlY2lhbGl6ZSBEZWZhdWx0SGFzaCBmb3IgQXRvbWljU3RyaW5nIHRvIHVzZSBBdG9taWNTdHJp
bmdIYXNoDSsgICAgICAgICogcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg6IEFkZGVk
Lg0rICAgICAgICAoV2ViQ29yZTo6QXRvbWljU3RyaW5nSGFzaDo6aGFzaCk6DSsgICAgICAgIChX
ZWJDb3JlOjpBdG9taWNTdHJpbmdIYXNoOjplcXVhbCk6DSsgICAgICAgIChXVEY6Oik6DSsgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmg6DSsgICAgICAgIChXZWJDb3JlOjpTdHJp
bmdJbXBsOjpleGlzdGluZ0hhc2gpOiBtZXRob2QgdG8gZ2V0IHRoZSBoYXNoIHdpdGhvdXQgYSB0
ZXN0DSsgICAgICAgIGFuZCBicmFuY2gsIGZvciBjYWxsZXJzIGxpa2UgQXRvbWljU3RyaW5nSGFz
aCB3aG8gY2FuIGd1YXJhbnRlZSB0aGF0IHRoZSBoYXNoDSsgICAgICAgIGhhcyBhbHJlYWR5IGJl
ZW4gY29tcHV0ZWQuDSsNIDIwMDgtMTAtMjMgIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpv
QHdlYmtpdC5vcmc+DSANICAgICAgICAgRml4IEd0ayBidWlsZCB0eXBvIGludHJvZHVjZWQgaW4g
aHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMzc4MjYuDWRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qDWluZGV4IGI3MDRiYzAuLjRlZDhiMmUgMTAwNjQ0DS0t
LSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qDSsrKyBiL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qDUBAIC00NCw2ICs0NCw3IEBADSAJ
CTBBNDg0NDk5MENBNDRDQjIwMEI3QkQ0OCAvKiBTb2Z0TGlua2luZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEE0ODQ0OTgwQ0E0NENCMjAwQjdCRDQ4
IC8qIFNvZnRMaW5raW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsNIAkJMEY1NjAyOEYwRTRCNzY1ODAwNjVCMDM4IC8qIFJlbmRlck1hcnF1ZWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTYwMjhEMEU0
Qjc2NTgwMDY1QjAzOCAvKiBSZW5kZXJNYXJxdWVlLmggKi87IH07DSAJCTBGNTYwMjkwMEU0Qjc2
NTgwMDY1QjAzOCAvKiBSZW5kZXJNYXJxdWVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTYwMjhFMEU0Qjc2NTgwMDY1QjAzOCAvKiBSZW5kZXJN
YXJxdWVlLmNwcCAqLzsgfTsNKwkJMEZDNzA1MjEwRUIxODE1NjAwQjkwQUQ4IC8qIEF0b21pY1N0
cmluZ0hhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQzcwNTIwMEVCMTgxNTYwMEI5MEFEOCAvKiBBdG9taWNTdHJpbmdIYXNoLmggKi87IH07DSAJ
CTE0MDI2NDVFMEFGREMxOUIwMDU5MTlFMiAvKiBMb2dnaW5nTWFjLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMjY0NUQwQUZEQzE5QjAwNTkxOUUy
IC8qIExvZ2dpbmdNYWMubW0gKi87IH07DSAJCTE0MDNCOTk3MDlFQjEzQUYwMDc5N0M3RiAvKiBE
T01XaW5kb3cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0MDNCOTk1MDlFQjEzQUYwMDc5N0M3RiAvKiBET01XaW5kb3cuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Ow0gCQkxNDAzQjk5ODA5RUIxM0FGMDA3OTdD
N0YgLyogRE9NV2luZG93LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0MDNCOTk2MDlFQjEzQUYwMDc5N0M3RiAvKiBET01XaW5kb3cuY3BwICovOyB9
Ow1AQCAtNDcxNiw2ICs0NzE3LDcgQEANIAkJMEE0ODQ0OTgwQ0E0NENCMjAwQjdCRDQ4IC8qIFNv
ZnRMaW5raW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvZnRMaW5raW5n
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07DSAJCTBGNTYwMjhEMEU0Qjc2NTgwMDY1QjAz
OCAvKiBSZW5kZXJNYXJxdWVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlck1hcnF1ZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsNIAkJMEY1NjAyOEUwRTRC
NzY1ODAwNjVCMDM4IC8qIFJlbmRlck1hcnF1ZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyTWFycXVlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07DSsJCTBGQzcwNTIwMEVCMTgxNTYwMEI5MEFEOCAvKiBBdG9taWNTdHJpbmdIYXNoLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0b21pY1N0cmluZ0hhc2guaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsNIAkJMTQwMjY0NUQwQUZEQzE5QjAwNTkxOUUyIC8qIExvZ2dp
bmdNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTG9nZ2lu
Z01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsNIAkJMTQwM0I5MEMwOUVCMTI0NTAw
Nzk3QzdGIC8qIERPTVdpbmRvdy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRE9NV2luZG93
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsNIAkJMTQwM0I5OTUwOUVCMTNBRjAwNzk3
QzdGIC8qIERPTVdpbmRvdy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01X
aW5kb3cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsNQEAgLTEyNjYwLDYgKzEyNjYyLDcg
QEANIAkJCQlCMkMzRDlGOTBEMDA2QzFEMDBFRjZGMjYgLyogbWFjICovLA0gCQkJCUIyQzNEOUVE
MEQwMDZDMUQwMEVGNkYyNiAvKiBBdG9taWNTdHJpbmcuY3BwICovLA0gCQkJCUIyQzNEOUVFMEQw
MDZDMUQwMEVGNkYyNiAvKiBBdG9taWNTdHJpbmcuaCAqLywNKwkJCQkwRkM3MDUyMDBFQjE4MTU2
MDBCOTBBRDggLyogQXRvbWljU3RyaW5nSGFzaC5oICovLA0gCQkJCUIyQzNEOUVGMEQwMDZDMUQw
MEVGNkYyNiAvKiBBdG9taWNTdHJpbmdJbXBsLmggKi8sDSAJCQkJQjJDM0Q5RjAwRDAwNkMxRDAw
RUY2RjI2IC8qIEJhc2U2NC5jcHAgKi8sDSAJCQkJQjJDM0Q5RjEwRDAwNkMxRDAwRUY2RjI2IC8q
IEJhc2U2NC5oICovLA1AQCAtMTYwNTYsNiArMTYwNTksNyBAQA0gCQkJCUJDRkY2NDkxMEVBRDE1
QzIwMEMxRDZGNyAvKiBMZW5ndGhCb3guaCBpbiBIZWFkZXJzICovLA0gCQkJCUJDRkY2NDkyMEVB
RDE1QzIwMEMxRDZGNyAvKiBMZW5ndGhTaXplLmggaW4gSGVhZGVycyAqLywNIAkJCQlFMUMzNkMw
MzBFQjA3NkQ2MDA3NDEwQkMgLyogSlNET01HbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovLA0r
CQkJCTBGQzcwNTIxMEVCMTgxNTYwMEI5MEFEOCAvKiBBdG9taWNTdHJpbmdIYXNoLmggaW4gSGVh
ZGVycyAqLywNIAkJCSk7DSAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsNIAkJfTsNZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5jcHANaW5kZXggNWJjNzI4
NC4uZWIxOTZjNyAxMDA2NDQNLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmlu
Zy5jcHANKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5jcHANQEAgLTc4
LDggKzc4LDEyIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQoY29u
c3QgY2hhciogYykNIHsNICAgICBpZiAoIWMpDSAgICAgICAgIHJldHVybiAwOw0tICAgIGlmICgh
KmMpDS0gICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOyAgICANKyAgICBpZiAoISpj
KSB7DSsgICAgICAgIFN0cmluZ0ltcGwqIGVtcHR5SW1wbCA9IFN0cmluZ0ltcGw6OmVtcHR5KCk7
DSsgICAgICAgIC8vIEZ1bGZpbGwgdGhlIGNvbnRyYWN0IHRoYXQgdGhlIFN0cmluZ0ltcGwgb2Yg
YW4gQXRvbWljU3RyaW5nIGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBhIHByZWNvbXB1dGVkIGhhc2gN
KyAgICAgICAgZW1wdHlJbXBsLT5oYXNoKCk7DSsgICAgICAgIHJldHVybiBlbXB0eUltcGw7DSsg
ICAgfQ0gICAgIHBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBib29sPiBhZGRS
ZXN1bHQgPSBzdHJpbmdUYWJsZS0+YWRkPGNvbnN0IGNoYXIqLCBDU3RyaW5nVHJhbnNsYXRvcj4o
Yyk7DSAgICAgaWYgKCFhZGRSZXN1bHQuc2Vjb25kKQ0gICAgICAgICByZXR1cm4gKmFkZFJlc3Vs
dC5maXJzdDsNZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuaA1pbmRleCBhZjcyYzQ2Li5h
MTljOGQwIDEwMDY0NA0tLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmgN
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5oDUBAIC0yNiw2ICsyNiw4
IEBADSANIG5hbWVzcGFjZSBXZWJDb3JlIHsNIA0rc3RydWN0IEF0b21pY1N0cmluZ0hhc2g7DSsN
IGNsYXNzIEF0b21pY1N0cmluZyB7DSBwdWJsaWM6DSAgICAgc3RhdGljIHZvaWQgaW5pdCgpOw1A
QCAtNDIsNiArNDQsMTAgQEAgcHVibGljOg0gICAgIEF0b21pY1N0cmluZyhBdG9taWNTdHJpbmdJ
bXBsKiBpbXApIDogbV9zdHJpbmcoaW1wKSB7IH0NICAgICBBdG9taWNTdHJpbmcoY29uc3QgU3Ry
aW5nJiBzKSA6IG1fc3RyaW5nKGFkZChzLmltcGwoKSkpIHsgfQ0gDSsgICAgLy8gSGFzaCB0YWJs
ZSBkZWxldGVkIHZhbHVlcywgd2hpY2ggYXJlIG9ubHkgY29uc3RydWN0ZWQgYW5kIG5ldmVyIGNv
cGllZCBvciBkZXN0cm95ZWQuDSsgICAgQXRvbWljU3RyaW5nKFdURjo6SGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVHlwZSkgOiBtX3N0cmluZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkgeyB9DSsg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5n
LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0NKw0gI2lmIFVTRShKU0MpDSAgICAgc3RhdGlj
IEF0b21pY1N0cmluZ0ltcGwqIGZpbmQoY29uc3QgSlNDOjpJZGVudGlmaWVyJik7DSAjZW5kaWYN
QEAgLTEzOCw0ICsxNDQsMTUgQEAgaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3Qg
U3RyaW5nJiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGUNIA0gfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQ0gDSsNK25hbWVzcGFjZSBXVEYgew0rDSsgICAgLy8gQXRvbWljU3RyaW5n
SGFzaCBpcyB0aGUgZGVmYXVsdCBoYXNoIGZvciBBdG9taWNTdHJpbmcNKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7DSsgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVm
YXVsdEhhc2g8V2ViQ29yZTo6QXRvbWljU3RyaW5nPiB7DSsgICAgICAgIHR5cGVkZWYgV2ViQ29y
ZTo6QXRvbWljU3RyaW5nSGFzaCBIYXNoOw0rICAgIH07DSsNK30gLy8gbmFtZXNwYWNlIFdURg0r
DSAjZW5kaWYgLy8gQXRvbWljU3RyaW5nX2gNZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9BdG9taWNTdHJpbmdIYXNoLmggYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3Ry
aW5nSGFzaC5oDW5ldyBmaWxlIG1vZGUgMTAwNjQ0DWluZGV4IDAwMDAwMDAuLjY3YTQ1ZGUNLS0t
IC9kZXYvbnVsbA0rKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nSGFzaC5o
DUBAIC0wLDAgKzEsNjQgQEANKy8qDSsgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLg0rICoNKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0rICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDSsgKiBh
cmUgbWV0Og0rICoNKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0rICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gDSsgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQN
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlDSsgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gDSsgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
Zg0rICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQNKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIA0rICoNKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
DSsgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEDSsgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDSsgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZDSsgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0rICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0rICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EDSsgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0rICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
DSsgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLg0rICovDSsNKyNpZm5kZWYgQXRvbWljU3RyaW5nSGFzaF9oDSsjZGVmaW5l
IEF0b21pY1N0cmluZ0hhc2hfaA0rDSsjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiDSsjaW5jbHVk
ZSA8d3RmL0hhc2hUcmFpdHMuaD4NKw0rbmFtZXNwYWNlIFdlYkNvcmUgew0rDSsgICAgc3RydWN0
IEF0b21pY1N0cmluZ0hhc2ggew0rICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBB
dG9taWNTdHJpbmcmIGtleSkNKyAgICAgICAgew0rICAgICAgICAgICAgcmV0dXJuIGtleS5pbXBs
KCktPmV4aXN0aW5nSGFzaCgpOw0rICAgICAgICB9DSsNKyAgICAgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpDSsgICAgICAg
IHsNKyAgICAgICAgICAgIHJldHVybiBhID09IGI7DSsgICAgICAgIH0NKw0rICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOw0rICAg
IH07DSsNK30NKw0rbmFtZXNwYWNlIFdURiB7DSsNKyAgICAvLyBXZWJDb3JlOjpBdG9taWNTdHJp
bmdIYXNoIGlzIHRoZSBkZWZhdWx0IGhhc2ggZm9yIEF0b21pY1N0cmluZw0rICAgIHRlbXBsYXRl
PD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6QXRvbWljU3RyaW5nPiA6IEdlbmVyaWNIYXNo
VHJhaXRzPFdlYkNvcmU6OkF0b21pY1N0cmluZz4gew0rICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsNKyAgICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0
RGVsZXRlZFZhbHVlKFdlYkNvcmU6OkF0b21pY1N0cmluZyYgc2xvdCkgeyBuZXcgKCZzbG90KSBX
ZWJDb3JlOjpBdG9taWNTdHJpbmcoSGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsgfQ0rICAgICAgICBz
dGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBXZWJDb3JlOjpBdG9taWNTdHJpbmcmIHNs
b3QpIHsgcmV0dXJuIHNsb3QuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQ0rICAgIH07DSsN
K30NKw0rI2VuZGlmDWRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1w
bC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaA1pbmRleCBjYzhmODE1Li41
N2Y2NGM4IDEwMDY0NA0tLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oDSsr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgNQEAgLTg2LDYgKzg2LDcgQEAg
cHVibGljOg0gICAgIGJvb2wgaGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKCkgeyByZXR1cm4g
bV9oYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXI7IH0NIA0gICAgIHVuc2lnbmVkIGhhc2goKSB7
IGlmIChtX2hhc2ggPT0gMCkgbV9oYXNoID0gY29tcHV0ZUhhc2gobV9kYXRhLCBtX2xlbmd0aCk7
IHJldHVybiBtX2hhc2g7IH0NKyAgICB1bnNpZ25lZCBleGlzdGluZ0hhc2goKSBjb25zdCB7IEFT
U0VSVChtX2hhc2gpOyByZXR1cm4gbV9oYXNoOyB9DSAgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1
dGVIYXNoKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuKTsNICAgICBzdGF0aWMgdW5zaWduZWQg
Y29tcHV0ZUhhc2goY29uc3QgY2hhciopOw0gICAgIA0=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24641</attachid>
            <date>2008-10-24 09:58:07 -0700</date>
            <delta_ts>2008-10-24 12:03:30 -0700</delta_ts>
            <desc>Final patch</desc>
            <filename>21818_patch.txt</filename>
            <type>text/plain</type>
            <size>10910</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cNaW5kZXgg
NDEwYmZkZC4uYWMzOTNjNCAxMDA2NDQNLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cNKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cNQEAgLTEsMyArMSwzMCBAQA0rMjAwOC0xMC0yNCAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4NKw0rICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlcg0rDSsgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTgxOA0rICAgICAgICANKyAgICAgICAgQWRkIEhhc2hUcmFpdHMgZm9yIEF0b21pY1N0cmluZyBz
byB0aGF0IEF0b21pY1N0cmluZyBjYW4gYmUgdXNlZCBhcw0rICAgICAgICB0aGUga2V5IGZvciBh
IEhhc2hNYXAgb3IgSGFzaFNldC4NKw0rICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgQXRv
bWljU3RyaW5nSGFzaC5oDSsgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
IEFkZCBBdG9taWNTdHJpbmdIYXNoLmgNKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6IEFkZCBBdG9taWNTdHJpbmdIYXNoLmgNKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L0F0b21pY1N0cmluZy5oOg0rICAgICAgICAoV2ViQ29yZTo6QXRvbWljU3RyaW5nOjpBdG9t
aWNTdHJpbmcpOg0rICAgICAgICAoV2ViQ29yZTo6QXRvbWljU3RyaW5nOjppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSk6DSsgICAgICAgIChXVEY6Oik6IHNwZWNpYWxpemUgRGVmYXVsdEhhc2ggZm9y
IEF0b21pY1N0cmluZyB0byB1c2UgQXRvbWljU3RyaW5nSGFzaA0rICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvQXRvbWljU3RyaW5nSGFzaC5oOiBBZGRlZC4NKyAgICAgICAgKFdlYkNvcmU6OkF0b21p
Y1N0cmluZ0hhc2g6Omhhc2gpOg0rICAgICAgICAoV2ViQ29yZTo6QXRvbWljU3RyaW5nSGFzaDo6
ZXF1YWwpOg0rICAgICAgICAoV1RGOjopOg0rICAgICAgICAqIHBsYXRmb3JtL3RleHQvU3RyaW5n
SW1wbC5jcHA6DSsgICAgICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKTogY29t
cHV0ZSB0aGUgaGFzaCB1cC1mcm9udCBmb3IgdGhlIGVtcHR5IHN0cmluZw0rICAgICAgICAqIHBs
YXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oOiBhZGQgZXhpc3RpbmdIYXNoKCkgbWV0aG9kDSsgICAg
ICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpleGlzdGluZ0hhc2gpOiBtZXRob2QgdG8gZ2V0IHRo
ZSBoYXNoIHdpdGhvdXQgYSB0ZXN0DSsgICAgICAgIGFuZCBicmFuY2gsIGZvciBjYWxsZXJzIGxp
a2UgQXRvbWljU3RyaW5nSGFzaCB3aG8gY2FuIGd1YXJhbnRlZSB0aGF0IHRoZSBoYXNoDSsgICAg
ICAgIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQuDSsNIDIwMDgtMTAtMjMgIEphbiBNaWNoYWVs
IEFsb256byAgPGptYWxvbnpvQHdlYmtpdC5vcmc+DSANICAgICAgICAgRml4IEd0ayBidWlsZCB0
eXBvIGludHJvZHVjZWQgaW4gaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMzc4MjYu
DWRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQ1pbmRleCA0YzhhZWY5Li45ODllN2JlIDEwMDY0NA0tLS0gYS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtDSsrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0NQEAgLTE0MDAsNiArMTQwMCw3IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcDSAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
UmVzcG9uc2VCYXNlLmggXA0gCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuY3Bw
IFwNIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmggXA0rCVdlYkNvcmUvcGxh
dGZvcm0vdGV4dC9BdG9taWNTdHJpbmdIYXNoLmggXA0gCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9B
dG9taWNTdHJpbmdJbXBsLmggXA0gCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9CYXNlNjQuY3BwIFwN
IAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvQmFzZTY0LmggXA1kaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oNaW5kZXggNTkzMzRkMy4uN2I3MThkYiAxMDA2NDQNLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvag0rKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qDUBAIC02MDQ5LDYgKzYwNDksMTAgQEANIAkJCQkJPg0gCQkJCTwvRmls
ZT4NIAkJCQk8RmlsZQ0rCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHRleHRcQXRvbWlj
U3RyaW5nSGFzaC5oIg0rCQkJCQk+DSsJCQkJPC9GaWxlPg0rCQkJCTxGaWxlDSAJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxBdG9taWNTdHJpbmdJbXBsLmgiDSAJCQkJCT4NIAkJ
CQk8L0ZpbGU+DWRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qDWluZGV4
IGI3MDRiYzAuLjRlZDhiMmUgMTAwNjQ0DS0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qDSsrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qDUBAIC00NCw2ICs0NCw3IEBADSAJCTBBNDg0NDk5MENBNDRDQjIwMEI3QkQ0OCAvKiBT
b2Z0TGlua2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEE0ODQ0OTgwQ0E0NENCMjAwQjdCRDQ4IC8qIFNvZnRMaW5raW5nLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsNIAkJMEY1NjAyOEYwRTRCNzY1ODAw
NjVCMDM4IC8qIFJlbmRlck1hcnF1ZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNTYwMjhEMEU0Qjc2NTgwMDY1QjAzOCAvKiBSZW5kZXJNYXJxdWVl
LmggKi87IH07DSAJCTBGNTYwMjkwMEU0Qjc2NTgwMDY1QjAzOCAvKiBSZW5kZXJNYXJxdWVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTYwMjhF
MEU0Qjc2NTgwMDY1QjAzOCAvKiBSZW5kZXJNYXJxdWVlLmNwcCAqLzsgfTsNKwkJMEZDNzA1MjEw
RUIxODE1NjAwQjkwQUQ4IC8qIEF0b21pY1N0cmluZ0hhc2guaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzcwNTIwMEVCMTgxNTYwMEI5MEFEOCAvKiBB
dG9taWNTdHJpbmdIYXNoLmggKi87IH07DSAJCTE0MDI2NDVFMEFGREMxOUIwMDU5MTlFMiAvKiBM
b2dnaW5nTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQwMjY0NUQwQUZEQzE5QjAwNTkxOUUyIC8qIExvZ2dpbmdNYWMubW0gKi87IH07DSAJCTE0
MDNCOTk3MDlFQjEzQUYwMDc5N0M3RiAvKiBET01XaW5kb3cuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDNCOTk1MDlFQjEzQUYwMDc5N0M3RiAvKiBE
T01XaW5kb3cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
Ow0gCQkxNDAzQjk5ODA5RUIxM0FGMDA3OTdDN0YgLyogRE9NV2luZG93LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDNCOTk2MDlFQjEzQUYwMDc5
N0M3RiAvKiBET01XaW5kb3cuY3BwICovOyB9Ow1AQCAtNDcxNiw2ICs0NzE3LDcgQEANIAkJMEE0
ODQ0OTgwQ0E0NENCMjAwQjdCRDQ4IC8qIFNvZnRMaW5raW5nLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNvZnRMaW5raW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
DSAJCTBGNTYwMjhEMEU0Qjc2NTgwMDY1QjAzOCAvKiBSZW5kZXJNYXJxdWVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1hcnF1ZWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsNIAkJMEY1NjAyOEUwRTRCNzY1ODAwNjVCMDM4IC8qIFJlbmRlck1hcnF1ZWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTWFycXVlZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07DSsJCTBGQzcwNTIwMEVCMTgxNTYwMEI5MEFE
OCAvKiBBdG9taWNTdHJpbmdIYXNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEF0b21pY1N0cmluZ0hhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsNIAkJMTQwMjY0
NUQwQUZEQzE5QjAwNTkxOUUyIC8qIExvZ2dpbmdNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gTG9nZ2luZ01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsNIAkJMTQwM0I5MEMwOUVCMTI0NTAwNzk3QzdGIC8qIERPTVdpbmRvdy5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gRE9NV2luZG93LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsNIAkJMTQwM0I5OTUwOUVCMTNBRjAwNzk3QzdGIC8qIERPTVdpbmRvdy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01XaW5kb3cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsNQEAgLTEyNjYwLDYgKzEyNjYyLDcgQEANIAkJCQlCMkMzRDlGOTBEMDA2QzFEMDBFRjZG
MjYgLyogbWFjICovLA0gCQkJCUIyQzNEOUVEMEQwMDZDMUQwMEVGNkYyNiAvKiBBdG9taWNTdHJp
bmcuY3BwICovLA0gCQkJCUIyQzNEOUVFMEQwMDZDMUQwMEVGNkYyNiAvKiBBdG9taWNTdHJpbmcu
aCAqLywNKwkJCQkwRkM3MDUyMDBFQjE4MTU2MDBCOTBBRDggLyogQXRvbWljU3RyaW5nSGFzaC5o
ICovLA0gCQkJCUIyQzNEOUVGMEQwMDZDMUQwMEVGNkYyNiAvKiBBdG9taWNTdHJpbmdJbXBsLmgg
Ki8sDSAJCQkJQjJDM0Q5RjAwRDAwNkMxRDAwRUY2RjI2IC8qIEJhc2U2NC5jcHAgKi8sDSAJCQkJ
QjJDM0Q5RjEwRDAwNkMxRDAwRUY2RjI2IC8qIEJhc2U2NC5oICovLA1AQCAtMTYwNTYsNiArMTYw
NTksNyBAQA0gCQkJCUJDRkY2NDkxMEVBRDE1QzIwMEMxRDZGNyAvKiBMZW5ndGhCb3guaCBpbiBI
ZWFkZXJzICovLA0gCQkJCUJDRkY2NDkyMEVBRDE1QzIwMEMxRDZGNyAvKiBMZW5ndGhTaXplLmgg
aW4gSGVhZGVycyAqLywNIAkJCQlFMUMzNkMwMzBFQjA3NkQ2MDA3NDEwQkMgLyogSlNET01HbG9i
YWxPYmplY3QuaCBpbiBIZWFkZXJzICovLA0rCQkJCTBGQzcwNTIxMEVCMTgxNTYwMEI5MEFEOCAv
KiBBdG9taWNTdHJpbmdIYXNoLmggaW4gSGVhZGVycyAqLywNIAkJCSk7DSAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsNIAkJfTsNZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuaCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9t
aWNTdHJpbmcuaA1pbmRleCBhZjcyYzQ2Li5hMTljOGQwIDEwMDY0NA0tLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmgNKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0
b21pY1N0cmluZy5oDUBAIC0yNiw2ICsyNiw4IEBADSANIG5hbWVzcGFjZSBXZWJDb3JlIHsNIA0r
c3RydWN0IEF0b21pY1N0cmluZ0hhc2g7DSsNIGNsYXNzIEF0b21pY1N0cmluZyB7DSBwdWJsaWM6
DSAgICAgc3RhdGljIHZvaWQgaW5pdCgpOw1AQCAtNDIsNiArNDQsMTAgQEAgcHVibGljOg0gICAg
IEF0b21pY1N0cmluZyhBdG9taWNTdHJpbmdJbXBsKiBpbXApIDogbV9zdHJpbmcoaW1wKSB7IH0N
ICAgICBBdG9taWNTdHJpbmcoY29uc3QgU3RyaW5nJiBzKSA6IG1fc3RyaW5nKGFkZChzLmltcGwo
KSkpIHsgfQ0gDSsgICAgLy8gSGFzaCB0YWJsZSBkZWxldGVkIHZhbHVlcywgd2hpY2ggYXJlIG9u
bHkgY29uc3RydWN0ZWQgYW5kIG5ldmVyIGNvcGllZCBvciBkZXN0cm95ZWQuDSsgICAgQXRvbWlj
U3RyaW5nKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX3N0cmluZyhXVEY6Okhh
c2hUYWJsZURlbGV0ZWRWYWx1ZSkgeyB9DSsgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0N
Kw0gI2lmIFVTRShKU0MpDSAgICAgc3RhdGljIEF0b21pY1N0cmluZ0ltcGwqIGZpbmQoY29uc3Qg
SlNDOjpJZGVudGlmaWVyJik7DSAjZW5kaWYNQEAgLTEzOCw0ICsxNDQsMTUgQEAgaW5saW5lIGJv
b2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgU3RyaW5nJiBhLCBjb25zdCBBdG9taWNTdHJpbmcm
IGIpIHsgcmV0dXJuIGUNIA0gfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQ0gDSsNK25hbWVzcGFjZSBX
VEYgew0rDSsgICAgLy8gQXRvbWljU3RyaW5nSGFzaCBpcyB0aGUgZGVmYXVsdCBoYXNoIGZvciBB
dG9taWNTdHJpbmcNKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7
DSsgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8V2ViQ29yZTo6QXRvbWljU3RyaW5n
PiB7DSsgICAgICAgIHR5cGVkZWYgV2ViQ29yZTo6QXRvbWljU3RyaW5nSGFzaCBIYXNoOw0rICAg
IH07DSsNK30gLy8gbmFtZXNwYWNlIFdURg0rDSAjZW5kaWYgLy8gQXRvbWljU3RyaW5nX2gNZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmdIYXNoLmggYi9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oDW5ldyBmaWxlIG1vZGUgMTAwNjQ0
DWluZGV4IDAwMDAwMDAuLjY3YTQ1ZGUNLS0tIC9kZXYvbnVsbA0rKysgYi9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oDUBAIC0wLDAgKzEsNjQgQEANKy8qDSsgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0rICoNKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dA0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zDSsgKiBhcmUgbWV0Og0rICoNKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0rICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gDSsgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDSsgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4gDSsgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZg0rICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQNKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uIA0rICoNKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZDSsgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDSsgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFDSsgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZDSsgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0rICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOw0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EDSsgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVA0rICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GDSsgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0rICovDSsNKyNpZm5kZWYg
QXRvbWljU3RyaW5nSGFzaF9oDSsjZGVmaW5lIEF0b21pY1N0cmluZ0hhc2hfaA0rDSsjaW5jbHVk
ZSAiQXRvbWljU3RyaW5nLmgiDSsjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4NKw0rbmFtZXNw
YWNlIFdlYkNvcmUgew0rDSsgICAgc3RydWN0IEF0b21pY1N0cmluZ0hhc2ggew0rICAgICAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBBdG9taWNTdHJpbmcmIGtleSkNKyAgICAgICAgew0r
ICAgICAgICAgICAgcmV0dXJuIGtleS5pbXBsKCktPmV4aXN0aW5nSGFzaCgpOw0rICAgICAgICB9
DSsNKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25z
dCBBdG9taWNTdHJpbmcmIGIpDSsgICAgICAgIHsNKyAgICAgICAgICAgIHJldHVybiBhID09IGI7
DSsgICAgICAgIH0NKw0rICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9F
bXB0eU9yRGVsZXRlZCA9IGZhbHNlOw0rICAgIH07DSsNK30NKw0rbmFtZXNwYWNlIFdURiB7DSsN
KyAgICAvLyBXZWJDb3JlOjpBdG9taWNTdHJpbmdIYXNoIGlzIHRoZSBkZWZhdWx0IGhhc2ggZm9y
IEF0b21pY1N0cmluZw0rICAgIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6
QXRvbWljU3RyaW5nPiA6IEdlbmVyaWNIYXNoVHJhaXRzPFdlYkNvcmU6OkF0b21pY1N0cmluZz4g
ew0rICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsNKyAg
ICAgICAgc3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFdlYkNvcmU6OkF0b21pY1N0
cmluZyYgc2xvdCkgeyBuZXcgKCZzbG90KSBXZWJDb3JlOjpBdG9taWNTdHJpbmcoSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKTsgfQ0rICAgICAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25z
dCBXZWJDb3JlOjpBdG9taWNTdHJpbmcmIHNsb3QpIHsgcmV0dXJuIHNsb3QuaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKTsgfQ0rICAgIH07DSsNK30NKw0rI2VuZGlmDWRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
U3RyaW5nSW1wbC5jcHANaW5kZXggMGZjODIzMi4uMThmY2M3NSAxMDA2NDQNLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwDSsrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9TdHJpbmdJbXBsLmNwcA1AQCAtNjAsNiArNjAsNyBAQCBTdHJpbmdJbXBsOjpTdHJpbmdJbXBs
KCkNICAgICAsIG1faW5UYWJsZShmYWxzZSkNICAgICAsIG1faGFzVGVybWluYXRpbmdOdWxsQ2hh
cmFjdGVyKGZhbHNlKQ0gew0rICAgIGhhc2goKTsNIH0NIA0gLy8gVGhpcyBpcyBvbmUgb2YgdGhl
IG1vc3QgY29tbW9uIGNvbnN0cnVjdG9ycywgYnV0IGl0J3MgYWxzbyB1c2VkIGZvciB0aGUgY29w
eSgpDWRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaA1pbmRleCBjYzhmODE1Li41N2Y2NGM4IDEw
MDY0NA0tLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oDSsrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgNQEAgLTg2LDYgKzg2LDcgQEAgcHVibGljOg0g
ICAgIGJvb2wgaGFzVGVybWluYXRpbmdOdWxsQ2hhcmFjdGVyKCkgeyByZXR1cm4gbV9oYXNUZXJt
aW5hdGluZ051bGxDaGFyYWN0ZXI7IH0NIA0gICAgIHVuc2lnbmVkIGhhc2goKSB7IGlmIChtX2hh
c2ggPT0gMCkgbV9oYXNoID0gY29tcHV0ZUhhc2gobV9kYXRhLCBtX2xlbmd0aCk7IHJldHVybiBt
X2hhc2g7IH0NKyAgICB1bnNpZ25lZCBleGlzdGluZ0hhc2goKSBjb25zdCB7IEFTU0VSVChtX2hh
c2gpOyByZXR1cm4gbV9oYXNoOyB9DSAgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNv
bnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuKTsNICAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhh
c2goY29uc3QgY2hhciopOw0gICAgIA0=
</data>
<flag name="review"
          id="11258"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>