<?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>123699</bug_id>
          
          <creation_ts>2013-11-03 01:16:06 -0800</creation_ts>
          <short_desc>[CSSRegions] Use auto keyword to clean-up for loops</short_desc>
          <delta_ts>2013-11-04 00:26:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mihnea Ovidenie">mihnea</reporter>
          <assigned_to name="Mihnea Ovidenie">mihnea</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>WebkitBugTracker</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>946403</commentid>
    <comment_count>0</comment_count>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2013-11-03 01:16:06 -0800</bug_when>
    <thetext>Start using auto keyword in for loops instead of long iterators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946404</commentid>
    <comment_count>1</comment_count>
      <attachid>215853</attachid>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2013-11-03 01:22:01 -0800</bug_when>
    <thetext>Created attachment 215853
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946437</commentid>
    <comment_count>2</comment_count>
      <attachid>215853</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-11-03 07:17:53 -0800</bug_when>
    <thetext>Comment on attachment 215853
Patch

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

&gt; Source/WebCore/rendering/RenderRegion.cpp:538
&gt; +    for (auto iter = m_renderObjectRegionStyle.begin(), end = m_renderObjectRegionStyle.end(); iter != end; ++iter) {

I think you should change the other loops to have the end iterator in a local variable as well, since you&apos;re changing them anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946440</commentid>
    <comment_count>3</comment_count>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2013-11-03 07:58:59 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 215853 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215853&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderRegion.cpp:538
&gt; &gt; +    for (auto iter = m_renderObjectRegionStyle.begin(), end = m_renderObjectRegionStyle.end(); iter != end; ++iter) {
&gt; 
&gt; I think you should change the other loops to have the end iterator in a local variable as well, since you&apos;re changing them anyway.

Sure, thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946552</commentid>
    <comment_count>4</comment_count>
      <attachid>215891</attachid>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2013-11-03 23:56:47 -0800</bug_when>
    <thetext>Created attachment 215891
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946558</commentid>
    <comment_count>5</comment_count>
      <attachid>215891</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-04 00:26:09 -0800</bug_when>
    <thetext>Comment on attachment 215891
Patch for landing

Clearing flags on attachment: 215891

Committed r158559: &lt;http://trac.webkit.org/changeset/158559&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>946559</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-04 00:26:11 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215853</attachid>
            <date>2013-11-03 01:22:01 -0800</date>
            <delta_ts>2013-11-03 23:56:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>123699.patch</filename>
            <type>text/plain</type>
            <size>42169</size>
            <attacher name="Mihnea Ovidenie">mihnea</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNGQ2MzgzLi5hZmJhY2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzcg
QEAKKzIwMTMtMTEtMDMgIE1paG5lYSBPdmlkZW5pZSAgPG1paG5lYUBhZG9iZS5jb20+CisKKyAg
ICAgICAgW0NTU1JlZ2lvbnNdIFVzZSBhdXRvIGtleXdvcmQgdG8gY2xlYW4tdXAgZm9yIGxvb3Bz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2OTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdGFydCB1
c2luZyBhdXRvIGtleXdvcmQgZm9yIGxvb3BzLgorICAgICAgICBBbHNvLCBzaW5jZSByZWdpb24g
YnJlYWtzIChmb3JjZWQgYnJlYWtzKSBjYW4gYmUgYWRkZWQgb25seSBvbiBib3hlcywKKyAgICAg
ICAgaSBjaGFuZ2VkIFJlbmRlckZsb3dUaHJlYWQ6OmFkZEZvcmNlZFJlZ2lvbkJyZWFrIHRvIHVz
ZSBhIFJlbmRlckJveCogaW5zdGVhZCBvZiBSZW5kZXJPYmplY3QqLgorCisgICAgICAgIE5vIGNo
YW5nZSBpbiBmdW5jdGlvbmFsaXR5LCBubyBuZXcgdGVzdHMgLgorCisgICAgICAgICogZG9tL1dl
YktpdE5hbWVkRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXROYW1lZEZsb3c6OmZp
cnN0RW1wdHlSZWdpb25JbmRleCk6CisgICAgICAgICogcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb3dUaHJlYWRDb250cm9sbGVyOjplbnN1
cmVSZW5kZXJGbG93VGhyZWFkV2l0aE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Rmxvd1RocmVh
ZENvbnRyb2xsZXI6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb3dUaHJl
YWRDb250cm9sbGVyOjpsYXlvdXRSZW5kZXJOYW1lZEZsb3dUaHJlYWRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZsb3dUaHJlYWRDb250cm9sbGVyOjp1cGRhdGVGbG93VGhyZWFkc0NoYWluSWZOZWNl
c3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Rmxvd1RocmVhZENvbnRyb2xsZXI6OnVwZGF0ZUZs
b3dUaHJlYWRzTmVlZGluZ0xheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpGbG93VGhyZWFkQ29u
dHJvbGxlcjo6dXBkYXRlRmxvd1RocmVhZHNOZWVkaW5nVHdvU3RlcExheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpGbG93VGhyZWFkQ29udHJvbGxlcjo6cmVzZXRGbG93VGhyZWFkc1dpdGhBdXRv
SGVpZ2h0UmVnaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpGbG93VGhyZWFkQ29udHJvbGxlcjo6
dXBkYXRlRmxvd1RocmVhZHNJbnRvQ29uc3RyYWluZWRQaGFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGbG93VGhyZWFkQ29udHJvbGxlcjo6dXBkYXRlRmxvd1RocmVhZHNJbnRvT3ZlcmZsb3dQaGFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGbG93VGhyZWFkQ29udHJvbGxlcjo6dXBkYXRlRmxvd1Ro
cmVhZHNJbnRvTWVhc3VyZUNvbnRlbnRQaGFzZSk6CisgICAgICAgIChXZWJDb3JlOjpGbG93VGhy
ZWFkQ29udHJvbGxlcjo6dXBkYXRlRmxvd1RocmVhZHNJbnRvRmluYWxQaGFzZSk6CisgICAgICAg
IChXZWJDb3JlOjpGbG93VGhyZWFkQ29udHJvbGxlcjo6dXBkYXRlUmVuZGVyRmxvd1RocmVhZExh
eWVyc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb3dUaHJlYWRDb250cm9sbGVyOjpj
b2xsZWN0Rml4ZWRQb3NpdGlvbmVkTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb3dUaHJl
YWRDb250cm9sbGVyOjppc0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50Q29uc2lzdGVudCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmxvd1RocmVhZDo6dmFsaWRhdGVSZWdpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZsb3dUaHJlYWQ6Omhhc0NvbXBvc2l0aW5nUmVnaW9uRGVzY2VuZGFudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpnZXRMYXllckxpc3RGb3JSZWdpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6dXBkYXRlTGF5ZXJUb1JlZ2lv
bk1hcHBpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUxv
Z2ljYWxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjb21wdXRl
TG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpyZXBh
aW50UmVjdGFuZ2xlSW5SZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJl
YWQ6OnJlbW92ZVJlbmRlckJveFJlZ2lvbkluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Rmxvd1RocmVhZDo6bG9naWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9uc0ZvckJsb2NrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNsZWFyUmVuZGVyT2JqZWN0Q3VzdG9tU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJCb3hS
ZWdpb25JbmZvQW5kQ3VzdG9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1Ro
cmVhZDo6c2V0UmVnaW9uUmFuZ2VGb3JCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxv
d1RocmVhZDo6Z2V0UmVnaW9uUmFuZ2VGb3JCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Rmxvd1RocmVhZDo6cmVnaW9uSW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93
VGhyZWFkOjpjaGVja1JlZ2lvbnNXaXRoU3R5bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGbG93VGhyZWFkOjpvYmplY3RJbkZsb3dSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRmxvd1RocmVhZDo6aXNBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudENvbnNpc3RlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6aW5pdGlhbGl6ZVJlZ2lvbnND
b21wdXRlZEF1dG9IZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6
bWFya0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0ZvckxheW91dCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGbG93VGhyZWFkOjptYXJrUmVnaW9uc0Zvck92ZXJmbG93TGF5b3V0SWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6dXBkYXRlUmVnaW9uc0Zsb3dU
aHJlYWRQb3J0aW9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjph
ZGRGb3JjZWRSZWdpb25CcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFk
Ojpjb2xsZWN0TGF5ZXJGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1Ro
cmVhZDo6ZnJhZ21lbnRzQm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxv
d1RocmVhZDo6YWRkUmVnaW9uc1Zpc3VhbEVmZmVjdE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZsb3dUaHJlYWQ6OmFkZFJlZ2lvbnNWaXN1YWxPdmVyZmxvd0Zyb21UaGVtZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdpb25zT3ZlcmZsb3dG
cm9tQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRkUmVnaW9u
c0xheW91dE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNs
ZWFyUmVnaW9uc092ZXJmbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVh
ZC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpuZXh0UmVuZGVyZXJGb3JOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVhZDo6cHJldmlvdXNSZW5k
ZXJlckZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpk
ZXBlbmRzT24pOgorICAgICAgICAoV2ViQ29yZTo6YWRkUmVnaW9uVG9MaXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVhZDo6Y29tcHV0ZU92ZXJzZXRTdGF0ZUZvclJl
Z2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpjaGVja0lu
dmFsaWRSZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVhZDo6
cHVzaERlcGVuZGVuY2llcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnNldFJlZ2lvbk9iamVjdHNSZWdpb25T
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnJlc3RvcmVSZWdpb25PYmpl
Y3RzT3JpZ2luYWxTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmNvbXB1
dGVDaGlsZHJlblN0eWxlSW5SZWdpb24pOgorCiAyMDEzLTExLTAyICBDaHJpc3RvcGhlIER1bWV6
ICA8Y2guZHVtZXpAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgRW5mb3JjZVJhbmdlIGRvZXNuJ3Qg
ZW5mb3JjZSByYW5nZSBvZiBhIHNob3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
V2ViS2l0TmFtZWRGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXROYW1lZEZsb3cu
Y3BwCmluZGV4IDI5ZThhZTYuLjE0MWQ2ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9XZWJLaXROYW1lZEZsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXROYW1l
ZEZsb3cuY3BwCkBAIC0xMDEsNyArMTAxLDcgQEAgaW50IFdlYktpdE5hbWVkRmxvdzo6Zmlyc3RF
bXB0eVJlZ2lvbkluZGV4KCkgY29uc3QKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaW50IGNv
dW50Tm9uUHNldWRvUmVnaW9ucyA9IC0xOwotICAgIFJlbmRlclJlZ2lvbkxpc3Q6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSByZWdpb25MaXN0LmJlZ2luKCk7CisgICAgYXV0byBpdGVyID0gcmVnaW9u
TGlzdC5iZWdpbigpOwogICAgIGZvciAoaW50IGluZGV4ID0gMDsgaXRlciAhPSByZWdpb25MaXN0
LmVuZCgpOyArK2luZGV4LCArK2l0ZXIpIHsKICAgICAgICAgLy8gRklYTUU6IFBzZXVkby1lbGVt
ZW50cyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBsaXN0LgogICAgICAgICAvLyBUaGV5IHdpbGwg
YmUgaW5jbHVkZWQgd2hlbiB3ZSB3aWxsIHByb3Blcmx5IHN1cHBvcnQgdGhlIFJlZ2lvbiBpbnRl
cmZhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xs
ZXIuY3BwCmluZGV4IGU4MTAxYWUuLmU4YjAwZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcApAQCAtNjMsNyArNjMsNyBAQCBSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQmIEZsb3dUaHJlYWRDb250cm9sbGVyOjplbnN1cmVSZW5kZXJGbG93
VGhyZWFkV2l0aE5hbWUoY29ucwogICAgIGlmICghbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0
KQogICAgICAgICBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QgPSBhZG9wdFB0cihuZXcgUmVu
ZGVyTmFtZWRGbG93VGhyZWFkTGlzdCgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgZm9yIChSZW5k
ZXJOYW1lZEZsb3dUaHJlYWRMaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZW5kZXJOYW1lZEZsb3dU
aHJlYWRMaXN0LT5iZWdpbigpOyBpdGVyICE9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+
ZW5kKCk7ICsraXRlcikgeworICAgICAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVuZGVyTmFtZWRG
bG93VGhyZWFkTGlzdC0+YmVnaW4oKTsgaXRlciAhPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExp
c3QtPmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCog
Zmxvd1JlbmRlcmVyID0gKml0ZXI7CiAgICAgICAgICAgICBpZiAoZmxvd1JlbmRlcmVyLT5mbG93
VGhyZWFkTmFtZSgpID09IG5hbWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuICpmbG93UmVuZGVy
ZXI7CkBAIC05MCw3ICs5MCw3IEBAIFJlbmRlck5hbWVkRmxvd1RocmVhZCYgRmxvd1RocmVhZENv
bnRyb2xsZXI6OmVuc3VyZVJlbmRlckZsb3dUaHJlYWRXaXRoTmFtZShjb25zCiB2b2lkIEZsb3dU
aHJlYWRDb250cm9sbGVyOjpzdHlsZURpZENoYW5nZSgpCiB7CiAgICAgUmVuZGVyU3R5bGUmIHZp
ZXdTdHlsZSA9IG1fdmlldy0+c3R5bGUoKTsKLSAgICBmb3IgKFJlbmRlck5hbWVkRmxvd1RocmVh
ZExpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPmJlZ2lu
KCk7IGl0ZXIgIT0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5lbmQoKTsgKytpdGVyKSB7
CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPmJlZ2lu
KCk7IGl0ZXIgIT0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5lbmQoKTsgKytpdGVyKSB7
CiAgICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1JlbmRlcmVyID0gKml0ZXI7CiAg
ICAgICAgIGZsb3dSZW5kZXJlci0+c2V0U3R5bGUoUmVuZGVyRmxvd1RocmVhZDo6Y3JlYXRlRmxv
d1RocmVhZFN0eWxlKCZ2aWV3U3R5bGUpKTsKICAgICB9CkBAIC0xMDAsNyArMTAwLDcgQEAgdm9p
ZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6bGF5b3V0UmVuZGVyTmFtZWRGbG93VGhyZWFkcygpCiB7
CiAgICAgdXBkYXRlRmxvd1RocmVhZHNDaGFpbklmTmVjZXNzYXJ5KCk7CiAKLSAgICBmb3IgKFJl
bmRlck5hbWVkRmxvd1RocmVhZExpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlbmRlck5hbWVkRmxv
d1RocmVhZExpc3QtPmJlZ2luKCk7IGl0ZXIgIT0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0
LT5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlbmRlck5hbWVkRmxv
d1RocmVhZExpc3QtPmJlZ2luKCk7IGl0ZXIgIT0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0
LT5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1Jl
bmRlcmVyID0gKml0ZXI7CiAgICAgICAgIGZsb3dSZW5kZXJlci0+bGF5b3V0SWZOZWVkZWQoKTsK
ICAgICB9CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6dXBk
YXRlRmxvd1RocmVhZHNDaGFpbklmTmVjZXNzYXJ5KCkKIAogICAgIC8vIFJlbW92ZSB0aGUgbGVm
dC1vdmVyIGZsb3cgdGhyZWFkcy4KICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0IHRvUmVt
b3ZlTGlzdDsKLSAgICBmb3IgKFJlbmRlck5hbWVkRmxvd1RocmVhZExpc3Q6Oml0ZXJhdG9yIGl0
ZXIgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPmJlZ2luKCk7IGl0ZXIgIT0gbV9yZW5k
ZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0
ZXIgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPmJlZ2luKCk7IGl0ZXIgIT0gbV9yZW5k
ZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIFJlbmRlck5h
bWVkRmxvd1RocmVhZCogZmxvd1JlbmRlcmVyID0gKml0ZXI7CiAgICAgICAgIGlmIChmbG93UmVu
ZGVyZXItPmlzTWFya2VkRm9yRGVzdHJ1Y3Rpb24oKSkKICAgICAgICAgICAgIHRvUmVtb3ZlTGlz
dC5hZGQoZmxvd1JlbmRlcmVyKTsKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIEZsb3dUaHJlYWRD
b250cm9sbGVyOjp1cGRhdGVGbG93VGhyZWFkc0NoYWluSWZOZWNlc3NhcnkoKQogICAgIGlmICh0
b1JlbW92ZUxpc3Quc2l6ZSgpID4gMCkKICAgICAgICAgc2V0SXNSZW5kZXJOYW1lZEZsb3dUaHJl
YWRPcmRlckRpcnR5KHRydWUpOwogCi0gICAgZm9yIChSZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0
OjppdGVyYXRvciBpdGVyID0gdG9SZW1vdmVMaXN0LmJlZ2luKCk7IGl0ZXIgIT0gdG9SZW1vdmVM
aXN0LmVuZCgpOyArK2l0ZXIpIHsKKyAgICBmb3IgKGF1dG8gaXRlciA9IHRvUmVtb3ZlTGlzdC5i
ZWdpbigpOyBpdGVyICE9IHRvUmVtb3ZlTGlzdC5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIFJl
bmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1JlbmRlcmVyID0gKml0ZXI7CiAgICAgICAgIG1fcmVu
ZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+cmVtb3ZlKGZsb3dSZW5kZXJlcik7CiAgICAgICAgIGZs
b3dSZW5kZXJlci0+ZGVzdHJveSgpOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgRmxvd1RocmVh
ZENvbnRyb2xsZXI6OnVwZGF0ZUZsb3dUaHJlYWRzQ2hhaW5JZk5lY2Vzc2FyeSgpCiAgICAgaWYg
KGlzUmVuZGVyTmFtZWRGbG93VGhyZWFkT3JkZXJEaXJ0eSgpKSB7CiAgICAgICAgIC8vIEFycmFu
Z2UgdGhlIHRocmVhZCBsaXN0IGFjY29yZGluZyB0byBkZXBlbmRlbmNpZXMuCiAgICAgICAgIFJl
bmRlck5hbWVkRmxvd1RocmVhZExpc3Qgc29ydGVkTGlzdDsKLSAgICAgICAgZm9yIChSZW5kZXJO
YW1lZEZsb3dUaHJlYWRMaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZW5kZXJOYW1lZEZsb3dUaHJl
YWRMaXN0LT5iZWdpbigpOyBpdGVyICE9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+ZW5k
KCk7ICsraXRlcikgeworICAgICAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVuZGVyTmFtZWRGbG93
VGhyZWFkTGlzdC0+YmVnaW4oKTsgaXRlciAhPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3Qt
PmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxv
d1JlbmRlcmVyID0gKml0ZXI7CiAgICAgICAgICAgICBpZiAoc29ydGVkTGlzdC5jb250YWlucyhm
bG93UmVuZGVyZXIpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTY1LDcgKzE2NSw3
IEBAIGJvb2wgRmxvd1RocmVhZENvbnRyb2xsZXI6OnVwZGF0ZUZsb3dUaHJlYWRzTmVlZGluZ0xh
eW91dCgpCiB7CiAgICAgYm9vbCBuZWVkc1R3b1Bhc3NMYXlvdXQgPSBmYWxzZTsKIAotICAgIGZv
ciAoUmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fcmVuZGVyTmFt
ZWRGbG93VGhyZWFkTGlzdC0+YmVnaW4oKTsgaXRlciAhPSBtX3JlbmRlck5hbWVkRmxvd1RocmVh
ZExpc3QtPmVuZCgpOyArK2l0ZXIpIHsKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVuZGVyTmFt
ZWRGbG93VGhyZWFkTGlzdC0+YmVnaW4oKTsgaXRlciAhPSBtX3JlbmRlck5hbWVkRmxvd1RocmVh
ZExpc3QtPmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBm
bG93UmVuZGVyZXIgPSAqaXRlcjsKICAgICAgICAgQVNTRVJUKCFmbG93UmVuZGVyZXItPm5lZWRz
VHdvUGhhc2VzTGF5b3V0KCkpOwogICAgICAgICBBU1NFUlQoZmxvd1JlbmRlcmVyLT5pbk1lYXN1
cmVDb250ZW50TGF5b3V0UGhhc2UoKSk7CkBAIC0xODMsNyArMTgzLDcgQEAgYm9vbCBGbG93VGhy
ZWFkQ29udHJvbGxlcjo6dXBkYXRlRmxvd1RocmVhZHNOZWVkaW5nVHdvU3RlcExheW91dCgpCiB7
CiAgICAgYm9vbCBuZWVkc1R3b1Bhc3NMYXlvdXQgPSBmYWxzZTsKIAotICAgIGZvciAoUmVuZGVy
TmFtZWRGbG93VGhyZWFkTGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fcmVuZGVyTmFtZWRGbG93VGhy
ZWFkTGlzdC0+YmVnaW4oKTsgaXRlciAhPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPmVu
ZCgpOyArK2l0ZXIpIHsKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVuZGVyTmFtZWRGbG93VGhy
ZWFkTGlzdC0+YmVnaW4oKTsgaXRlciAhPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPmVu
ZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBmbG93UmVuZGVy
ZXIgPSAqaXRlcjsKICAgICAgICAgaWYgKGZsb3dSZW5kZXJlci0+bmVlZHNUd29QaGFzZXNMYXlv
dXQoKSkgewogICAgICAgICAgICAgbmVlZHNUd29QYXNzTGF5b3V0ID0gdHJ1ZTsKQEAgLTE5OSw3
ICsxOTksNyBAQCBib29sIEZsb3dUaHJlYWRDb250cm9sbGVyOjp1cGRhdGVGbG93VGhyZWFkc05l
ZWRpbmdUd29TdGVwTGF5b3V0KCkKIAogdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6cmVzZXRG
bG93VGhyZWFkc1dpdGhBdXRvSGVpZ2h0UmVnaW9ucygpCiB7Ci0gICAgZm9yIChSZW5kZXJOYW1l
ZEZsb3dUaHJlYWRMaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRM
aXN0LT5iZWdpbigpOyBpdGVyICE9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+ZW5kKCk7
ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRM
aXN0LT5iZWdpbigpOyBpdGVyICE9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+ZW5kKCk7
ICsraXRlcikgewogICAgICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGZsb3dSZW5kZXJlciA9
ICppdGVyOwogICAgICAgICBpZiAoZmxvd1JlbmRlcmVyLT5oYXNBdXRvTG9naWNhbEhlaWdodFJl
Z2lvbnMoKSkgewogICAgICAgICAgICAgZmxvd1JlbmRlcmVyLT5tYXJrQXV0b0xvZ2ljYWxIZWln
aHRSZWdpb25zRm9yTGF5b3V0KCk7CkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBGbG93VGhyZWFk
Q29udHJvbGxlcjo6dXBkYXRlRmxvd1RocmVhZHNJbnRvQ29uc3RyYWluZWRQaGFzZSgpCiB7CiAg
ICAgLy8gV2FsayB0aGUgZmxvdyBjaGFpbiBpbiByZXZlcnNlIG9yZGVyIHRvIHVwZGF0ZSB0aGUg
YXV0by1oZWlnaHQgcmVnaW9ucyBhbmQgY29tcHV0ZSBjb3JyZWN0IHNpemVzIGZvciB0aGUgY29u
dGFpbmluZyByZWdpb25zLiBPbmx5IGFmdGVyIHRoaXMgd2UgY2FuCiAgICAgLy8gc2V0IHRoZSBm
bG93IGluIHRoZSBjb25zdHJhaW5lZCBsYXlvdXQgcGhhc2UuCi0gICAgZm9yIChSZW5kZXJOYW1l
ZEZsb3dUaHJlYWRMaXN0OjpyZXZlcnNlX2l0ZXJhdG9yIGl0ZXIgPSBtX3JlbmRlck5hbWVkRmxv
d1RocmVhZExpc3QtPnJiZWdpbigpOyBpdGVyICE9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlz
dC0+cmVuZCgpOyArK2l0ZXIpIHsKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVuZGVyTmFtZWRG
bG93VGhyZWFkTGlzdC0+cmJlZ2luKCk7IGl0ZXIgIT0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRM
aXN0LT5yZW5kKCk7ICsraXRlcikgewogICAgICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGZs
b3dSZW5kZXJlciA9ICppdGVyOwogICAgICAgICBBU1NFUlQoIWZsb3dSZW5kZXJlci0+aGFzUmVn
aW9ucygpIHx8IGZsb3dSZW5kZXJlci0+aGFzVmFsaWRSZWdpb25JbmZvKCkpOwogICAgICAgICBm
bG93UmVuZGVyZXItPmxheW91dElmTmVlZGVkKCk7CkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBG
bG93VGhyZWFkQ29udHJvbGxlcjo6dXBkYXRlRmxvd1RocmVhZHNJbnRvQ29uc3RyYWluZWRQaGFz
ZSgpCiAKIHZvaWQgRmxvd1RocmVhZENvbnRyb2xsZXI6OnVwZGF0ZUZsb3dUaHJlYWRzSW50b092
ZXJmbG93UGhhc2UoKQogewotICAgIGZvciAoUmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdDo6cmV2
ZXJzZV9pdGVyYXRvciBpdGVyID0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5yYmVnaW4o
KTsgaXRlciAhPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPnJlbmQoKTsgKytpdGVyKSB7
CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPnJiZWdp
bigpOyBpdGVyICE9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+cmVuZCgpOyArK2l0ZXIp
IHsKICAgICAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBmbG93UmVuZGVyZXIgPSAqaXRlcjsK
ICAgICAgICAgQVNTRVJUKCFmbG93UmVuZGVyZXItPmhhc1JlZ2lvbnMoKSB8fCBmbG93UmVuZGVy
ZXItPmhhc1ZhbGlkUmVnaW9uSW5mbygpKTsKICAgICAgICAgQVNTRVJUKCFmbG93UmVuZGVyZXIt
Pm5lZWRzVHdvUGhhc2VzTGF5b3V0KCkpOwpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgRmxvd1Ro
cmVhZENvbnRyb2xsZXI6OnVwZGF0ZUZsb3dUaHJlYWRzSW50b092ZXJmbG93UGhhc2UoKQogCiB2
b2lkIEZsb3dUaHJlYWRDb250cm9sbGVyOjp1cGRhdGVGbG93VGhyZWFkc0ludG9NZWFzdXJlQ29u
dGVudFBoYXNlKCkKIHsKLSAgICBmb3IgKFJlbmRlck5hbWVkRmxvd1RocmVhZExpc3Q6Oml0ZXJh
dG9yIGl0ZXIgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPmJlZ2luKCk7IGl0ZXIgIT0g
bV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChh
dXRvIGl0ZXIgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPmJlZ2luKCk7IGl0ZXIgIT0g
bV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIFJl
bmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1JlbmRlcmVyID0gKml0ZXI7CiAgICAgICAgIEFTU0VS
VChmbG93UmVuZGVyZXItPmluRmluYWxMYXlvdXRQaGFzZSgpKTsKIApAQCAtMjUzLDcgKzI1Myw3
IEBAIHZvaWQgRmxvd1RocmVhZENvbnRyb2xsZXI6OnVwZGF0ZUZsb3dUaHJlYWRzSW50b01lYXN1
cmVDb250ZW50UGhhc2UoKQogCiB2b2lkIEZsb3dUaHJlYWRDb250cm9sbGVyOjp1cGRhdGVGbG93
VGhyZWFkc0ludG9GaW5hbFBoYXNlKCkKIHsKLSAgICBmb3IgKFJlbmRlck5hbWVkRmxvd1RocmVh
ZExpc3Q6OnJldmVyc2VfaXRlcmF0b3IgaXRlciA9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlz
dC0+cmJlZ2luKCk7IGl0ZXIgIT0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5yZW5kKCk7
ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRM
aXN0LT5yYmVnaW4oKTsgaXRlciAhPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPnJlbmQo
KTsgKytpdGVyKSB7CiAgICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1JlbmRlcmVy
ID0gKml0ZXI7CiAgICAgICAgIGZsb3dSZW5kZXJlci0+bGF5b3V0SWZOZWVkZWQoKTsKICAgICAg
ICAgaWYgKGZsb3dSZW5kZXJlci0+bmVlZHNUd29QaGFzZXNMYXlvdXQoKSkgewpAQCAtMjY4LDcg
KzI2OCw3IEBAIHZvaWQgRmxvd1RocmVhZENvbnRyb2xsZXI6OnVwZGF0ZUZsb3dUaHJlYWRzSW50
b0ZpbmFsUGhhc2UoKQogdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6dXBkYXRlUmVuZGVyRmxv
d1RocmVhZExheWVyc0lmTmVlZGVkKCkKIHsKICAgICAvLyBXYWxrIHRoZSBmbG93IGNoYWluIGlu
IHJldmVyc2Ugb3JkZXIgYmVjYXVzZSBSZW5kZXJSZWdpb25zIG1pZ2h0IGJlY29tZSBSZW5kZXJM
YXllcnMgZm9yIHRoZSBmb2xsb3dpbmcgZmxvdyB0aHJlYWRzLgotICAgIGZvciAoUmVuZGVyTmFt
ZWRGbG93VGhyZWFkTGlzdDo6cmV2ZXJzZV9pdGVyYXRvciBpdGVyID0gbV9yZW5kZXJOYW1lZEZs
b3dUaHJlYWRMaXN0LT5yYmVnaW4oKTsgaXRlciAhPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExp
c3QtPnJlbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlbmRlck5hbWVk
Rmxvd1RocmVhZExpc3QtPnJiZWdpbigpOyBpdGVyICE9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFk
TGlzdC0+cmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBm
bG93UmVuZGVyZXIgPSAqaXRlcjsKICAgICAgICAgZmxvd1JlbmRlcmVyLT51cGRhdGVBbGxMYXll
clRvUmVnaW9uTWFwcGluZ3NJZk5lZWRlZCgpOwogICAgIH0KQEAgLTI4NCw3ICsyODQsNyBAQCBi
b29sIEZsb3dUaHJlYWRDb250cm9sbGVyOjppc0NvbnRlbnRFbGVtZW50UmVnaXN0ZXJlZFdpdGhB
bnlOYW1lZEZsb3coY29uc3QgRWxlbQogLy8gVGhlc2UgbGF5ZXJzIGFyZSBwYWludGVkIGFuZCBo
aXQtdGVzdGVkIHN0YXJ0aW5nIGZyb20gUmVuZGVyVmlldyBub3QgZnJvbSByZWdpb25zLgogdm9p
ZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6Y29sbGVjdEZpeGVkUG9zaXRpb25lZExheWVycyhWZWN0
b3I8UmVuZGVyTGF5ZXIqPiYgZml4ZWRQb3NMYXllcnMpIGNvbnN0CiB7Ci0gICAgZm9yIChSZW5k
ZXJOYW1lZEZsb3dUaHJlYWRMaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9yZW5kZXJOYW1l
ZEZsb3dUaHJlYWRMaXN0LT5iZWdpbigpOyBpdGVyICE9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFk
TGlzdC0+ZW5kKCk7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9yZW5kZXJOYW1l
ZEZsb3dUaHJlYWRMaXN0LT5iZWdpbigpOyBpdGVyICE9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFk
TGlzdC0+ZW5kKCk7ICsraXRlcikgewogICAgICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGZs
b3dSZW5kZXJlciA9ICppdGVyOwogCiAgICAgICAgIC8vIElmIHRoZSBuYW1lZCBmbG93IGRvZXMg
bm90IGhhdmUgYW55IHJlZ2lvbnMgYXR0YWNoZWQsIGEgZml4ZWQgZWxlbWVudCBzaG91bGQgbm90
IGJlCkBAIC0yOTUsOCArMjk1LDcgQEAgdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6Y29sbGVj
dEZpeGVkUG9zaXRpb25lZExheWVycyhWZWN0b3I8UmVuZGVyTGF5ZXIqPiYgZmkKICAgICAgICAg
Ly8gSXRlcmF0ZSBvdmVyIHRoZSBmaXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzIGluIHRoZSBmbG93
IHRocmVhZAogICAgICAgICBUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldCogcG9zaXRpb25lZERl
c2NlbmRhbnRzID0gZmxvd1JlbmRlcmVyLT5wb3NpdGlvbmVkT2JqZWN0cygpOwogICAgICAgICBp
ZiAocG9zaXRpb25lZERlc2NlbmRhbnRzKSB7Ci0gICAgICAgICAgICBUcmFja2VkUmVuZGVyZXJM
aXN0SGFzaFNldDo6aXRlcmF0b3IgZW5kID0gcG9zaXRpb25lZERlc2NlbmRhbnRzLT5lbmQoKTsK
LSAgICAgICAgICAgIGZvciAoVHJhY2tlZFJlbmRlcmVyTGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIGl0
ID0gcG9zaXRpb25lZERlc2NlbmRhbnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgICAgIGZvciAoYXV0byBpdCA9IHBvc2l0aW9uZWREZXNjZW5kYW50cy0+YmVnaW4oKSwg
ZW5kID0gcG9zaXRpb25lZERlc2NlbmRhbnRzLT5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSAqaXQ7CiAgICAgICAgICAgICAgICAgaWYg
KCFib3gtPmZpeGVkUG9zaXRpb25lZFdpdGhOYW1lZEZsb3dDb250YWluaW5nQmxvY2soKSkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0zMTIsNyArMzExLDcgQEAgYm9vbCBGbG93
VGhyZWFkQ29udHJvbGxlcjo6aXNBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudENvbnNpc3Rl
bnQoKSBjb25zdAogICAgIGlmICghaGFzUmVuZGVyTmFtZWRGbG93VGhyZWFkcygpKQogICAgICAg
ICByZXR1cm4gIWhhc0Zsb3dUaHJlYWRzV2l0aEF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucygpOwog
Ci0gICAgZm9yIChSZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0OjppdGVyYXRvciBpdGVyID0gbV9y
ZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5iZWdpbigpOyBpdGVyICE9IG1fcmVuZGVyTmFtZWRG
bG93VGhyZWFkTGlzdC0+ZW5kKCk7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9y
ZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5iZWdpbigpOyBpdGVyICE9IG1fcmVuZGVyTmFtZWRG
bG93VGhyZWFkTGlzdC0+ZW5kKCk7ICsraXRlcikgewogICAgICAgICBpZiAoISgqaXRlciktPmlz
QXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zQ291bnRDb25zaXN0ZW50KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuY3BwCmluZGV4IGUwNTdlNjQuLmVhZDRlYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lk
IFJlbmRlckZsb3dUaHJlYWQ6OnZhbGlkYXRlUmVnaW9ucygpCiAgICAgICAgICAgICBMYXlvdXRV
bml0IHByZXZpb3VzUmVnaW9uTG9naWNhbEhlaWdodCA9IDA7CiAgICAgICAgICAgICBib29sIGZp
cnN0UmVnaW9uVmlzaXRlZCA9IGZhbHNlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3Ig
KFJlbmRlclJlZ2lvbkxpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsg
aXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgZm9yIChh
dXRvIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5k
KCk7ICsraXRlcikgewogICAgICAgICAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0
ZXI7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFyZWdpb24tPm5lZWRzTGF5b3V0KCkgfHwgcmVn
aW9uLT5pc1JlbmRlclJlZ2lvblNldCgpKTsKIApAQCAtMjUzLDcgKzI1Myw3IEBAIHZvaWQgUmVu
ZGVyRmxvd1RocmVhZDo6bGF5b3V0KCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiBib29sIFJlbmRlckZsb3dUaHJlYWQ6Omhhc0NvbXBvc2l0aW5nUmVnaW9uRGVzY2VuZGFudCgp
IGNvbnN0CiB7Ci0gICAgZm9yIChSZW5kZXJSZWdpb25MaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbV9yZWdpb25MaXN0LmJlZ2luKCk7IGl0ZXIgIT0gbV9yZWdpb25MaXN0LmVuZCgpOyArK2l0
ZXIpCisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAhPSBt
X3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikKICAgICAgICAgaWYgKFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIGxheWVyT3duZXIgPSB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCppdGVyKS0+bGF5
ZXJPd25lcigpKQogICAgICAgICAgICAgaWYgKGxheWVyT3duZXItPmhhc0xheWVyKCkgJiYgbGF5
ZXJPd25lci0+bGF5ZXIoKS0+aGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNjYsNyArMjY2LDcgQEAgY29uc3QgUmVuZGVyTGF5ZXJM
aXN0KiBSZW5kZXJGbG93VGhyZWFkOjpnZXRMYXllckxpc3RGb3JSZWdpb24oUmVuZGVyTmFtZWRG
bG93RnIKICAgICBpZiAoIW1fcmVnaW9uVG9MYXllckxpc3RNYXApCiAgICAgICAgIHJldHVybiAw
OwogICAgIHVwZGF0ZUFsbExheWVyVG9SZWdpb25NYXBwaW5nc0lmTmVlZGVkKCk7Ci0gICAgUmVn
aW9uVG9MYXllckxpc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gbV9yZWdpb25Ub0xh
eWVyTGlzdE1hcC0+ZmluZChyZWdpb24pOworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3JlZ2lvblRv
TGF5ZXJMaXN0TWFwLT5maW5kKHJlZ2lvbik7CiAgICAgcmV0dXJuIGl0ZXJhdG9yID09IG1fcmVn
aW9uVG9MYXllckxpc3RNYXAtPmVuZCgpID8gMCA6ICZpdGVyYXRvci0+dmFsdWU7CiB9CiAKQEAg
LTMwOSw3ICszMDksNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUxheWVyVG9SZWdp
b25NYXBwaW5ncyhSZW5kZXJMYXllciYgbGF5ZXIsIExheWVyVG9SZQogCiAgICAgbGF5ZXJUb1Jl
Z2lvbk1hcC5zZXQoJmxheWVyLCByZWdpb24pOwogCi0gICAgUmVnaW9uVG9MYXllckxpc3RNYXA6
Oml0ZXJhdG9yIGl0ZXJhdG9yID0gcmVnaW9uVG9MYXllckxpc3RNYXAuZmluZChyZWdpb24pOwor
ICAgIGF1dG8gaXRlcmF0b3IgPSByZWdpb25Ub0xheWVyTGlzdE1hcC5maW5kKHJlZ2lvbik7CiAg
ICAgUmVuZGVyTGF5ZXJMaXN0JiBsaXN0ID0gaXRlcmF0b3IgPT0gcmVnaW9uVG9MYXllckxpc3RN
YXAuZW5kKCkgPyByZWdpb25Ub0xheWVyTGlzdE1hcC5zZXQocmVnaW9uLCBSZW5kZXJMYXllckxp
c3QoKSkuaXRlcmF0b3ItPnZhbHVlIDogaXRlcmF0b3ItPnZhbHVlOwogICAgIEFTU0VSVCghbGlz
dC5jb250YWlucygmbGF5ZXIpKTsKICAgICBsaXN0LmFwcGVuZCgmbGF5ZXIpOwpAQCAtMzY1LDcg
KzM2NSw3IEBAIGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6Y29sbGVjdHNHcmFwaGljc0xheWVyc1Vu
ZGVyUmVnaW9ucygpIGNvbnN0CiB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUxvZ2ljYWxX
aWR0aCgpCiB7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGggPSBpbml0aWFsTG9naWNhbFdp
ZHRoKCk7Ci0gICAgZm9yIChSZW5kZXJSZWdpb25MaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZWdp
b25MaXN0LmJlZ2luKCk7IGl0ZXIgIT0gbV9yZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKKyAg
ICBmb3IgKGF1dG8gaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9IG1fcmVnaW9u
TGlzdC5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0
ZXI7CiAgICAgICAgIEFTU0VSVCghcmVnaW9uLT5uZWVkc0xheW91dCgpIHx8IHJlZ2lvbi0+aXNS
ZW5kZXJSZWdpb25TZXQoKSk7CiAgICAgICAgIGxvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4KHJlZ2lv
bi0+cGFnZUxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsV2lkdGgpOwpAQCAtMzczLDcgKzM3Myw3IEBA
IHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6dXBkYXRlTG9naWNhbFdpZHRoKCkKICAgICBzZXRMb2dp
Y2FsV2lkdGgobG9naWNhbFdpZHRoKTsKIAogICAgIC8vIElmIHRoZSByZWdpb25zIGhhdmUgbm9u
LXVuaWZvcm0gbG9naWNhbCB3aWR0aHMsIHRoZW4gaW5zZXJ0IGluc2V0IGluZm9ybWF0aW9uIGZv
ciB0aGUgUmVuZGVyRmxvd1RocmVhZC4KLSAgICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6Oml0ZXJh
dG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5k
KCk7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCk7
IGl0ZXIgIT0gbV9yZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyUmVn
aW9uKiByZWdpb24gPSAqaXRlcjsKICAgICAgICAgTGF5b3V0VW5pdCByZWdpb25Mb2dpY2FsV2lk
dGggPSByZWdpb24tPnBhZ2VMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdCA9IHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gTFRSID8gTGF5b3V0VW5pdCgpIDogbG9n
aWNhbFdpZHRoIC0gcmVnaW9uTG9naWNhbFdpZHRoOwpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQg
UmVuZGVyRmxvd1RocmVhZDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCwgTGF5b3V0
VW5pdCBsb2dpY2FsVG9wLCBMCiAgICAgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgPSAwOwogCiAg
ICAgY29uc3QgTGF5b3V0VW5pdCBtYXhGbG93U2l6ZSA9IFJlbmRlckZsb3dUaHJlYWQ6Om1heExv
Z2ljYWxIZWlnaHQoKTsKLSAgICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7
ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCk7IGl0
ZXIgIT0gbV9yZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyUmVnaW9u
KiByZWdpb24gPSAqaXRlcjsKICAgICAgICAgQVNTRVJUKCFyZWdpb24tPm5lZWRzTGF5b3V0KCkg
fHwgcmVnaW9uLT5pc1JlbmRlclJlZ2lvblNldCgpKTsKIApAQCAtNTE0LDcgKzUxNCw3IEBAIHZv
aWQgUmVuZGVyRmxvd1RocmVhZDo6cmVwYWludFJlY3RhbmdsZUluUmVnaW9ucyhjb25zdCBMYXlv
dXRSZWN0JiByZXBhaW50UmVjdCwKICAgICAvLyBMZXQgZWFjaCByZWdpb24gZmlndXJlIG91dCB0
aGUgcHJvcGVyIGVuY2xvc2luZyBmbG93IHRocmVhZC4KICAgICBDdXJyZW50UmVuZGVyRmxvd1Ro
cmVhZERpc2FibGVyIGRpc2FibGVyKCZ2aWV3KCkpOwogICAgIAotICAgIGZvciAoUmVuZGVyUmVn
aW9uTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBpdGVy
ICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBt
X3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikg
ewogICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVyOwogCiAgICAgICAgIHJlZ2lv
bi0+cmVwYWludEZsb3dUaHJlYWRDb250ZW50KHJlcGFpbnRSZWN0LCBpbW1lZGlhdGUpOwpAQCAt
NzA5LDcgKzcwOSw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6cmVtb3ZlUmVuZGVyQm94UmVn
aW9uSW5mbyhSZW5kZXJCb3gqIGJveCkKICAgICBSZW5kZXJSZWdpb24qIGVuZFJlZ2lvbjsKICAg
ICBnZXRSZWdpb25SYW5nZUZvckJveChib3gsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pOwogCi0g
ICAgZm9yIChSZW5kZXJSZWdpb25MaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZWdpb25MaXN0LmZp
bmQoc3RhcnRSZWdpb24pOyBpdGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7Cisg
ICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuZmluZChzdGFydFJlZ2lvbik7IGl0ZXIg
IT0gbV9yZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyUmVnaW9uKiBy
ZWdpb24gPSAqaXRlcjsKICAgICAgICAgcmVnaW9uLT5yZW1vdmVSZW5kZXJCb3hSZWdpb25JbmZv
KGJveCk7CiAgICAgICAgIGlmIChyZWdpb24gPT0gZW5kUmVnaW9uKQpAQCAtNzE4LDcgKzcxOCw3
IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6cmVtb3ZlUmVuZGVyQm94UmVnaW9uSW5mbyhSZW5k
ZXJCb3gqIGJveCkKIAogI2lmbmRlZiBOREVCVUcKICAgICAvLyBXZSBoYXZlIHRvIG1ha2Ugc3Vy
ZSB3ZSBkaWQgbm90IGxlYXZlIGFueSBSZW5kZXJCb3hSZWdpb25JbmZvIGF0dGFjaGVkLgotICAg
IGZvciAoUmVuZGVyUmVnaW9uTGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdp
bigpOyBpdGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRv
IGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7
ICsraXRlcikgewogICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVyOwogICAgICAg
ICBBU1NFUlQoIXJlZ2lvbi0+cmVuZGVyQm94UmVnaW9uSW5mbyhib3gpKTsKICAgICB9CkBAIC03
MzIsNyArNzMyLDcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpsb2dpY2FsV2lkdGhDaGFuZ2Vk
SW5SZWdpb25zRm9yQmxvY2soY29uc3QgUmVuZGVyQmxvY2sqIGIKICAgICBpZiAoIWhhc1ZhbGlk
UmVnaW9uSW5mbygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJSZWdpb25SYW5nZU1h
cDo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lvblJhbmdlTWFwLmZpbmQoYmxvY2spOworICAgIGF1dG8g
aXQgPSBtX3JlZ2lvblJhbmdlTWFwLmZpbmQoYmxvY2spOwogICAgIGlmIChpdCA9PSBtX3JlZ2lv
blJhbmdlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTc1Niw3ICs3NTYsNyBAQCB2
b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnNGb3JCbG9j
ayhjb25zdCBSZW5kZXJCbG9jayogYgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9y
IChSZW5kZXJSZWdpb25MaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZWdpb25MaXN0LmZpbmQoc3Rh
cnRSZWdpb24pOyBpdGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9y
IChhdXRvIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuZmluZChzdGFydFJlZ2lvbik7IGl0ZXIgIT0gbV9y
ZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24g
PSAqaXRlcjsKICAgICAgICAgQVNTRVJUKCFyZWdpb24tPm5lZWRzTGF5b3V0KCkgfHwgcmVnaW9u
LT5pc1JlbmRlclJlZ2lvblNldCgpKTsKIApAQCAtODIxLDcgKzgyMSw3IEBAIHZvaWQgUmVuZGVy
Rmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJPYmplY3RDdXN0b21TdHlsZShjb25zdCBSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKIHsKICAgICAvLyBDbGVhciB0aGUgc3R5bGVzIGZvciB0aGUgb2JqZWN0IGlu
IHRoZSByZWdpb25zLgogICAgIC8vIEZJWE1FOiBSZWdpb24gc3R5bGluZyBpcyBub3QgY29tcHV0
ZWQgb25seSBmb3IgdGhlIHJlZ2lvbiByYW5nZSBvZiB0aGUgb2JqZWN0IHNvIHRoaXMgaXMgd2h5
IHdlIG5lZWQgdG8gd2FsayB0aGUgd2hvbGUgY2hhaW4uCi0gICAgZm9yIChSZW5kZXJSZWdpb25M
aXN0OjppdGVyYXRvciBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCk7IGl0ZXIgIT0gbV9yZWdp
b25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVnaW9uTGlz
dC5iZWdpbigpOyBpdGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAg
IFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7CiAgICAgICAgIHJlZ2lvbi0+Y2xlYXJPYmpl
Y3RTdHlsZUluUmVnaW9uKG9iamVjdCk7CiAgICAgfQpAQCAtODM1LDcgKzgzNSw3IEBAIHZvaWQg
UmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJCb3hSZWdpb25JbmZvQW5kQ3VzdG9tU3R5bGUo
Y29uc3QgUmVuZGVyQm94KiBiCiAKICAgICBib29sIGluc2lkZU9sZFJlZ2lvblJhbmdlID0gZmFs
c2U7CiAgICAgYm9vbCBpbnNpZGVOZXdSZWdpb25SYW5nZSA9IGZhbHNlOwotICAgIGZvciAoUmVu
ZGVyUmVnaW9uTGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBpdGVy
ICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBt
X3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikg
ewogICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVyOwogCiAgICAgICAgIGlmIChv
bGRTdGFydFJlZ2lvbiA9PSByZWdpb24pCkBAIC04NjEsNyArODYxLDcgQEAgdm9pZCBSZW5kZXJG
bG93VGhyZWFkOjpzZXRSZWdpb25SYW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gqIGJveCwgUmVu
ZGVyUmVnaW9uKgogICAgIEFTU0VSVChoYXNSZWdpb25zKCkpOwogICAgIEFTU0VSVChzdGFydFJl
Z2lvbiAmJiBlbmRSZWdpb24pOwogCi0gICAgUmVuZGVyUmVnaW9uUmFuZ2VNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9yZWdpb25SYW5nZU1hcC5maW5kKGJveCk7CisgICAgYXV0byBpdCA9IG1fcmVnaW9u
UmFuZ2VNYXAuZmluZChib3gpOwogICAgIGlmIChpdCA9PSBtX3JlZ2lvblJhbmdlTWFwLmVuZCgp
KSB7CiAgICAgICAgIG1fcmVnaW9uUmFuZ2VNYXAuc2V0KGJveCwgUmVuZGVyUmVnaW9uUmFuZ2Uo
c3RhcnRSZWdpb24sIGVuZFJlZ2lvbikpOwogICAgICAgICByZXR1cm47CkBAIC04ODAsNyArODgw
LDcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpnZXRSZWdpb25SYW5nZUZvckJveChjb25zdCBS
ZW5kZXJCb3gqIGJveCwgUmVuZGVyUmVnaW9uKiYKIHsKICAgICBzdGFydFJlZ2lvbiA9IDA7CiAg
ICAgZW5kUmVnaW9uID0gMDsKLSAgICBSZW5kZXJSZWdpb25SYW5nZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3JlZ2lvblJhbmdlTWFwLmZpbmQoYm94KTsKKyAgICBhdXRvIGl0ID0gbV9yZWdp
b25SYW5nZU1hcC5maW5kKGJveCk7CiAgICAgaWYgKGl0ID09IG1fcmVnaW9uUmFuZ2VNYXAuZW5k
KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTAxLDcgKzkwMSw3IEBAIGJvb2wgUmVuZGVyRmxv
d1RocmVhZDo6cmVnaW9uSW5SYW5nZShjb25zdCBSZW5kZXJSZWdpb24qIHRhcmdldFJlZ2lvbiwg
Y29uc3QgUmVuCiB7CiAgICAgQVNTRVJUKHRhcmdldFJlZ2lvbik7CiAKLSAgICBmb3IgKFJlbmRl
clJlZ2lvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZWdpb25MaXN0LmZpbmQoY29uc3Rf
Y2FzdDxSZW5kZXJSZWdpb24qPihzdGFydFJlZ2lvbikpOyBpdCAhPSBtX3JlZ2lvbkxpc3QuZW5k
KCk7ICsraXQpIHsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX3JlZ2lvbkxpc3QuZmluZChjb25zdF9j
YXN0PFJlbmRlclJlZ2lvbio+KHN0YXJ0UmVnaW9uKSk7IGl0ICE9IG1fcmVnaW9uTGlzdC5lbmQo
KTsgKytpdCkgewogICAgICAgICBjb25zdCBSZW5kZXJSZWdpb24qIGN1cnJSZWdpb24gPSAqaXQ7
CiAgICAgICAgIGlmICh0YXJnZXRSZWdpb24gPT0gY3VyclJlZ2lvbikKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtOTE2LDcgKzkxNiw3IEBAIGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6cmVn
aW9uSW5SYW5nZShjb25zdCBSZW5kZXJSZWdpb24qIHRhcmdldFJlZ2lvbiwgY29uc3QgUmVuCiB2
b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmNoZWNrUmVnaW9uc1dpdGhTdHlsaW5nKCkKIHsKICAgICBi
b29sIGhhc1JlZ2lvbnNXaXRoU3R5bGluZyA9IGZhbHNlOwotICAgIGZvciAoUmVuZGVyUmVnaW9u
TGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9IG1fcmVn
aW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlZ2lvbkxp
c3QuYmVnaW4oKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgewogICAgICAg
ICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVyOwogICAgICAgICBpZiAocmVnaW9uLT5oYXND
dXN0b21SZWdpb25TdHlsZSgpKSB7CiAgICAgICAgICAgICBoYXNSZWdpb25zV2l0aFN0eWxpbmcg
PSB0cnVlOwpAQCAtOTU4LDcgKzk1OCw3IEBAIGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6b2JqZWN0
SW5GbG93UmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kCiAgICAg
aWYgKHJlZ2lvbiA9PSBsYXN0UmVnaW9uKCkpIHsKICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBk
b2VzIG5vdCBpbnRlcnNlY3QgYW55IG9mIHRoZSBlbmNsb3NpbmcgYm94IHJlZ2lvbnMKICAgICAg
ICAgLy8gdGhlbiB0aGUgb2JqZWN0IGlzIGluIGxhc3QgcmVnaW9uLgotICAgICAgICBmb3IgKFJl
bmRlclJlZ2lvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZWdpb25MaXN0LmZpbmQoZW5j
bG9zaW5nQm94U3RhcnRSZWdpb24pOyBpdCAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXQpIHsK
KyAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9yZWdpb25MaXN0LmZpbmQoZW5jbG9zaW5nQm94U3Rh
cnRSZWdpb24pOyBpdCAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAg
IGNvbnN0IFJlbmRlclJlZ2lvbiogY3VyclJlZ2lvbiA9ICppdDsKICAgICAgICAgICAgIGlmIChj
dXJyUmVnaW9uID09IHJlZ2lvbikKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTk3NSw3ICs5
NzUsNyBAQCBib29sIFJlbmRlckZsb3dUaHJlYWQ6Om9iamVjdEluRmxvd1JlZ2lvbihjb25zdCBS
ZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZAogYm9vbCBSZW5kZXJGbG93VGhyZWFkOjpp
c0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50Q29uc2lzdGVudCgpIGNvbnN0CiB7CiAgICAg
dW5zaWduZWQgYXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zID0gMDsKLSAgICBmb3IgKFJlbmRlclJl
Z2lvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRl
ciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0g
bV9yZWdpb25MaXN0LmJlZ2luKCk7IGl0ZXIgIT0gbV9yZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIp
IHsKICAgICAgICAgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb24gPSAqaXRlcjsKICAgICAgICAg
aWYgKHJlZ2lvbi0+aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgICAgIGF1dG9Mb2dp
Y2FsSGVpZ2h0UmVnaW9ucysrOwpAQCAtOTk0LDcgKzk5NCw3IEBAIHZvaWQgUmVuZGVyRmxvd1Ro
cmVhZDo6aW5pdGlhbGl6ZVJlZ2lvbnNDb21wdXRlZEF1dG9IZWlnaHQoUmVuZGVyUmVnaW9uKiBz
dGFydFJlCiAgICAgaWYgKCFoYXNBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVuZGVyUmVnaW9uTGlzdDo6aXRlcmF0b3IgcmVnaW9uSXRlciA9IHN0
YXJ0UmVnaW9uID8gbV9yZWdpb25MaXN0LmZpbmQoc3RhcnRSZWdpb24pIDogbV9yZWdpb25MaXN0
LmJlZ2luKCk7CisgICAgYXV0byByZWdpb25JdGVyID0gc3RhcnRSZWdpb24gPyBtX3JlZ2lvbkxp
c3QuZmluZChzdGFydFJlZ2lvbikgOiBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsKICAgICBmb3IgKDsg
cmVnaW9uSXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsrcmVnaW9uSXRlcikgewogICAgICAg
ICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICpyZWdpb25JdGVyOwogICAgICAgICBpZiAocmVnaW9u
LT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKQpAQCAtMTAwNiw3ICsxMDA2LDcgQEAgdm9pZCBSZW5k
ZXJGbG93VGhyZWFkOjptYXJrQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zRm9yTGF5b3V0KCkKIHsK
ICAgICBBU1NFUlQoaGFzQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCkpOwogCi0gICAgZm9yIChS
ZW5kZXJSZWdpb25MaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCk7IGl0
ZXIgIT0gbV9yZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKKyAgICBmb3IgKGF1dG8gaXRlciA9
IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVy
KSB7CiAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7CiAgICAgICAgIGlmICgh
cmVnaW9uLT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKQogICAgICAgICAgICAgY29udGludWU7CkBA
IC0xMDIyLDcgKzEwMjIsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6Om1hcmtSZWdpb25zRm9y
T3ZlcmZsb3dMYXlvdXRJZk5lZWRlZCgpCiAgICAgaWYgKCFoYXNSZWdpb25zKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGZvciAoUmVuZGVyUmVnaW9uTGlzdDo6aXRlcmF0b3IgaXRlciA9IG1f
cmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7
CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAhPSBtX3Jl
Z2lvbkxpc3QuZW5kKCk7ICsraXRlcikgewogICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9
ICppdGVyOwogICAgICAgICByZWdpb24tPnNldE5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlv
dXQoKTsKICAgICB9CkBAIC0xMDM2LDcgKzEwMzYsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6
OnVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFkUG9ydGlvblJlY3QoY29uc3QgUmVuZGVyUmVnaW9uKiBs
YQogICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBub3QgdG8gY2xlYXIgdGhlIGludGVydmFsIGFsbCB0
aGUgdGltZS4gVGhpcyBpbXBsaWVzIG1hbnVhbGx5IG1hbmFnaW5nIHRoZSB0cmVlIG5vZGVzIGxp
ZmVjeWNsZS4KICAgICBtX3JlZ2lvbkludGVydmFsVHJlZS5jbGVhcigpOwogICAgIG1fcmVnaW9u
SW50ZXJ2YWxUcmVlLmluaXRJZk5lZWRlZCgpOwotICAgIGZvciAoUmVuZGVyUmVnaW9uTGlzdDo6
aXRlcmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9IG1fcmVnaW9uTGlz
dC5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVn
aW4oKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgewogICAgICAgICBSZW5k
ZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVyOwogCiAgICAgICAgIC8vIElmIHdlIGZpbmQgYW4gZW1w
dHkgYXV0by1oZWlnaHQgcmVnaW9uLCBjbGVhciB0aGUgY29tcHV0ZWRBdXRvSGVpZ2h0IHZhbHVl
LgpAQCAtMTA2NSw3ICsxMDY1LDcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjp1cGRhdGVSZWdp
b25zRmxvd1RocmVhZFBvcnRpb25SZWN0KGNvbnN0IFJlbmRlclJlZ2lvbiogbGEKIC8vIEV2ZW4g
aWYgd2UgcmVxdWlyZSB0aGUgYnJlYWsgdG8gb2NjdXIgYXQgb2Zmc2V0QnJlYWtJbkZsb3dUaHJl
YWQsIGJlY2F1c2UgcmVnaW9ucyBtYXkgaGF2ZSBtaW4vbWF4LWhlaWdodCB2YWx1ZXMsCiAvLyBp
dCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBicmVhayB3aWxsIG9jY3VyIGF0IGEgZGlmZmVyZW50IG9m
ZnNldCB0aGFuIHRoZSBvcmlnaW5hbCBvbmUgcmVxdWlyZWQuCiAvLyBvZmZzZXRCcmVha0FkanVz
dG1lbnQgbWVhc3VyZXMgdGhlIGRpZmZlcmVudCBiZXR3ZWVuIHRoZSByZXF1ZXN0ZWQgYnJlYWsg
b2Zmc2V0IGFuZCB0aGUgY3VycmVudCBicmVhayBvZmZzZXQuCi1ib29sIFJlbmRlckZsb3dUaHJl
YWQ6OmFkZEZvcmNlZFJlZ2lvbkJyZWFrKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgTGF5b3V0
VW5pdCBvZmZzZXRCcmVha0luRmxvd1RocmVhZCwgUmVuZGVyT2JqZWN0KiBicmVha0NoaWxkLCBi
b29sIGlzQmVmb3JlLCBMYXlvdXRVbml0KiBvZmZzZXRCcmVha0FkanVzdG1lbnQpCitib29sIFJl
bmRlckZsb3dUaHJlYWQ6OmFkZEZvcmNlZFJlZ2lvbkJyZWFrKGNvbnN0IFJlbmRlckJsb2NrKiBi
bG9jaywgTGF5b3V0VW5pdCBvZmZzZXRCcmVha0luRmxvd1RocmVhZCwgUmVuZGVyQm94KiBicmVh
a0NoaWxkLCBib29sIGlzQmVmb3JlLCBMYXlvdXRVbml0KiBvZmZzZXRCcmVha0FkanVzdG1lbnQp
CiB7CiAgICAgLy8gV2UgdGFrZSBicmVha3MgaW50byBhY2NvdW50IGZvciBoZWlnaHQgY29tcHV0
YXRpb24gZm9yIGF1dG8gbG9naWNhbCBoZWlnaHQgcmVnaW9ucwogICAgIC8vIG9ubHkgaW4gdGhl
IGxheW91dCBwaGFzZSBpbiB3aGljaCB3ZSBsYXkgb3V0IHRoZSBmbG93cyB0aHJlYWRzIHVuY29u
c3RyYWluZWQKQEAgLTEwNzcsMTAgKzEwNzcsMTAgQEAgYm9vbCBSZW5kZXJGbG93VGhyZWFkOjph
ZGRGb3JjZWRSZWdpb25CcmVhayhjb25zdCBSZW5kZXJCbG9jayogYmxvY2ssIExheW91dFVuaXQK
ICAgICAvLyBCcmVha3MgY2FuIGNvbWUgYmVmb3JlIG9yIGFmdGVyIHNvbWUgb2JqZWN0cy4gV2Ug
bmVlZCB0byB0cmFjayB0aGVzZSBvYmplY3RzLCBzbyB0aGF0IGlmIHdlIGdldAogICAgIC8vIG11
bHRpcGxlIGJyZWFrcyBmb3IgdGhlIHNhbWUgb2JqZWN0IChmb3IgZXhhbXBsZSBiZWNhdXNlIG9m
IG11bHRpcGxlIGxheW91dHMgb24gdGhlIHNhbWUgb2JqZWN0KSwKICAgICAvLyB3ZSBuZWVkIHRv
IGludmFsaWRhdGUgZXZlcnkgb3RoZXIgcmVnaW9uIGFmdGVyIHRoZSBvbGQgb25lIGFuZCBzdGFy
dCBjb21wdXRpbmcgZnJvbSBmcmVzaC4KLSAgICBSZW5kZXJPYmplY3RUb1JlZ2lvbk1hcCYgbWFw
VG9Vc2UgPSBpc0JlZm9yZSA/IG1fYnJlYWtCZWZvcmVUb1JlZ2lvbk1hcCA6IG1fYnJlYWtBZnRl
clRvUmVnaW9uTWFwOwotICAgIFJlbmRlck9iamVjdFRvUmVnaW9uTWFwOjppdGVyYXRvciBpdGVy
ID0gbWFwVG9Vc2UuZmluZChicmVha0NoaWxkKTsKKyAgICBSZW5kZXJCb3hUb1JlZ2lvbk1hcCYg
bWFwVG9Vc2UgPSBpc0JlZm9yZSA/IG1fYnJlYWtCZWZvcmVUb1JlZ2lvbk1hcCA6IG1fYnJlYWtB
ZnRlclRvUmVnaW9uTWFwOworICAgIGF1dG8gaXRlciA9IG1hcFRvVXNlLmZpbmQoYnJlYWtDaGls
ZCk7CiAgICAgaWYgKGl0ZXIgIT0gbWFwVG9Vc2UuZW5kKCkpIHsKLSAgICAgICAgUmVuZGVyUmVn
aW9uTGlzdDo6aXRlcmF0b3IgcmVnaW9uSXRlciA9IG1fcmVnaW9uTGlzdC5maW5kKGl0ZXItPnZh
bHVlKTsKKyAgICAgICAgYXV0byByZWdpb25JdGVyID0gbV9yZWdpb25MaXN0LmZpbmQoaXRlci0+
dmFsdWUpOwogICAgICAgICBBU1NFUlQocmVnaW9uSXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCkp
OwogICAgICAgICBBU1NFUlQoKCpyZWdpb25JdGVyKS0+aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSk7
CiAgICAgICAgIGluaXRpYWxpemVSZWdpb25zQ29tcHV0ZWRBdXRvSGVpZ2h0KCpyZWdpb25JdGVy
KTsKQEAgLTExNTYsNyArMTE1Niw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Y29sbGVjdExh
eWVyRnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgY29uCiB7CiAgICAg
QVNTRVJUKCFtX3JlZ2lvbnNJbnZhbGlkYXRlZCk7CiAgICAgCi0gICAgZm9yIChSZW5kZXJSZWdp
b25MaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCk7IGl0ZXIg
IT0gbV9yZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1f
cmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7
CiAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7CiAgICAgICAgIHJlZ2lvbi0+
Y29sbGVjdExheWVyRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBsYXllckJvdW5kaW5nQm94LCBk
aXJ0eVJlY3QpOwogICAgIH0KQEAgLTExNjcsNyArMTE2Nyw3IEBAIExheW91dFJlY3QgUmVuZGVy
Rmxvd1RocmVhZDo6ZnJhZ21lbnRzQm91bmRpbmdCb3goY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJC
b3VuZGluCiAgICAgQVNTRVJUKCFtX3JlZ2lvbnNJbnZhbGlkYXRlZCk7CiAgICAgCiAgICAgTGF5
b3V0UmVjdCByZXN1bHQ7Ci0gICAgZm9yIChSZW5kZXJSZWdpb25MaXN0Ojpjb25zdF9pdGVyYXRv
ciBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCk7IGl0ZXIgIT0gbV9yZWdpb25MaXN0LmVuZCgp
OyArK2l0ZXIpIHsKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBp
dGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIFJlbmRlclJlZ2lv
biogcmVnaW9uID0gKml0ZXI7CiAgICAgICAgIExheWVyRnJhZ21lbnRzIGZyYWdtZW50czsKICAg
ICAgICAgcmVnaW9uLT5jb2xsZWN0TGF5ZXJGcmFnbWVudHMoZnJhZ21lbnRzLCBsYXllckJvdW5k
aW5nQm94LCBQYWludEluZm86OmluZmluaXRlUmVjdCgpKTsKQEAgLTEzNjMsNyArMTM2Myw3IEBA
IHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6YWRkUmVnaW9uc1Zpc3VhbEVmZmVjdE92ZXJmbG93KGNv
bnN0IFJlbmRlckJveCogYm94KQogICAgIFJlbmRlclJlZ2lvbiogZW5kUmVnaW9uID0gMDsKICAg
ICBnZXRSZWdpb25SYW5nZUZvckJveChib3gsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pOwogCi0g
ICAgZm9yIChSZW5kZXJSZWdpb25MaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZWdpb25MaXN0LmZp
bmQoc3RhcnRSZWdpb24pOyBpdGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7Cisg
ICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuZmluZChzdGFydFJlZ2lvbik7IGl0ZXIg
IT0gbV9yZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyUmVnaW9uKiBy
ZWdpb24gPSAqaXRlcjsKIAogICAgICAgICBMYXlvdXRSZWN0IGJvcmRlckJveCA9IGJveC0+Ym9y
ZGVyQm94UmVjdEluUmVnaW9uKHJlZ2lvbik7CkBAIC0xMzgyLDcgKzEzODIsNyBAQCB2b2lkIFJl
bmRlckZsb3dUaHJlYWQ6OmFkZFJlZ2lvbnNWaXN1YWxPdmVyZmxvd0Zyb21UaGVtZShjb25zdCBS
ZW5kZXJCbG9jayogYmxvYwogICAgIFJlbmRlclJlZ2lvbiogZW5kUmVnaW9uID0gMDsKICAgICBn
ZXRSZWdpb25SYW5nZUZvckJveChibG9jaywgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbik7CiAKLSAg
ICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuZmlu
ZChzdGFydFJlZ2lvbik7IGl0ZXIgIT0gbV9yZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKKyAg
ICBmb3IgKGF1dG8gaXRlciA9IG1fcmVnaW9uTGlzdC5maW5kKHN0YXJ0UmVnaW9uKTsgaXRlciAh
PSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgewogICAgICAgICBSZW5kZXJSZWdpb24qIHJl
Z2lvbiA9ICppdGVyOwogCiAgICAgICAgIExheW91dFJlY3QgYm9yZGVyQm94ID0gYmxvY2stPmJv
cmRlckJveFJlY3RJblJlZ2lvbihyZWdpb24pOwpAQCAtMTQwNyw3ICsxNDA3LDcgQEAgdm9pZCBS
ZW5kZXJGbG93VGhyZWFkOjphZGRSZWdpb25zT3ZlcmZsb3dGcm9tQ2hpbGQoY29uc3QgUmVuZGVy
Qm94KiBib3gsIGNvbnN0IFIKICAgICBSZW5kZXJSZWdpb24qIGNvbnRhaW5lckVuZFJlZ2lvbiA9
IDA7CiAgICAgZ2V0UmVnaW9uUmFuZ2VGb3JCb3goYm94LCBjb250YWluZXJTdGFydFJlZ2lvbiwg
Y29udGFpbmVyRW5kUmVnaW9uKTsKIAotICAgIGZvciAoUmVuZGVyUmVnaW9uTGlzdDo6aXRlcmF0
b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5maW5kKHN0YXJ0UmVnaW9uKTsgaXRlciAhPSBtX3JlZ2lv
bkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0
LmZpbmQoc3RhcnRSZWdpb24pOyBpdGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7
CiAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7CiAgICAgICAgIGlmICghcmVn
aW9uSW5SYW5nZShyZWdpb24sIGNvbnRhaW5lclN0YXJ0UmVnaW9uLCBjb250YWluZXJFbmRSZWdp
b24pKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xNDMzLDcgKzE0MzMsNyBAQCB2b2lkIFJl
bmRlckZsb3dUaHJlYWQ6OmFkZFJlZ2lvbnNMYXlvdXRPdmVyZmxvdyhjb25zdCBSZW5kZXJCb3gq
IGJveCwgY29uc3QgTGF5bwogICAgIFJlbmRlclJlZ2lvbiogZW5kUmVnaW9uID0gMDsKICAgICBn
ZXRSZWdpb25SYW5nZUZvckJveChib3gsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pOwogCi0gICAg
Zm9yIChSZW5kZXJSZWdpb25MaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZWdpb25MaXN0LmZpbmQo
c3RhcnRSZWdpb24pOyBpdGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7CisgICAg
Zm9yIChhdXRvIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuZmluZChzdGFydFJlZ2lvbik7IGl0ZXIgIT0g
bV9yZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdp
b24gPSAqaXRlcjsKICAgICAgICAgTGF5b3V0UmVjdCBsYXlvdXRPdmVyZmxvd0luUmVnaW9uID0g
cmVnaW9uLT5yZWN0Rmxvd1BvcnRpb25Gb3JCb3goYm94LCBsYXlvdXRPdmVyZmxvdyk7CiAKQEAg
LTE0NTAsNyArMTQ1MCw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZWdpb25zT3Zl
cmZsb3coY29uc3QgUmVuZGVyQm94KiBib3gpCiAgICAgUmVuZGVyUmVnaW9uKiBlbmRSZWdpb24g
PSAwOwogICAgIGdldFJlZ2lvblJhbmdlRm9yQm94KGJveCwgc3RhcnRSZWdpb24sIGVuZFJlZ2lv
bik7CiAKLSAgICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lv
bkxpc3QuZmluZChzdGFydFJlZ2lvbik7IGl0ZXIgIT0gbV9yZWdpb25MaXN0LmVuZCgpOyArK2l0
ZXIpIHsKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVnaW9uTGlzdC5maW5kKHN0YXJ0UmVnaW9u
KTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgewogICAgICAgICBSZW5kZXJS
ZWdpb24qIHJlZ2lvbiA9ICppdGVyOwogICAgICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJ
bmZvID0gcmVnaW9uLT5yZW5kZXJCb3hSZWdpb25JbmZvKGJveCk7CiAgICAgICAgIGlmIChib3hJ
bmZvICYmIGJveEluZm8tPm92ZXJmbG93KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsb3dUaHJlYWQuaAppbmRleCA0M2I3OTc0Li4yMWI0ZmFlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKQEAgLTE0OSw3ICsxNDksNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBtYXJrQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zRm9yTGF5b3V0KCk7CiAg
ICAgdm9pZCBtYXJrUmVnaW9uc0Zvck92ZXJmbG93TGF5b3V0SWZOZWVkZWQoKTsKIAotICAgIGJv
b2wgYWRkRm9yY2VkUmVnaW9uQnJlYWsoY29uc3QgUmVuZGVyQmxvY2sqLCBMYXlvdXRVbml0LCBS
ZW5kZXJPYmplY3QqIGJyZWFrQ2hpbGQsIGJvb2wgaXNCZWZvcmUsIExheW91dFVuaXQqIG9mZnNl
dEJyZWFrQWRqdXN0bWVudCA9IDApOworICAgIGJvb2wgYWRkRm9yY2VkUmVnaW9uQnJlYWsoY29u
c3QgUmVuZGVyQmxvY2sqLCBMYXlvdXRVbml0LCBSZW5kZXJCb3gqIGJyZWFrQ2hpbGQsIGJvb2wg
aXNCZWZvcmUsIExheW91dFVuaXQqIG9mZnNldEJyZWFrQWRqdXN0bWVudCA9IDApOwogICAgIHZv
aWQgYXBwbHlCcmVha0FmdGVyQ29udGVudChMYXlvdXRVbml0KTsKIAogICAgIGJvb2wgcGFnZUxv
Z2ljYWxTaXplQ2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUxvZ2ljYWxTaXplQ2hhbmdl
ZDsgfQpAQCAtMzI2LDE2ICszMjYsMTggQEAgcHJvdGVjdGVkOgogICAgIE93blB0cjxSZWdpb25U
b0xheWVyTGlzdE1hcD4gbV9yZWdpb25Ub0xheWVyTGlzdE1hcDsKICNlbmRpZgogCi0gICAgLy8g
QSBtYXBzIGZyb20gUmVuZGVyQm94CisgICAgLy8gTWFwIGEgYm94IHRvIHRoZSBsaXN0IG9mIHJl
Z2lvbnMgaW4gd2hpY2ggdGhlIGJveCBpcyByZW5kZXJlZC4KICAgICB0eXBlZGVmIEhhc2hNYXA8
Y29uc3QgUmVuZGVyQm94KiwgUmVuZGVyUmVnaW9uUmFuZ2U+IFJlbmRlclJlZ2lvblJhbmdlTWFw
OwogICAgIFJlbmRlclJlZ2lvblJhbmdlTWFwIG1fcmVnaW9uUmFuZ2VNYXA7CiAKLSAgICB0eXBl
ZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgUmVuZGVyUmVnaW9uKj4gUmVuZGVyT2JqZWN0VG9S
ZWdpb25NYXA7Ci0gICAgUmVuZGVyT2JqZWN0VG9SZWdpb25NYXAgbV9icmVha0JlZm9yZVRvUmVn
aW9uTWFwOwotICAgIFJlbmRlck9iamVjdFRvUmVnaW9uTWFwIG1fYnJlYWtBZnRlclRvUmVnaW9u
TWFwOworICAgIC8vIE1hcCBhIGJveCB3aXRoIGEgcmVnaW9uIGJyZWFrIHRvIHRoZSBhdXRvIGhl
aWdodCByZWdpb24gYWZmZWN0ZWQgYnkgdGhhdCBicmVhay4gCisgICAgdHlwZWRlZiBIYXNoTWFw
PFJlbmRlckJveCosIFJlbmRlclJlZ2lvbio+IFJlbmRlckJveFRvUmVnaW9uTWFwOworICAgIFJl
bmRlckJveFRvUmVnaW9uTWFwIG1fYnJlYWtCZWZvcmVUb1JlZ2lvbk1hcDsKKyAgICBSZW5kZXJC
b3hUb1JlZ2lvbk1hcCBtX2JyZWFrQWZ0ZXJUb1JlZ2lvbk1hcDsKIAogICAgIHR5cGVkZWYgTGlz
dEhhc2hTZXQ8Y29uc3QgUmVuZGVyT2JqZWN0Kj4gUmVuZGVyT2JqZWN0U3RhY2s7CiAgICAgUmVu
ZGVyT2JqZWN0U3RhY2sgbV9hY3RpdmVPYmplY3RzU3RhY2s7CisKICAgICB0eXBlZGVmIEhhc2hN
YXA8Y29uc3QgUmVuZGVyQm94KiwgTGF5b3V0VW5pdD4gUmVuZGVyQm94VG9PZmZzZXRNYXA7CiAg
ICAgUmVuZGVyQm94VG9PZmZzZXRNYXAgbV9ib3hlc1RvT2Zmc2V0TWFwOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCmluZGV4IDBj
ZDkyODUuLjhmOWNlYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJOYW1lZEZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJOYW1lZEZsb3dUaHJlYWQuY3BwCkBAIC0xMDAsOCArMTAwLDggQEAgdm9pZCBSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQ6OnVwZGF0ZVdyaXRpbmdNb2RlKCkKIAogUmVuZGVyT2JqZWN0KiBSZW5kZXJO
YW1lZEZsb3dUaHJlYWQ6Om5leHRSZW5kZXJlckZvck5vZGUoTm9kZSogbm9kZSkgY29uc3QKIHsK
LSAgICBGbG93VGhyZWFkQ2hpbGRMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZmxvd1RocmVh
ZENoaWxkTGlzdC0+YmVnaW4oKTsKLSAgICBGbG93VGhyZWFkQ2hpbGRMaXN0Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX2Zsb3dUaHJlYWRDaGlsZExpc3QtPmVuZCgpOworICAgIGF1dG8gaXQgPSBt
X2Zsb3dUaHJlYWRDaGlsZExpc3QtPmJlZ2luKCk7CisgICAgYXV0byBlbmQgPSBtX2Zsb3dUaHJl
YWRDaGlsZExpc3QtPmVuZCgpOwogCiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewogICAg
ICAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gKml0OwpAQCAtMTE5LDkgKzExOSw5IEBAIFJlbmRl
ck9iamVjdCogUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpwcmV2aW91c1JlbmRlcmVyRm9yTm9kZShO
b2RlKiBub2RlKSBjb25zdAogICAgIGlmIChtX2Zsb3dUaHJlYWRDaGlsZExpc3QtPmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBGbG93VGhyZWFkQ2hpbGRMaXN0Ojpjb25zdF9p
dGVyYXRvciBiZWdpbiA9IG1fZmxvd1RocmVhZENoaWxkTGlzdC0+YmVnaW4oKTsKLSAgICBGbG93
VGhyZWFkQ2hpbGRMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2Zsb3dUaHJlYWRDaGlsZExp
c3QtPmVuZCgpOwotICAgIEZsb3dUaHJlYWRDaGlsZExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
ZW5kOworICAgIGF1dG8gYmVnaW4gPSBtX2Zsb3dUaHJlYWRDaGlsZExpc3QtPmJlZ2luKCk7Cisg
ICAgYXV0byBlbmQgPSBtX2Zsb3dUaHJlYWRDaGlsZExpc3QtPmVuZCgpOworICAgIGF1dG8gaXQg
PSBlbmQ7CiAKICAgICBkbyB7CiAgICAgICAgIC0taXQ7CkBAIC0xNjYsOCArMTY2LDggQEAgYm9v
bCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmRlcGVuZHNPbihSZW5kZXJOYW1lZEZsb3dUaHJlYWQq
IG90aGVyUmVuZGVyRmxvd1RocmUKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBSZWN1
cnNpdmVseSB0cmF2ZXJzZSB0aGUgbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0LgotICAgIFJlbmRl
ck5hbWVkRmxvd1RocmVhZENvdW50ZWRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yID0gbV9s
YXlvdXRCZWZvcmVUaHJlYWRzU2V0LmJlZ2luKCk7Ci0gICAgUmVuZGVyTmFtZWRGbG93VGhyZWFk
Q291bnRlZFNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0
LmVuZCgpOworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQuYmVn
aW4oKTsKKyAgICBhdXRvIGVuZCA9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5lbmQoKTsKICAg
ICBmb3IgKDsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9yKSB7CiAgICAgICAgIGNvbnN0IFJl
bmRlck5hbWVkRmxvd1RocmVhZCogYmVmb3JlRmxvd1RocmVhZCA9ICgqaXRlcmF0b3IpLmtleTsK
ICAgICAgICAgaWYgKGJlZm9yZUZsb3dUaHJlYWQtPmRlcGVuZHNPbihvdGhlclJlbmRlckZsb3dU
aHJlYWQpKQpAQCAtMjM1LDcgKzIzNSw3IEBAIHN0YXRpYyB2b2lkIGFkZFJlZ2lvblRvTGlzdChS
ZW5kZXJSZWdpb25MaXN0JiByZWdpb25MaXN0LCBSZW5kZXJSZWdpb24qIHJlbmRlclJlCiAgICAg
ICAgIHJlZ2lvbkxpc3QuYWRkKHJlbmRlclJlZ2lvbik7CiAgICAgZWxzZSB7CiAgICAgICAgIC8v
IEZpbmQgdGhlIGZpcnN0IHJlZ2lvbiAiZ3JlYXRlciIgdGhhbiByZW5kZXJSZWdpb24uCi0gICAg
ICAgIFJlbmRlclJlZ2lvbkxpc3Q6Oml0ZXJhdG9yIGl0ID0gcmVnaW9uTGlzdC5iZWdpbigpOwor
ICAgICAgICBhdXRvIGl0ID0gcmVnaW9uTGlzdC5iZWdpbigpOwogICAgICAgICB3aGlsZSAoaXQg
IT0gcmVnaW9uTGlzdC5lbmQoKSAmJiAhY29tcGFyZVJlbmRlclJlZ2lvbnMocmVuZGVyUmVnaW9u
LCAqaXQpKQogICAgICAgICAgICAgKytpdDsKICAgICAgICAgcmVnaW9uTGlzdC5pbnNlcnRCZWZv
cmUoaXQsIHJlbmRlclJlZ2lvbik7CkBAIC0zMjksNyArMzI5LDcgQEAgdm9pZCBSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQ6OmNvbXB1dGVPdmVyc2V0U3RhdGVGb3JSZWdpb25zKExheW91dFVuaXQgb2xk
Q2xpZW50QWYKICAgICAgICAgaGVpZ2h0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHZp
c3VhbE92ZXJmbG93UmVjdCgpLm1heFkoKSA6IHZpc3VhbE92ZXJmbG93UmVjdCgpLm1heFgoKTsK
IAogICAgIFJlbmRlclJlZ2lvbiogbGFzdFJlZyA9IGxhc3RSZWdpb24oKTsKLSAgICBmb3IgKFJl
bmRlclJlZ2lvbkxpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRl
ciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0g
bV9yZWdpb25MaXN0LmJlZ2luKCk7IGl0ZXIgIT0gbV9yZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIp
IHsKICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSAqaXRlcjsKICAgICAgICAgTGF5b3V0
VW5pdCBmbG93TWluID0gaGVpZ2h0IC0gKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByZWdp
b24tPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLnkoKSA6IHJlZ2lvbi0+Zmxvd1RocmVhZFBvcnRp
b25SZWN0KCkueCgpKTsKICAgICAgICAgTGF5b3V0VW5pdCBmbG93TWF4ID0gaGVpZ2h0IC0gKGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByZWdpb24tPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgp
Lm1heFkoKSA6IHJlZ2lvbi0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkubWF4WCgpKTsKQEAgLTM2
Niw3ICszNjYsNyBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Y29tcHV0ZU92ZXJzZXRT
dGF0ZUZvclJlZ2lvbnMoTGF5b3V0VW5pdCBvbGRDbGllbnRBZgogdm9pZCBSZW5kZXJOYW1lZEZs
b3dUaHJlYWQ6OmNoZWNrSW52YWxpZFJlZ2lvbnMoKQogewogICAgIFZlY3RvcjxSZW5kZXJSZWdp
b24qPiBuZXdWYWxpZFJlZ2lvbnM7Ci0gICAgZm9yIChSZW5kZXJSZWdpb25MaXN0OjppdGVyYXRv
ciBpdGVyID0gbV9pbnZhbGlkUmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9IG1faW52YWxpZFJl
Z2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9pbnZhbGlk
UmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9IG1faW52YWxpZFJlZ2lvbkxpc3QuZW5kKCk7ICsr
aXRlcikgewogICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVyOwogICAgICAgICAv
LyBUaGUgb25seSByZWFzb24gYSByZWdpb24gd291bGQgYmUgaW52YWxpZCBpcyBiZWNhdXNlIGl0
IGhhcyBhIHBhcmVudCBmbG93IHRocmVhZC4KICAgICAgICAgQVNTRVJUKCFyZWdpb24tPmlzVmFs
aWQoKSAmJiByZWdpb24tPnBhcmVudE5hbWVkRmxvd1RocmVhZCgpKTsKQEAgLTM3Niw3ICszNzYs
NyBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Y2hlY2tJbnZhbGlkUmVnaW9ucygpCiAg
ICAgICAgIG5ld1ZhbGlkUmVnaW9ucy5hcHBlbmQocmVnaW9uKTsKICAgICB9CiAKLSAgICBmb3Ig
KFZlY3RvcjxSZW5kZXJSZWdpb24qPjo6aXRlcmF0b3IgaXRlciA9IG5ld1ZhbGlkUmVnaW9ucy5i
ZWdpbigpOyBpdGVyICE9IG5ld1ZhbGlkUmVnaW9ucy5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9y
IChhdXRvIGl0ZXIgPSBuZXdWYWxpZFJlZ2lvbnMuYmVnaW4oKTsgaXRlciAhPSBuZXdWYWxpZFJl
Z2lvbnMuZW5kKCk7ICsraXRlcikgewogICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICpp
dGVyOwogICAgICAgICBtX2ludmFsaWRSZWdpb25MaXN0LnJlbW92ZShyZWdpb24pOwogICAgICAg
ICByZWdpb24tPnBhcmVudE5hbWVkRmxvd1RocmVhZCgpLT5tX29ic2VydmVyVGhyZWFkc1NldC5y
ZW1vdmUodGhpcyk7CkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJl
YWQ6OnJlbW92ZURlcGVuZGVuY3lPbkZsb3dUaHJlYWQoUmVuZGVyTmFtZWRGbG93VGhyZWFkKgog
CiB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cHVzaERlcGVuZGVuY2llcyhSZW5kZXJOYW1l
ZEZsb3dUaHJlYWRMaXN0JiBsaXN0KQogewotICAgIGZvciAoUmVuZGVyTmFtZWRGbG93VGhyZWFk
Q291bnRlZFNldDo6aXRlcmF0b3IgaXRlciA9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5iZWdp
bigpOyBpdGVyICE9IG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5lbmQoKTsgKytpdGVyKSB7Cisg
ICAgZm9yIChhdXRvIGl0ZXIgPSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQuYmVnaW4oKTsgaXRl
ciAhPSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQuZW5kKCk7ICsraXRlcikgewogICAgICAgICBS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSAoKml0ZXIpLmtleTsKICAgICAgICAg
aWYgKGxpc3QuY29udGFpbnMoZmxvd1RocmVhZCkpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKaW5kZXggZjI2YWVlZi4uYjk3
ZjI1M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCkBAIC01
MTMsNyArNTEzLDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OnNldFJlZ2lvbk9iamVjdHNSZWdpb25T
dHlsZSgpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBJZiB0aGUgb2JqZWN0
IGhhcyBzdHlsZSBpbiByZWdpb24sIHVzZSB0aGF0IGluc3RlYWQgb2YgY29tcHV0aW5nIGEgbmV3
IG9uZS4KLSAgICAgICAgUmVuZGVyT2JqZWN0UmVnaW9uU3R5bGVNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9yZW5kZXJPYmplY3RSZWdpb25TdHlsZS5maW5kKG9iamVjdCk7CisgICAgICAgIGF1dG8gaXQg
PSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmZpbmQob2JqZWN0KTsKICAgICAgICAgUmVmUHRy
PFJlbmRlclN0eWxlPiBvYmplY3RTdHlsZUluUmVnaW9uOwogICAgICAgICBib29sIG9iamVjdFJl
Z2lvblN0eWxlQ2FjaGVkID0gZmFsc2U7CiAgICAgICAgIGlmIChpdCAhPSBtX3JlbmRlck9iamVj
dFJlZ2lvblN0eWxlLmVuZCgpKSB7CkBAIC01MzUsNyArNTM1LDcgQEAgdm9pZCBSZW5kZXJSZWdp
b246OnJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2luYWxTdHlsZSgpCiAgICAgICAgIHJldHVybjsK
IAogICAgIFJlbmRlck9iamVjdFJlZ2lvblN0eWxlTWFwIHRlbXA7Ci0gICAgZm9yIChSZW5kZXJP
YmplY3RSZWdpb25TdHlsZU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcmVuZGVyT2JqZWN0UmVnaW9u
U3R5bGUuYmVnaW4oKSwgZW5kID0gbV9yZW5kZXJPYmplY3RSZWdpb25TdHlsZS5lbmQoKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9yZW5kZXJPYmplY3RS
ZWdpb25TdHlsZS5iZWdpbigpLCBlbmQgPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmVuZCgp
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0g
Y29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihpdGVyLT5rZXkpOwogICAgICAgICBSZWZQdHI8UmVu
ZGVyU3R5bGU+IG9iamVjdFJlZ2lvblN0eWxlID0gJm9iamVjdC0+c3R5bGUoKTsKICAgICAgICAg
UmVmUHRyPFJlbmRlclN0eWxlPiBvYmplY3RPcmlnaW5hbFN0eWxlID0gaXRlci0+dmFsdWUuc3R5
bGU7CkBAIC01OTIsNyArNTkyLDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVDaGlsZHJl
blN0eWxlSW5SZWdpb24oY29uc3QgUmVuZGVyRWxlbWVudCogb2JqZWN0KQogewogICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IG9iamVjdC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogCi0gICAgICAgIFJlbmRlck9iamVjdFJlZ2lvblN0
eWxlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuZmluZChjaGls
ZCk7CisgICAgICAgIGF1dG8gaXQgPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmZpbmQoY2hp
bGQpOwogCiAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY2hpbGRTdHlsZUluUmVnaW9uOwog
ICAgICAgICBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkID0gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215891</attachid>
            <date>2013-11-03 23:56:47 -0800</date>
            <delta_ts>2013-11-04 00:26:09 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-123699-20131104095645.patch</filename>
            <type>text/plain</type>
            <size>43479</size>
            <attacher name="Mihnea Ovidenie">mihnea</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU4NTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjBmOTE1NTdjNTExYTEz
YzUxNjI1YjgwMWE4ODhiNzhkZjhlOTUxZi4uN2JkMzQwZDdiOWI1NzY1MjJmYmQ0OGFjZGE4NWVi
MTYxODk3OWU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDEzLTExLTAzICBNaWhu
ZWEgT3ZpZGVuaWUgIDxtaWhuZWFAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1NSZWdpb25zXSBV
c2UgYXV0byBrZXl3b3JkIHRvIGNsZWFuLXVwIGZvciBsb29wcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjk5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgQW5kZXJzIENhcmxzc29uLgorCisgICAgICAgIFN0YXJ0IHVzaW5nIGF1dG8ga2V5d29yZCBm
b3IgbG9vcHMuCisgICAgICAgIEFsc28sIHNpbmNlIHJlZ2lvbiBicmVha3MgKGZvcmNlZCBicmVh
a3MpIGNhbiBiZSBhZGRlZCBvbmx5IG9uIGJveGVzLAorICAgICAgICBpIGNoYW5nZWQgUmVuZGVy
Rmxvd1RocmVhZDo6YWRkRm9yY2VkUmVnaW9uQnJlYWsgdG8gdXNlIGEgUmVuZGVyQm94KiBpbnN0
ZWFkIG9mIFJlbmRlck9iamVjdCouCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxp
dHksIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIGRvbS9XZWJLaXROYW1lZEZsb3cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViS2l0TmFtZWRGbG93OjpmaXJzdEVtcHR5UmVnaW9uSW5kZXgp
OgorICAgICAgICAqIHJlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGbG93VGhyZWFkQ29udHJvbGxlcjo6ZW5zdXJlUmVuZGVyRmxvd1RocmVhZFdp
dGhOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb3dUaHJlYWRDb250cm9sbGVyOjpzdHlsZURp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpGbG93VGhyZWFkQ29udHJvbGxlcjo6bGF5b3V0
UmVuZGVyTmFtZWRGbG93VGhyZWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpGbG93VGhyZWFkQ29u
dHJvbGxlcjo6dXBkYXRlRmxvd1RocmVhZHNDaGFpbklmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZsb3dUaHJlYWRDb250cm9sbGVyOjp1cGRhdGVGbG93VGhyZWFkc05lZWRpbmdMYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6Rmxvd1RocmVhZENvbnRyb2xsZXI6OnVwZGF0ZUZsb3dU
aHJlYWRzTmVlZGluZ1R3b1N0ZXBMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6Rmxvd1RocmVh
ZENvbnRyb2xsZXI6OnJlc2V0Rmxvd1RocmVhZHNXaXRoQXV0b0hlaWdodFJlZ2lvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Rmxvd1RocmVhZENvbnRyb2xsZXI6OnVwZGF0ZUZsb3dUaHJlYWRzSW50
b0NvbnN0cmFpbmVkUGhhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Rmxvd1RocmVhZENvbnRyb2xs
ZXI6OnVwZGF0ZUZsb3dUaHJlYWRzSW50b092ZXJmbG93UGhhc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Rmxvd1RocmVhZENvbnRyb2xsZXI6OnVwZGF0ZUZsb3dUaHJlYWRzSW50b01lYXN1cmVDb250
ZW50UGhhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Rmxvd1RocmVhZENvbnRyb2xsZXI6OnVwZGF0
ZUZsb3dUaHJlYWRzSW50b0ZpbmFsUGhhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Rmxvd1RocmVh
ZENvbnRyb2xsZXI6OnVwZGF0ZVJlbmRlckZsb3dUaHJlYWRMYXllcnNJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGbG93VGhyZWFkQ29udHJvbGxlcjo6Y29sbGVjdEZpeGVkUG9zaXRpb25l
ZExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpGbG93VGhyZWFkQ29udHJvbGxlcjo6aXNBdXRv
TG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudENvbnNpc3RlbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJGbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJl
YWQ6OnZhbGlkYXRlUmVnaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFk
OjpoYXNDb21wb3NpdGluZ1JlZ2lvbkRlc2NlbmRhbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRmxvd1RocmVhZDo6Z2V0TGF5ZXJMaXN0Rm9yUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZUxheWVyVG9SZWdpb25NYXBwaW5ncyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjp1cGRhdGVMb2dpY2FsV2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6cmVwYWludFJlY3RhbmdsZUluUmVnaW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpyZW1vdmVSZW5kZXJCb3hS
ZWdpb25JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmxvZ2ljYWxX
aWR0aENoYW5nZWRJblJlZ2lvbnNGb3JCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
bG93VGhyZWFkOjpjbGVhclJlbmRlck9iamVjdEN1c3RvbVN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNsZWFyUmVuZGVyQm94UmVnaW9uSW5mb0FuZEN1c3RvbVN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnNldFJlZ2lvblJhbmdl
Rm9yQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJh
bmdlRm9yQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnJlZ2lvbklu
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y2hlY2tSZWdpb25z
V2l0aFN0eWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6b2JqZWN0
SW5GbG93UmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmlzQXV0
b0xvZ2ljYWxIZWlnaHRSZWdpb25zQ291bnRDb25zaXN0ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZsb3dUaHJlYWQ6OmluaXRpYWxpemVSZWdpb25zQ29tcHV0ZWRBdXRvSGVpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6Om1hcmtBdXRvTG9naWNhbEhlaWdo
dFJlZ2lvbnNGb3JMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6
bWFya1JlZ2lvbnNGb3JPdmVyZmxvd0xheW91dElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFkUG9ydGlvblJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRkRm9yY2VkUmVnaW9uQnJlYWsp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6Y29sbGVjdExheWVyRnJhZ21l
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmZyYWdtZW50c0JvdW5k
aW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmFkZFJlZ2lvbnNW
aXN1YWxFZmZlY3RPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFk
OjphZGRSZWdpb25zVmlzdWFsT3ZlcmZsb3dGcm9tVGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRmxvd1RocmVhZDo6YWRkUmVnaW9uc092ZXJmbG93RnJvbUNoaWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmFkZFJlZ2lvbnNMYXlvdXRPdmVyZmxvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpjbGVhclJlZ2lvbnNPdmVyZmxvdyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck5hbWVkRmxvd1RocmVhZDo6bmV4dFJlbmRlcmVyRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnByZXZpb3VzUmVuZGVyZXJGb3JOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVhZDo6ZGVwZW5kc09uKToKKyAgICAgICAg
KFdlYkNvcmU6OmFkZFJlZ2lvblRvTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQ6OmNvbXB1dGVPdmVyc2V0U3RhdGVGb3JSZWdpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVhZDo6Y2hlY2tJbnZhbGlkUmVnaW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnB1c2hEZXBlbmRlbmNpZXMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUmVnaW9uOjpzZXRSZWdpb25PYmplY3RzUmVnaW9uU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmVnaW9uOjpyZXN0b3JlUmVnaW9uT2JqZWN0c09yaWdpbmFsU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpjb21wdXRlQ2hpbGRyZW5TdHlsZUluUmVn
aW9uKToKKwogMjAxMy0xMS0wMyAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVuZGVyVGV4dEZyYWdtZW50OiBUaWdodGVuIGZpcnN0LWxldHRlciBsb2dpYy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9XZWJLaXROYW1lZEZsb3cuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL1dlYktpdE5hbWVkRmxvdy5jcHAKaW5kZXggMjllOGFlNmU4M2FhOGZl
YWE3YzJhMjgwZjU5YzhmYmIwYzE3MWMxMy4uMTQxZDZmMGZjOGE1NzgyMTJlYTQyMzg1ZmVjNTVh
ZDM2MGNhNjk5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE5hbWVkRmxv
dy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1dlYktpdE5hbWVkRmxvdy5jcHAKQEAgLTEw
MSw3ICsxMDEsNyBAQCBpbnQgV2ViS2l0TmFtZWRGbG93OjpmaXJzdEVtcHR5UmVnaW9uSW5kZXgo
KSBjb25zdAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpbnQgY291bnROb25Qc2V1ZG9SZWdp
b25zID0gLTE7Ci0gICAgUmVuZGVyUmVnaW9uTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHJl
Z2lvbkxpc3QuYmVnaW4oKTsKKyAgICBhdXRvIGl0ZXIgPSByZWdpb25MaXN0LmJlZ2luKCk7CiAg
ICAgZm9yIChpbnQgaW5kZXggPSAwOyBpdGVyICE9IHJlZ2lvbkxpc3QuZW5kKCk7ICsraW5kZXgs
ICsraXRlcikgewogICAgICAgICAvLyBGSVhNRTogUHNldWRvLWVsZW1lbnRzIGFyZSBub3QgaW5j
bHVkZWQgaW4gdGhlIGxpc3QuCiAgICAgICAgIC8vIFRoZXkgd2lsbCBiZSBpbmNsdWRlZCB3aGVu
IHdlIHdpbGwgcHJvcGVybHkgc3VwcG9ydCB0aGUgUmVnaW9uIGludGVyZmFjZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAKaW5kZXggZTgx
MDFhZWM0OWQwNDM1ZGZkZjdjOTYwYzMyZGY3NDQyYzVkMWE4Yy4uNzU4ZWMyZGY4MjgzMDZhZDg2
YmY1YmQzMTQzMzhjYTAxOTRhNjNiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCkBAIC02Myw3ICs2Myw3IEBAIFJlbmRlck5hbWVk
Rmxvd1RocmVhZCYgRmxvd1RocmVhZENvbnRyb2xsZXI6OmVuc3VyZVJlbmRlckZsb3dUaHJlYWRX
aXRoTmFtZShjb25zCiAgICAgaWYgKCFtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QpCiAgICAg
ICAgIG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdCA9IGFkb3B0UHRyKG5ldyBSZW5kZXJOYW1l
ZEZsb3dUaHJlYWRMaXN0KCkpOwogICAgIGVsc2UgewotICAgICAgICBmb3IgKFJlbmRlck5hbWVk
Rmxvd1RocmVhZExpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExp
c3QtPmJlZ2luKCk7IGl0ZXIgIT0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5lbmQoKTsg
KytpdGVyKSB7CisgICAgICAgIGZvciAoYXV0byBpdGVyID0gbV9yZW5kZXJOYW1lZEZsb3dUaHJl
YWRMaXN0LT5iZWdpbigpLCBlbmQgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPmVuZCgp
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgICAgICBSZW5kZXJOYW1lZEZsb3dUaHJl
YWQqIGZsb3dSZW5kZXJlciA9ICppdGVyOwogICAgICAgICAgICAgaWYgKGZsb3dSZW5kZXJlci0+
Zmxvd1RocmVhZE5hbWUoKSA9PSBuYW1lKQogICAgICAgICAgICAgICAgIHJldHVybiAqZmxvd1Jl
bmRlcmVyOwpAQCAtOTAsNyArOTAsNyBAQCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQmIEZsb3dUaHJl
YWRDb250cm9sbGVyOjplbnN1cmVSZW5kZXJGbG93VGhyZWFkV2l0aE5hbWUoY29ucwogdm9pZCBG
bG93VGhyZWFkQ29udHJvbGxlcjo6c3R5bGVEaWRDaGFuZ2UoKQogewogICAgIFJlbmRlclN0eWxl
JiB2aWV3U3R5bGUgPSBtX3ZpZXctPnN0eWxlKCk7Ci0gICAgZm9yIChSZW5kZXJOYW1lZEZsb3dU
aHJlYWRMaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5i
ZWdpbigpOyBpdGVyICE9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+ZW5kKCk7ICsraXRl
cikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5i
ZWdpbigpLCBlbmQgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPmVuZCgpOyBpdGVyICE9
IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1JlbmRl
cmVyID0gKml0ZXI7CiAgICAgICAgIGZsb3dSZW5kZXJlci0+c2V0U3R5bGUoUmVuZGVyRmxvd1Ro
cmVhZDo6Y3JlYXRlRmxvd1RocmVhZFN0eWxlKCZ2aWV3U3R5bGUpKTsKICAgICB9CkBAIC0xMDAs
NyArMTAwLDcgQEAgdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6bGF5b3V0UmVuZGVyTmFtZWRG
bG93VGhyZWFkcygpCiB7CiAgICAgdXBkYXRlRmxvd1RocmVhZHNDaGFpbklmTmVjZXNzYXJ5KCk7
CiAKLSAgICBmb3IgKFJlbmRlck5hbWVkRmxvd1RocmVhZExpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBt
X3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPmJlZ2luKCk7IGl0ZXIgIT0gbV9yZW5kZXJOYW1l
ZEZsb3dUaHJlYWRMaXN0LT5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBt
X3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPmJlZ2luKCksIGVuZCA9IG1fcmVuZGVyTmFtZWRG
bG93VGhyZWFkTGlzdC0+ZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgUmVu
ZGVyTmFtZWRGbG93VGhyZWFkKiBmbG93UmVuZGVyZXIgPSAqaXRlcjsKICAgICAgICAgZmxvd1Jl
bmRlcmVyLT5sYXlvdXRJZk5lZWRlZCgpOwogICAgIH0KQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lk
IEZsb3dUaHJlYWRDb250cm9sbGVyOjp1cGRhdGVGbG93VGhyZWFkc0NoYWluSWZOZWNlc3Nhcnko
KQogCiAgICAgLy8gUmVtb3ZlIHRoZSBsZWZ0LW92ZXIgZmxvdyB0aHJlYWRzLgogICAgIFJlbmRl
ck5hbWVkRmxvd1RocmVhZExpc3QgdG9SZW1vdmVMaXN0OwotICAgIGZvciAoUmVuZGVyTmFtZWRG
bG93VGhyZWFkTGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlz
dC0+YmVnaW4oKTsgaXRlciAhPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPmVuZCgpOyAr
K2l0ZXIpIHsKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlz
dC0+YmVnaW4oKSwgZW5kID0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5lbmQoKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGZsb3dS
ZW5kZXJlciA9ICppdGVyOwogICAgICAgICBpZiAoZmxvd1JlbmRlcmVyLT5pc01hcmtlZEZvckRl
c3RydWN0aW9uKCkpCiAgICAgICAgICAgICB0b1JlbW92ZUxpc3QuYWRkKGZsb3dSZW5kZXJlcik7
CkBAIC0xNDAsNyArMTQwLDcgQEAgdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6dXBkYXRlRmxv
d1RocmVhZHNDaGFpbklmTmVjZXNzYXJ5KCkKICAgICBpZiAodG9SZW1vdmVMaXN0LnNpemUoKSA+
IDApCiAgICAgICAgIHNldElzUmVuZGVyTmFtZWRGbG93VGhyZWFkT3JkZXJEaXJ0eSh0cnVlKTsK
IAotICAgIGZvciAoUmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdDo6aXRlcmF0b3IgaXRlciA9IHRv
UmVtb3ZlTGlzdC5iZWdpbigpOyBpdGVyICE9IHRvUmVtb3ZlTGlzdC5lbmQoKTsgKytpdGVyKSB7
CisgICAgZm9yIChhdXRvIGl0ZXIgPSB0b1JlbW92ZUxpc3QuYmVnaW4oKSwgZW5kID0gdG9SZW1v
dmVMaXN0LmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIFJlbmRlck5hbWVk
Rmxvd1RocmVhZCogZmxvd1JlbmRlcmVyID0gKml0ZXI7CiAgICAgICAgIG1fcmVuZGVyTmFtZWRG
bG93VGhyZWFkTGlzdC0+cmVtb3ZlKGZsb3dSZW5kZXJlcik7CiAgICAgICAgIGZsb3dSZW5kZXJl
ci0+ZGVzdHJveSgpOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgRmxvd1RocmVhZENvbnRyb2xs
ZXI6OnVwZGF0ZUZsb3dUaHJlYWRzQ2hhaW5JZk5lY2Vzc2FyeSgpCiAgICAgaWYgKGlzUmVuZGVy
TmFtZWRGbG93VGhyZWFkT3JkZXJEaXJ0eSgpKSB7CiAgICAgICAgIC8vIEFycmFuZ2UgdGhlIHRo
cmVhZCBsaXN0IGFjY29yZGluZyB0byBkZXBlbmRlbmNpZXMuCiAgICAgICAgIFJlbmRlck5hbWVk
Rmxvd1RocmVhZExpc3Qgc29ydGVkTGlzdDsKLSAgICAgICAgZm9yIChSZW5kZXJOYW1lZEZsb3dU
aHJlYWRMaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5i
ZWdpbigpOyBpdGVyICE9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+ZW5kKCk7ICsraXRl
cikgeworICAgICAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlz
dC0+YmVnaW4oKSwgZW5kID0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5lbmQoKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBm
bG93UmVuZGVyZXIgPSAqaXRlcjsKICAgICAgICAgICAgIGlmIChzb3J0ZWRMaXN0LmNvbnRhaW5z
KGZsb3dSZW5kZXJlcikpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xNjUsNyArMTY1
LDcgQEAgYm9vbCBGbG93VGhyZWFkQ29udHJvbGxlcjo6dXBkYXRlRmxvd1RocmVhZHNOZWVkaW5n
TGF5b3V0KCkKIHsKICAgICBib29sIG5lZWRzVHdvUGFzc0xheW91dCA9IGZhbHNlOwogCi0gICAg
Zm9yIChSZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZW5kZXJO
YW1lZEZsb3dUaHJlYWRMaXN0LT5iZWdpbigpOyBpdGVyICE9IG1fcmVuZGVyTmFtZWRGbG93VGhy
ZWFkTGlzdC0+ZW5kKCk7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9yZW5kZXJO
YW1lZEZsb3dUaHJlYWRMaXN0LT5iZWdpbigpLCBlbmQgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVh
ZExpc3QtPmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIFJlbmRlck5hbWVk
Rmxvd1RocmVhZCogZmxvd1JlbmRlcmVyID0gKml0ZXI7CiAgICAgICAgIEFTU0VSVCghZmxvd1Jl
bmRlcmVyLT5uZWVkc1R3b1BoYXNlc0xheW91dCgpKTsKICAgICAgICAgQVNTRVJUKGZsb3dSZW5k
ZXJlci0+aW5NZWFzdXJlQ29udGVudExheW91dFBoYXNlKCkpOwpAQCAtMTgzLDcgKzE4Myw3IEBA
IGJvb2wgRmxvd1RocmVhZENvbnRyb2xsZXI6OnVwZGF0ZUZsb3dUaHJlYWRzTmVlZGluZ1R3b1N0
ZXBMYXlvdXQoKQogewogICAgIGJvb2wgbmVlZHNUd29QYXNzTGF5b3V0ID0gZmFsc2U7CiAKLSAg
ICBmb3IgKFJlbmRlck5hbWVkRmxvd1RocmVhZExpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlbmRl
ck5hbWVkRmxvd1RocmVhZExpc3QtPmJlZ2luKCk7IGl0ZXIgIT0gbV9yZW5kZXJOYW1lZEZsb3dU
aHJlYWRMaXN0LT5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlbmRl
ck5hbWVkRmxvd1RocmVhZExpc3QtPmJlZ2luKCksIGVuZCA9IG1fcmVuZGVyTmFtZWRGbG93VGhy
ZWFkTGlzdC0+ZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyTmFt
ZWRGbG93VGhyZWFkKiBmbG93UmVuZGVyZXIgPSAqaXRlcjsKICAgICAgICAgaWYgKGZsb3dSZW5k
ZXJlci0+bmVlZHNUd29QaGFzZXNMYXlvdXQoKSkgewogICAgICAgICAgICAgbmVlZHNUd29QYXNz
TGF5b3V0ID0gdHJ1ZTsKQEAgLTE5OSw3ICsxOTksNyBAQCBib29sIEZsb3dUaHJlYWRDb250cm9s
bGVyOjp1cGRhdGVGbG93VGhyZWFkc05lZWRpbmdUd29TdGVwTGF5b3V0KCkKIAogdm9pZCBGbG93
VGhyZWFkQ29udHJvbGxlcjo6cmVzZXRGbG93VGhyZWFkc1dpdGhBdXRvSGVpZ2h0UmVnaW9ucygp
CiB7Ci0gICAgZm9yIChSZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0OjppdGVyYXRvciBpdGVyID0g
bV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5iZWdpbigpOyBpdGVyICE9IG1fcmVuZGVyTmFt
ZWRGbG93VGhyZWFkTGlzdC0+ZW5kKCk7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0g
bV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5iZWdpbigpLCBlbmQgPSBtX3JlbmRlck5hbWVk
Rmxvd1RocmVhZExpc3QtPmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIFJl
bmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1JlbmRlcmVyID0gKml0ZXI7CiAgICAgICAgIGlmIChm
bG93UmVuZGVyZXItPmhhc0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucygpKSB7CiAgICAgICAgICAg
ICBmbG93UmVuZGVyZXItPm1hcmtBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNGb3JMYXlvdXQoKTsK
QEAgLTIxMiw3ICsyMTIsNyBAQCB2b2lkIEZsb3dUaHJlYWRDb250cm9sbGVyOjp1cGRhdGVGbG93
VGhyZWFkc0ludG9Db25zdHJhaW5lZFBoYXNlKCkKIHsKICAgICAvLyBXYWxrIHRoZSBmbG93IGNo
YWluIGluIHJldmVyc2Ugb3JkZXIgdG8gdXBkYXRlIHRoZSBhdXRvLWhlaWdodCByZWdpb25zIGFu
ZCBjb21wdXRlIGNvcnJlY3Qgc2l6ZXMgZm9yIHRoZSBjb250YWluaW5nIHJlZ2lvbnMuIE9ubHkg
YWZ0ZXIgdGhpcyB3ZSBjYW4KICAgICAvLyBzZXQgdGhlIGZsb3cgaW4gdGhlIGNvbnN0cmFpbmVk
IGxheW91dCBwaGFzZS4KLSAgICBmb3IgKFJlbmRlck5hbWVkRmxvd1RocmVhZExpc3Q6OnJldmVy
c2VfaXRlcmF0b3IgaXRlciA9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+cmJlZ2luKCk7
IGl0ZXIgIT0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5yZW5kKCk7ICsraXRlcikgewor
ICAgIGZvciAoYXV0byBpdGVyID0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5yYmVnaW4o
KSwgZW5kID0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5yZW5kKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBmbG93UmVuZGVyZXIg
PSAqaXRlcjsKICAgICAgICAgQVNTRVJUKCFmbG93UmVuZGVyZXItPmhhc1JlZ2lvbnMoKSB8fCBm
bG93UmVuZGVyZXItPmhhc1ZhbGlkUmVnaW9uSW5mbygpKTsKICAgICAgICAgZmxvd1JlbmRlcmVy
LT5sYXlvdXRJZk5lZWRlZCgpOwpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgRmxvd1RocmVhZENv
bnRyb2xsZXI6OnVwZGF0ZUZsb3dUaHJlYWRzSW50b0NvbnN0cmFpbmVkUGhhc2UoKQogCiB2b2lk
IEZsb3dUaHJlYWRDb250cm9sbGVyOjp1cGRhdGVGbG93VGhyZWFkc0ludG9PdmVyZmxvd1BoYXNl
KCkKIHsKLSAgICBmb3IgKFJlbmRlck5hbWVkRmxvd1RocmVhZExpc3Q6OnJldmVyc2VfaXRlcmF0
b3IgaXRlciA9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+cmJlZ2luKCk7IGl0ZXIgIT0g
bV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5yZW5kKCk7ICsraXRlcikgeworICAgIGZvciAo
YXV0byBpdGVyID0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5yYmVnaW4oKSwgZW5kID0g
bV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5yZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
IHsKICAgICAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBmbG93UmVuZGVyZXIgPSAqaXRlcjsK
ICAgICAgICAgQVNTRVJUKCFmbG93UmVuZGVyZXItPmhhc1JlZ2lvbnMoKSB8fCBmbG93UmVuZGVy
ZXItPmhhc1ZhbGlkUmVnaW9uSW5mbygpKTsKICAgICAgICAgQVNTRVJUKCFmbG93UmVuZGVyZXIt
Pm5lZWRzVHdvUGhhc2VzTGF5b3V0KCkpOwpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgRmxvd1Ro
cmVhZENvbnRyb2xsZXI6OnVwZGF0ZUZsb3dUaHJlYWRzSW50b092ZXJmbG93UGhhc2UoKQogCiB2
b2lkIEZsb3dUaHJlYWRDb250cm9sbGVyOjp1cGRhdGVGbG93VGhyZWFkc0ludG9NZWFzdXJlQ29u
dGVudFBoYXNlKCkKIHsKLSAgICBmb3IgKFJlbmRlck5hbWVkRmxvd1RocmVhZExpc3Q6Oml0ZXJh
dG9yIGl0ZXIgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPmJlZ2luKCk7IGl0ZXIgIT0g
bV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChh
dXRvIGl0ZXIgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPmJlZ2luKCksIGVuZCA9IG1f
cmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+ZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsK
ICAgICAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBmbG93UmVuZGVyZXIgPSAqaXRlcjsKICAg
ICAgICAgQVNTRVJUKGZsb3dSZW5kZXJlci0+aW5GaW5hbExheW91dFBoYXNlKCkpOwogCkBAIC0y
NTMsNyArMjUzLDcgQEAgdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6dXBkYXRlRmxvd1RocmVh
ZHNJbnRvTWVhc3VyZUNvbnRlbnRQaGFzZSgpCiAKIHZvaWQgRmxvd1RocmVhZENvbnRyb2xsZXI6
OnVwZGF0ZUZsb3dUaHJlYWRzSW50b0ZpbmFsUGhhc2UoKQogewotICAgIGZvciAoUmVuZGVyTmFt
ZWRGbG93VGhyZWFkTGlzdDo6cmV2ZXJzZV9pdGVyYXRvciBpdGVyID0gbV9yZW5kZXJOYW1lZEZs
b3dUaHJlYWRMaXN0LT5yYmVnaW4oKTsgaXRlciAhPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExp
c3QtPnJlbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlbmRlck5hbWVk
Rmxvd1RocmVhZExpc3QtPnJiZWdpbigpLCBlbmQgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExp
c3QtPnJlbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBSZW5kZXJOYW1lZEZs
b3dUaHJlYWQqIGZsb3dSZW5kZXJlciA9ICppdGVyOwogICAgICAgICBmbG93UmVuZGVyZXItPmxh
eW91dElmTmVlZGVkKCk7CiAgICAgICAgIGlmIChmbG93UmVuZGVyZXItPm5lZWRzVHdvUGhhc2Vz
TGF5b3V0KCkpIHsKQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lkIEZsb3dUaHJlYWRDb250cm9sbGVy
Ojp1cGRhdGVGbG93VGhyZWFkc0ludG9GaW5hbFBoYXNlKCkKIHZvaWQgRmxvd1RocmVhZENvbnRy
b2xsZXI6OnVwZGF0ZVJlbmRlckZsb3dUaHJlYWRMYXllcnNJZk5lZWRlZCgpCiB7CiAgICAgLy8g
V2FsayB0aGUgZmxvdyBjaGFpbiBpbiByZXZlcnNlIG9yZGVyIGJlY2F1c2UgUmVuZGVyUmVnaW9u
cyBtaWdodCBiZWNvbWUgUmVuZGVyTGF5ZXJzIGZvciB0aGUgZm9sbG93aW5nIGZsb3cgdGhyZWFk
cy4KLSAgICBmb3IgKFJlbmRlck5hbWVkRmxvd1RocmVhZExpc3Q6OnJldmVyc2VfaXRlcmF0b3Ig
aXRlciA9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+cmJlZ2luKCk7IGl0ZXIgIT0gbV9y
ZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5yZW5kKCk7ICsraXRlcikgeworICAgIGZvciAoYXV0
byBpdGVyID0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5yYmVnaW4oKSwgZW5kID0gbV9y
ZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5yZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsK
ICAgICAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBmbG93UmVuZGVyZXIgPSAqaXRlcjsKICAg
ICAgICAgZmxvd1JlbmRlcmVyLT51cGRhdGVBbGxMYXllclRvUmVnaW9uTWFwcGluZ3NJZk5lZWRl
ZCgpOwogICAgIH0KQEAgLTI4NCw3ICsyODQsNyBAQCBib29sIEZsb3dUaHJlYWRDb250cm9sbGVy
Ojppc0NvbnRlbnRFbGVtZW50UmVnaXN0ZXJlZFdpdGhBbnlOYW1lZEZsb3coY29uc3QgRWxlbQog
Ly8gVGhlc2UgbGF5ZXJzIGFyZSBwYWludGVkIGFuZCBoaXQtdGVzdGVkIHN0YXJ0aW5nIGZyb20g
UmVuZGVyVmlldyBub3QgZnJvbSByZWdpb25zLgogdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6
Y29sbGVjdEZpeGVkUG9zaXRpb25lZExheWVycyhWZWN0b3I8UmVuZGVyTGF5ZXIqPiYgZml4ZWRQ
b3NMYXllcnMpIGNvbnN0CiB7Ci0gICAgZm9yIChSZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5iZWdpbigp
OyBpdGVyICE9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+ZW5kKCk7ICsraXRlcikgewor
ICAgIGZvciAoYXV0byBpdGVyID0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5iZWdpbigp
LCBlbmQgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPmVuZCgpOyBpdGVyICE9IGVuZDsg
KytpdGVyKSB7CiAgICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1JlbmRlcmVyID0g
Kml0ZXI7CiAKICAgICAgICAgLy8gSWYgdGhlIG5hbWVkIGZsb3cgZG9lcyBub3QgaGF2ZSBhbnkg
cmVnaW9ucyBhdHRhY2hlZCwgYSBmaXhlZCBlbGVtZW50IHNob3VsZCBub3QgYmUKQEAgLTI5NSw4
ICsyOTUsNyBAQCB2b2lkIEZsb3dUaHJlYWRDb250cm9sbGVyOjpjb2xsZWN0Rml4ZWRQb3NpdGlv
bmVkTGF5ZXJzKFZlY3RvcjxSZW5kZXJMYXllcio+JiBmaQogICAgICAgICAvLyBJdGVyYXRlIG92
ZXIgdGhlIGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMgaW4gdGhlIGZsb3cgdGhyZWFkCiAgICAg
ICAgIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0KiBwb3NpdGlvbmVkRGVzY2VuZGFudHMgPSBm
bG93UmVuZGVyZXItPnBvc2l0aW9uZWRPYmplY3RzKCk7CiAgICAgICAgIGlmIChwb3NpdGlvbmVk
RGVzY2VuZGFudHMpIHsKLSAgICAgICAgICAgIFRyYWNrZWRSZW5kZXJlckxpc3RIYXNoU2V0Ojpp
dGVyYXRvciBlbmQgPSBwb3NpdGlvbmVkRGVzY2VuZGFudHMtPmVuZCgpOwotICAgICAgICAgICAg
Zm9yIChUcmFja2VkUmVuZGVyZXJMaXN0SGFzaFNldDo6aXRlcmF0b3IgaXQgPSBwb3NpdGlvbmVk
RGVzY2VuZGFudHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgZm9y
IChhdXRvIGl0ID0gcG9zaXRpb25lZERlc2NlbmRhbnRzLT5iZWdpbigpLCBlbmQgPSBwb3NpdGlv
bmVkRGVzY2VuZGFudHMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAg
ICBSZW5kZXJCb3gqIGJveCA9ICppdDsKICAgICAgICAgICAgICAgICBpZiAoIWJveC0+Zml4ZWRQ
b3NpdGlvbmVkV2l0aE5hbWVkRmxvd0NvbnRhaW5pbmdCbG9jaygpKQogICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTMxMiw3ICszMTEsNyBAQCBib29sIEZsb3dUaHJlYWRDb250cm9s
bGVyOjppc0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50Q29uc2lzdGVudCgpIGNvbnN0CiAg
ICAgaWYgKCFoYXNSZW5kZXJOYW1lZEZsb3dUaHJlYWRzKCkpCiAgICAgICAgIHJldHVybiAhaGFz
Rmxvd1RocmVhZHNXaXRoQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCk7CiAKLSAgICBmb3IgKFJl
bmRlck5hbWVkRmxvd1RocmVhZExpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlbmRlck5hbWVkRmxv
d1RocmVhZExpc3QtPmJlZ2luKCk7IGl0ZXIgIT0gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0
LT5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlbmRlck5hbWVkRmxv
d1RocmVhZExpc3QtPmJlZ2luKCksIGVuZCA9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+
ZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgaWYgKCEoKml0ZXIpLT5pc0F1
dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50Q29uc2lzdGVudCgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGbG93VGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93
VGhyZWFkLmNwcAppbmRleCBlMDU3ZTY0MzE2NDFlYWJhY2UyYmZiNmI3NTk1Mjg4NTBmN2ZiOGM1
Li5jYmI4ZjE2ZGE4MzU5NDZmMGNjYzVmYjUxM2NhOGRjY2U1ZTQyYTczIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCkBAIC0xNjQsNyArMTY0LDcg
QEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjp2YWxpZGF0ZVJlZ2lvbnMoKQogICAgICAgICAgICAg
TGF5b3V0VW5pdCBwcmV2aW91c1JlZ2lvbkxvZ2ljYWxIZWlnaHQgPSAwOwogICAgICAgICAgICAg
Ym9vbCBmaXJzdFJlZ2lvblZpc2l0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgZm9yIChSZW5kZXJSZWdpb25MaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZWdpb25MaXN0LmJl
Z2luKCk7IGl0ZXIgIT0gbV9yZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAg
IGZvciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCksIGVuZCA9IG1fcmVnaW9uTGlz
dC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICAgICAgICAgIFJlbmRlclJl
Z2lvbiogcmVnaW9uID0gKml0ZXI7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFyZWdpb24tPm5l
ZWRzTGF5b3V0KCkgfHwgcmVnaW9uLT5pc1JlbmRlclJlZ2lvblNldCgpKTsKIApAQCAtMjUzLDcg
KzI1Myw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6bGF5b3V0KCkKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiBib29sIFJlbmRlckZsb3dUaHJlYWQ6Omhhc0NvbXBvc2l0aW5n
UmVnaW9uRGVzY2VuZGFudCgpIGNvbnN0CiB7Ci0gICAgZm9yIChSZW5kZXJSZWdpb25MaXN0Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCk7IGl0ZXIgIT0gbV9yZWdp
b25MaXN0LmVuZCgpOyArK2l0ZXIpCisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlZ2lvbkxpc3Qu
YmVnaW4oKSwgZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKQog
ICAgICAgICBpZiAoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogbGF5ZXJPd25lciA9IHRvUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQoKml0ZXIpLT5sYXllck93bmVyKCkpCiAgICAgICAgICAgICBpZiAo
bGF5ZXJPd25lci0+aGFzTGF5ZXIoKSAmJiBsYXllck93bmVyLT5sYXllcigpLT5oYXNDb21wb3Np
dGluZ0Rlc2NlbmRhbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI2Niw3
ICsyNjYsNyBAQCBjb25zdCBSZW5kZXJMYXllckxpc3QqIFJlbmRlckZsb3dUaHJlYWQ6OmdldExh
eWVyTGlzdEZvclJlZ2lvbihSZW5kZXJOYW1lZEZsb3dGcgogICAgIGlmICghbV9yZWdpb25Ub0xh
eWVyTGlzdE1hcCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgdXBkYXRlQWxsTGF5ZXJUb1JlZ2lv
bk1hcHBpbmdzSWZOZWVkZWQoKTsKLSAgICBSZWdpb25Ub0xheWVyTGlzdE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRlcmF0b3IgPSBtX3JlZ2lvblRvTGF5ZXJMaXN0TWFwLT5maW5kKHJlZ2lvbik7Cisg
ICAgYXV0byBpdGVyYXRvciA9IG1fcmVnaW9uVG9MYXllckxpc3RNYXAtPmZpbmQocmVnaW9uKTsK
ICAgICByZXR1cm4gaXRlcmF0b3IgPT0gbV9yZWdpb25Ub0xheWVyTGlzdE1hcC0+ZW5kKCkgPyAw
IDogJml0ZXJhdG9yLT52YWx1ZTsKIH0KIApAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgUmVuZGVy
Rmxvd1RocmVhZDo6dXBkYXRlTGF5ZXJUb1JlZ2lvbk1hcHBpbmdzKFJlbmRlckxheWVyJiBsYXll
ciwgTGF5ZXJUb1JlCiAKICAgICBsYXllclRvUmVnaW9uTWFwLnNldCgmbGF5ZXIsIHJlZ2lvbik7
CiAKLSAgICBSZWdpb25Ub0xheWVyTGlzdE1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSByZWdpb25U
b0xheWVyTGlzdE1hcC5maW5kKHJlZ2lvbik7CisgICAgYXV0byBpdGVyYXRvciA9IHJlZ2lvblRv
TGF5ZXJMaXN0TWFwLmZpbmQocmVnaW9uKTsKICAgICBSZW5kZXJMYXllckxpc3QmIGxpc3QgPSBp
dGVyYXRvciA9PSByZWdpb25Ub0xheWVyTGlzdE1hcC5lbmQoKSA/IHJlZ2lvblRvTGF5ZXJMaXN0
TWFwLnNldChyZWdpb24sIFJlbmRlckxheWVyTGlzdCgpKS5pdGVyYXRvci0+dmFsdWUgOiBpdGVy
YXRvci0+dmFsdWU7CiAgICAgQVNTRVJUKCFsaXN0LmNvbnRhaW5zKCZsYXllcikpOwogICAgIGxp
c3QuYXBwZW5kKCZsYXllcik7CkBAIC0zNjUsNyArMzY1LDcgQEAgYm9vbCBSZW5kZXJGbG93VGhy
ZWFkOjpjb2xsZWN0c0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkgY29uc3QKIHZvaWQgUmVu
ZGVyRmxvd1RocmVhZDo6dXBkYXRlTG9naWNhbFdpZHRoKCkKIHsKICAgICBMYXlvdXRVbml0IGxv
Z2ljYWxXaWR0aCA9IGluaXRpYWxMb2dpY2FsV2lkdGgoKTsKLSAgICBmb3IgKFJlbmRlclJlZ2lv
bkxpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAhPSBtX3Jl
Z2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9yZWdpb25M
aXN0LmJlZ2luKCksIGVuZCA9IG1fcmVnaW9uTGlzdC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRl
cikgewogICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVyOwogICAgICAgICBBU1NF
UlQoIXJlZ2lvbi0+bmVlZHNMYXlvdXQoKSB8fCByZWdpb24tPmlzUmVuZGVyUmVnaW9uU2V0KCkp
OwogICAgICAgICBsb2dpY2FsV2lkdGggPSBzdGQ6Om1heChyZWdpb24tPnBhZ2VMb2dpY2FsV2lk
dGgoKSwgbG9naWNhbFdpZHRoKTsKQEAgLTM3Myw3ICszNzMsNyBAQCB2b2lkIFJlbmRlckZsb3dU
aHJlYWQ6OnVwZGF0ZUxvZ2ljYWxXaWR0aCgpCiAgICAgc2V0TG9naWNhbFdpZHRoKGxvZ2ljYWxX
aWR0aCk7CiAKICAgICAvLyBJZiB0aGUgcmVnaW9ucyBoYXZlIG5vbi11bmlmb3JtIGxvZ2ljYWwg
d2lkdGhzLCB0aGVuIGluc2VydCBpbnNldCBpbmZvcm1hdGlvbiBmb3IgdGhlIFJlbmRlckZsb3dU
aHJlYWQuCi0gICAgZm9yIChSZW5kZXJSZWdpb25MaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZWdp
b25MaXN0LmJlZ2luKCk7IGl0ZXIgIT0gbV9yZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKKyAg
ICBmb3IgKGF1dG8gaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpLCBlbmQgPSBtX3JlZ2lvbkxp
c3QuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyUmVnaW9uKiBy
ZWdpb24gPSAqaXRlcjsKICAgICAgICAgTGF5b3V0VW5pdCByZWdpb25Mb2dpY2FsV2lkdGggPSBy
ZWdpb24tPnBhZ2VMb2dpY2FsV2lkdGgoKTsKICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVm
dCA9IHN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gTFRSID8gTGF5b3V0VW5pdCgpIDogbG9naWNhbFdp
ZHRoIC0gcmVnaW9uTG9naWNhbFdpZHRoOwpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgUmVuZGVy
Rmxvd1RocmVhZDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCBs
b2dpY2FsVG9wLCBMCiAgICAgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgPSAwOwogCiAgICAgY29u
c3QgTGF5b3V0VW5pdCBtYXhGbG93U2l6ZSA9IFJlbmRlckZsb3dUaHJlYWQ6Om1heExvZ2ljYWxI
ZWlnaHQoKTsKLSAgICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRl
cikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCksIGVuZCA9IG1f
cmVnaW9uTGlzdC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBSZW5kZXJS
ZWdpb24qIHJlZ2lvbiA9ICppdGVyOwogICAgICAgICBBU1NFUlQoIXJlZ2lvbi0+bmVlZHNMYXlv
dXQoKSB8fCByZWdpb24tPmlzUmVuZGVyUmVnaW9uU2V0KCkpOwogCkBAIC01MTQsNyArNTE0LDcg
QEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpyZXBhaW50UmVjdGFuZ2xlSW5SZWdpb25zKGNvbnN0
IExheW91dFJlY3QmIHJlcGFpbnRSZWN0LAogICAgIC8vIExldCBlYWNoIHJlZ2lvbiBmaWd1cmUg
b3V0IHRoZSBwcm9wZXIgZW5jbG9zaW5nIGZsb3cgdGhyZWFkLgogICAgIEN1cnJlbnRSZW5kZXJG
bG93VGhyZWFkRGlzYWJsZXIgZGlzYWJsZXIoJnZpZXcoKSk7CiAgICAgCi0gICAgZm9yIChSZW5k
ZXJSZWdpb25MaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCk7
IGl0ZXIgIT0gbV9yZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKKyAgICBmb3IgKGF1dG8gaXRl
ciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpLCBlbmQgPSBtX3JlZ2lvbkxpc3QuZW5kKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSAqaXRlcjsK
IAogICAgICAgICByZWdpb24tPnJlcGFpbnRGbG93VGhyZWFkQ29udGVudChyZXBhaW50UmVjdCwg
aW1tZWRpYXRlKTsKQEAgLTcwOSw3ICs3MDksNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnJl
bW92ZVJlbmRlckJveFJlZ2lvbkluZm8oUmVuZGVyQm94KiBib3gpCiAgICAgUmVuZGVyUmVnaW9u
KiBlbmRSZWdpb247CiAgICAgZ2V0UmVnaW9uUmFuZ2VGb3JCb3goYm94LCBzdGFydFJlZ2lvbiwg
ZW5kUmVnaW9uKTsKIAotICAgIGZvciAoUmVuZGVyUmVnaW9uTGlzdDo6aXRlcmF0b3IgaXRlciA9
IG1fcmVnaW9uTGlzdC5maW5kKHN0YXJ0UmVnaW9uKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5k
KCk7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmZpbmQoc3Rh
cnRSZWdpb24pLCBlbmQgPSBtX3JlZ2lvbkxpc3QuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
IHsKICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSAqaXRlcjsKICAgICAgICAgcmVnaW9u
LT5yZW1vdmVSZW5kZXJCb3hSZWdpb25JbmZvKGJveCk7CiAgICAgICAgIGlmIChyZWdpb24gPT0g
ZW5kUmVnaW9uKQpAQCAtNzE4LDcgKzcxOCw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6cmVt
b3ZlUmVuZGVyQm94UmVnaW9uSW5mbyhSZW5kZXJCb3gqIGJveCkKIAogI2lmbmRlZiBOREVCVUcK
ICAgICAvLyBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSBkaWQgbm90IGxlYXZlIGFueSBSZW5kZXJC
b3hSZWdpb25JbmZvIGF0dGFjaGVkLgotICAgIGZvciAoUmVuZGVyUmVnaW9uTGlzdDo6aXRlcmF0
b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9IG1fcmVnaW9uTGlzdC5lbmQo
KTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKSwg
ZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAg
IFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7CiAgICAgICAgIEFTU0VSVCghcmVnaW9uLT5y
ZW5kZXJCb3hSZWdpb25JbmZvKGJveCkpOwogICAgIH0KQEAgLTczMiw3ICs3MzIsNyBAQCB2b2lk
IFJlbmRlckZsb3dUaHJlYWQ6OmxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnNGb3JCbG9jayhj
b25zdCBSZW5kZXJCbG9jayogYgogICAgIGlmICghaGFzVmFsaWRSZWdpb25JbmZvKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlbmRlclJlZ2lvblJhbmdlTWFwOjppdGVyYXRvciBpdCA9IG1f
cmVnaW9uUmFuZ2VNYXAuZmluZChibG9jayk7CisgICAgYXV0byBpdCA9IG1fcmVnaW9uUmFuZ2VN
YXAuZmluZChibG9jayk7CiAgICAgaWYgKGl0ID09IG1fcmVnaW9uUmFuZ2VNYXAuZW5kKCkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtNzU2LDcgKzc1Niw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVh
ZDo6bG9naWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9uc0ZvckJsb2NrKGNvbnN0IFJlbmRlckJsb2Nr
KiBiCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6
Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuZmluZChzdGFydFJlZ2lvbik7IGl0ZXIgIT0g
bV9yZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVn
aW9uTGlzdC5maW5kKHN0YXJ0UmVnaW9uKSwgZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7
CiAgICAgICAgIEFTU0VSVCghcmVnaW9uLT5uZWVkc0xheW91dCgpIHx8IHJlZ2lvbi0+aXNSZW5k
ZXJSZWdpb25TZXQoKSk7CiAKQEAgLTgyMSw3ICs4MjEsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJl
YWQ6OmNsZWFyUmVuZGVyT2JqZWN0Q3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmpl
Y3QpCiB7CiAgICAgLy8gQ2xlYXIgdGhlIHN0eWxlcyBmb3IgdGhlIG9iamVjdCBpbiB0aGUgcmVn
aW9ucy4KICAgICAvLyBGSVhNRTogUmVnaW9uIHN0eWxpbmcgaXMgbm90IGNvbXB1dGVkIG9ubHkg
Zm9yIHRoZSByZWdpb24gcmFuZ2Ugb2YgdGhlIG9iamVjdCBzbyB0aGlzIGlzIHdoeSB3ZSBuZWVk
IHRvIHdhbGsgdGhlIHdob2xlIGNoYWluLgotICAgIGZvciAoUmVuZGVyUmVnaW9uTGlzdDo6aXRl
cmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9IG1fcmVnaW9uTGlzdC5l
bmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4o
KSwgZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAg
ICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7CiAgICAgICAgIHJlZ2lvbi0+Y2xlYXJP
YmplY3RTdHlsZUluUmVnaW9uKG9iamVjdCk7CiAgICAgfQpAQCAtODM1LDcgKzgzNSw3IEBAIHZv
aWQgUmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJCb3hSZWdpb25JbmZvQW5kQ3VzdG9tU3R5
bGUoY29uc3QgUmVuZGVyQm94KiBiCiAKICAgICBib29sIGluc2lkZU9sZFJlZ2lvblJhbmdlID0g
ZmFsc2U7CiAgICAgYm9vbCBpbnNpZGVOZXdSZWdpb25SYW5nZSA9IGZhbHNlOwotICAgIGZvciAo
UmVuZGVyUmVnaW9uTGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBp
dGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIg
PSBtX3JlZ2lvbkxpc3QuYmVnaW4oKSwgZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyBpdGVyICE9
IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7CiAK
ICAgICAgICAgaWYgKG9sZFN0YXJ0UmVnaW9uID09IHJlZ2lvbikKQEAgLTg2MSw3ICs4NjEsNyBA
QCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnNldFJlZ2lvblJhbmdlRm9yQm94KGNvbnN0IFJlbmRl
ckJveCogYm94LCBSZW5kZXJSZWdpb24qCiAgICAgQVNTRVJUKGhhc1JlZ2lvbnMoKSk7CiAgICAg
QVNTRVJUKHN0YXJ0UmVnaW9uICYmIGVuZFJlZ2lvbik7CiAKLSAgICBSZW5kZXJSZWdpb25SYW5n
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lvblJhbmdlTWFwLmZpbmQoYm94KTsKKyAgICBhdXRv
IGl0ID0gbV9yZWdpb25SYW5nZU1hcC5maW5kKGJveCk7CiAgICAgaWYgKGl0ID09IG1fcmVnaW9u
UmFuZ2VNYXAuZW5kKCkpIHsKICAgICAgICAgbV9yZWdpb25SYW5nZU1hcC5zZXQoYm94LCBSZW5k
ZXJSZWdpb25SYW5nZShzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKSk7CiAgICAgICAgIHJldHVybjsK
QEAgLTg4MCw3ICs4ODAsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmdldFJlZ2lvblJhbmdl
Rm9yQm94KGNvbnN0IFJlbmRlckJveCogYm94LCBSZW5kZXJSZWdpb24qJgogewogICAgIHN0YXJ0
UmVnaW9uID0gMDsKICAgICBlbmRSZWdpb24gPSAwOwotICAgIFJlbmRlclJlZ2lvblJhbmdlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVnaW9uUmFuZ2VNYXAuZmluZChib3gpOworICAgIGF1
dG8gaXQgPSBtX3JlZ2lvblJhbmdlTWFwLmZpbmQoYm94KTsKICAgICBpZiAoaXQgPT0gbV9yZWdp
b25SYW5nZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC05MDEsNyArOTAxLDcgQEAg
Ym9vbCBSZW5kZXJGbG93VGhyZWFkOjpyZWdpb25JblJhbmdlKGNvbnN0IFJlbmRlclJlZ2lvbiog
dGFyZ2V0UmVnaW9uLCBjb25zdCBSZW4KIHsKICAgICBBU1NFUlQodGFyZ2V0UmVnaW9uKTsKIAot
ICAgIGZvciAoUmVuZGVyUmVnaW9uTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3JlZ2lvbkxp
c3QuZmluZChjb25zdF9jYXN0PFJlbmRlclJlZ2lvbio+KHN0YXJ0UmVnaW9uKSk7IGl0ICE9IG1f
cmVnaW9uTGlzdC5lbmQoKTsgKytpdCkgeworICAgIGZvciAoYXV0byBpdCA9IG1fcmVnaW9uTGlz
dC5maW5kKGNvbnN0X2Nhc3Q8UmVuZGVyUmVnaW9uKj4oc3RhcnRSZWdpb24pKSwgZW5kID0gbV9y
ZWdpb25MaXN0LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgY29uc3QgUmVuZGVy
UmVnaW9uKiBjdXJyUmVnaW9uID0gKml0OwogICAgICAgICBpZiAodGFyZ2V0UmVnaW9uID09IGN1
cnJSZWdpb24pCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkxNiw3ICs5MTYsNyBAQCBi
b29sIFJlbmRlckZsb3dUaHJlYWQ6OnJlZ2lvbkluUmFuZ2UoY29uc3QgUmVuZGVyUmVnaW9uKiB0
YXJnZXRSZWdpb24sIGNvbnN0IFJlbgogdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpjaGVja1JlZ2lv
bnNXaXRoU3R5bGluZygpCiB7CiAgICAgYm9vbCBoYXNSZWdpb25zV2l0aFN0eWxpbmcgPSBmYWxz
ZTsKLSAgICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxp
c3QuYmVnaW4oKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgIGZv
ciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCksIGVuZCA9IG1fcmVnaW9uTGlzdC5l
bmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lv
biA9ICppdGVyOwogICAgICAgICBpZiAocmVnaW9uLT5oYXNDdXN0b21SZWdpb25TdHlsZSgpKSB7
CiAgICAgICAgICAgICBoYXNSZWdpb25zV2l0aFN0eWxpbmcgPSB0cnVlOwpAQCAtOTU4LDcgKzk1
OCw3IEBAIGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6b2JqZWN0SW5GbG93UmVnaW9uKGNvbnN0IFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kCiAgICAgaWYgKHJlZ2lvbiA9PSBsYXN0UmVn
aW9uKCkpIHsKICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBkb2VzIG5vdCBpbnRlcnNlY3QgYW55
IG9mIHRoZSBlbmNsb3NpbmcgYm94IHJlZ2lvbnMKICAgICAgICAgLy8gdGhlbiB0aGUgb2JqZWN0
IGlzIGluIGxhc3QgcmVnaW9uLgotICAgICAgICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9yZWdpb25MaXN0LmZpbmQoZW5jbG9zaW5nQm94U3RhcnRSZWdpb24p
OyBpdCAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgZm9yIChhdXRvIGl0
ID0gbV9yZWdpb25MaXN0LmZpbmQoZW5jbG9zaW5nQm94U3RhcnRSZWdpb24pLCBlbmQgPSBtX3Jl
Z2lvbkxpc3QuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgY29uc3QgUmVu
ZGVyUmVnaW9uKiBjdXJyUmVnaW9uID0gKml0OwogICAgICAgICAgICAgaWYgKGN1cnJSZWdpb24g
PT0gcmVnaW9uKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTc1LDcgKzk3NSw3IEBAIGJv
b2wgUmVuZGVyRmxvd1RocmVhZDo6b2JqZWN0SW5GbG93UmVnaW9uKGNvbnN0IFJlbmRlck9iamVj
dCogb2JqZWN0LCBjb25zdCBSZW5kCiBib29sIFJlbmRlckZsb3dUaHJlYWQ6OmlzQXV0b0xvZ2lj
YWxIZWlnaHRSZWdpb25zQ291bnRDb25zaXN0ZW50KCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBh
dXRvTG9naWNhbEhlaWdodFJlZ2lvbnMgPSAwOwotICAgIGZvciAoUmVuZGVyUmVnaW9uTGlzdDo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9IG1fcmVn
aW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlZ2lvbkxp
c3QuYmVnaW4oKSwgZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7CiAgICAgICAgIGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7CiAgICAgICAg
IGlmIChyZWdpb24tPmhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpCiAgICAgICAgICAgICBhdXRvTG9n
aWNhbEhlaWdodFJlZ2lvbnMrKzsKQEAgLTk5NCw4ICs5OTQsOCBAQCB2b2lkIFJlbmRlckZsb3dU
aHJlYWQ6OmluaXRpYWxpemVSZWdpb25zQ29tcHV0ZWRBdXRvSGVpZ2h0KFJlbmRlclJlZ2lvbiog
c3RhcnRSZQogICAgIGlmICghaGFzQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlbmRlclJlZ2lvbkxpc3Q6Oml0ZXJhdG9yIHJlZ2lvbkl0ZXIgPSBz
dGFydFJlZ2lvbiA/IG1fcmVnaW9uTGlzdC5maW5kKHN0YXJ0UmVnaW9uKSA6IG1fcmVnaW9uTGlz
dC5iZWdpbigpOwotICAgIGZvciAoOyByZWdpb25JdGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsg
KytyZWdpb25JdGVyKSB7CisgICAgZm9yIChhdXRvIHJlZ2lvbkl0ZXIgPSBzdGFydFJlZ2lvbiA/
IG1fcmVnaW9uTGlzdC5maW5kKHN0YXJ0UmVnaW9uKSA6IG1fcmVnaW9uTGlzdC5iZWdpbigpLAor
ICAgICAgICBlbmQgPSBtX3JlZ2lvbkxpc3QuZW5kKCk7IHJlZ2lvbkl0ZXIgIT0gZW5kOyArK3Jl
Z2lvbkl0ZXIpIHsKICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSAqcmVnaW9uSXRlcjsK
ICAgICAgICAgaWYgKHJlZ2lvbi0+aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgICAg
IHJlZ2lvbi0+c2V0Q29tcHV0ZWRBdXRvSGVpZ2h0KHJlZ2lvbi0+bWF4UGFnZUxvZ2ljYWxIZWln
aHQoKSk7CkBAIC0xMDA2LDcgKzEwMDYsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6Om1hcmtB
dXRvTG9naWNhbEhlaWdodFJlZ2lvbnNGb3JMYXlvdXQoKQogewogICAgIEFTU0VSVChoYXNBdXRv
TG9naWNhbEhlaWdodFJlZ2lvbnMoKSk7CiAKLSAgICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6Oml0
ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3Qu
ZW5kKCk7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2lu
KCksIGVuZCA9IG1fcmVnaW9uTGlzdC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAg
ICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVyOwogICAgICAgICBpZiAoIXJlZ2lvbi0+
aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTAyMiw3
ICsxMDIyLDcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjptYXJrUmVnaW9uc0Zvck92ZXJmbG93
TGF5b3V0SWZOZWVkZWQoKQogICAgIGlmICghaGFzUmVnaW9ucygpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxp
c3QuYmVnaW4oKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgIGZv
ciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCksIGVuZCA9IG1fcmVnaW9uTGlzdC5l
bmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lv
biA9ICppdGVyOwogICAgICAgICByZWdpb24tPnNldE5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dM
YXlvdXQoKTsKICAgICB9CkBAIC0xMDM2LDcgKzEwMzYsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJl
YWQ6OnVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFkUG9ydGlvblJlY3QoY29uc3QgUmVuZGVyUmVnaW9u
KiBsYQogICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBub3QgdG8gY2xlYXIgdGhlIGludGVydmFsIGFs
bCB0aGUgdGltZS4gVGhpcyBpbXBsaWVzIG1hbnVhbGx5IG1hbmFnaW5nIHRoZSB0cmVlIG5vZGVz
IGxpZmVjeWNsZS4KICAgICBtX3JlZ2lvbkludGVydmFsVHJlZS5jbGVhcigpOwogICAgIG1fcmVn
aW9uSW50ZXJ2YWxUcmVlLmluaXRJZk5lZWRlZCgpOwotICAgIGZvciAoUmVuZGVyUmVnaW9uTGlz
dDo6aXRlcmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9IG1fcmVnaW9u
TGlzdC5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlZ2lvbkxpc3Qu
YmVnaW4oKSwgZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
CiAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7CiAKICAgICAgICAgLy8gSWYg
d2UgZmluZCBhbiBlbXB0eSBhdXRvLWhlaWdodCByZWdpb24sIGNsZWFyIHRoZSBjb21wdXRlZEF1
dG9IZWlnaHQgdmFsdWUuCkBAIC0xMDY1LDcgKzEwNjUsNyBAQCB2b2lkIFJlbmRlckZsb3dUaHJl
YWQ6OnVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFkUG9ydGlvblJlY3QoY29uc3QgUmVuZGVyUmVnaW9u
KiBsYQogLy8gRXZlbiBpZiB3ZSByZXF1aXJlIHRoZSBicmVhayB0byBvY2N1ciBhdCBvZmZzZXRC
cmVha0luRmxvd1RocmVhZCwgYmVjYXVzZSByZWdpb25zIG1heSBoYXZlIG1pbi9tYXgtaGVpZ2h0
IHZhbHVlcywKIC8vIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGJyZWFrIHdpbGwgb2NjdXIgYXQg
YSBkaWZmZXJlbnQgb2Zmc2V0IHRoYW4gdGhlIG9yaWdpbmFsIG9uZSByZXF1aXJlZC4KIC8vIG9m
ZnNldEJyZWFrQWRqdXN0bWVudCBtZWFzdXJlcyB0aGUgZGlmZmVyZW50IGJldHdlZW4gdGhlIHJl
cXVlc3RlZCBicmVhayBvZmZzZXQgYW5kIHRoZSBjdXJyZW50IGJyZWFrIG9mZnNldC4KLWJvb2wg
UmVuZGVyRmxvd1RocmVhZDo6YWRkRm9yY2VkUmVnaW9uQnJlYWsoY29uc3QgUmVuZGVyQmxvY2sq
IGJsb2NrLCBMYXlvdXRVbml0IG9mZnNldEJyZWFrSW5GbG93VGhyZWFkLCBSZW5kZXJPYmplY3Qq
IGJyZWFrQ2hpbGQsIGJvb2wgaXNCZWZvcmUsIExheW91dFVuaXQqIG9mZnNldEJyZWFrQWRqdXN0
bWVudCkKK2Jvb2wgUmVuZGVyRmxvd1RocmVhZDo6YWRkRm9yY2VkUmVnaW9uQnJlYWsoY29uc3Qg
UmVuZGVyQmxvY2sqIGJsb2NrLCBMYXlvdXRVbml0IG9mZnNldEJyZWFrSW5GbG93VGhyZWFkLCBS
ZW5kZXJCb3gqIGJyZWFrQ2hpbGQsIGJvb2wgaXNCZWZvcmUsIExheW91dFVuaXQqIG9mZnNldEJy
ZWFrQWRqdXN0bWVudCkKIHsKICAgICAvLyBXZSB0YWtlIGJyZWFrcyBpbnRvIGFjY291bnQgZm9y
IGhlaWdodCBjb21wdXRhdGlvbiBmb3IgYXV0byBsb2dpY2FsIGhlaWdodCByZWdpb25zCiAgICAg
Ly8gb25seSBpbiB0aGUgbGF5b3V0IHBoYXNlIGluIHdoaWNoIHdlIGxheSBvdXQgdGhlIGZsb3dz
IHRocmVhZHMgdW5jb25zdHJhaW5lZApAQCAtMTA3NywxMCArMTA3NywxMCBAQCBib29sIFJlbmRl
ckZsb3dUaHJlYWQ6OmFkZEZvcmNlZFJlZ2lvbkJyZWFrKGNvbnN0IFJlbmRlckJsb2NrKiBibG9j
aywgTGF5b3V0VW5pdAogICAgIC8vIEJyZWFrcyBjYW4gY29tZSBiZWZvcmUgb3IgYWZ0ZXIgc29t
ZSBvYmplY3RzLiBXZSBuZWVkIHRvIHRyYWNrIHRoZXNlIG9iamVjdHMsIHNvIHRoYXQgaWYgd2Ug
Z2V0CiAgICAgLy8gbXVsdGlwbGUgYnJlYWtzIGZvciB0aGUgc2FtZSBvYmplY3QgKGZvciBleGFt
cGxlIGJlY2F1c2Ugb2YgbXVsdGlwbGUgbGF5b3V0cyBvbiB0aGUgc2FtZSBvYmplY3QpLAogICAg
IC8vIHdlIG5lZWQgdG8gaW52YWxpZGF0ZSBldmVyeSBvdGhlciByZWdpb24gYWZ0ZXIgdGhlIG9s
ZCBvbmUgYW5kIHN0YXJ0IGNvbXB1dGluZyBmcm9tIGZyZXNoLgotICAgIFJlbmRlck9iamVjdFRv
UmVnaW9uTWFwJiBtYXBUb1VzZSA9IGlzQmVmb3JlID8gbV9icmVha0JlZm9yZVRvUmVnaW9uTWFw
IDogbV9icmVha0FmdGVyVG9SZWdpb25NYXA7Ci0gICAgUmVuZGVyT2JqZWN0VG9SZWdpb25NYXA6
Oml0ZXJhdG9yIGl0ZXIgPSBtYXBUb1VzZS5maW5kKGJyZWFrQ2hpbGQpOworICAgIFJlbmRlckJv
eFRvUmVnaW9uTWFwJiBtYXBUb1VzZSA9IGlzQmVmb3JlID8gbV9icmVha0JlZm9yZVRvUmVnaW9u
TWFwIDogbV9icmVha0FmdGVyVG9SZWdpb25NYXA7CisgICAgYXV0byBpdGVyID0gbWFwVG9Vc2Uu
ZmluZChicmVha0NoaWxkKTsKICAgICBpZiAoaXRlciAhPSBtYXBUb1VzZS5lbmQoKSkgewotICAg
ICAgICBSZW5kZXJSZWdpb25MaXN0OjppdGVyYXRvciByZWdpb25JdGVyID0gbV9yZWdpb25MaXN0
LmZpbmQoaXRlci0+dmFsdWUpOworICAgICAgICBhdXRvIHJlZ2lvbkl0ZXIgPSBtX3JlZ2lvbkxp
c3QuZmluZChpdGVyLT52YWx1ZSk7CiAgICAgICAgIEFTU0VSVChyZWdpb25JdGVyICE9IG1fcmVn
aW9uTGlzdC5lbmQoKSk7CiAgICAgICAgIEFTU0VSVCgoKnJlZ2lvbkl0ZXIpLT5oYXNBdXRvTG9n
aWNhbEhlaWdodCgpKTsKICAgICAgICAgaW5pdGlhbGl6ZVJlZ2lvbnNDb21wdXRlZEF1dG9IZWln
aHQoKnJlZ2lvbkl0ZXIpOwpAQCAtMTE1Niw3ICsxMTU2LDcgQEAgdm9pZCBSZW5kZXJGbG93VGhy
ZWFkOjpjb2xsZWN0TGF5ZXJGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRz
LCBjb24KIHsKICAgICBBU1NFUlQoIW1fcmVnaW9uc0ludmFsaWRhdGVkKTsKICAgICAKLSAgICBm
b3IgKFJlbmRlclJlZ2lvbkxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3Qu
YmVnaW4oKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgIGZvciAo
YXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCksIGVuZCA9IG1fcmVnaW9uTGlzdC5lbmQo
KTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9
ICppdGVyOwogICAgICAgICByZWdpb24tPmNvbGxlY3RMYXllckZyYWdtZW50cyhsYXllckZyYWdt
ZW50cywgbGF5ZXJCb3VuZGluZ0JveCwgZGlydHlSZWN0KTsKICAgICB9CkBAIC0xMTY3LDcgKzEx
NjcsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckZsb3dUaHJlYWQ6OmZyYWdtZW50c0JvdW5kaW5nQm94
KGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRpbgogICAgIEFTU0VSVCghbV9yZWdpb25zSW52
YWxpZGF0ZWQpOwogICAgIAogICAgIExheW91dFJlY3QgcmVzdWx0OwotICAgIGZvciAoUmVuZGVy
UmVnaW9uTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBp
dGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIg
PSBtX3JlZ2lvbkxpc3QuYmVnaW4oKSwgZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyBpdGVyICE9
IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7CiAg
ICAgICAgIExheWVyRnJhZ21lbnRzIGZyYWdtZW50czsKICAgICAgICAgcmVnaW9uLT5jb2xsZWN0
TGF5ZXJGcmFnbWVudHMoZnJhZ21lbnRzLCBsYXllckJvdW5kaW5nQm94LCBQYWludEluZm86Omlu
ZmluaXRlUmVjdCgpKTsKQEAgLTEzNjMsNyArMTM2Myw3IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVh
ZDo6YWRkUmVnaW9uc1Zpc3VhbEVmZmVjdE92ZXJmbG93KGNvbnN0IFJlbmRlckJveCogYm94KQog
ICAgIFJlbmRlclJlZ2lvbiogZW5kUmVnaW9uID0gMDsKICAgICBnZXRSZWdpb25SYW5nZUZvckJv
eChib3gsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pOwogCi0gICAgZm9yIChSZW5kZXJSZWdpb25M
aXN0OjppdGVyYXRvciBpdGVyID0gbV9yZWdpb25MaXN0LmZpbmQoc3RhcnRSZWdpb24pOyBpdGVy
ICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBt
X3JlZ2lvbkxpc3QuZmluZChzdGFydFJlZ2lvbiksIGVuZCA9IG1fcmVnaW9uTGlzdC5lbmQoKTsg
aXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICpp
dGVyOwogCiAgICAgICAgIExheW91dFJlY3QgYm9yZGVyQm94ID0gYm94LT5ib3JkZXJCb3hSZWN0
SW5SZWdpb24ocmVnaW9uKTsKQEAgLTEzODIsNyArMTM4Miw3IEBAIHZvaWQgUmVuZGVyRmxvd1Ro
cmVhZDo6YWRkUmVnaW9uc1Zpc3VhbE92ZXJmbG93RnJvbVRoZW1lKGNvbnN0IFJlbmRlckJsb2Nr
KiBibG9jCiAgICAgUmVuZGVyUmVnaW9uKiBlbmRSZWdpb24gPSAwOwogICAgIGdldFJlZ2lvblJh
bmdlRm9yQm94KGJsb2NrLCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKTsKIAotICAgIGZvciAoUmVu
ZGVyUmVnaW9uTGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5maW5kKHN0YXJ0UmVn
aW9uKTsgaXRlciAhPSBtX3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgIGZvciAoYXV0
byBpdGVyID0gbV9yZWdpb25MaXN0LmZpbmQoc3RhcnRSZWdpb24pLCBlbmQgPSBtX3JlZ2lvbkxp
c3QuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyUmVnaW9uKiBy
ZWdpb24gPSAqaXRlcjsKIAogICAgICAgICBMYXlvdXRSZWN0IGJvcmRlckJveCA9IGJsb2NrLT5i
b3JkZXJCb3hSZWN0SW5SZWdpb24ocmVnaW9uKTsKQEAgLTE0MDcsNyArMTQwNyw3IEBAIHZvaWQg
UmVuZGVyRmxvd1RocmVhZDo6YWRkUmVnaW9uc092ZXJmbG93RnJvbUNoaWxkKGNvbnN0IFJlbmRl
ckJveCogYm94LCBjb25zdCBSCiAgICAgUmVuZGVyUmVnaW9uKiBjb250YWluZXJFbmRSZWdpb24g
PSAwOwogICAgIGdldFJlZ2lvblJhbmdlRm9yQm94KGJveCwgY29udGFpbmVyU3RhcnRSZWdpb24s
IGNvbnRhaW5lckVuZFJlZ2lvbik7CiAKLSAgICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6Oml0ZXJh
dG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuZmluZChzdGFydFJlZ2lvbik7IGl0ZXIgIT0gbV9yZWdp
b25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKKyAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVnaW9uTGlz
dC5maW5kKHN0YXJ0UmVnaW9uKSwgZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7CiAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7CiAgICAg
ICAgIGlmICghcmVnaW9uSW5SYW5nZShyZWdpb24sIGNvbnRhaW5lclN0YXJ0UmVnaW9uLCBjb250
YWluZXJFbmRSZWdpb24pKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xNDMzLDcgKzE0MzMs
NyBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmFkZFJlZ2lvbnNMYXlvdXRPdmVyZmxvdyhjb25z
dCBSZW5kZXJCb3gqIGJveCwgY29uc3QgTGF5bwogICAgIFJlbmRlclJlZ2lvbiogZW5kUmVnaW9u
ID0gMDsKICAgICBnZXRSZWdpb25SYW5nZUZvckJveChib3gsIHN0YXJ0UmVnaW9uLCBlbmRSZWdp
b24pOwogCi0gICAgZm9yIChSZW5kZXJSZWdpb25MaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZWdp
b25MaXN0LmZpbmQoc3RhcnRSZWdpb24pOyBpdGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytp
dGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuZmluZChzdGFydFJlZ2lv
biksIGVuZCA9IG1fcmVnaW9uTGlzdC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAg
ICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVyOwogICAgICAgICBMYXlvdXRSZWN0IGxh
eW91dE92ZXJmbG93SW5SZWdpb24gPSByZWdpb24tPnJlY3RGbG93UG9ydGlvbkZvckJveChib3gs
IGxheW91dE92ZXJmbG93KTsKIApAQCAtMTQ1MCw3ICsxNDUwLDcgQEAgdm9pZCBSZW5kZXJGbG93
VGhyZWFkOjpjbGVhclJlZ2lvbnNPdmVyZmxvdyhjb25zdCBSZW5kZXJCb3gqIGJveCkKICAgICBS
ZW5kZXJSZWdpb24qIGVuZFJlZ2lvbiA9IDA7CiAgICAgZ2V0UmVnaW9uUmFuZ2VGb3JCb3goYm94
LCBzdGFydFJlZ2lvbiwgZW5kUmVnaW9uKTsKIAotICAgIGZvciAoUmVuZGVyUmVnaW9uTGlzdDo6
aXRlcmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5maW5kKHN0YXJ0UmVnaW9uKTsgaXRlciAhPSBt
X3JlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0gbV9yZWdp
b25MaXN0LmZpbmQoc3RhcnRSZWdpb24pLCBlbmQgPSBtX3JlZ2lvbkxpc3QuZW5kKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSAqaXRlcjsK
ICAgICAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogYm94SW5mbyA9IHJlZ2lvbi0+cmVuZGVyQm94
UmVnaW9uSW5mbyhib3gpOwogICAgICAgICBpZiAoYm94SW5mbyAmJiBib3hJbmZvLT5vdmVyZmxv
dygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKaW5kZXgg
NDNiNzk3NDMyZGFhOTEyYTRiNjU5Yjc2NzkwMmU0OTYxYTVlMGJjYy4uMjFiNGZhZTMzNjk1NjJl
YmExOWM1OGM0ZDY1ZTlhN2YwM2ZiMDg2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxvd1RocmVhZC5oCkBAIC0xNDksNyArMTQ5LDcgQEAgcHVibGljOgogICAgIHZvaWQg
bWFya0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0ZvckxheW91dCgpOwogICAgIHZvaWQgbWFya1Jl
Z2lvbnNGb3JPdmVyZmxvd0xheW91dElmTmVlZGVkKCk7CiAKLSAgICBib29sIGFkZEZvcmNlZFJl
Z2lvbkJyZWFrKGNvbnN0IFJlbmRlckJsb2NrKiwgTGF5b3V0VW5pdCwgUmVuZGVyT2JqZWN0KiBi
cmVha0NoaWxkLCBib29sIGlzQmVmb3JlLCBMYXlvdXRVbml0KiBvZmZzZXRCcmVha0FkanVzdG1l
bnQgPSAwKTsKKyAgICBib29sIGFkZEZvcmNlZFJlZ2lvbkJyZWFrKGNvbnN0IFJlbmRlckJsb2Nr
KiwgTGF5b3V0VW5pdCwgUmVuZGVyQm94KiBicmVha0NoaWxkLCBib29sIGlzQmVmb3JlLCBMYXlv
dXRVbml0KiBvZmZzZXRCcmVha0FkanVzdG1lbnQgPSAwKTsKICAgICB2b2lkIGFwcGx5QnJlYWtB
ZnRlckNvbnRlbnQoTGF5b3V0VW5pdCk7CiAKICAgICBib29sIHBhZ2VMb2dpY2FsU2l6ZUNoYW5n
ZWQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VMb2dpY2FsU2l6ZUNoYW5nZWQ7IH0KQEAgLTMyNiwx
NiArMzI2LDE4IEBAIHByb3RlY3RlZDoKICAgICBPd25QdHI8UmVnaW9uVG9MYXllckxpc3RNYXA+
IG1fcmVnaW9uVG9MYXllckxpc3RNYXA7CiAjZW5kaWYKIAotICAgIC8vIEEgbWFwcyBmcm9tIFJl
bmRlckJveAorICAgIC8vIE1hcCBhIGJveCB0byB0aGUgbGlzdCBvZiByZWdpb25zIGluIHdoaWNo
IHRoZSBib3ggaXMgcmVuZGVyZWQuCiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlckJv
eCosIFJlbmRlclJlZ2lvblJhbmdlPiBSZW5kZXJSZWdpb25SYW5nZU1hcDsKICAgICBSZW5kZXJS
ZWdpb25SYW5nZU1hcCBtX3JlZ2lvblJhbmdlTWFwOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFJl
bmRlck9iamVjdCosIFJlbmRlclJlZ2lvbio+IFJlbmRlck9iamVjdFRvUmVnaW9uTWFwOwotICAg
IFJlbmRlck9iamVjdFRvUmVnaW9uTWFwIG1fYnJlYWtCZWZvcmVUb1JlZ2lvbk1hcDsKLSAgICBS
ZW5kZXJPYmplY3RUb1JlZ2lvbk1hcCBtX2JyZWFrQWZ0ZXJUb1JlZ2lvbk1hcDsKKyAgICAvLyBN
YXAgYSBib3ggd2l0aCBhIHJlZ2lvbiBicmVhayB0byB0aGUgYXV0byBoZWlnaHQgcmVnaW9uIGFm
ZmVjdGVkIGJ5IHRoYXQgYnJlYWsuIAorICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJCb3gqLCBS
ZW5kZXJSZWdpb24qPiBSZW5kZXJCb3hUb1JlZ2lvbk1hcDsKKyAgICBSZW5kZXJCb3hUb1JlZ2lv
bk1hcCBtX2JyZWFrQmVmb3JlVG9SZWdpb25NYXA7CisgICAgUmVuZGVyQm94VG9SZWdpb25NYXAg
bV9icmVha0FmdGVyVG9SZWdpb25NYXA7CiAKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PGNvbnN0
IFJlbmRlck9iamVjdCo+IFJlbmRlck9iamVjdFN0YWNrOwogICAgIFJlbmRlck9iamVjdFN0YWNr
IG1fYWN0aXZlT2JqZWN0c1N0YWNrOworCiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRl
ckJveCosIExheW91dFVuaXQ+IFJlbmRlckJveFRvT2Zmc2V0TWFwOwogICAgIFJlbmRlckJveFRv
T2Zmc2V0TWFwIG1fYm94ZXNUb09mZnNldE1hcDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAppbmRleCAwY2Q5Mjg1ZDZkYjM4OWVh
ODVlMWRhNDA3M2YzYmE4YWU4ZjgxZDI1Li4xZGFjYmY2OWRiNzdiYmJiYWFkNWYxZTA1ZGE5NGM2
MDgxMWZjNTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFt
ZWRGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFt
ZWRGbG93VGhyZWFkLmNwcApAQCAtMTAwLDEwICsxMDAsNyBAQCB2b2lkIFJlbmRlck5hbWVkRmxv
d1RocmVhZDo6dXBkYXRlV3JpdGluZ01vZGUoKQogCiBSZW5kZXJPYmplY3QqIFJlbmRlck5hbWVk
Rmxvd1RocmVhZDo6bmV4dFJlbmRlcmVyRm9yTm9kZShOb2RlKiBub2RlKSBjb25zdAogewotICAg
IEZsb3dUaHJlYWRDaGlsZExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9mbG93VGhyZWFkQ2hp
bGRMaXN0LT5iZWdpbigpOwotICAgIEZsb3dUaHJlYWRDaGlsZExpc3Q6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fZmxvd1RocmVhZENoaWxkTGlzdC0+ZW5kKCk7Ci0KLSAgICBmb3IgKDsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgZm9yIChhdXRvIGl0ID0gbV9mbG93VGhyZWFkQ2hpbGRMaXN0LT5i
ZWdpbigpLCBlbmQgPSBtX2Zsb3dUaHJlYWRDaGlsZExpc3QtPmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9ICppdDsKICAgICAgICAgQVNTRVJU
KGNoaWxkLT5ub2RlKCkpOwogICAgICAgICB1bnNpZ25lZCBzaG9ydCBwb3NpdGlvbiA9IG5vZGUt
PmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGNoaWxkLT5ub2RlKCkpOwpAQCAtMTE5LDkgKzExNiw5
IEBAIFJlbmRlck9iamVjdCogUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpwcmV2aW91c1JlbmRlcmVy
Rm9yTm9kZShOb2RlKiBub2RlKSBjb25zdAogICAgIGlmIChtX2Zsb3dUaHJlYWRDaGlsZExpc3Qt
PmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBGbG93VGhyZWFkQ2hpbGRMaXN0
Ojpjb25zdF9pdGVyYXRvciBiZWdpbiA9IG1fZmxvd1RocmVhZENoaWxkTGlzdC0+YmVnaW4oKTsK
LSAgICBGbG93VGhyZWFkQ2hpbGRMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2Zsb3dUaHJl
YWRDaGlsZExpc3QtPmVuZCgpOwotICAgIEZsb3dUaHJlYWRDaGlsZExpc3Q6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gZW5kOworICAgIGF1dG8gYmVnaW4gPSBtX2Zsb3dUaHJlYWRDaGlsZExpc3QtPmJl
Z2luKCk7CisgICAgYXV0byBlbmQgPSBtX2Zsb3dUaHJlYWRDaGlsZExpc3QtPmVuZCgpOworICAg
IGF1dG8gaXQgPSBlbmQ7CiAKICAgICBkbyB7CiAgICAgICAgIC0taXQ7CkBAIC0xNjYsOSArMTYz
LDcgQEAgYm9vbCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmRlcGVuZHNPbihSZW5kZXJOYW1lZEZs
b3dUaHJlYWQqIG90aGVyUmVuZGVyRmxvd1RocmUKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICAvLyBSZWN1cnNpdmVseSB0cmF2ZXJzZSB0aGUgbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0Lgot
ICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZENvdW50ZWRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJh
dG9yID0gbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0LmJlZ2luKCk7Ci0gICAgUmVuZGVyTmFtZWRG
bG93VGhyZWFkQ291bnRlZFNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9sYXlvdXRCZWZvcmVU
aHJlYWRzU2V0LmVuZCgpOwotICAgIGZvciAoOyBpdGVyYXRvciAhPSBlbmQ7ICsraXRlcmF0b3Ip
IHsKKyAgICBmb3IgKGF1dG8gaXRlcmF0b3IgPSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQuYmVn
aW4oKSwgZW5kID0gbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0LmVuZCgpOyBpdGVyYXRvciAhPSBl
bmQ7ICsraXRlcmF0b3IpIHsKICAgICAgICAgY29uc3QgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBi
ZWZvcmVGbG93VGhyZWFkID0gKCppdGVyYXRvcikua2V5OwogICAgICAgICBpZiAoYmVmb3JlRmxv
d1RocmVhZC0+ZGVwZW5kc09uKG90aGVyUmVuZGVyRmxvd1RocmVhZCkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTIzNSw3ICsyMzAsNyBAQCBzdGF0aWMgdm9pZCBhZGRSZWdpb25Ub0xp
c3QoUmVuZGVyUmVnaW9uTGlzdCYgcmVnaW9uTGlzdCwgUmVuZGVyUmVnaW9uKiByZW5kZXJSZQog
ICAgICAgICByZWdpb25MaXN0LmFkZChyZW5kZXJSZWdpb24pOwogICAgIGVsc2UgewogICAgICAg
ICAvLyBGaW5kIHRoZSBmaXJzdCByZWdpb24gImdyZWF0ZXIiIHRoYW4gcmVuZGVyUmVnaW9uLgot
ICAgICAgICBSZW5kZXJSZWdpb25MaXN0OjppdGVyYXRvciBpdCA9IHJlZ2lvbkxpc3QuYmVnaW4o
KTsKKyAgICAgICAgYXV0byBpdCA9IHJlZ2lvbkxpc3QuYmVnaW4oKTsKICAgICAgICAgd2hpbGUg
KGl0ICE9IHJlZ2lvbkxpc3QuZW5kKCkgJiYgIWNvbXBhcmVSZW5kZXJSZWdpb25zKHJlbmRlclJl
Z2lvbiwgKml0KSkKICAgICAgICAgICAgICsraXQ7CiAgICAgICAgIHJlZ2lvbkxpc3QuaW5zZXJ0
QmVmb3JlKGl0LCByZW5kZXJSZWdpb24pOwpAQCAtMzI5LDcgKzMyNCw3IEBAIHZvaWQgUmVuZGVy
TmFtZWRGbG93VGhyZWFkOjpjb21wdXRlT3ZlcnNldFN0YXRlRm9yUmVnaW9ucyhMYXlvdXRVbml0
IG9sZENsaWVudEFmCiAgICAgICAgIGhlaWdodCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyB2aXN1YWxPdmVyZmxvd1JlY3QoKS5tYXhZKCkgOiB2aXN1YWxPdmVyZmxvd1JlY3QoKS5tYXhY
KCk7CiAKICAgICBSZW5kZXJSZWdpb24qIGxhc3RSZWcgPSBsYXN0UmVnaW9uKCk7Ci0gICAgZm9y
IChSZW5kZXJSZWdpb25MaXN0OjppdGVyYXRvciBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCk7
IGl0ZXIgIT0gbV9yZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKKyAgICBmb3IgKGF1dG8gaXRl
ciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpLCBlbmQgPSBtX3JlZ2lvbkxpc3QuZW5kKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSAqaXRlcjsK
ICAgICAgICAgTGF5b3V0VW5pdCBmbG93TWluID0gaGVpZ2h0IC0gKGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyByZWdpb24tPmZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLnkoKSA6IHJlZ2lvbi0+
Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkueCgpKTsKICAgICAgICAgTGF5b3V0VW5pdCBmbG93TWF4
ID0gaGVpZ2h0IC0gKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByZWdpb24tPmZsb3dUaHJl
YWRQb3J0aW9uUmVjdCgpLm1heFkoKSA6IHJlZ2lvbi0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCku
bWF4WCgpKTsKQEAgLTM2Niw3ICszNjEsNyBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6
Y29tcHV0ZU92ZXJzZXRTdGF0ZUZvclJlZ2lvbnMoTGF5b3V0VW5pdCBvbGRDbGllbnRBZgogdm9p
ZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNoZWNrSW52YWxpZFJlZ2lvbnMoKQogewogICAgIFZl
Y3RvcjxSZW5kZXJSZWdpb24qPiBuZXdWYWxpZFJlZ2lvbnM7Ci0gICAgZm9yIChSZW5kZXJSZWdp
b25MaXN0OjppdGVyYXRvciBpdGVyID0gbV9pbnZhbGlkUmVnaW9uTGlzdC5iZWdpbigpOyBpdGVy
ICE9IG1faW52YWxpZFJlZ2lvbkxpc3QuZW5kKCk7ICsraXRlcikgeworICAgIGZvciAoYXV0byBp
dGVyID0gbV9pbnZhbGlkUmVnaW9uTGlzdC5iZWdpbigpLCBlbmQgPSBtX2ludmFsaWRSZWdpb25M
aXN0LmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIFJlbmRlclJlZ2lvbiog
cmVnaW9uID0gKml0ZXI7CiAgICAgICAgIC8vIFRoZSBvbmx5IHJlYXNvbiBhIHJlZ2lvbiB3b3Vs
ZCBiZSBpbnZhbGlkIGlzIGJlY2F1c2UgaXQgaGFzIGEgcGFyZW50IGZsb3cgdGhyZWFkLgogICAg
ICAgICBBU1NFUlQoIXJlZ2lvbi0+aXNWYWxpZCgpICYmIHJlZ2lvbi0+cGFyZW50TmFtZWRGbG93
VGhyZWFkKCkpOwpAQCAtMzc2LDcgKzM3MSw3IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFk
OjpjaGVja0ludmFsaWRSZWdpb25zKCkKICAgICAgICAgbmV3VmFsaWRSZWdpb25zLmFwcGVuZChy
ZWdpb24pOwogICAgIH0KIAotICAgIGZvciAoVmVjdG9yPFJlbmRlclJlZ2lvbio+OjppdGVyYXRv
ciBpdGVyID0gbmV3VmFsaWRSZWdpb25zLmJlZ2luKCk7IGl0ZXIgIT0gbmV3VmFsaWRSZWdpb25z
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICBmb3IgKGF1dG8gaXRlciA9IG5ld1ZhbGlkUmVnaW9ucy5i
ZWdpbigpLCBlbmQgPSBuZXdWYWxpZFJlZ2lvbnMuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
IHsKICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSAqaXRlcjsKICAgICAgICAgbV9pbnZh
bGlkUmVnaW9uTGlzdC5yZW1vdmUocmVnaW9uKTsKICAgICAgICAgcmVnaW9uLT5wYXJlbnROYW1l
ZEZsb3dUaHJlYWQoKS0+bV9vYnNlcnZlclRocmVhZHNTZXQucmVtb3ZlKHRoaXMpOwpAQCAtNDIx
LDcgKzQxNiw3IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpyZW1vdmVEZXBlbmRlbmN5
T25GbG93VGhyZWFkKFJlbmRlck5hbWVkRmxvd1RocmVhZCoKIAogdm9pZCBSZW5kZXJOYW1lZEZs
b3dUaHJlYWQ6OnB1c2hEZXBlbmRlbmNpZXMoUmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdCYgbGlz
dCkKIHsKLSAgICBmb3IgKFJlbmRlck5hbWVkRmxvd1RocmVhZENvdW50ZWRTZXQ6Oml0ZXJhdG9y
IGl0ZXIgPSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQuYmVnaW4oKTsgaXRlciAhPSBtX2xheW91
dEJlZm9yZVRocmVhZHNTZXQuZW5kKCk7ICsraXRlcikgeworICAgIGZvciAoYXV0byBpdGVyID0g
bV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0LmJlZ2luKCksIGVuZCA9IG1fbGF5b3V0QmVmb3JlVGhy
ZWFkc1NldC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSAoKml0ZXIpLmtleTsKICAgICAgICAgaWYgKGxpc3Qu
Y29udGFpbnMoZmxvd1RocmVhZCkpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKaW5kZXggZjI2YWVlZjY0MmJhYmY3NTZmOWVk
OTQ3ZTgzMTI4YTE0YjVkNmMwMC4uYjk3ZjI1M2I3OWE3MDEyMTlkMDMwYjhlMTIwOGYzM2ZjM2M0
NGUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKQEAgLTUx
Myw3ICs1MTMsNyBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6c2V0UmVnaW9uT2JqZWN0c1JlZ2lvblN0
eWxlKCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8vIElmIHRoZSBvYmplY3Qg
aGFzIHN0eWxlIGluIHJlZ2lvbiwgdXNlIHRoYXQgaW5zdGVhZCBvZiBjb21wdXRpbmcgYSBuZXcg
b25lLgotICAgICAgICBSZW5kZXJPYmplY3RSZWdpb25TdHlsZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmZpbmQob2JqZWN0KTsKKyAgICAgICAgYXV0byBpdCA9
IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuZmluZChvYmplY3QpOwogICAgICAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IG9iamVjdFN0eWxlSW5SZWdpb247CiAgICAgICAgIGJvb2wgb2JqZWN0UmVn
aW9uU3R5bGVDYWNoZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKGl0ICE9IG1fcmVuZGVyT2JqZWN0
UmVnaW9uU3R5bGUuZW5kKCkpIHsKQEAgLTUzNSw3ICs1MzUsNyBAQCB2b2lkIFJlbmRlclJlZ2lv
bjo6cmVzdG9yZVJlZ2lvbk9iamVjdHNPcmlnaW5hbFN0eWxlKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgUmVuZGVyT2JqZWN0UmVnaW9uU3R5bGVNYXAgdGVtcDsKLSAgICBmb3IgKFJlbmRlck9i
amVjdFJlZ2lvblN0eWxlTWFwOjppdGVyYXRvciBpdGVyID0gbV9yZW5kZXJPYmplY3RSZWdpb25T
dHlsZS5iZWdpbigpLCBlbmQgPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmVuZCgpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlbmRlck9iamVjdFJl
Z2lvblN0eWxlLmJlZ2luKCksIGVuZCA9IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuZW5kKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBj
b25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGl0ZXItPmtleSk7CiAgICAgICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gb2JqZWN0UmVnaW9uU3R5bGUgPSAmb2JqZWN0LT5zdHlsZSgpOwogICAgICAgICBS
ZWZQdHI8UmVuZGVyU3R5bGU+IG9iamVjdE9yaWdpbmFsU3R5bGUgPSBpdGVyLT52YWx1ZS5zdHls
ZTsKQEAgLTU5Miw3ICs1OTIsNyBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6Y29tcHV0ZUNoaWxkcmVu
U3R5bGVJblJlZ2lvbihjb25zdCBSZW5kZXJFbGVtZW50KiBvYmplY3QpCiB7CiAgICAgZm9yIChS
ZW5kZXJPYmplY3QqIGNoaWxkID0gb2JqZWN0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAKLSAgICAgICAgUmVuZGVyT2JqZWN0UmVnaW9uU3R5
bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZW5kZXJPYmplY3RSZWdpb25TdHlsZS5maW5kKGNoaWxk
KTsKKyAgICAgICAgYXV0byBpdCA9IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuZmluZChjaGls
ZCk7CiAKICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjaGlsZFN0eWxlSW5SZWdpb247CiAg
ICAgICAgIGJvb2wgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSBmYWxzZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>