<?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>111310</bug_id>
          
          <creation_ts>2013-03-04 06:19:28 -0800</creation_ts>
          <short_desc>[WK2] Add unit tests for CoreIPC</short_desc>
          <delta_ts>2013-06-11 00:42:52 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></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>
          <dependson>110978</dependson>
          <blocked>111543</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Thiago Marcos P. Santos">tmpsantos</reporter>
          <assigned_to name="Thiago Marcos P. Santos">tmpsantos</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kbalazs</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>menard</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>846407</commentid>
    <comment_count>0</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-03-04 06:19:28 -0800</bug_when>
    <thetext>Add some tests to test things like the Connection abstraction, encoder/decoders, synchronous messages from threads, etc.

The test will isolate the CoreIPC code from the rest of WebKit, making it easier to optimize and debug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846429</commentid>
    <comment_count>1</comment_count>
      <attachid>191227</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-03-04 06:40:20 -0800</bug_when>
    <thetext>Created attachment 191227
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849039</commentid>
    <comment_count>2</comment_count>
      <attachid>191227</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-03-06 10:34:19 -0800</bug_when>
    <thetext>Comment on attachment 191227
Patch

No modified xcode project files??</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849204</commentid>
    <comment_count>3</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-03-06 12:46:24 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 191227 [details])
&gt; No modified xcode project files??

No, this test is Unix only because of the exact same platform dependency CoreIPC has for its initialization: socket creation.

There is work being done on bug 110978 to address this, but I am fine with other platform maintainers adding #ifdefs for their platforms on the test meanwhile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849209</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-03-06 12:52:20 -0800</bug_when>
    <thetext>Why not create platform abstraction like PlatformWebView?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849263</commentid>
    <comment_count>5</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-03-06 13:41:19 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Why not create platform abstraction like PlatformWebView?

It can be done. Gonna upload a new version tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849264</commentid>
    <comment_count>6</comment_count>
      <attachid>191227</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-03-06 13:42:08 -0800</bug_when>
    <thetext>Comment on attachment 191227
Patch

Removing flags. Going to rework this patch as suggested. Thanks for reviewing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849275</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-03-06 13:55:34 -0800</bug_when>
    <thetext>Thanks, I like the way this is going :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849390</commentid>
    <comment_count>8</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2013-03-06 15:51:48 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Why not create platform abstraction like PlatformWebView?

This is exactly what I created bug 110978 for. I&apos;m disappointed that we cannot add that abstraction to CoreIPC - which would make ports require less platform specific code to support concepts like network process or plugin process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849401</commentid>
    <comment_count>9</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-03-06 16:03:36 -0800</bug_when>
    <thetext>&gt; This is exactly what I created bug 110978 for. I&apos;m disappointed that we cannot add that abstraction to CoreIPC - which would make ports require less platform specific code to support concepts like network process or plugin process.

This makes sense, I forgot about 110978.
I would prefer 110978 being done prior to work on the tests.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191227</attachid>
            <date>2013-03-04 06:40:20 -0800</date>
            <delta_ts>2013-03-06 13:42:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111310-20130304164218.patch</filename>
            <type>text/plain</type>
            <size>18932</size>
            <attacher name="Thiago Marcos P. Santos">tmpsantos</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0MTYzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzZhOGNmZDVmZDVmMzQ5ODRlZTM2MzlhZTY4ZDUwNmUw
MGEzMTkzZi4uYjAyN2EzYTZiZWRmZjIxM2I1YmU4MTY0NWIzMjJmMWI1OTcwM2RjYSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0
IEBACisyMDEzLTAzLTA0ICBUaGlhZ28gTWFyY29zIFAuIFNhbnRvcyAgPHRoaWFnby5zYW50b3NA
aW50ZWwuY29tPgorCisgICAgICAgIFtXSzJdIEFkZCB1bml0IHRlc3RzIGZvciBDb3JlSVBDCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTEzMTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB1bml0
IHRlc3RzIGZvciBDb3JlSVBDIGFuZCBlbmFibGVkIHRoZW0gYnkgZGVmYXVsdCBvbiB0aGUgRUZM
IHBvcnQuCisgICAgICAgIFVuZm9ydHVuYXRlbHkgdGhlIHByb2Nlc3MgYW5kIGNvbm5lY3Rpb24g
SWRlbnRpZmllciBjcmVhdGlvbiBhcmUKKyAgICAgICAgcGxhdGZvcm0gZGVwZW5kZW50LCBzbyBJ
J20gYWRkaW5nIHRoaXMgdGVzdCBqdXN0IGZvciBVbml4IGJ5IG5vdy4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0
Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvdW5p
eC9Db3JlSVBDLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJKToKKyAgICAgICAg
KFRlc3RDbGllbnQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VGVzdENsaWVudDo6VGVzdENs
aWVudCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUZXN0Q2xpZW50Ojpjb25uZWN0aW9uKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RDbGllbnQ6OnNldFJlY2VpdmVNZXNzYWdlQ2Fs
bGJhY2spOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VGVzdENsaWVudDo6ZGlkQ2xvc2UpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VGVzdENsaWVudDo6ZGlkUmVjZWl2ZUludmFsaWRNZXNz
YWdlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RDbGllbnQ6OmRpZFJlY2VpdmVNZXNz
YWdlKToKKyAgICAgICAgKFRlc3RTZXJ2ZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VGVz
dFNlcnZlcjo6VGVzdFNlcnZlcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUZXN0U2VydmVy
Ojppbml0aWFsaXplKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RTZXJ2ZXI6Omxvb3Bi
YWNrTWVzc2FnZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUZXN0U2VydmVyOjpzdHJpbmdM
b29wYmFja01lc3NhZ2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VGVzdFNlcnZlcjo6ZGlk
Q2xvc2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VGVzdFNlcnZlcjo6ZGlkUmVjZWl2ZUlu
dmFsaWRNZXNzYWdlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RTZXJ2ZXI6OmRpZFJl
Y2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RTZXJ2ZXI6OmRpZFJl
Y2VpdmVTeW5jTWVzc2FnZSk6CisgICAgICAgIChDb3JlSVBDRW52aXJvbm1lbnQpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Q29yZUlQQ0Vudmlyb25tZW50OjpTZXRVcCk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpDb3JlSVBDRW52aXJvbm1lbnQ6OmNsaWVudCk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpDb3JlSVBDRW52aXJvbm1lbnQ6OnRlc3RDaGFyKToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OnN0cmluZ1NlcmlhbGl6YXRpb25DYWxsYmFjayk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpURVNUKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRhdGFTZXJpYWxpemF0aW9u
Q2FsbGJhY2spOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6dGhyZWFkZWRTdHJpbmdTZXJpYWxp
emF0aW9uVGhyZWFkKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRocmVhZGVkU3RyaW5nU2Vy
aWFsaXphdGlvblNodXRkb3duQ2FsbGJhY2spOgorCiAyMDEzLTAyLTI3ICBSeW9zdWtlIE5pd2Eg
IDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEJ1aWxkIGZpeCBhZnRlciByMTQ0MTU1LiBU
aGUgcmVwb3J0IHBhZ2UgaXMgbG9jYXRlZCBhdCAvYXBpL3JlcG9ydCwgbm90IC9hcGkvdGVzdC9y
ZXBvcnQuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0IGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAppbmRleCAxZDk2YjBkNjA1NzY5YjRm
NjhlOGIxMzFmM2RmN2JkOTBlMDQ2NjFhLi43YzliZDExMGZhNjdmNDFmYzBmZDQxMjM4ZGM4NTQ4
MjNiYWUyNTJiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQKQEAgLTEyMiwxNSArMTIy
LDE3IEBAIHNldCh0ZXN0X3dlYmtpdDJfYXBpX0xJQlJBUklFUwogICAgIFRlc3RXZWJLaXRBUElC
YXNlCiAgICAgJHtXVEZfTElCUkFSWV9OQU1FfQogICAgICR7SmF2YVNjcmlwdENvcmVfTElCUkFS
WV9OQU1FfQorICAgICR7V2ViQ29yZV9MSUJSQVJZX05BTUV9CiAgICAgJHtXZWJLaXQyX0xJQlJB
UllfTkFNRX0KICAgICBndGVzdAogKQogCiBmb3JlYWNoICh0ZXN0TmFtZSAke3Rlc3Rfd2Via2l0
Ml9hcGlfQklOQVJJRVN9KQotICAgIGFkZF9leGVjdXRhYmxlKHRlc3Rfd2Via2l0Ml9hcGlfJHt0
ZXN0TmFtZX0gJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViS2l0Mi8ke3Rlc3ROYW1lfS5j
cHApCi0gICAgYWRkX3Rlc3QodGVzdF93ZWJraXQyX2FwaV8ke3Rlc3ROYW1lfSAke0NNQUtFX1JV
TlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vdGVzdF93ZWJraXQyX2FwaV8ke3Rlc3ROYW1lfSkKLSAg
ICBzZXRfdGVzdHNfcHJvcGVydGllcyh0ZXN0X3dlYmtpdDJfYXBpXyR7dGVzdE5hbWV9IFBST1BF
UlRJRVMgVElNRU9VVCA2MCkKLSAgICB0YXJnZXRfbGlua19saWJyYXJpZXModGVzdF93ZWJraXQy
X2FwaV8ke3Rlc3ROYW1lfSAke3Rlc3Rfd2Via2l0Ml9hcGlfTElCUkFSSUVTfSkKKyAgICBnZXRf
ZmlsZW5hbWVfY29tcG9uZW50KHRlc3RCYXNlTmFtZSAke3Rlc3ROYW1lfSBOQU1FKQorICAgIGFk
ZF9leGVjdXRhYmxlKHRlc3Rfd2Via2l0Ml9hcGlfJHt0ZXN0QmFzZU5hbWV9ICR7VEVTVFdFQktJ
VEFQSV9ESVJ9L1Rlc3RzL1dlYktpdDIvJHt0ZXN0TmFtZX0uY3BwKQorICAgIGFkZF90ZXN0KHRl
c3Rfd2Via2l0Ml9hcGlfJHt0ZXN0QmFzZU5hbWV9ICR7Q01BS0VfUlVOVElNRV9PVVRQVVRfRElS
RUNUT1JZfS90ZXN0X3dlYmtpdDJfYXBpXyR7dGVzdEJhc2VOYW1lfSkKKyAgICBzZXRfdGVzdHNf
cHJvcGVydGllcyh0ZXN0X3dlYmtpdDJfYXBpXyR7dGVzdEJhc2VOYW1lfSBQUk9QRVJUSUVTIFRJ
TUVPVVQgNjApCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3Rfd2Via2l0Ml9hcGlfJHt0
ZXN0QmFzZU5hbWV9ICR7dGVzdF93ZWJraXQyX2FwaV9MSUJSQVJJRVN9KQogZW5kZm9yZWFjaCAo
KQogCiAjIFdlIGRvbid0IHJ1biB0ZXN0cyB0aGF0IGFyZSBleHBlY3RlZCB0byBmYWlsLiBXZSBj
b3VsZCB1c2UgdGhlIFdJTExfRkFJTApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Q
bGF0Zm9ybUVmbC5jbWFrZSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1FZmwuY21ha2UK
aW5kZXggM2JjYjg5YjZlOTIyODE3ZTY4OGM0MzAwNjdiOTBhNDk0Mzg0MTBhOC4uOTE4NzY2MDZj
M2RiNzZkZDkyNmU1MTZlOTM1N2FlOWUyN2Q1YjdiMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRm
b3JtRWZsLmNtYWtlCkBAIC0xMSw2ICsxMSw4IEBAIGFkZF9jdXN0b21fdGFyZ2V0KGZvcndhcmRp
bmctaGVhZGVyc1NvdXBGb3JUZXN0V2ViS2l0QVBJCiBzZXQoRm9yd2FyZGluZ05ldHdvcmtIZWFk
ZXJzRm9yVGVzdFdlYktpdEFQSV9OQU1FIGZvcndhcmRpbmctaGVhZGVyc1NvdXBGb3JUZXN0V2Vi
S2l0QVBJKQogCiBpbmNsdWRlX2RpcmVjdG9yaWVzKAorICAgICR7V0VCS0lUMl9ESVJ9L1BsYXRm
b3JtCisgICAgJHtXRUJLSVQyX0RJUn0vUGxhdGZvcm0vQ29yZUlQQwogICAgICR7V0VCS0lUMl9E
SVJ9L1VJUHJvY2Vzcy9BUEkvQy9zb3VwCiAgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQ
SS9DL2VmbAogICAgICR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsCkBAIC04OCw2ICs5
MCwxNCBAQCBzZXQodGVzdF93ZWJraXQyX2FwaV9CSU5BUklFUwogICAgIFdpbGxTZW5kU3VibWl0
RXZlbnQKICkKIAorIyBDb3JlSVBDIGlzIGFuIGludGVybmFsIEFQSSBhbmQgaXRzIHN5bWJvbHMg
YXJlIG5vdCBleHBvc2VkIGJ5CisjIGRlZmF1bHQuIFdlIGNhbiBvbmx5IHRlc3QgaXQgd2hlbiBi
dWlsZGluZyBzaGFyZWQgY29yZS4KK2lmIChTSEFSRURfQ09SRSkKKyAgICBsaXN0KEFQUEVORCB0
ZXN0X3dlYmtpdDJfYXBpX0JJTkFSSUVTCisgICAgICAgIHVuaXgvQ29yZUlQQworICAgICkKK2Vu
ZGlmICgpCisKIHNldCh0ZXN0X3dlYmtpdDJfYXBpX2ZhaWxfQklOQVJJRVMKICAgICBDYW5IYW5k
bGVSZXF1ZXN0CiAgICAgRE9NV2luZG93RXh0ZW5zaW9uQmFzaWMKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi91bml4L0NvcmVJUEMuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL3VuaXgvQ29yZUlQQy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzE3
NDdjYmIyMmNlNDc4YjNjMWYzOWQ1ZmNkNzg5OTk0YWIzZDgwMAotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi91bml4L0NvcmVJUEMuY3BwCkBAIC0w
LDAgKzEsMzkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIK
KyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0lu
dFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9LVVJMLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9SdW5Mb29wLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9Db25uZWN0aW9uLmg+CisjaW5jbHVkZSA8
V2ViS2l0Mi9TdHJpbmdSZWZlcmVuY2UuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5j
bHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBDb3JlSVBDOwordXNpbmcgbmFtZXNw
YWNlIFdURjsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBUZXN0Q2xpZW50
IDogcHJvdGVjdGVkIENvbm5lY3Rpb246OkNsaWVudCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2
b2lkICgqUmVjZWl2ZU1lc3NhZ2VDYWxsYmFjaykoTWVzc2FnZURlY29kZXImKTsKKworICAgIFRl
c3RDbGllbnQoQ29ubmVjdGlvbjo6SWRlbnRpZmllciBpZGVudGlmaWVyKQorICAgIHsKKyAgICAg
ICAgbV9jb25uZWN0aW9uID0gQ29ubmVjdGlvbjo6Y3JlYXRlU2VydmVyQ29ubmVjdGlvbihpZGVu
dGlmaWVyLCB0aGlzLCBXZWJDb3JlOjpSdW5Mb29wOjptYWluKCkpOworICAgICAgICBtX2Nvbm5l
Y3Rpb24tPm9wZW4oKTsKKyAgICB9CisKKyAgICBDb25uZWN0aW9uKiBjb25uZWN0aW9uKCkgeyBy
ZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CisKKyAgICB2b2lkIHNldFJlY2VpdmVNZXNzYWdl
Q2FsbGJhY2soUmVjZWl2ZU1lc3NhZ2VDYWxsYmFjayBjYWxsYmFjaykgeyBtX3JlY2VpdmVNZXNz
YWdlQ2FsbGJhY2sgPSBjYWxsYmFjazsgfQorCitwcml2YXRlOgorICAgIC8vIENvcmVJUEM6OkNv
bm5lY3Rpb246OkNsaWVudCBpbnRlcmZhY2UuCisgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKENv
bm5lY3Rpb24qKSB7IENSQVNIKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUludmFs
aWRNZXNzYWdlKENvbm5lY3Rpb24qLCBTdHJpbmdSZWZlcmVuY2UsIFN0cmluZ1JlZmVyZW5jZSkg
eyBDUkFTSCgpOyB9CisKKyAgICAvLyBDb3JlSVBDOjpNZXNzYWdlUmVjZWl2ZXIgaW50ZXJmYWNl
LgorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb25uZWN0aW9uKiwgTWVzc2Fn
ZURlY29kZXImIGRlY29kZXIpCisgICAgeworICAgICAgICBtX3JlY2VpdmVNZXNzYWdlQ2FsbGJh
Y2soZGVjb2Rlcik7CisgICAgfQorCisgICAgUmVjZWl2ZU1lc3NhZ2VDYWxsYmFjayBtX3JlY2Vp
dmVNZXNzYWdlQ2FsbGJhY2s7CisgICAgUmVmUHRyPENvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsK
K307CisKK2NsYXNzIFRlc3RTZXJ2ZXIgOiBwcm90ZWN0ZWQgQ29ubmVjdGlvbjo6Q2xpZW50IHsK
K3B1YmxpYzoKKyAgICBUZXN0U2VydmVyKENvbm5lY3Rpb246OklkZW50aWZpZXIgaWRlbnRpZmll
cikKKyAgICB7CisgICAgICAgIG1fY29ubmVjdGlvbiA9IENvbm5lY3Rpb246OmNyZWF0ZVNlcnZl
ckNvbm5lY3Rpb24oaWRlbnRpZmllciwgdGhpcywgV2ViQ29yZTo6UnVuTG9vcDo6bWFpbigpKTsK
KyAgICAgICAgbV9jb25uZWN0aW9uLT5vcGVuKCk7CisgICAgfQorCisgICAgdm9pZCBpbml0aWFs
aXplKCkKKyAgICB7CisgICAgICAgIFdlYkNvcmU6OlJ1bkxvb3A6OnJ1bigpOworICAgICAgICBl
eGl0KDApOworICAgIH0KKworcHJpdmF0ZToKKyAgICAvLyBHZW5lcmljIG1lc3NhZ2UgbG9vcGJh
Y2ssIHdpbGwgYmFzaWNhbGx5IGNyZWF0ZSBhIHJlcGx5IHdpdGggdGhlIHNhbWUKKyAgICAvLyBj
b250ZW50cyBvZiB0aGUgaW5wdXQuCisgICAgUGFzc093blB0cjxNZXNzYWdlRW5jb2Rlcj4gbG9v
cGJhY2tNZXNzYWdlKE1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyKQorICAgIHsKKyAgICAgICAgdWlu
dDhfdCBidWZmZXJbNDA5Nl07CisKKyAgICAgICAgc2l6ZV90IHNpemU7CisgICAgICAgIGZvciAo
c2l6ZSA9IDA7IGRlY29kZXIuZGVjb2RlKGJ1ZmZlcltzaXplXSk7ICsrc2l6ZSkKKyAgICAgICAg
ICAgIEVYUEVDVF9ORShzaXplLCBzaXplb2YoYnVmZmVyKSk7CisKKyAgICAgICAgT3duUHRyPE1l
c3NhZ2VFbmNvZGVyPiBlbmNvZGVyID0gTWVzc2FnZUVuY29kZXI6OmNyZWF0ZSgiSVBDIiwgImxv
b3BiYWNrIiwgZGVjb2Rlci5kZXN0aW5hdGlvbklEKCkpOworICAgICAgICBlbmNvZGVyLT5lbmNv
ZGVGaXhlZExlbmd0aERhdGEoYnVmZmVyLCBzaXplLCAxKTsKKworICAgICAgICByZXR1cm4gZW5j
b2Rlci5yZWxlYXNlKCk7CisgICAgfQorCisgICAgLy8gT3B0aW1pemVkIGxvb3BiYWNrIGZvciBz
dHJpbmcgY29udGVudHMuCisgICAgUGFzc093blB0cjxNZXNzYWdlRW5jb2Rlcj4gc3RyaW5nTG9v
cGJhY2tNZXNzYWdlKE1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyKQorICAgIHsKKyAgICAgICAgT3du
UHRyPE1lc3NhZ2VFbmNvZGVyPiBlbmNvZGVyID0gTWVzc2FnZUVuY29kZXI6OmNyZWF0ZSgiSVBD
IiwgInN0cmluZ0xvb3BiYWNrIiwgZGVjb2Rlci5kZXN0aW5hdGlvbklEKCkpOworCisgICAgICAg
IFN0cmluZyBzdHJpbmc7CisgICAgICAgIHdoaWxlIChkZWNvZGVyLmRlY29kZShzdHJpbmcpKQor
ICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0cmluZyk7CisKKyAgICAgICAgcmV0dXJuIGVu
Y29kZXIucmVsZWFzZSgpOworICAgIH0KKworICAgIC8vIENvcmVJUEM6OkNvbm5lY3Rpb246OkNs
aWVudCBpbnRlcmZhY2UuCisgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKENvbm5lY3Rpb24qKQor
ICAgIHsKKyAgICAgICAgV2ViQ29yZTo6UnVuTG9vcDo6Y3VycmVudCgpLT5zdG9wKCk7CisgICAg
fQorCisgICAgLy8gQ29yZUlQQzo6Q29ubmVjdGlvbjo6Q2xpZW50IGludGVyZmFjZS4KKyAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKENvbm5lY3Rpb24qLCBTdHJpbmdS
ZWZlcmVuY2UsIFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkKKyAgICB7CisgICAgICAgIC8v
IGxvb3BiYWNrIG1lc3NhZ2VzIHdpbGwgYWx3YXlzIHRyaWdnZXIgdGhlIGludmFsaWQgbWVzc2Fn
ZSBoYW5kbGVyCisgICAgICAgIC8vIGJlY2F1c2Ugd2UgZGVjb2RlIGl0IGJ5dGUgYnkgYnl0ZSB1
bnRpbCB3ZSBmaW5kIHRoZSBlbmQgb2YgdGhlIG1lc3NhZ2UuCisgICAgICAgIGlmIChtZXNzYWdl
TmFtZSA9PSBTdHJpbmdSZWZlcmVuY2UoImxvb3BiYWNrIikpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGlmIChtZXNzYWdlTmFtZSA9PSBTdHJpbmdSZWZlcmVuY2UoInN0cmluZ0xvb3Bi
YWNrIikpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisK
KyAgICAvLyBDb3JlSVBDOjpNZXNzYWdlUmVjZWl2ZXIgaW50ZXJmYWNlLgorICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb25uZWN0aW9uKiwgTWVzc2FnZURlY29kZXImIGRlY29k
ZXIpCisgICAgeworICAgICAgICBPd25QdHI8TWVzc2FnZUVuY29kZXI+IGVuY29kZXI7CisKKyAg
ICAgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBTdHJpbmdSZWZlcmVuY2UoImxvb3Bi
YWNrIikpCisgICAgICAgICAgICBlbmNvZGVyID0gbG9vcGJhY2tNZXNzYWdlKGRlY29kZXIpOwor
ICAgICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IFN0cmluZ1JlZmVyZW5jZSgic3Ry
aW5nTG9vcGJhY2siKSkKKyAgICAgICAgICAgIGVuY29kZXIgPSBzdHJpbmdMb29wYmFja01lc3Nh
Z2UoZGVjb2Rlcik7CisKKyAgICAgICAgbV9jb25uZWN0aW9uLT5zZW5kTWVzc2FnZShlbmNvZGVy
LnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgLy8gQ29yZUlQQzo6TWVzc2FnZVJlY2VpdmVyIGlu
dGVyZmFjZS4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKENvbm5lY3Rp
b24qLCBNZXNzYWdlRGVjb2RlciYgZGVjb2RlciwgT3duUHRyPE1lc3NhZ2VFbmNvZGVyPiYgZW5j
b2RlcikKKyAgICB7CisgICAgICAgIC8vIEZvciBzeW5jIG1lc3NhZ2VzIHdlIGFsd2F5cyBleHBl
Y3QgMyBzdHJpbmdzIGFzIGlucHV0IGFuZCByZXR1cm4KKyAgICAgICAgLy8gdGhlbSBiYWNrLiBX
ZSBjYW5ub3QgdXNlIHRoZSBsb29wYmFjayBoZXJlIGJlY2F1c2UgdGhlIG1lc3NhZ2UgZ2V0cwor
ICAgICAgICAvLyBpbnZhbGlkIGFmdGVyIHRoYXQgYW5kIEFTU0VSVCgpLgorICAgICAgICBTdHJp
bmcgc3RyaW5nOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsgKytpKSB7Cisg
ICAgICAgICAgICBkZWNvZGVyLmRlY29kZShzdHJpbmcpOworICAgICAgICAgICAgZW5jb2Rlci0+
ZW5jb2RlKHN0cmluZyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZWZQdHI8Q29ubmVjdGlv
bj4gbV9jb25uZWN0aW9uOworfTsKKworY2xhc3MgQ29yZUlQQ0Vudmlyb25tZW50IDogcHVibGlj
IHRlc3Rpbmc6OkVudmlyb25tZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAo
KQorICAgIHsKKyAgICAgICAgaW50IHNvY2tldHNbMl07CisgICAgICAgIEFTU0VSVF9ORShzb2Nr
ZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBzb2NrZXRzKSwgLTEpOworCisgICAgICAg
IHBpZF90IHBpZCA9IGZvcmsoKTsKKyAgICAgICAgY2xvc2Uoc29ja2V0c1shcGlkXSk7CisKKyAg
ICAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOworICAgICAgICBXZWJDb3JlOjpSdW5M
b29wOjppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKKworICAgICAgICBpZiAoIXBpZCkgeworICAg
ICAgICAgICAgVGVzdFNlcnZlciBzZXJ2ZXIoc29ja2V0c1swXSk7CisgICAgICAgICAgICBzZXJ2
ZXIuaW5pdGlhbGl6ZSgpOworICAgICAgICB9CisKKyAgICAgICAgbV9jbGllbnQgPSBhZG9wdFB0
cihuZXcgVGVzdENsaWVudChzb2NrZXRzWzFdKSk7CisKKyAgICAgICAgLy8gRmlsbCBvdXIgdGVz
dCBzdHJpbmcgd2l0aCBzb21lIGRhdGEuCisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgd2hp
bGUgKGkgPCBzaXplb2YobV90ZXN0Q2hhcikpCisgICAgICAgICAgICBpICs9IHNucHJpbnRmKCZt
X3Rlc3RDaGFyW2ldLCBzaXplb2YobV90ZXN0Q2hhcikgLSBpLCAiJWQiLCBpKTsKKyAgICB9CisK
KyAgICBUZXN0Q2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudC5nZXQoKTsgfQorCisg
ICAgY2hhciogdGVzdENoYXIoc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBFWFBFQ1RfTEUo
c2l6ZSwgc2l6ZW9mKG1fdGVzdENoYXIpKTsKKworICAgICAgICByZXR1cm4gJm1fdGVzdENoYXJb
c2l6ZW9mKG1fdGVzdENoYXIpIC0gc2l6ZV07CisgICAgfQorCitwcml2YXRlOgorICAgIE93blB0
cjxUZXN0Q2xpZW50PiBtX2NsaWVudDsKKyAgICBjaGFyIG1fdGVzdENoYXJbMjA0OF07Cit9Owor
CitDb3JlSVBDRW52aXJvbm1lbnQqIGNvbnN0IGVudiA9IHN0YXRpY19jYXN0PFRlc3RXZWJLaXRB
UEk6OkNvcmVJUENFbnZpcm9ubWVudCo+KDo6dGVzdGluZzo6QWRkR2xvYmFsVGVzdEVudmlyb25t
ZW50KG5ldyBDb3JlSVBDRW52aXJvbm1lbnQpKTsKKworc3RhdGljIHZvaWQgc3RyaW5nU2VyaWFs
aXphdGlvbkNhbGxiYWNrKE1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIEFTU0VSVF9U
UlVFKFdlYkNvcmU6OlJ1bkxvb3A6OmN1cnJlbnQoKSA9PSBXZWJDb3JlOjpSdW5Mb29wOjptYWlu
KCkpOworCisgICAgU3RyaW5nIGRlY29kZWRTdHJpbmc7CisgICAgZGVjb2Rlci5kZWNvZGUoZGVj
b2RlZFN0cmluZyk7CisgICAgRVhQRUNUX1RSVUUoZGVjb2RlZFN0cmluZyA9PSBlbnYtPnRlc3RD
aGFyKDEyMzQpKTsKKyAgICBkZWNvZGVyLmRlY29kZShkZWNvZGVkU3RyaW5nKTsKKyAgICBFWFBF
Q1RfVFJVRShkZWNvZGVkU3RyaW5nID09IGVudi0+dGVzdENoYXIoMTIzKSk7CisgICAgZGVjb2Rl
ci5kZWNvZGUoZGVjb2RlZFN0cmluZyk7CisgICAgRVhQRUNUX1RSVUUoZGVjb2RlZFN0cmluZyA9
PSBlbnYtPnRlc3RDaGFyKDEyKSk7CisgICAgZGVjb2Rlci5kZWNvZGUoZGVjb2RlZFN0cmluZyk7
CisgICAgRVhQRUNUX1RSVUUoZGVjb2RlZFN0cmluZyA9PSBlbnYtPnRlc3RDaGFyKDEyMzQpKTsK
KyAgICBkZWNvZGVyLmRlY29kZShkZWNvZGVkU3RyaW5nKTsKKyAgICBFWFBFQ1RfVFJVRShkZWNv
ZGVkU3RyaW5nID09IGVudi0+dGVzdENoYXIoMTIzKSk7CisgICAgZGVjb2Rlci5kZWNvZGUoZGVj
b2RlZFN0cmluZyk7CisgICAgRVhQRUNUX1RSVUUoZGVjb2RlZFN0cmluZyA9PSBlbnYtPnRlc3RD
aGFyKDEyKSk7CisKKyAgICBXZWJDb3JlOjpSdW5Mb29wOjpjdXJyZW50KCktPnN0b3AoKTsKK30K
KworVEVTVChXZWJLaXQyLCBTdHJpbmdTZXJpYWxpemF0aW9uKQoreworICAgIEFTU0VSVF9UUlVF
KFdlYkNvcmU6OlJ1bkxvb3A6OmN1cnJlbnQoKSA9PSBXZWJDb3JlOjpSdW5Mb29wOjptYWluKCkp
OworCisgICAgZW52LT5jbGllbnQoKS0+c2V0UmVjZWl2ZU1lc3NhZ2VDYWxsYmFjayhzdHJpbmdT
ZXJpYWxpemF0aW9uQ2FsbGJhY2spOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDUw
MDA7IGkrKykgeworICAgICAgICBPd25QdHI8TWVzc2FnZUVuY29kZXI+IGVuY29kZXIgPSBNZXNz
YWdlRW5jb2Rlcjo6Y3JlYXRlKCJJUEMiLCAic3RyaW5nTG9vcGJhY2siLCBpKTsKKworICAgICAg
ICBTdHJpbmcgcGF5bG9hZFN0cmluZzsKKyAgICAgICAgcGF5bG9hZFN0cmluZyA9IGVudi0+dGVz
dENoYXIoMTIzNCk7CisgICAgICAgIGVuY29kZXItPmVuY29kZShwYXlsb2FkU3RyaW5nKTsKKyAg
ICAgICAgcGF5bG9hZFN0cmluZyA9IGVudi0+dGVzdENoYXIoMTIzKTsKKyAgICAgICAgZW5jb2Rl
ci0+ZW5jb2RlKHBheWxvYWRTdHJpbmcpOworICAgICAgICBwYXlsb2FkU3RyaW5nID0gZW52LT50
ZXN0Q2hhcigxMik7CisgICAgICAgIGVuY29kZXItPmVuY29kZShwYXlsb2FkU3RyaW5nKTsKKyAg
ICAgICAgcGF5bG9hZFN0cmluZyA9IGVudi0+dGVzdENoYXIoMTIzNCk7CisgICAgICAgIGVuY29k
ZXItPmVuY29kZShwYXlsb2FkU3RyaW5nKTsKKyAgICAgICAgcGF5bG9hZFN0cmluZyA9IGVudi0+
dGVzdENoYXIoMTIzKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHBheWxvYWRTdHJpbmcpOwor
ICAgICAgICBwYXlsb2FkU3RyaW5nID0gZW52LT50ZXN0Q2hhcigxMik7CisgICAgICAgIGVuY29k
ZXItPmVuY29kZShwYXlsb2FkU3RyaW5nKTsKKworICAgICAgICBlbnYtPmNsaWVudCgpLT5jb25u
ZWN0aW9uKCktPnNlbmRNZXNzYWdlKGVuY29kZXIucmVsZWFzZSgpKTsKKworICAgICAgICBXZWJD
b3JlOjpSdW5Mb29wOjpjdXJyZW50KCktPnJ1bigpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
ZGF0YVNlcmlhbGl6YXRpb25DYWxsYmFjayhNZXNzYWdlRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBBU1NFUlRfVFJVRShXZWJDb3JlOjpSdW5Mb29wOjpjdXJyZW50KCkgPT0gV2ViQ29yZTo6UnVu
TG9vcDo6bWFpbigpKTsKKworICAgIC8vIFRPRE86IFdvdWxkIGJlIGdvb2QgdG8gdGVzdCB0aGUg
ZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIGFsbAorICAgIC8vIHRoZSBkYXRhIHR5cGVzIHRoYXQg
Y2FuIGJlIHNlcmlhbGl6ZWQgaGVyZS4gUmlnaHQgbm93IHdlIGFyZQorICAgIC8vIGp1c3QgdGVz
dGluZyB0aGUgbW9zdCBjb21tb24gb25lcy4KKyAgICB1aW50NjRfdCBkZWNvZGVkVWludDY0Owor
ICAgIGRlY29kZXIuZGVjb2RlKGRlY29kZWRVaW50NjQpOworICAgIEVYUEVDVF9UUlVFKGRlY29k
ZWRVaW50NjQgPT0gdWludDY0X3QoMTIzNDUpKTsKKyAgICBkZWNvZGVyLmRlY29kZShkZWNvZGVk
VWludDY0KTsKKyAgICBFWFBFQ1RfVFJVRShkZWNvZGVkVWludDY0ID09IHVpbnQ2NF90KDY3ODkw
KSk7CisgICAgZGVjb2Rlci5kZWNvZGUoZGVjb2RlZFVpbnQ2NCk7CisgICAgRVhQRUNUX1RSVUUo
ZGVjb2RlZFVpbnQ2NCA9PSB1aW50NjRfdCgxMDEwMSkpOworCisgICAgU3RyaW5nIGRlY29kZWRT
dHJpbmc7CisgICAgZGVjb2Rlci5kZWNvZGUoZGVjb2RlZFN0cmluZyk7CisgICAgRVhQRUNUX1RS
VUUoZGVjb2RlZFN0cmluZyA9PSBTdHJpbmcoIkFub3RoZXIgYnJpY2sgaW4gdGhlIHdhbGwuLi4i
KSk7CisKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGRlY29kZWRJbnRSZWN0OworICAgIGRlY29kZXIu
ZGVjb2RlKGRlY29kZWRJbnRSZWN0KTsKKyAgICBFWFBFQ1RfVFJVRShkZWNvZGVkSW50UmVjdCA9
PSBXZWJDb3JlOjpJbnRSZWN0KDUwLCA0MCwgMzAsIDIwKSk7CisKKyAgICBXZWJDb3JlOjpJbnRT
aXplIGRlY29kZWRJbnRTaXplOworICAgIGRlY29kZXIuZGVjb2RlKGRlY29kZWRJbnRTaXplKTsK
KyAgICBFWFBFQ1RfVFJVRShkZWNvZGVkSW50U2l6ZSA9PSBXZWJDb3JlOjpJbnRTaXplKDEyLCAz
NCkpOworCisgICAgV2ViQ29yZTo6SW50UG9pbnQgZGVjb2RlZEludFBvaW50OworICAgIGRlY29k
ZXIuZGVjb2RlKGRlY29kZWRJbnRQb2ludCk7CisgICAgRVhQRUNUX1RSVUUoZGVjb2RlZEludFBv
aW50ID09IFdlYkNvcmU6OkludFBvaW50KDQyLCA0MikpOworCisgICAgV2ViQ29yZTo6S1VSTCBk
ZWNvZGVkS1VSTDsKKyAgICBkZWNvZGVyLmRlY29kZShkZWNvZGVkS1VSTCk7CisgICAgRVhQRUNU
X1RSVUUoZGVjb2RlZEtVUkwgPT0gV2ViQ29yZTo6S1VSTChXZWJDb3JlOjpQYXJzZWRVUkxTdHJp
bmcsICJodHRwOi8vZXhhbXBsZS5jb20vIikpOworCisgICAgV2ViQ29yZTo6UnVuTG9vcDo6Y3Vy
cmVudCgpLT5zdG9wKCk7Cit9CisKK1RFU1QoV2ViS2l0MiwgRGF0YVNlcmlhbGl6YXRpb24pCit7
CisgICAgQVNTRVJUX1RSVUUoV2ViQ29yZTo6UnVuTG9vcDo6Y3VycmVudCgpID09IFdlYkNvcmU6
OlJ1bkxvb3A6Om1haW4oKSk7CisKKyAgICBlbnYtPmNsaWVudCgpLT5zZXRSZWNlaXZlTWVzc2Fn
ZUNhbGxiYWNrKGRhdGFTZXJpYWxpemF0aW9uQ2FsbGJhY2spOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDUwMDA7IGkrKykgeworICAgICAgICBPd25QdHI8TWVzc2FnZUVuY29kZXI+
IGVuY29kZXIgPSBNZXNzYWdlRW5jb2Rlcjo6Y3JlYXRlKCJJUEMiLCAibG9vcGJhY2siLCBpKTsK
KworICAgICAgICAqZW5jb2RlciA8PCB1aW50NjRfdCgxMjM0NSk7CisgICAgICAgICplbmNvZGVy
IDw8IHVpbnQ2NF90KDY3ODkwKTsKKyAgICAgICAgKmVuY29kZXIgPDwgdWludDY0X3QoMTAxMDEp
OworCisgICAgICAgIGVuY29kZXItPmVuY29kZShTdHJpbmcoIkFub3RoZXIgYnJpY2sgaW4gdGhl
IHdhbGwuLi4iKSk7CisgICAgICAgIGVuY29kZXItPmVuY29kZShXZWJDb3JlOjpJbnRSZWN0KDUw
LCA0MCwgMzAsIDIwKSk7CisgICAgICAgIGVuY29kZXItPmVuY29kZShXZWJDb3JlOjpJbnRTaXpl
KDEyLCAzNCkpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGUoV2ViQ29yZTo6SW50UG9pbnQoNDIs
IDQyKSk7CisgICAgICAgIGVuY29kZXItPmVuY29kZShXZWJDb3JlOjpLVVJMKFdlYkNvcmU6OlBh
cnNlZFVSTFN0cmluZywgImh0dHA6Ly9leGFtcGxlLmNvbS8iKSk7CisKKyAgICAgICAgZW52LT5j
bGllbnQoKS0+Y29ubmVjdGlvbigpLT5zZW5kTWVzc2FnZShlbmNvZGVyLnJlbGVhc2UoKSk7CisK
KyAgICAgICAgV2ViQ29yZTo6UnVuTG9vcDo6Y3VycmVudCgpLT5ydW4oKTsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIHRocmVhZGVkU3RyaW5nU2VyaWFsaXphdGlvblRocmVhZCh2b2lkKikKK3sK
KyAgICBBU1NFUlRfVFJVRShXZWJDb3JlOjpSdW5Mb29wOjpjdXJyZW50KCkgIT0gV2ViQ29yZTo6
UnVuTG9vcDo6bWFpbigpKTsKKworICAgIENvbm5lY3Rpb24qIGNvbm5lY3Rpb24gPSBlbnYtPmNs
aWVudCgpLT5jb25uZWN0aW9uKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNTAw
MDsgaSsrKSB7CisgICAgICAgIHVpbnQ2NF90IHN5bmNSZXF1ZXN0SUQ7CisgICAgICAgIE93blB0
cjxNZXNzYWdlRW5jb2Rlcj4gZW5jb2RlciA9IGNvbm5lY3Rpb24tPmNyZWF0ZVN5bmNNZXNzYWdl
RW5jb2RlcigiSVBDIiwgImZvb2JhciIsIDAsIHN5bmNSZXF1ZXN0SUQpOworCisgICAgICAgIFN0
cmluZyBwYXlsb2FkU3RyaW5nOworICAgICAgICBwYXlsb2FkU3RyaW5nID0gZW52LT50ZXN0Q2hh
cigxMjM0KTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHBheWxvYWRTdHJpbmcpOworICAgICAg
ICBwYXlsb2FkU3RyaW5nID0gZW52LT50ZXN0Q2hhcigxMjMpOworICAgICAgICBlbmNvZGVyLT5l
bmNvZGUocGF5bG9hZFN0cmluZyk7CisgICAgICAgIHBheWxvYWRTdHJpbmcgPSBlbnYtPnRlc3RD
aGFyKDEyKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHBheWxvYWRTdHJpbmcpOworCisgICAg
ICAgIE93blB0cjxNZXNzYWdlRGVjb2Rlcj4gZGVjb2RlciA9IGNvbm5lY3Rpb24tPnNlbmRTeW5j
TWVzc2FnZShzeW5jUmVxdWVzdElELCBlbmNvZGVyLnJlbGVhc2UoKSwgQ29ubmVjdGlvbjo6Tm9U
aW1lb3V0KTsKKworICAgICAgICBTdHJpbmcgZGVjb2RlZFN0cmluZzsKKyAgICAgICAgZGVjb2Rl
ci0+ZGVjb2RlKGRlY29kZWRTdHJpbmcpOworICAgICAgICBFWFBFQ1RfVFJVRShkZWNvZGVkU3Ry
aW5nID09IGVudi0+dGVzdENoYXIoMTIzNCkpOworICAgICAgICBkZWNvZGVyLT5kZWNvZGUoZGVj
b2RlZFN0cmluZyk7CisgICAgICAgIEVYUEVDVF9UUlVFKGRlY29kZWRTdHJpbmcgPT0gZW52LT50
ZXN0Q2hhcigxMjMpKTsKKyAgICAgICAgZGVjb2Rlci0+ZGVjb2RlKGRlY29kZWRTdHJpbmcpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShkZWNvZGVkU3RyaW5nID09IGVudi0+dGVzdENoYXIoMTIpKTsK
KyAgICB9CisKKyAgICBPd25QdHI8TWVzc2FnZUVuY29kZXI+IGVuY29kZXIgPSBNZXNzYWdlRW5j
b2Rlcjo6Y3JlYXRlKCJJUEMiLCAibG9vcGJhY2siLCAwKTsKKyAgICBlbnYtPmNsaWVudCgpLT5j
b25uZWN0aW9uKCktPnNlbmRNZXNzYWdlKGVuY29kZXIucmVsZWFzZSgpKTsKK30KKworc3RhdGlj
IHZvaWQgdGhyZWFkZWRTdHJpbmdTZXJpYWxpemF0aW9uU2h1dGRvd25DYWxsYmFjayhNZXNzYWdl
RGVjb2RlciYpCit7CisgICAgQVNTRVJUX1RSVUUoV2ViQ29yZTo6UnVuTG9vcDo6Y3VycmVudCgp
ID09IFdlYkNvcmU6OlJ1bkxvb3A6Om1haW4oKSk7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgY291
bnQ7CisKKyAgICBpZiAoKytjb3VudCA9PSA1KQorICAgICAgICBXZWJDb3JlOjpSdW5Mb29wOjpj
dXJyZW50KCktPnN0b3AoKTsKK30KKworVEVTVChXZWJLaXQyLCBUaHJlYWRlZFN0cmluZ1Nlcmlh
bGl6YXRpb24pCit7CisgICAgQVNTRVJUX1RSVUUoV2ViQ29yZTo6UnVuTG9vcDo6Y3VycmVudCgp
ID09IFdlYkNvcmU6OlJ1bkxvb3A6Om1haW4oKSk7CisKKyAgICAvLyBUaGlzIHRlc3Qgd2lsbCBz
cGF3biA1IHRocmVhZHMgdGhhdCB3aWxsIHNlbmQgc2V2ZXJhbCBzeW5jaHJvbm91cworICAgIC8v
IG1lc3NhZ2VzLiBBdCB0aGUgZW5kIG9mIHRoZSB3b3JrIGJhdGNoLCB0aGUgdGhyZWFkIHdpbGwg
c2VuZCBhbiBhc3luY2hyb25vdXMKKyAgICAvLyBtZXNzYWdlICh3aGljaCBpcyBkZWxpdmVyZWQg
YmFjayB0byB0aGUgbWFpbiB0aHJlYWQpIGZvciBzaWduYWxpbmcgdGhhdAorICAgIC8vIHRoZSB3
b3JrIGlzIGRvbmUuIEFmdGVyIHJlY2VpdmluZyB0aGUgY29tcGxldGlvbiBtZXNzYWdlIGZyb20g
YWxsIHRoZQorICAgIC8vIHRocmVhZHMsIHdlIHN0b3AgdGhlIG1haW4gbG9vcCBhbmQgZW5kIHRo
ZSB0ZXN0LgorICAgIGVudi0+Y2xpZW50KCktPnNldFJlY2VpdmVNZXNzYWdlQ2FsbGJhY2sodGhy
ZWFkZWRTdHJpbmdTZXJpYWxpemF0aW9uU2h1dGRvd25DYWxsYmFjayk7CisKKyAgICBjaGFyIHRo
cmVhZE5hbWVbMTBdOworICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkc1s1XTsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKHRocmVhZHMpIC8gc2l6ZW9mKFRocmVhZElkZW50aWZp
ZXIpOyArK2kpIHsKKyAgICAgICAgc3ByaW50Zih0aHJlYWROYW1lLCAiVGhyZWFkJWQiLCBpKTsK
KyAgICAgICAgdGhyZWFkc1tpXSA9IGNyZWF0ZVRocmVhZCh0aHJlYWRlZFN0cmluZ1NlcmlhbGl6
YXRpb25UaHJlYWQsIDAsIHRocmVhZE5hbWUpOworICAgIH0KKworICAgIFdlYkNvcmU6OlJ1bkxv
b3A6OmN1cnJlbnQoKS0+cnVuKCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemVvZih0
aHJlYWRzKSAvIHNpemVvZihUaHJlYWRJZGVudGlmaWVyKTsgKytpKQorICAgICAgICB3YWl0Rm9y
VGhyZWFkQ29tcGxldGlvbih0aHJlYWRzW2ldKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>