<?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>27103</bug_id>
          
          <creation_ts>2009-07-08 16:56:03 -0700</creation_ts>
          <short_desc>Upstream V8NPObject.h and V8NPObject.cpp</short_desc>
          <delta_ts>2009-07-14 16:31:58 -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>WebCore Misc.</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>0</everconfirmed>
          <reporter name="Albert J. Wong">ajwong</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ajwong</cc>
    
    <cc>dglazkov</cc>
    
    <cc>japhet</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>130572</commentid>
    <comment_count>0</comment_count>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-07-08 16:56:03 -0700</bug_when>
    <thetext>Upstreaming V8 files from the chromium tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130573</commentid>
    <comment_count>1</comment_count>
      <attachid>32488</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-07-08 17:03:54 -0700</bug_when>
    <thetext>Created attachment 32488
Patch with V8NPObject.h, V8NPObject.cpp, plus fixes to other files that reference the old filename/function names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130707</commentid>
    <comment_count>2</comment_count>
      <attachid>32488</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-09 12:54:35 -0700</bug_when>
    <thetext>Comment on attachment 32488
Patch with V8NPObject.h, V8NPObject.cpp, plus fixes to other files that reference the old filename/function names.

Thanks for doing this! Just two minor style nits:

&gt; +enum InvokeFunctionType {
&gt; +    INVOKE_METHOD = 1,
&gt; +    INVOKE_CONSTRUCT = 2,
&gt; +    INVOKE_DEFAULT = 3
&gt; +};

InvokeError, etc.

&gt; +    return v8::Local&lt;v8::Value&gt;(); // Do not intercept the call.

return notHandledByInterceptor();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130917</commentid>
    <comment_count>3</comment_count>
      <attachid>32571</attachid>
    <who name="Albert J. Wong">ajwong</who>
    <bug_when>2009-07-10 12:23:53 -0700</bug_when>
    <thetext>Created attachment 32571
Address Dimitiri&apos;s comments.  Also update with latest changes downstream due to V8Proxy refactor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130932</commentid>
    <comment_count>4</comment_count>
      <attachid>32571</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-10 13:29:38 -0700</bug_when>
    <thetext>Comment on attachment 32571
Address Dimitiri&apos;s comments.  Also update with latest changes downstream due to V8Proxy refactor

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131711</commentid>
    <comment_count>5</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-07-14 15:36:11 -0700</bug_when>
    <thetext>Landed as r45876.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131746</commentid>
    <comment_count>6</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-14 16:31:58 -0700</bug_when>
    <thetext>Resolving since it was committed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32488</attachid>
            <date>2009-07-08 17:03:54 -0700</date>
            <delta_ts>2009-07-10 12:23:53 -0700</delta_ts>
            <desc>Patch with V8NPObject.h, V8NPObject.cpp, plus fixes to other files that reference the old filename/function names.</desc>
            <filename>V8NPObject.patch</filename>
            <type>text/plain</type>
            <size>22942</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZTllNTNhNy4uOWMxODE2MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAwOS0wNy0wOCAgQWxiZXJ0IEouIFdv
bmcgIDxhandvbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVwc3RyZWFtIFY4TlBPYmplY3QuaCBhbmQgVjhOUE9iamVjdC5j
cHAuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzEw
MworCisgICAgICAgIFRoaXMganVzdCB1cHN0cmVhbXMgdGhlIGZpbGVzIGZyb20gdGhlIGNocm9t
aXVtIGNvZGUgYmFzZS4gT25seQorICAgICAgICBtaW5vciBjaGFuZ2VzIHRvIGZvcm1hdHRpbmcg
YW5kIHNpbWlsYXIgd2VyZSBkb25lLCBzbyBubyB0ZXN0aW5nCisgICAgICAgIGlzIHJlcXVpcmVk
IGJlY2F1c2Ugbm90aGluZyByZWFsbHkgY2hhbmdlZC4gIENvZGUgdmVyaWZpZWQgdG8gY29tcGls
ZS4KKworICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6YmluZFRvV2luZG93T2JqZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lk
Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcDogQWRkZWQuCisgICAg
ICAgIChucE9iamVjdEludm9rZUltcGwpOgorICAgICAgICAobnBPYmplY3RNZXRob2RIYW5kbGVy
KToKKyAgICAgICAgKG5wT2JqZWN0SW52b2tlRGVmYXVsdEhhbmRsZXIpOgorICAgICAgICAod2Vh
a1RlbXBsYXRlQ2FsbGJhY2spOgorICAgICAgICAobnBPYmplY3RHZXRQcm9wZXJ0eSk6CisgICAg
ICAgIChucE9iamVjdE5hbWVkUHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAobnBPYmplY3RJbmRl
eGVkUHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAobnBPYmplY3RHZXROYW1lZFByb3BlcnR5KToK
KyAgICAgICAgKG5wT2JqZWN0R2V0SW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKG5wT2JqZWN0
U2V0UHJvcGVydHkpOgorICAgICAgICAobnBPYmplY3ROYW1lZFByb3BlcnR5U2V0dGVyKToKKyAg
ICAgICAgKG5wT2JqZWN0SW5kZXhlZFByb3BlcnR5U2V0dGVyKToKKyAgICAgICAgKG5wT2JqZWN0
U2V0TmFtZWRQcm9wZXJ0eSk6CisgICAgICAgIChucE9iamVjdFNldEluZGV4ZWRQcm9wZXJ0eSk6
CisgICAgICAgICh3ZWFrTlBPYmplY3RDYWxsYmFjayk6CisgICAgICAgIChjcmVhdGVWOE9iamVj
dEZvck5QT2JqZWN0KToKKyAgICAgICAgKGZvcmdldFY4T2JqZWN0Rm9yTlBPYmplY3QpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuaDogQWRkZWQuCisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTFBsdWdJbkVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TkFNRURfUFJPUEVSVFlfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6Ok5BTUVEX1BS
T1BFUlRZX1NFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgor
ICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAoV2Vi
Q29yZTo6SU5ERVhFRF9QUk9QRVJUWV9TRVRURVIpOgorCiAyMDA5LTA3LTA3ICBPbGl2ZXIgSHVu
dCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0YWNo
b3dpYWsuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIu
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA5ZGE4
NjA0Li4wM2RjZjQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRy
b2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAK
QEAgLTI0MCw3ICsyNDAsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmJpbmRUb1dpbmRvd09i
amVjdChGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYga2V5LCBOUE9iagogCiAgICAgdjg6OkNv
bnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHZhbHVlID0gQ3JlYXRlVjhPYmplY3RGb3JOUE9iamVjdChvYmplY3QsIDApOworICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gdmFsdWUgPSBjcmVhdGVWOE9iamVjdEZvck5QT2JqZWN0KG9i
amVjdCwgMCk7CiAKICAgICAvLyBBdHRhY2ggdG8gdGhlIGdsb2JhbCBvYmplY3QuCiAgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwgPSB2OENvbnRleHQtPkdsb2JhbCgpOwpAQCAtMzA0
LDcgKzMwNCw3IEBAIFBhc3NTY3JpcHRJbnN0YW5jZSBTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVT
Y3JpcHRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqIHdpZGdlCiAgICAgLy8gTlBPYmplY3QgYXMg
cGFydCBvZiBpdHMgd3JhcHBlci4gSG93ZXZlciwgYmVmb3JlIGFjY2Vzc2luZyB0aGUgb2JqZWN0
CiAgICAgLy8gaXQgbXVzdCBjb25zdWx0IHRoZSBOUE5fUmVnaXN0cnkuCiAKLSAgICB2ODo6TG9j
YWw8djg6Ok9iamVjdD4gd3JhcHBlciA9IENyZWF0ZVY4T2JqZWN0Rm9yTlBPYmplY3QobnBPYmpl
Y3QsIDApOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gY3JlYXRlVjhPYmpl
Y3RGb3JOUE9iamVjdChucE9iamVjdCwgMCk7CiAKICAgICAvLyBUcmFjayB0aGUgcGx1Z2luIG9i
amVjdC4gV2UndmUgYmVlbiBnaXZlbiBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0LgogICAgIG1f
cGx1Z2luT2JqZWN0cy5zZXQod2lkZ2V0LCBucE9iamVjdCk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2Jq
ZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDVkNWZhCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcApAQCAtMCww
ICsxLDM1MCBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisqIG1ldDoKKyoKKyogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorKiBkaXN0cmlidXRpb24uCisqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVjhOUE9iamVjdC5oIgorCisjaW5jbHVk
ZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJOUFY4T2JqZWN0LmgiCisjaW5jbHVk
ZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhET01NYXAuaCIKKyNpbmNsdWRlICJW
OEhUTUxBcHBsZXRFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MRW1iZWRFbGVtZW50LmgiCisj
aW5jbHVkZSAiVjhIVE1MT2JqZWN0RWxlbWVudC5oIgorI2luY2x1ZGUgIlY4SGVscGVycy5oIgor
I2luY2x1ZGUgIlY4TlBVdGlscy5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJu
cHJ1bnRpbWVfcHJpdi5oIgorI2luY2x1ZGUgInd0Zi9Pd25BcnJheVB0ci5oIgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworZW51bSBJbnZva2VGdW5jdGlvblR5cGUgeworICAgIElOVk9L
RV9NRVRIT0QgPSAxLAorICAgIElOVk9LRV9DT05TVFJVQ1QgPSAyLAorICAgIElOVk9LRV9ERUZB
VUxUID0gMworfTsKKworLy8gRklYTUU6IG5lZWQgY29tbWVudHMuCisvLyBQYXJhbXM6IGhvbGRl
ciBjb3VsZCBiZSBIVE1MRW1iZWRFbGVtZW50IG9yIE5QT2JqZWN0CitzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IG5wT2JqZWN0SW52b2tlSW1wbChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
LCBJbnZva2VGdW5jdGlvblR5cGUgZnVuY3Rpb25JZCkKK3sKKyAgICBOUE9iamVjdCogbnBPYmpl
Y3Q7CisKKyAgICAvLyBUaGVzZSB0aHJlZSB0eXBlcyBhcmUgc3VidHlwZXMgb2YgSFRNTFBsdWdJ
bkVsZW1lbnQuCisgICAgaWYgKFY4SFRNTEFwcGxldEVsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZ3Mu
SG9sZGVyKCkpIHx8IFY4SFRNTEVtYmVkRWxlbWVudDo6SGFzSW5zdGFuY2UoYXJncy5Ib2xkZXIo
KSkKKyAgICAgICAgfHwgVjhIVE1MT2JqZWN0RWxlbWVudDo6SGFzSW5zdGFuY2UoYXJncy5Ib2xk
ZXIoKSkpIHsKKyAgICAgICAgLy8gVGhlIGhvbGRlciBvYmplY3QgaXMgYSBzdWJ0eXBlIG9mIEhU
TUxQbHVnSW5FbGVtZW50LgorICAgICAgICBIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCA9IFY4
UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxQbHVnSW5FbGVtZW50PihhcmdzLkhv
bGRlcigpKTsKKyAgICAgICAgU2NyaXB0SW5zdGFuY2Ugc2NyaXB0SW5zdGFuY2UgPSBlbGVtZW50
LT5nZXRJbnN0YW5jZSgpOworICAgICAgICBpZiAoc2NyaXB0SW5zdGFuY2UpCisgICAgICAgICAg
ICBucE9iamVjdCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxOUE9iamVjdD4oVjhD
bGFzc0luZGV4OjpOUE9CSkVDVCwgc2NyaXB0SW5zdGFuY2UtPmluc3RhbmNlKCkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBucE9iamVjdCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gVGhlIGhvbGRlciBvYmplY3QgaXMgbm90IGEgc3VidHlwZSBvZiBIVE1MUGx1Z0luRWxlbWVu
dCwgaXQgbXVzdCBiZSBhbiBOUE9iamVjdCB3aGljaCBoYXMgdGhyZWUKKyAgICAgICAgLy8gaW50
ZXJuYWwgZmllbGRzLgorICAgICAgICBpZiAoYXJncy5Ib2xkZXIoKS0+SW50ZXJuYWxGaWVsZENv
dW50KCkgIT0gVjhDdXN0b206OmtOUE9iamVjdEludGVybmFsRmllbGRDb3VudCkKKyAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcigiTlBNZXRob2QgY2FsbGVkIG9uIG5vbi1OUE9iamVjdCIsIFY4
UHJveHk6OlJlZmVyZW5jZUVycm9yKTsKKworICAgICAgICBucE9iamVjdCA9IFY4UHJveHk6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxOUE9iamVjdD4oVjhDbGFzc0luZGV4OjpOUE9CSkVDVCwgYXJn
cy5Ib2xkZXIoKSk7CisgICAgfQorCisgICAgLy8gVmVyaWZ5IHRoYXQgb3VyIHdyYXBwZXIgd2Fz
bid0IHVzaW5nIGEgTlBPYmplY3Qgd2hpY2ggaGFzIGFscmVhZHkgYmVlbiBkZWxldGVkLgorICAg
IGlmICghbnBPYmplY3QgfHwgIV9OUE5fSXNBbGl2ZShucE9iamVjdCkpCisgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKCJOUE9iamVjdCBkZWxldGVkIiwgVjhQcm94eTo6UmVmZXJlbmNlRXJyb3Ip
OworCisgICAgLy8gV3JhcCB1cCBwYXJhbWV0ZXJzLgorICAgIGludCBudW1BcmdzID0gYXJncy5M
ZW5ndGgoKTsKKyAgICBPd25BcnJheVB0cjxOUFZhcmlhbnQ+IG5wQXJncyhuZXcgTlBWYXJpYW50
W251bUFyZ3NdKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQXJnczsgaSsrKQorICAg
ICAgICBjb252ZXJ0VjhPYmplY3RUb05QVmFyaWFudChhcmdzW2ldLCBucE9iamVjdCwgJm5wQXJn
c1tpXSk7CisKKyAgICBOUFZhcmlhbnQgcmVzdWx0OworICAgIFZPSURfVE9fTlBWQVJJQU5UKHJl
c3VsdCk7CisKKyAgICBzd2l0Y2ggKGZ1bmN0aW9uSWQpIHsKKyAgICBjYXNlIElOVk9LRV9NRVRI
T0Q6CisgICAgICAgIGlmIChucE9iamVjdC0+X2NsYXNzLT5pbnZva2UpIHsKKyAgICAgICAgICAg
IHY4OjpIYW5kbGU8djg6OlN0cmluZz4gZnVuY3Rpb25OYW1lKHY4OjpTdHJpbmc6OkNhc3QoKmFy
Z3MuRGF0YSgpKSk7CisgICAgICAgICAgICBOUElkZW50aWZpZXIgaWRlbnRpZmllciA9IGdldFN0
cmluZ0lkZW50aWZpZXIoZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgICAgIG5wT2JqZWN0LT5fY2xh
c3MtPmludm9rZShucE9iamVjdCwgaWRlbnRpZmllciwgbnBBcmdzLmdldCgpLCBudW1BcmdzLCAm
cmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIElOVk9LRV9DT05T
VFJVQ1Q6CisgICAgICAgIGlmIChucE9iamVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QpCisgICAgICAg
ICAgICBucE9iamVjdC0+X2NsYXNzLT5jb25zdHJ1Y3QobnBPYmplY3QsIG5wQXJncy5nZXQoKSwg
bnVtQXJncywgJnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5WT0tFX0RFRkFV
TFQ6CisgICAgICAgIGlmIChucE9iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0KQorICAgICAg
ICAgICAgbnBPYmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdChucE9iamVjdCwgbnBBcmdzLmdl
dCgpLCBudW1BcmdzLCAmcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZm9yIChpbnQgaT0wOyBpIDwgbnVtQXJnczsgaSsr
KQorICAgICAgICBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmbnBBcmdzW2ldKTsKKworICAgIC8v
IFVud3JhcCByZXR1cm4gdmFsdWVzLgorICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXR1cm5W
YWx1ZSA9IGNvbnZlcnROUFZhcmlhbnRUb1Y4T2JqZWN0KCZyZXN1bHQsIG5wT2JqZWN0KTsKKyAg
ICBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmcmVzdWx0KTsKKworICAgIHJldHVybiByZXR1cm5W
YWx1ZTsKK30KKworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbnBPYmplY3RNZXRob2RIYW5kbGVy
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIG5wT2JqZWN0SW52b2tl
SW1wbChhcmdzLCBJTlZPS0VfTUVUSE9EKTsKK30KKworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
bnBPYmplY3RJbnZva2VEZWZhdWx0SGFuZGxlcihjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQor
eworICAgIGlmIChhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gbnBPYmpl
Y3RJbnZva2VJbXBsKGFyZ3MsIElOVk9LRV9DT05TVFJVQ1QpOworICAgIGVsc2UKKyAgICAgICAg
cmV0dXJuIG5wT2JqZWN0SW52b2tlSW1wbChhcmdzLCBJTlZPS0VfREVGQVVMVCk7Cit9CisKKwor
c3RhdGljIHZvaWQgd2Vha1RlbXBsYXRlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
Piwgdm9pZCogcGFyYW1ldGVyKTsKKworLy8gTlBJZGVudGlmaWVyIGlzIFByaXZhdGVJZGVudGlm
aWVyKi4KK3N0YXRpYyBXZWFrUmVmZXJlbmNlTWFwPFByaXZhdGVJZGVudGlmaWVyLCB2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gc3RhdGljVGVtcGxhdGVNYXAoJndlYWtUZW1wbGF0ZUNhbGxiYWNrKTsK
Kworc3RhdGljIHZvaWQgd2Vha1RlbXBsYXRlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZh
bHVlPiBvYmplY3QsIHZvaWQqIHBhcmFtZXRlcikKK3sKKyAgICBQcml2YXRlSWRlbnRpZmllciog
aWRlbnRpZmllciA9IHN0YXRpY19jYXN0PFByaXZhdGVJZGVudGlmaWVyKj4ocGFyYW1ldGVyKTsK
KyAgICBBU1NFUlQoaWRlbnRpZmllcik7CisgICAgQVNTRVJUKHN0YXRpY1RlbXBsYXRlTWFwLmNv
bnRhaW5zKGlkZW50aWZpZXIpKTsKKworICAgIHN0YXRpY1RlbXBsYXRlTWFwLmZvcmdldChpZGVu
dGlmaWVyKTsKK30KKworCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5wT2JqZWN0R2V0
UHJvcGVydHkodjg6OkxvY2FsPHY4OjpPYmplY3Q+IHNlbGYsIE5QSWRlbnRpZmllciBpZGVudGlm
aWVyLCB2ODo6TG9jYWw8djg6OlZhbHVlPiBrZXkpCit7CisgICAgTlBPYmplY3QqIG5wT2JqZWN0
ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE5QT2JqZWN0PihWOENsYXNzSW5kZXg6
Ok5QT0JKRUNULCBzZWxmKTsKKworICAgIC8vIFZlcmlmeSB0aGF0IG91ciB3cmFwcGVyIHdhc24n
dCB1c2luZyBhIE5QT2JqZWN0IHdoaWNoCisgICAgLy8gaGFzIGFscmVhZHkgYmVlbiBkZWxldGVk
LgorICAgIGlmICghbnBPYmplY3QgfHwgIV9OUE5fSXNBbGl2ZShucE9iamVjdCkpCisgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKCJOUE9iamVjdCBkZWxldGVkIiwgVjhQcm94eTo6UmVmZXJlbmNl
RXJyb3IpOworCisKKyAgICBpZiAobnBPYmplY3QtPl9jbGFzcy0+aGFzUHJvcGVydHkgJiYgbnBP
YmplY3QtPl9jbGFzcy0+aGFzUHJvcGVydHkobnBPYmplY3QsIGlkZW50aWZpZXIpCisgICAgICAg
ICYmIG5wT2JqZWN0LT5fY2xhc3MtPmdldFByb3BlcnR5KSB7CisKKyAgICAgICAgTlBWYXJpYW50
IHJlc3VsdDsKKyAgICAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsKKyAgICAgICAgaWYg
KCFucE9iamVjdC0+X2NsYXNzLT5nZXRQcm9wZXJ0eShucE9iamVjdCwgaWRlbnRpZmllciwgJnJl
c3VsdCkpCisgICAgICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisKKyAg
ICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJldHVyblZhbHVlID0gY29udmVydE5QVmFyaWFu
dFRvVjhPYmplY3QoJnJlc3VsdCwgbnBPYmplY3QpOworICAgICAgICBOUE5fUmVsZWFzZVZhcmlh
bnRWYWx1ZSgmcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworCisgICAgfSBl
bHNlIGlmIChrZXktPklzU3RyaW5nKCkgJiYgbnBPYmplY3QtPl9jbGFzcy0+aGFzTWV0aG9kICYm
IG5wT2JqZWN0LT5fY2xhc3MtPmhhc01ldGhvZChucE9iamVjdCwgaWRlbnRpZmllcikpIHsKKyAg
ICAgICAgUHJpdmF0ZUlkZW50aWZpZXIqIGlkID0gc3RhdGljX2Nhc3Q8UHJpdmF0ZUlkZW50aWZp
ZXIqPihpZGVudGlmaWVyKTsKKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IGZ1bmN0aW9uVGVtcGxhdGUgPSBzdGF0aWNUZW1wbGF0ZU1hcC5nZXQoaWQpOworICAg
ICAgICAvLyBDYWNoZSB0ZW1wbGF0ZXMgdXNpbmcgaWRlbnRpZmllciBhcyB0aGUga2V5LgorICAg
ICAgICBpZiAoZnVuY3Rpb25UZW1wbGF0ZS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIENy
ZWF0ZSBhIG5ldyB0ZW1wbGF0ZS4KKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gdGVtcCA9IHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoKTsKKyAgICAgICAgICAg
IHRlbXAtPlNldENhbGxIYW5kbGVyKG5wT2JqZWN0TWV0aG9kSGFuZGxlciwga2V5KTsKKyAgICAg
ICAgICAgIGZ1bmN0aW9uVGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT46Ok5ldyh0ZW1wKTsKKyAgICAgICAgICAgIHN0YXRpY1RlbXBsYXRlTWFwLnNldChpZCwg
ZnVuY3Rpb25UZW1wbGF0ZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGdW5jdGlvblRlbXBs
YXRlIGNhY2hlcyBmdW5jdGlvbiBmb3IgZWFjaCBjb250ZXh0LgorICAgICAgICB2ODo6TG9jYWw8
djg6OkZ1bmN0aW9uPiB2OEZ1bmN0aW9uID0gZnVuY3Rpb25UZW1wbGF0ZS0+R2V0RnVuY3Rpb24o
KTsKKyAgICAgICAgdjhGdW5jdGlvbi0+U2V0TmFtZSh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+OjpD
YXN0KGtleSkpOworICAgICAgICByZXR1cm4gdjhGdW5jdGlvbjsKKyAgICB9CisKKyAgICByZXR1
cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBu
cE9iamVjdE5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgTlBJZGVudGlmaWVyIGlkZW50aWZp
ZXIgPSBnZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUpOworICAgIHJldHVybiBucE9iamVjdEdldFBy
b3BlcnR5KGluZm8uSG9sZGVyKCksIGlkZW50aWZpZXIsIG5hbWUpOworfQorCit2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gbnBPYmplY3RJbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgTlBJZGVudGlmaWVyIGlkZW50
aWZpZXIgPSBOUE5fR2V0SW50SWRlbnRpZmllcihpbmRleCk7CisgICAgcmV0dXJuIG5wT2JqZWN0
R2V0UHJvcGVydHkoaW5mby5Ib2xkZXIoKSwgaWRlbnRpZmllciwgdjg6Ok51bWJlcjo6TmV3KGlu
ZGV4KSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBucE9iamVjdEdldE5hbWVkUHJvcGVy
dHkodjg6OkxvY2FsPHY4OjpPYmplY3Q+IHNlbGYsIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
KQoreworICAgIE5QSWRlbnRpZmllciBpZGVudGlmaWVyID0gZ2V0U3RyaW5nSWRlbnRpZmllcihu
YW1lKTsKKyAgICByZXR1cm4gbnBPYmplY3RHZXRQcm9wZXJ0eShzZWxmLCBpZGVudGlmaWVyLCBu
YW1lKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5wT2JqZWN0R2V0SW5kZXhlZFByb3Bl
cnR5KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBzZWxmLCB1aW50MzJfdCBpbmRleCkKK3sKKyAgICBO
UElkZW50aWZpZXIgaWRlbnRpZmllciA9IE5QTl9HZXRJbnRJZGVudGlmaWVyKGluZGV4KTsKKyAg
ICByZXR1cm4gbnBPYmplY3RHZXRQcm9wZXJ0eShzZWxmLCBpZGVudGlmaWVyLCB2ODo6TnVtYmVy
OjpOZXcoaW5kZXgpKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBucE9iamVj
dFNldFByb3BlcnR5KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBzZWxmLCBOUElkZW50aWZpZXIgaWRl
bnRpZmllciwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUpCit7CisgICAgTlBPYmplY3QqIG5w
T2JqZWN0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE5QT2JqZWN0PihWOENsYXNz
SW5kZXg6Ok5QT0JKRUNULCBzZWxmKTsKKworICAgIC8vIFZlcmlmeSB0aGF0IG91ciB3cmFwcGVy
IHdhc24ndCB1c2luZyBhIE5QT2JqZWN0IHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gZGVsZXRlZC4K
KyAgICBpZiAoIW5wT2JqZWN0IHx8ICFfTlBOX0lzQWxpdmUobnBPYmplY3QpKSB7CisgICAgICAg
IHRocm93RXJyb3IoIk5QT2JqZWN0IGRlbGV0ZWQiLCBWOFByb3h5OjpSZWZlcmVuY2VFcnJvcik7
CisgICAgICAgIHJldHVybiB2YWx1ZTsgIC8vIEludGVyY2VwdGVkLCBidXQgYW4gZXhjZXB0aW9u
IHdhcyB0aHJvd24uCisgICAgfQorCisgICAgaWYgKG5wT2JqZWN0LT5fY2xhc3MtPmhhc1Byb3Bl
cnR5ICYmIG5wT2JqZWN0LT5fY2xhc3MtPmhhc1Byb3BlcnR5KG5wT2JqZWN0LCBpZGVudGlmaWVy
KQorICAgICAgICAmJiBucE9iamVjdC0+X2NsYXNzLT5zZXRQcm9wZXJ0eSkgeworCisgICAgICAg
IE5QVmFyaWFudCBucFZhbHVlOworICAgICAgICBWT0lEX1RPX05QVkFSSUFOVChucFZhbHVlKTsK
KyAgICAgICAgY29udmVydFY4T2JqZWN0VG9OUFZhcmlhbnQodmFsdWUsIG5wT2JqZWN0LCAmbnBW
YWx1ZSk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IG5wT2JqZWN0LT5fY2xhc3MtPnNldFByb3Bl
cnR5KG5wT2JqZWN0LCBpZGVudGlmaWVyLCAmbnBWYWx1ZSk7CisgICAgICAgIE5QTl9SZWxlYXNl
VmFyaWFudFZhbHVlKCZucFZhbHVlKTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MpCisgICAgICAgICAg
ICByZXR1cm4gdmFsdWU7IC8vIEludGVyY2VwdCB0aGUgY2FsbC4KKyAgICB9CisgICAgcmV0dXJu
IHY4OjpMb2NhbDx2ODo6VmFsdWU+KCk7IC8vIERvIG5vdCBpbnRlcmNlcHQgdGhlIGNhbGwuCit9
CisKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5wT2JqZWN0TmFtZWRQcm9wZXJ0eVNldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgTlBJZGVudGlmaWVyIGlkZW50aWZp
ZXIgPSBnZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUpOworICAgIHJldHVybiBucE9iamVjdFNldFBy
b3BlcnR5KGluZm8uSG9sZGVyKCksIGlkZW50aWZpZXIsIHZhbHVlKTsKK30KKworCit2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gbnBPYmplY3RJbmRleGVkUHJvcGVydHlTZXR0ZXIodWludDMyX3QgaW5k
ZXgsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQoreworICAgIE5QSWRlbnRpZmllciBpZGVudGlmaWVyID0gTlBOX0dldEludElkZW50aWZp
ZXIoaW5kZXgpOworICAgIHJldHVybiBucE9iamVjdFNldFByb3BlcnR5KGluZm8uSG9sZGVyKCks
IGlkZW50aWZpZXIsIHZhbHVlKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5wT2JqZWN0
U2V0TmFtZWRQcm9wZXJ0eSh2ODo6TG9jYWw8djg6Ok9iamVjdD4gc2VsZiwgdjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlKQoreworICAgIE5QSWRl
bnRpZmllciBpZGVudGlmaWVyID0gZ2V0U3RyaW5nSWRlbnRpZmllcihuYW1lKTsKKyAgICByZXR1
cm4gbnBPYmplY3RTZXRQcm9wZXJ0eShzZWxmLCBpZGVudGlmaWVyLCB2YWx1ZSk7Cit9CisKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiBucE9iamVjdFNldEluZGV4ZWRQcm9wZXJ0eSh2ODo6TG9jYWw8
djg6Ok9iamVjdD4gc2VsZiwgdWludDMyX3QgaW5kZXgsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZh
bHVlKQoreworICAgIE5QSWRlbnRpZmllciBpZGVudGlmaWVyID0gTlBOX0dldEludElkZW50aWZp
ZXIoaW5kZXgpOworICAgIHJldHVybiBucE9iamVjdFNldFByb3BlcnR5KHNlbGYsIGlkZW50aWZp
ZXIsIHZhbHVlKTsKK30KKworCitzdGF0aWMgdm9pZCB3ZWFrTlBPYmplY3RDYWxsYmFjayh2ODo6
UGVyc2lzdGVudDx2ODo6VmFsdWU+LCB2b2lkKiBwYXJhbWV0ZXIpOworCitzdGF0aWMgRE9NV3Jh
cHBlck1hcDxOUE9iamVjdD4gc3RhdGljTlBPYmplY3RNYXAoJndlYWtOUE9iamVjdENhbGxiYWNr
KTsKKworc3RhdGljIHZvaWQgd2Vha05QT2JqZWN0Q2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6
OlZhbHVlPiBvYmplY3QsIHZvaWQqIHBhcmFtZXRlcikKK3sKKyAgICBOUE9iamVjdCogbnBPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxOUE9iamVjdCo+KHBhcmFtZXRlcik7CisgICAgQVNTRVJUKHN0YXRp
Y05QT2JqZWN0TWFwLmNvbnRhaW5zKG5wT2JqZWN0KSk7CisgICAgQVNTRVJUKG5wT2JqZWN0KTsK
KworICAgIC8vIE11c3QgcmVtb3ZlIGZyb20gb3VyIG1hcCBiZWZvcmUgY2FsbGluZyBOUE5fUmVs
ZWFzZU9iamVjdCgpLiBOUE5fUmVsZWFzZU9iamVjdCBjYW4gY2FsbCBGb3JnZXRWOE9iamVjdEZv
ck5QT2JqZWN0LCB3aGljaAorICAgIC8vIHVzZXMgdGhlIHRhYmxlIGFzIHdlbGwuCisgICAgc3Rh
dGljTlBPYmplY3RNYXAuZm9yZ2V0KG5wT2JqZWN0KTsKKworICAgIGlmIChfTlBOX0lzQWxpdmUo
bnBPYmplY3QpKQorICAgICAgICBOUE5fUmVsZWFzZU9iamVjdChucE9iamVjdCk7Cit9CisKKwor
djg6OkxvY2FsPHY4OjpPYmplY3Q+IGNyZWF0ZVY4T2JqZWN0Rm9yTlBPYmplY3QoTlBPYmplY3Qq
IG9iamVjdCwgTlBPYmplY3QqIHJvb3QpCit7CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBucE9iamVjdERlc2M7CisKKyAgICBBU1NFUlQodjg6OkNvbnRl
eHQ6OkluQ29udGV4dCgpKTsKKworICAgIC8vIElmIHRoaXMgaXMgYSB2OCBvYmplY3QsIGp1c3Qg
cmV0dXJuIGl0LgorICAgIGlmIChvYmplY3QtPl9jbGFzcyA9PSBucFNjcmlwdE9iamVjdENsYXNz
KSB7CisgICAgICAgIFY4TlBPYmplY3QqIHY4TlBPYmplY3QgPSByZWludGVycHJldF9jYXN0PFY4
TlBPYmplY3QqPihvYmplY3QpOworICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpPYmplY3Q+
OjpOZXcodjhOUE9iamVjdC0+djhPYmplY3QpOworICAgIH0KKworICAgIC8vIElmIHdlJ3ZlIGFs
cmVhZHkgd3JhcHBlZCB0aGlzIG9iamVjdCwganVzdCByZXR1cm4gaXQuCisgICAgaWYgKHN0YXRp
Y05QT2JqZWN0TWFwLmNvbnRhaW5zKG9iamVjdCkpCisgICAgICAgIHJldHVybiB2ODo6TG9jYWw8
djg6Ok9iamVjdD46Ok5ldyhzdGF0aWNOUE9iamVjdE1hcC5nZXQob2JqZWN0KSk7CisKKyAgICAv
LyBGSVhNRTogd2Ugc2hvdWxkIGNyZWF0ZSBhIFdyYXBwZXIgdHlwZSBhcyBhIHN1YmNsYXNzIG9m
IEpTT2JqZWN0LiBJdCBoYXMgdHdvIGludGVybmFsIGZpZWxkcywgZmllbGQgMCBpcyB0aGUgd3Jh
cHBlZAorICAgIC8vIHBvaW50ZXIsIGFuZCBmaWVsZCAxIGlzIHRoZSB0eXBlLiBUaGVyZSBzaG91
bGQgYmUgYW4gYXBpIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB1bnVzZWQgdHlwZSBpZC4gVGhlIHNh
bWUgV3JhcHBlciB0eXBlCisgICAgLy8gY2FuIGJlIHVzZWQgYnkgRE9NIGJpbmRpbmdzLgorICAg
IGlmIChucE9iamVjdERlc2MuSXNFbXB0eSgpKSB7CisgICAgICAgIG5wT2JqZWN0RGVzYyA9IHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4OjpGdW5jdGlvblRlbXBs
YXRlOjpOZXcoKSk7CisgICAgICAgIG5wT2JqZWN0RGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5T
ZXRJbnRlcm5hbEZpZWxkQ291bnQoVjhDdXN0b206OmtOUE9iamVjdEludGVybmFsRmllbGRDb3Vu
dCk7CisgICAgICAgIG5wT2JqZWN0RGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXROYW1lZFBy
b3BlcnR5SGFuZGxlcihucE9iamVjdE5hbWVkUHJvcGVydHlHZXR0ZXIsIG5wT2JqZWN0TmFtZWRQ
cm9wZXJ0eVNldHRlcik7CisgICAgICAgIG5wT2JqZWN0RGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgp
LT5TZXRJbmRleGVkUHJvcGVydHlIYW5kbGVyKG5wT2JqZWN0SW5kZXhlZFByb3BlcnR5R2V0dGVy
LCBucE9iamVjdEluZGV4ZWRQcm9wZXJ0eVNldHRlcik7CisgICAgICAgIG5wT2JqZWN0RGVzYy0+
SW5zdGFuY2VUZW1wbGF0ZSgpLT5TZXRDYWxsQXNGdW5jdGlvbkhhbmRsZXIobnBPYmplY3RJbnZv
a2VEZWZhdWx0SGFuZGxlcik7CisgICAgfQorCisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+
IHY4RnVuY3Rpb24gPSBucE9iamVjdERlc2MtPkdldEZ1bmN0aW9uKCk7CisgICAgdjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IHZhbHVlID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKHY4RnVuY3Rp
b24pOworCisgICAgLy8gSWYgd2Ugd2VyZSB1bmFibGUgdG8gYWxsb2NhdGUgdGhlIGluc3RhbmNl
LCB3ZSBhdm9pZCB3cmFwcGluZyBhbmQgcmVnaXN0ZXJpbmcgdGhlIE5QIG9iamVjdC4KKyAgICBp
ZiAodmFsdWUuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICB3cmFwTlBP
YmplY3QodmFsdWUsIG9iamVjdCk7CisKKyAgICAvLyBLSlMgcmV0YWlucyB0aGUgb2JqZWN0IGFz
IHBhcnQgb2YgaXRzIHdyYXBwZXIgKHNlZSBCaW5kaW5nczo6Q0luc3RhbmNlKS4KKyAgICBOUE5f
UmV0YWluT2JqZWN0KG9iamVjdCk7CisKKyAgICBfTlBOX1JlZ2lzdGVyT2JqZWN0KG9iamVjdCwg
cm9vdCk7CisKKyAgICAvLyBNYWludGFpbiBhIHdlYWsgcG9pbnRlciBmb3Igdjggc28gd2UgY2Fu
IGNsZWFudXAgdGhlIG9iamVjdC4KKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3ZWFr
UmVmID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh2YWx1ZSk7CisgICAgc3RhdGlj
TlBPYmplY3RNYXAuc2V0KG9iamVjdCwgd2Vha1JlZik7CisKKyAgICByZXR1cm4gdmFsdWU7Cit9
CisKK3ZvaWQgZm9yZ2V0VjhPYmplY3RGb3JOUE9iamVjdChOUE9iamVjdCogb2JqZWN0KQorewor
ICAgIGlmIChzdGF0aWNOUE9iamVjdE1hcC5jb250YWlucyhvYmplY3QpKSB7CisgICAgICAgIHY4
OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4g
aGFuZGxlKHN0YXRpY05QT2JqZWN0TWFwLmdldChvYmplY3QpKTsKKyAgICAgICAgV2ViQ29yZTo6
VjhQcm94eTo6c2V0RE9NV3JhcHBlcihoYW5kbGUsIFdlYkNvcmU6OlY4Q2xhc3NJbmRleDo6TlBP
QkpFQ1QsIDApOworICAgICAgICBzdGF0aWNOUE9iamVjdE1hcC5mb3JnZXQob2JqZWN0KTsKKyAg
ICAgICAgTlBOX1JlbGVhc2VPYmplY3Qob2JqZWN0KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhO
UE9iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNzU5YjUKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuaApAQCAtMCww
ICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOE5QT2JqZWN0X2gKKyNkZWZpbmUg
VjhOUE9iamVjdF9oCisKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L25w
YXBpL2JpbmRpbmdzL25wcnVudGltZS5oIgorCisvLyBUaGVzZSBmdW5jdGlvbnMgY2FuIGJlIHJl
cGxhY2VkIGJ5IG5vcm1hbCBKUyBvcGVyYXRpb24uCisvLyBHZXR0ZXJzCit2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gbnBPYmplY3ROYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJik7Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
bnBPYmplY3RJbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mKTsKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBucE9iamVjdEdldE5hbWVkUHJv
cGVydHkodjg6OkxvY2FsPHY4OjpPYmplY3Q+IHNlbGYsIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lKTsKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBucE9iamVjdEdldEluZGV4ZWRQcm9wZXJ0eSh2
ODo6TG9jYWw8djg6Ok9iamVjdD4gc2VsZiwgdWludDMyX3QgaW5kZXgpOworCisvLyBTZXR0ZXJz
Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbnBPYmplY3ROYW1lZFByb3BlcnR5U2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYpOwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5wT2JqZWN0SW5kZXhlZFByb3Bl
cnR5U2V0dGVyKHVpbnQzMl90IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJik7Cit2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gbnBPYmplY3RTZXROYW1lZFByb3BlcnR5KHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiBzZWxmLCB2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpW
YWx1ZT4pOwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5wT2JqZWN0U2V0SW5kZXhlZFByb3BlcnR5
KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBzZWxmLCB1aW50MzJfdCBpbmRleCwgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4pOworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbnBPYmplY3RJbnZva2VEZWZhdWx0
SGFuZGxlcihjb25zdCB2ODo6QXJndW1lbnRzJik7CisKKy8vIEdldCBhIHdyYXBwZXIgZm9yIGEg
TlBPYmplY3QuCisvLyBJZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgd3JhcHBlZCwgdGhlIHByZS1l
eGlzdGluZyB3cmFwcGVyIHdpbGwgYmUgcmV0dXJuZWQuIElmIHRoZSBvYmplY3QgaXMgbm90IHdy
YXBwZWQsIHdyYXAgaXQsIGFuZAorLy8gZ2l2ZSBWOCBhIHdlYWsgcmVmZXJlbmNlIHRvIHRoZSB3
cmFwcGVyIHdoaWNoIHdpbGwgY2xlYW51cCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIEpTIHJlZmVy
ZW5jZXMgdG8gdGhlIG9iamVjdC4KK3Y4OjpMb2NhbDx2ODo6T2JqZWN0PiBjcmVhdGVWOE9iamVj
dEZvck5QT2JqZWN0KE5QT2JqZWN0KiwgTlBPYmplY3QqIHJvb3QpOworCisvLyBUZWxsIFY4IHRv
IGZvcmNpYmx5IHJlbW92ZSBhbiBvYmplY3QuCisvLyBUaGlzIGlzIHVzZWQgYXQgcGx1Z2luIHRl
YXJkb3duIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gYWdncmVzc2l2ZWx5IHVubG9hZCB0aGUgcGx1
Z2luIGxpYnJhcnkuIEFmdGVyIGNhbGxpbmcgdGhpcworLy8gZnVuY3Rpb24sIHRoZSBwZXJzaXN0
ZW50IGhhbmRsZSB0byB0aGUgd3JhcHBlciB3aWxsIGJlIGdvbmUsIGFuZCB0aGUgd3JhcHBlZCBO
UE9iamVjdCB3aWxsIGJlIHJlbW92ZWQgc28gdGhhdCBpdAorLy8gY2Fubm90IGJlIHJlZmVycmVk
IHRvLgordm9pZCBmb3JnZXRWOE9iamVjdEZvck5QT2JqZWN0KE5QT2JqZWN0Kik7CisKKyNlbmRp
ZiAvLyBWOE5QT2JqZWN0X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SFRNTFBsdWdJbkVsZW1lbnRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhIVE1MUGx1Z0luRWxlbWVudEN1c3RvbS5jcHAKaW5kZXggZWQ4NzllMy4uMzY3Nzk1YiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MUGx1Z0luRWxlbWVu
dEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MUGx1Z0lu
RWxlbWVudEN1c3RvbS5jcHAKQEAgLTM1LDExICszNSw5IEBACiAKICNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOE5QT2JqZWN0
LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogCi0vLyBGSVhNRTogVGhlIG5hbWUgb2YgdGhpcyBm
aWxlIHdpbGwgY2hhbmdlIG9uY2UgcmVmYWN0b3JpbmcgaXMgY29tcGxldGUKLSNpbmNsdWRlICJ2
OF9ucG9iamVjdC5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIE5BTUVEX1BST1BFUlRZX0dF
VFRFUihIVE1MUGx1Z0luRWxlbWVudCkKQEAgLTU0LDcgKzUyLDcgQEAgTkFNRURfUFJPUEVSVFlf
R0VUVEVSKEhUTUxQbHVnSW5FbGVtZW50KQogICAgIGlmIChpbnN0YW5jZS5Jc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogCi0gICAgcmV0dXJuIE5Q
T2JqZWN0R2V0TmFtZWRQcm9wZXJ0eShpbnN0YW5jZSwgbmFtZSk7CisgICAgcmV0dXJuIG5wT2Jq
ZWN0R2V0TmFtZWRQcm9wZXJ0eShpbnN0YW5jZSwgbmFtZSk7CiB9CiAKIE5BTUVEX1BST1BFUlRZ
X1NFVFRFUihIVE1MUGx1Z0luRWxlbWVudCkKQEAgLTY5LDEzICs2NywxMyBAQCBOQU1FRF9QUk9Q
RVJUWV9TRVRURVIoSFRNTFBsdWdJbkVsZW1lbnQpCiAgICAgaWYgKGluc3RhbmNlLklzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAKLSAgICByZXR1
cm4gTlBPYmplY3RTZXROYW1lZFByb3BlcnR5KGluc3RhbmNlLCBuYW1lLCB2YWx1ZSk7CisgICAg
cmV0dXJuIG5wT2JqZWN0U2V0TmFtZWRQcm9wZXJ0eShpbnN0YW5jZSwgbmFtZSwgdmFsdWUpOwog
fQogCiBDQUxMQkFDS19GVU5DX0RFQ0woSFRNTFBsdWdJbkVsZW1lbnQpCiB7CiAgICAgSU5DX1NU
QVRTKCJET00uSFRNTFBsdWdpbkVsZW1lbnQoKSIpOwotICAgIHJldHVybiBOUE9iamVjdEludm9r
ZURlZmF1bHRIYW5kbGVyKGFyZ3MpOworICAgIHJldHVybiBucE9iamVjdEludm9rZURlZmF1bHRI
YW5kbGVyKGFyZ3MpOwogfQogCiBJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihIVE1MUGx1Z0luRWxl
bWVudCkKQEAgLTkwLDcgKzg4LDcgQEAgSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoSFRNTFBsdWdJ
bkVsZW1lbnQpCiAgICAgaWYgKGluc3RhbmNlLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG5v
dEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAKLSAgICByZXR1cm4gTlBPYmplY3RHZXRJbmRleGVk
UHJvcGVydHkoaW5zdGFuY2UsIGluZGV4KTsKKyAgICByZXR1cm4gbnBPYmplY3RHZXRJbmRleGVk
UHJvcGVydHkoaW5zdGFuY2UsIGluZGV4KTsKIH0KIAogSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIo
SFRNTFBsdWdJbkVsZW1lbnQpCkBAIC0xMDUsNyArMTAzLDcgQEAgSU5ERVhFRF9QUk9QRVJUWV9T
RVRURVIoSFRNTFBsdWdJbkVsZW1lbnQpCiAgICAgaWYgKGluc3RhbmNlLklzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAKLSAgICByZXR1cm4gTlBP
YmplY3RTZXRJbmRleGVkUHJvcGVydHkoaW5zdGFuY2UsIGluZGV4LCB2YWx1ZSk7CisgICAgcmV0
dXJuIG5wT2JqZWN0U2V0SW5kZXhlZFByb3BlcnR5KGluc3RhbmNlLCBpbmRleCwgdmFsdWUpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="16915"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32571</attachid>
            <date>2009-07-10 12:23:53 -0700</date>
            <delta_ts>2009-07-10 13:29:38 -0700</delta_ts>
            <desc>Address Dimitiri&apos;s comments.  Also update with latest changes downstream due to V8Proxy refactor</desc>
            <filename>v8npobject.patch</filename>
            <type>text/plain</type>
            <size>22927</size>
            <attacher name="Albert J. Wong">ajwong</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjA3YzkzMS4uZjQ0Njc5NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAwOS0wNy0wOSAgQWxiZXJ0IEouIFdv
bmcgIDxhandvbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVwc3RyZWFtIFY4TlBPYmplY3QuaCBhbmQgVjhOUE9iamVjdC5j
cHAuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzEw
MworCisgICAgICAgIFRoaXMganVzdCB1cHN0cmVhbXMgdGhlIGZpbGVzIGZyb20gdGhlIGNocm9t
aXVtIGNvZGUgYmFzZS4gT25seQorICAgICAgICBtaW5vciBjaGFuZ2VzIHRvIGZvcm1hdHRpbmcg
YW5kIHNpbWlsYXIgd2VyZSBkb25lLCBzbyBubyB0ZXN0aW5nCisgICAgICAgIGlzIHJlcXVpcmVk
IGJlY2F1c2Ugbm90aGluZyByZWFsbHkgY2hhbmdlZC4gIENvZGUgdmVyaWZpZWQgdG8gY29tcGls
ZS4KKworICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6YmluZFRvV2luZG93T2JqZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lk
Z2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcDogQWRkZWQuCisgICAg
ICAgIChucE9iamVjdEludm9rZUltcGwpOgorICAgICAgICAobnBPYmplY3RNZXRob2RIYW5kbGVy
KToKKyAgICAgICAgKG5wT2JqZWN0SW52b2tlRGVmYXVsdEhhbmRsZXIpOgorICAgICAgICAod2Vh
a1RlbXBsYXRlQ2FsbGJhY2spOgorICAgICAgICAobnBPYmplY3RHZXRQcm9wZXJ0eSk6CisgICAg
ICAgIChucE9iamVjdE5hbWVkUHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAobnBPYmplY3RJbmRl
eGVkUHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAobnBPYmplY3RHZXROYW1lZFByb3BlcnR5KToK
KyAgICAgICAgKG5wT2JqZWN0R2V0SW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKG5wT2JqZWN0
U2V0UHJvcGVydHkpOgorICAgICAgICAobnBPYmplY3ROYW1lZFByb3BlcnR5U2V0dGVyKToKKyAg
ICAgICAgKG5wT2JqZWN0SW5kZXhlZFByb3BlcnR5U2V0dGVyKToKKyAgICAgICAgKG5wT2JqZWN0
U2V0TmFtZWRQcm9wZXJ0eSk6CisgICAgICAgIChucE9iamVjdFNldEluZGV4ZWRQcm9wZXJ0eSk6
CisgICAgICAgICh3ZWFrTlBPYmplY3RDYWxsYmFjayk6CisgICAgICAgIChjcmVhdGVWOE9iamVj
dEZvck5QT2JqZWN0KToKKyAgICAgICAgKGZvcmdldFY4T2JqZWN0Rm9yTlBPYmplY3QpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuaDogQWRkZWQuCisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTFBsdWdJbkVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TkFNRURfUFJPUEVSVFlfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6Ok5BTUVEX1BS
T1BFUlRZX1NFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgor
ICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAoV2Vi
Q29yZTo6SU5ERVhFRF9QUk9QRVJUWV9TRVRURVIpOgorCiAyMDA5LTA3LTA5ICBDaHJpcyBGbGVp
emFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIu
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCBhMTE2
Yjg1Li4wNGFhYzFkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRy
b2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAK
QEAgLTI0MCw3ICsyNDAsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmJpbmRUb1dpbmRvd09i
amVjdChGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYga2V5LCBOUE9iagogCiAgICAgdjg6OkNv
bnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHZhbHVlID0gQ3JlYXRlVjhPYmplY3RGb3JOUE9iamVjdChvYmplY3QsIDApOworICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gdmFsdWUgPSBjcmVhdGVWOE9iamVjdEZvck5QT2JqZWN0KG9i
amVjdCwgMCk7CiAKICAgICAvLyBBdHRhY2ggdG8gdGhlIGdsb2JhbCBvYmplY3QuCiAgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwgPSB2OENvbnRleHQtPkdsb2JhbCgpOwpAQCAtMzA0
LDcgKzMwNCw3IEBAIFBhc3NTY3JpcHRJbnN0YW5jZSBTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVT
Y3JpcHRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqIHdpZGdlCiAgICAgLy8gTlBPYmplY3QgYXMg
cGFydCBvZiBpdHMgd3JhcHBlci4gSG93ZXZlciwgYmVmb3JlIGFjY2Vzc2luZyB0aGUgb2JqZWN0
CiAgICAgLy8gaXQgbXVzdCBjb25zdWx0IHRoZSBOUE5fUmVnaXN0cnkuCiAKLSAgICB2ODo6TG9j
YWw8djg6Ok9iamVjdD4gd3JhcHBlciA9IENyZWF0ZVY4T2JqZWN0Rm9yTlBPYmplY3QobnBPYmpl
Y3QsIDApOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gY3JlYXRlVjhPYmpl
Y3RGb3JOUE9iamVjdChucE9iamVjdCwgMCk7CiAKICAgICAvLyBUcmFjayB0aGUgcGx1Z2luIG9i
amVjdC4gV2UndmUgYmVlbiBnaXZlbiBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0LgogICAgIG1f
cGx1Z2luT2JqZWN0cy5zZXQod2lkZ2V0LCBucE9iamVjdCk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2Jq
ZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2Q2NjZiCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcApAQCAtMCww
ICsxLDM1MCBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisqIG1ldDoKKyoKKyogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorKiBkaXN0cmlidXRpb24uCisqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVjhOUE9iamVjdC5oIgorCisjaW5jbHVk
ZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJOUFY4T2JqZWN0LmgiCisjaW5jbHVk
ZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhET01NYXAuaCIKKyNpbmNsdWRlICJW
OEhUTUxBcHBsZXRFbGVtZW50LmgiCisjaW5jbHVkZSAiVjhIVE1MRW1iZWRFbGVtZW50LmgiCisj
aW5jbHVkZSAiVjhIVE1MT2JqZWN0RWxlbWVudC5oIgorI2luY2x1ZGUgIlY4SGVscGVycy5oIgor
I2luY2x1ZGUgIlY4TlBVdGlscy5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJu
cHJ1bnRpbWVfcHJpdi5oIgorI2luY2x1ZGUgInd0Zi9Pd25BcnJheVB0ci5oIgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworZW51bSBJbnZva2VGdW5jdGlvblR5cGUgeworICAgIEludm9r
ZU1ldGhvZCA9IDEsCisgICAgSW52b2tlQ29uc3RydWN0ID0gMiwKKyAgICBJbnZva2VEZWZhdWx0
ID0gMworfTsKKworLy8gRklYTUU6IG5lZWQgY29tbWVudHMuCisvLyBQYXJhbXM6IGhvbGRlciBj
b3VsZCBiZSBIVE1MRW1iZWRFbGVtZW50IG9yIE5QT2JqZWN0CitzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IG5wT2JqZWN0SW52b2tlSW1wbChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBJ
bnZva2VGdW5jdGlvblR5cGUgZnVuY3Rpb25JZCkKK3sKKyAgICBOUE9iamVjdCogbnBPYmplY3Q7
CisKKyAgICAvLyBUaGVzZSB0aHJlZSB0eXBlcyBhcmUgc3VidHlwZXMgb2YgSFRNTFBsdWdJbkVs
ZW1lbnQuCisgICAgaWYgKFY4SFRNTEFwcGxldEVsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZ3MuSG9s
ZGVyKCkpIHx8IFY4SFRNTEVtYmVkRWxlbWVudDo6SGFzSW5zdGFuY2UoYXJncy5Ib2xkZXIoKSkK
KyAgICAgICAgfHwgVjhIVE1MT2JqZWN0RWxlbWVudDo6SGFzSW5zdGFuY2UoYXJncy5Ib2xkZXIo
KSkpIHsKKyAgICAgICAgLy8gVGhlIGhvbGRlciBvYmplY3QgaXMgYSBzdWJ0eXBlIG9mIEhUTUxQ
bHVnSW5FbGVtZW50LgorICAgICAgICBIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTFBsdWdJbkVsZW1lbnQ+KGFyZ3Mu
SG9sZGVyKCkpOworICAgICAgICBTY3JpcHRJbnN0YW5jZSBzY3JpcHRJbnN0YW5jZSA9IGVsZW1l
bnQtPmdldEluc3RhbmNlKCk7CisgICAgICAgIGlmIChzY3JpcHRJbnN0YW5jZSkKKyAgICAgICAg
ICAgIG5wT2JqZWN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TlBPYmpl
Y3Q+KFY4Q2xhc3NJbmRleDo6TlBPQkpFQ1QsIHNjcmlwdEluc3RhbmNlLT5pbnN0YW5jZSgpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbnBPYmplY3QgPSAwOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIFRoZSBob2xkZXIgb2JqZWN0IGlzIG5vdCBhIHN1YnR5cGUgb2YgSFRNTFBsdWdJ
bkVsZW1lbnQsIGl0IG11c3QgYmUgYW4gTlBPYmplY3Qgd2hpY2ggaGFzIHRocmVlCisgICAgICAg
IC8vIGludGVybmFsIGZpZWxkcy4KKyAgICAgICAgaWYgKGFyZ3MuSG9sZGVyKCktPkludGVybmFs
RmllbGRDb3VudCgpICE9IFY4Q3VzdG9tOjprTlBPYmplY3RJbnRlcm5hbEZpZWxkQ291bnQpCisg
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5QTWV0aG9kIGNhbGxlZCBvbiBub24tTlBPYmpl
Y3QiLCBWOFByb3h5OjpSZWZlcmVuY2VFcnJvcik7CisKKyAgICAgICAgbnBPYmplY3QgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxOUE9iamVjdD4oVjhDbGFzc0luZGV4OjpO
UE9CSkVDVCwgYXJncy5Ib2xkZXIoKSk7CisgICAgfQorCisgICAgLy8gVmVyaWZ5IHRoYXQgb3Vy
IHdyYXBwZXIgd2Fzbid0IHVzaW5nIGEgTlBPYmplY3Qgd2hpY2ggaGFzIGFscmVhZHkgYmVlbiBk
ZWxldGVkLgorICAgIGlmICghbnBPYmplY3QgfHwgIV9OUE5fSXNBbGl2ZShucE9iamVjdCkpCisg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOUE9iamVjdCBkZWxldGVkIiwgVjhQcm94eTo6UmVm
ZXJlbmNlRXJyb3IpOworCisgICAgLy8gV3JhcCB1cCBwYXJhbWV0ZXJzLgorICAgIGludCBudW1B
cmdzID0gYXJncy5MZW5ndGgoKTsKKyAgICBPd25BcnJheVB0cjxOUFZhcmlhbnQ+IG5wQXJncyhu
ZXcgTlBWYXJpYW50W251bUFyZ3NdKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQXJn
czsgaSsrKQorICAgICAgICBjb252ZXJ0VjhPYmplY3RUb05QVmFyaWFudChhcmdzW2ldLCBucE9i
amVjdCwgJm5wQXJnc1tpXSk7CisKKyAgICBOUFZhcmlhbnQgcmVzdWx0OworICAgIFZPSURfVE9f
TlBWQVJJQU5UKHJlc3VsdCk7CisKKyAgICBzd2l0Y2ggKGZ1bmN0aW9uSWQpIHsKKyAgICBjYXNl
IEludm9rZU1ldGhvZDoKKyAgICAgICAgaWYgKG5wT2JqZWN0LT5fY2xhc3MtPmludm9rZSkgewor
ICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBmdW5jdGlvbk5hbWUodjg6OlN0cmlu
Zzo6Q2FzdCgqYXJncy5EYXRhKCkpKTsKKyAgICAgICAgICAgIE5QSWRlbnRpZmllciBpZGVudGlm
aWVyID0gZ2V0U3RyaW5nSWRlbnRpZmllcihmdW5jdGlvbk5hbWUpOworICAgICAgICAgICAgbnBP
YmplY3QtPl9jbGFzcy0+aW52b2tlKG5wT2JqZWN0LCBpZGVudGlmaWVyLCBucEFyZ3MuZ2V0KCks
IG51bUFyZ3MsICZyZXN1bHQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SW52b2tlQ29uc3RydWN0OgorICAgICAgICBpZiAobnBPYmplY3QtPl9jbGFzcy0+Y29uc3RydWN0
KQorICAgICAgICAgICAgbnBPYmplY3QtPl9jbGFzcy0+Y29uc3RydWN0KG5wT2JqZWN0LCBucEFy
Z3MuZ2V0KCksIG51bUFyZ3MsICZyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElu
dm9rZURlZmF1bHQ6CisgICAgICAgIGlmIChucE9iamVjdC0+X2NsYXNzLT5pbnZva2VEZWZhdWx0
KQorICAgICAgICAgICAgbnBPYmplY3QtPl9jbGFzcy0+aW52b2tlRGVmYXVsdChucE9iamVjdCwg
bnBBcmdzLmdldCgpLCBudW1BcmdzLCAmcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZm9yIChpbnQgaT0wOyBpIDwgbnVt
QXJnczsgaSsrKQorICAgICAgICBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmbnBBcmdzW2ldKTsK
KworICAgIC8vIFVud3JhcCByZXR1cm4gdmFsdWVzLgorICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiByZXR1cm5WYWx1ZSA9IGNvbnZlcnROUFZhcmlhbnRUb1Y4T2JqZWN0KCZyZXN1bHQsIG5wT2Jq
ZWN0KTsKKyAgICBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmcmVzdWx0KTsKKworICAgIHJldHVy
biByZXR1cm5WYWx1ZTsKK30KKworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbnBPYmplY3RNZXRo
b2RIYW5kbGVyKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIG5wT2Jq
ZWN0SW52b2tlSW1wbChhcmdzLCBJbnZva2VNZXRob2QpOworfQorCisKK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiBucE9iamVjdEludm9rZURlZmF1bHRIYW5kbGVyKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpCit7CisgICAgaWYgKGFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisgICAgICAgIHJldHVy
biBucE9iamVjdEludm9rZUltcGwoYXJncywgSW52b2tlQ29uc3RydWN0KTsKKyAgICBlbHNlCisg
ICAgICAgIHJldHVybiBucE9iamVjdEludm9rZUltcGwoYXJncywgSW52b2tlRGVmYXVsdCk7Cit9
CisKKworc3RhdGljIHZvaWQgd2Vha1RlbXBsYXRlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6
OlZhbHVlPiwgdm9pZCogcGFyYW1ldGVyKTsKKworLy8gTlBJZGVudGlmaWVyIGlzIFByaXZhdGVJ
ZGVudGlmaWVyKi4KK3N0YXRpYyBXZWFrUmVmZXJlbmNlTWFwPFByaXZhdGVJZGVudGlmaWVyLCB2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gc3RhdGljVGVtcGxhdGVNYXAoJndlYWtUZW1wbGF0ZUNhbGxi
YWNrKTsKKworc3RhdGljIHZvaWQgd2Vha1RlbXBsYXRlQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8
djg6OlZhbHVlPiBvYmplY3QsIHZvaWQqIHBhcmFtZXRlcikKK3sKKyAgICBQcml2YXRlSWRlbnRp
ZmllciogaWRlbnRpZmllciA9IHN0YXRpY19jYXN0PFByaXZhdGVJZGVudGlmaWVyKj4ocGFyYW1l
dGVyKTsKKyAgICBBU1NFUlQoaWRlbnRpZmllcik7CisgICAgQVNTRVJUKHN0YXRpY1RlbXBsYXRl
TWFwLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKKworICAgIHN0YXRpY1RlbXBsYXRlTWFwLmZvcmdl
dChpZGVudGlmaWVyKTsKK30KKworCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5wT2Jq
ZWN0R2V0UHJvcGVydHkodjg6OkxvY2FsPHY4OjpPYmplY3Q+IHNlbGYsIE5QSWRlbnRpZmllciBp
ZGVudGlmaWVyLCB2ODo6TG9jYWw8djg6OlZhbHVlPiBrZXkpCit7CisgICAgTlBPYmplY3QqIG5w
T2JqZWN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TlBPYmplY3Q+KFY4
Q2xhc3NJbmRleDo6TlBPQkpFQ1QsIHNlbGYpOworCisgICAgLy8gVmVyaWZ5IHRoYXQgb3VyIHdy
YXBwZXIgd2Fzbid0IHVzaW5nIGEgTlBPYmplY3Qgd2hpY2gKKyAgICAvLyBoYXMgYWxyZWFkeSBi
ZWVuIGRlbGV0ZWQuCisgICAgaWYgKCFucE9iamVjdCB8fCAhX05QTl9Jc0FsaXZlKG5wT2JqZWN0
KSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5QT2JqZWN0IGRlbGV0ZWQiLCBWOFByb3h5
OjpSZWZlcmVuY2VFcnJvcik7CisKKworICAgIGlmIChucE9iamVjdC0+X2NsYXNzLT5oYXNQcm9w
ZXJ0eSAmJiBucE9iamVjdC0+X2NsYXNzLT5oYXNQcm9wZXJ0eShucE9iamVjdCwgaWRlbnRpZmll
cikKKyAgICAgICAgJiYgbnBPYmplY3QtPl9jbGFzcy0+Z2V0UHJvcGVydHkpIHsKKworICAgICAg
ICBOUFZhcmlhbnQgcmVzdWx0OworICAgICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOwor
ICAgICAgICBpZiAoIW5wT2JqZWN0LT5fY2xhc3MtPmdldFByb3BlcnR5KG5wT2JqZWN0LCBpZGVu
dGlmaWVyLCAmcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4oKTsKKworICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmV0dXJuVmFsdWUgPSBjb252
ZXJ0TlBWYXJpYW50VG9WOE9iamVjdCgmcmVzdWx0LCBucE9iamVjdCk7CisgICAgICAgIE5QTl9S
ZWxlYXNlVmFyaWFudFZhbHVlKCZyZXN1bHQpOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7
CisKKyAgICB9IGVsc2UgaWYgKGtleS0+SXNTdHJpbmcoKSAmJiBucE9iamVjdC0+X2NsYXNzLT5o
YXNNZXRob2QgJiYgbnBPYmplY3QtPl9jbGFzcy0+aGFzTWV0aG9kKG5wT2JqZWN0LCBpZGVudGlm
aWVyKSkgeworICAgICAgICBQcml2YXRlSWRlbnRpZmllciogaWQgPSBzdGF0aWNfY2FzdDxQcml2
YXRlSWRlbnRpZmllcio+KGlkZW50aWZpZXIpOworICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gZnVuY3Rpb25UZW1wbGF0ZSA9IHN0YXRpY1RlbXBsYXRlTWFwLmdl
dChpZCk7CisgICAgICAgIC8vIENhY2hlIHRlbXBsYXRlcyB1c2luZyBpZGVudGlmaWVyIGFzIHRo
ZSBrZXkuCisgICAgICAgIGlmIChmdW5jdGlvblRlbXBsYXRlLklzRW1wdHkoKSkgeworICAgICAg
ICAgICAgLy8gQ3JlYXRlIGEgbmV3IHRlbXBsYXRlLgorICAgICAgICAgICAgdjg6OkxvY2FsPHY4
OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wID0gdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldygpOwor
ICAgICAgICAgICAgdGVtcC0+U2V0Q2FsbEhhbmRsZXIobnBPYmplY3RNZXRob2RIYW5kbGVyLCBr
ZXkpOworICAgICAgICAgICAgZnVuY3Rpb25UZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPjo6TmV3KHRlbXApOworICAgICAgICAgICAgc3RhdGljVGVtcGxhdGVN
YXAuc2V0KGlkLCBmdW5jdGlvblRlbXBsYXRlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZ1
bmN0aW9uVGVtcGxhdGUgY2FjaGVzIGZ1bmN0aW9uIGZvciBlYWNoIGNvbnRleHQuCisgICAgICAg
IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IHY4RnVuY3Rpb24gPSBmdW5jdGlvblRlbXBsYXRlLT5H
ZXRGdW5jdGlvbigpOworICAgICAgICB2OEZ1bmN0aW9uLT5TZXROYW1lKHY4OjpIYW5kbGU8djg6
OlN0cmluZz46OkNhc3Qoa2V5KSk7CisgICAgICAgIHJldHVybiB2OEZ1bmN0aW9uOworICAgIH0K
KworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKwordjg6OkhhbmRsZTx2
ODo6VmFsdWU+IG5wT2JqZWN0TmFtZWRQcm9wZXJ0eUdldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBOUElkZW50aWZp
ZXIgaWRlbnRpZmllciA9IGdldFN0cmluZ0lkZW50aWZpZXIobmFtZSk7CisgICAgcmV0dXJuIG5w
T2JqZWN0R2V0UHJvcGVydHkoaW5mby5Ib2xkZXIoKSwgaWRlbnRpZmllciwgbmFtZSk7Cit9CisK
K3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBucE9iamVjdEluZGV4ZWRQcm9wZXJ0eUdldHRlcih1aW50
MzJfdCBpbmRleCwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBOUElkZW50
aWZpZXIgaWRlbnRpZmllciA9IE5QTl9HZXRJbnRJZGVudGlmaWVyKGluZGV4KTsKKyAgICByZXR1
cm4gbnBPYmplY3RHZXRQcm9wZXJ0eShpbmZvLkhvbGRlcigpLCBpZGVudGlmaWVyLCB2ODo6TnVt
YmVyOjpOZXcoaW5kZXgpKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5wT2JqZWN0R2V0
TmFtZWRQcm9wZXJ0eSh2ODo6TG9jYWw8djg6Ok9iamVjdD4gc2VsZiwgdjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUpCit7CisgICAgTlBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBnZXRTdHJpbmdJ
ZGVudGlmaWVyKG5hbWUpOworICAgIHJldHVybiBucE9iamVjdEdldFByb3BlcnR5KHNlbGYsIGlk
ZW50aWZpZXIsIG5hbWUpOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbnBPYmplY3RHZXRJ
bmRleGVkUHJvcGVydHkodjg6OkxvY2FsPHY4OjpPYmplY3Q+IHNlbGYsIHVpbnQzMl90IGluZGV4
KQoreworICAgIE5QSWRlbnRpZmllciBpZGVudGlmaWVyID0gTlBOX0dldEludElkZW50aWZpZXIo
aW5kZXgpOworICAgIHJldHVybiBucE9iamVjdEdldFByb3BlcnR5KHNlbGYsIGlkZW50aWZpZXIs
IHY4OjpOdW1iZXI6Ok5ldyhpbmRleCkpOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IG5wT2JqZWN0U2V0UHJvcGVydHkodjg6OkxvY2FsPHY4OjpPYmplY3Q+IHNlbGYsIE5QSWRl
bnRpZmllciBpZGVudGlmaWVyLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICBO
UE9iamVjdCogbnBPYmplY3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxO
UE9iamVjdD4oVjhDbGFzc0luZGV4OjpOUE9CSkVDVCwgc2VsZik7CisKKyAgICAvLyBWZXJpZnkg
dGhhdCBvdXIgd3JhcHBlciB3YXNuJ3QgdXNpbmcgYSBOUE9iamVjdCB3aGljaCBoYXMgYWxyZWFk
eSBiZWVuIGRlbGV0ZWQuCisgICAgaWYgKCFucE9iamVjdCB8fCAhX05QTl9Jc0FsaXZlKG5wT2Jq
ZWN0KSkgeworICAgICAgICB0aHJvd0Vycm9yKCJOUE9iamVjdCBkZWxldGVkIiwgVjhQcm94eTo6
UmVmZXJlbmNlRXJyb3IpOworICAgICAgICByZXR1cm4gdmFsdWU7ICAvLyBJbnRlcmNlcHRlZCwg
YnV0IGFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duLgorICAgIH0KKworICAgIGlmIChucE9iamVjdC0+
X2NsYXNzLT5oYXNQcm9wZXJ0eSAmJiBucE9iamVjdC0+X2NsYXNzLT5oYXNQcm9wZXJ0eShucE9i
amVjdCwgaWRlbnRpZmllcikKKyAgICAgICAgJiYgbnBPYmplY3QtPl9jbGFzcy0+c2V0UHJvcGVy
dHkpIHsKKworICAgICAgICBOUFZhcmlhbnQgbnBWYWx1ZTsKKyAgICAgICAgVk9JRF9UT19OUFZB
UklBTlQobnBWYWx1ZSk7CisgICAgICAgIGNvbnZlcnRWOE9iamVjdFRvTlBWYXJpYW50KHZhbHVl
LCBucE9iamVjdCwgJm5wVmFsdWUpOworICAgICAgICBib29sIHN1Y2Nlc3MgPSBucE9iamVjdC0+
X2NsYXNzLT5zZXRQcm9wZXJ0eShucE9iamVjdCwgaWRlbnRpZmllciwgJm5wVmFsdWUpOworICAg
ICAgICBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSgmbnBWYWx1ZSk7CisgICAgICAgIGlmIChzdWNj
ZXNzKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlOyAvLyBJbnRlcmNlcHQgdGhlIGNhbGwuCisg
ICAgfQorICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworfQorCisKK3Y4OjpI
YW5kbGU8djg6OlZhbHVlPiBucE9iamVjdE5hbWVkUHJvcGVydHlTZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQoreworICAgIE5QSWRlbnRpZmllciBpZGVudGlmaWVyID0gZ2V0U3Ry
aW5nSWRlbnRpZmllcihuYW1lKTsKKyAgICByZXR1cm4gbnBPYmplY3RTZXRQcm9wZXJ0eShpbmZv
LkhvbGRlcigpLCBpZGVudGlmaWVyLCB2YWx1ZSk7Cit9CisKKwordjg6OkhhbmRsZTx2ODo6VmFs
dWU+IG5wT2JqZWN0SW5kZXhlZFByb3BlcnR5U2V0dGVyKHVpbnQzMl90IGluZGV4LCB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAg
ICBOUElkZW50aWZpZXIgaWRlbnRpZmllciA9IE5QTl9HZXRJbnRJZGVudGlmaWVyKGluZGV4KTsK
KyAgICByZXR1cm4gbnBPYmplY3RTZXRQcm9wZXJ0eShpbmZvLkhvbGRlcigpLCBpZGVudGlmaWVy
LCB2YWx1ZSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBucE9iamVjdFNldE5hbWVkUHJv
cGVydHkodjg6OkxvY2FsPHY4OjpPYmplY3Q+IHNlbGYsIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICBOUElkZW50aWZpZXIgaWRl
bnRpZmllciA9IGdldFN0cmluZ0lkZW50aWZpZXIobmFtZSk7CisgICAgcmV0dXJuIG5wT2JqZWN0
U2V0UHJvcGVydHkoc2VsZiwgaWRlbnRpZmllciwgdmFsdWUpOworfQorCit2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gbnBPYmplY3RTZXRJbmRleGVkUHJvcGVydHkodjg6OkxvY2FsPHY4OjpPYmplY3Q+
IHNlbGYsIHVpbnQzMl90IGluZGV4LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAg
ICBOUElkZW50aWZpZXIgaWRlbnRpZmllciA9IE5QTl9HZXRJbnRJZGVudGlmaWVyKGluZGV4KTsK
KyAgICByZXR1cm4gbnBPYmplY3RTZXRQcm9wZXJ0eShzZWxmLCBpZGVudGlmaWVyLCB2YWx1ZSk7
Cit9CisKKworc3RhdGljIHZvaWQgd2Vha05QT2JqZWN0Q2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8
djg6OlZhbHVlPiwgdm9pZCogcGFyYW1ldGVyKTsKKworc3RhdGljIERPTVdyYXBwZXJNYXA8TlBP
YmplY3Q+IHN0YXRpY05QT2JqZWN0TWFwKCZ3ZWFrTlBPYmplY3RDYWxsYmFjayk7CisKK3N0YXRp
YyB2b2lkIHdlYWtOUE9iamVjdENhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2Jq
ZWN0LCB2b2lkKiBwYXJhbWV0ZXIpCit7CisgICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8TlBPYmplY3QqPihwYXJhbWV0ZXIpOworICAgIEFTU0VSVChzdGF0aWNOUE9iamVjdE1h
cC5jb250YWlucyhucE9iamVjdCkpOworICAgIEFTU0VSVChucE9iamVjdCk7CisKKyAgICAvLyBN
dXN0IHJlbW92ZSBmcm9tIG91ciBtYXAgYmVmb3JlIGNhbGxpbmcgTlBOX1JlbGVhc2VPYmplY3Qo
KS4gTlBOX1JlbGVhc2VPYmplY3QgY2FuIGNhbGwgRm9yZ2V0VjhPYmplY3RGb3JOUE9iamVjdCwg
d2hpY2gKKyAgICAvLyB1c2VzIHRoZSB0YWJsZSBhcyB3ZWxsLgorICAgIHN0YXRpY05QT2JqZWN0
TWFwLmZvcmdldChucE9iamVjdCk7CisKKyAgICBpZiAoX05QTl9Jc0FsaXZlKG5wT2JqZWN0KSkK
KyAgICAgICAgTlBOX1JlbGVhc2VPYmplY3QobnBPYmplY3QpOworfQorCisKK3Y4OjpMb2NhbDx2
ODo6T2JqZWN0PiBjcmVhdGVWOE9iamVjdEZvck5QT2JqZWN0KE5QT2JqZWN0KiBvYmplY3QsIE5Q
T2JqZWN0KiByb290KQoreworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gbnBPYmplY3REZXNjOworCisgICAgQVNTRVJUKHY4OjpDb250ZXh0OjpJbkNvbnRl
eHQoKSk7CisKKyAgICAvLyBJZiB0aGlzIGlzIGEgdjggb2JqZWN0LCBqdXN0IHJldHVybiBpdC4K
KyAgICBpZiAob2JqZWN0LT5fY2xhc3MgPT0gbnBTY3JpcHRPYmplY3RDbGFzcykgeworICAgICAg
ICBWOE5QT2JqZWN0KiB2OE5QT2JqZWN0ID0gcmVpbnRlcnByZXRfY2FzdDxWOE5QT2JqZWN0Kj4o
b2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6TmV3KHY4TlBP
YmplY3QtPnY4T2JqZWN0KTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IHdyYXBw
ZWQgdGhpcyBvYmplY3QsIGp1c3QgcmV0dXJuIGl0LgorICAgIGlmIChzdGF0aWNOUE9iamVjdE1h
cC5jb250YWlucyhvYmplY3QpKQorICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpPYmplY3Q+
OjpOZXcoc3RhdGljTlBPYmplY3RNYXAuZ2V0KG9iamVjdCkpOworCisgICAgLy8gRklYTUU6IHdl
IHNob3VsZCBjcmVhdGUgYSBXcmFwcGVyIHR5cGUgYXMgYSBzdWJjbGFzcyBvZiBKU09iamVjdC4g
SXQgaGFzIHR3byBpbnRlcm5hbCBmaWVsZHMsIGZpZWxkIDAgaXMgdGhlIHdyYXBwZWQKKyAgICAv
LyBwb2ludGVyLCBhbmQgZmllbGQgMSBpcyB0aGUgdHlwZS4gVGhlcmUgc2hvdWxkIGJlIGFuIGFw
aSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdW51c2VkIHR5cGUgaWQuIFRoZSBzYW1lIFdyYXBwZXIg
dHlwZQorICAgIC8vIGNhbiBiZSB1c2VkIGJ5IERPTSBiaW5kaW5ncy4KKyAgICBpZiAobnBPYmpl
Y3REZXNjLklzRW1wdHkoKSkgeworICAgICAgICBucE9iamVjdERlc2MgPSB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyh2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KCkp
OworICAgICAgICBucE9iamVjdERlc2MtPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0SW50ZXJuYWxG
aWVsZENvdW50KFY4Q3VzdG9tOjprTlBPYmplY3RJbnRlcm5hbEZpZWxkQ291bnQpOworICAgICAg
ICBucE9iamVjdERlc2MtPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0TmFtZWRQcm9wZXJ0eUhhbmRs
ZXIobnBPYmplY3ROYW1lZFByb3BlcnR5R2V0dGVyLCBucE9iamVjdE5hbWVkUHJvcGVydHlTZXR0
ZXIpOworICAgICAgICBucE9iamVjdERlc2MtPkluc3RhbmNlVGVtcGxhdGUoKS0+U2V0SW5kZXhl
ZFByb3BlcnR5SGFuZGxlcihucE9iamVjdEluZGV4ZWRQcm9wZXJ0eUdldHRlciwgbnBPYmplY3RJ
bmRleGVkUHJvcGVydHlTZXR0ZXIpOworICAgICAgICBucE9iamVjdERlc2MtPkluc3RhbmNlVGVt
cGxhdGUoKS0+U2V0Q2FsbEFzRnVuY3Rpb25IYW5kbGVyKG5wT2JqZWN0SW52b2tlRGVmYXVsdEhh
bmRsZXIpOworICAgIH0KKworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiB2OEZ1bmN0aW9u
ID0gbnBPYmplY3REZXNjLT5HZXRGdW5jdGlvbigpOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0
PiB2YWx1ZSA9IFNhZmVBbGxvY2F0aW9uOjpuZXdJbnN0YW5jZSh2OEZ1bmN0aW9uKTsKKworICAg
IC8vIElmIHdlIHdlcmUgdW5hYmxlIHRvIGFsbG9jYXRlIHRoZSBpbnN0YW5jZSwgd2UgYXZvaWQg
d3JhcHBpbmcgYW5kIHJlZ2lzdGVyaW5nIHRoZSBOUCBvYmplY3QuCisgICAgaWYgKHZhbHVlLklz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgd3JhcE5QT2JqZWN0KHZhbHVl
LCBvYmplY3QpOworCisgICAgLy8gS0pTIHJldGFpbnMgdGhlIG9iamVjdCBhcyBwYXJ0IG9mIGl0
cyB3cmFwcGVyIChzZWUgQmluZGluZ3M6OkNJbnN0YW5jZSkuCisgICAgTlBOX1JldGFpbk9iamVj
dChvYmplY3QpOworCisgICAgX05QTl9SZWdpc3Rlck9iamVjdChvYmplY3QsIHJvb3QpOworCisg
ICAgLy8gTWFpbnRhaW4gYSB3ZWFrIHBvaW50ZXIgZm9yIHY4IHNvIHdlIGNhbiBjbGVhbnVwIHRo
ZSBvYmplY3QuCisgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd2Vha1JlZiA9IHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcodmFsdWUpOworICAgIHN0YXRpY05QT2JqZWN0TWFw
LnNldChvYmplY3QsIHdlYWtSZWYpOworCisgICAgcmV0dXJuIHZhbHVlOworfQorCit2b2lkIGZv
cmdldFY4T2JqZWN0Rm9yTlBPYmplY3QoTlBPYmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAoc3Rh
dGljTlBPYmplY3RNYXAuY29udGFpbnMob2JqZWN0KSkgeworICAgICAgICB2ODo6SGFuZGxlU2Nv
cGUgc2NvcGU7CisgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IGhhbmRsZShzdGF0
aWNOUE9iamVjdE1hcC5nZXQob2JqZWN0KSk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9N
V3JhcHBlcihoYW5kbGUsIFdlYkNvcmU6OlY4Q2xhc3NJbmRleDo6TlBPQkpFQ1QsIDApOworICAg
ICAgICBzdGF0aWNOUE9iamVjdE1hcC5mb3JnZXQob2JqZWN0KTsKKyAgICAgICAgTlBOX1JlbGVh
c2VPYmplY3Qob2JqZWN0KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4TlBPYmplY3QuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhOUE9iamVjdC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNzU5YjUKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuaApAQCAtMCwwICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBWOE5QT2JqZWN0X2gKKyNkZWZpbmUgVjhOUE9iamVjdF9oCisK
KyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L25wYXBpL2JpbmRpbmdzL25w
cnVudGltZS5oIgorCisvLyBUaGVzZSBmdW5jdGlvbnMgY2FuIGJlIHJlcGxhY2VkIGJ5IG5vcm1h
bCBKUyBvcGVyYXRpb24uCisvLyBHZXR0ZXJzCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbnBPYmpl
Y3ROYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJik7Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbnBPYmplY3RJbmRleGVk
UHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mKTsK
K3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBucE9iamVjdEdldE5hbWVkUHJvcGVydHkodjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IHNlbGYsIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lKTsKK3Y4OjpIYW5k
bGU8djg6OlZhbHVlPiBucE9iamVjdEdldEluZGV4ZWRQcm9wZXJ0eSh2ODo6TG9jYWw8djg6Ok9i
amVjdD4gc2VsZiwgdWludDMyX3QgaW5kZXgpOworCisvLyBTZXR0ZXJzCit2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gbnBPYmplY3ROYW1lZFByb3BlcnR5U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYpOwor
djg6OkhhbmRsZTx2ODo6VmFsdWU+IG5wT2JqZWN0SW5kZXhlZFByb3BlcnR5U2V0dGVyKHVpbnQz
Ml90IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJik7Cit2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gbnBPYmplY3RTZXROYW1lZFByb3BlcnR5KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBzZWxmLCB2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4pOwordjg6Okhh
bmRsZTx2ODo6VmFsdWU+IG5wT2JqZWN0U2V0SW5kZXhlZFByb3BlcnR5KHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiBzZWxmLCB1aW50MzJfdCBpbmRleCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4pOworCit2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbnBPYmplY3RJbnZva2VEZWZhdWx0SGFuZGxlcihjb25zdCB2
ODo6QXJndW1lbnRzJik7CisKKy8vIEdldCBhIHdyYXBwZXIgZm9yIGEgTlBPYmplY3QuCisvLyBJ
ZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgd3JhcHBlZCwgdGhlIHByZS1leGlzdGluZyB3cmFwcGVy
IHdpbGwgYmUgcmV0dXJuZWQuIElmIHRoZSBvYmplY3QgaXMgbm90IHdyYXBwZWQsIHdyYXAgaXQs
IGFuZAorLy8gZ2l2ZSBWOCBhIHdlYWsgcmVmZXJlbmNlIHRvIHRoZSB3cmFwcGVyIHdoaWNoIHdp
bGwgY2xlYW51cCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIEpTIHJlZmVyZW5jZXMgdG8gdGhlIG9i
amVjdC4KK3Y4OjpMb2NhbDx2ODo6T2JqZWN0PiBjcmVhdGVWOE9iamVjdEZvck5QT2JqZWN0KE5Q
T2JqZWN0KiwgTlBPYmplY3QqIHJvb3QpOworCisvLyBUZWxsIFY4IHRvIGZvcmNpYmx5IHJlbW92
ZSBhbiBvYmplY3QuCisvLyBUaGlzIGlzIHVzZWQgYXQgcGx1Z2luIHRlYXJkb3duIHNvIHRoYXQg
dGhlIGNhbGxlciBjYW4gYWdncmVzc2l2ZWx5IHVubG9hZCB0aGUgcGx1Z2luIGxpYnJhcnkuIEFm
dGVyIGNhbGxpbmcgdGhpcworLy8gZnVuY3Rpb24sIHRoZSBwZXJzaXN0ZW50IGhhbmRsZSB0byB0
aGUgd3JhcHBlciB3aWxsIGJlIGdvbmUsIGFuZCB0aGUgd3JhcHBlZCBOUE9iamVjdCB3aWxsIGJl
IHJlbW92ZWQgc28gdGhhdCBpdAorLy8gY2Fubm90IGJlIHJlZmVycmVkIHRvLgordm9pZCBmb3Jn
ZXRWOE9iamVjdEZvck5QT2JqZWN0KE5QT2JqZWN0Kik7CisKKyNlbmRpZiAvLyBWOE5QT2JqZWN0
X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFBsdWdJbkVs
ZW1lbnRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MUGx1Z0lu
RWxlbWVudEN1c3RvbS5jcHAKaW5kZXggNmFkNDQ5NS4uMTNjODJmMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MUGx1Z0luRWxlbWVudEN1c3RvbS5jcHAKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MUGx1Z0luRWxlbWVudEN1c3RvbS5j
cHAKQEAgLTM1LDExICszNSw5IEBACiAKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRl
ICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOE5QT2JqZWN0LmgiCiAjaW5jbHVkZSAi
VjhQcm94eS5oIgogCi0vLyBGSVhNRTogVGhlIG5hbWUgb2YgdGhpcyBmaWxlIHdpbGwgY2hhbmdl
IG9uY2UgcmVmYWN0b3JpbmcgaXMgY29tcGxldGUKLSNpbmNsdWRlICJ2OF9ucG9iamVjdC5oIgot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIE5BTUVEX1BST1BFUlRZX0dFVFRFUihIVE1MUGx1Z0lu
RWxlbWVudCkKQEAgLTU0LDcgKzUyLDcgQEAgTkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxQbHVn
SW5FbGVtZW50KQogICAgIGlmIChpbnN0YW5jZS5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBu
b3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogCi0gICAgcmV0dXJuIE5QT2JqZWN0R2V0TmFtZWRQ
cm9wZXJ0eShpbnN0YW5jZSwgbmFtZSk7CisgICAgcmV0dXJuIG5wT2JqZWN0R2V0TmFtZWRQcm9w
ZXJ0eShpbnN0YW5jZSwgbmFtZSk7CiB9CiAKIE5BTUVEX1BST1BFUlRZX1NFVFRFUihIVE1MUGx1
Z0luRWxlbWVudCkKQEAgLTY5LDEzICs2NywxMyBAQCBOQU1FRF9QUk9QRVJUWV9TRVRURVIoSFRN
TFBsdWdJbkVsZW1lbnQpCiAgICAgaWYgKGluc3RhbmNlLklzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAKLSAgICByZXR1cm4gTlBPYmplY3RTZXRO
YW1lZFByb3BlcnR5KGluc3RhbmNlLCBuYW1lLCB2YWx1ZSk7CisgICAgcmV0dXJuIG5wT2JqZWN0
U2V0TmFtZWRQcm9wZXJ0eShpbnN0YW5jZSwgbmFtZSwgdmFsdWUpOwogfQogCiBDQUxMQkFDS19G
VU5DX0RFQ0woSFRNTFBsdWdJbkVsZW1lbnQpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTFBs
dWdpbkVsZW1lbnQoKSIpOwotICAgIHJldHVybiBOUE9iamVjdEludm9rZURlZmF1bHRIYW5kbGVy
KGFyZ3MpOworICAgIHJldHVybiBucE9iamVjdEludm9rZURlZmF1bHRIYW5kbGVyKGFyZ3MpOwog
fQogCiBJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihIVE1MUGx1Z0luRWxlbWVudCkKQEAgLTkwLDcg
Kzg4LDcgQEAgSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoSFRNTFBsdWdJbkVsZW1lbnQpCiAgICAg
aWYgKGluc3RhbmNlLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVy
Y2VwdG9yKCk7CiAKLSAgICByZXR1cm4gTlBPYmplY3RHZXRJbmRleGVkUHJvcGVydHkoaW5zdGFu
Y2UsIGluZGV4KTsKKyAgICByZXR1cm4gbnBPYmplY3RHZXRJbmRleGVkUHJvcGVydHkoaW5zdGFu
Y2UsIGluZGV4KTsKIH0KIAogSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoSFRNTFBsdWdJbkVsZW1l
bnQpCkBAIC0xMDUsNyArMTAzLDcgQEAgSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoSFRNTFBsdWdJ
bkVsZW1lbnQpCiAgICAgaWYgKGluc3RhbmNlLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG5v
dEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAKLSAgICByZXR1cm4gTlBPYmplY3RTZXRJbmRleGVk
UHJvcGVydHkoaW5zdGFuY2UsIGluZGV4LCB2YWx1ZSk7CisgICAgcmV0dXJuIG5wT2JqZWN0U2V0
SW5kZXhlZFByb3BlcnR5KGluc3RhbmNlLCBpbmRleCwgdmFsdWUpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="16992"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>