<?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>24664</bug_id>
          
          <creation_ts>2009-03-17 18:54:48 -0700</creation_ts>
          <short_desc>Need to upstream V8Collection.h</short_desc>
          <delta_ts>2009-03-18 13:11:04 -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="David Levin">levin</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>dglazkov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>114158</commentid>
    <comment_count>0</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-03-17 18:54:48 -0700</bug_when>
    <thetext>See summary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114159</commentid>
    <comment_count>1</comment_count>
      <attachid>28715</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-03-17 18:58:26 -0700</bug_when>
    <thetext>Created attachment 28715
Proposed fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114191</commentid>
    <comment_count>2</comment_count>
      <attachid>28715</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-18 09:23:28 -0700</bug_when>
    <thetext>Comment on attachment 28715
Proposed fix.

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index 7c6972d..3890a71 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog
&gt; @@ -2,6 +2,17 @@
&gt;  
&gt;          Reviewed by NOBODY (OOPS!).
&gt;  
&gt; +        &lt;https://bugs.webkit.org/show_bug.cgi?id=24664&gt;
&gt; +        Upstreaming v8 collection.h
&gt; +
&gt; +        No change in behavior, so no test.
&gt; +
&gt; +        * bindings/v8/V8Collection.h: Added.
&gt; +
&gt; +2009-03-17  David Levin  &lt;levin@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt;          &lt;https://bugs.webkit.org/show_bug.cgi?id=24662&gt;
&gt;          Chromium build fixes.
&gt;          
&gt; diff --git a/WebCore/bindings/v8/V8Collection.h b/WebCore/bindings/v8/V8Collection.h
&gt; new file mode 100644
&gt; index 0000000..4b2d672
&gt; --- /dev/null
&gt; +++ b/WebCore/bindings/v8/V8Collection.h
&gt; @@ -0,0 +1,191 @@
&gt; +/*
&gt; + * Copyright (C) 2006, 2007, 2008, 2009 Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions are
&gt; + * met:
&gt; + *
&gt; + *     * Redistributions of source code must retain the above copyright
&gt; + * notice, this list of conditions and the following disclaimer.
&gt; + *     * Redistributions in binary form must reproduce the above
&gt; + * copyright notice, this list of conditions and the following disclaimer
&gt; + * in the documentation and/or other materials provided with the
&gt; + * distribution.
&gt; + *     * Neither the name of Google Inc. nor the names of its
&gt; + * contributors may be used to endorse or promote products derived from
&gt; + * this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
&gt; + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
&gt; + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
&gt; + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
&gt; + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
&gt; + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
&gt; + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
&gt; + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
&gt; + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#ifndef V8Collection_h
&gt; +#define V8Collection_h
&gt; +
&gt; +#include &quot;V8Binding.h&quot;
&gt; +#include &quot;V8Proxy.h&quot;
&gt; +#include &lt;v8.h&gt;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +    static v8::Handle&lt;v8::Value&gt; getV8Object(void* implementation, v8::Local&lt;v8::Value&gt; implementationType)

getXXX is usually applied when the value is returned via a ref argument, i.e. bool getName(Type&amp; returnValue);
In this particular case, you should probably just use toV8(..), which is a convention I stole from JSC bindings.

Oh wait, this is just cleaning up of the old code. If you don&apos;t feel like more scrubbing, add a FIXME for this suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114200</commentid>
    <comment_count>3</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-03-18 10:26:48 -0700</bug_when>
    <thetext>I went through all of the names and came up with this possible renaming:

getV8Object                                   -&gt; toV8Object
getNamedPropertyOfCollection                  -&gt; toNamedPropertyOfCollection
collectionNamedPropertyGetter                 -&gt; toNamedPropertyOfCollection
nodeCollectionNamedPropertyGetter             -&gt; toNamedPropertyOfCollection
getIndexedPropertyOfCollection                -&gt; toIndexedPropertyOfCollection
collectionIndexedPropertyGetter               -&gt; toIndexedPropertyOfCollection
nodeCollectionIndexedPropertyGetter           -&gt; toIndexedPropertyOfCollection
nodeCollectionIndexedPropertyEnumerator       -&gt; toIndexedPropertyArrayOfNode
collectionIndexedPropertyEnumerator           -&gt; toIndexedPropertyArrayOfCollection
collectionStringOrNullIndexedPropertyGetter   -&gt; toStringOrNullOfCollection

setCollectionIndexedGetter                    -&gt; setIndexedGetterForCollection
setCollectionNamedGetter                      -&gt; setNamedGetterForCollection
setCollectionIndexedAndNamedGetters           -&gt; setIndexedAndNamedGettersForCollection
setCollectionStringOrNullIndexedGetter        -&gt; setStringOrNullIndexedGetterForCollection


What do you think?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114203</commentid>
    <comment_count>4</comment_count>
      <attachid>28725</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-03-18 10:54:12 -0700</bug_when>
    <thetext>Created attachment 28725
Proposed fix.

Added fixme as suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114210</commentid>
    <comment_count>5</comment_count>
      <attachid>28725</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-18 11:29:26 -0700</bug_when>
    <thetext>Comment on attachment 28725
Proposed fix.

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114217</commentid>
    <comment_count>6</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-03-18 13:11:04 -0700</bug_when>
    <thetext>Commited as r41812.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28715</attachid>
            <date>2009-03-17 18:58:26 -0700</date>
            <delta_ts>2009-03-18 10:54:12 -0700</delta_ts>
            <desc>Proposed fix.</desc>
            <filename>bug24664.txt</filename>
            <type>text/plain</type>
            <size>11602</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
N2M2OTcyZC4uMzg5MGE3MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwxNyBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjQ2NjQ+CisgICAgICAgIFVwc3RyZWFtaW5nIHY4IGNvbGxlY3Rpb24uaAorCisg
ICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlvciwgc28gbm8gdGVzdC4KKworICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5oOiBBZGRlZC4KKworMjAwOS0wMy0xNyAgRGF2aWQgTGV2
aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKICAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNDY2Mj4KICAgICAgICAgQ2hyb21pdW0gYnVpbGQgZml4ZXMuCiAgICAgICAgIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaCBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhDb2xsZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NGIyZDY3MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhDb2xsZWN0
aW9uLmgKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4Q29sbGVj
dGlvbl9oCisjZGVmaW5lIFY4Q29sbGVjdGlvbl9oCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIK
KyNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSA8djguaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXRWOE9iamVjdCh2b2lk
KiBpbXBsZW1lbnRhdGlvbiwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gaW1wbGVtZW50YXRpb25UeXBl
KQorICAgIHsKKyAgICAgICAgaWYgKCFpbXBsZW1lbnRhdGlvbikKKyAgICAgICAgICAgIHJldHVy
biB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICAgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBw
ZXJUeXBlIHR5cGUgPSBWOENsYXNzSW5kZXg6OkZyb21JbnQoaW1wbGVtZW50YXRpb25UeXBlLT5J
bnQzMlZhbHVlKCkpOworICAgICAgICBpZiAodHlwZSA9PSBWOENsYXNzSW5kZXg6Ok5PREUpCisg
ICAgICAgICAgICByZXR1cm4gVjhQcm94eTo6Tm9kZVRvVjhPYmplY3Qoc3RhdGljX2Nhc3Q8Tm9k
ZSo+KGltcGxlbWVudGF0aW9uKSk7CisgICAgICAgIHJldHVybiBWOFByb3h5OjpUb1Y4T2JqZWN0
KHR5cGUsIGltcGxlbWVudGF0aW9uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldFY4T2JqZWN0KFBhc3NSZWZQdHI8VD4gaW1w
bGVtZW50YXRpb24sIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGltcGxlbWVudGF0aW9uVHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBnZXRWOE9iamVjdChpbXBsZW1lbnRhdGlvbi5nZXQoKSwgaW1w
bGVtZW50YXRpb25UeXBlKTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIG5hbWVkIHByb3BlcnR5
IG9mIGEgY29sbGVjdGlvbi4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBJ
dGVtVHlwZT4gc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXROYW1lZFByb3BlcnR5T2ZD
b2xsZWN0aW9uKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6Ok9iamVj
dD4gb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gaW1wbGVtZW50YXRpb25UeXBlKQorICAgIHsKKyAgICAg
ICAgLy8gRklYTUU6IGFzc2VydCBvYmplY3QgaXMgYSBjb2xsZWN0aW9uIHR5cGUKKyAgICAgICAg
QVNTRVJUKFY4UHJveHk6Ok1heWJlRE9NV3JhcHBlcihvYmplY3QpKTsKKyAgICAgICAgVjhDbGFz
c0luZGV4OjpWOFdyYXBwZXJUeXBlIHdyYXBwZXJUeXBlID0gVjhQcm94eTo6R2V0RE9NV3JhcHBl
clR5cGUob2JqZWN0KTsKKyAgICAgICAgQVNTRVJUKHdyYXBwZXJUeXBlICE9IFY4Q2xhc3NJbmRl
eDo6Tk9ERSk7CisgICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBWOFByb3h5OjpUb05h
dGl2ZU9iamVjdDxDb2xsZWN0aW9uPih3cmFwcGVyVHlwZSwgb2JqZWN0KTsKKyAgICAgICAgU3Ry
aW5nIHByb3BlcnR5TmFtZSA9IHRvV2ViQ29yZVN0cmluZyhuYW1lKTsKKyAgICAgICAgcmV0dXJu
IGdldFY4T2JqZWN0PEl0ZW1UeXBlPihjb2xsZWN0aW9uLT5uYW1lZEl0ZW0ocHJvcGVydHlOYW1l
KSwgaW1wbGVtZW50YXRpb25UeXBlKTsKKyAgICB9CisKKyAgICAvLyBBIHRlbXBsYXRlIG9mIG5h
bWVkIHByb3BlcnR5IGFjY2Vzc29yIG9mIGNvbGxlY3Rpb25zLgorICAgIHRlbXBsYXRlPGNsYXNz
IENvbGxlY3Rpb24sIGNsYXNzIEl0ZW1UeXBlPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGNvbGxlY3Rpb25OYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdl
dE5hbWVkUHJvcGVydHlPZkNvbGxlY3Rpb248Q29sbGVjdGlvbiwgSXRlbVR5cGU+KG5hbWUsIGlu
Zm8uSG9sZGVyKCksIGluZm8uRGF0YSgpKTsKKyAgICB9CisKKyAgICAvLyBBIHRlbXBsYXRlIG9m
IG5hbWVkIHByb3BlcnR5IGFjY2Vzc29yIG9mIEhUTUxTZWxlY3RFbGVtZW50IGFuZCBIVE1MRm9y
bUVsZW1lbnQuCisgICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbj4gc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBub2RlQ29sbGVjdGlvbk5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCisgICAgewor
ICAgICAgICBBU1NFUlQoVjhQcm94eTo6TWF5YmVET01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsK
KyAgICAgICAgQVNTRVJUKFY4UHJveHk6OkdldERPTVdyYXBwZXJUeXBlKGluZm8uSG9sZGVyKCkp
ID09IFY4Q2xhc3NJbmRleDo6Tk9ERSk7CisgICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24g
PSBWOFByb3h5OjpET01XcmFwcGVyVG9Ob2RlPENvbGxlY3Rpb24+KGluZm8uSG9sZGVyKCkpOwor
ICAgICAgICBTdHJpbmcgcHJvcGVydHlOYW1lID0gdG9XZWJDb3JlU3RyaW5nKG5hbWUpOworICAg
ICAgICB2b2lkKiBpbXBsZW1lbnRhdGlvbiA9IGNvbGxlY3Rpb24tPm5hbWVkSXRlbShwcm9wZXJ0
eU5hbWUpOworICAgICAgICByZXR1cm4gZ2V0VjhPYmplY3QoaW1wbGVtZW50YXRpb24sIGluZm8u
RGF0YSgpKTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBhdCB0aGUgaW5k
ZXggb2YgYSBjb2xsZWN0aW9uLgorICAgIHRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24sIGNsYXNz
IEl0ZW1UeXBlPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldEluZGV4ZWRQcm9wZXJ0
eU9mQ29sbGVjdGlvbih1aW50MzJfdCBpbmRleCwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVj
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gaW1wbGVtZW50YXRpb25UeXBlKQorICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IEFzc2VydCB0aGF0IG9iamVjdCBtdXN0IGJlIGEgY29sbGVjdGlvbiB0eXBlLgorICAg
ICAgICBBU1NFUlQoVjhQcm94eTo6TWF5YmVET01XcmFwcGVyKG9iamVjdCkpOworICAgICAgICBW
OENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgd3JhcHBlclR5cGUgPSBWOFByb3h5OjpHZXRET01X
cmFwcGVyVHlwZShvYmplY3QpOworICAgICAgICBBU1NFUlQod3JhcHBlclR5cGUgIT0gVjhDbGFz
c0luZGV4OjpOT0RFKTsKKyAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IFY4UHJveHk6
OlRvTmF0aXZlT2JqZWN0PENvbGxlY3Rpb24+KHdyYXBwZXJUeXBlLCBvYmplY3QpOworICAgICAg
ICByZXR1cm4gZ2V0VjhPYmplY3Q8SXRlbVR5cGU+KGNvbGxlY3Rpb24tPml0ZW0oaW5kZXgpLCBp
bXBsZW1lbnRhdGlvblR5cGUpOworICAgIH0KKworICAgIC8vIEEgdGVtcGxhdGUgb2YgaW5kZXgg
aW50ZXJjZXB0b3Igb2YgY29sbGVjdGlvbnMuCisgICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlv
biwgY2xhc3MgSXRlbVR5cGU+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29sbGVjdGlv
bkluZGV4ZWRQcm9wZXJ0eUdldHRlcih1aW50MzJfdCBpbmRleCwgY29uc3Qgdjg6OkFjY2Vzc29y
SW5mbyYgaW5mbykKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRJbmRleGVkUHJvcGVydHlPZkNv
bGxlY3Rpb248Q29sbGVjdGlvbiwgSXRlbVR5cGU+KGluZGV4LCBpbmZvLkhvbGRlcigpLCBpbmZv
LkRhdGEoKSk7CisgICAgfQorCisgICAgLy8gQSB0ZW1wbGF0ZSBvZiBpbmRleCBpbnRlcmNlcHRv
ciBvZiBIVE1MU2VsZWN0RWxlbWVudCBhbmQgSFRNTEZvcm1FbGVtZW50LgorICAgIHRlbXBsYXRl
PGNsYXNzIENvbGxlY3Rpb24+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbm9kZUNvbGxl
Y3Rpb25JbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCisgICAgeworICAgICAgICBBU1NFUlQoVjhQcm94eTo6TWF5YmVET01X
cmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKKyAgICAgICAgQVNTRVJUKFY4UHJveHk6OkdldERPTVdy
YXBwZXJUeXBlKGluZm8uSG9sZGVyKCkpID09IFY4Q2xhc3NJbmRleDo6Tk9ERSk7CisgICAgICAg
IENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBWOFByb3h5OjpET01XcmFwcGVyVG9Ob2RlPENvbGxl
Y3Rpb24+KGluZm8uSG9sZGVyKCkpOworICAgICAgICB2b2lkKiBpbXBsZW1lbnRhdGlvbiA9IGNv
bGxlY3Rpb24tPml0ZW0oaW5kZXgpOworICAgICAgICByZXR1cm4gZ2V0VjhPYmplY3QoaW1wbGVt
ZW50YXRpb24sIGluZm8uRGF0YSgpKTsKKyAgICB9CisKKyAgICAvLyBHZXQgYW4gYXJyYXkgY29u
dGFpbmluZyB0aGUgbmFtZXMgb2YgaW5kZXhlZCBwcm9wZXJ0aWVzIG9mIEhUTUxTZWxlY3RFbGVt
ZW50IGFuZCBIVE1MRm9ybUVsZW1lbnQuCisgICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbj4g
c3RhdGljIHY4OjpIYW5kbGU8djg6OkFycmF5PiBub2RlQ29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0
eUVudW1lcmF0b3IoY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKKyAgICB7CisgICAgICAg
IEFTU0VSVChWOFByb3h5OjpNYXliZURPTVdyYXBwZXIoaW5mby5Ib2xkZXIoKSkpOworICAgICAg
ICBBU1NFUlQoVjhQcm94eTo6R2V0RE9NV3JhcHBlclR5cGUoaW5mby5Ib2xkZXIoKSkgPT0gVjhD
bGFzc0luZGV4OjpOT0RFKTsKKyAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IFY4UHJv
eHk6OkRPTVdyYXBwZXJUb05vZGU8Q29sbGVjdGlvbj4oaW5mby5Ib2xkZXIoKSk7CisgICAgICAg
IGludCBsZW5ndGggPSBjb2xsZWN0aW9uLT5sZW5ndGgoKTsKKyAgICAgICAgdjg6OkhhbmRsZTx2
ODo6QXJyYXk+IHByb3BlcnRpZXMgPSB2ODo6QXJyYXk6Ok5ldyhsZW5ndGgpOworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
RG8gd2UgbmVlZCB0byBjaGVjayB0aGF0IHRoZSBpdGVtIGZ1bmN0aW9uIHJldHVybnMgYSBub24t
bnVsbCB2YWx1ZSBmb3IgdGhpcyBpbmRleD8KKyAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6Oklu
dGVnZXI+IGludGVnZXIgPSB2ODo6SW50ZWdlcjo6TmV3KGkpOworICAgICAgICAgICAgcHJvcGVy
dGllcy0+U2V0KGludGVnZXIsIGludGVnZXIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBw
cm9wZXJ0aWVzOworICAgIH0KKworICAgIC8vIEdldCBhbiBhcnJheSBjb250YWluaW5nIHRoZSBu
YW1lcyBvZiBpbmRleGVkIHByb3BlcnRpZXMgaW4gYSBjb2xsZWN0aW9uLgorICAgIHRlbXBsYXRl
PGNsYXNzIENvbGxlY3Rpb24+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpBcnJheT4gY29sbGVjdGlv
bkluZGV4ZWRQcm9wZXJ0eUVudW1lcmF0b3IoY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykK
KyAgICB7CisgICAgICAgIEFTU0VSVChWOFByb3h5OjpNYXliZURPTVdyYXBwZXIoaW5mby5Ib2xk
ZXIoKSkpOworICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgd3JhcHBlclR5cGUg
PSBWOFByb3h5OjpHZXRET01XcmFwcGVyVHlwZShpbmZvLkhvbGRlcigpKTsKKyAgICAgICAgQ29s
bGVjdGlvbiogY29sbGVjdGlvbiA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PENvbGxlY3Rpb24+
KHdyYXBwZXJUeXBlLCBpbmZvLkhvbGRlcigpKTsKKyAgICAgICAgaW50IGxlbmd0aCA9IGNvbGxl
Y3Rpb24tPmxlbmd0aCgpOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gcHJvcGVydGll
cyA9IHY4OjpBcnJheTo6TmV3KGxlbmd0aCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNr
IHRoYXQgdGhlIGl0ZW0gZnVuY3Rpb24gcmV0dXJucyBhIG5vbi1udWxsIHZhbHVlIGZvciB0aGlz
IGluZGV4PworICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4gaW50ZWdlciA9IHY4
OjpJbnRlZ2VyOjpOZXcoaSk7CisgICAgICAgICAgICBwcm9wZXJ0aWVzLT5TZXQoaW50ZWdlciwg
aW50ZWdlcik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7CisgICAgfQor
CisKKyAgICAvLyBBIHRlbXBsYXRlIGZvciBpbmRleGVkIGdldHRlcnMgb24gY29sbGVjdGlvbnMg
b2Ygc3RyaW5ncyB0aGF0IHNob3VsZCByZXR1cm4gbnVsbCBpZiB0aGUgcmVzdWx0aW5nIHN0cmlu
ZyBpcyBhIG51bGwgc3RyaW5nLgorICAgIHRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24+IHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29sbGVjdGlvblN0cmluZ09yTnVsbEluZGV4ZWRQcm9w
ZXJ0eUdldHRlcih1aW50MzJfdCBpbmRleCwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBhc3NlcnQgdGhhdCBvYmplY3QgbXVzdCBiZSBhIGNv
bGxlY3Rpb24gdHlwZQorICAgICAgICBBU1NFUlQoVjhQcm94eTo6TWF5YmVET01XcmFwcGVyKGlu
Zm8uSG9sZGVyKCkpKTsKKyAgICAgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHdyYXBw
ZXJUeXBlID0gVjhQcm94eTo6R2V0RE9NV3JhcHBlclR5cGUoaW5mby5Ib2xkZXIoKSk7CisgICAg
ICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxDb2xs
ZWN0aW9uPih3cmFwcGVyVHlwZSwgaW5mby5Ib2xkZXIoKSk7CisgICAgICAgIFN0cmluZyByZXN1
bHQgPSBjb2xsZWN0aW9uLT5pdGVtKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHY4U3RyaW5nT3JO
dWxsKHJlc3VsdCk7CisgICAgfQorCisKKyAgICAvLyBBZGQgaW5kZXhlZCBnZXR0ZXIgdG8gdGhl
IGZ1bmN0aW9uIHRlbXBsYXRlIGZvciBhIGNvbGxlY3Rpb24uCisgICAgdGVtcGxhdGU8Y2xhc3Mg
Q29sbGVjdGlvbiwgY2xhc3MgSXRlbVR5cGU+IHN0YXRpYyB2b2lkIHNldENvbGxlY3Rpb25JbmRl
eGVkR2V0dGVyKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MsIFY4Q2xhc3NJ
bmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgZGVzYy0+SW5zdGFuY2VU
ZW1wbGF0ZSgpLT5TZXRJbmRleGVkUHJvcGVydHlIYW5kbGVyKGNvbGxlY3Rpb25JbmRleGVkUHJv
cGVydHlHZXR0ZXI8Q29sbGVjdGlvbiwgSXRlbVR5cGU+LCAwLCAwLCAwLCBjb2xsZWN0aW9uSW5k
ZXhlZFByb3BlcnR5RW51bWVyYXRvcjxDb2xsZWN0aW9uPiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY4OjpJbnRlZ2VyOjpOZXco
VjhDbGFzc0luZGV4OjpUb0ludCh0eXBlKSkpOworICAgIH0KKworCisgICAgLy8gQWRkIG5hbWVk
IGdldHRlciB0byB0aGUgZnVuY3Rpb24gdGVtcGxhdGUgZm9yIGEgY29sbGVjdGlvbi4KKyAgICB0
ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBJdGVtVHlwZT4gc3RhdGljIHZvaWQgc2V0
Q29sbGVjdGlvbk5hbWVkR2V0dGVyKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRl
c2MsIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgZGVz
Yy0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXROYW1lZFByb3BlcnR5SGFuZGxlcihjb2xsZWN0aW9u
TmFtZWRQcm9wZXJ0eUdldHRlcjxDb2xsZWN0aW9uLCBJdGVtVHlwZT4sIDAsIDAsIDAsIDAsIHY4
OjpJbnRlZ2VyOjpOZXcoVjhDbGFzc0luZGV4OjpUb0ludCh0eXBlKSkpOworICAgIH0KKworCisg
ICAgLy8gQWRkIG5hbWVkIGFuZCBpbmRleGVkIGdldHRlcnMgdG8gdGhlIGZ1bmN0aW9uIHRlbXBs
YXRlIGZvciBhIGNvbGxlY3Rpb24uCisgICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwgY2xh
c3MgSXRlbVR5cGU+IHN0YXRpYyB2b2lkIHNldENvbGxlY3Rpb25JbmRleGVkQW5kTmFtZWRHZXR0
ZXJzKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MsIFY4Q2xhc3NJbmRleDo6
VjhXcmFwcGVyVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgLy8gSWYgd2UgaW50ZXJjZXB0b3Ig
YmVmb3JlIG9iamVjdCwgYWNjZXNzaW5nICdsZW5ndGgnIGNhbiB0cmlnZ2VyIGEgd2Via2l0IGFz
c2VydGlvbiBlcnJvciAoc2VlIGZhc3QvZG9tL0hUTUxEb2N1bWVudC9kb2N1bWVudC1zcGVjaWFs
LXByb3BlcnRpZXMuaHRtbCkuCisgICAgICAgIGRlc2MtPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0
TmFtZWRQcm9wZXJ0eUhhbmRsZXIoY29sbGVjdGlvbk5hbWVkUHJvcGVydHlHZXR0ZXI8Q29sbGVj
dGlvbiwgSXRlbVR5cGU+LCAwLCAwLCAwLCAwLCB2ODo6SW50ZWdlcjo6TmV3KFY4Q2xhc3NJbmRl
eDo6VG9JbnQodHlwZSkpKTsKKyAgICAgICAgZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXRJ
bmRleGVkUHJvcGVydHlIYW5kbGVyKGNvbGxlY3Rpb25JbmRleGVkUHJvcGVydHlHZXR0ZXI8Q29s
bGVjdGlvbiwgSXRlbVR5cGU+LCAwLCAwLCAwLCBjb2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5RW51
bWVyYXRvcjxDb2xsZWN0aW9uPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHY4OjpJbnRlZ2VyOjpOZXcoVjhDbGFzc0luZGV4OjpU
b0ludCh0eXBlKSkpOworICAgIH0KKworCisgICAgLy8gQWRkIGluZGV4ZWQgZ2V0dGVyIHJldHVy
bmluZyBhIHN0cmluZyBvciBudWxsIHRvIGEgZnVuY3Rpb24gdGVtcGxhdGUgZm9yIGEgY29sbGVj
dGlvbi4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9uPiBzdGF0aWMgdm9pZCBzZXRDb2xs
ZWN0aW9uU3RyaW5nT3JOdWxsSW5kZXhlZEdldHRlcih2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBkZXNjKQorICAgIHsKKyAgICAgICAgZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5T
ZXRJbmRleGVkUHJvcGVydHlIYW5kbGVyKGNvbGxlY3Rpb25TdHJpbmdPck51bGxJbmRleGVkUHJv
cGVydHlHZXR0ZXI8Q29sbGVjdGlvbj4sIDAsIDAsIDAsIGNvbGxlY3Rpb25JbmRleGVkUHJvcGVy
dHlFbnVtZXJhdG9yPENvbGxlY3Rpb24+KTsKKyAgICB9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFY4Q29sbGVjdGlvbl9oCg==
</data>
<flag name="review"
          id="14150"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28725</attachid>
            <date>2009-03-18 10:54:12 -0700</date>
            <delta_ts>2009-03-18 11:29:26 -0700</delta_ts>
            <desc>Proposed fix.</desc>
            <filename>bug24664.txt</filename>
            <type>text/plain</type>
            <size>11794</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
N2M2OTcyZC4uMzg5MGE3MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwxNyBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjQ2NjQ+CisgICAgICAgIFVwc3RyZWFtaW5nIHY4IGNvbGxlY3Rpb24uaAorCisg
ICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlvciwgc28gbm8gdGVzdC4KKworICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5oOiBBZGRlZC4KKworMjAwOS0wMy0xNyAgRGF2aWQgTGV2
aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKICAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNDY2Mj4KICAgICAgICAgQ2hyb21pdW0gYnVpbGQgZml4ZXMuCiAgICAgICAgIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaCBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhDb2xsZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MjQ3YzEwOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhDb2xsZWN0
aW9uLmgKQEAgLTAsMCArMSwxOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4Q29sbGVj
dGlvbl9oCisjZGVmaW5lIFY4Q29sbGVjdGlvbl9oCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIK
KyNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSA8djguaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworICAgIC8vIEZJWE1FOiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlIG5hbWVkIHVzaW5n
IHRvKiBzaW5jZSB0aGV5IHJldHVybiB0aGUgaXRlbSAoZ2V0KiBpcyB1c2VkIGZvciBtZXRob2Qg
dGhhdCB0YWtlIGEgcmVmIHBhcmFtKS4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI0NjY0LgorCisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBnZXRWOE9iamVjdCh2b2lkKiBpbXBsZW1lbnRhdGlvbiwgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gaW1wbGVtZW50YXRpb25UeXBlKQorICAgIHsKKyAgICAgICAgaWYgKCFpbXBsZW1lbnRhdGlv
bikKKyAgICAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICAgICAg
VjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUgPSBWOENsYXNzSW5kZXg6OkZyb21JbnQo
aW1wbGVtZW50YXRpb25UeXBlLT5JbnQzMlZhbHVlKCkpOworICAgICAgICBpZiAodHlwZSA9PSBW
OENsYXNzSW5kZXg6Ok5PREUpCisgICAgICAgICAgICByZXR1cm4gVjhQcm94eTo6Tm9kZVRvVjhP
YmplY3Qoc3RhdGljX2Nhc3Q8Tm9kZSo+KGltcGxlbWVudGF0aW9uKSk7CisgICAgICAgIHJldHVy
biBWOFByb3h5OjpUb1Y4T2JqZWN0KHR5cGUsIGltcGxlbWVudGF0aW9uKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBUPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldFY4T2Jq
ZWN0KFBhc3NSZWZQdHI8VD4gaW1wbGVtZW50YXRpb24sIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGlt
cGxlbWVudGF0aW9uVHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRWOE9iamVjdChpbXBs
ZW1lbnRhdGlvbi5nZXQoKSwgaW1wbGVtZW50YXRpb25UeXBlKTsKKyAgICB9CisKKyAgICAvLyBS
ZXR1cm5zIG5hbWVkIHByb3BlcnR5IG9mIGEgY29sbGVjdGlvbi4KKyAgICB0ZW1wbGF0ZTxjbGFz
cyBDb2xsZWN0aW9uLCBjbGFzcyBJdGVtVHlwZT4gc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBnZXROYW1lZFByb3BlcnR5T2ZDb2xsZWN0aW9uKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gaW1wbGVtZW50YXRp
b25UeXBlKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGFzc2VydCBvYmplY3QgaXMgYSBjb2xs
ZWN0aW9uIHR5cGUKKyAgICAgICAgQVNTRVJUKFY4UHJveHk6Ok1heWJlRE9NV3JhcHBlcihvYmpl
Y3QpKTsKKyAgICAgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHdyYXBwZXJUeXBlID0g
VjhQcm94eTo6R2V0RE9NV3JhcHBlclR5cGUob2JqZWN0KTsKKyAgICAgICAgQVNTRVJUKHdyYXBw
ZXJUeXBlICE9IFY4Q2xhc3NJbmRleDo6Tk9ERSk7CisgICAgICAgIENvbGxlY3Rpb24qIGNvbGxl
Y3Rpb24gPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxDb2xsZWN0aW9uPih3cmFwcGVyVHlwZSwg
b2JqZWN0KTsKKyAgICAgICAgU3RyaW5nIHByb3BlcnR5TmFtZSA9IHRvV2ViQ29yZVN0cmluZyhu
YW1lKTsKKyAgICAgICAgcmV0dXJuIGdldFY4T2JqZWN0PEl0ZW1UeXBlPihjb2xsZWN0aW9uLT5u
YW1lZEl0ZW0ocHJvcGVydHlOYW1lKSwgaW1wbGVtZW50YXRpb25UeXBlKTsKKyAgICB9CisKKyAg
ICAvLyBBIHRlbXBsYXRlIG9mIG5hbWVkIHByb3BlcnR5IGFjY2Vzc29yIG9mIGNvbGxlY3Rpb25z
LgorICAgIHRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24sIGNsYXNzIEl0ZW1UeXBlPiBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbGxlY3Rpb25OYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdldE5hbWVkUHJvcGVydHlPZkNvbGxlY3Rpb248Q29sbGVjdGlv
biwgSXRlbVR5cGU+KG5hbWUsIGluZm8uSG9sZGVyKCksIGluZm8uRGF0YSgpKTsKKyAgICB9CisK
KyAgICAvLyBBIHRlbXBsYXRlIG9mIG5hbWVkIHByb3BlcnR5IGFjY2Vzc29yIG9mIEhUTUxTZWxl
Y3RFbGVtZW50IGFuZCBIVE1MRm9ybUVsZW1lbnQuCisgICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVj
dGlvbj4gc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBub2RlQ29sbGVjdGlvbk5hbWVkUHJv
cGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCisgICAgeworICAgICAgICBBU1NFUlQoVjhQcm94eTo6TWF5YmVET01XcmFw
cGVyKGluZm8uSG9sZGVyKCkpKTsKKyAgICAgICAgQVNTRVJUKFY4UHJveHk6OkdldERPTVdyYXBw
ZXJUeXBlKGluZm8uSG9sZGVyKCkpID09IFY4Q2xhc3NJbmRleDo6Tk9ERSk7CisgICAgICAgIENv
bGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBWOFByb3h5OjpET01XcmFwcGVyVG9Ob2RlPENvbGxlY3Rp
b24+KGluZm8uSG9sZGVyKCkpOworICAgICAgICBTdHJpbmcgcHJvcGVydHlOYW1lID0gdG9XZWJD
b3JlU3RyaW5nKG5hbWUpOworICAgICAgICB2b2lkKiBpbXBsZW1lbnRhdGlvbiA9IGNvbGxlY3Rp
b24tPm5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm4gZ2V0VjhPYmplY3Qo
aW1wbGVtZW50YXRpb24sIGluZm8uRGF0YSgpKTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm5zIHRo
ZSBwcm9wZXJ0eSBhdCB0aGUgaW5kZXggb2YgYSBjb2xsZWN0aW9uLgorICAgIHRlbXBsYXRlPGNs
YXNzIENvbGxlY3Rpb24sIGNsYXNzIEl0ZW1UeXBlPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGdldEluZGV4ZWRQcm9wZXJ0eU9mQ29sbGVjdGlvbih1aW50MzJfdCBpbmRleCwgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gaW1wbGVtZW50YXRpb25UeXBl
KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEFzc2VydCB0aGF0IG9iamVjdCBtdXN0IGJlIGEg
Y29sbGVjdGlvbiB0eXBlLgorICAgICAgICBBU1NFUlQoVjhQcm94eTo6TWF5YmVET01XcmFwcGVy
KG9iamVjdCkpOworICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgd3JhcHBlclR5
cGUgPSBWOFByb3h5OjpHZXRET01XcmFwcGVyVHlwZShvYmplY3QpOworICAgICAgICBBU1NFUlQo
d3JhcHBlclR5cGUgIT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKKyAgICAgICAgQ29sbGVjdGlvbiog
Y29sbGVjdGlvbiA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PENvbGxlY3Rpb24+KHdyYXBwZXJU
eXBlLCBvYmplY3QpOworICAgICAgICByZXR1cm4gZ2V0VjhPYmplY3Q8SXRlbVR5cGU+KGNvbGxl
Y3Rpb24tPml0ZW0oaW5kZXgpLCBpbXBsZW1lbnRhdGlvblR5cGUpOworICAgIH0KKworICAgIC8v
IEEgdGVtcGxhdGUgb2YgaW5kZXggaW50ZXJjZXB0b3Igb2YgY29sbGVjdGlvbnMuCisgICAgdGVt
cGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3MgSXRlbVR5cGU+IHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gY29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUdldHRlcih1aW50MzJfdCBpbmRl
eCwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKKyAgICB7CisgICAgICAgIHJldHVybiBn
ZXRJbmRleGVkUHJvcGVydHlPZkNvbGxlY3Rpb248Q29sbGVjdGlvbiwgSXRlbVR5cGU+KGluZGV4
LCBpbmZvLkhvbGRlcigpLCBpbmZvLkRhdGEoKSk7CisgICAgfQorCisgICAgLy8gQSB0ZW1wbGF0
ZSBvZiBpbmRleCBpbnRlcmNlcHRvciBvZiBIVE1MU2VsZWN0RWxlbWVudCBhbmQgSFRNTEZvcm1F
bGVtZW50LgorICAgIHRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24+IHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gbm9kZUNvbGxlY3Rpb25JbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3Qg
aW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCisgICAgeworICAgICAgICBBU1NF
UlQoVjhQcm94eTo6TWF5YmVET01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKKyAgICAgICAgQVNT
RVJUKFY4UHJveHk6OkdldERPTVdyYXBwZXJUeXBlKGluZm8uSG9sZGVyKCkpID09IFY4Q2xhc3NJ
bmRleDo6Tk9ERSk7CisgICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBWOFByb3h5OjpE
T01XcmFwcGVyVG9Ob2RlPENvbGxlY3Rpb24+KGluZm8uSG9sZGVyKCkpOworICAgICAgICB2b2lk
KiBpbXBsZW1lbnRhdGlvbiA9IGNvbGxlY3Rpb24tPml0ZW0oaW5kZXgpOworICAgICAgICByZXR1
cm4gZ2V0VjhPYmplY3QoaW1wbGVtZW50YXRpb24sIGluZm8uRGF0YSgpKTsKKyAgICB9CisKKyAg
ICAvLyBHZXQgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgaW5kZXhlZCBwcm9wZXJ0
aWVzIG9mIEhUTUxTZWxlY3RFbGVtZW50IGFuZCBIVE1MRm9ybUVsZW1lbnQuCisgICAgdGVtcGxh
dGU8Y2xhc3MgQ29sbGVjdGlvbj4gc3RhdGljIHY4OjpIYW5kbGU8djg6OkFycmF5PiBub2RlQ29s
bGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUVudW1lcmF0b3IoY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKKyAgICB7CisgICAgICAgIEFTU0VSVChWOFByb3h5OjpNYXliZURPTVdyYXBwZXIoaW5m
by5Ib2xkZXIoKSkpOworICAgICAgICBBU1NFUlQoVjhQcm94eTo6R2V0RE9NV3JhcHBlclR5cGUo
aW5mby5Ib2xkZXIoKSkgPT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKKyAgICAgICAgQ29sbGVjdGlv
biogY29sbGVjdGlvbiA9IFY4UHJveHk6OkRPTVdyYXBwZXJUb05vZGU8Q29sbGVjdGlvbj4oaW5m
by5Ib2xkZXIoKSk7CisgICAgICAgIGludCBsZW5ndGggPSBjb2xsZWN0aW9uLT5sZW5ndGgoKTsK
KyAgICAgICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHByb3BlcnRpZXMgPSB2ODo6QXJyYXk6Ok5l
dyhsZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayB0aGF0IHRoZSBpdGVtIGZ1
bmN0aW9uIHJldHVybnMgYSBub24tbnVsbCB2YWx1ZSBmb3IgdGhpcyBpbmRleD8KKyAgICAgICAg
ICAgIHY4OjpIYW5kbGU8djg6OkludGVnZXI+IGludGVnZXIgPSB2ODo6SW50ZWdlcjo6TmV3KGkp
OworICAgICAgICAgICAgcHJvcGVydGllcy0+U2V0KGludGVnZXIsIGludGVnZXIpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzOworICAgIH0KKworICAgIC8vIEdldCBhbiBh
cnJheSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBpbmRleGVkIHByb3BlcnRpZXMgaW4gYSBjb2xs
ZWN0aW9uLgorICAgIHRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24+IHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpBcnJheT4gY29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUVudW1lcmF0b3IoY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKKyAgICB7CisgICAgICAgIEFTU0VSVChWOFByb3h5OjpNYXli
ZURPTVdyYXBwZXIoaW5mby5Ib2xkZXIoKSkpOworICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3Jh
cHBlclR5cGUgd3JhcHBlclR5cGUgPSBWOFByb3h5OjpHZXRET01XcmFwcGVyVHlwZShpbmZvLkhv
bGRlcigpKTsKKyAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IFY4UHJveHk6OlRvTmF0
aXZlT2JqZWN0PENvbGxlY3Rpb24+KHdyYXBwZXJUeXBlLCBpbmZvLkhvbGRlcigpKTsKKyAgICAg
ICAgaW50IGxlbmd0aCA9IGNvbGxlY3Rpb24tPmxlbmd0aCgpOworICAgICAgICB2ODo6SGFuZGxl
PHY4OjpBcnJheT4gcHJvcGVydGllcyA9IHY4OjpBcnJheTo6TmV3KGxlbmd0aCk7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBEbyB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlIGl0ZW0gZnVuY3Rpb24gcmV0dXJucyBhIG5v
bi1udWxsIHZhbHVlIGZvciB0aGlzIGluZGV4PworICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6
SW50ZWdlcj4gaW50ZWdlciA9IHY4OjpJbnRlZ2VyOjpOZXcoaSk7CisgICAgICAgICAgICBwcm9w
ZXJ0aWVzLT5TZXQoaW50ZWdlciwgaW50ZWdlcik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHByb3BlcnRpZXM7CisgICAgfQorCisKKyAgICAvLyBBIHRlbXBsYXRlIGZvciBpbmRleGVkIGdl
dHRlcnMgb24gY29sbGVjdGlvbnMgb2Ygc3RyaW5ncyB0aGF0IHNob3VsZCByZXR1cm4gbnVsbCBp
ZiB0aGUgcmVzdWx0aW5nIHN0cmluZyBpcyBhIG51bGwgc3RyaW5nLgorICAgIHRlbXBsYXRlPGNs
YXNzIENvbGxlY3Rpb24+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29sbGVjdGlvblN0
cmluZ09yTnVsbEluZGV4ZWRQcm9wZXJ0eUdldHRlcih1aW50MzJfdCBpbmRleCwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBhc3NlcnQgdGhh
dCBvYmplY3QgbXVzdCBiZSBhIGNvbGxlY3Rpb24gdHlwZQorICAgICAgICBBU1NFUlQoVjhQcm94
eTo6TWF5YmVET01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKKyAgICAgICAgVjhDbGFzc0luZGV4
OjpWOFdyYXBwZXJUeXBlIHdyYXBwZXJUeXBlID0gVjhQcm94eTo6R2V0RE9NV3JhcHBlclR5cGUo
aW5mby5Ib2xkZXIoKSk7CisgICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBWOFByb3h5
OjpUb05hdGl2ZU9iamVjdDxDb2xsZWN0aW9uPih3cmFwcGVyVHlwZSwgaW5mby5Ib2xkZXIoKSk7
CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBjb2xsZWN0aW9uLT5pdGVtKGluZGV4KTsKKyAgICAg
ICAgcmV0dXJuIHY4U3RyaW5nT3JOdWxsKHJlc3VsdCk7CisgICAgfQorCisKKyAgICAvLyBBZGQg
aW5kZXhlZCBnZXR0ZXIgdG8gdGhlIGZ1bmN0aW9uIHRlbXBsYXRlIGZvciBhIGNvbGxlY3Rpb24u
CisgICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3MgSXRlbVR5cGU+IHN0YXRpYyB2
b2lkIHNldENvbGxlY3Rpb25JbmRleGVkR2V0dGVyKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IGRlc2MsIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlKQorICAgIHsKKyAg
ICAgICAgZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXRJbmRleGVkUHJvcGVydHlIYW5kbGVy
KGNvbGxlY3Rpb25JbmRleGVkUHJvcGVydHlHZXR0ZXI8Q29sbGVjdGlvbiwgSXRlbVR5cGU+LCAw
LCAwLCAwLCBjb2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5RW51bWVyYXRvcjxDb2xsZWN0aW9uPiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHY4OjpJbnRlZ2VyOjpOZXcoVjhDbGFzc0luZGV4OjpUb0ludCh0eXBlKSkpOworICAgIH0K
KworCisgICAgLy8gQWRkIG5hbWVkIGdldHRlciB0byB0aGUgZnVuY3Rpb24gdGVtcGxhdGUgZm9y
IGEgY29sbGVjdGlvbi4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBJdGVt
VHlwZT4gc3RhdGljIHZvaWQgc2V0Q29sbGVjdGlvbk5hbWVkR2V0dGVyKHY4OjpIYW5kbGU8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MsIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBl
KQorICAgIHsKKyAgICAgICAgZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXROYW1lZFByb3Bl
cnR5SGFuZGxlcihjb2xsZWN0aW9uTmFtZWRQcm9wZXJ0eUdldHRlcjxDb2xsZWN0aW9uLCBJdGVt
VHlwZT4sIDAsIDAsIDAsIDAsIHY4OjpJbnRlZ2VyOjpOZXcoVjhDbGFzc0luZGV4OjpUb0ludCh0
eXBlKSkpOworICAgIH0KKworCisgICAgLy8gQWRkIG5hbWVkIGFuZCBpbmRleGVkIGdldHRlcnMg
dG8gdGhlIGZ1bmN0aW9uIHRlbXBsYXRlIGZvciBhIGNvbGxlY3Rpb24uCisgICAgdGVtcGxhdGU8
Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3MgSXRlbVR5cGU+IHN0YXRpYyB2b2lkIHNldENvbGxlY3Rp
b25JbmRleGVkQW5kTmFtZWRHZXR0ZXJzKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IGRlc2MsIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAg
Ly8gSWYgd2UgaW50ZXJjZXB0b3IgYmVmb3JlIG9iamVjdCwgYWNjZXNzaW5nICdsZW5ndGgnIGNh
biB0cmlnZ2VyIGEgd2Via2l0IGFzc2VydGlvbiBlcnJvciAoc2VlIGZhc3QvZG9tL0hUTUxEb2N1
bWVudC9kb2N1bWVudC1zcGVjaWFsLXByb3BlcnRpZXMuaHRtbCkuCisgICAgICAgIGRlc2MtPklu
c3RhbmNlVGVtcGxhdGUoKS0+U2V0TmFtZWRQcm9wZXJ0eUhhbmRsZXIoY29sbGVjdGlvbk5hbWVk
UHJvcGVydHlHZXR0ZXI8Q29sbGVjdGlvbiwgSXRlbVR5cGU+LCAwLCAwLCAwLCAwLCB2ODo6SW50
ZWdlcjo6TmV3KFY4Q2xhc3NJbmRleDo6VG9JbnQodHlwZSkpKTsKKyAgICAgICAgZGVzYy0+SW5z
dGFuY2VUZW1wbGF0ZSgpLT5TZXRJbmRleGVkUHJvcGVydHlIYW5kbGVyKGNvbGxlY3Rpb25JbmRl
eGVkUHJvcGVydHlHZXR0ZXI8Q29sbGVjdGlvbiwgSXRlbVR5cGU+LCAwLCAwLCAwLCBjb2xsZWN0
aW9uSW5kZXhlZFByb3BlcnR5RW51bWVyYXRvcjxDb2xsZWN0aW9uPiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY4OjpJbnRlZ2Vy
OjpOZXcoVjhDbGFzc0luZGV4OjpUb0ludCh0eXBlKSkpOworICAgIH0KKworCisgICAgLy8gQWRk
IGluZGV4ZWQgZ2V0dGVyIHJldHVybmluZyBhIHN0cmluZyBvciBudWxsIHRvIGEgZnVuY3Rpb24g
dGVtcGxhdGUgZm9yIGEgY29sbGVjdGlvbi4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9u
PiBzdGF0aWMgdm9pZCBzZXRDb2xsZWN0aW9uU3RyaW5nT3JOdWxsSW5kZXhlZEdldHRlcih2ODo6
SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKQorICAgIHsKKyAgICAgICAgZGVzYy0+
SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXRJbmRleGVkUHJvcGVydHlIYW5kbGVyKGNvbGxlY3Rpb25T
dHJpbmdPck51bGxJbmRleGVkUHJvcGVydHlHZXR0ZXI8Q29sbGVjdGlvbj4sIDAsIDAsIDAsIGNv
bGxlY3Rpb25JbmRleGVkUHJvcGVydHlFbnVtZXJhdG9yPENvbGxlY3Rpb24+KTsKKyAgICB9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFY4Q29sbGVjdGlvbl9oCg==
</data>
<flag name="review"
          id="14158"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>