<?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>226478</bug_id>
          
          <creation_ts>2021-05-31 18:53:08 -0700</creation_ts>
          <short_desc>Fix thread safety issues in WaveShaperProcessor</short_desc>
          <delta_ts>2021-06-01 08:10:20 -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>Web Audio</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>peng.liu6</cc>
    
    <cc>philipj</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1765489</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-31 18:53:08 -0700</bug_when>
    <thetext>Adopt thread safety analysis annotations in WaveShaperProcessor and fix bugs found by clang.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765490</commentid>
    <comment_count>1</comment_count>
      <attachid>430223</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-31 19:01:03 -0700</bug_when>
    <thetext>Created attachment 430223
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765576</commentid>
    <comment_count>2</comment_count>
      <attachid>430223</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2021-06-01 05:05:55 -0700</bug_when>
    <thetext>Comment on attachment 430223
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=430223&amp;action=review

&gt; Source/WebCore/Modules/webaudio/WaveShaperProcessor.cpp:96
&gt; +    for (size_t i = 0; i &lt; m_kernels.size(); ++i)

auto?

&gt; Source/WebCore/Modules/webaudio/WaveShaperProcessor.cpp:97
&gt; +        static_cast&lt;WaveShaperDSPKernel&amp;&gt;(*m_kernels[i]).process(source-&gt;channel(i)-&gt;data(), destination-&gt;channel(i)-&gt;mutableData(), framesToProcess);

Why do we need static_cast&lt;WaveShaperDSPKernel&amp;&gt; now while we did not in the past?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765604</commentid>
    <comment_count>3</comment_count>
      <attachid>430223</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-01 07:39:45 -0700</bug_when>
    <thetext>Comment on attachment 430223
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=430223&amp;action=review

&gt;&gt; Source/WebCore/Modules/webaudio/WaveShaperProcessor.cpp:96
&gt;&gt; +    for (size_t i = 0; i &lt; m_kernels.size(); ++i)
&gt; 
&gt; auto?

What will be the type for auto i = 0? I want the type to be size_t to match kernels.size().

&gt;&gt; Source/WebCore/Modules/webaudio/WaveShaperProcessor.cpp:97
&gt;&gt; +        static_cast&lt;WaveShaperDSPKernel&amp;&gt;(*m_kernels[i]).process(source-&gt;channel(i)-&gt;data(), destination-&gt;channel(i)-&gt;mutableData(), framesToProcess);
&gt; 
&gt; Why do we need static_cast&lt;WaveShaperDSPKernel&amp;&gt; now while we did not in the past?

No, this is just an optimization to avoid a virtual function call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765607</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-01 07:46:44 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #3)
&gt; Comment on attachment 430223 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=430223&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/Modules/webaudio/WaveShaperProcessor.cpp:96
&gt; &gt;&gt; +    for (size_t i = 0; i &lt; m_kernels.size(); ++i)
&gt; &gt; 
&gt; &gt; auto?
&gt; 
&gt; What will be the type for auto i = 0? I want the type to be size_t to match
&gt; kernels.size().

auto i = 0; would resolve auto to int so it wouldn&apos;t do what I want.

&gt; 
&gt; &gt;&gt; Source/WebCore/Modules/webaudio/WaveShaperProcessor.cpp:97
&gt; &gt;&gt; +        static_cast&lt;WaveShaperDSPKernel&amp;&gt;(*m_kernels[i]).process(source-&gt;channel(i)-&gt;data(), destination-&gt;channel(i)-&gt;mutableData(), framesToProcess);
&gt; &gt; 
&gt; &gt; Why do we need static_cast&lt;WaveShaperDSPKernel&amp;&gt; now while we did not in the past?
&gt; 
&gt; No, this is just an optimization to avoid a virtual function call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765617</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-01 08:09:55 -0700</bug_when>
    <thetext>Committed r278307 (238344@main): &lt;https://commits.webkit.org/238344@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 430223.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765618</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-01 08:10:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/78714897&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430223</attachid>
            <date>2021-05-31 19:01:03 -0700</date>
            <delta_ts>2021-06-01 08:09:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226478-20210531190103.patch</filename>
            <type>text/plain</type>
            <size>15799</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4Mjg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGZmOWExMjE2MGE1MDMz
ZDljMzE5ODBmZjkzMGQ5MmE5NGI3OTVlMy4uZDk5ODliOWZjNDRiODhlZmIzMTk3ZmQ2YTk1YTkx
MGNiNzM0Y2IxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIxLTA1LTMxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgRml4IHRocmVhZCBzYWZldHkg
aXNzdWVzIGluIFdhdmVTaGFwZXJQcm9jZXNzb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjQ3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkb3B0IHRocmVhZCBzYWZldHkgYW5hbHlzaXMgYW5ub3Rh
dGlvbnMgaW4gV2F2ZVNoYXBlclByb2Nlc3NvciBhbmQgZml4IGJ1Z3MKKyAgICAgICAgZm91bmQg
YnkgY2xhbmcuIEluIHBhcnRpY3VsYXIsIHRoZSBmb2xsb3dpbmcgaXNzdWVzIHdlcmUgZml4ZWQ6
CisgICAgICAgIC0gV2F2ZVNoYXBlckRTUEtlcm5lbDo6bGF0ZW5jeVRpbWUoKSB3YXMgZmFpbGlu
ZyB0byBncmFiIHRoZSBsb2NrIGJlZm9yZSBhY2Nlc3NpbmcKKyAgICAgICAgICB0aGUgV2F2ZVNo
YXBlclByb2Nlc3NvcidzIG92ZXJzYW1wbGUgb24gdGhlIHJlbmRlcmluZyB0aHJlYWQsIGV2ZW4g
dGhvdWdoCisgICAgICAgICAgb3ZlcnNhbXBsZSBnZXRzIG1vZGlmaWVkIG9uIHRoZSBtYWluIHRo
cmVhZC4KKyAgICAgICAgLSBXYXZlU2hhcGVyTm9kZTo6cHJvcGFnYXRlc1NpbGVuY2UoKSB3YXMg
ZmFpbGluZyB0byBncmFiIHRoZSBsb2NrIGJlZm9yZSBhY2Nlc3NpbmcKKyAgICAgICAgICB0aGUg
V2F2ZVNoYXBlclByb2Nlc3NvcidzIGN1cnZlIG9uIHRoZSByZW5kZXJpbmcgdGhyZWFkLCBldmVu
IHRob3VnaCB0aGUgY3VydmUKKyAgICAgICAgICBnZXRzIG1vZGlmaWVkIG9uIHRoZSBtYWluIHRo
cmVhZC4KKworICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5v
ZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlOjpwcm9jZXNz
b3IgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5l
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXYXZlU2hhcGVyRFNQS2VybmVsOjpwcm9jZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OldhdmVTaGFwZXJEU1BLZXJuZWw6OnByb2Nlc3NDdXJ2ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXYXZlU2hhcGVyRFNQS2VybmVsOjpsYXRlbmN5VGltZSBjb25zdCk6
CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmg6CisgICAg
ICAgICogTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXYXZlU2hhcGVyTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldhdmVTaGFw
ZXJOb2RlOjpzZXRDdXJ2ZUZvckJpbmRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OldhdmVTaGFw
ZXJOb2RlOjpjdXJ2ZUZvckJpbmRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OldhdmVTaGFwZXJO
b2RlOjpzZXRPdmVyc2FtcGxlRm9yQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6V2F2ZVNo
YXBlck5vZGU6Om92ZXJzYW1wbGVGb3JCaW5kaW5ncyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpXYXZlU2hhcGVyTm9kZTo6cHJvcGFnYXRlc1NpbGVuY2UgY29uc3QpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1
ZGlvL1dhdmVTaGFwZXJOb2RlLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1dhdmVT
aGFwZXJQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2F2ZVNoYXBlclByb2Nlc3Nv
cjo6c2V0Q3VydmVGb3JCaW5kaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpXYXZlU2hhcGVyUHJv
Y2Vzc29yOjpzZXRPdmVyc2FtcGxlRm9yQmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6V2F2
ZVNoYXBlclByb2Nlc3Nvcjo6cHJvY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9X
YXZlU2hhcGVyUHJvY2Vzc29yLmg6CisKIDIwMjEtMDUtMzEgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdGhyZWFkIHNhZmV0eSBpc3N1ZXMgaW4gTWVkaWFT
dHJlYW1BdWRpb1NvdXJjZU5vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaAppbmRleCBlMGExYmMwMjI3ZjI3
ZDBlOTVkM2JjMDY4OWIyMGZkNjcyMDZjZjExLi5iYjViNjBkY2Y5ODUzZWRhZDdlZmNmYjk3ZWFm
ZWRlN2QwYmZiMDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0Jhc2ljUHJvY2Vzc29yTm9kZS5oCkBAIC01OCw2ICs1OCw4IEBAIHByb3Rl
Y3RlZDoKICAgICBib29sIHJlcXVpcmVzVGFpbFByb2Nlc3NpbmcoKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIEF1ZGlvUHJvY2Vzc29yKiBwcm9jZXNzb3IoKSB7IHJldHVybiBtX3Byb2Nlc3Nvci5n
ZXQoKTsgfQorICAgIGNvbnN0IEF1ZGlvUHJvY2Vzc29yKiBwcm9jZXNzb3IoKSBjb25zdCB7IHJl
dHVybiBtX3Byb2Nlc3Nvci5nZXQoKTsgfQorCiAgICAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvUHJv
Y2Vzc29yPiBtX3Byb2Nlc3NvcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJEU1BLZXJuZWwuY3BwCmluZGV4IDBkYTgzNTc3MGY3
ZjhiNzc3ZmY3ODQzY2NiOGM4M2U2MDk1NTUxYjYuLjMwNTkyZmMxZmIyMTAwZTJmNDU1ZDdiMDU4
NjFjOTc1MTFkZDE5NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmNwcApAQCAtNTksNiArNTksNyBAQCB2b2lkIFdh
dmVTaGFwZXJEU1BLZXJuZWw6OmxhenlJbml0aWFsaXplT3ZlcnNhbXBsaW5nKCkKIAogdm9pZCBX
YXZlU2hhcGVyRFNQS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBk
ZXN0aW5hdGlvbiwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKIHsKKyAgICBhc3NlcnRJc0hlbGQo
d2F2ZVNoYXBlclByb2Nlc3NvcigpLT5wcm9jZXNzTG9jaygpKTsKICAgICBzd2l0Y2ggKHdhdmVT
aGFwZXJQcm9jZXNzb3IoKS0+b3ZlcnNhbXBsZSgpKSB7CiAgICAgY2FzZSBXYXZlU2hhcGVyUHJv
Y2Vzc29yOjpPdmVyU2FtcGxlTm9uZToKICAgICAgICAgcHJvY2Vzc0N1cnZlKHNvdXJjZSwgZGVz
dGluYXRpb24sIGZyYW1lc1RvUHJvY2Vzcyk7CkBAIC03OSw2ICs4MCw3IEBAIHZvaWQgV2F2ZVNo
YXBlckRTUEtlcm5lbDo6cHJvY2Vzc0N1cnZlKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBk
ZXN0aW5hdGlvbiwKIHsKICAgICBBU1NFUlQoc291cmNlICYmIGRlc3RpbmF0aW9uICYmIHdhdmVT
aGFwZXJQcm9jZXNzb3IoKSk7CiAKKyAgICBhc3NlcnRJc0hlbGQod2F2ZVNoYXBlclByb2Nlc3Nv
cigpLT5wcm9jZXNzTG9jaygpKTsKICAgICBGbG9hdDMyQXJyYXkqIGN1cnZlID0gd2F2ZVNoYXBl
clByb2Nlc3NvcigpLT5jdXJ2ZSgpOwogICAgIGlmICghY3VydmUpIHsKICAgICAgICAgLy8gQWN0
IGFzICJzdHJhaWdodCB3aXJlIiBwYXNzLXRocm91Z2ggaWYgbm8gY3VydmUgaXMgc2V0LgpAQCAt
MTYzLDEwICsxNjUsMTMgQEAgdm9pZCBXYXZlU2hhcGVyRFNQS2VybmVsOjpyZXNldCgpCiAKIGRv
dWJsZSBXYXZlU2hhcGVyRFNQS2VybmVsOjpsYXRlbmN5VGltZSgpIGNvbnN0CiB7Ci0gICAgc2l6
ZV90IGxhdGVuY3lGcmFtZXMgPSAwOwotICAgIFdhdmVTaGFwZXJEU1BLZXJuZWwqIGtlcm5lbCA9
IGNvbnN0X2Nhc3Q8V2F2ZVNoYXBlckRTUEtlcm5lbCo+KHRoaXMpOworICAgIGlmICghd2F2ZVNo
YXBlclByb2Nlc3NvcigpLT5wcm9jZXNzTG9jaygpLnRyeUxvY2soKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKKworICAgIExvY2tlciBs
b2NrZXIgeyBBZG9wdExvY2ssIHdhdmVTaGFwZXJQcm9jZXNzb3IoKS0+cHJvY2Vzc0xvY2soKSB9
OwogCi0gICAgc3dpdGNoIChrZXJuZWwtPndhdmVTaGFwZXJQcm9jZXNzb3IoKS0+b3ZlcnNhbXBs
ZSgpKSB7CisgICAgc2l6ZV90IGxhdGVuY3lGcmFtZXMgPSAwOworICAgIHN3aXRjaCAod2F2ZVNo
YXBlclByb2Nlc3NvcigpLT5vdmVyc2FtcGxlKCkpIHsKICAgICBjYXNlIFdhdmVTaGFwZXJQcm9j
ZXNzb3I6Ok92ZXJTYW1wbGVOb25lOgogICAgICAgICBicmVhazsKICAgICBjYXNlIFdhdmVTaGFw
ZXJQcm9jZXNzb3I6Ok92ZXJTYW1wbGUyeDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlckRTUEtlcm5lbC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyRFNQS2VybmVsLmgKaW5kZXggNzBiOGZmZDQwNGM5YTk1
ZDAxZmRjNWQ1OTdiYjkwNGI3OTgxYzNlZS4uNGY5Y2YxNDEyNGZmNjM1ZWJmMTliMDJiOWNmNDYy
MWI4MzMwNmM3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9X
YXZlU2hhcGVyRFNQS2VybmVsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9XYXZlU2hhcGVyRFNQS2VybmVsLmgKQEAgLTQwLDEwICs0MCwxMCBAQCBwdWJsaWM6CiAgICAg
ZXhwbGljaXQgV2F2ZVNoYXBlckRTUEtlcm5lbChXYXZlU2hhcGVyUHJvY2Vzc29yKik7CiAKICAg
ICAvLyBBdWRpb0RTUEtlcm5lbAotICAgIHZvaWQgcHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNl
LCBmbG9hdCogZGVzdCwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcykgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCByZXNldCgpIG92ZXJyaWRlOwotICAgIGRvdWJsZSB0YWlsVGltZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIDA7IH0KLSAgICBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIHByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3QsIHNpemVf
dCBmcmFtZXNUb1Byb2Nlc3MpIGZpbmFsOworICAgIHZvaWQgcmVzZXQoKSBmaW5hbDsKKyAgICBk
b3VibGUgdGFpbFRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgZG91YmxlIGxh
dGVuY3lUaW1lKCkgY29uc3QgZmluYWw7CiAKICAgICAvLyBPdmVyc2FtcGxpbmcgcmVxdWlyZXMg
bW9yZSByZXNvdXJjZXMsIHNvIGxldCdzIG9ubHkgYWxsb2NhdGUgdGhlbSBpZiBuZWVkZWQuCiAg
ICAgdm9pZCBsYXp5SW5pdGlhbGl6ZU92ZXJzYW1wbGluZygpOwpAQCAtNTksNiArNTksNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgcmVxdWlyZXNUYWlsUHJvY2Vzc2luZygpIGNvbnN0IGZpbmFsOwog
CiAgICAgV2F2ZVNoYXBlclByb2Nlc3Nvciogd2F2ZVNoYXBlclByb2Nlc3NvcigpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PFdhdmVTaGFwZXJQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0KKyAgICBj
b25zdCBXYXZlU2hhcGVyUHJvY2Vzc29yKiB3YXZlU2hhcGVyUHJvY2Vzc29yKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2F2ZVNoYXBlclByb2Nlc3Nvcio+KHByb2Nlc3Nvcigp
KTsgfQogCiAgICAgLy8gT3ZlcnNhbXBsaW5nLgogICAgIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0Zs
b2F0QXJyYXk+IG1fdGVtcEJ1ZmZlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5jcHAKaW5kZXggNmE1MGU1OTE5NGI2NzFhYmM0OGI5Yzlh
Yjk5ZDZjNDBkNjFhMTE4Yy4uZmMxNTI4MjdiM2EwY2MyN2E4ZDQzYjU0NTQ0ZmY0YmM1YmM0OWM5
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVy
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVy
Tm9kZS5jcHAKQEAgLTUzLDEyICs1MywxMiBAQCBFeGNlcHRpb25PcjxSZWY8V2F2ZVNoYXBlck5v
ZGU+PiBXYXZlU2hhcGVyTm9kZTo6Y3JlYXRlKEJhc2VBdWRpb0NvbnRleHQmIGNvbnRleAogICAg
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKIAogICAgIGlmIChjdXJ2ZSkg
ewotICAgICAgICByZXN1bHQgPSBub2RlLT5zZXRDdXJ2ZShXVEZNb3ZlKGN1cnZlKSk7CisgICAg
ICAgIHJlc3VsdCA9IG5vZGUtPnNldEN1cnZlRm9yQmluZGluZ3MoV1RGTW92ZShjdXJ2ZSkpOwog
ICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgfQogCi0gICAgbm9kZS0+c2V0T3ZlcnNhbXBs
ZShvcHRpb25zLm92ZXJzYW1wbGUpOworICAgIG5vZGUtPnNldE92ZXJzYW1wbGVGb3JCaW5kaW5n
cyhvcHRpb25zLm92ZXJzYW1wbGUpOwogCiAgICAgcmV0dXJuIG5vZGU7CiB9CkBAIC03MSw3ICs3
MSw3IEBAIFdhdmVTaGFwZXJOb2RlOjpXYXZlU2hhcGVyTm9kZShCYXNlQXVkaW9Db250ZXh0JiBj
b250ZXh0KQogICAgIGluaXRpYWxpemUoKTsKIH0KIAotRXhjZXB0aW9uT3I8dm9pZD4gV2F2ZVNo
YXBlck5vZGU6OnNldEN1cnZlKFJlZlB0cjxGbG9hdDMyQXJyYXk+JiYgY3VydmUpCitFeGNlcHRp
b25Pcjx2b2lkPiBXYXZlU2hhcGVyTm9kZTo6c2V0Q3VydmVGb3JCaW5kaW5ncyhSZWZQdHI8Rmxv
YXQzMkFycmF5PiYmIGN1cnZlKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7IAogICAg
IERFQlVHX0xPRyhMT0dJREVOVElGSUVSKTsKQEAgLTg1LDEzICs4NSwxNCBAQCBFeGNlcHRpb25P
cjx2b2lkPiBXYXZlU2hhcGVyTm9kZTo6c2V0Q3VydmUoUmVmUHRyPEZsb2F0MzJBcnJheT4mJiBj
dXJ2ZSkKICAgICAgICAgY3VydmUgPSBXVEZNb3ZlKGNsb25lZEN1cnZlKTsKICAgICB9CiAKLSAg
ICB3YXZlU2hhcGVyUHJvY2Vzc29yKCktPnNldEN1cnZlKGN1cnZlLmdldCgpKTsKKyAgICB3YXZl
U2hhcGVyUHJvY2Vzc29yKCktPnNldEN1cnZlRm9yQmluZGluZ3MoY3VydmUuZ2V0KCkpOwogICAg
IHJldHVybiB7IH07CiB9CiAKLUZsb2F0MzJBcnJheSogV2F2ZVNoYXBlck5vZGU6OmN1cnZlKCkK
K0Zsb2F0MzJBcnJheSogV2F2ZVNoYXBlck5vZGU6OmN1cnZlRm9yQmluZGluZ3MoKQogewotICAg
IHJldHVybiB3YXZlU2hhcGVyUHJvY2Vzc29yKCktPmN1cnZlKCk7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICByZXR1cm4gd2F2ZVNoYXBlclByb2Nlc3NvcigpLT5jdXJ2ZUZvckJp
bmRpbmdzKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgV2F2ZVNoYXBlclByb2Nlc3Nvcjo6T3ZlclNh
bXBsZVR5cGUgcHJvY2Vzc29yVHlwZShPdmVyU2FtcGxlVHlwZSB0eXBlKQpAQCAtMTA4LDE5ICsx
MDksMjAgQEAgc3RhdGljIGlubGluZSBXYXZlU2hhcGVyUHJvY2Vzc29yOjpPdmVyU2FtcGxlVHlw
ZSBwcm9jZXNzb3JUeXBlKE92ZXJTYW1wbGVUeXBlIHQKICAgICByZXR1cm4gV2F2ZVNoYXBlclBy
b2Nlc3Nvcjo6T3ZlclNhbXBsZU5vbmU7CiB9CiAKLXZvaWQgV2F2ZVNoYXBlck5vZGU6OnNldE92
ZXJzYW1wbGUoT3ZlclNhbXBsZVR5cGUgdHlwZSkKK3ZvaWQgV2F2ZVNoYXBlck5vZGU6OnNldE92
ZXJzYW1wbGVGb3JCaW5kaW5ncyhPdmVyU2FtcGxlVHlwZSB0eXBlKQogewogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgSU5GT19MT0coTE9HSURFTlRJRklFUiwgdHlwZSk7CiAKICAg
ICAvLyBTeW5jaHJvbml6ZSB3aXRoIGFueSBncmFwaCBjaGFuZ2VzIG9yIGNoYW5nZXMgdG8gY2hh
bm5lbCBjb25maWd1cmF0aW9uLgogICAgIExvY2tlciBjb250ZXh0TG9ja2VyIHsgY29udGV4dCgp
LmdyYXBoTG9jaygpIH07Ci0gICAgd2F2ZVNoYXBlclByb2Nlc3NvcigpLT5zZXRPdmVyc2FtcGxl
KHByb2Nlc3NvclR5cGUodHlwZSkpOworICAgIHdhdmVTaGFwZXJQcm9jZXNzb3IoKS0+c2V0T3Zl
cnNhbXBsZUZvckJpbmRpbmdzKHByb2Nlc3NvclR5cGUodHlwZSkpOwogfQogCi1hdXRvIFdhdmVT
aGFwZXJOb2RlOjpvdmVyc2FtcGxlKCkgY29uc3QgLT4gT3ZlclNhbXBsZVR5cGUKK2F1dG8gV2F2
ZVNoYXBlck5vZGU6Om92ZXJzYW1wbGVGb3JCaW5kaW5ncygpIGNvbnN0IC0+IE92ZXJTYW1wbGVU
eXBlCiB7Ci0gICAgc3dpdGNoIChjb25zdF9jYXN0PFdhdmVTaGFwZXJOb2RlKj4odGhpcyktPndh
dmVTaGFwZXJQcm9jZXNzb3IoKS0+b3ZlcnNhbXBsZSgpKSB7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBzd2l0Y2ggKHdhdmVTaGFwZXJQcm9jZXNzb3IoKS0+b3ZlcnNhbXBsZUZv
ckJpbmRpbmdzKCkpIHsKICAgICBjYXNlIFdhdmVTaGFwZXJQcm9jZXNzb3I6Ok92ZXJTYW1wbGVO
b25lOgogICAgICAgICByZXR1cm4gT3ZlclNhbXBsZVR5cGU6Ok5vbmU7CiAgICAgY2FzZSBXYXZl
U2hhcGVyUHJvY2Vzc29yOjpPdmVyU2FtcGxlMng6CkBAIC0xMzQsNyArMTM2LDExIEBAIGF1dG8g
V2F2ZVNoYXBlck5vZGU6Om92ZXJzYW1wbGUoKSBjb25zdCAtPiBPdmVyU2FtcGxlVHlwZQogCiBi
b29sIFdhdmVTaGFwZXJOb2RlOjpwcm9wYWdhdGVzU2lsZW5jZSgpIGNvbnN0CiB7Ci0gICAgYXV0
byBjdXJ2ZSA9IGNvbnN0X2Nhc3Q8V2F2ZVNoYXBlck5vZGUqPih0aGlzKS0+Y3VydmUoKTsKKyAg
ICBpZiAoIXdhdmVTaGFwZXJQcm9jZXNzb3IoKS0+cHJvY2Vzc0xvY2soKS50cnlMb2NrKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIExvY2tlciBsb2NrZXIgeyBBZG9wdExvY2ssIHdh
dmVTaGFwZXJQcm9jZXNzb3IoKS0+cHJvY2Vzc0xvY2soKSB9OworICAgIGF1dG8gY3VydmUgPSB3
YXZlU2hhcGVyUHJvY2Vzc29yKCktPmN1cnZlKCk7CiAgICAgcmV0dXJuICFjdXJ2ZSB8fCAhY3Vy
dmUtPmxlbmd0aCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L1dhdmVTaGFwZXJOb2RlLmgKaW5kZXggNzMwNmQ2YWM5MDk1ZDIyYmM1ZDc2NDRiNTRhNWY5ZTUw
MzdkYWRkNC4uYjY1ZDIzYmQ4NjQwOGNhYjQ0YmRjMDBkMzJlNjcwMDQyNDc3MGNmYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlck5vZGUuaApAQCAt
NDAsMTEgKzQwLDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPFdhdmVT
aGFwZXJOb2RlPj4gY3JlYXRlKEJhc2VBdWRpb0NvbnRleHQmLCBjb25zdCBXYXZlU2hhcGVyT3B0
aW9ucyYgPSB7IH0pOwogCiAgICAgLy8gc2V0Q3VydmUoKSBpcyBjYWxsZWQgb24gdGhlIG1haW4g
dGhyZWFkLgotICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEN1cnZlKFJlZlB0cjxGbG9hdDMyQXJy
YXk+JiYpOwotICAgIEZsb2F0MzJBcnJheSogY3VydmUoKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lk
PiBzZXRDdXJ2ZUZvckJpbmRpbmdzKFJlZlB0cjxGbG9hdDMyQXJyYXk+JiYpOworICAgIEZsb2F0
MzJBcnJheSogY3VydmVGb3JCaW5kaW5ncygpOwogCi0gICAgdm9pZCBzZXRPdmVyc2FtcGxlKE92
ZXJTYW1wbGVUeXBlKTsKLSAgICBPdmVyU2FtcGxlVHlwZSBvdmVyc2FtcGxlKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRPdmVyc2FtcGxlRm9yQmluZGluZ3MoT3ZlclNhbXBsZVR5cGUpOworICAgIE92
ZXJTYW1wbGVUeXBlIG92ZXJzYW1wbGVGb3JCaW5kaW5ncygpIGNvbnN0OwogCiAgICAgZG91Ymxl
IGxhdGVuY3koKSBjb25zdCB7IHJldHVybiBsYXRlbmN5VGltZSgpOyB9CiAKQEAgLTU0LDYgKzU0
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHByb3BhZ2F0ZXNTaWxlbmNlKCkgY29uc3QgZmluYWw7
CiAKICAgICBXYXZlU2hhcGVyUHJvY2Vzc29yKiB3YXZlU2hhcGVyUHJvY2Vzc29yKCkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8V2F2ZVNoYXBlclByb2Nlc3Nvcio+KHByb2Nlc3NvcigpKTsgfQorICAg
IGNvbnN0IFdhdmVTaGFwZXJQcm9jZXNzb3IqIHdhdmVTaGFwZXJQcm9jZXNzb3IoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXYXZlU2hhcGVyUHJvY2Vzc29yKj4ocHJvY2Vzc29y
KCkpOyB9CiB9OwogCiBTdHJpbmcgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoV2ViQ29yZTo6
T3ZlclNhbXBsZVR5cGUpOyAvLyBpbiBKU092ZXJTYW1wbGVUeXBlLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyTm9kZS5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmlkbAppbmRleCA0NzYw
OTc4NDRiNjUzZmY3MjM4ZDNiMTAwZGRhYWExMDA3MGY5NjdmLi40NGE4ZTEyMmVlOWE3MzYyOTYz
N2U0ZGMzYTIxM2QyZTRhOWVkYTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmlkbApAQCAtMjksNiArMjksNiBAQAogXSBpbnRlcmZh
Y2UgV2F2ZVNoYXBlck5vZGUgOiBBdWRpb05vZGUgewogICAgIFtFbmFibGVkQnlTZXR0aW5nPVdl
YkF1ZGlvXSBjb25zdHJ1Y3RvcihCYXNlQXVkaW9Db250ZXh0IGNvbnRleHQsIG9wdGlvbmFsIFdh
dmVTaGFwZXJPcHRpb25zIG9wdGlvbnMpOwogCi0gICAgYXR0cmlidXRlIEZsb2F0MzJBcnJheT8g
Y3VydmU7Ci0gICAgYXR0cmlidXRlIE92ZXJTYW1wbGVUeXBlIG92ZXJzYW1wbGU7CisgICAgW0lt
cGxlbWVudGVkQXM9Y3VydmVGb3JCaW5kaW5nc10gYXR0cmlidXRlIEZsb2F0MzJBcnJheT8gY3Vy
dmU7CisgICAgW0ltcGxlbWVudGVkQXM9b3ZlcnNhbXBsZUZvckJpbmRpbmdzXSBhdHRyaWJ1dGUg
T3ZlclNhbXBsZVR5cGUgb3ZlcnNhbXBsZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNwcAppbmRleCA3MjdjOTAw
NDhhZTZjOGJjODc5MTcxMjIzNDg3ZDllODFhZjQ4YTlkLi43NWIxN2UzZTk4MWQ4M2E3MWVlY2Vk
NTIzYTBhMWNlYjZmYWU0MTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAKQEAgLTQ4LDI3ICs0OCwyOCBAQCBz
dGQ6OnVuaXF1ZV9wdHI8QXVkaW9EU1BLZXJuZWw+IFdhdmVTaGFwZXJQcm9jZXNzb3I6OmNyZWF0
ZUtlcm5lbCgpCiAgICAgcmV0dXJuIG1ha2VVbmlxdWU8V2F2ZVNoYXBlckRTUEtlcm5lbD4odGhp
cyk7CiB9CiAKLXZvaWQgV2F2ZVNoYXBlclByb2Nlc3Nvcjo6c2V0Q3VydmUoRmxvYXQzMkFycmF5
KiBjdXJ2ZSkKK3ZvaWQgV2F2ZVNoYXBlclByb2Nlc3Nvcjo6c2V0Q3VydmVGb3JCaW5kaW5ncyhG
bG9hdDMyQXJyYXkqIGN1cnZlKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
Ly8gVGhpcyBzeW5jaHJvbml6ZXMgd2l0aCBwcm9jZXNzKCkuCiAgICAgTG9ja2VyIGxvY2tlciB7
IG1fcHJvY2Vzc0xvY2sgfTsKIAogICAgIG1fY3VydmUgPSBjdXJ2ZTsKIH0KIAotdm9pZCBXYXZl
U2hhcGVyUHJvY2Vzc29yOjpzZXRPdmVyc2FtcGxlKE92ZXJTYW1wbGVUeXBlIG92ZXJzYW1wbGUp
Cit2b2lkIFdhdmVTaGFwZXJQcm9jZXNzb3I6OnNldE92ZXJzYW1wbGVGb3JCaW5kaW5ncyhPdmVy
U2FtcGxlVHlwZSBvdmVyc2FtcGxlKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgLy8gVGhpcyBzeW5jaHJvbml6ZXMgd2l0aCBwcm9jZXNzKCkuCiAgICAgTG9ja2VyIGxvY2tl
ciB7IG1fcHJvY2Vzc0xvY2sgfTsKIAogICAgIG1fb3ZlcnNhbXBsZSA9IG92ZXJzYW1wbGU7CiAK
LSAgICBpZiAob3ZlcnNhbXBsZSAhPSBPdmVyU2FtcGxlTm9uZSkgewotICAgICAgICBmb3IgKGF1
dG8mIGF1ZGlvRFNQS2VybmVsIDogbV9rZXJuZWxzKSB7Ci0gICAgICAgICAgICBXYXZlU2hhcGVy
RFNQS2VybmVsJiBrZXJuZWwgPSBzdGF0aWNfY2FzdDxXYXZlU2hhcGVyRFNQS2VybmVsJj4oKmF1
ZGlvRFNQS2VybmVsKTsKLSAgICAgICAgICAgIGtlcm5lbC5sYXp5SW5pdGlhbGl6ZU92ZXJzYW1w
bGluZygpOwotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChvdmVyc2FtcGxlID09IE92ZXJTYW1w
bGVOb25lKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8mIGF1ZGlvRFNQS2VybmVs
IDogbV9rZXJuZWxzKQorICAgICAgICBzdGF0aWNfY2FzdDxXYXZlU2hhcGVyRFNQS2VybmVsJj4o
KmF1ZGlvRFNQS2VybmVsKS5sYXp5SW5pdGlhbGl6ZU92ZXJzYW1wbGluZygpOwogfQogCiB2b2lk
IFdhdmVTaGFwZXJQcm9jZXNzb3I6OnByb2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNvdXJjZSwgQXVk
aW9CdXMqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQpAQCAtOTIsOCArOTMs
OCBAQCB2b2lkIFdhdmVTaGFwZXJQcm9jZXNzb3I6OnByb2Nlc3MoY29uc3QgQXVkaW9CdXMqIHNv
dXJjZSwgQXVkaW9CdXMqIGRlc3RpbmF0aW9uLAogICAgIExvY2tlciBsb2NrZXIgeyBBZG9wdExv
Y2ssIG1fcHJvY2Vzc0xvY2sgfTsKIAogICAgIC8vIEZvciBlYWNoIGNoYW5uZWwgb2Ygb3VyIGlu
cHV0LCBwcm9jZXNzIHVzaW5nIHRoZSBjb3JyZXNwb25kaW5nIFdhdmVTaGFwZXJEU1BLZXJuZWwg
aW50byB0aGUgb3V0cHV0IGNoYW5uZWwuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
a2VybmVscy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9rZXJuZWxzW2ldLT5wcm9jZXNzKHNvdXJj
ZS0+Y2hhbm5lbChpKS0+ZGF0YSgpLCBkZXN0aW5hdGlvbi0+Y2hhbm5lbChpKS0+bXV0YWJsZURh
dGEoKSwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fa2Vy
bmVscy5zaXplKCk7ICsraSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2F2ZVNoYXBlckRTUEtlcm5l
bCY+KCptX2tlcm5lbHNbaV0pLnByb2Nlc3Moc291cmNlLT5jaGFubmVsKGkpLT5kYXRhKCksIGRl
c3RpbmF0aW9uLT5jaGFubmVsKGkpLT5tdXRhYmxlRGF0YSgpLCBmcmFtZXNUb1Byb2Nlc3MpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oCmluZGV4IDNkYTJjZWM4MWRmYTEy
MTdjYjYzYTY4NzY3M2FlNjQ3N2JlN2QwN2MuLmY3MjdjOThkYmU5MzkwMWRiMjYxOGE5YmFkZTBj
NDkxNjI3ZjYyN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
V2F2ZVNoYXBlclByb2Nlc3Nvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5oCkBAIC00OCwyMSArNDgsMjUgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB+V2F2ZVNoYXBlclByb2Nlc3NvcigpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRy
PEF1ZGlvRFNQS2VybmVsPiBjcmVhdGVLZXJuZWwoKSBvdmVycmlkZTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8QXVkaW9EU1BLZXJuZWw+IGNyZWF0ZUtlcm5lbCgpIGZpbmFsOwogCi0gICAgdm9pZCBw
cm9jZXNzKGNvbnN0IEF1ZGlvQnVzKiBzb3VyY2UsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbiwgc2l6
ZV90IGZyYW1lc1RvUHJvY2Vzcykgb3ZlcnJpZGU7CisgICAgdm9pZCBwcm9jZXNzKGNvbnN0IEF1
ZGlvQnVzKiBzb3VyY2UsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbiwgc2l6ZV90IGZyYW1lc1RvUHJv
Y2VzcykgZmluYWw7CiAKLSAgICB2b2lkIHNldEN1cnZlKEZsb2F0MzJBcnJheSopOwotICAgIEZs
b2F0MzJBcnJheSogY3VydmUoKSB7IHJldHVybiBtX2N1cnZlLmdldCgpOyB9CisgICAgdm9pZCBz
ZXRDdXJ2ZUZvckJpbmRpbmdzKEZsb2F0MzJBcnJheSopOworICAgIEZsb2F0MzJBcnJheSogY3Vy
dmVGb3JCaW5kaW5ncygpIFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMgeyBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOyByZXR1cm4gbV9jdXJ2ZS5nZXQoKTsgfSAvLyBEb2Vzbid0IGdy
YWIgdGhlIGxvY2ssIG9ubHkgc2FmZSB0byBjYWxsIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICBG
bG9hdDMyQXJyYXkqIGN1cnZlKCkgY29uc3QgV1RGX1JFUVVJUkVTX0xPQ0sobV9wcm9jZXNzTG9j
aykgeyByZXR1cm4gbV9jdXJ2ZS5nZXQoKTsgfQogCi0gICAgdm9pZCBzZXRPdmVyc2FtcGxlKE92
ZXJTYW1wbGVUeXBlKTsKLSAgICBPdmVyU2FtcGxlVHlwZSBvdmVyc2FtcGxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vdmVyc2FtcGxlOyB9CisgICAgdm9pZCBzZXRPdmVyc2FtcGxlRm9yQmluZGluZ3Mo
T3ZlclNhbXBsZVR5cGUpOworICAgIE92ZXJTYW1wbGVUeXBlIG92ZXJzYW1wbGVGb3JCaW5kaW5n
cygpIGNvbnN0IFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMgeyBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOyByZXR1cm4gbV9vdmVyc2FtcGxlOyB9IC8vIERvZXNuJ3QgZ3JhYiB0aGUg
bG9jaywgb25seSBzYWZlIHRvIGNhbGwgb24gdGhlIG1haW4gdGhyZWFkLgorICAgIE92ZXJTYW1w
bGVUeXBlIG92ZXJzYW1wbGUoKSBjb25zdCBXVEZfUkVRVUlSRVNfTE9DSyhtX3Byb2Nlc3NMb2Nr
KSB7IHJldHVybiBtX292ZXJzYW1wbGU7IH0KKworICAgIExvY2smIHByb2Nlc3NMb2NrKCkgY29u
c3QgV1RGX1JFVFVSTlNfTE9DSyhtX3Byb2Nlc3NMb2NrKSB7IHJldHVybiBtX3Byb2Nlc3NMb2Nr
OyB9CiAKIHByaXZhdGU6CiAgICAgLy8gbV9jdXJ2ZSByZXByZXNlbnRzIHRoZSBub24tbGluZWFy
IHNoYXBpbmcgY3VydmUuCi0gICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gbV9jdXJ2ZTsKKyAgICBS
ZWZQdHI8RmxvYXQzMkFycmF5PiBtX2N1cnZlIFdURl9HVUFSREVEX0JZX0xPQ0sobV9wcm9jZXNz
TG9jayk7CiAKLSAgICBPdmVyU2FtcGxlVHlwZSBtX292ZXJzYW1wbGUgeyBPdmVyU2FtcGxlTm9u
ZSB9OworICAgIE92ZXJTYW1wbGVUeXBlIG1fb3ZlcnNhbXBsZSBXVEZfR1VBUkRFRF9CWV9MT0NL
KG1fcHJvY2Vzc0xvY2spIHsgT3ZlclNhbXBsZU5vbmUgfTsKIAogICAgIC8vIFRoaXMgc3luY2hy
b25pemVzIHByb2Nlc3MoKSB3aXRoIHNldEN1cnZlKCkuCiAgICAgbXV0YWJsZSBMb2NrIG1fcHJv
Y2Vzc0xvY2s7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>