<?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>23622</bug_id>
          
          <creation_ts>2009-01-29 09:50:18 -0800</creation_ts>
          <short_desc>create CFString and NSString objects from WebCore::String without copying the characters</short_desc>
          <delta_ts>2009-02-01 07:28:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ap</cc>
    
    <cc>mrowe</cc>
    
    <cc>slewis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>107531</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-29 09:50:18 -0800</bug_when>
    <thetext>Mark and I realized this is possible and we think it will be a good performance optimization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107532</commentid>
    <comment_count>1</comment_count>
      <attachid>27150</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-29 09:51:01 -0800</bug_when>
    <thetext>Created attachment 27150
fist steps</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107721</commentid>
    <comment_count>2</comment_count>
      <attachid>27186</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-30 10:09:17 -0800</bug_when>
    <thetext>Created attachment 27186
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107725</commentid>
    <comment_count>3</comment_count>
      <attachid>27186</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-30 10:29:28 -0800</bug_when>
    <thetext>Comment on attachment 27186
patch

Non-main-thread handling is wrong here. I&apos;ll have to make a new version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107741</commentid>
    <comment_count>4</comment_count>
      <attachid>27186</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-01-30 11:54:01 -0800</bug_when>
    <thetext>Comment on attachment 27186
patch

Shouldn&apos;t the #if PLATFORM(MAC) || !defined(BUILDING_ON_TIGER) checks have an &amp;&amp; rather than ||?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107745</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-30 12:14:57 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Shouldn&apos;t the #if PLATFORM(MAC) || !defined(BUILDING_ON_TIGER) checks have an
&gt; &amp;&amp; rather than ||?

Yes. Thanks for spotting that.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107811</commentid>
    <comment_count>6</comment_count>
      <attachid>27205</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-30 17:56:38 -0800</bug_when>
    <thetext>Created attachment 27205
patch -- this time I think it handles threading acceptably</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107813</commentid>
    <comment_count>7</comment_count>
      <attachid>27205</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-01-30 18:12:36 -0800</bug_when>
    <thetext>Comment on attachment 27205
patch -- this time I think it handles threading acceptably

The calls to the system memory allocator should probably use FastMalloc instead, and the code may be slightly easier to follow if create() and allocator() were closer in the code.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107814</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-30 18:18:23 -0800</bug_when>
    <thetext>I&apos;m going to attach the final patch here so Stephanie can more easily do some performance testing rolling it in and out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107815</commentid>
    <comment_count>9</comment_count>
      <attachid>27206</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-30 18:18:44 -0800</bug_when>
    <thetext>Created attachment 27206
final patch with changes requested by Mark</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107817</commentid>
    <comment_count>10</comment_count>
      <attachid>27208</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-30 18:26:59 -0800</bug_when>
    <thetext>Created attachment 27208
more final</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107890</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-01 07:28:08 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/40438</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27150</attachid>
            <date>2009-01-29 09:51:01 -0800</date>
            <delta_ts>2009-01-30 10:09:17 -0800</delta_ts>
            <desc>fist steps</desc>
            <filename>StartStringPatch.txt</filename>
            <type>text/plain</type>
            <size>2722</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9jZi9TdHJpbmdDRi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0NGLmNwcAkocmV2aXNpb24gNDAzNjIp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvY2YvU3RyaW5nQ0YuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAotLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNyw3ICszNyw3IEBAIFN0
cmluZzo6U3RyaW5nKENGU3RyaW5nUmVmIHN0cikKICAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1w
bDo6ZW1wdHkoKTsKICAgICBlbHNlIHsKICAgICAgICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBidWZm
ZXIoc2l6ZSk7Ci0gICAgICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhzdHIsIENGUmFuZ2VNYWtl
KDAsIHNpemUpLCAoVW5pQ2hhciopYnVmZmVyLmRhdGEoKSk7CisgICAgICAgIENGU3RyaW5nR2V0
Q2hhcmFjdGVycyhzdHIsIENGUmFuZ2VNYWtlKDAsIHNpemUpLCByZWludGVycHJldF9jYXN0PFVu
aUNoYXIqPihidWZmZXIuZGF0YSgpKSk7CiAgICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNy
ZWF0ZShidWZmZXIuZGF0YSgpLCBzaXplKTsKICAgICB9CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcAkocmV2aXNpb24gNDAzNjIpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKLS8qKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L21hYy9TdHJpbmdJbXBsTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9tYWMvU3RyaW5nSW1wbE1hYy5tbQkocmV2aXNpb24gNDAzNjIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvbWFjL1N0cmluZ0ltcGxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACi0vKioKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDEzICsyMSwxMyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKIAotI2luY2x1ZGUgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgorI2luY2x1ZGUgIkZvdW5kYXRpb25FeHRyYXMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBTdHJpbmdJbXBsOjpvcGVyYXRvciBOU1N0cmluZyAqKCkKIHsKLSAgICBy
ZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOm1fZGF0YSBsZW5ndGg6bV9sZW5n
dGhdOworICAgIHJldHVybiBIYXJkQXV0b3JlbGVhc2UoY3JlYXRlQ0ZTdHJpbmcoKSk7CiB9CiAK
IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvU3RyaW5nTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvU3RyaW5nTWFjLm1tCShyZXZpc2lvbiA0
MDM2MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvU3RyaW5nTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAotLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27186</attachid>
            <date>2009-01-30 10:09:17 -0800</date>
            <delta_ts>2009-01-30 17:56:38 -0800</delta_ts>
            <desc>patch</desc>
            <filename>StringCFPatch.txt</filename>
            <type>text/plain</type>
            <size>7253</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDQwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMDktMDEtMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAy
MzYyMjogY3JlYXRlIENGU3RyaW5nIGFuZCBOU1N0cmluZyBvYmplY3RzIGZyb20gV2ViQ29yZTo6
U3RyaW5nIHdpdGhvdXQgY29weWluZyB0aGUgY2hhcmFjdGVycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2MjIKKworICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1dyYXBw
ZXJDRkFsbG9jYXRvcjo6YWxsb2NhdG9yKTogQWRkZWQuIFJldHVybnMgdGhlIGFsbG9jYXRvci4K
KyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6cmV0YWluKTogQWRk
ZWQuIENhbGxiYWNrIGZvciBhbGxvY2F0b3IuCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdXcmFw
cGVyQ0ZBbGxvY2F0b3I6OnJlbGVhc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmlu
Z1dyYXBwZXJDRkFsbG9jYXRvcjo6Y29weURlc2NyaXB0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OmFsbG9jYXRlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OnJlYWxsb2NhdGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6ZGVhbGxvY2F0
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nV3JhcHBlckNGQWxsb2NhdG9yOjpw
cmVmZXJyZWRTaXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdXcmFwcGVyQ0ZB
bGxvY2F0b3I6OmNyZWF0ZSk6IEFkZGVkLiBDcmVhdGVzIHRoZSBhbGxvY2F0b3IsIGJ1dAorICAg
ICAgICByZXR1cm5zIDAgaWYgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIGVuYWJsZWQuCisgICAgICAg
IChXZWJDb3JlOjpTdHJpbmdJbXBsOjpjcmVhdGVDRlN0cmluZyk6IFVzZSBTdHJpbmdXcmFwcGVy
Q0ZBbGxvY2F0b3IgaWYgcG9zc2libGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L21hYy9T
dHJpbmdJbXBsTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6b3BlcmF0b3Ig
TlNTdHJpbmcgKik6IFVzZSBDRlN0cmluZyBhbmQgdG9sbC1mcmVlIGJyaWRnaW5nLAorICAgICAg
ICByYXRoZXIgdGhhbiB1c2luZyBOU1N0cmluZyBkaXJlY3RseS4gVGhpcyBsZXRzIE5TU3RyaW5n
IGJlbmVmaXQgZnJvbSB0aGUgYWJvdmUuCisKIDIwMDktMDEtMzAgIEJyYWR5IEVpZHNvbiAgPGJl
aWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3BwCShyZXZpc2lvbiA0MDQw
OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9jZi9TdHJpbmdJbXBsQ0YuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAotLyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxNCArMjQs
MTE4IEBACiAjaWYgUExBVEZPUk0oQ0YpIHx8IChQTEFURk9STShRVCkgJiYgUExBVEZPUk0oREFS
V0lOKSkKIAogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworI2lmIFBMQVRGT1JNKE1BQykgfHwgIWRlZmluZWQo
QlVJTERJTkdfT05fVElHRVIpCisjaW5jbHVkZSA8b2JqYy9vYmpjLWF1dG8uaD4KKyNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFjZSBTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0
b3IgeworCisgICAgc3RhdGljIENGQWxsb2NhdG9yUmVmIGNyZWF0ZSgpOworCisgICAgc3RhdGlj
IFN0cmluZ0ltcGwqIGN1cnJlbnRTdHJpbmc7CisKKyAgICBzdGF0aWMgQ0ZBbGxvY2F0b3JSZWYg
YWxsb2NhdG9yKCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBDRkFsbG9jYXRvclJlZiBhbGxvY2F0
b3IgPSBjcmVhdGUoKTsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvcjsKKyAgICB9CisKKyAgICBz
dGF0aWMgY29uc3Qgdm9pZCogcmV0YWluKGNvbnN0IHZvaWQqIGluZm8pCisgICAgeworICAgICAg
ICByZXR1cm4gaW5mbzsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZWxlYXNlKGNvbnN0IHZv
aWQqKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAg
c3RhdGljIENGU3RyaW5nUmVmIGNvcHlEZXNjcmlwdGlvbihjb25zdCB2b2lkKikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBDRlNUUigiV2ViQ29yZTo6U3RyaW5nLWJhc2VkIGFsbG9jYXRvciIpOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShDRkluZGV4IHNpemUsIENGT3B0aW9u
RmxhZ3MsIHZvaWQqKQorICAgIHsKKyAgICAgICAgU3RyaW5nSW1wbCoqIGhlYWRlciA9IHN0YXRp
Y19jYXN0PFN0cmluZ0ltcGwqKj4oZmFzdE1hbGxvYyhzaXplb2YoU3RyaW5nSW1wbCopICsgc2l6
ZSkpOworICAgICAgICBpZiAoY3VycmVudFN0cmluZykKKyAgICAgICAgICAgIGN1cnJlbnRTdHJp
bmctPnJlZigpOyAvLyBCYWxhbmNlZCBieSBjYWxsIHRvIGRlcmVmIGluIFN0cmluZ1dyYXBwZXJD
RkFsbG9jYXRvcjo6ZGVhbGxvY2F0ZS4KKyAgICAgICAgKmhlYWRlciA9IGN1cnJlbnRTdHJpbmc7
CisgICAgICAgIGN1cnJlbnRTdHJpbmcgPSAwOworICAgICAgICByZXR1cm4gaGVhZGVyICsgMTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBwb2ludGVyLCBDRklu
ZGV4IG5ld1NpemUsIENGT3B0aW9uRmxhZ3MsIHZvaWQqKQorICAgIHsKKyAgICAgICAgU3RyaW5n
SW1wbCoqIGhlYWRlciA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqKj4ocG9pbnRlcikgLSAxOwor
ICAgICAgICBoZWFkZXIgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKio+KGZhc3RSZWFsbG9jKGhl
YWRlciwgc2l6ZW9mKFN0cmluZ0ltcGwqKSArIG5ld1NpemUpKTsKKyAgICAgICAgcmV0dXJuIGhl
YWRlciArIDE7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBwb2lu
dGVyLCB2b2lkKikKKyAgICB7CisgICAgICAgIFN0cmluZ0ltcGwqKiBoZWFkZXIgPSBzdGF0aWNf
Y2FzdDxTdHJpbmdJbXBsKio+KHBvaW50ZXIpIC0gMTsKKyAgICAgICAgaWYgKFN0cmluZ0ltcGwq
IHN0cmluZyA9ICpoZWFkZXIpCisgICAgICAgICAgICBzdHJpbmctPmRlcmVmKCk7IC8vIEJhbGFu
Y2VkIGJ5IGNhbGwgdG8gcmVmIGluIFN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6YWxsb2NhdGUu
CisgICAgICAgIGZhc3RGcmVlKGhlYWRlcik7CisgICAgfQorCisgICAgQ0ZJbmRleCBwcmVmZXJy
ZWRTaXplKENGSW5kZXggc2l6ZSwgQ0ZPcHRpb25GbGFncywgdm9pZCopCisgICAgeworICAgICAg
ICAvLyBGSVhNRTogSWYgRmFzdE1hbGxvYyBwcm92aWRlZCBhICJnb29kIHNpemUiIGNhbGxiYWNr
LCB3ZSdkIHdhbnQgdG8gdXNlIGl0IGhlcmUuCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIG9w
dGltaXphdGlvbiB3b3VsZCBoZWxwIHBlcmZvcm1hbmNlIGZvciBzdHJpbmdzIGNyZWF0ZWQgd2l0
aCB0aGUKKyAgICAgICAgLy8gYWxsb2NhdG9yIHRoYXQgYXJlIG11dGFibGUsIGFuZCB0aG9zZSB0
eXBpY2FsbHkgYXJlIG9ubHkgY3JlYXRlZCBieSBjYWxsZXJzIHdobworICAgICAgICAvLyBtYWtl
IGEgbmV3IHN0cmluZyB1c2luZyB0aGUgb2xkIHN0cmluZydzIGFsbG9jYXRvciwgc3VjaCBhcyBz
b21lIG9mIHRoZSBjYWxsCisgICAgICAgIC8vIHNpdGVzIGluIENGVVJMLgorICAgICAgICByZXR1
cm4gc2l6ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgQ0ZBbGxvY2F0b3JSZWYgY3JlYXRlKCkKKyAg
ICB7CisjaWYgUExBVEZPUk0oTUFDKSB8fCAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikKKyAg
ICAgICAgaWYgKG9iamNfY29sbGVjdGluZ0VuYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAw
OworI2VuZGlmCisgICAgICAgIENGQWxsb2NhdG9yQ29udGV4dCBjb250ZXh0ID0geyAwLCAwLCBy
ZXRhaW4sIHJlbGVhc2UsIGNvcHlEZXNjcmlwdGlvbiwgYWxsb2NhdGUsIHJlYWxsb2NhdGUsIGRl
YWxsb2NhdGUsIHByZWZlcnJlZFNpemUgfTsKKyAgICAgICAgcmV0dXJuIENGQWxsb2NhdG9yQ3Jl
YXRlKDAsICZjb250ZXh0KTsKKyAgICB9CisKK30KKwogQ0ZTdHJpbmdSZWYgU3RyaW5nSW1wbDo6
Y3JlYXRlQ0ZTdHJpbmcoKQogewotICAgIHJldHVybiBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0
ZXJzKE5VTEwsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KG1fZGF0YSksIG1fbGVu
Z3RoKTsKKyAgICBDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IgPSBTdHJpbmdXcmFwcGVyQ0ZBbGxv
Y2F0b3I6OmFsbG9jYXRvcigpOworCisjaWYgUExBVEZPUk0oTUFDKSB8fCAhZGVmaW5lZChCVUlM
RElOR19PTl9USUdFUikKKyAgICAvLyBTaW5jZSBnYXJiYWdlIGNvbGxlY3Rpb24gaXNuJ3QgY29t
cGF0aWJsZSB3aXRoIGN1c3RvbSBhbGxvY2F0b3JzLCB1c2UgdGhpcyBjb2RlIHBhdGggd2hlbiBp
dCdzIGFjdGl2ZS4KKyAgICBpZiAoIWFsbG9jYXRvcikKKyAgICAgICAgcmV0dXJuIENGU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4o
bV9kYXRhKSwgbV9sZW5ndGgpOworI2VuZGlmCisKKyAgICAvLyBQdXQgcG9pbnRlciB0byB0aGUg
U3RyaW5nSW1wbCBpbiBhIGdsb2JhbCBzbyB0aGUgYWxsb2NhdG9yIGNhbiBzdG9yZSBpdCB3aXRo
IHRoZSBDRlN0cmluZy4KKyAgICBBU1NFUlQoIVN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6Y3Vy
cmVudFN0cmluZyk7CisgICAgU3RyaW5nV3JhcHBlckNGQWxsb2NhdG9yOjpjdXJyZW50U3RyaW5n
ID0gdGhpczsKKworICAgIENGU3RyaW5nUmVmIHN0cmluZyA9IENGU3RyaW5nQ3JlYXRlV2l0aENo
YXJhY3RlcnNOb0NvcHkoYWxsb2NhdG9yLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIq
PihtX2RhdGEpLCBtX2xlbmd0aCwga0NGQWxsb2NhdG9yTnVsbCk7CisKKyAgICAvLyBUaGUgYWxs
b2NhdG9yIGNsZWFyZWQgdGhlIGdsb2JhbCB3aGVuIGl0IHJlYWQgaXQsIGJ1dCBhbHNvIGNsZWFy
IGl0IGhlcmUganVzdCBpbiBjYXNlLgorICAgIEFTU0VSVCghU3RyaW5nV3JhcHBlckNGQWxsb2Nh
dG9yOjpjdXJyZW50U3RyaW5nKTsKKyAgICBTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OmN1cnJl
bnRTdHJpbmcgPSAwOworCisgICAgcmV0dXJuIHN0cmluZzsKIH0KIAorLy8gT24gU3RyaW5nSW1w
bCBjcmVhdGlvbiB3ZSBjb3VsZCBjaGVjayBpZiB0aGUgYWxsb2NhdG9yIGlzIHRoZSBTdHJpbmdX
cmFwcGVyQ0ZBbGxvY2F0b3IuCisvLyBJZiBpdCBpcywgdGhlbiB3ZSBjb3VsZCBmaW5kIHRoZSBv
cmlnaW5hbCBTdHJpbmdJbXBsIGFuZCBqdXN0IHJldHVybiB0aGF0LiBCdXQgdG8KKy8vIGRvIHRo
YXQgd2UnZCBoYXZlIHRvIGNvbXB1dGUgdGhlIG9mZnNldCBmcm9tIENGU3RyaW5nUmVmIHRvIHRo
ZSBhbGxvY2F0ZWQgYmxvY2s7CisvLyB0aGUgQ0ZTdHJpbmdSZWYgaXMgKm5vdCogYXQgdGhlIHN0
YXJ0IG9mIGFuIGFsbG9jYXRlZCBibG9jay4gVGVzdGluZyBzaG93cyAxMDAweAorLy8gbW9yZSBj
YWxscyB0byBjcmVhdGVDRlN0cmluZyB0aGFuIGNhbGxzIHRvIHRoZSBjcmVhdGUgZnVuY3Rpb25z
IHdpdGggdGhlIGFwcHJvcHJpYXRlCisvLyBhbGxvY2F0b3IsIHNvIGl0J3MgcHJvYmFibHkgbm90
IHVyZ2VudCBvcHRpbWl6ZSB0aGF0IGNhc2UuCisKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKENG
KSB8fCAoUExBVEZPUk0oUVQpICYmIFBMQVRGT1JNKERBUldJTikpCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvbWFjL1N0cmluZ0ltcGxNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L21hYy9TdHJpbmdJbXBsTWFjLm1tCShyZXZpc2lvbiA0MDQwOCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvU3RyaW5nSW1wbE1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKLS8qKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsMTMgKzIxLDEzIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgogCi0jaW5jbHVkZSA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW5jbHVkZSAiRm91bmRhdGlvbkV4dHJhcy5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFN0cmluZ0ltcGw6Om9wZXJhdG9yIE5TU3RyaW5nICoo
KQogewotICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6bV9kYXRhIGxl
bmd0aDptX2xlbmd0aF07CisgICAgcmV0dXJuIEhhcmRBdXRvcmVsZWFzZShjcmVhdGVDRlN0cmlu
ZygpKTsKIH0KIAogfQo=
</data>
<flag name="review"
          id="13080"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27205</attachid>
            <date>2009-01-30 17:56:38 -0800</date>
            <delta_ts>2009-01-30 18:18:44 -0800</delta_ts>
            <desc>patch -- this time I think it handles threading acceptably</desc>
            <filename>StringCFPatch.txt</filename>
            <type>text/plain</type>
            <size>8206</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDQzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMDktMDEtMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAy
MzYyMjogY3JlYXRlIENGU3RyaW5nIGFuZCBOU1N0cmluZyBvYmplY3RzIGZyb20gV2ViQ29yZTo6
U3RyaW5nIHdpdGhvdXQgY29weWluZyB0aGUgY2hhcmFjdGVycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2MjIKKworICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1dyYXBw
ZXJDRkFsbG9jYXRvcjo6YWxsb2NhdG9yKTogQWRkZWQuIFJldHVybnMgdGhlIGFsbG9jYXRvci4K
KyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6cmV0YWluKTogQWRk
ZWQuIENhbGxiYWNrIGZvciBhbGxvY2F0b3IuCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdXcmFw
cGVyQ0ZBbGxvY2F0b3I6OnJlbGVhc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmlu
Z1dyYXBwZXJDRkFsbG9jYXRvcjo6Y29weURlc2NyaXB0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OmFsbG9jYXRlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OnJlYWxsb2NhdGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6ZGVhbGxvY2F0
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nV3JhcHBlckNGQWxsb2NhdG9yOjpw
cmVmZXJyZWRTaXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdXcmFwcGVyQ0ZB
bGxvY2F0b3I6OmNyZWF0ZSk6IEFkZGVkLiBDcmVhdGVzIHRoZSBhbGxvY2F0b3IsIGJ1dAorICAg
ICAgICByZXR1cm5zIDAgaWYgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIGVuYWJsZWQuCisgICAgICAg
IChXZWJDb3JlOjpTdHJpbmdJbXBsOjpjcmVhdGVDRlN0cmluZyk6IFVzZSBTdHJpbmdXcmFwcGVy
Q0ZBbGxvY2F0b3IgaWYgcG9zc2libGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L21hYy9T
dHJpbmdJbXBsTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6b3BlcmF0b3Ig
TlNTdHJpbmcgKik6IFVzZSBDRlN0cmluZyBhbmQgdG9sbC1mcmVlIGJyaWRnaW5nLAorICAgICAg
ICByYXRoZXIgdGhhbiB1c2luZyBOU1N0cmluZyBkaXJlY3RseS4gVGhpcyBsZXRzIE5TU3RyaW5n
IGJlbmVmaXQgZnJvbSB0aGUgYWJvdmUuCisKIDIwMDktMDEtMzAgIFNpbW9uIEZyYXNlciAgPHNp
bW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAJKHJldmlzaW9u
IDQwNDEzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACi0vKioKLSAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE0
ICsyNCwxNDMgQEAKICNpZiBQTEFURk9STShDRikgfHwgKFBMQVRGT1JNKFFUKSAmJiBQTEFURk9S
TShEQVJXSU4pKQogCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4K
KyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikKKyNpbmNsdWRlIDxvYmpjL29iamMtYXV0by5oPgorI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIFN0cmluZ1dyYXBwZXJDRkFs
bG9jYXRvciB7CisKKyAgICBzdGF0aWMgQ0ZBbGxvY2F0b3JSZWYgY3JlYXRlKCk7CisKKyAgICBz
dGF0aWMgU3RyaW5nSW1wbCogY3VycmVudFN0cmluZzsKKworICAgIHN0YXRpYyBDRkFsbG9jYXRv
clJlZiBhbGxvY2F0b3IoKQorICAgIHsKKyAgICAgICAgc3RhdGljIENGQWxsb2NhdG9yUmVmIGFs
bG9jYXRvciA9IGNyZWF0ZSgpOworICAgICAgICByZXR1cm4gYWxsb2NhdG9yOworICAgIH0KKwor
ICAgIHN0YXRpYyBjb25zdCB2b2lkKiByZXRhaW4oY29uc3Qgdm9pZCogaW5mbykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpbmZvOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UoY29u
c3Qgdm9pZCopCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgY29weURlc2NyaXB0aW9uKGNvbnN0IHZvaWQqKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIENGU1RSKCJXZWJDb3JlOjpTdHJpbmctYmFzZWQgYWxsb2NhdG9y
Iik7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKENGSW5kZXggc2l6ZSwgQ0ZP
cHRpb25GbGFncywgdm9pZCopCisgICAgeworICAgICAgICBTdHJpbmdJbXBsKiB1bmRlcmx5aW5n
U3RyaW5nID0gaXNNYWluVGhyZWFkKCkgPyBjdXJyZW50U3RyaW5nIDogMDsKKyAgICAgICAgc2l6
ZV90IGFsbG9jYXRpb25TaXplID0gc2l6ZW9mKFN0cmluZ0ltcGwqKSArIHNpemU7CisgICAgICAg
IHZvaWQqIGJsb2NrOworICAgICAgICBpZiAoIXVuZGVybHlpbmdTdHJpbmcpCisgICAgICAgICAg
ICBibG9jayA9IG1hbGxvYyhhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgY3VycmVudFN0cmluZyA9IDA7CisgICAgICAgICAgICB1bmRlcmx5aW5nU3RyaW5nLT5y
ZWYoKTsgLy8gQmFsYW5jZWQgYnkgY2FsbCB0byBkZXJlZiBpbiBkZWFsbG9jYXRlIGJlbG93Lgor
ICAgICAgICAgICAgYmxvY2sgPSBmYXN0TWFsbG9jKGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAg
fQorICAgICAgICBTdHJpbmdJbXBsKiogaGVhZGVyID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCoq
PihibG9jayk7CisgICAgICAgICpoZWFkZXIgPSB1bmRlcmx5aW5nU3RyaW5nOworICAgICAgICBy
ZXR1cm4gaGVhZGVyICsgMTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2
b2lkKiBwb2ludGVyLCBDRkluZGV4IG5ld1NpemUsIENGT3B0aW9uRmxhZ3MsIHZvaWQqKQorICAg
IHsKKyAgICAgICAgc2l6ZV90IG5ld0FsbG9jYXRpb25TaXplID0gc2l6ZW9mKFN0cmluZ0ltcGwq
KSArIG5ld1NpemU7CisgICAgICAgIFN0cmluZ0ltcGwqKiBoZWFkZXIgPSBzdGF0aWNfY2FzdDxT
dHJpbmdJbXBsKio+KHBvaW50ZXIpIC0gMTsKKyAgICAgICAgQVNTRVJUKCEqaGVhZGVyKTsKKyAg
ICAgICAgaGVhZGVyID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCoqPihyZWFsbG9jKGhlYWRlciwg
bmV3QWxsb2NhdGlvblNpemUpKTsKKyAgICAgICAgcmV0dXJuIGhlYWRlciArIDE7CisgICAgfQor
CisgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZU9uTWFpblRocmVhZCh2b2lkKiBoZWFkZXJQb2lu
dGVyKQorICAgIHsKKyAgICAgICAgU3RyaW5nSW1wbCoqIGhlYWRlciA9IHN0YXRpY19jYXN0PFN0
cmluZ0ltcGwqKj4oaGVhZGVyUG9pbnRlcik7CisgICAgICAgIFN0cmluZ0ltcGwqIHVuZGVybHlp
bmdTdHJpbmcgPSAqaGVhZGVyOworICAgICAgICBBU1NFUlQodW5kZXJseWluZ1N0cmluZyk7Cisg
ICAgICAgIHVuZGVybHlpbmdTdHJpbmctPmRlcmVmKCk7IC8vIEJhbGFuY2VkIGJ5IGNhbGwgdG8g
cmVmIGluIGFsbG9jYXRlIGFib3ZlLgorICAgICAgICBmYXN0RnJlZShoZWFkZXIpOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogcG9pbnRlciwgdm9pZCopCisgICAg
eworICAgICAgICBTdHJpbmdJbXBsKiogaGVhZGVyID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCoq
Pihwb2ludGVyKSAtIDE7CisgICAgICAgIFN0cmluZ0ltcGwqIHVuZGVybHlpbmdTdHJpbmcgPSAq
aGVhZGVyOworICAgICAgICBpZiAoIXVuZGVybHlpbmdTdHJpbmcpCisgICAgICAgICAgICBmcmVl
KGhlYWRlcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKCFpc01haW5UaHJlYWQo
KSkKKyAgICAgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKGRlYWxsb2NhdGVPbk1haW5UaHJl
YWQsIGhlYWRlcik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB1bmRlcmx5
aW5nU3RyaW5nLT5kZXJlZigpOyAvLyBCYWxhbmNlZCBieSBjYWxsIHRvIHJlZiBpbiBhbGxvY2F0
ZSBhYm92ZS4KKyAgICAgICAgICAgICAgICBmYXN0RnJlZShoZWFkZXIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgQ0ZJbmRleCBwcmVmZXJyZWRTaXplKENGSW5kZXgg
c2l6ZSwgQ0ZPcHRpb25GbGFncywgdm9pZCopCisgICAgeworICAgICAgICAvLyBGSVhNRTogSWYg
RmFzdE1hbGxvYyBwcm92aWRlZCBhICJnb29kIHNpemUiIGNhbGxiYWNrLCB3ZSdkIHdhbnQgdG8g
dXNlIGl0IGhlcmUuCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIG9wdGltaXphdGlvbiB3b3Vs
ZCBoZWxwIHBlcmZvcm1hbmNlIGZvciBzdHJpbmdzIGNyZWF0ZWQgd2l0aCB0aGUKKyAgICAgICAg
Ly8gYWxsb2NhdG9yIHRoYXQgYXJlIG11dGFibGUsIGFuZCB0aG9zZSB0eXBpY2FsbHkgYXJlIG9u
bHkgY3JlYXRlZCBieSBjYWxsZXJzIHdobworICAgICAgICAvLyBtYWtlIGEgbmV3IHN0cmluZyB1
c2luZyB0aGUgb2xkIHN0cmluZydzIGFsbG9jYXRvciwgc3VjaCBhcyBzb21lIG9mIHRoZSBjYWxs
CisgICAgICAgIC8vIHNpdGVzIGluIENGVVJMLgorICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9
CisKKyAgICBzdGF0aWMgQ0ZBbGxvY2F0b3JSZWYgY3JlYXRlKCkKKyAgICB7CisjaWYgUExBVEZP
Uk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikKKyAgICAgICAgLy8gU2luY2Ug
Z2FyYmFnZSBjb2xsZWN0aW9uIGlzbid0IGNvbXBhdGlibGUgd2l0aCBjdXN0b20gYWxsb2NhdG9y
cywgZG9uJ3QgdXNlIHRoaXMgYXQgYWxsIHdoZW4gZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIGFjdGl2
ZS4KKyAgICAgICAgaWYgKG9iamNfY29sbGVjdGluZ0VuYWJsZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworI2VuZGlmCisgICAgICAgIENGQWxsb2NhdG9yQ29udGV4dCBjb250ZXh0ID0geyAw
LCAwLCByZXRhaW4sIHJlbGVhc2UsIGNvcHlEZXNjcmlwdGlvbiwgYWxsb2NhdGUsIHJlYWxsb2Nh
dGUsIGRlYWxsb2NhdGUsIHByZWZlcnJlZFNpemUgfTsKKyAgICAgICAgcmV0dXJuIENGQWxsb2Nh
dG9yQ3JlYXRlKDAsICZjb250ZXh0KTsKKyAgICB9CisKK30KKwogQ0ZTdHJpbmdSZWYgU3RyaW5n
SW1wbDo6Y3JlYXRlQ0ZTdHJpbmcoKQogewotICAgIHJldHVybiBDRlN0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKE5VTEwsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KG1fZGF0YSks
IG1fbGVuZ3RoKTsKKyAgICBDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IgPSAobV9sZW5ndGggJiYg
aXNNYWluVGhyZWFkKCkpID8gU3RyaW5nV3JhcHBlckNGQWxsb2NhdG9yOjphbGxvY2F0b3IoKSA6
IDA7CisgICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgIHJldHVybiBDRlN0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KG1fZGF0YSks
IG1fbGVuZ3RoKTsKKworICAgIC8vIFB1dCBwb2ludGVyIHRvIHRoZSBTdHJpbmdJbXBsIGluIGEg
Z2xvYmFsIHNvIHRoZSBhbGxvY2F0b3IgY2FuIHN0b3JlIGl0IHdpdGggdGhlIENGU3RyaW5nLgor
ICAgIEFTU0VSVCghU3RyaW5nV3JhcHBlckNGQWxsb2NhdG9yOjpjdXJyZW50U3RyaW5nKTsKKyAg
ICBTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OmN1cnJlbnRTdHJpbmcgPSB0aGlzOworCisgICAg
Q0ZTdHJpbmdSZWYgc3RyaW5nID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVyc05vQ29weShh
bGxvY2F0b3IsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KG1fZGF0YSksIG1fbGVu
Z3RoLCBrQ0ZBbGxvY2F0b3JOdWxsKTsKKworICAgIC8vIFRoZSBhbGxvY2F0b3IgY2xlYXJlZCB0
aGUgZ2xvYmFsIHdoZW4gaXQgcmVhZCBpdCwgYnV0IGFsc28gY2xlYXIgaXQgaGVyZSBqdXN0IGlu
IGNhc2UuCisgICAgQVNTRVJUKCFTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OmN1cnJlbnRTdHJp
bmcpOworICAgIFN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6Y3VycmVudFN0cmluZyA9IDA7CisK
KyAgICByZXR1cm4gc3RyaW5nOwogfQogCisvLyBPbiBTdHJpbmdJbXBsIGNyZWF0aW9uIHdlIGNv
dWxkIGNoZWNrIGlmIHRoZSBhbGxvY2F0b3IgaXMgdGhlIFN0cmluZ1dyYXBwZXJDRkFsbG9jYXRv
ci4KKy8vIElmIGl0IGlzLCB0aGVuIHdlIGNvdWxkIGZpbmQgdGhlIG9yaWdpbmFsIFN0cmluZ0lt
cGwgYW5kIGp1c3QgcmV0dXJuIHRoYXQuIEJ1dCB0bworLy8gZG8gdGhhdCB3ZSdkIGhhdmUgdG8g
Y29tcHV0ZSB0aGUgb2Zmc2V0IGZyb20gQ0ZTdHJpbmdSZWYgdG8gdGhlIGFsbG9jYXRlZCBibG9j
azsKKy8vIHRoZSBDRlN0cmluZ1JlZiBpcyAqbm90KiBhdCB0aGUgc3RhcnQgb2YgYW4gYWxsb2Nh
dGVkIGJsb2NrLiBUZXN0aW5nIHNob3dzIDEwMDB4CisvLyBtb3JlIGNhbGxzIHRvIGNyZWF0ZUNG
U3RyaW5nIHRoYW4gY2FsbHMgdG8gdGhlIGNyZWF0ZSBmdW5jdGlvbnMgd2l0aCB0aGUgYXBwcm9w
cmlhdGUKKy8vIGFsbG9jYXRvciwgc28gaXQncyBwcm9iYWJseSBub3QgdXJnZW50IG9wdGltaXpl
IHRoYXQgY2FzZS4KKwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oQ0YpIHx8IChQTEFURk9STShR
VCkgJiYgUExBVEZPUk0oREFSV0lOKSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMv
U3RyaW5nSW1wbE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFj
L1N0cmluZ0ltcGxNYWMubW0JKHJldmlzaW9uIDQwNDEzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L21hYy9TdHJpbmdJbXBsTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAot
LyoqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSwxMyArMjEsMTMgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCiAKLSNpbmNsdWRlIDxGb3VuZGF0aW9uL0ZvdW5k
YXRpb24uaD4KKyNpbmNsdWRlICJGb3VuZGF0aW9uRXh0cmFzLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogU3RyaW5nSW1wbDo6b3BlcmF0b3IgTlNTdHJpbmcgKigpCiB7Ci0gICAgcmV0dXJu
IFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczptX2RhdGEgbGVuZ3RoOm1fbGVuZ3RoXTsK
KyAgICByZXR1cm4gSGFyZEF1dG9yZWxlYXNlKGNyZWF0ZUNGU3RyaW5nKCkpOwogfQogCiB9Cg==
</data>
<flag name="review"
          id="13094"
          type_id="1"
          status="+"
          setter="mrowe"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27206</attachid>
            <date>2009-01-30 18:18:44 -0800</date>
            <delta_ts>2009-01-30 18:26:59 -0800</delta_ts>
            <desc>final patch with changes requested by Mark</desc>
            <filename>StringCFPatch.txt</filename>
            <type>text/plain</type>
            <size>8127</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDQzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMDktMDEtMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAy
MzYyMjogY3JlYXRlIENGU3RyaW5nIGFuZCBOU1N0cmluZyBvYmplY3RzIGZyb20gV2ViQ29yZTo6
U3RyaW5nIHdpdGhvdXQgY29weWluZyB0aGUgY2hhcmFjdGVycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2MjIKKworICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvY2YvU3RyaW5nSW1wbENGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1dyYXBw
ZXJDRkFsbG9jYXRvcjo6YWxsb2NhdG9yKTogQWRkZWQuIFJldHVybnMgdGhlIGFsbG9jYXRvci4K
KyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6cmV0YWluKTogQWRk
ZWQuIENhbGxiYWNrIGZvciBhbGxvY2F0b3IuCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdXcmFw
cGVyQ0ZBbGxvY2F0b3I6OnJlbGVhc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmlu
Z1dyYXBwZXJDRkFsbG9jYXRvcjo6Y29weURlc2NyaXB0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OmFsbG9jYXRlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OnJlYWxsb2NhdGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6ZGVhbGxvY2F0
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nV3JhcHBlckNGQWxsb2NhdG9yOjpw
cmVmZXJyZWRTaXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdXcmFwcGVyQ0ZB
bGxvY2F0b3I6OmNyZWF0ZSk6IEFkZGVkLiBDcmVhdGVzIHRoZSBhbGxvY2F0b3IsIGJ1dAorICAg
ICAgICByZXR1cm5zIDAgaWYgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIGVuYWJsZWQuCisgICAgICAg
IChXZWJDb3JlOjpTdHJpbmdJbXBsOjpjcmVhdGVDRlN0cmluZyk6IFVzZSBTdHJpbmdXcmFwcGVy
Q0ZBbGxvY2F0b3IgaWYgcG9zc2libGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L21hYy9T
dHJpbmdJbXBsTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6b3BlcmF0b3Ig
TlNTdHJpbmcgKik6IFVzZSBDRlN0cmluZyBhbmQgdG9sbC1mcmVlIGJyaWRnaW5nLAorICAgICAg
ICByYXRoZXIgdGhhbiB1c2luZyBOU1N0cmluZyBkaXJlY3RseS4gVGhpcyBsZXRzIE5TU3RyaW5n
IGJlbmVmaXQgZnJvbSB0aGUgYWJvdmUuCisKIDIwMDktMDEtMzAgIFNpbW9uIEZyYXNlciAgPHNp
bW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAJKHJldmlzaW9u
IDQwNDEzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACi0vKioKLSAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE0
ICsyNCwxNDEgQEAKICNpZiBQTEFURk9STShDRikgfHwgKFBMQVRGT1JNKFFUKSAmJiBQTEFURk9S
TShEQVJXSU4pKQogCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4K
KyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikKKyNpbmNsdWRlIDxvYmpjL29iamMtYXV0by5oPgorI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIFN0cmluZ1dyYXBwZXJDRkFs
bG9jYXRvciB7CisKKyAgICBzdGF0aWMgQ0ZBbGxvY2F0b3JSZWYgY3JlYXRlKCk7CisKKyAgICBz
dGF0aWMgU3RyaW5nSW1wbCogY3VycmVudFN0cmluZzsKKworICAgIHN0YXRpYyBDRkFsbG9jYXRv
clJlZiBhbGxvY2F0b3IoKQorICAgIHsKKyAgICAgICAgc3RhdGljIENGQWxsb2NhdG9yUmVmIGFs
bG9jYXRvciA9IGNyZWF0ZSgpOworICAgICAgICByZXR1cm4gYWxsb2NhdG9yOworICAgIH0KKwor
ICAgIHN0YXRpYyBjb25zdCB2b2lkKiByZXRhaW4oY29uc3Qgdm9pZCogaW5mbykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpbmZvOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UoY29u
c3Qgdm9pZCopCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgY29weURlc2NyaXB0aW9uKGNvbnN0IHZvaWQqKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIENGU1RSKCJXZWJDb3JlOjpTdHJpbmctYmFzZWQgYWxsb2NhdG9y
Iik7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKENGSW5kZXggc2l6ZSwgQ0ZP
cHRpb25GbGFncywgdm9pZCopCisgICAgeworICAgICAgICBTdHJpbmdJbXBsKiB1bmRlcmx5aW5n
U3RyaW5nID0gMDsKKyAgICAgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgICAgICB1
bmRlcmx5aW5nU3RyaW5nID0gY3VycmVudFN0cmluZzsKKyAgICAgICAgICAgIGlmICh1bmRlcmx5
aW5nU3RyaW5nKSB7CisgICAgICAgICAgICAgICAgY3VycmVudFN0cmluZyA9IDA7CisgICAgICAg
ICAgICAgICAgdW5kZXJseWluZ1N0cmluZy0+cmVmKCk7IC8vIEJhbGFuY2VkIGJ5IGNhbGwgdG8g
ZGVyZWYgaW4gZGVhbGxvY2F0ZSBiZWxvdy4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBTdHJpbmdJbXBsKiogaGVhZGVyID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCoqPihmYXN0
TWFsbG9jKHNpemVvZihTdHJpbmdJbXBsKikgKyBzaXplKSk7CisgICAgICAgICpoZWFkZXIgPSB1
bmRlcmx5aW5nU3RyaW5nOworICAgICAgICByZXR1cm4gaGVhZGVyICsgMTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBwb2ludGVyLCBDRkluZGV4IG5ld1NpemUs
IENGT3B0aW9uRmxhZ3MsIHZvaWQqKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG5ld0FsbG9jYXRp
b25TaXplID0gc2l6ZW9mKFN0cmluZ0ltcGwqKSArIG5ld1NpemU7CisgICAgICAgIFN0cmluZ0lt
cGwqKiBoZWFkZXIgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKio+KHBvaW50ZXIpIC0gMTsKKyAg
ICAgICAgQVNTRVJUKCEqaGVhZGVyKTsKKyAgICAgICAgaGVhZGVyID0gc3RhdGljX2Nhc3Q8U3Ry
aW5nSW1wbCoqPihmYXN0UmVhbGxvYyhoZWFkZXIsIG5ld0FsbG9jYXRpb25TaXplKSk7CisgICAg
ICAgIHJldHVybiBoZWFkZXIgKyAxOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRlYWxsb2Nh
dGVPbk1haW5UaHJlYWQodm9pZCogaGVhZGVyUG9pbnRlcikKKyAgICB7CisgICAgICAgIFN0cmlu
Z0ltcGwqKiBoZWFkZXIgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKio+KGhlYWRlclBvaW50ZXIp
OworICAgICAgICBTdHJpbmdJbXBsKiB1bmRlcmx5aW5nU3RyaW5nID0gKmhlYWRlcjsKKyAgICAg
ICAgQVNTRVJUKHVuZGVybHlpbmdTdHJpbmcpOworICAgICAgICB1bmRlcmx5aW5nU3RyaW5nLT5k
ZXJlZigpOyAvLyBCYWxhbmNlZCBieSBjYWxsIHRvIHJlZiBpbiBhbGxvY2F0ZSBhYm92ZS4KKyAg
ICAgICAgZmFzdEZyZWUoaGVhZGVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZWFsbG9j
YXRlKHZvaWQqIHBvaW50ZXIsIHZvaWQqKQorICAgIHsKKyAgICAgICAgU3RyaW5nSW1wbCoqIGhl
YWRlciA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqKj4ocG9pbnRlcikgLSAxOworICAgICAgICBT
dHJpbmdJbXBsKiB1bmRlcmx5aW5nU3RyaW5nID0gKmhlYWRlcjsKKyAgICAgICAgaWYgKCF1bmRl
cmx5aW5nU3RyaW5nKQorICAgICAgICAgICAgZmFzdEZyZWUoaGVhZGVyKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBpZiAoIWlzTWFpblRocmVhZCgpKQorICAgICAgICAgICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoZGVhbGxvY2F0ZU9uTWFpblRocmVhZCwgaGVhZGVyKTsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHVuZGVybHlpbmdTdHJpbmctPmRlcmVmKCk7IC8v
IEJhbGFuY2VkIGJ5IGNhbGwgdG8gcmVmIGluIGFsbG9jYXRlIGFib3ZlLgorICAgICAgICAgICAg
ICAgIGZhc3RGcmVlKGhlYWRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBDRkluZGV4IHByZWZlcnJlZFNpemUoQ0ZJbmRleCBzaXplLCBDRk9wdGlvbkZsYWdzLCB2
b2lkKikKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJZiBGYXN0TWFsbG9jIHByb3ZpZGVkIGEg
Imdvb2Qgc2l6ZSIgY2FsbGJhY2ssIHdlJ2Qgd2FudCB0byB1c2UgaXQgaGVyZS4KKyAgICAgICAg
Ly8gTm90ZSB0aGF0IHRoaXMgb3B0aW1pemF0aW9uIHdvdWxkIGhlbHAgcGVyZm9ybWFuY2UgZm9y
IHN0cmluZ3MgY3JlYXRlZCB3aXRoIHRoZQorICAgICAgICAvLyBhbGxvY2F0b3IgdGhhdCBhcmUg
bXV0YWJsZSwgYW5kIHRob3NlIHR5cGljYWxseSBhcmUgb25seSBjcmVhdGVkIGJ5IGNhbGxlcnMg
d2hvCisgICAgICAgIC8vIG1ha2UgYSBuZXcgc3RyaW5nIHVzaW5nIHRoZSBvbGQgc3RyaW5nJ3Mg
YWxsb2NhdG9yLCBzdWNoIGFzIHNvbWUgb2YgdGhlIGNhbGwKKyAgICAgICAgLy8gc2l0ZXMgaW4g
Q0ZVUkwuCisgICAgICAgIHJldHVybiBzaXplOworICAgIH0KKworICAgIHN0YXRpYyBDRkFsbG9j
YXRvclJlZiBjcmVhdGUoKQorICAgIHsKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKQorICAgICAgICAvLyBTaW5jZSBnYXJiYWdlIGNvbGxlY3Rpb24gaXNu
J3QgY29tcGF0aWJsZSB3aXRoIGN1c3RvbSBhbGxvY2F0b3JzLCBkb24ndCB1c2UgdGhpcyBhdCBh
bGwgd2hlbiBnYXJiYWdlIGNvbGxlY3Rpb24gaXMgYWN0aXZlLgorICAgICAgICBpZiAob2JqY19j
b2xsZWN0aW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICAg
ICAgQ0ZBbGxvY2F0b3JDb250ZXh0IGNvbnRleHQgPSB7IDAsIDAsIHJldGFpbiwgcmVsZWFzZSwg
Y29weURlc2NyaXB0aW9uLCBhbGxvY2F0ZSwgcmVhbGxvY2F0ZSwgZGVhbGxvY2F0ZSwgcHJlZmVy
cmVkU2l6ZSB9OworICAgICAgICByZXR1cm4gQ0ZBbGxvY2F0b3JDcmVhdGUoMCwgJmNvbnRleHQp
OworICAgIH0KKworfQorCiBDRlN0cmluZ1JlZiBTdHJpbmdJbXBsOjpjcmVhdGVDRlN0cmluZygp
CiB7Ci0gICAgcmV0dXJuIENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoTlVMTCwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4obV9kYXRhKSwgbV9sZW5ndGgpOworICAgIENGQWxs
b2NhdG9yUmVmIGFsbG9jYXRvciA9IChtX2xlbmd0aCAmJiBpc01haW5UaHJlYWQoKSkgPyBTdHJp
bmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OmFsbG9jYXRvcigpIDogMDsKKyAgICBpZiAoIWFsbG9jYXRv
cikKKyAgICAgICAgcmV0dXJuIENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4obV9kYXRhKSwgbV9sZW5ndGgpOworCisgICAgLy8g
UHV0IHBvaW50ZXIgdG8gdGhlIFN0cmluZ0ltcGwgaW4gYSBnbG9iYWwgc28gdGhlIGFsbG9jYXRv
ciBjYW4gc3RvcmUgaXQgd2l0aCB0aGUgQ0ZTdHJpbmcuCisgICAgQVNTRVJUKCFTdHJpbmdXcmFw
cGVyQ0ZBbGxvY2F0b3I6OmN1cnJlbnRTdHJpbmcpOworICAgIFN0cmluZ1dyYXBwZXJDRkFsbG9j
YXRvcjo6Y3VycmVudFN0cmluZyA9IHRoaXM7CisKKyAgICBDRlN0cmluZ1JlZiBzdHJpbmcgPSBD
RlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzTm9Db3B5KGFsbG9jYXRvciwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBVbmlDaGFyKj4obV9kYXRhKSwgbV9sZW5ndGgsIGtDRkFsbG9jYXRvck51bGwp
OworCisgICAgLy8gVGhlIGFsbG9jYXRvciBjbGVhcmVkIHRoZSBnbG9iYWwgd2hlbiBpdCByZWFk
IGl0LCBidXQgYWxzbyBjbGVhciBpdCBoZXJlIGp1c3QgaW4gY2FzZS4KKyAgICBBU1NFUlQoIVN0
cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6Y3VycmVudFN0cmluZyk7CisgICAgU3RyaW5nV3JhcHBl
ckNGQWxsb2NhdG9yOjpjdXJyZW50U3RyaW5nID0gMDsKKworICAgIHJldHVybiBzdHJpbmc7CiB9
CiAKKy8vIE9uIFN0cmluZ0ltcGwgY3JlYXRpb24gd2UgY291bGQgY2hlY2sgaWYgdGhlIGFsbG9j
YXRvciBpcyB0aGUgU3RyaW5nV3JhcHBlckNGQWxsb2NhdG9yLgorLy8gSWYgaXQgaXMsIHRoZW4g
d2UgY291bGQgZmluZCB0aGUgb3JpZ2luYWwgU3RyaW5nSW1wbCBhbmQganVzdCByZXR1cm4gdGhh
dC4gQnV0IHRvCisvLyBkbyB0aGF0IHdlJ2QgaGF2ZSB0byBjb21wdXRlIHRoZSBvZmZzZXQgZnJv
bSBDRlN0cmluZ1JlZiB0byB0aGUgYWxsb2NhdGVkIGJsb2NrOworLy8gdGhlIENGU3RyaW5nUmVm
IGlzICpub3QqIGF0IHRoZSBzdGFydCBvZiBhbiBhbGxvY2F0ZWQgYmxvY2suIFRlc3Rpbmcgc2hv
d3MgMTAwMHgKKy8vIG1vcmUgY2FsbHMgdG8gY3JlYXRlQ0ZTdHJpbmcgdGhhbiBjYWxscyB0byB0
aGUgY3JlYXRlIGZ1bmN0aW9ucyB3aXRoIHRoZSBhcHByb3ByaWF0ZQorLy8gYWxsb2NhdG9yLCBz
byBpdCdzIHByb2JhYmx5IG5vdCB1cmdlbnQgb3B0aW1pemUgdGhhdCBjYXNlLgorCiB9CiAKICNl
bmRpZiAvLyBQTEFURk9STShDRikgfHwgKFBMQVRGT1JNKFFUKSAmJiBQTEFURk9STShEQVJXSU4p
KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9TdHJpbmdJbXBsTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvU3RyaW5nSW1wbE1hYy5tbQkocmV2
aXNpb24gNDA0MTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL1N0cmluZ0ltcGxNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACi0vKioKLSAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTIxLDEzICsyMSwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0cmluZ0lt
cGwuaCIKIAotI2luY2x1ZGUgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgIkZv
dW5kYXRpb25FeHRyYXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTdHJpbmdJbXBsOjpv
cGVyYXRvciBOU1N0cmluZyAqKCkKIHsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhD
aGFyYWN0ZXJzOm1fZGF0YSBsZW5ndGg6bV9sZW5ndGhdOworICAgIHJldHVybiBIYXJkQXV0b3Jl
bGVhc2UoY3JlYXRlQ0ZTdHJpbmcoKSk7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27208</attachid>
            <date>2009-01-30 18:26:59 -0800</date>
            <delta_ts>2009-01-30 18:26:59 -0800</delta_ts>
            <desc>more final</desc>
            <filename>StringCFPatch.txt</filename>
            <type>text/plain</type>
            <size>8097</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDQzNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMDktMDEtMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgUm93ZS4KKworICAgICAgICBCdWcgMjM2MjI6
IGNyZWF0ZSBDRlN0cmluZyBhbmQgTlNTdHJpbmcgb2JqZWN0cyBmcm9tIFdlYkNvcmU6OlN0cmlu
ZyB3aXRob3V0IGNvcHlpbmcgdGhlIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjIyCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L2NmL1N0cmluZ0ltcGxDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdXcmFwcGVyQ0ZB
bGxvY2F0b3I6OmFsbG9jYXRvcik6IEFkZGVkLiBSZXR1cm5zIHRoZSBhbGxvY2F0b3IuCisgICAg
ICAgIChXZWJDb3JlOjpTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OnJldGFpbik6IEFkZGVkLiBD
YWxsYmFjayBmb3IgYWxsb2NhdG9yLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nV3JhcHBlckNG
QWxsb2NhdG9yOjpyZWxlYXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdXcmFw
cGVyQ0ZBbGxvY2F0b3I6OmNvcHlEZXNjcmlwdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6U3RyaW5nV3JhcHBlckNGQWxsb2NhdG9yOjphbGxvY2F0ZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6U3RyaW5nV3JhcHBlckNGQWxsb2NhdG9yOjpyZWFsbG9jYXRlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OmRlYWxsb2NhdGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6cHJlZmVy
cmVkU2l6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nV3JhcHBlckNGQWxsb2Nh
dG9yOjpjcmVhdGUpOiBBZGRlZC4gQ3JlYXRlcyB0aGUgYWxsb2NhdG9yLCBidXQKKyAgICAgICAg
cmV0dXJucyAwIGlmIGdhcmJhZ2UgY29sbGVjdGlvbiBpcyBlbmFibGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3RyaW5nSW1wbDo6Y3JlYXRlQ0ZTdHJpbmcpOiBVc2UgU3RyaW5nV3JhcHBlckNGQWxs
b2NhdG9yIGlmIHBvc3NpYmxlLgorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9tYWMvU3RyaW5n
SW1wbE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0ltcGw6Om9wZXJhdG9yIE5TU3Ry
aW5nICopOiBVc2UgQ0ZTdHJpbmcgYW5kIHRvbGwtZnJlZSBicmlkZ2luZywKKyAgICAgICAgcmF0
aGVyIHRoYW4gdXNpbmcgTlNTdHJpbmcgZGlyZWN0bHkuIFRoaXMgbGV0cyBOU1N0cmluZyBiZW5l
Zml0IGZyb20gdGhlIGFib3ZlLgorCiAyMDA5LTAxLTMwICBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlciAgPHplY2tlQHNlbGZpc2gub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhh
dXNtYW5uLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0ltcGxDRi5jcHAJ
KHJldmlzaW9uIDQwNDM2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2NmL1N0cmluZ0ltcGxD
Ri5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACi0vKioKLSAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTI0LDE0ICsyNCwxMzkgQEAKICNpZiBQTEFURk9STShDRikgfHwgKFBMQVRGT1JNKFFUKSAm
JiBQTEFURk9STShEQVJXSU4pKQogCiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5k
YXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgUExBVEZPUk0oTUFD
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikKKyNpbmNsdWRlIDxvYmpjL29iamMtYXV0
by5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIFN0cmluZ1dy
YXBwZXJDRkFsbG9jYXRvciB7CisKKyAgICBzdGF0aWMgU3RyaW5nSW1wbCogY3VycmVudFN0cmlu
ZzsKKworICAgIHN0YXRpYyBjb25zdCB2b2lkKiByZXRhaW4oY29uc3Qgdm9pZCogaW5mbykKKyAg
ICB7CisgICAgICAgIHJldHVybiBpbmZvOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlbGVh
c2UoY29uc3Qgdm9pZCopCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgY29weURlc2NyaXB0aW9uKGNvbnN0IHZvaWQq
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIENGU1RSKCJXZWJDb3JlOjpTdHJpbmctYmFzZWQgYWxs
b2NhdG9yIik7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKENGSW5kZXggc2l6
ZSwgQ0ZPcHRpb25GbGFncywgdm9pZCopCisgICAgeworICAgICAgICBTdHJpbmdJbXBsKiB1bmRl
cmx5aW5nU3RyaW5nID0gMDsKKyAgICAgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAgICAg
ICAgICB1bmRlcmx5aW5nU3RyaW5nID0gY3VycmVudFN0cmluZzsKKyAgICAgICAgICAgIGlmICh1
bmRlcmx5aW5nU3RyaW5nKSB7CisgICAgICAgICAgICAgICAgY3VycmVudFN0cmluZyA9IDA7Cisg
ICAgICAgICAgICAgICAgdW5kZXJseWluZ1N0cmluZy0+cmVmKCk7IC8vIEJhbGFuY2VkIGJ5IGNh
bGwgdG8gZGVyZWYgaW4gZGVhbGxvY2F0ZSBiZWxvdy4KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBTdHJpbmdJbXBsKiogaGVhZGVyID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCoq
PihmYXN0TWFsbG9jKHNpemVvZihTdHJpbmdJbXBsKikgKyBzaXplKSk7CisgICAgICAgICpoZWFk
ZXIgPSB1bmRlcmx5aW5nU3RyaW5nOworICAgICAgICByZXR1cm4gaGVhZGVyICsgMTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBwb2ludGVyLCBDRkluZGV4IG5l
d1NpemUsIENGT3B0aW9uRmxhZ3MsIHZvaWQqKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG5ld0Fs
bG9jYXRpb25TaXplID0gc2l6ZW9mKFN0cmluZ0ltcGwqKSArIG5ld1NpemU7CisgICAgICAgIFN0
cmluZ0ltcGwqKiBoZWFkZXIgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKio+KHBvaW50ZXIpIC0g
MTsKKyAgICAgICAgQVNTRVJUKCEqaGVhZGVyKTsKKyAgICAgICAgaGVhZGVyID0gc3RhdGljX2Nh
c3Q8U3RyaW5nSW1wbCoqPihmYXN0UmVhbGxvYyhoZWFkZXIsIG5ld0FsbG9jYXRpb25TaXplKSk7
CisgICAgICAgIHJldHVybiBoZWFkZXIgKyAxOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRl
YWxsb2NhdGVPbk1haW5UaHJlYWQodm9pZCogaGVhZGVyUG9pbnRlcikKKyAgICB7CisgICAgICAg
IFN0cmluZ0ltcGwqKiBoZWFkZXIgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKio+KGhlYWRlclBv
aW50ZXIpOworICAgICAgICBTdHJpbmdJbXBsKiB1bmRlcmx5aW5nU3RyaW5nID0gKmhlYWRlcjsK
KyAgICAgICAgQVNTRVJUKHVuZGVybHlpbmdTdHJpbmcpOworICAgICAgICB1bmRlcmx5aW5nU3Ry
aW5nLT5kZXJlZigpOyAvLyBCYWxhbmNlZCBieSBjYWxsIHRvIHJlZiBpbiBhbGxvY2F0ZSBhYm92
ZS4KKyAgICAgICAgZmFzdEZyZWUoaGVhZGVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBk
ZWFsbG9jYXRlKHZvaWQqIHBvaW50ZXIsIHZvaWQqKQorICAgIHsKKyAgICAgICAgU3RyaW5nSW1w
bCoqIGhlYWRlciA9IHN0YXRpY19jYXN0PFN0cmluZ0ltcGwqKj4ocG9pbnRlcikgLSAxOworICAg
ICAgICBTdHJpbmdJbXBsKiB1bmRlcmx5aW5nU3RyaW5nID0gKmhlYWRlcjsKKyAgICAgICAgaWYg
KCF1bmRlcmx5aW5nU3RyaW5nKQorICAgICAgICAgICAgZmFzdEZyZWUoaGVhZGVyKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoIWlzTWFpblRocmVhZCgpKQorICAgICAgICAgICAg
ICAgIGNhbGxPbk1haW5UaHJlYWQoZGVhbGxvY2F0ZU9uTWFpblRocmVhZCwgaGVhZGVyKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHVuZGVybHlpbmdTdHJpbmctPmRlcmVm
KCk7IC8vIEJhbGFuY2VkIGJ5IGNhbGwgdG8gcmVmIGluIGFsbG9jYXRlIGFib3ZlLgorICAgICAg
ICAgICAgICAgIGZhc3RGcmVlKGhlYWRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBDRkluZGV4IHByZWZlcnJlZFNpemUoQ0ZJbmRleCBzaXplLCBDRk9wdGlvbkZs
YWdzLCB2b2lkKikKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJZiBGYXN0TWFsbG9jIHByb3Zp
ZGVkIGEgImdvb2Qgc2l6ZSIgY2FsbGJhY2ssIHdlJ2Qgd2FudCB0byB1c2UgaXQgaGVyZS4KKyAg
ICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgb3B0aW1pemF0aW9uIHdvdWxkIGhlbHAgcGVyZm9ybWFu
Y2UgZm9yIHN0cmluZ3MgY3JlYXRlZCB3aXRoIHRoZQorICAgICAgICAvLyBhbGxvY2F0b3IgdGhh
dCBhcmUgbXV0YWJsZSwgYW5kIHRob3NlIHR5cGljYWxseSBhcmUgb25seSBjcmVhdGVkIGJ5IGNh
bGxlcnMgd2hvCisgICAgICAgIC8vIG1ha2UgYSBuZXcgc3RyaW5nIHVzaW5nIHRoZSBvbGQgc3Ry
aW5nJ3MgYWxsb2NhdG9yLCBzdWNoIGFzIHNvbWUgb2YgdGhlIGNhbGwKKyAgICAgICAgLy8gc2l0
ZXMgaW4gQ0ZVUkwuCisgICAgICAgIHJldHVybiBzaXplOworICAgIH0KKworICAgIHN0YXRpYyBD
RkFsbG9jYXRvclJlZiBjcmVhdGUoKQorICAgIHsKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX1RJR0VSKQorICAgICAgICAvLyBTaW5jZSBnYXJiYWdlIGNvbGxlY3Rp
b24gaXNuJ3QgY29tcGF0aWJsZSB3aXRoIGN1c3RvbSBhbGxvY2F0b3JzLCBkb24ndCB1c2UgdGhp
cyBhdCBhbGwgd2hlbiBnYXJiYWdlIGNvbGxlY3Rpb24gaXMgYWN0aXZlLgorICAgICAgICBpZiAo
b2JqY19jb2xsZWN0aW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYK
KyAgICAgICAgQ0ZBbGxvY2F0b3JDb250ZXh0IGNvbnRleHQgPSB7IDAsIDAsIHJldGFpbiwgcmVs
ZWFzZSwgY29weURlc2NyaXB0aW9uLCBhbGxvY2F0ZSwgcmVhbGxvY2F0ZSwgZGVhbGxvY2F0ZSwg
cHJlZmVycmVkU2l6ZSB9OworICAgICAgICByZXR1cm4gQ0ZBbGxvY2F0b3JDcmVhdGUoMCwgJmNv
bnRleHQpOworICAgIH0KKworICAgIHN0YXRpYyBDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IoKQor
ICAgIHsKKyAgICAgICAgc3RhdGljIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciA9IGNyZWF0ZSgp
OworICAgICAgICByZXR1cm4gYWxsb2NhdG9yOworICAgIH0KKworfQorCiBDRlN0cmluZ1JlZiBT
dHJpbmdJbXBsOjpjcmVhdGVDRlN0cmluZygpCiB7Ci0gICAgcmV0dXJuIENGU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoTlVMTCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4obV9k
YXRhKSwgbV9sZW5ndGgpOworICAgIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciA9IChtX2xlbmd0
aCAmJiBpc01haW5UaHJlYWQoKSkgPyBTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OmFsbG9jYXRv
cigpIDogMDsKKyAgICBpZiAoIWFsbG9jYXRvcikKKyAgICAgICAgcmV0dXJuIENGU3RyaW5nQ3Jl
YXRlV2l0aENoYXJhY3RlcnMoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4obV9k
YXRhKSwgbV9sZW5ndGgpOworCisgICAgLy8gUHV0IHBvaW50ZXIgdG8gdGhlIFN0cmluZ0ltcGwg
aW4gYSBnbG9iYWwgc28gdGhlIGFsbG9jYXRvciBjYW4gc3RvcmUgaXQgd2l0aCB0aGUgQ0ZTdHJp
bmcuCisgICAgQVNTRVJUKCFTdHJpbmdXcmFwcGVyQ0ZBbGxvY2F0b3I6OmN1cnJlbnRTdHJpbmcp
OworICAgIFN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6Y3VycmVudFN0cmluZyA9IHRoaXM7CisK
KyAgICBDRlN0cmluZ1JlZiBzdHJpbmcgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzTm9D
b3B5KGFsbG9jYXRvciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4obV9kYXRhKSwg
bV9sZW5ndGgsIGtDRkFsbG9jYXRvck51bGwpOworCisgICAgLy8gVGhlIGFsbG9jYXRvciBjbGVh
cmVkIHRoZSBnbG9iYWwgd2hlbiBpdCByZWFkIGl0LCBidXQgYWxzbyBjbGVhciBpdCBoZXJlIGp1
c3QgaW4gY2FzZS4KKyAgICBBU1NFUlQoIVN0cmluZ1dyYXBwZXJDRkFsbG9jYXRvcjo6Y3VycmVu
dFN0cmluZyk7CisgICAgU3RyaW5nV3JhcHBlckNGQWxsb2NhdG9yOjpjdXJyZW50U3RyaW5nID0g
MDsKKworICAgIHJldHVybiBzdHJpbmc7CiB9CiAKKy8vIE9uIFN0cmluZ0ltcGwgY3JlYXRpb24g
d2UgY291bGQgY2hlY2sgaWYgdGhlIGFsbG9jYXRvciBpcyB0aGUgU3RyaW5nV3JhcHBlckNGQWxs
b2NhdG9yLgorLy8gSWYgaXQgaXMsIHRoZW4gd2UgY291bGQgZmluZCB0aGUgb3JpZ2luYWwgU3Ry
aW5nSW1wbCBhbmQganVzdCByZXR1cm4gdGhhdC4gQnV0IHRvCisvLyBkbyB0aGF0IHdlJ2QgaGF2
ZSB0byBjb21wdXRlIHRoZSBvZmZzZXQgZnJvbSBDRlN0cmluZ1JlZiB0byB0aGUgYWxsb2NhdGVk
IGJsb2NrOworLy8gdGhlIENGU3RyaW5nUmVmIGlzICpub3QqIGF0IHRoZSBzdGFydCBvZiBhbiBh
bGxvY2F0ZWQgYmxvY2suIFRlc3Rpbmcgc2hvd3MgMTAwMHgKKy8vIG1vcmUgY2FsbHMgdG8gY3Jl
YXRlQ0ZTdHJpbmcgdGhhbiBjYWxscyB0byB0aGUgY3JlYXRlIGZ1bmN0aW9ucyB3aXRoIHRoZSBh
cHByb3ByaWF0ZQorLy8gYWxsb2NhdG9yLCBzbyBpdCdzIHByb2JhYmx5IG5vdCB1cmdlbnQgb3B0
aW1pemUgdGhhdCBjYXNlLgorCiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShDRikgfHwgKFBMQVRG
T1JNKFFUKSAmJiBQTEFURk9STShEQVJXSU4pKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L21hYy9TdHJpbmdJbXBsTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9tYWMvU3RyaW5nSW1wbE1hYy5tbQkocmV2aXNpb24gNDA0MzYpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvbWFjL1N0cmluZ0ltcGxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACi0vKioKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDEzICsyMSwxMyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKIAotI2luY2x1ZGUgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgorI2luY2x1ZGUgIkZvdW5kYXRpb25FeHRyYXMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBTdHJpbmdJbXBsOjpvcGVyYXRvciBOU1N0cmluZyAqKCkKIHsKLSAgICBy
ZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOm1fZGF0YSBsZW5ndGg6bV9sZW5n
dGhdOworICAgIHJldHVybiBIYXJkQXV0b3JlbGVhc2UoY3JlYXRlQ0ZTdHJpbmcoKSk7CiB9CiAK
IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>