<?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>37286</bug_id>
          
          <creation_ts>2010-04-08 11:39:03 -0700</creation_ts>
          <short_desc>Testing utility for CodeGeneratorV8.pm</short_desc>
          <delta_ts>2010-04-27 14:22:44 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yaar Schnitman">yaar</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>japhet</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yaar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>210294</commentid>
    <comment_count>0</comment_count>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-04-08 11:39:03 -0700</bug_when>
    <thetext>Testing utility for CodeGeneratorV8.pm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210296</commentid>
    <comment_count>1</comment_count>
      <attachid>52882</attachid>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-04-08 11:48:59 -0700</bug_when>
    <thetext>Created attachment 52882
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210298</commentid>
    <comment_count>2</comment_count>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-04-08 11:50:27 -0700</bug_when>
    <thetext>The auto-generated files fail the style checks, and they should.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210300</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-08 11:54:29 -0700</bug_when>
    <thetext>Attachment 52882 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 3072 characters of output:
 [3]
WebCore/bindings/v8/test/V8TestObj.cpp:379:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bindings/v8/test/V8TestObj.cpp:380:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bindings/v8/test/V8TestObj.cpp:381:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/bindings/v8/test/V8TestObj.cpp:385:  default_signature is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/v8/test/V8TestObj.cpp:386:  Missing spaces around /  [whitespace/operators] [3]
WebCore/bindings/v8/test/V8TestObj.cpp:387:  Missing spaces around /  [whitespace/operators] [3]
WebCore/bindings/v8/test/V8TestObj.cpp:393:  voidMethodWithArgs_argc is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/v8/test/V8TestObj.cpp:394:  voidMethodWithArgs_argv is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/v8/test/V8TestObj.cpp:395:  voidMethodWithArgs_signature is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/v8/test/V8TestObj.cpp:399:  intMethodWithArgs_argc is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/v8/test/V8TestObj.cpp:400:  intMethodWithArgs_argv is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/v8/test/V8TestObj.cpp:401:  intMethodWithArgs_signature is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/v8/test/V8TestObj.cpp:405:  objMethodWithArgs_argc is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/v8/test/V8TestObj.cpp:406:  objMethodWithArgs_argv is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/v8/test/V8TestObj.cpp:407:  objMethodWithArgs_signature is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/v8/test/V8TestObj.cpp:417:  V8TestObj_raw_cache_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/v8/test/V8TestObj.cpp:423:  V8TestObj_cache_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/bindings/v8/test/V8TestObj.h:21:  #ifndef header guard has wrong style, please use: V8TestObj_h  [build/header_guard] [5]
WebCore/bindings/v8/test/V8TestObj.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/test/V8TestObj.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bindings/v8/test/V8TestObj.h:49:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 56 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210352</commentid>
    <comment_count>4</comment_count>
      <attachid>52882</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-04-08 13:35:09 -0700</bug_when>
    <thetext>Comment on attachment 52882
Patch

If you could open a bug for getting the output of CodeGeneratorV8.pm more style compliant, that would be great (or we could attach it to this bug I suppose).

&gt; diff --git a/WebCore/bindings/v8/test/TestObj.idl b/WebCore/bindings/v8/test/TestObj.idl
&gt; new file mode 100644
&gt; index 0000000..628b618
&gt; --- /dev/null
&gt; +++ b/WebCore/bindings/v8/test/TestObj.idl
&gt; @@ -0,0 +1,65 @@
&gt; +/*
&gt; + * Copyright (C) 2009 Google Inc. All rights reserved.

2010 :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211004</commentid>
    <comment_count>5</comment_count>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-04-09 16:12:54 -0700</bug_when>
    <thetext>Committed r57378: &lt;http://trac.webkit.org/changeset/57378&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211045</commentid>
    <comment_count>6</comment_count>
      <attachid>52882</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-09 17:30:02 -0700</bug_when>
    <thetext>Comment on attachment 52882
Patch

Should we hook this up to test-webkitpy to it get run from time to time?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211106</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-09 21:54:09 -0700</bug_when>
    <thetext>I bet the jsc peeps would like to see this. :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52882</attachid>
            <date>2010-04-08 11:48:59 -0700</date>
            <delta_ts>2010-04-09 17:30:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37286-20100408114858.patch</filename>
            <type>text/plain</type>
            <size>28468</size>
            <attacher name="Yaar Schnitman">yaar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjQwYjYwMy4uMGE1MjZiMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wNC0wOCAgWWFhciBTY2huaXRt
YW4gIDx5YWFyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUZXN0aW5nIHV0aWxpdHkgZm9yIENvZGVHZW5lcmF0b3JWOC5wbQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcyODYKKwor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L3Rlc3QvcnVuX3Rlc3RzLnB5OiBVdGlsaXR5IHJ1bnMgQ29k
ZUdlbmVyYXRvclY4LnBtIG9uIFRlc3RPYmouaWRsLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L3Rl
c3QvVGVzdE9iai5pZGw6IEEgdGVzdCBJREwgZmlsZS4KKyAgICAgICAgKiBiaW5kaW5ncy92OC90
ZXN0L1Y4VGVzdE9iai5jcHA6IFRoZSBleHBlY3RlZCAuY3BwIG91dHB1dCBvZiBUZXN0T2JqLmlk
bC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC90ZXN0L1Y4VGVzdE9iai5oOiBUaGUgZXhwZWN0ZWQg
Lmggb3V0cHV0IG9mIFRlc3RPYmouaWRsLgorCiAyMDEwLTA0LTA4ICBLd2FuZyBZdWwgU2VvICA8
c2t5dWxAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21h
bm4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L3Rlc3QvVGVzdE9iai5pZGwgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L3Rlc3QvVGVzdE9iai5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNjI4YjYxOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvdGVzdC9UZXN0T2JqLmlkbApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtc3RyQXJnLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RXN0ckFyZywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIFRo
aXMgSURMIGZpbGUgaXMgZm9yIHRlc3RpbmcgdGhlIFY4IGdlbmVyYXRvciBhbmQgZm9yIHRyYWNr
aW5nIGNoYW5nZXMKKy8vIGluIGl0cyBvdXB1dC4KK21vZHVsZSB0ZXN0IHsKKyAgICBpbnRlcmZh
Y2UgVGVzdE9iaiB7CisgICAgICAgIC8vIEF0dHJpYnV0ZXMKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIGxvbmcgICAgICAgICAgICByZWFkT25seUludEF0dHI7CisgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgcmVhZE9ubHlTdHJpbmdBdHRyOworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgVGVzdE9iaiAgICAgICAgIHJlYWRPbmx5VGVzdE9iakF0dHI7Cisg
ICAgICAgIGF0dHJpYnV0ZSBsb25nICAgICAgICAgICAgICAgICAgICAgaW50QXR0cjsKKyAgICAg
ICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgICAgICAgICBzdHJpbmdBdHRyOworICAgICAg
ICBhdHRyaWJ1dGUgVGVzdE9iaiAgICAgICAgICAgICAgICAgIHRlc3RPYmpBdHRyOworCisgICAg
ICAgIC8vIE1ldGhvZHMKKyAgICAgICAgdm9pZCAgICB2b2lkTWV0aG9kKCk7CisgICAgICAgIHZv
aWQgICAgdm9pZE1ldGhvZFdpdGhBcmdzKGluIGxvbmcgaW50QXJnLCBpbiBET01TdHJpbmcgc3Ry
QXJnLCBpbiBUZXN0T2JqIG9iakFyZyk7CisgICAgICAgIGxvbmcgICAgaW50TWV0aG9kKCk7Cisg
ICAgICAgIGxvbmcgICAgaW50TWV0aG9kV2l0aEFyZ3MoaW4gbG9uZyBpbnRBcmcsIGluIERPTVN0
cmluZyBzdHJBcmcsIGluIFRlc3RPYmogb2JqQXJnKTsKKyAgICAgICAgVGVzdE9iaiBvYmpNZXRo
b2QoKTsKKyAgICAgICAgVGVzdE9iaiBvYmpNZXRob2RXaXRoQXJncyhpbiBsb25nIGludEFyZywg
aW4gRE9NU3RyaW5nIHN0ckFyZywgaW4gVGVzdE9iaiBvYmpBcmcpOworCisgICAgICAgIC8vIEV4
Y2VwdGlvbnMKKyAgICAgICAgdm9pZCAgICBtZXRob2RXaXRoRXhjZXB0aW9uKCkgcmFpc2VzKERP
TUV4Y2VwdGlvbik7CisgICAgICAgIGF0dHJpYnV0ZSBsb25nIGF0dHJXaXRoRXhjZXB0aW9uIHJh
aXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBhdHRyaWJ1dGUgbG9uZyBhdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbiBnZXRyYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgYXR0cmlidXRlIGxv
bmcgYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24gc2V0cmFpc2VzKERPTUV4Y2VwdGlvbik7CisKKyAg
ICAgICAgLy8gJ0N1c3RvbScgZXh0ZW5kZWQgYXR0cmlidXRlCisgICAgICAgIGF0dHJpYnV0ZSBb
Q3VzdG9tXSBsb25nICAgICAgICAgICAgY3VzdG9tQXR0cjsKKyAgICAgICAgW0N1c3RvbV0gdm9p
ZCBjdXN0b21NZXRob2QoKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBjdXN0b21NZXRob2RXaXRo
QXJncyhpbiBsb25nIGludEFyZywgaW4gRE9NU3RyaW5nIHN0ckFyZywgaW4gVGVzdE9iaiBvYmpB
cmcpOworCisgICAgICAgIC8vICdPcHRpb25hbCcgZXh0ZW5kZWQgYXR0cmlidXRlCisgICAgICAg
IHZvaWQgICAgbWV0aG9kV2l0aE9wdGlvbmFsQXJnKGluIFtPcHRpb25hbF0gbG9uZyBvcHQpOwor
ICAgICAgICB2b2lkICAgIG1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKGlu
IGxvbmcgbm9uT3B0LCBpbiBbT3B0aW9uYWxdIGxvbmcgb3B0KTsKKyAgICAgICAgdm9pZCAgICBt
ZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoaW4gbG9uZyBub25PcHQs
IGluIFtPcHRpb25hbF0gbG9uZyBvcHQxLCBpbiBsb25nIG9wdDIpOworICAgIH07Cit9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L3Rlc3QvVjhUZXN0T2JqLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvdGVzdC9WOFRlc3RPYmouY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjAyZDkxNDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L3Rlc3QvVjhUZXN0T2JqLmNwcApAQCAtMCwwICsxLDQ3MSBAQAorLyoKKyAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxl
IGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElG
WSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyov
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJWOEJpbmRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorI2luY2x1ZGUg
IlY4SXNvbGF0ZWRDb250ZXh0LmgiCisKKyN1bmRlZiBMT0cKKworI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKKyNpbmNsdWRlICJWOFRlc3RPYmouaCIKKyNpbmNsdWRlICJ3dGYvR2V0UHRyLmgi
CisjaW5jbHVkZSAid3RmL1JlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJ3dGYvUmVmUHRyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworV3JhcHBlclR5cGVJbmZvIFY4VGVzdE9iajo6aW5mbyA9
IHsgVjhUZXN0T2JqOjpHZXRUZW1wbGF0ZSwgVjhUZXN0T2JqOjpkZXJlZk9iamVjdCwgMCB9Owor
CituYW1lc3BhY2UgVGVzdE9iakludGVybmFsIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZv
aWQgVjhfVVNFKFQpIHsgfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlYWRPbmx5
SW50QXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5yZWFkT25s
eUludEF0dHIuX2dldCIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUo
aW5mby5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoaW1wLT5yZWFkT25s
eUludEF0dHIoKSk7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVhZE9ubHlT
dHJpbmdBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnJlYWRP
bmx5U3RyaW5nQXR0ci5fZ2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05h
dGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5yZWFkT25seVN0
cmluZ0F0dHIoKSk7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVhZE9ubHlU
ZXN0T2JqQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5yZWFk
T25seVRlc3RPYmpBdHRyLl9nZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRv
TmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIFJlZlB0cjxUZXN0T2JqPiByZXN1bHQgPSBpbXAt
PnJlYWRPbmx5VGVzdE9iakF0dHIoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBl
ciA9IHJlc3VsdC5nZXQoKSA/IGdldERPTU9iamVjdE1hcCgpLmdldChyZXN1bHQuZ2V0KCkpIDog
djg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKSB7Cisg
ICAgICAgIHdyYXBwZXIgPSB0b1Y4KHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGlmICghd3JhcHBl
ci5Jc0VtcHR5KCkpCisgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldEhpZGRlblJlZmVyZW5j
ZShpbmZvLkhvbGRlcigpLCB3cmFwcGVyKTsKKyAgICB9CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9
CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaW50QXR0ckF0dHJHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7Cisg
ICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5pbnRBdHRyLl9nZXQiKTsKKyAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIHJldHVybiB2ODo6
SW50ZWdlcjo6TmV3KGltcC0+aW50QXR0cigpKTsKK30KKworc3RhdGljIHZvaWQgaW50QXR0ckF0
dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmouaW50QXR0ci5fc2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2Jq
Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICBpbnQgdiA9IHRvSW50MzIodmFsdWUpOwor
ICAgIGltcC0+c2V0SW50QXR0cih2KTsKKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gc3RyaW5nQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJE
T00uVGVzdE9iai5zdHJpbmdBdHRyLl9nZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RP
Ymo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIHJldHVybiB2OFN0cmluZyhpbXAtPnN0
cmluZ0F0dHIoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmluZ0F0dHJBdHRyU2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnN0
cmluZ0F0dHIuX3NldCIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUo
aW5mby5Ib2xkZXIoKSk7CisgICAgVjhQYXJhbWV0ZXI8PiB2ID0gdmFsdWU7CisgICAgaW1wLT5z
ZXRTdHJpbmdBdHRyKHYpOworICAgIHJldHVybjsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB0ZXN0T2JqQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVz
dE9iai50ZXN0T2JqQXR0ci5fZ2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0
b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdG9WOChpbXAtPnRlc3RPYmpBdHRy
KCkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0T2JqQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoudGVzdE9iakF0
dHIuX3NldCIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7CisgICAgVGVzdE9iaiogdiA9IFY4VGVzdE9iajo6SGFzSW5zdGFuY2UodmFsdWUp
ID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVl
KSkgOiAwOworICAgIGltcC0+c2V0VGVzdE9iakF0dHIoV1RGOjpnZXRQdHIodikpOworICAgIHJl
dHVybjsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhdHRyV2l0aEV4Y2VwdGlv
bkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5hdHRyV2l0aEV4Y2Vw
dGlvbi5fZ2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZv
LkhvbGRlcigpKTsKKyAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPmF0dHJXaXRoRXhj
ZXB0aW9uKCkpOworfQorCitzdGF0aWMgdm9pZCBhdHRyV2l0aEV4Y2VwdGlvbkF0dHJTZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RP
YmouYXR0cldpdGhFeGNlcHRpb24uX3NldCIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9i
ajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgaW50IHYgPSB0b0ludDMyKHZhbHVlKTsK
KyAgICBpbXAtPnNldEF0dHJXaXRoRXhjZXB0aW9uKHYpOworICAgIHJldHVybjsKK30KKworc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhdHRyV2l0aFNldHRlckV4Y2VwdGlvbkF0dHJHZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGlu
Zm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5hdHRyV2l0aFNldHRlckV4Y2VwdGlv
bi5fZ2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKKyAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAtPmF0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uKCkpOworfQorCitzdGF0aWMgdm9pZCBhdHRyV2l0aFNldHRlckV4Y2VwdGlvbkF0
dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmouYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24uX3NldCIpOworICAgIFRlc3RPYmoq
IGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgaW50IHYgPSB0
b0ludDMyKHZhbHVlKTsKKyAgICBpbXAtPnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKHYpOwor
ICAgIHJldHVybjsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5h
dHRyV2l0aEdldHRlckV4Y2VwdGlvbi5fZ2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0
T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5l
dyhpbXAtPmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKCkpOworfQorCitzdGF0aWMgdm9pZCBhdHRy
V2l0aEdldHRlckV4Y2VwdGlvbkF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24u
X3NldCIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7CisgICAgaW50IHYgPSB0b0ludDMyKHZhbHVlKTsKKyAgICBpbXAtPnNldEF0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uKHYpOworICAgIHJldHVybjsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2b2lkTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykg
eworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoudm9pZE1ldGhvZCIpOworICAgIFRlc3RPYmoq
IGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgaW1wLT52b2lk
TWV0aG9kKCk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQorCitzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZvaWRNZXRob2RXaXRoQXJnc0NhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpIHsKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnZvaWRN
ZXRob2RXaXRoQXJncyIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSk7CisgICAgaW50IGludEFyZyA9IHRvSW50MzIoYXJnc1swXSk7CisgICAg
VjhQYXJhbWV0ZXI8PiBzdHJBcmcgPSBhcmdzWzFdOworICAgIFRlc3RPYmoqIG9iakFyZyA9IFY4
VGVzdE9iajo6SGFzSW5zdGFuY2UoYXJnc1syXSkgPyBWOFRlc3RPYmo6OnRvTmF0aXZlKHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1syXSkpIDogMDsKKyAgICBpbXAtPnZvaWRNZXRo
b2RXaXRoQXJncyhpbnRBcmcsIHN0ckFyZywgb2JqQXJnKTsKKyAgICByZXR1cm4gdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KCk7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaW50TWV0
aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykgeworICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmouaW50TWV0aG9kIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0
b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyhpbXAt
PmludE1ldGhvZCgpKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpbnRNZXRo
b2RXaXRoQXJnc0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpIHsKKyAgICBJTkNf
U1RBVFMoIkRPTS5UZXN0T2JqLmludE1ldGhvZFdpdGhBcmdzIik7CisgICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBpbnQgaW50QXJnID0g
dG9JbnQzMihhcmdzWzBdKTsKKyAgICBWOFBhcmFtZXRlcjw+IHN0ckFyZyA9IGFyZ3NbMV07Cisg
ICAgVGVzdE9iaiogb2JqQXJnID0gVjhUZXN0T2JqOjpIYXNJbnN0YW5jZShhcmdzWzJdKSA/IFY4
VGVzdE9iajo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzJdKSkg
OiAwOworICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGltcC0+aW50TWV0aG9kV2l0aEFyZ3Mo
aW50QXJnLCBzdHJBcmcsIG9iakFyZykpOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IG9iak1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpIHsKKyAgICBJ
TkNfU1RBVFMoIkRPTS5UZXN0T2JqLm9iak1ldGhvZCIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT5v
YmpNZXRob2QoKSk7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqTWV0aG9k
V2l0aEFyZ3NDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKSB7CisgICAgSU5DX1NU
QVRTKCJET00uVGVzdE9iai5vYmpNZXRob2RXaXRoQXJncyIpOworICAgIFRlc3RPYmoqIGltcCA9
IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgaW50IGludEFyZyA9IHRv
SW50MzIoYXJnc1swXSk7CisgICAgVjhQYXJhbWV0ZXI8PiBzdHJBcmcgPSBhcmdzWzFdOworICAg
IFRlc3RPYmoqIG9iakFyZyA9IFY4VGVzdE9iajo6SGFzSW5zdGFuY2UoYXJnc1syXSkgPyBWOFRl
c3RPYmo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1syXSkpIDog
MDsKKyAgICByZXR1cm4gdG9WOChpbXAtPm9iak1ldGhvZFdpdGhBcmdzKGludEFyZywgc3RyQXJn
LCBvYmpBcmcpKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRo
RXhjZXB0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykgeworICAgIElOQ19T
VEFUUygiRE9NLlRlc3RPYmoubWV0aG9kV2l0aEV4Y2VwdGlvbiIpOworICAgIFRlc3RPYmoqIGlt
cCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgeworICAgIGltcC0+bWV0aG9kV2l0aEV4Y2VwdGlvbihlYyk7CisgICAg
aWYgKFVOTElLRUxZKGVjKSkgZ290byBmYWlsOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4oKTsKKyAgICB9CisgICAgZmFpbDoKKyAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24o
ZWMpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoT3B0aW9uYWxBcmdDYWxsYmFjayhjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKSB7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5tZXRob2RX
aXRoT3B0aW9uYWxBcmciKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGFyZ3MuSG9sZGVyKCkpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDApIHsKKyAgICAgICAg
aW1wLT5tZXRob2RXaXRoT3B0aW9uYWxBcmcoKTsKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6OlZhbHVlPigpOworICAgIH0KKyAgICBpbnQgb3B0ID0gdG9JbnQzMihhcmdzWzBdKTsKKyAg
ICBpbXAtPm1ldGhvZFdpdGhPcHRpb25hbEFyZyhvcHQpOworICAgIHJldHVybiB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4oKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RX
aXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpIHsKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm1ldGhvZFdpdGhOb25PcHRp
b25hbEFyZ0FuZE9wdGlvbmFsQXJnIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0
b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBpbnQgbm9uT3B0ID0gdG9JbnQzMihhcmdzWzBd
KTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8PSAxKSB7CisgICAgICAgIGltcC0+bWV0aG9kV2l0
aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uT3B0KTsKKyAgICAgICAgcmV0dXJuIHY4
OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgIH0KKyAgICBpbnQgb3B0ID0gdG9JbnQzMihhcmdz
WzFdKTsKKyAgICBpbXAtPm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKG5v
bk9wdCwgb3B0KTsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Cit9CisKK3N0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdv
T3B0aW9uYWxBcmdzQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykgeworICAgIElO
Q19TVEFUUygiRE9NLlRlc3RPYmoubWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9u
YWxBcmdzIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhv
bGRlcigpKTsKKyAgICBpbnQgbm9uT3B0ID0gdG9JbnQzMihhcmdzWzBdKTsKKyAgICBpZiAoYXJn
cy5MZW5ndGgoKSA8PSAxKSB7CisgICAgICAgIGltcC0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJn
QW5kVHdvT3B0aW9uYWxBcmdzKG5vbk9wdCk7CisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4oKTsKKyAgICB9CisgICAgaW50IG9wdDEgPSB0b0ludDMyKGFyZ3NbMV0pOworICAg
IGludCBvcHQyID0gdG9JbnQzMihhcmdzWzJdKTsKKyAgICBpbXAtPm1ldGhvZFdpdGhOb25PcHRp
b25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhub25PcHQsIG9wdDEsIG9wdDIpOworICAgIHJldHVy
biB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdE9iaklu
dGVybmFsCisKK3N0YXRpYyBjb25zdCBCYXRjaGVkQXR0cmlidXRlIFRlc3RPYmpfYXR0cnNbXSA9
IHsKKyAgICB7CisgICAgICAgIC8vIEF0dHJpYnV0ZSAncmVhZE9ubHlJbnRBdHRyJyAoVHlwZTog
J3JlYWRvbmx5IGF0dHJpYnV0ZScgRXh0QXR0cjogJycpCisgICAgICAgICJyZWFkT25seUludEF0
dHIiLAorICAgICAgICBUZXN0T2JqSW50ZXJuYWw6OnJlYWRPbmx5SW50QXR0ckF0dHJHZXR0ZXIs
CisgICAgICAgIDAsCisgICAgICAgIDAgLyogbm8gZGF0YSAqLywKKyAgICAgICAgc3RhdGljX2Nh
c3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8
djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksCisgICAgICAgIDAgLyogb24gaW5zdGFu
Y2UgKi8KKyAgICB9LAorICAgIHsKKyAgICAgICAgLy8gQXR0cmlidXRlICdyZWFkT25seVN0cmlu
Z0F0dHInIChUeXBlOiAncmVhZG9ubHkgYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKKyAgICAgICAg
InJlYWRPbmx5U3RyaW5nQXR0ciIsCisgICAgICAgIFRlc3RPYmpJbnRlcm5hbDo6cmVhZE9ubHlT
dHJpbmdBdHRyQXR0ckdldHRlciwKKyAgICAgICAgMCwKKyAgICAgICAgMCAvKiBubyBkYXRhICov
LAorICAgICAgICBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLAor
ICAgICAgICBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwKKyAg
ICAgICAgMCAvKiBvbiBpbnN0YW5jZSAqLworICAgIH0sCisgICAgeworICAgICAgICAvLyBBdHRy
aWJ1dGUgJ3JlYWRPbmx5VGVzdE9iakF0dHInIChUeXBlOiAncmVhZG9ubHkgYXR0cmlidXRlJyBF
eHRBdHRyOiAnJykKKyAgICAgICAgInJlYWRPbmx5VGVzdE9iakF0dHIiLAorICAgICAgICBUZXN0
T2JqSW50ZXJuYWw6OnJlYWRPbmx5VGVzdE9iakF0dHJBdHRyR2V0dGVyLAorICAgICAgICAwLAor
ICAgICAgICAwIC8qIG5vIGRhdGEgKi8sCisgICAgICAgIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3ND
b250cm9sPih2ODo6REVGQVVMVCksCisgICAgICAgIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0
dHJpYnV0ZT4odjg6Ok5vbmUpLAorICAgICAgICAwIC8qIG9uIGluc3RhbmNlICovCisgICAgfSwK
KyAgICB7CisgICAgICAgIC8vIEF0dHJpYnV0ZSAnaW50QXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUn
IEV4dEF0dHI6ICcnKQorICAgICAgICAiaW50QXR0ciIsCisgICAgICAgIFRlc3RPYmpJbnRlcm5h
bDo6aW50QXR0ckF0dHJHZXR0ZXIsCisgICAgICAgIFRlc3RPYmpJbnRlcm5hbDo6aW50QXR0ckF0
dHJTZXR0ZXIsCisgICAgICAgIDAgLyogbm8gZGF0YSAqLywKKyAgICAgICAgc3RhdGljX2Nhc3Q8
djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8djg6
OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksCisgICAgICAgIDAgLyogb24gaW5zdGFuY2Ug
Ki8KKyAgICB9LAorICAgIHsKKyAgICAgICAgLy8gQXR0cmlidXRlICdzdHJpbmdBdHRyJyAoVHlw
ZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCisgICAgICAgICJzdHJpbmdBdHRyIiwKKyAgICAg
ICAgVGVzdE9iakludGVybmFsOjpzdHJpbmdBdHRyQXR0ckdldHRlciwKKyAgICAgICAgVGVzdE9i
akludGVybmFsOjpzdHJpbmdBdHRyQXR0clNldHRlciwKKyAgICAgICAgMCAvKiBubyBkYXRhICov
LAorICAgICAgICBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLAor
ICAgICAgICBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwKKyAg
ICAgICAgMCAvKiBvbiBpbnN0YW5jZSAqLworICAgIH0sCisgICAgeworICAgICAgICAvLyBBdHRy
aWJ1dGUgJ3Rlc3RPYmpBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCisgICAg
ICAgICJ0ZXN0T2JqQXR0ciIsCisgICAgICAgIFRlc3RPYmpJbnRlcm5hbDo6dGVzdE9iakF0dHJB
dHRyR2V0dGVyLAorICAgICAgICBUZXN0T2JqSW50ZXJuYWw6OnRlc3RPYmpBdHRyQXR0clNldHRl
ciwKKyAgICAgICAgMCAvKiBubyBkYXRhICovLAorICAgICAgICBzdGF0aWNfY2FzdDx2ODo6QWNj
ZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLAorICAgICAgICBzdGF0aWNfY2FzdDx2ODo6UHJvcGVy
dHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwKKyAgICAgICAgMCAvKiBvbiBpbnN0YW5jZSAqLworICAg
IH0sCisgICAgeworICAgICAgICAvLyBBdHRyaWJ1dGUgJ2F0dHJXaXRoRXhjZXB0aW9uJyAoVHlw
ZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCisgICAgICAgICJhdHRyV2l0aEV4Y2VwdGlvbiIs
CisgICAgICAgIFRlc3RPYmpJbnRlcm5hbDo6YXR0cldpdGhFeGNlcHRpb25BdHRyR2V0dGVyLAor
ICAgICAgICBUZXN0T2JqSW50ZXJuYWw6OmF0dHJXaXRoRXhjZXB0aW9uQXR0clNldHRlciwKKyAg
ICAgICAgMCAvKiBubyBkYXRhICovLAorICAgICAgICBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29u
dHJvbD4odjg6OkRFRkFVTFQpLAorICAgICAgICBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRy
aWJ1dGU+KHY4OjpOb25lKSwKKyAgICAgICAgMCAvKiBvbiBpbnN0YW5jZSAqLworICAgIH0sCisg
ICAgeworICAgICAgICAvLyBBdHRyaWJ1dGUgJ2F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uJyAoVHlw
ZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCisgICAgICAgICJhdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbiIsCisgICAgICAgIFRlc3RPYmpJbnRlcm5hbDo6YXR0cldpdGhTZXR0ZXJFeGNlcHRpb25B
dHRyR2V0dGVyLAorICAgICAgICBUZXN0T2JqSW50ZXJuYWw6OmF0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uQXR0clNldHRlciwKKyAgICAgICAgMCAvKiBubyBkYXRhICovLAorICAgICAgICBzdGF0aWNf
Y2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLAorICAgICAgICBzdGF0aWNfY2Fz
dDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwKKyAgICAgICAgMCAvKiBvbiBpbnN0
YW5jZSAqLworICAgIH0sCisgICAgeworICAgICAgICAvLyBBdHRyaWJ1dGUgJ2F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCisgICAgICAgICJh
dHRyV2l0aEdldHRlckV4Y2VwdGlvbiIsCisgICAgICAgIFRlc3RPYmpJbnRlcm5hbDo6YXR0cldp
dGhHZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyLAorICAgICAgICBUZXN0T2JqSW50ZXJuYWw6OmF0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uQXR0clNldHRlciwKKyAgICAgICAgMCAvKiBubyBkYXRhICov
LAorICAgICAgICBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLAor
ICAgICAgICBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwKKyAg
ICAgICAgMCAvKiBvbiBpbnN0YW5jZSAqLworICAgIH0sCisgICAgeworICAgICAgICAvLyBBdHRy
aWJ1dGUgJ2N1c3RvbUF0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnQ3VzdG9tJykK
KyAgICAgICAgImN1c3RvbUF0dHIiLAorICAgICAgICBWOFRlc3RPYmo6OmN1c3RvbUF0dHJBY2Nl
c3NvckdldHRlciwKKyAgICAgICAgVjhUZXN0T2JqOjpjdXN0b21BdHRyQWNjZXNzb3JTZXR0ZXIs
CisgICAgICAgIDAgLyogbm8gZGF0YSAqLywKKyAgICAgICAgc3RhdGljX2Nhc3Q8djg6OkFjY2Vz
c0NvbnRyb2w+KHY4OjpERUZBVUxUKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5
QXR0cmlidXRlPih2ODo6Tm9uZSksCisgICAgICAgIDAgLyogb24gaW5zdGFuY2UgKi8KKyAgICB9
LAorfTsKK3N0YXRpYyBjb25zdCBCYXRjaGVkQ2FsbGJhY2sgVGVzdE9ial9jYWxsYmFja3NbXSA9
IHsKKyAgeyJ2b2lkTWV0aG9kIiwgVGVzdE9iakludGVybmFsOjp2b2lkTWV0aG9kQ2FsbGJhY2t9
LAorICB7ImludE1ldGhvZCIsIFRlc3RPYmpJbnRlcm5hbDo6aW50TWV0aG9kQ2FsbGJhY2t9LAor
ICB7Im9iak1ldGhvZCIsIFRlc3RPYmpJbnRlcm5hbDo6b2JqTWV0aG9kQ2FsbGJhY2t9LAorICB7
Im1ldGhvZFdpdGhFeGNlcHRpb24iLCBUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhFeGNlcHRp
b25DYWxsYmFja30sCisgIHsiY3VzdG9tTWV0aG9kIiwgVjhUZXN0T2JqOjpjdXN0b21NZXRob2RD
YWxsYmFja30sCisgIHsiY3VzdG9tTWV0aG9kV2l0aEFyZ3MiLCBWOFRlc3RPYmo6OmN1c3RvbU1l
dGhvZFdpdGhBcmdzQ2FsbGJhY2t9LAorICB7Im1ldGhvZFdpdGhPcHRpb25hbEFyZyIsIFRlc3RP
YmpJbnRlcm5hbDo6bWV0aG9kV2l0aE9wdGlvbmFsQXJnQ2FsbGJhY2t9LAorICB7Im1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnIiwgVGVzdE9iakludGVybmFsOjptZXRob2RX
aXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZ0NhbGxiYWNrfSwKKyAgeyJtZXRob2RXaXRo
Tm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MiLCBUZXN0T2JqSW50ZXJuYWw6Om1ldGhv
ZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJnc0NhbGxiYWNrfSwKK307CitzdGF0
aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdE9i
alRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKQorewor
ICAgIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPiBkZWZhdWx0X3NpZ25hdHVyZSA9IGNvbmZpZ3Vy
ZVRlbXBsYXRlKGRlc2MsICJUZXN0T2JqIiwgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+KCksIFY4VGVzdE9iajo6aW50ZXJuYWxGaWVsZENvdW50LAorICAgICAgICBUZXN0T2Jq
X2F0dHJzLCBzaXplb2YoVGVzdE9ial9hdHRycykvc2l6ZW9mKCpUZXN0T2JqX2F0dHJzKSwKKyAg
ICAgICAgVGVzdE9ial9jYWxsYmFja3MsIHNpemVvZihUZXN0T2JqX2NhbGxiYWNrcykvc2l6ZW9m
KCpUZXN0T2JqX2NhbGxiYWNrcykpOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+
IGluc3RhbmNlID0gZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgpOworICAgIHY4OjpMb2NhbDx2ODo6
T2JqZWN0VGVtcGxhdGU+IHByb3RvID0gZGVzYy0+UHJvdG90eXBlVGVtcGxhdGUoKTsKKyAgICAK
KworICAgIC8vIEN1c3RvbSBTaWduYXR1cmUgJ3ZvaWRNZXRob2RXaXRoQXJncycKKyAgICBjb25z
dCBpbnQgdm9pZE1ldGhvZFdpdGhBcmdzX2FyZ2MgPSAzOworICAgIHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IHZvaWRNZXRob2RXaXRoQXJnc19hcmd2W3ZvaWRNZXRob2RXaXRoQXJn
c19hcmdjXSA9IHsgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgdjg6OkhhbmRs
ZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgVjhUZXN0T2JqOjpHZXRSYXdUZW1wbGF0ZSgpIH07
CisgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiB2b2lkTWV0aG9kV2l0aEFyZ3Nfc2lnbmF0
dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIHZvaWRNZXRob2RXaXRoQXJnc19hcmdjLCB2
b2lkTWV0aG9kV2l0aEFyZ3NfYXJndik7CisgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXco
InZvaWRNZXRob2RXaXRoQXJncyIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpJ
bnRlcm5hbDo6dm9pZE1ldGhvZFdpdGhBcmdzQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVl
PigpLCB2b2lkTWV0aG9kV2l0aEFyZ3Nfc2lnbmF0dXJlKSk7CisKKyAgICAvLyBDdXN0b20gU2ln
bmF0dXJlICdpbnRNZXRob2RXaXRoQXJncycKKyAgICBjb25zdCBpbnQgaW50TWV0aG9kV2l0aEFy
Z3NfYXJnYyA9IDM7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gaW50TWV0
aG9kV2l0aEFyZ3NfYXJndltpbnRNZXRob2RXaXRoQXJnc19hcmdjXSA9IHsgdjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4o
KSwgVjhUZXN0T2JqOjpHZXRSYXdUZW1wbGF0ZSgpIH07CisgICAgdjg6OkhhbmRsZTx2ODo6U2ln
bmF0dXJlPiBpbnRNZXRob2RXaXRoQXJnc19zaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXco
ZGVzYywgaW50TWV0aG9kV2l0aEFyZ3NfYXJnYywgaW50TWV0aG9kV2l0aEFyZ3NfYXJndik7Cisg
ICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoImludE1ldGhvZFdpdGhBcmdzIiksIHY4OjpG
dW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9iakludGVybmFsOjppbnRNZXRob2RXaXRoQXJnc0Nh
bGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgaW50TWV0aG9kV2l0aEFyZ3Nfc2lnbmF0
dXJlKSk7CisKKyAgICAvLyBDdXN0b20gU2lnbmF0dXJlICdvYmpNZXRob2RXaXRoQXJncycKKyAg
ICBjb25zdCBpbnQgb2JqTWV0aG9kV2l0aEFyZ3NfYXJnYyA9IDM7CisgICAgdjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gb2JqTWV0aG9kV2l0aEFyZ3NfYXJndltvYmpNZXRob2RXaXRo
QXJnc19hcmdjXSA9IHsgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgdjg6Okhh
bmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgVjhUZXN0T2JqOjpHZXRSYXdUZW1wbGF0ZSgp
IH07CisgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBvYmpNZXRob2RXaXRoQXJnc19zaWdu
YXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgb2JqTWV0aG9kV2l0aEFyZ3NfYXJnYywg
b2JqTWV0aG9kV2l0aEFyZ3NfYXJndik7CisgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXco
Im9iak1ldGhvZFdpdGhBcmdzIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9iaklu
dGVybmFsOjpvYmpNZXRob2RXaXRoQXJnc0NhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4o
KSwgb2JqTWV0aG9kV2l0aEFyZ3Nfc2lnbmF0dXJlKSk7CisKKyAgICAvLyBDdXN0b20gdG9TdHJp
bmcgdGVtcGxhdGUKKyAgICBkZXNjLT5TZXQoZ2V0VG9TdHJpbmdOYW1lKCksIGdldFRvU3RyaW5n
VGVtcGxhdGUoKSk7CisgICAgcmV0dXJuIGRlc2M7Cit9CisKK3Y4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBWOFRlc3RPYmo6OkdldFJhd1RlbXBsYXRlKCkKK3sKKyAgICBzdGF0
aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE9ial9yYXdfY2Fj
aGVfID0gY3JlYXRlUmF3VGVtcGxhdGUoKTsKKyAgICByZXR1cm4gVjhUZXN0T2JqX3Jhd19jYWNo
ZV87Cit9CisKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFRlc3RPYmo6
OkdldFRlbXBsYXRlKCkKK3sKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IFY4VGVzdE9ial9jYWNoZV8gPSBDb25maWd1cmVWOFRlc3RPYmpUZW1wbGF0ZShH
ZXRSYXdUZW1wbGF0ZSgpKTsKKyAgICByZXR1cm4gVjhUZXN0T2JqX2NhY2hlXzsKK30KKworVGVz
dE9iaiogVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkK
K3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUZXN0T2JqKj4ob2JqZWN0LT5HZXRQb2lu
dGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKK30KKworYm9v
bCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gR2V0UmF3VGVtcGxhdGUoKS0+SGFzSW5zdGFuY2UodmFsdWUpOworfQorCisK
K3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0T2JqOjp3cmFwKFRlc3RPYmoqIGltcGwpCit7
CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOworICAgIFY4UHJveHkqIHByb3h5
ID0gMDsKKyAgICB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KGltcGwpOworICAgIGlm
ICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHdyYXBw
ZXIgPSBWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QocHJveHksICZpbmZvLCBpbXBs
KTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOwor
CisgICAgaW1wbC0+cmVmKCk7CisgICAgZ2V0RE9NT2JqZWN0TWFwKCkuc2V0KGltcGwsIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcikpOworICAgIHJldHVybiB3cmFwcGVy
OworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPFRlc3RPYmogPiBp
bXBsKQoreworICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCkpOworfQorCit2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChUZXN0T2JqKiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAg
cmV0dXJuIHY4OjpOdWxsKCk7CisgICAgcmV0dXJuIFY4VGVzdE9iajo6d3JhcChpbXBsKTsKK30K
Kwordm9pZCBWOFRlc3RPYmo6OmRlcmVmT2JqZWN0KHZvaWQqIG9iamVjdCkKK3sKKyAgICBzdGF0
aWNfY2FzdDxUZXN0T2JqKj4ob2JqZWN0KS0+ZGVyZWYoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC90ZXN0L1Y4VGVzdE9iai5o
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC90ZXN0L1Y4VGVzdE9iai5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjA3YTI4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L3Rlc3QvVjhUZXN0T2JqLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAgICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KKyovCisKKyNpZm5kZWYgVjhUZXN0T2JqX0gKKyNkZWZpbmUgVjhUZXN0T2JqX0gKKworI2lu
Y2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlICJTdHJpbmdI
YXNoLmgiCisjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCisjaW5jbHVkZSAiVGVzdE9iai5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFY4VGVzdE9iaiB7CisKK3B1YmxpYzoK
KyAgICBzdGF0aWMgYm9vbCBIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUp
OworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0UmF3
VGVtcGxhdGUoKTsKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IEdldFRlbXBsYXRlKCk7CisgICAgc3RhdGljIFRlc3RPYmoqIHRvTmF0aXZlKHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4pOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAo
VGVzdE9iaiopOworICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsKKyAgICBzdGF0
aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBjdXN0b21NZXRob2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJik7CisgICAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXN0b21NZXRob2RXaXRoQXJnc0NhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGN1c3Rv
bUF0dHJBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbyk7CisgICAgc3RhdGljIHZvaWQgY3VzdG9tQXR0ckFjY2Vzc29y
U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbyk7CisgICAgc3RhdGljIGNvbnN0IGlu
dCBpbnRlcm5hbEZpZWxkQ291bnQgPSB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50
ICsgMDsKK307CisKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0T2JqKik7Cisg
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjxUZXN0T2JqID4pOworfQor
CisjZW5kaWYgLy8gVjhUZXN0T2JqX0gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
dGVzdC9ydW5fdGVzdHMucHkgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L3Rlc3QvcnVuX3Rlc3RzLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyN2Q1NTkKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L3Rlc3QvcnVuX3Rlc3RzLnB5CkBAIC0wLDAgKzEs
NTggQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
IyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisjIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorIyBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisj
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorIyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisjIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyMKKworIyBUaGlzIHNjcmlwdCBnZW5lcmF0ZXMgaCBhbmQgY3BwIGZpbGUgZm9yIFRl
c3RPYmouaWRsIHVzaW5nIHRoZSBWOCBjb2RlCisjIGdlbmVyYXRvci4gUGxlYXNlIGV4ZWN1dGUg
dGhlIHNjcmlwdCB3aGVuZXZlciBjaGFuZ2VzIGFyZSBtYWRlIHRvCisjIENvZGVHZW5lcmF0b3JW
OC5wbSwgYW5kIHN1Ym1pdCB0aGUgY2hhbmdlcyBpbiBWOFRlc3RPYmouaC9jcHAgaW4gdGhlIHNh
bWUKKyMgcGF0Y2guIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHRyYWNrIGFuZCByZXZpZXcgY2hh
bmdlcyBpbiBnZW5lcmF0ZWQgY29kZS4KKyMgVG8gZXhlY3V0ZSwgaW52b2tlOiAncHl0aG9uIHJ1
bl90ZXN0cy5weScKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKKworZGVmIHRlc3QoaWRsRmls
ZVBhdGgpOgorICAgIGNtZCA9IFsncGVybCcsICctdycsCisgICAgICAgICAnLUkuLi8uLi9zY3Jp
cHRzJywKKyAgICAgICAgICcuLi8uLi9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsJywKKyAg
ICAgICAgICMgaWRsIGluY2x1ZGUgZGlyZWN0b3JpZXMgKHBhdGggcmVsYXRpdmUgdG8gZ2VuZXJh
dGUtYmluZGluZ3MucGwpCisgICAgICAgICAnLS1pbmNsdWRlIC4nLAorICAgICAgICAgIyBwbGFj
ZSBob2xkZXIgZm9yIGRlZmluZXMgKGdlbmVyYXRlLWJpbmRpbmdzLnBsIHJlcXVpcmVzIGl0KQor
ICAgICAgICAgJy0tZGVmaW5lcyB4eHgnLAorICAgICAgICAgJy0tZ2VuZXJhdG9yIFY4JywKKyAg
ICAgICAgICctLW91dHB1dERpciAuJywKKyAgICAgICAgIGlkbEZpbGVQYXRoXQorICAgIG9zLnN5
c3RlbSgnICcuam9pbihjbWQpKQorCisKK2RlZiBtYWluKGFyZ3YpOgorICAgIHNjcmlwdERpciA9
IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICBvcy5jaGRpcihzY3JpcHREaXIpCisgICAg
dGVzdCgnVGVzdE9iai5pZGwnKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAg
c3lzLmV4aXQobWFpbihzeXMuYXJndikpCg==
</data>
<flag name="review"
          id="36480"
          type_id="1"
          status="+"
          setter="japhet"
    />
          </attachment>
      

    </bug>

</bugzilla>