<?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>191358</bug_id>
          
          <creation_ts>2018-11-07 06:17:22 -0800</creation_ts>
          <short_desc>[css-grid] Refactoring to make more explicit the orthogonal items&apos; pre-layout logic</short_desc>
          <delta_ts>2018-11-12 16:34:22 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Javier Fernandez">jfernandez</reporter>
          <assigned_to name="Javier Fernandez">jfernandez</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jfernandez</cc>
    
    <cc>rego</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1475966</commentid>
    <comment_count>0</comment_count>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2018-11-07 06:17:22 -0800</bug_when>
    <thetext>We need to adapt the code to integrate later the new Baseline Alignment logic, which in latest spec it was included as part of the Track Sizing algorithm. 

Orthogonal items must be laid out using a properly estimated grid area, since the result of this pre-layout may affect during the baseline offsets computation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475968</commentid>
    <comment_count>1</comment_count>
      <attachid>354085</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2018-11-07 06:25:37 -0800</bug_when>
    <thetext>Created attachment 354085
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476836</commentid>
    <comment_count>2</comment_count>
      <attachid>354085</attachid>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2018-11-09 01:53:28 -0800</bug_when>
    <thetext>Comment on attachment 354085
Patch

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

LGTM, but I added some minor comments inline.

&gt; Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp:602
&gt; +bool GridTrackSizingAlgorithm::isRelativeSizedTrackAsAuto(const GridTrackSize&amp; trackSize, GridTrackSizingDirection direction) const

This method is only used in one place, do we really need it? We call it and later we recheck the percentages things, I&apos;m not sure if it&apos;s really adding any value.

&gt; Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp:626
&gt; +    if (isRelativeSizedTrackAsAuto(trackSize, direction)) {

I&apos;d just modify this to something like:
  if (!availableSpace(direction)) {
    if (minTrackBreadth.isPercentage())
      minTrackBreadth = Length(Auto);
    if (maxTrackBreadth.isPercentage())
      maxTrackBreadth = Length(Auto);
  }

&gt; Source/WebCore/rendering/GridTrackSizingAlgorithm.h:172
&gt; +    // Data

Is this comment really useful? If you want to keep it add a &quot;.&quot; at the end. :-)

&gt; Source/WebCore/rendering/RenderGrid.cpp:205
&gt; +            // Grid&apos;s layout logic controls the grid item&apos;s override height, hence
&gt; +            // we need to clear any override height set previously, so it doesn&apos;t
&gt; +            // interfere in current layout execution.
&gt; +            // Grid never uses the override width, that&apos;s why we don&apos;t need to clear
&gt; +            // it.

Nit: You don&apos;t need to line wrap so hard :-)

&gt; Source/WebCore/rendering/RenderGrid.cpp:209
&gt; +            // We may need to repeat the track sizing in case of any grid item was
&gt; +            // orthogonal.

Ditto about line wrapping.

&gt; Source/WebCore/rendering/RenderGrid.cpp:648
&gt; +    // FIXME(jfernandez): We need a way when we are calling this during intrinsic size compuation before performing

Mmm, it seems some word is missing in this sentence.
Nit: Don&apos;t remember if this FIXME(jfernandez) is common in WebKit, or just a simple FIXME.

&gt; Source/WebCore/rendering/RenderGrid.cpp:890
&gt; +    // Because the grid area cannot be styled, we don&apos;t need to adjust
&gt; +    // the grid breadth to account for &apos;box-sizing&apos;.

Nit: More line wrapping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477418</commentid>
    <comment_count>3</comment_count>
      <attachid>354085</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2018-11-11 16:09:09 -0800</bug_when>
    <thetext>Comment on attachment 354085
Patch

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

&gt;&gt; Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp:602
&gt;&gt; +bool GridTrackSizingAlgorithm::isRelativeSizedTrackAsAuto(const GridTrackSize&amp; trackSize, GridTrackSizingDirection direction) const
&gt; 
&gt; This method is only used in one place, do we really need it? We call it and later we recheck the percentages things, I&apos;m not sure if it&apos;s really adding any value.

Well, this patch is just a refactoring needed to a follow-up patch to implement the new Baseline Alignment logic. In the next patches, I&apos;ll use this function again. 

I think it&apos;s useful to have this function, which is auto-explained and avoid the need of additional code comments.

&gt;&gt; Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp:626
&gt;&gt; +    if (isRelativeSizedTrackAsAuto(trackSize, direction)) {
&gt; 
&gt; I&apos;d just modify this to something like:
&gt;   if (!availableSpace(direction)) {
&gt;     if (minTrackBreadth.isPercentage())
&gt;       minTrackBreadth = Length(Auto);
&gt;     if (maxTrackBreadth.isPercentage())
&gt;       maxTrackBreadth = Length(Auto);
&gt;   }

I don&apos;t think this code improves current logic; also, as I commented above, I&apos;d rather keep using the new function.

&gt;&gt; Source/WebCore/rendering/GridTrackSizingAlgorithm.h:172
&gt;&gt; +    // Data
&gt; 
&gt; Is this comment really useful? If you want to keep it add a &quot;.&quot; at the end. :-)

Well, we have similar comments all over this header file, so I think is, at least, consistent with current codebase.

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:205
&gt;&gt; +            // it.
&gt; 
&gt; Nit: You don&apos;t need to line wrap so hard :-)

ok

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:648
&gt;&gt; +    // FIXME(jfernandez): We need a way when we are calling this during intrinsic size compuation before performing
&gt; 
&gt; Mmm, it seems some word is missing in this sentence.
&gt; Nit: Don&apos;t remember if this FIXME(jfernandez) is common in WebKit, or just a simple FIXME.

OK

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:890
&gt;&gt; +    // the grid breadth to account for &apos;box-sizing&apos;.
&gt; 
&gt; Nit: More line wrapping.

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477419</commentid>
    <comment_count>4</comment_count>
      <attachid>354514</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2018-11-11 16:11:57 -0800</bug_when>
    <thetext>Created attachment 354514
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477496</commentid>
    <comment_count>5</comment_count>
      <attachid>354514</attachid>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2018-11-12 00:29:20 -0800</bug_when>
    <thetext>Comment on attachment 354514
Patch

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

&gt; Source/WebCore/rendering/GridTrackSizingAlgorithm.cpp:605
&gt; +        return isRelativeGridLengthAsAuto(trackSize.minTrackBreadth(), direction);

I&apos;m still not fully convinced of this. We know it&apos;s a percentage but we still check it again in isRelativeGridLengthAsAuto(), do we really need to do it twice?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477511</commentid>
    <comment_count>6</comment_count>
      <attachid>354539</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2018-11-12 02:15:40 -0800</bug_when>
    <thetext>Created attachment 354539
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477788</commentid>
    <comment_count>7</comment_count>
      <attachid>354539</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-12 16:31:58 -0800</bug_when>
    <thetext>Comment on attachment 354539
Patch

Clearing flags on attachment: 354539

Committed r238114: &lt;https://trac.webkit.org/changeset/238114&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477789</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-12 16:31:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477791</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-11-12 16:34:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/46009086&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354085</attachid>
            <date>2018-11-07 06:25:37 -0800</date>
            <delta_ts>2018-11-11 16:11:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191358-20181107152536.patch</filename>
            <type>text/plain</type>
            <size>30341</size>
            <attacher name="Javier Fernandez">jfernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3OTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODJjZjExM2NiYTI4ZTIy
NTc4Mzc2YWU4ZjExNWEyYWYxNTdhYWUwOC4uZjEzZDczZGI4ZmE5NjZmYWI3ZWQ5ZjE2YzUwNTI1
ZGVhNDZjNDAxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE4LTExLTA3ICBKYXZp
ZXIgRmVybmFuZGV6ICA8amZlcm5hbmRlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gUmVmYWN0b3JpbmcgdG8gbWFrZSBtb3JlIGV4cGxpY2l0IHRoZSBvcnRob2dvbmFsIGl0ZW1z
JyBwcmUtbGF5b3V0IGxvZ2ljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTEzNTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGVzZSBjaGFuZ2VzIGFyZSBqdXN0IGEgcmVmYWN0b3JpbmcgdG8gZWFzZSB0
aGUgaW50ZWdyYXRpb24gb2YgdGhlIG5ldyBCYXNlbGluZSBBbGlnbm1lbnQKKyAgICAgICAgbG9n
aWMgaW4gYSBmb2xsb3cgdXAgcGF0Y2guCisKKyAgICAgICAgV2UgbmVlZCB0byBwcm9wZXJseSBl
c3RpbWF0ZSB0aGUgZ3JpZCBhcmVhIHNpemUgb2Ygb3J0aG9nb25hbCBpdGVtcyBzbyB0aGF0IHdl
IGNhbiBwZXJmb3JtCisgICAgICAgIGFuIGFjY3VyYXRlIHByZS1sYXlvdXQuIFRoaXMgaXMgaW1w
b3J0YW50IGJlY2F1c2Ugb3J0aG9nb25hbCBpdGVtcyB3aWxsIHN5bnRoZXNpemUgdGhlaXIgYmFz
ZWxpbmUKKyAgICAgICAgaWYgdGhleSBwYXJ0aWNpcGF0ZSBpbiBhbnkgYmFzZWxpbmUgYWxpZ25t
ZW50IGNvbnRleHQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBzaW5jZSBubyBiZWhhdmlvciBj
aGFuZ2UgaGFzIGJlZW4gaW50cm9kdWNlZCBpbiB0aGlzIHBhdGNoLgorCisgICAgICAgICogcmVu
ZGVyaW5nL0dyaWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JpZDo6c2V0TmVlZHNJdGVtc1Bs
YWNlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL0dyaWQuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRU
cmFja1NpemluZ0FsZ29yaXRobTo6ZXN0aW1hdGVkR3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpncmlkQXJl
YUJyZWFkdGhGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG06OmlzUmVsYXRpdmVHcmlkTGVuZ3RoQXNBdXRvIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6aXNSZWxhdGl2ZVNpemVkVHJhY2tB
c0F1dG8gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
OjpncmlkVHJhY2tTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkluZGVmaW5pdGVTaXpl
U3RyYXRlZ3k6OmZpbmRVc2VkRmxleEZyYWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6cnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRU
cmFja1NpemluZ0FsZ29yaXRobTo6cmVzZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9HcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1NpemluZ0Fs
Z29yaXRobVN0cmF0ZWd5OjpncmlkVHJhY2tTaXplIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpyZXBlYXRU
cmFja3NTaXppbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpsYXlv
dXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpjb21wdXRlSW50cmluc2lj
TG9naWNhbFdpZHRocyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpjb21w
dXRlVHJhY2tTaXplc0ZvckluZGVmaW5pdGVTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckdyaWQ6OnBsYWNlSXRlbXNPbkdyaWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyR3JpZDo6cGVyZm9ybUdyaWRJdGVtc1ByZUxheW91dCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpvdmVycmlkZVNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Omhhc1JlbGF0
aXZlQmxvY2tBeGlzU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjp1cGRhdGVH
cmlkQXJlYUxvZ2ljYWxTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6
OmxheW91dEdyaWRJdGVtcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuaDoKKwog
MjAxOC0xMS0wNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFNlcnZpY2VXb3JrZXIgSW5zcGVjdG9yOiBVbmNhdWdodCBFeGNlcHRpb246IG51bGwgaXMg
bm90IGFuIG9iamVjdCAoZXZhbHVhdGluZyAncmVzb3VyY2UudGFyZ2V0LmFkZFJlc291cmNlJykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9HcmlkLmNwcAppbmRleCA5MWUzMzU4ODMzZmI5NTFmMTc5MmRkMzgy
YjYzMjg2NjhjODU2NDQxLi5jNzJkMDFkODFjN2Q3MTY2MTU3OWUzYmEwMTgzMGU0MjlkMzBmNjg4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuY3BwCkBAIC0xNTcsNyArMTU3LDYgQEAgdm9pZCBH
cmlkOjpzZXROZWVkc0l0ZW1zUGxhY2VtZW50KGJvb2wgbmVlZHNJdGVtc1BsYWNlbWVudCkKIAog
ICAgIG1fZ3JpZC5zaHJpbmsoMCk7CiAgICAgbV9ncmlkSXRlbUFyZWEuY2xlYXIoKTsKLSAgICBt
X2hhc0FueU9ydGhvZ29uYWxHcmlkSXRlbSA9IGZhbHNlOwogICAgIG1fc21hbGxlc3RSb3dTdGFy
dCA9IDA7CiAgICAgbV9zbWFsbGVzdENvbHVtblN0YXJ0ID0gMDsKICAgICBtX2F1dG9SZXBlYXRF
bXB0eUNvbHVtbnMgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0dyaWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmgKaW5kZXggMmM3ZDk4
MWU3OGM5NTExNzI1NmQ5ZDY1OTg0MGQ1ZDc2Mjc0NjI2ZS4uOTMwOTgxNGZhMWJiYWVjMjZjZWQ5
MDhhZGM5ZDZhODllNzQxMWYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0dyaWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5oCkBAIC01MywxMCAr
NTMsNiBAQCBwdWJsaWM6CiAgICAgLy8gdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gZmFsc2UgZm9y
IGEgZ3JpZCBjb250YWluZXIgd2l0aCBvbmx5IG91dCBvZiBmbG93IGNoaWxkcmVuLgogICAgIGJv
b2wgaGFzR3JpZEl0ZW1zKCkgY29uc3QgeyByZXR1cm4gIW1fZ3JpZEl0ZW1BcmVhLmlzRW1wdHko
KTsgfQogCi0gICAgLy8gRklYTUU6IG1vdmUgdGhpcyB0byBTaXppbmdEYXRhIG9uY2UgcGxhY2VJ
dGVtc09uR3JpZCgpIHRha2VzIGl0IGFzIGFyZ3VtZW50LgotICAgIGJvb2wgaGFzQW55T3J0aG9n
b25hbEdyaWRJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9oYXNBbnlPcnRob2dvbmFsR3JpZEl0ZW07
IH0KLSAgICB2b2lkIHNldEhhc0FueU9ydGhvZ29uYWxHcmlkSXRlbShib29sIGhhc0FueU9ydGhv
Z29uYWxHcmlkSXRlbSkgeyBtX2hhc0FueU9ydGhvZ29uYWxHcmlkSXRlbSA9IGhhc0FueU9ydGhv
Z29uYWxHcmlkSXRlbTsgfQotCiAgICAgR3JpZEFyZWEgZ3JpZEl0ZW1BcmVhKGNvbnN0IFJlbmRl
ckJveCYgaXRlbSkgY29uc3Q7CiAgICAgdm9pZCBzZXRHcmlkSXRlbUFyZWEoY29uc3QgUmVuZGVy
Qm94JiBpdGVtLCBHcmlkQXJlYSk7CiAKQEAgLTk1LDcgKzkxLDYgQEAgcHJpdmF0ZToKICAgICB1
bnNpZ25lZCBtX2F1dG9SZXBlYXRDb2x1bW5zIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fYXV0b1Jl
cGVhdFJvd3MgeyAwIH07CiAKLSAgICBib29sIG1faGFzQW55T3J0aG9nb25hbEdyaWRJdGVtIHsg
ZmFsc2UgfTsKICAgICBib29sIG1fbmVlZHNJdGVtc1BsYWNlbWVudCB7IHRydWUgfTsKIAogICAg
IEdyaWRBc01hdHJpeCBtX2dyaWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwCmluZGV4IDFmNzIxNDcyNDhkMTk2M2NmOGE2
MmJjZjRjODZhMjE3OGJmNDNhMTEuLmRjZTQxOTUzNGNjOGViYTk5YWJmMzk0NTM3MmRhYTU3YmNl
ZTNlMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tT
aXppbmdBbGdvcml0aG0uY3BwCkBAIC01MzMsMjQgKzUzMywzNSBAQCB2b2lkIEdyaWRUcmFja1Np
emluZ0FsZ29yaXRobTo6ZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3MoVmVjdG9yPEdyaWRUcmFjayo+
JiB0cmFjawogICAgICAgICB0cmFjay0+c2V0UGxhbm5lZFNpemUodHJhY2stPnBsYW5uZWRTaXpl
KCkgPT0gaW5maW5pdHkgPyB0cmFjay0+dGVtcFNpemUoKSA6IHN0ZDo6bWF4KHRyYWNrLT5wbGFu
bmVkU2l6ZSgpLCB0cmFjay0+dGVtcFNpemUoKSkpOwogfQogCi1MYXlvdXRVbml0IEdyaWRUcmFj
a1NpemluZ0FsZ29yaXRobTo6YXNzdW1lZFJvd3NTaXplRm9yT3J0aG9nb25hbENoaWxkKGNvbnN0
IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CitMYXlvdXRTaXplIEdyaWRUcmFja1NpemluZ0FsZ29y
aXRobTo6ZXN0aW1hdGVkR3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBj
aGlsZCkgY29uc3QKIHsKLSAgICBBU1NFUlQoR3JpZExheW91dEZ1bmN0aW9uczo6aXNPcnRob2dv
bmFsQ2hpbGQoKm1fcmVuZGVyR3JpZCwgY2hpbGQpKTsKLSAgICBjb25zdCBHcmlkU3BhbiYgc3Bh
biA9IG1fZ3JpZC5ncmlkSXRlbVNwYW4oY2hpbGQsIEZvclJvd3MpOworICAgIHJldHVybiB7ZXN0
aW1hdGVkR3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQoY2hpbGQsIEZvckNvbHVtbnMpLCBlc3RpbWF0
ZWRHcmlkQXJlYUJyZWFkdGhGb3JDaGlsZChjaGlsZCwgRm9yUm93cyl9OworfQorCitMYXlvdXRV
bml0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6ZXN0aW1hdGVkR3JpZEFyZWFCcmVhZHRoRm9y
Q2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbikgY29uc3QKK3sKKyAgICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9IG1fZ3JpZC5ncmlk
SXRlbVNwYW4oY2hpbGQsIGRpcmVjdGlvbik7CiAgICAgTGF5b3V0VW5pdCBncmlkQXJlYVNpemU7
CiAgICAgYm9vbCBncmlkQXJlYUlzSW5kZWZpbml0ZSA9IGZhbHNlOwotICAgIExheW91dFVuaXQg
Y29udGFpbmluZ0Jsb2NrQXZhaWxhYmxlU2l6ZSA9IG1fcmVuZGVyR3JpZC0+Y29udGFpbmluZ0Js
b2NrTG9naWNhbEhlaWdodEZvckNvbnRlbnQoRXhjbHVkZU1hcmdpbkJvcmRlclBhZGRpbmcpOwor
ICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gYXZhaWxhYmxlU2l6ZSA9IGF2YWlsYWJsZVNw
YWNlKGRpcmVjdGlvbik7CiAgICAgZm9yIChhdXRvIHRyYWNrUG9zaXRpb24gOiBzcGFuKSB7Ci0g
ICAgICAgIEdyaWRMZW5ndGggbWF4VHJhY2tTaXplID0gZ3JpZFRyYWNrU2l6ZShGb3JSb3dzLCB0
cmFja1Bvc2l0aW9uKS5tYXhUcmFja0JyZWFkdGgoKTsKLSAgICAgICAgaWYgKG1heFRyYWNrU2l6
ZS5pc0NvbnRlbnRTaXplZCgpIHx8IG1heFRyYWNrU2l6ZS5pc0ZsZXgoKSkKKyAgICAgICAgLy8g
V2UgbWF5IG5lZWQgdG8gZXN0aW1hdGUgdGhlIGdyaWQgYXJlYSBzaXplIGJlZm9yZSBydW5uaW5n
IHRoZSB0cmFjaworICAgICAgICAvLyBzaXppbmcgYWxnb3JpdGhtIGluIG9yZGVyIHRvIHBlcmZv
cm0gdGhlIHByZS1sYXlvdXQgb2Ygb3J0aG9nb25hbAorICAgICAgICAvLyBpdGVtcy4KKyAgICAg
ICAgR3JpZFRyYWNrU2l6ZSB0cmFja1NpemUgPSB3YXNTZXR1cCgpID8gZ3JpZFRyYWNrU2l6ZShk
aXJlY3Rpb24sIHRyYWNrUG9zaXRpb24pIDogcmF3R3JpZFRyYWNrU2l6ZShkaXJlY3Rpb24sIHRy
YWNrUG9zaXRpb24pOworICAgICAgICBHcmlkTGVuZ3RoIG1heFRyYWNrU2l6ZSA9IHRyYWNrU2l6
ZS5tYXhUcmFja0JyZWFkdGgoKTsKKyAgICAgICAgaWYgKG1heFRyYWNrU2l6ZS5pc0NvbnRlbnRT
aXplZCgpIHx8IG1heFRyYWNrU2l6ZS5pc0ZsZXgoKSB8fCBpc1JlbGF0aXZlR3JpZExlbmd0aEFz
QXV0byhtYXhUcmFja1NpemUsIGRpcmVjdGlvbikpCiAgICAgICAgICAgICBncmlkQXJlYUlzSW5k
ZWZpbml0ZSA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdyaWRBcmVhU2l6ZSAr
PSB2YWx1ZUZvckxlbmd0aChtYXhUcmFja1NpemUubGVuZ3RoKCksIGNvbnRhaW5pbmdCbG9ja0F2
YWlsYWJsZVNpemUpOworICAgICAgICAgICAgZ3JpZEFyZWFTaXplICs9IHZhbHVlRm9yTGVuZ3Ro
KG1heFRyYWNrU2l6ZS5sZW5ndGgoKSwgYXZhaWxhYmxlU2l6ZS52YWx1ZV9vcihMYXlvdXRVbml0
KCkpKTsKICAgICB9CiAKLSAgICBncmlkQXJlYVNpemUgKz0gbV9yZW5kZXJHcmlkLT5ndXR0ZXJz
U2l6ZShtX2dyaWQsIEZvclJvd3MsIHNwYW4uc3RhcnRMaW5lKCksIHNwYW4uaW50ZWdlclNwYW4o
KSwgYXZhaWxhYmxlU3BhY2UoRm9yUm93cykpOworICAgIGdyaWRBcmVhU2l6ZSArPSBtX3JlbmRl
ckdyaWQtPmd1dHRlcnNTaXplKG1fZ3JpZCwgZGlyZWN0aW9uLCBzcGFuLnN0YXJ0TGluZSgpLCBz
cGFuLmludGVnZXJTcGFuKCksIGF2YWlsYWJsZVNpemUpOwogCi0gICAgcmV0dXJuIGdyaWRBcmVh
SXNJbmRlZmluaXRlID8gc3RkOjptYXgoY2hpbGQubWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCks
IGdyaWRBcmVhU2l6ZSkgOiBncmlkQXJlYVNpemU7CisgICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uIGNoaWxkSW5saW5lRGlyZWN0aW9uID0gR3JpZExheW91dEZ1bmN0aW9uczo6Zmxvd0F3YXJl
RGlyZWN0aW9uRm9yQ2hpbGQoKm1fcmVuZGVyR3JpZCwgY2hpbGQsIEZvckNvbHVtbnMpOworICAg
IGlmIChncmlkQXJlYUlzSW5kZWZpbml0ZSkKKyAgICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBj
aGlsZElubGluZURpcmVjdGlvbiA/IHN0ZDo6bWF4KGNoaWxkLm1heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCgpLCBncmlkQXJlYVNpemUpIDogTGF5b3V0VW5pdCgtMSk7CisgICAgcmV0dXJuIGdyaWRB
cmVhU2l6ZTsKIH0KIAogTGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmdyaWRB
cmVhQnJlYWR0aEZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CkBAIC01NjUsNyArNTc2LDcgQEAgTGF5b3V0VW5p
dCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmdyaWRBcmVhQnJlYWR0aEZvckNoaWxkKGNvbnN0
IFJlbmRlckJveCYgY2gKICAgICAgICAgLy8gRklYTUUgKGpmZXJuYW5kZXopIENvbnRlbnQgQWxp
Z25tZW50IHNob3VsZCBhY2NvdW50IGZvciB0aGlzIGhldXJpc3RpYy4KICAgICAgICAgLy8gaHR0
cHM6Ly9naXRodWIuY29tL3czYy9jc3N3Zy1kcmFmdHMvaXNzdWVzLzI2OTcKICAgICAgICAgaWYg
KG1fc2l6aW5nU3RhdGUgPT0gQ29sdW1uU2l6aW5nRmlyc3RJdGVyYXRpb24pCi0gICAgICAgICAg
ICByZXR1cm4gYXNzdW1lZFJvd3NTaXplRm9yT3J0aG9nb25hbENoaWxkKGNoaWxkKTsKKyAgICAg
ICAgICAgIHJldHVybiBlc3RpbWF0ZWRHcmlkQXJlYUJyZWFkdGhGb3JDaGlsZChjaGlsZCwgRm9y
Um93cyk7CiAgICAgICAgIGFkZENvbnRlbnRBbGlnbm1lbnRPZmZzZXQgPSB0cnVlOwogICAgIH0K
IApAQCAtNTgzLDggKzU5NCwyMyBAQCBMYXlvdXRVbml0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRo
bTo6Z3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaAogICAgIHJldHVy
biBncmlkQXJlYUJyZWFkdGg7CiB9CiAKK2Jvb2wgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpp
c1JlbGF0aXZlR3JpZExlbmd0aEFzQXV0byhjb25zdCBHcmlkTGVuZ3RoJiBsZW5ndGgsIEdyaWRU
cmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIGxlbmd0
aC5pc1BlcmNlbnRhZ2UoKSAmJiAhYXZhaWxhYmxlU3BhY2UoZGlyZWN0aW9uKTsKK30KKworYm9v
bCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmlzUmVsYXRpdmVTaXplZFRyYWNrQXNBdXRvKGNv
bnN0IEdyaWRUcmFja1NpemUmIHRyYWNrU2l6ZSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbikgY29uc3QKK3sKKyAgICBpZiAodHJhY2tTaXplLm1pblRyYWNrQnJlYWR0aCgpLmlz
UGVyY2VudGFnZSgpKQorICAgICAgICByZXR1cm4gaXNSZWxhdGl2ZUdyaWRMZW5ndGhBc0F1dG8o
dHJhY2tTaXplLm1pblRyYWNrQnJlYWR0aCgpLCBkaXJlY3Rpb24pOworICAgIGlmICh0cmFja1Np
emUubWF4VHJhY2tCcmVhZHRoKCkuaXNQZXJjZW50YWdlKCkpCisgICAgICAgIHJldHVybiBpc1Jl
bGF0aXZlR3JpZExlbmd0aEFzQXV0byh0cmFja1NpemUubWF4VHJhY2tCcmVhZHRoKCksIGRpcmVj
dGlvbik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBHcmlkVHJhY2tTaXplIEdyaWRUcmFja1Np
emluZ0FsZ29yaXRobTo6Z3JpZFRyYWNrU2l6ZShHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGly
ZWN0aW9uLCB1bnNpZ25lZCB0cmFuc2xhdGVkSW5kZXgpIGNvbnN0CiB7CisgICAgQVNTRVJUKHdh
c1NldHVwKCkpOwogICAgIC8vIENvbGxhcHNlIGVtcHR5IGF1dG8gcmVwZWF0IHRyYWNrcyBpZiBh
dXRvLWZpdC4KICAgICBpZiAobV9ncmlkLmhhc0F1dG9SZXBlYXRFbXB0eVRyYWNrcyhkaXJlY3Rp
b24pICYmIG1fZ3JpZC5pc0VtcHR5QXV0b1JlcGVhdFRyYWNrKGRpcmVjdGlvbiwgdHJhbnNsYXRl
ZEluZGV4KSkKICAgICAgICAgcmV0dXJuIHsgTGVuZ3RoKEZpeGVkKSwgTGVuZ3RoVHJhY2tTaXpp
bmcgfTsKQEAgLTU5NSwxMCArNjIxLDkgQEAgR3JpZFRyYWNrU2l6ZSBHcmlkVHJhY2tTaXppbmdB
bGdvcml0aG06OmdyaWRUcmFja1NpemUoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGQKIAogICAg
IEdyaWRMZW5ndGggbWluVHJhY2tCcmVhZHRoID0gdHJhY2tTaXplLm1pblRyYWNrQnJlYWR0aCgp
OwogICAgIEdyaWRMZW5ndGggbWF4VHJhY2tCcmVhZHRoID0gdHJhY2tTaXplLm1heFRyYWNrQnJl
YWR0aCgpOwotCi0gICAgLy8gRklYTUU6IEVuc3VyZSB0aGlzIGNvbmRpdGlvbiBmb3IgZGV0ZXJt
aW5pbmcgd2hldGhlciBhIHNpemUgaXMgaW5kZWZpbml0ZSBvciBub3QgaXMgd29ya2luZwotICAg
IC8vIGNvcnJlY3RseSBmb3Igb3J0aG9nb25hbCBmbG93cy4KLSAgICBpZiAoIWF2YWlsYWJsZVNw
YWNlKGRpcmVjdGlvbikgJiYgKG1pblRyYWNrQnJlYWR0aC5pc1BlcmNlbnRhZ2UoKSB8fCBtYXhU
cmFja0JyZWFkdGguaXNQZXJjZW50YWdlKCkpKSB7CisgICAgLy8gSWYgdGhlIGxvZ2ljYWwgd2lk
dGgvaGVpZ2h0IG9mIHRoZSBncmlkIGNvbnRhaW5lciBpcyBpbmRlZmluaXRlLCBwZXJjZW50YWdl
CisgICAgLy8gdmFsdWVzIGFyZSB0cmVhdGVkIGFzIDxhdXRvPi4KKyAgICBpZiAoaXNSZWxhdGl2
ZVNpemVkVHJhY2tBc0F1dG8odHJhY2tTaXplLCBkaXJlY3Rpb24pKSB7CiAgICAgICAgIGlmICht
aW5UcmFja0JyZWFkdGguaXNQZXJjZW50YWdlKCkpCiAgICAgICAgICAgICBtaW5UcmFja0JyZWFk
dGggPSBMZW5ndGgoQXV0byk7CiAgICAgICAgIGlmIChtYXhUcmFja0JyZWFkdGguaXNQZXJjZW50
YWdlKCkpCkBAIC04NDEsNyArODY2LDcgQEAgZG91YmxlIEluZGVmaW5pdGVTaXplU3RyYXRlZ3k6
OmZpbmRVc2VkRmxleEZyYWN0aW9uKFZlY3Rvcjx1bnNpZ25lZD4mIGZsZXhpYmxlU2kKICAgICBm
b3IgKGNvbnN0IGF1dG8mIHRyYWNrSW5kZXggOiBmbGV4aWJsZVNpemVkVHJhY2tzSW5kZXgpIHsK
ICAgICAgICAgLy8gRklYTUU6IHdlIHBhc3MgVHJhY2tTaXppbmcgdG8gZ3JpZFRyYWNrU2l6ZSgp
IGJlY2F1c2UgaXQgZG9lcyBub3QgcmVhbGx5IG1hdHRlcgogICAgICAgICAvLyBhcyB3ZSBrbm93
IHRoZSB0cmFjayBpcyBhIGZsZXggc2l6ZWQgdHJhY2suIEl0J2QgYmUgbmljZSBub3QgdG8gaGF2
ZSB0byBkbyB0aGF0LgotICAgICAgICBmbGV4RnJhY3Rpb24gPSBzdGQ6Om1heChmbGV4RnJhY3Rp
b24sIG5vcm1hbGl6ZWRGbGV4RnJhY3Rpb24oYWxsVHJhY2tzW3RyYWNrSW5kZXhdLCBtX2FsZ29y
aXRobS5ncmlkVHJhY2tTaXplKGRpcmVjdGlvbiwgdHJhY2tJbmRleCkubWF4VHJhY2tCcmVhZHRo
KCkuZmxleCgpKSk7CisgICAgICAgIGZsZXhGcmFjdGlvbiA9IHN0ZDo6bWF4KGZsZXhGcmFjdGlv
biwgbm9ybWFsaXplZEZsZXhGcmFjdGlvbihhbGxUcmFja3NbdHJhY2tJbmRleF0sIGdyaWRUcmFj
a1NpemUoZGlyZWN0aW9uLCB0cmFja0luZGV4KS5tYXhUcmFja0JyZWFkdGgoKS5mbGV4KCkpKTsK
ICAgICB9CiAKICAgICBjb25zdCBHcmlkJiBncmlkID0gbV9hbGdvcml0aG0uZ3JpZCgpOwpAQCAt
MTE2NCw2ICsxMTg5LDcgQEAgdm9pZCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OnNldHVwKEdy
aWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIHVuc2lnbmUKIAogdm9pZCBHcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG06OnJ1bigpCiB7CisgICAgQVNTRVJUKHdhc1NldHVwKCkpOwogICAg
IFN0YXRlTWFjaGluZSBzdGF0ZU1hY2hpbmUoKnRoaXMpOwogCiAgICAgLy8gU3RlcCAxLgpAQCAt
MTE5Nyw2ICsxMjIzLDcgQEAgdm9pZCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OnJ1bigpCiAK
IHZvaWQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpyZXNldCgpCiB7CisgICAgQVNTRVJUKHdh
c1NldHVwKCkpOwogICAgIG1fc2l6aW5nU3RhdGUgPSBDb2x1bW5TaXppbmdGaXJzdEl0ZXJhdGlv
bjsKICAgICBtX2NvbHVtbnMuc2hyaW5rKDApOwogICAgIG1fcm93cy5zaHJpbmsoMCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmgK
aW5kZXggNzI1ZjRhMDU2OWYzZTZlMjQ4ZTczMjgxZWFmZjYwNjUwYWQ2NTM5My4uZGM3MjJmYzU4
MGU0NjAwNjM3ZTRhOTBiMWI1NmYzOWI3MTg4NWQxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uaApAQCAtMTAyLDExICsxMDIs
MTUgQEAgcHVibGljOgogCiAgICAgLy8gUmVxdWlyZWQgYnkgUmVuZGVyR3JpZC4gVHJ5IHRvIG1p
bmltaXplIHRoZSBleHBvc2VkIHN1cmZhY2UuCiAgICAgY29uc3QgR3JpZCYgZ3JpZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZ3JpZDsgfQotICAgIEdyaWRUcmFja1NpemUgZ3JpZFRyYWNrU2l6ZShHcmlk
VHJhY2tTaXppbmdEaXJlY3Rpb24sIHVuc2lnbmVkIHRyYW5zbGF0ZWRJbmRleCkgY29uc3Q7Cisg
ICAgLy8gRklYTUUgKGpmZXJuYW5kZXopOiBXZSBzaG91bGQgcmVtb3ZlIGFueSBwdWJsaWMgZ2V0
dGVyIGZvciB0aGlzIGF0dHJpYnV0ZQorICAgIC8vIGFuZCBlbmNhcHN1bGF0ZSBhbnkgYWNjZXNz
IGluIHRoZSBhbGdvcml0aG0gY2xhc3MuCisgICAgR3JpZCYgbXV0YWJsZUdyaWQoKSBjb25zdCB7
IHJldHVybiBtX2dyaWQ7IH0KIAogICAgIExheW91dFVuaXQgbWluQ29udGVudFNpemUoKSBjb25z
dCB7IHJldHVybiBtX21pbkNvbnRlbnRTaXplOyB9OwogICAgIExheW91dFVuaXQgbWF4Q29udGVu
dFNpemUoKSBjb25zdCB7IHJldHVybiBtX21heENvbnRlbnRTaXplOyB9OwogCisgICAgTGF5b3V0
U2l6ZSBlc3RpbWF0ZWRHcmlkQXJlYUJyZWFkdGhGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmKSBj
b25zdDsKKwogICAgIFZlY3RvcjxHcmlkVHJhY2s+JiB0cmFja3MoR3JpZFRyYWNrU2l6aW5nRGly
ZWN0aW9uIGRpcmVjdGlvbikgeyByZXR1cm4gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBtX2Nv
bHVtbnMgOiBtX3Jvd3M7IH0KICAgICBjb25zdCBWZWN0b3I8R3JpZFRyYWNrPiYgdHJhY2tzKEdy
aWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGlv
biA9PSBGb3JDb2x1bW5zID8gbV9jb2x1bW5zIDogbV9yb3dzOyB9CiAKQEAgLTEyNiw4ICsxMzAs
MTAgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4g
YXZhaWxhYmxlU3BhY2UoKSBjb25zdCB7IHJldHVybiBhdmFpbGFibGVTcGFjZShtX2RpcmVjdGlv
bik7IH0KKyAgICBib29sIGlzUmVsYXRpdmVHcmlkTGVuZ3RoQXNBdXRvKGNvbnN0IEdyaWRMZW5n
dGgmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OworICAgIGJvb2wgaXNSZWxhdGl2
ZVNpemVkVHJhY2tBc0F1dG8oY29uc3QgR3JpZFRyYWNrU2l6ZSYsIEdyaWRUcmFja1NpemluZ0Rp
cmVjdGlvbikgY29uc3Q7CisgICAgR3JpZFRyYWNrU2l6ZSBncmlkVHJhY2tTaXplKEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiwgdW5zaWduZWQgdHJhbnNsYXRlZEluZGV4KSBjb25zdDsKICAgICBj
b25zdCBHcmlkVHJhY2tTaXplJiByYXdHcmlkVHJhY2tTaXplKEdyaWRUcmFja1NpemluZ0RpcmVj
dGlvbiwgdW5zaWduZWQgdHJhbnNsYXRlZEluZGV4KSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGFz
c3VtZWRSb3dzU2l6ZUZvck9ydGhvZ29uYWxDaGlsZChjb25zdCBSZW5kZXJCb3gmKSBjb25zdDsK
IAogICAgIC8vIEhlbHBlciBtZXRob2RzIGZvciBzdGVwIDEuIGluaXRpYWxpemVUcmFja1NpemVz
KCkuCiAgICAgTGF5b3V0VW5pdCBpbml0aWFsQmFzZVNpemUoY29uc3QgR3JpZFRyYWNrU2l6ZSYp
IGNvbnN0OwpAQCAtMTQwLDYgKzE0Niw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPFRyYWNr
U2l6ZUNvbXB1dGF0aW9uUGhhc2UgcGhhc2U+IHZvaWQgaW5jcmVhc2VTaXplc1RvQWNjb21tb2Rh
dGVTcGFubmluZ0l0ZW1zKGNvbnN0IEdyaWRJdGVtc1NwYW5Hcm91cFJhbmdlJiBncmlkSXRlbXNX
aXRoU3Bhbik7CiAgICAgTGF5b3V0VW5pdCBpdGVtU2l6ZUZvclRyYWNrU2l6ZUNvbXB1dGF0aW9u
UGhhc2UoVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZSwgUmVuZGVyQm94JikgY29uc3Q7CiAgICAg
dGVtcGxhdGUgPFRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UgcGhhc2U+IHZvaWQgZGlzdHJpYnV0
ZVNwYWNlVG9UcmFja3MoVmVjdG9yPEdyaWRUcmFjayo+JiB0cmFja3MsIFZlY3RvcjxHcmlkVHJh
Y2sqPiogZ3Jvd0JleW9uZEdyb3d0aExpbWl0c1RyYWNrcywgTGF5b3V0VW5pdCYgYXZhaWxhYmxl
TG9naWNhbFNwYWNlKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGVzdGltYXRlZEdyaWRBcmVhQnJl
YWR0aEZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbikg
Y29uc3Q7CiAgICAgTGF5b3V0VW5pdCBncmlkQXJlYUJyZWFkdGhGb3JDaGlsZChjb25zdCBSZW5k
ZXJCb3gmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OwogCiAgICAgdm9pZCBjb21w
dXRlR3JpZENvbnRhaW5lckludHJpbnNpY1NpemVzKCk7CkBAIC0xNjIsNiArMTY5LDggQEAgcHJp
dmF0ZToKICAgICB2b2lkIGFkdmFuY2VOZXh0U3RhdGUoKTsKICAgICBib29sIGlzVmFsaWRUcmFu
c2l0aW9uKCkgY29uc3Q7CiAKKyAgICAvLyBEYXRhCisgICAgYm9vbCB3YXNTZXR1cCgpIGNvbnN0
IHsgcmV0dXJuICEhbV9zdHJhdGVneTsgfQogICAgIGJvb2wgbV9uZWVkc1NldHVwIHsgdHJ1ZSB9
OwogICAgIGJvb2wgbV9oYXNQZXJjZW50U2l6ZWRSb3dzSW5kZWZpbml0ZUhlaWdodCB7IGZhbHNl
IH07CiAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBtX2F2YWlsYWJsZVNwYWNlUm93czsK
QEAgLTIzOSw2ICsyNDgsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0Rm9yQ2hpbGQoUmVuZGVyQm94JikgY29uc3Q7CiAgICAgYm9vbCB1cGRhdGVPdmVycmlkZUNv
bnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoUmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+ID0gc3RkOjpudWxsb3B0KSBj
b25zdDsKIAorICAgIEdyaWRUcmFja1NpemUgZ3JpZFRyYWNrU2l6ZShHcmlkVHJhY2tTaXppbmdE
aXJlY3Rpb24gZGlyZWN0aW9uLCBzaXplX3QgdHJhbnNsYXRlZEluZGV4KSBjb25zdCB7IHJldHVy
biBtX2FsZ29yaXRobS5ncmlkVHJhY2tTaXplKGRpcmVjdGlvbiwgdHJhbnNsYXRlZEluZGV4KTsg
fQorCiAgICAgLy8gR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtIGFjY2Vzc29ycyBmb3Igc3ViY2xh
c3Nlcy4KICAgICBMYXlvdXRVbml0IGNvbXB1dGVUcmFja0Jhc2VkU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYWxnb3JpdGhtLmNvbXB1dGVUcmFja0Jhc2VkU2l6ZSgpOyB9CiAgICAgR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxnb3JpdGhtLm1f
ZGlyZWN0aW9uOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
R3JpZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKaW5kZXgg
NjAxMmRmZGMyNTQwMDc4Mzg2MzRhYWMyNDY2OGMwMGE1NmI3YWNlMS4uOTdiYThjYmE3MjAyZmY3
ZmU4NjJhZjRkMGZjNWUyYzkyOWI2MWQ1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJHcmlkLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6cmVwZWF0VHJh
Y2tzU2l6aW5nSWZOZWVkZWQoTGF5b3V0VW5pdCBhdmFpbGFibGVTcGFjZUZvckNvbHVtbnMsCiAg
ICAgLy8gYSBuZXcgY3ljbGUgb2YgdGhlIHNpemluZyBhbGdvcml0aG07IHRoZXJlIG1heSBiZSBt
b3JlLiBJbiBhZGRpdGlvbiwgbm90IGFsbCB0aGUKICAgICAvLyBjYXNlcyB3aXRoIG9ydGhvZ29u
YWwgZmxvd3MgcmVxdWlyZSB0aGlzIGV4dHJhIGN5Y2xlOyB3ZSBuZWVkIGEgbW9yZSBzcGVjaWZp
YwogICAgIC8vIGNvbmRpdGlvbiB0byBkZXRlY3Qgd2hldGhlciBjaGlsZCdzIG1pbi1jb250ZW50
IGNvbnRyaWJ1dGlvbiBoYXMgY2hhbmdlZCBvciBub3QuCi0gICAgaWYgKG1fZ3JpZC5oYXNBbnlP
cnRob2dvbmFsR3JpZEl0ZW0oKSB8fCBtX3RyYWNrU2l6aW5nQWxnb3JpdGhtLmhhc0FueVBlcmNl
bnRTaXplZFJvd3NJbmRlZmluaXRlSGVpZ2h0KCkpIHsKKyAgICBpZiAobV9oYXNBbnlPcnRob2dv
bmFsSXRlbSB8fCBtX3RyYWNrU2l6aW5nQWxnb3JpdGhtLmhhc0FueVBlcmNlbnRTaXplZFJvd3NJ
bmRlZmluaXRlSGVpZ2h0KCkpIHsKICAgICAgICAgY29tcHV0ZVRyYWNrU2l6ZXNGb3JEZWZpbml0
ZVNpemUoRm9yQ29sdW1ucywgYXZhaWxhYmxlU3BhY2VGb3JDb2x1bW5zKTsKICAgICAgICAgY29t
cHV0ZUNvbnRlbnRQb3NpdGlvbkFuZERpc3RyaWJ1dGlvbk9mZnNldChGb3JDb2x1bW5zLCBtX3Ry
YWNrU2l6aW5nQWxnb3JpdGhtLmZyZWVTcGFjZShGb3JDb2x1bW5zKS52YWx1ZSgpLCBub25Db2xs
YXBzZWRUcmFja3MoRm9yQ29sdW1ucykpOwogICAgICAgICBjb21wdXRlVHJhY2tTaXplc0ZvckRl
ZmluaXRlU2l6ZShGb3JSb3dzLCBhdmFpbGFibGVTcGFjZUZvclJvd3MpOwpAQCAtMTk0LDE3ICsx
OTQsMjEgQEAgdm9pZCBSZW5kZXJHcmlkOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRy
ZW4sIExheW91dFVuaXQpCiAgICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBjYWNoaW5nIHRoZSBo
YXNEZWZpbml0ZUxvZ2ljYWxIZWlnaHQgdmFsdWUgdGhyb3VnaG91dCB0aGUgbGF5b3V0LgogICAg
ICAgICBib29sIGhhc0RlZmluaXRlTG9naWNhbEhlaWdodCA9IGhhc092ZXJyaWRlQ29udGVudExv
Z2ljYWxIZWlnaHQoKSB8fCBjb21wdXRlQ29udGVudExvZ2ljYWxIZWlnaHQoTWFpbk9yUHJlZmVy
cmVkU2l6ZSwgc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCksIHN0ZDo6bnVsbG9wdCk7CiAKLSAgICAg
ICAgLy8gV2UgbmVlZCB0byBjbGVhciBib3RoIG93biBhbmQgY29udGFpbmluZ0Jsb2NrIG92ZXJy
aWRlIHNpemVzIG9mIG9ydGhvZ29uYWwgaXRlbXMgdG8gZW5zdXJlIHdlIGdldCB0aGUKLSAgICAg
ICAgLy8gc2FtZSByZXN1bHQgd2hlbiBncmlkJ3MgaW50cmluc2ljIHNpemUgaXMgY29tcHV0ZWQg
YWdhaW4gaW4gdGhlIHVwZGF0ZUxvZ2ljYWxXaWR0aCBjYWxsIGJlbGxvdy4KLSAgICAgICAgaWYg
KHNpemVzTG9naWNhbFdpZHRoVG9GaXRDb250ZW50KE1heFNpemUpIHx8IHN0eWxlKCkubG9naWNh
bFdpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkgewotICAgICAgICAgICAgZm9yIChhdXRvKiBj
aGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
Qm94KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25l
ZCgpIHx8ICFHcmlkTGF5b3V0RnVuY3Rpb25zOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgKmNo
aWxkKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgY2hp
bGQtPmNsZWFyT3ZlcnJpZGVDb250ZW50U2l6ZSgpOwotICAgICAgICAgICAgICAgIGNoaWxkLT5j
bGVhck92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemUoKTsKLSAgICAgICAgICAgICAg
ICBjaGlsZC0+c2V0TmVlZHNMYXlvdXQoKTsKLSAgICAgICAgICAgICAgICBjaGlsZC0+bGF5b3V0
SWZOZWVkZWQoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgbV9oYXNBbnlPcnRob2dvbmFsSXRl
bSA9IGZhbHNlOworICAgICAgICBmb3IgKGF1dG8qIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgeworICAgICAgICAgICAgaWYg
KGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIC8vIEdyaWQncyBsYXlvdXQgbG9naWMgY29udHJvbHMgdGhlIGdyaWQg
aXRlbSdzIG92ZXJyaWRlIGhlaWdodCwgaGVuY2UKKyAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8g
Y2xlYXIgYW55IG92ZXJyaWRlIGhlaWdodCBzZXQgcHJldmlvdXNseSwgc28gaXQgZG9lc24ndAor
ICAgICAgICAgICAgLy8gaW50ZXJmZXJlIGluIGN1cnJlbnQgbGF5b3V0IGV4ZWN1dGlvbi4KKyAg
ICAgICAgICAgIC8vIEdyaWQgbmV2ZXIgdXNlcyB0aGUgb3ZlcnJpZGUgd2lkdGgsIHRoYXQncyB3
aHkgd2UgZG9uJ3QgbmVlZCB0byBjbGVhcgorICAgICAgICAgICAgLy8gaXQuCisgICAgICAgICAg
ICBjaGlsZC0+Y2xlYXJPdmVycmlkZUNvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CisKKyAgICAgICAg
ICAgIC8vIFdlIG1heSBuZWVkIHRvIHJlcGVhdCB0aGUgdHJhY2sgc2l6aW5nIGluIGNhc2Ugb2Yg
YW55IGdyaWQgaXRlbSB3YXMKKyAgICAgICAgICAgIC8vIG9ydGhvZ29uYWwuCisgICAgICAgICAg
ICBpZiAoR3JpZExheW91dEZ1bmN0aW9uczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsICpjaGls
ZCkpCisgICAgICAgICAgICAgICAgbV9oYXNBbnlPcnRob2dvbmFsSXRlbSA9IHRydWU7CiAgICAg
ICAgIH0KIAogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KDApOwpAQCAtMjE2LDcgKzIyMCw5IEBA
IHZvaWQgUmVuZGVyR3JpZDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlv
dXRVbml0KQogICAgICAgICBsYXlvdXRFeGNsdWRlZENoaWxkcmVuKHJlbGF5b3V0Q2hpbGRyZW4p
OwogCiAgICAgICAgIExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2VGb3JDb2x1bW5zID0gYXZhaWxh
YmxlTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIHBsYWNlSXRlbXNPbkdyaWQobV9ncmlkLCBhdmFp
bGFibGVTcGFjZUZvckNvbHVtbnMpOworICAgICAgICBwbGFjZUl0ZW1zT25HcmlkKG1fdHJhY2tT
aXppbmdBbGdvcml0aG0sIGF2YWlsYWJsZVNwYWNlRm9yQ29sdW1ucyk7CisKKyAgICAgICAgcGVy
Zm9ybUdyaWRJdGVtc1ByZUxheW91dChtX3RyYWNrU2l6aW5nQWxnb3JpdGhtKTsKIAogICAgICAg
ICAvLyAxLSBGaXJzdCwgdGhlIHRyYWNrIHNpemluZyBhbGdvcml0aG0gaXMgdXNlZCB0byByZXNv
bHZlIHRoZSBzaXplcyBvZiB0aGUKICAgICAgICAgLy8gZ3JpZCBjb2x1bW5zLgpAQCAtMjM1LDcg
KzI0MSw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxk
cmVuLCBMYXlvdXRVbml0KQogICAgICAgICBpZiAoIWhhc0RlZmluaXRlTG9naWNhbEhlaWdodCkg
ewogICAgICAgICAgICAgbV9taW5Db250ZW50SGVpZ2h0ID0gTGF5b3V0VW5pdCgpOwogICAgICAg
ICAgICAgbV9tYXhDb250ZW50SGVpZ2h0ID0gTGF5b3V0VW5pdCgpOwotICAgICAgICAgICAgY29t
cHV0ZVRyYWNrU2l6ZXNGb3JJbmRlZmluaXRlU2l6ZShtX3RyYWNrU2l6aW5nQWxnb3JpdGhtLCBG
b3JSb3dzLCBtX2dyaWQsICptX21pbkNvbnRlbnRIZWlnaHQsICptX21heENvbnRlbnRIZWlnaHQp
OworICAgICAgICAgICAgY29tcHV0ZVRyYWNrU2l6ZXNGb3JJbmRlZmluaXRlU2l6ZShtX3RyYWNr
U2l6aW5nQWxnb3JpdGhtLCBGb3JSb3dzLCAqbV9taW5Db250ZW50SGVpZ2h0LCAqbV9tYXhDb250
ZW50SGVpZ2h0KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSByZWFsbHkg
YWRkZWQgdG8gdGhlIGludHJpbnNpYyBoZWlnaHQgaW4gUmVuZGVyQm94Ojpjb21wdXRlQ29udGVu
dEFuZFNjcm9sbGJhckxvZ2ljYWxIZWlnaHRVc2luZygpLgogICAgICAgICAgICAgLy8gUmVtb3Zl
IHRoaXMgd2hlbiB0aGF0IGlzIGZpeGVkLgogICAgICAgICAgICAgQVNTRVJUKG1fbWluQ29udGVu
dEhlaWdodCk7CkBAIC0zODQsMTAgKzM5MCwxMiBAQCB2b2lkIFJlbmRlckdyaWQ6OmNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5bwog
ICAgIGJvb2wgaGFkRXhjbHVkZWRDaGlsZHJlbiA9IGNvbXB1dGVQcmVmZXJyZWRXaWR0aHNGb3JF
eGNsdWRlZENoaWxkcmVuKGNoaWxkTWluV2lkdGgsIGNoaWxkTWF4V2lkdGgpOwogCiAgICAgR3Jp
ZCBncmlkKGNvbnN0X2Nhc3Q8UmVuZGVyR3JpZCY+KCp0aGlzKSk7Ci0gICAgcGxhY2VJdGVtc09u
R3JpZChncmlkLCBzdGQ6Om51bGxvcHQpOwotCiAgICAgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
IGFsZ29yaXRobSh0aGlzLCBncmlkKTsKLSAgICBjb21wdXRlVHJhY2tTaXplc0ZvckluZGVmaW5p
dGVTaXplKGFsZ29yaXRobSwgRm9yQ29sdW1ucywgZ3JpZCwgbWluTG9naWNhbFdpZHRoLCBtYXhM
b2dpY2FsV2lkdGgpOworICAgIHBsYWNlSXRlbXNPbkdyaWQoYWxnb3JpdGhtLCBzdGQ6Om51bGxv
cHQpOworCisgICAgcGVyZm9ybUdyaWRJdGVtc1ByZUxheW91dChhbGdvcml0aG0pOworCisgICAg
Y29tcHV0ZVRyYWNrU2l6ZXNGb3JJbmRlZmluaXRlU2l6ZShhbGdvcml0aG0sIEZvckNvbHVtbnMs
IG1pbkxvZ2ljYWxXaWR0aCwgbWF4TG9naWNhbFdpZHRoKTsKIAogICAgIGlmIChoYWRFeGNsdWRl
ZENoaWxkcmVuKSB7CiAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4KG1pbkxvZ2lj
YWxXaWR0aCwgY2hpbGRNaW5XaWR0aCk7CkBAIC0zOTksOCArNDA3LDkgQEAgdm9pZCBSZW5kZXJH
cmlkOjpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2Fs
V2lkdGgsIExheW8KICAgICBtYXhMb2dpY2FsV2lkdGggKz0gc2Nyb2xsYmFyV2lkdGg7CiB9CiAK
LXZvaWQgUmVuZGVyR3JpZDo6Y29tcHV0ZVRyYWNrU2l6ZXNGb3JJbmRlZmluaXRlU2l6ZShHcmlk
VHJhY2tTaXppbmdBbGdvcml0aG0mIGFsZ29yaXRobSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9u
IGRpcmVjdGlvbiwgR3JpZCYgZ3JpZCwgTGF5b3V0VW5pdCYgbWluSW50cmluc2ljU2l6ZSwgTGF5
b3V0VW5pdCYgbWF4SW50cmluc2ljU2l6ZSkgY29uc3QKK3ZvaWQgUmVuZGVyR3JpZDo6Y29tcHV0
ZVRyYWNrU2l6ZXNGb3JJbmRlZmluaXRlU2l6ZShHcmlkVHJhY2tTaXppbmdBbGdvcml0aG0mIGFs
Z29yaXRobSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgTGF5b3V0VW5pdCYg
bWluSW50cmluc2ljU2l6ZSwgTGF5b3V0VW5pdCYgbWF4SW50cmluc2ljU2l6ZSkgY29uc3QKIHsK
KyAgICBjb25zdCBHcmlkJiBncmlkID0gYWxnb3JpdGhtLmdyaWQoKTsKICAgICBhbGdvcml0aG0u
c2V0dXAoZGlyZWN0aW9uLCBudW1UcmFja3MoZGlyZWN0aW9uLCBncmlkKSwgSW50cmluc2ljU2l6
ZUNvbXB1dGF0aW9uLCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCk7CiAgICAgYWxnb3JpdGht
LnJ1bigpOwogCkBAIC01NTcsMTMgKzU2NiwxNCBAQCB1bnNpZ25lZCBSZW5kZXJHcmlkOjpjbGFt
cEF1dG9SZXBlYXRUcmFja3MoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgdQog
ICAgIHJldHVybiBzdGQ6Om1pbihhdXRvUmVwZWF0VHJhY2tzLCBtYXhUcmFja3MgLSBpbnNlcnRp
b25Qb2ludCk7CiB9CiAKLS8vIEZJWE1FKTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gcGFzcyB0aGUg
YXZhaWxhYmxlIGxvZ2ljYWwgd2lkdGggYXMgYXJndW1lbnQuIFRoZSBwcm9ibGVtIGlzIHRoYXQK
Ky8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBwYXNzIHRoZSBhdmFpbGFibGUgbG9naWNh
bCB3aWR0aCBhcyBhcmd1bWVudC4gVGhlIHByb2JsZW0gaXMgdGhhdAogLy8gYXZhaWxhYmxlTG9n
aWNhbFdpZHRoKCkgZG9lcyBhbHdheXMgcmV0dXJuIGEgdmFsdWUgZXZlbiBpZiB3ZSBjYW5ub3Qg
cmVzb2x2ZSBpdCBsaWtlIHdoZW4KIC8vIGNvbXB1dGluZyB0aGUgaW50cmluc2ljIHNpemUgKHBy
ZWZlcnJlZCB3aWR0aHMpLiBUaGF0J3Mgd2h5IHdlIHBhc3MgdGhlIHJlc3BvbnNpYmlsaXR5IHRv
IHRoZQogLy8gY2FsbGVyIHdobyBkb2VzIGtub3cgd2hldGhlciB0aGUgYXZhaWxhYmxlIGxvZ2lj
YWwgd2lkdGggaXMgaW5kZWZpbml0ZSBvciBub3QuCi12b2lkIFJlbmRlckdyaWQ6OnBsYWNlSXRl
bXNPbkdyaWQoR3JpZCYgZ3JpZCwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBhdmFpbGFibGVT
cGFjZSkgY29uc3QKK3ZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3JpZChHcmlkVHJhY2tT
aXppbmdBbGdvcml0aG0mIGFsZ29yaXRobSwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBhdmFp
bGFibGVMb2dpY2FsV2lkdGgpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgYXV0b1JlcGVhdENvbHVt
bnMgPSBjb21wdXRlQXV0b1JlcGVhdFRyYWNrc0NvdW50KEZvckNvbHVtbnMsIGF2YWlsYWJsZVNw
YWNlKTsKKyAgICBHcmlkJiBncmlkID0gYWxnb3JpdGhtLm11dGFibGVHcmlkKCk7CisgICAgdW5z
aWduZWQgYXV0b1JlcGVhdENvbHVtbnMgPSBjb21wdXRlQXV0b1JlcGVhdFRyYWNrc0NvdW50KEZv
ckNvbHVtbnMsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgdW5zaWduZWQgYXV0b1JlcGVh
dFJvd3MgPSBjb21wdXRlQXV0b1JlcGVhdFRyYWNrc0NvdW50KEZvclJvd3MsIGF2YWlsYWJsZUxv
Z2ljYWxIZWlnaHRGb3JQZXJjZW50YWdlQ29tcHV0YXRpb24oKSk7CiAKICAgICBhdXRvUmVwZWF0
Um93cyA9IGNsYW1wQXV0b1JlcGVhdFRyYWNrcyhGb3JSb3dzLCBhdXRvUmVwZWF0Um93cyk7CkBA
IC01ODIsMTMgKzU5MiwxMCBAQCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlSXRlbXNPbkdyaWQoR3Jp
ZCYgZ3JpZCwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBhdmFpbGFibAogCiAgICAgVmVjdG9y
PFJlbmRlckJveCo+IGF1dG9NYWpvckF4aXNBdXRvR3JpZEl0ZW1zOwogICAgIFZlY3RvcjxSZW5k
ZXJCb3gqPiBzcGVjaWZpZWRNYWpvckF4aXNBdXRvR3JpZEl0ZW1zOwotICAgIGJvb2wgaGFzQW55
T3J0aG9nb25hbEdyaWRJdGVtID0gZmFsc2U7CiAgICAgZm9yIChhdXRvKiBjaGlsZCA9IGdyaWQu
b3JkZXJJdGVyYXRvcigpLmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IGdyaWQub3JkZXJJdGVyYXRv
cigpLm5leHQoKSkgewogICAgICAgICBpZiAoZ3JpZC5vcmRlckl0ZXJhdG9yKCkuc2hvdWxkU2tp
cENoaWxkKCpjaGlsZCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBoYXNBbnlP
cnRob2dvbmFsR3JpZEl0ZW0gPSBoYXNBbnlPcnRob2dvbmFsR3JpZEl0ZW0gfHwgR3JpZExheW91
dEZ1bmN0aW9uczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsICpjaGlsZCk7Ci0KICAgICAgICAg
R3JpZEFyZWEgYXJlYSA9IGdyaWQuZ3JpZEl0ZW1BcmVhKCpjaGlsZCk7CiAgICAgICAgIGlmICgh
YXJlYS5yb3dzLmlzSW5kZWZpbml0ZSgpKQogICAgICAgICAgICAgYXJlYS5yb3dzLnRyYW5zbGF0
ZShzdGQ6OmFicyhncmlkLnNtYWxsZXN0VHJhY2tTdGFydChGb3JSb3dzKSkpOwpAQCAtNjA3LDcg
KzYxNCw2IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3JpZChHcmlkJiBncmlkLCBz
dGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsCiAgICAgICAgIH0KICAgICAgICAgZ3Jp
ZC5pbnNlcnQoKmNoaWxkLCB7IGFyZWEucm93cywgYXJlYS5jb2x1bW5zIH0pOwogICAgIH0KLSAg
ICBncmlkLnNldEhhc0FueU9ydGhvZ29uYWxHcmlkSXRlbShoYXNBbnlPcnRob2dvbmFsR3JpZEl0
ZW0pOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGlmIChncmlkLmhhc0dyaWRJdGVtcygp
KSB7CkBAIC02MzYsNiArNjQyLDIzIEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3Jp
ZChHcmlkJiBncmlkLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsCiAjZW5kaWYK
IH0KIAordm9pZCBSZW5kZXJHcmlkOjpwZXJmb3JtR3JpZEl0ZW1zUHJlTGF5b3V0KGNvbnN0IEdy
aWRUcmFja1NpemluZ0FsZ29yaXRobSYgYWxnb3JpdGhtKSBjb25zdAoreworICAgIEFTU0VSVCgh
YWxnb3JpdGhtLmdyaWQoKS5uZWVkc0l0ZW1zUGxhY2VtZW50KCkpOworICAgIC8vIEZJWE1FKGpm
ZXJuYW5kZXopOiBXZSBuZWVkIGEgd2F5IHdoZW4gd2UgYXJlIGNhbGxpbmcgdGhpcyBkdXJpbmcg
aW50cmluc2ljIHNpemUgY29tcHVhdGlvbiBiZWZvcmUgcGVyZm9ybWluZworICAgIC8vIHRoZSBs
YXlvdXQuIE1heWJlIHVzaW5nIHRoZSBQcmVMYXlvdXQgcGhhc2UgPworICAgIGZvciAoYXV0byog
Y2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
Z0JveCgpKSB7CisgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgLy8gT3J0aG9nb25hbCBpdGVtcyBzaG91bGQg
YmUgbGFpZCBvdXQgaW4gb3JkZXIgdG8gcHJvcGVybHkgY29tcHV0ZSBjb250ZW50LXNpemVkIHRy
YWNrcyB0aGF0IG1heSBkZXBlbmQgb24gaXRlbSdzIGludHJpbnNpYyBzaXplLgorICAgICAgICAv
LyBXZSBhbHNvIG5lZWQgdG8gcHJvcGVybHkgZXN0aW1hdGUgaXRzIGdyaWQgYXJlYSBzaXplLCBz
aW5jZSBpdCBtYXkgYWZmZWN0IHRvIHRoZSBiYXNlbGluZSBzaGltcyBpZiBzdWNoIGl0ZW0gcGFy
dGljaWFwdGVzIGluIGJhc2VsaW5lIGFsaWdubWVudC4gCisgICAgICAgIGlmIChHcmlkTGF5b3V0
RnVuY3Rpb25zOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgKmNoaWxkKSkgeworICAgICAgICAg
ICAgdXBkYXRlR3JpZEFyZWFMb2dpY2FsU2l6ZSgqY2hpbGQsIGFsZ29yaXRobS5lc3RpbWF0ZWRH
cmlkQXJlYUJyZWFkdGhGb3JDaGlsZCgqY2hpbGQpKTsKKyAgICAgICAgICAgIGNoaWxkLT5sYXlv
dXRJZk5lZWRlZCgpOworICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIFJlbmRlckdyaWQ6OnBv
cHVsYXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVyYXRvcihHcmlkJiBncmlkKSBjb25zdAogewog
ICAgIE9yZGVySXRlcmF0b3JQb3B1bGF0b3IgcG9wdWxhdG9yKGdyaWQub3JkZXJJdGVyYXRvcigp
KTsKQEAgLTg0OSw2ICs4NzIsMzEgQEAgc3RhdGljIGNvbnN0IFN0eWxlQ29udGVudEFsaWdubWVu
dERhdGEmIGNvbnRlbnRBbGlnbm1lbnROb3JtYWxCZWhhdmlvckdyaWQoKQogICAgIHJldHVybiBu
b3JtYWxCZWhhdmlvcjsKIH0KIAorc3RhdGljIGJvb2wgb3ZlcnJpZGVTaXplQ2hhbmdlZChjb25z
dCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBM
YXlvdXRTaXplIHNpemUpCit7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKQorICAg
ICAgICByZXR1cm4gIWNoaWxkLmhhc092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2lj
YWxXaWR0aCgpIHx8IGNoaWxkLm92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxX
aWR0aCgpICE9IHNpemUud2lkdGgoKTsKKyAgICByZXR1cm4gIWNoaWxkLmhhc092ZXJyaWRlQ29u
dGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKSB8fCBjaGlsZC5vdmVycmlkZUNvbnRh
aW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgIT0gc2l6ZS5oZWlnaHQoKTsKK30KKwor
c3RhdGljIGJvb2wgaGFzUmVsYXRpdmVCbG9ja0F4aXNTaXplKGNvbnN0IFJlbmRlckdyaWQmIGdy
aWQsIGNvbnN0IFJlbmRlckJveCYgY2hpbGQpCit7CisgICAgcmV0dXJuIEdyaWRMYXlvdXRGdW5j
dGlvbnM6OmlzT3J0aG9nb25hbENoaWxkKGdyaWQsIGNoaWxkKSA/IGNoaWxkLmhhc1JlbGF0aXZl
TG9naWNhbFdpZHRoKCkgfHwgY2hpbGQuc3R5bGUoKS5sb2dpY2FsV2lkdGgoKS5pc0F1dG8oKSA6
IGNoaWxkLmhhc1JlbGF0aXZlTG9naWNhbEhlaWdodCgpOworfQorCit2b2lkIFJlbmRlckdyaWQ6
OnVwZGF0ZUdyaWRBcmVhTG9naWNhbFNpemUoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0U2l6ZSBn
cmlkQXJlYUxvZ2ljYWxTaXplKSBjb25zdAoreworICAgIC8vIEJlY2F1c2UgdGhlIGdyaWQgYXJl
YSBjYW5ub3QgYmUgc3R5bGVkLCB3ZSBkb24ndCBuZWVkIHRvIGFkanVzdAorICAgIC8vIHRoZSBn
cmlkIGJyZWFkdGggdG8gYWNjb3VudCBmb3IgJ2JveC1zaXppbmcnLgorICAgIGJvb2wgZ3JpZEFy
ZWFXaWR0aENoYW5nZWQgPSBvdmVycmlkZVNpemVDaGFuZ2VkKGNoaWxkLCBGb3JDb2x1bW5zLCBn
cmlkQXJlYUxvZ2ljYWxTaXplKTsKKyAgICBib29sIGdyaWRBcmVhSGVpZ2h0Q2hhbmdlZCA9IG92
ZXJyaWRlU2l6ZUNoYW5nZWQoY2hpbGQsIEZvclJvd3MsIGdyaWRBcmVhTG9naWNhbFNpemUpOwor
ICAgIGlmIChncmlkQXJlYVdpZHRoQ2hhbmdlZCB8fCAoZ3JpZEFyZWFIZWlnaHRDaGFuZ2VkICYm
IGhhc1JlbGF0aXZlQmxvY2tBeGlzU2l6ZSgqdGhpcywgY2hpbGQpKSkKKyAgICAgICAgY2hpbGQu
c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKworICAgIGNoaWxkLnNldE92ZXJyaWRlQ29u
dGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aChncmlkQXJlYUxvZ2ljYWxTaXplLndpZHRo
KCkpOworICAgIGNoaWxkLnNldE92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxI
ZWlnaHQoZ3JpZEFyZWFMb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Cit9CisKIHZvaWQgUmVuZGVyR3Jp
ZDo6bGF5b3V0R3JpZEl0ZW1zKCkKIHsKICAgICBwb3B1bGF0ZUdyaWRQb3NpdGlvbnNGb3JEaXJl
Y3Rpb24oRm9yQ29sdW1ucyk7CkBAIC04NjIsMjAgKzkxMCwxMCBAQCB2b2lkIFJlbmRlckdyaWQ6
OmxheW91dEdyaWRJdGVtcygpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0g
ICAgICAgIC8vIEJlY2F1c2UgdGhlIGdyaWQgYXJlYSBjYW5ub3QgYmUgc3R5bGVkLCB3ZSBkb24n
dCBuZWVkIHRvIGFkanVzdAotICAgICAgICAvLyB0aGUgZ3JpZCBicmVhZHRoIHRvIGFjY291bnQg
Zm9yICdib3gtc2l6aW5nJy4KLSAgICAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBvbGRP
dmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGggPSBjaGlsZC0+aGFzT3Zl
cnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkgPyBjaGlsZC0+b3ZlcnJp
ZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkgOiBMYXlvdXRVbml0KCk7Ci0g
ICAgICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gb2xkT3ZlcnJpZGVDb250YWluaW5nQmxv
Y2tDb250ZW50TG9naWNhbEhlaWdodCA9IGNoaWxkLT5oYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgPyBjaGlsZC0+b3ZlcnJpZGVDb250YWluaW5nQmxvY2tD
b250ZW50TG9naWNhbEhlaWdodCgpIDogTGF5b3V0VW5pdCgpOwotCi0gICAgICAgIExheW91dFVu
aXQgb3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoID0gZ3JpZEFyZWFC
cmVhZHRoRm9yQ2hpbGRJbmNsdWRpbmdBbGlnbm1lbnRPZmZzZXRzKCpjaGlsZCwgRm9yQ29sdW1u
cyk7Ci0gICAgICAgIExheW91dFVuaXQgb3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9n
aWNhbEhlaWdodCA9IGdyaWRBcmVhQnJlYWR0aEZvckNoaWxkSW5jbHVkaW5nQWxpZ25tZW50T2Zm
c2V0cygqY2hpbGQsIEZvclJvd3MpOwotICAgICAgICBpZiAoIW9sZE92ZXJyaWRlQ29udGFpbmlu
Z0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCB8fCBvbGRPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0Nv
bnRlbnRMb2dpY2FsV2lkdGgudmFsdWUoKSAhPSBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRl
bnRMb2dpY2FsV2lkdGgKLSAgICAgICAgICAgIHx8ICgoIW9sZE92ZXJyaWRlQ29udGFpbmluZ0Js
b2NrQ29udGVudExvZ2ljYWxIZWlnaHQgfHwgb2xkT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250
ZW50TG9naWNhbEhlaWdodC52YWx1ZSgpICE9IG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVu
dExvZ2ljYWxIZWlnaHQpCi0gICAgICAgICAgICAgICAgJiYgY2hpbGQtPmhhc1JlbGF0aXZlTG9n
aWNhbEhlaWdodCgpKSkKLSAgICAgICAgICAgIGNoaWxkLT5zZXROZWVkc0xheW91dChNYXJrT25s
eVRoaXMpOwotCi0gICAgICAgIGNoaWxkLT5zZXRPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRl
bnRMb2dpY2FsV2lkdGgob3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRo
KTsKLSAgICAgICAgY2hpbGQtPnNldE92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2lj
YWxIZWlnaHQob3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCk7Cisg
ICAgICAgIC8vIFNldHRpbmcgdGhlIGRlZmluaXRlIGdyaWQgYXJlYSdzIHNpemVzLiBJdCBtYXkg
aW1wbHkgdGhhdCB0aGUKKyAgICAgICAgLy8gaXRlbSBtdXN0IHBlcmZvcm0gYSBsYXlvdXQgaWYg
aXRzIGFyZWEgZGlmZmVycyBmcm9tIHRoZSBvbmUKKyAgICAgICAgLy8gdXNlZCBkdXJpbmcgdGhl
IHRyYWNrIHNpemluZyBhbGdvcml0aG0uCisgICAgICAgIHVwZGF0ZUdyaWRBcmVhTG9naWNhbFNp
emUoKmNoaWxkLCBMYXlvdXRTaXplKGdyaWRBcmVhQnJlYWR0aEZvckNoaWxkSW5jbHVkaW5nQWxp
Z25tZW50T2Zmc2V0cygqY2hpbGQsIEZvckNvbHVtbnMpLCBncmlkQXJlYUJyZWFkdGhGb3JDaGls
ZEluY2x1ZGluZ0FsaWdubWVudE9mZnNldHMoKmNoaWxkLCBGb3JSb3dzKSkpOwogCiAgICAgICAg
IExheW91dFJlY3Qgb2xkQ2hpbGRSZWN0ID0gY2hpbGQtPmZyYW1lUmVjdCgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaAppbmRleCA4YjVhZjFiZmUzYjhmNWZkYWQzYTg5N2Rm
MDM1NTY2MjlmNmViOGM4Li5mMzU5MTBjZjUwNTJjZjc2YmQ0ZWQwNTQyZmU5MTcwOGJiNWI3YTdl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKQEAgLTc0LDYgKzc0LDggQEAg
cHVibGljOgogICAgIExheW91dFVuaXQgZ3V0dGVyc1NpemUoY29uc3QgR3JpZCYsIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiwgdW5zaWduZWQgc3RhcnRMaW5lLCB1bnNpZ25lZCBzcGFuLCBzdGQ6
Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsZVNpemUpIGNvbnN0OwogICAgIExheW91dFVu
aXQgZ3JpZEl0ZW1PZmZzZXQoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKIAorICAg
IHZvaWQgdXBkYXRlR3JpZEFyZWFMb2dpY2FsU2l6ZShSZW5kZXJCb3gmLCBMYXlvdXRTaXplKSBj
b25zdDsKKwogICAgIFN0eWxlQ29udGVudEFsaWdubWVudERhdGEgY29udGVudEFsaWdubWVudChH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CkBAIC0xMDUsNyAr
MTA3LDkgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxPcmRlcmVkVHJhY2tJbmRl
eFNldD4gY29tcHV0ZUVtcHR5VHJhY2tzRm9yQXV0b1JlcGVhdChHcmlkJiwgR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uKSBjb25zdDsKIAotICAgIHZvaWQgcGxhY2VJdGVtc09uR3JpZChHcmlkJiwg
c3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBhdmFpbGFibGVTcGFjZUZvckNvbHVtbnMpIGNvbnN0
OworICAgIHZvaWQgcGVyZm9ybUdyaWRJdGVtc1ByZUxheW91dChjb25zdCBHcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG0mKSBjb25zdDsKKworICAgIHZvaWQgcGxhY2VJdGVtc09uR3JpZChHcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG0mLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsZUxv
Z2ljYWxXaWR0aCkgY29uc3Q7CiAgICAgdm9pZCBwb3B1bGF0ZUV4cGxpY2l0R3JpZEFuZE9yZGVy
SXRlcmF0b3IoR3JpZCYpIGNvbnN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmlkQXJlYT4gY3Jl
YXRlRW1wdHlHcmlkQXJlYUF0U3BlY2lmaWVkUG9zaXRpb25zT3V0c2lkZUdyaWQoR3JpZCYsIGNv
bnN0IFJlbmRlckJveCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwgY29uc3QgR3JpZFNwYW4m
KSBjb25zdDsKICAgICB2b2lkIHBsYWNlU3BlY2lmaWVkTWFqb3JBeGlzSXRlbXNPbkdyaWQoR3Jp
ZCYsIGNvbnN0IFZlY3RvcjxSZW5kZXJCb3gqPiYpIGNvbnN0OwpAQCAtMTIxLDcgKzEyNSw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBsYXlvdXRQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCYsIGJv
b2wgcmVsYXlvdXRDaGlsZHJlbiwgYm9vbCBmaXhlZFBvc2l0aW9uT2JqZWN0c09ubHkpIG92ZXJy
aWRlOwogCiAgICAgdm9pZCBjb21wdXRlVHJhY2tTaXplc0ZvckRlZmluaXRlU2l6ZShHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24sIExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2UpOwotICAgIHZvaWQg
Y29tcHV0ZVRyYWNrU2l6ZXNGb3JJbmRlZmluaXRlU2l6ZShHcmlkVHJhY2tTaXppbmdBbGdvcml0
aG0mLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24sIEdyaWQmLCBMYXlvdXRVbml0JiBtaW5JbnRy
aW5zaWNTaXplLCBMYXlvdXRVbml0JiBtYXhJbnRyaW5zaWNTaXplKSBjb25zdDsKKyAgICB2b2lk
IGNvbXB1dGVUcmFja1NpemVzRm9ySW5kZWZpbml0ZVNpemUoR3JpZFRyYWNrU2l6aW5nQWxnb3Jp
dGhtJiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBMYXlvdXRVbml0JiBtaW5JbnRyaW5zaWNT
aXplLCBMYXlvdXRVbml0JiBtYXhJbnRyaW5zaWNTaXplKSBjb25zdDsKICAgICBMYXlvdXRVbml0
IGNvbXB1dGVUcmFja0Jhc2VkTG9naWNhbEhlaWdodCgpIGNvbnN0OwogCiAgICAgdm9pZCByZXBl
YXRUcmFja3NTaXppbmdJZk5lZWRlZChMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlRm9yQ29sdW1u
cywgTGF5b3V0VW5pdCBhdmFpbGFibGVTcGFjZUZvclJvd3MpOwpAQCAtMTkzLDYgKzE5Nyw4IEBA
IHByaXZhdGU6CiAKICAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IG1fbWluQ29udGVudEhl
aWdodDsKICAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IG1fbWF4Q29udGVudEhlaWdodDsK
KworICAgIGJvb2wgbV9oYXNBbnlPcnRob2dvbmFsSXRlbSB7ZmFsc2V9OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354514</attachid>
            <date>2018-11-11 16:11:57 -0800</date>
            <delta_ts>2018-11-12 02:15:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191358-20181112011156.patch</filename>
            <type>text/plain</type>
            <size>30227</size>
            <attacher name="Javier Fernandez">jfernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4MDc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE5ZGI1NWM2NzRhMzQ1
MzExYWQ2OWU2NGVkMGE3Njc2YzY1NDI3My4uNjY3ODcyNmY4MzcxYjhjYWYyOWRmNjc3ZWNhZWZh
MmUxZjhiZmM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE4LTExLTA3ICBKYXZp
ZXIgRmVybmFuZGV6ICA8amZlcm5hbmRlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gUmVmYWN0b3JpbmcgdG8gbWFrZSBtb3JlIGV4cGxpY2l0IHRoZSBvcnRob2dvbmFsIGl0ZW1z
JyBwcmUtbGF5b3V0IGxvZ2ljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTEzNTgKKworICAgICAgICBSZXZpZXdlZCBieSBNYW51ZWwgUmVnbyBDYXNh
c25vdmFzLgorCisgICAgICAgIFRoZXNlIGNoYW5nZXMgYXJlIGp1c3QgYSByZWZhY3RvcmluZyB0
byBlYXNlIHRoZSBpbnRlZ3JhdGlvbiBvZiB0aGUgbmV3IEJhc2VsaW5lIEFsaWdubWVudAorICAg
ICAgICBsb2dpYyBpbiBhIGZvbGxvdyB1cCBwYXRjaC4KKworICAgICAgICBXZSBuZWVkIHRvIHBy
b3Blcmx5IGVzdGltYXRlIHRoZSBncmlkIGFyZWEgc2l6ZSBvZiBvcnRob2dvbmFsIGl0ZW1zIHNv
IHRoYXQgd2UgY2FuIHBlcmZvcm0KKyAgICAgICAgYW4gYWNjdXJhdGUgcHJlLWxheW91dC4gVGhp
cyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBvcnRob2dvbmFsIGl0ZW1zIHdpbGwgc3ludGhlc2l6ZSB0
aGVpciBiYXNlbGluZQorICAgICAgICBpZiB0aGV5IHBhcnRpY2lwYXRlIGluIGFueSBiYXNlbGlu
ZSBhbGlnbm1lbnQgY29udGV4dC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHNpbmNlIG5vIGJl
aGF2aW9yIGNoYW5nZSBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIHRoaXMgcGF0Y2guCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmlkOjpzZXROZWVk
c0l0ZW1zUGxhY2VtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvR3JpZC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjplc3RpbWF0ZWRHcmlkQXJlYUJyZWFkdGhGb3JD
aGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06
OmdyaWRBcmVhQnJlYWR0aEZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRU
cmFja1NpemluZ0FsZ29yaXRobTo6aXNSZWxhdGl2ZUdyaWRMZW5ndGhBc0F1dG8gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjppc1JlbGF0aXZlU2l6
ZWRUcmFja0FzQXV0byBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdB
bGdvcml0aG06OmdyaWRUcmFja1NpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZWZp
bml0ZVNpemVTdHJhdGVneTo6ZmluZFVzZWRGbGV4RnJhY3Rpb24gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpydW4pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpyZXNldCk6CisgICAgICAgICogcmVuZGVyaW5n
L0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6OmdyaWRUcmFja1NpemUgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6
OnJlcGVhdFRyYWNrc1NpemluZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdy
aWQ6OmxheW91dEJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdy
aWQ6OmNvbXB1dGVUcmFja1NpemVzRm9ySW5kZWZpbml0ZVNpemUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3JpZCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJHcmlkOjpwZXJmb3JtR3JpZEl0ZW1zUHJlTGF5b3V0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Om92ZXJyaWRlU2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
aGFzUmVsYXRpdmVCbG9ja0F4aXNTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6
OnVwZGF0ZUdyaWRBcmVhTG9naWNhbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyR3JpZDo6bGF5b3V0R3JpZEl0ZW1zKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3Jp
ZC5oOgorCiAyMDE4LTExLTExICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbaU9TXSBEcmF3IGNhcHMgbG9jayBpbmRpY2F0b3IgaW4gcGFzc3dvcmQgZmllbGRz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5jcHAKaW5kZXggOTFlMzM1ODgzM2ZiOTUxZjE3OTJkZDM4
MmI2MzI4NjY4Yzg1NjQ0MS4uYzcyZDAxZDgxYzdkNzE2NjE1NzllM2JhMDE4MzBlNDI5ZDMwZjY4
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmNwcApAQCAtMTU3LDcgKzE1Nyw2IEBAIHZvaWQg
R3JpZDo6c2V0TmVlZHNJdGVtc1BsYWNlbWVudChib29sIG5lZWRzSXRlbXNQbGFjZW1lbnQpCiAK
ICAgICBtX2dyaWQuc2hyaW5rKDApOwogICAgIG1fZ3JpZEl0ZW1BcmVhLmNsZWFyKCk7Ci0gICAg
bV9oYXNBbnlPcnRob2dvbmFsR3JpZEl0ZW0gPSBmYWxzZTsKICAgICBtX3NtYWxsZXN0Um93U3Rh
cnQgPSAwOwogICAgIG1fc21hbGxlc3RDb2x1bW5TdGFydCA9IDA7CiAgICAgbV9hdXRvUmVwZWF0
RW1wdHlDb2x1bW5zID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9HcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5oCmluZGV4IDJjN2Q5
ODFlNzhjOTUxMTcyNTZkOWQ2NTk4NDBkNWQ3NjI3NDYyNmUuLjkzMDk4MTRmYTFiYmFlYzI2Y2Vk
OTA4YWRjOWQ2YTg5ZTc0MTFmMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9HcmlkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuaApAQCAtNTMsMTAg
KzUzLDYgQEAgcHVibGljOgogICAgIC8vIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGZhbHNlIGZv
ciBhIGdyaWQgY29udGFpbmVyIHdpdGggb25seSBvdXQgb2YgZmxvdyBjaGlsZHJlbi4KICAgICBi
b29sIGhhc0dyaWRJdGVtcygpIGNvbnN0IHsgcmV0dXJuICFtX2dyaWRJdGVtQXJlYS5pc0VtcHR5
KCk7IH0KIAotICAgIC8vIEZJWE1FOiBtb3ZlIHRoaXMgdG8gU2l6aW5nRGF0YSBvbmNlIHBsYWNl
SXRlbXNPbkdyaWQoKSB0YWtlcyBpdCBhcyBhcmd1bWVudC4KLSAgICBib29sIGhhc0FueU9ydGhv
Z29uYWxHcmlkSXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQW55T3J0aG9nb25hbEdyaWRJdGVt
OyB9Ci0gICAgdm9pZCBzZXRIYXNBbnlPcnRob2dvbmFsR3JpZEl0ZW0oYm9vbCBoYXNBbnlPcnRo
b2dvbmFsR3JpZEl0ZW0pIHsgbV9oYXNBbnlPcnRob2dvbmFsR3JpZEl0ZW0gPSBoYXNBbnlPcnRo
b2dvbmFsR3JpZEl0ZW07IH0KLQogICAgIEdyaWRBcmVhIGdyaWRJdGVtQXJlYShjb25zdCBSZW5k
ZXJCb3gmIGl0ZW0pIGNvbnN0OwogICAgIHZvaWQgc2V0R3JpZEl0ZW1BcmVhKGNvbnN0IFJlbmRl
ckJveCYgaXRlbSwgR3JpZEFyZWEpOwogCkBAIC05NSw3ICs5MSw2IEBAIHByaXZhdGU6CiAgICAg
dW5zaWduZWQgbV9hdXRvUmVwZWF0Q29sdW1ucyB7IDAgfTsKICAgICB1bnNpZ25lZCBtX2F1dG9S
ZXBlYXRSb3dzIHsgMCB9OwogCi0gICAgYm9vbCBtX2hhc0FueU9ydGhvZ29uYWxHcmlkSXRlbSB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX25lZWRzSXRlbXNQbGFjZW1lbnQgeyB0cnVlIH07CiAKICAg
ICBHcmlkQXNNYXRyaXggbV9ncmlkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcAppbmRleCAxZjcyMTQ3MjQ4ZDE5NjNjZjhh
NjJiY2Y0Yzg2YTIxNzhiZjQzYTExLi5kY2U0MTk1MzRjYzhlYmE5OWFiZjM5NDUzNzJkYWE1N2Jj
ZWUzZTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6
aW5nQWxnb3JpdGhtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtLmNwcApAQCAtNTMzLDI0ICs1MzMsMzUgQEAgdm9pZCBHcmlkVHJhY2tT
aXppbmdBbGdvcml0aG06OmRpc3RyaWJ1dGVTcGFjZVRvVHJhY2tzKFZlY3RvcjxHcmlkVHJhY2sq
PiYgdHJhY2sKICAgICAgICAgdHJhY2stPnNldFBsYW5uZWRTaXplKHRyYWNrLT5wbGFubmVkU2l6
ZSgpID09IGluZmluaXR5ID8gdHJhY2stPnRlbXBTaXplKCkgOiBzdGQ6Om1heCh0cmFjay0+cGxh
bm5lZFNpemUoKSwgdHJhY2stPnRlbXBTaXplKCkpKTsKIH0KIAotTGF5b3V0VW5pdCBHcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG06OmFzc3VtZWRSb3dzU2l6ZUZvck9ydGhvZ29uYWxDaGlsZChjb25z
dCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAorTGF5b3V0U2l6ZSBHcmlkVHJhY2tTaXppbmdBbGdv
cml0aG06OmVzdGltYXRlZEdyaWRBcmVhQnJlYWR0aEZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYg
Y2hpbGQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKEdyaWRMYXlvdXRGdW5jdGlvbnM6OmlzT3J0aG9n
b25hbENoaWxkKCptX3JlbmRlckdyaWQsIGNoaWxkKSk7Ci0gICAgY29uc3QgR3JpZFNwYW4mIHNw
YW4gPSBtX2dyaWQuZ3JpZEl0ZW1TcGFuKGNoaWxkLCBGb3JSb3dzKTsKKyAgICByZXR1cm4ge2Vz
dGltYXRlZEdyaWRBcmVhQnJlYWR0aEZvckNoaWxkKGNoaWxkLCBGb3JDb2x1bW5zKSwgZXN0aW1h
dGVkR3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQoY2hpbGQsIEZvclJvd3MpfTsKK30KKworTGF5b3V0
VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmVzdGltYXRlZEdyaWRBcmVhQnJlYWR0aEZv
ckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBk
aXJlY3Rpb24pIGNvbnN0Cit7CisgICAgY29uc3QgR3JpZFNwYW4mIHNwYW4gPSBtX2dyaWQuZ3Jp
ZEl0ZW1TcGFuKGNoaWxkLCBkaXJlY3Rpb24pOwogICAgIExheW91dFVuaXQgZ3JpZEFyZWFTaXpl
OwogICAgIGJvb2wgZ3JpZEFyZWFJc0luZGVmaW5pdGUgPSBmYWxzZTsKLSAgICBMYXlvdXRVbml0
IGNvbnRhaW5pbmdCbG9ja0F2YWlsYWJsZVNpemUgPSBtX3JlbmRlckdyaWQtPmNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxIZWlnaHRGb3JDb250ZW50KEV4Y2x1ZGVNYXJnaW5Cb3JkZXJQYWRkaW5nKTsK
KyAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsZVNpemUgPSBhdmFpbGFibGVT
cGFjZShkaXJlY3Rpb24pOwogICAgIGZvciAoYXV0byB0cmFja1Bvc2l0aW9uIDogc3Bhbikgewot
ICAgICAgICBHcmlkTGVuZ3RoIG1heFRyYWNrU2l6ZSA9IGdyaWRUcmFja1NpemUoRm9yUm93cywg
dHJhY2tQb3NpdGlvbikubWF4VHJhY2tCcmVhZHRoKCk7Ci0gICAgICAgIGlmIChtYXhUcmFja1Np
emUuaXNDb250ZW50U2l6ZWQoKSB8fCBtYXhUcmFja1NpemUuaXNGbGV4KCkpCisgICAgICAgIC8v
IFdlIG1heSBuZWVkIHRvIGVzdGltYXRlIHRoZSBncmlkIGFyZWEgc2l6ZSBiZWZvcmUgcnVubmlu
ZyB0aGUgdHJhY2sKKyAgICAgICAgLy8gc2l6aW5nIGFsZ29yaXRobSBpbiBvcmRlciB0byBwZXJm
b3JtIHRoZSBwcmUtbGF5b3V0IG9mIG9ydGhvZ29uYWwKKyAgICAgICAgLy8gaXRlbXMuCisgICAg
ICAgIEdyaWRUcmFja1NpemUgdHJhY2tTaXplID0gd2FzU2V0dXAoKSA/IGdyaWRUcmFja1NpemUo
ZGlyZWN0aW9uLCB0cmFja1Bvc2l0aW9uKSA6IHJhd0dyaWRUcmFja1NpemUoZGlyZWN0aW9uLCB0
cmFja1Bvc2l0aW9uKTsKKyAgICAgICAgR3JpZExlbmd0aCBtYXhUcmFja1NpemUgPSB0cmFja1Np
emUubWF4VHJhY2tCcmVhZHRoKCk7CisgICAgICAgIGlmIChtYXhUcmFja1NpemUuaXNDb250ZW50
U2l6ZWQoKSB8fCBtYXhUcmFja1NpemUuaXNGbGV4KCkgfHwgaXNSZWxhdGl2ZUdyaWRMZW5ndGhB
c0F1dG8obWF4VHJhY2tTaXplLCBkaXJlY3Rpb24pKQogICAgICAgICAgICAgZ3JpZEFyZWFJc0lu
ZGVmaW5pdGUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBncmlkQXJlYVNpemUg
Kz0gdmFsdWVGb3JMZW5ndGgobWF4VHJhY2tTaXplLmxlbmd0aCgpLCBjb250YWluaW5nQmxvY2tB
dmFpbGFibGVTaXplKTsKKyAgICAgICAgICAgIGdyaWRBcmVhU2l6ZSArPSB2YWx1ZUZvckxlbmd0
aChtYXhUcmFja1NpemUubGVuZ3RoKCksIGF2YWlsYWJsZVNpemUudmFsdWVfb3IoTGF5b3V0VW5p
dCgpKSk7CiAgICAgfQogCi0gICAgZ3JpZEFyZWFTaXplICs9IG1fcmVuZGVyR3JpZC0+Z3V0dGVy
c1NpemUobV9ncmlkLCBGb3JSb3dzLCBzcGFuLnN0YXJ0TGluZSgpLCBzcGFuLmludGVnZXJTcGFu
KCksIGF2YWlsYWJsZVNwYWNlKEZvclJvd3MpKTsKKyAgICBncmlkQXJlYVNpemUgKz0gbV9yZW5k
ZXJHcmlkLT5ndXR0ZXJzU2l6ZShtX2dyaWQsIGRpcmVjdGlvbiwgc3Bhbi5zdGFydExpbmUoKSwg
c3Bhbi5pbnRlZ2VyU3BhbigpLCBhdmFpbGFibGVTaXplKTsKIAotICAgIHJldHVybiBncmlkQXJl
YUlzSW5kZWZpbml0ZSA/IHN0ZDo6bWF4KGNoaWxkLm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgp
LCBncmlkQXJlYVNpemUpIDogZ3JpZEFyZWFTaXplOworICAgIEdyaWRUcmFja1NpemluZ0RpcmVj
dGlvbiBjaGlsZElubGluZURpcmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2Fy
ZURpcmVjdGlvbkZvckNoaWxkKCptX3JlbmRlckdyaWQsIGNoaWxkLCBGb3JDb2x1bW5zKTsKKyAg
ICBpZiAoZ3JpZEFyZWFJc0luZGVmaW5pdGUpCisgICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT0g
Y2hpbGRJbmxpbmVEaXJlY3Rpb24gPyBzdGQ6Om1heChjaGlsZC5tYXhQcmVmZXJyZWRMb2dpY2Fs
V2lkdGgoKSwgZ3JpZEFyZWFTaXplKSA6IExheW91dFVuaXQoLTEpOworICAgIHJldHVybiBncmlk
QXJlYVNpemU7CiB9CiAKIExheW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpncmlk
QXJlYUJyZWFkdGhGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXpp
bmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdApAQCAtNTY1LDcgKzU3Niw3IEBAIExheW91dFVu
aXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpncmlkQXJlYUJyZWFkdGhGb3JDaGlsZChjb25z
dCBSZW5kZXJCb3gmIGNoCiAgICAgICAgIC8vIEZJWE1FIChqZmVybmFuZGV6KSBDb250ZW50IEFs
aWdubWVudCBzaG91bGQgYWNjb3VudCBmb3IgdGhpcyBoZXVyaXN0aWMuCiAgICAgICAgIC8vIGh0
dHBzOi8vZ2l0aHViLmNvbS93M2MvY3Nzd2ctZHJhZnRzL2lzc3Vlcy8yNjk3CiAgICAgICAgIGlm
IChtX3NpemluZ1N0YXRlID09IENvbHVtblNpemluZ0ZpcnN0SXRlcmF0aW9uKQotICAgICAgICAg
ICAgcmV0dXJuIGFzc3VtZWRSb3dzU2l6ZUZvck9ydGhvZ29uYWxDaGlsZChjaGlsZCk7CisgICAg
ICAgICAgICByZXR1cm4gZXN0aW1hdGVkR3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQoY2hpbGQsIEZv
clJvd3MpOwogICAgICAgICBhZGRDb250ZW50QWxpZ25tZW50T2Zmc2V0ID0gdHJ1ZTsKICAgICB9
CiAKQEAgLTU4Myw4ICs1OTQsMjMgQEAgTGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdvcml0
aG06OmdyaWRBcmVhQnJlYWR0aEZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2gKICAgICByZXR1
cm4gZ3JpZEFyZWFCcmVhZHRoOwogfQogCitib29sIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6
aXNSZWxhdGl2ZUdyaWRMZW5ndGhBc0F1dG8oY29uc3QgR3JpZExlbmd0aCYgbGVuZ3RoLCBHcmlk
VHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAoreworICAgIHJldHVybiBsZW5n
dGguaXNQZXJjZW50YWdlKCkgJiYgIWF2YWlsYWJsZVNwYWNlKGRpcmVjdGlvbik7Cit9CisKK2Jv
b2wgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjppc1JlbGF0aXZlU2l6ZWRUcmFja0FzQXV0byhj
b25zdCBHcmlkVHJhY2tTaXplJiB0cmFja1NpemUsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBk
aXJlY3Rpb24pIGNvbnN0Cit7CisgICAgaWYgKHRyYWNrU2l6ZS5taW5UcmFja0JyZWFkdGgoKS5p
c1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgcmV0dXJuIGlzUmVsYXRpdmVHcmlkTGVuZ3RoQXNBdXRv
KHRyYWNrU2l6ZS5taW5UcmFja0JyZWFkdGgoKSwgZGlyZWN0aW9uKTsKKyAgICBpZiAodHJhY2tT
aXplLm1heFRyYWNrQnJlYWR0aCgpLmlzUGVyY2VudGFnZSgpKQorICAgICAgICByZXR1cm4gaXNS
ZWxhdGl2ZUdyaWRMZW5ndGhBc0F1dG8odHJhY2tTaXplLm1heFRyYWNrQnJlYWR0aCgpLCBkaXJl
Y3Rpb24pOworICAgIHJldHVybiBmYWxzZTsKK30KKwogR3JpZFRyYWNrU2l6ZSBHcmlkVHJhY2tT
aXppbmdBbGdvcml0aG06OmdyaWRUcmFja1NpemUoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbiwgdW5zaWduZWQgdHJhbnNsYXRlZEluZGV4KSBjb25zdAogeworICAgIEFTU0VSVCh3
YXNTZXR1cCgpKTsKICAgICAvLyBDb2xsYXBzZSBlbXB0eSBhdXRvIHJlcGVhdCB0cmFja3MgaWYg
YXV0by1maXQuCiAgICAgaWYgKG1fZ3JpZC5oYXNBdXRvUmVwZWF0RW1wdHlUcmFja3MoZGlyZWN0
aW9uKSAmJiBtX2dyaWQuaXNFbXB0eUF1dG9SZXBlYXRUcmFjayhkaXJlY3Rpb24sIHRyYW5zbGF0
ZWRJbmRleCkpCiAgICAgICAgIHJldHVybiB7IExlbmd0aChGaXhlZCksIExlbmd0aFRyYWNrU2l6
aW5nIH07CkBAIC01OTUsMTAgKzYyMSw5IEBAIEdyaWRUcmFja1NpemUgR3JpZFRyYWNrU2l6aW5n
QWxnb3JpdGhtOjpncmlkVHJhY2tTaXplKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkCiAKICAg
ICBHcmlkTGVuZ3RoIG1pblRyYWNrQnJlYWR0aCA9IHRyYWNrU2l6ZS5taW5UcmFja0JyZWFkdGgo
KTsKICAgICBHcmlkTGVuZ3RoIG1heFRyYWNrQnJlYWR0aCA9IHRyYWNrU2l6ZS5tYXhUcmFja0Jy
ZWFkdGgoKTsKLQotICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhpcyBjb25kaXRpb24gZm9yIGRldGVy
bWluaW5nIHdoZXRoZXIgYSBzaXplIGlzIGluZGVmaW5pdGUgb3Igbm90IGlzIHdvcmtpbmcKLSAg
ICAvLyBjb3JyZWN0bHkgZm9yIG9ydGhvZ29uYWwgZmxvd3MuCi0gICAgaWYgKCFhdmFpbGFibGVT
cGFjZShkaXJlY3Rpb24pICYmIChtaW5UcmFja0JyZWFkdGguaXNQZXJjZW50YWdlKCkgfHwgbWF4
VHJhY2tCcmVhZHRoLmlzUGVyY2VudGFnZSgpKSkgeworICAgIC8vIElmIHRoZSBsb2dpY2FsIHdp
ZHRoL2hlaWdodCBvZiB0aGUgZ3JpZCBjb250YWluZXIgaXMgaW5kZWZpbml0ZSwgcGVyY2VudGFn
ZQorICAgIC8vIHZhbHVlcyBhcmUgdHJlYXRlZCBhcyA8YXV0bz4uCisgICAgaWYgKGlzUmVsYXRp
dmVTaXplZFRyYWNrQXNBdXRvKHRyYWNrU2l6ZSwgZGlyZWN0aW9uKSkgewogICAgICAgICBpZiAo
bWluVHJhY2tCcmVhZHRoLmlzUGVyY2VudGFnZSgpKQogICAgICAgICAgICAgbWluVHJhY2tCcmVh
ZHRoID0gTGVuZ3RoKEF1dG8pOwogICAgICAgICBpZiAobWF4VHJhY2tCcmVhZHRoLmlzUGVyY2Vu
dGFnZSgpKQpAQCAtODQxLDcgKzg2Niw3IEBAIGRvdWJsZSBJbmRlZmluaXRlU2l6ZVN0cmF0ZWd5
OjpmaW5kVXNlZEZsZXhGcmFjdGlvbihWZWN0b3I8dW5zaWduZWQ+JiBmbGV4aWJsZVNpCiAgICAg
Zm9yIChjb25zdCBhdXRvJiB0cmFja0luZGV4IDogZmxleGlibGVTaXplZFRyYWNrc0luZGV4KSB7
CiAgICAgICAgIC8vIEZJWE1FOiB3ZSBwYXNzIFRyYWNrU2l6aW5nIHRvIGdyaWRUcmFja1NpemUo
KSBiZWNhdXNlIGl0IGRvZXMgbm90IHJlYWxseSBtYXR0ZXIKICAgICAgICAgLy8gYXMgd2Uga25v
dyB0aGUgdHJhY2sgaXMgYSBmbGV4IHNpemVkIHRyYWNrLiBJdCdkIGJlIG5pY2Ugbm90IHRvIGhh
dmUgdG8gZG8gdGhhdC4KLSAgICAgICAgZmxleEZyYWN0aW9uID0gc3RkOjptYXgoZmxleEZyYWN0
aW9uLCBub3JtYWxpemVkRmxleEZyYWN0aW9uKGFsbFRyYWNrc1t0cmFja0luZGV4XSwgbV9hbGdv
cml0aG0uZ3JpZFRyYWNrU2l6ZShkaXJlY3Rpb24sIHRyYWNrSW5kZXgpLm1heFRyYWNrQnJlYWR0
aCgpLmZsZXgoKSkpOworICAgICAgICBmbGV4RnJhY3Rpb24gPSBzdGQ6Om1heChmbGV4RnJhY3Rp
b24sIG5vcm1hbGl6ZWRGbGV4RnJhY3Rpb24oYWxsVHJhY2tzW3RyYWNrSW5kZXhdLCBncmlkVHJh
Y2tTaXplKGRpcmVjdGlvbiwgdHJhY2tJbmRleCkubWF4VHJhY2tCcmVhZHRoKCkuZmxleCgpKSk7
CiAgICAgfQogCiAgICAgY29uc3QgR3JpZCYgZ3JpZCA9IG1fYWxnb3JpdGhtLmdyaWQoKTsKQEAg
LTExNjQsNiArMTE4OSw3IEBAIHZvaWQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpzZXR1cChH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCB1bnNpZ25lCiAKIHZvaWQgR3JpZFRy
YWNrU2l6aW5nQWxnb3JpdGhtOjpydW4oKQogeworICAgIEFTU0VSVCh3YXNTZXR1cCgpKTsKICAg
ICBTdGF0ZU1hY2hpbmUgc3RhdGVNYWNoaW5lKCp0aGlzKTsKIAogICAgIC8vIFN0ZXAgMS4KQEAg
LTExOTcsNiArMTIyMyw3IEBAIHZvaWQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpydW4oKQog
CiB2b2lkIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6cmVzZXQoKQogeworICAgIEFTU0VSVCh3
YXNTZXR1cCgpKTsKICAgICBtX3NpemluZ1N0YXRlID0gQ29sdW1uU2l6aW5nRmlyc3RJdGVyYXRp
b247CiAgICAgbV9jb2x1bW5zLnNocmluaygwKTsKICAgICBtX3Jvd3Muc2hyaW5rKDApOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRo
bS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5o
CmluZGV4IDcyNWY0YTA1NjlmM2U2ZTI0OGU3MzI4MWVhZmY2MDY1MGFkNjUzOTMuLjE0NjYyMWJj
MzRhYmE3MDEwODI2ODE5ZmIyMjFiY2JjZmYyMTJmNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmgKQEAgLTEwMiwxMSArMTAy
LDE1IEBAIHB1YmxpYzoKIAogICAgIC8vIFJlcXVpcmVkIGJ5IFJlbmRlckdyaWQuIFRyeSB0byBt
aW5pbWl6ZSB0aGUgZXhwb3NlZCBzdXJmYWNlLgogICAgIGNvbnN0IEdyaWQmIGdyaWQoKSBjb25z
dCB7IHJldHVybiBtX2dyaWQ7IH0KLSAgICBHcmlkVHJhY2tTaXplIGdyaWRUcmFja1NpemUoR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCB1bnNpZ25lZCB0cmFuc2xhdGVkSW5kZXgpIGNvbnN0Owor
ICAgIC8vIEZJWE1FIChqZmVybmFuZGV6KTogV2Ugc2hvdWxkIHJlbW92ZSBhbnkgcHVibGljIGdl
dHRlciBmb3IgdGhpcyBhdHRyaWJ1dGUKKyAgICAvLyBhbmQgZW5jYXBzdWxhdGUgYW55IGFjY2Vz
cyBpbiB0aGUgYWxnb3JpdGhtIGNsYXNzLgorICAgIEdyaWQmIG11dGFibGVHcmlkKCkgY29uc3Qg
eyByZXR1cm4gbV9ncmlkOyB9CiAKICAgICBMYXlvdXRVbml0IG1pbkNvbnRlbnRTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9taW5Db250ZW50U2l6ZTsgfTsKICAgICBMYXlvdXRVbml0IG1heENvbnRl
bnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXhDb250ZW50U2l6ZTsgfTsKIAorICAgIExheW91
dFNpemUgZXN0aW1hdGVkR3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94Jikg
Y29uc3Q7CisKICAgICBWZWN0b3I8R3JpZFRyYWNrPiYgdHJhY2tzKEdyaWRUcmFja1NpemluZ0Rp
cmVjdGlvbiBkaXJlY3Rpb24pIHsgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gbV9j
b2x1bW5zIDogbV9yb3dzOyB9CiAgICAgY29uc3QgVmVjdG9yPEdyaWRUcmFjaz4mIHRyYWNrcyhH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdCB7IHJldHVybiBkaXJlY3Rp
b24gPT0gRm9yQ29sdW1ucyA/IG1fY29sdW1ucyA6IG1fcm93czsgfQogCkBAIC0xMjYsOCArMTMw
LDEwIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+
IGF2YWlsYWJsZVNwYWNlKCkgY29uc3QgeyByZXR1cm4gYXZhaWxhYmxlU3BhY2UobV9kaXJlY3Rp
b24pOyB9CisgICAgYm9vbCBpc1JlbGF0aXZlR3JpZExlbmd0aEFzQXV0byhjb25zdCBHcmlkTGVu
Z3RoJiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKKyAgICBib29sIGlzUmVsYXRp
dmVTaXplZFRyYWNrQXNBdXRvKGNvbnN0IEdyaWRUcmFja1NpemUmLCBHcmlkVHJhY2tTaXppbmdE
aXJlY3Rpb24pIGNvbnN0OworICAgIEdyaWRUcmFja1NpemUgZ3JpZFRyYWNrU2l6ZShHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24sIHVuc2lnbmVkIHRyYW5zbGF0ZWRJbmRleCkgY29uc3Q7CiAgICAg
Y29uc3QgR3JpZFRyYWNrU2l6ZSYgcmF3R3JpZFRyYWNrU2l6ZShHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24sIHVuc2lnbmVkIHRyYW5zbGF0ZWRJbmRleCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBh
c3N1bWVkUm93c1NpemVGb3JPcnRob2dvbmFsQ2hpbGQoY29uc3QgUmVuZGVyQm94JikgY29uc3Q7
CiAKICAgICAvLyBIZWxwZXIgbWV0aG9kcyBmb3Igc3RlcCAxLiBpbml0aWFsaXplVHJhY2tTaXpl
cygpLgogICAgIExheW91dFVuaXQgaW5pdGlhbEJhc2VTaXplKGNvbnN0IEdyaWRUcmFja1NpemUm
KSBjb25zdDsKQEAgLTE0MCw2ICsxNDYsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxUcmFj
a1NpemVDb21wdXRhdGlvblBoYXNlIHBoYXNlPiB2b2lkIGluY3JlYXNlU2l6ZXNUb0FjY29tbW9k
YXRlU3Bhbm5pbmdJdGVtcyhjb25zdCBHcmlkSXRlbXNTcGFuR3JvdXBSYW5nZSYgZ3JpZEl0ZW1z
V2l0aFNwYW4pOwogICAgIExheW91dFVuaXQgaXRlbVNpemVGb3JUcmFja1NpemVDb21wdXRhdGlv
blBoYXNlKFRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UsIFJlbmRlckJveCYpIGNvbnN0OwogICAg
IHRlbXBsYXRlIDxUcmFja1NpemVDb21wdXRhdGlvblBoYXNlIHBoYXNlPiB2b2lkIGRpc3RyaWJ1
dGVTcGFjZVRvVHJhY2tzKFZlY3RvcjxHcmlkVHJhY2sqPiYgdHJhY2tzLCBWZWN0b3I8R3JpZFRy
YWNrKj4qIGdyb3dCZXlvbmRHcm93dGhMaW1pdHNUcmFja3MsIExheW91dFVuaXQmIGF2YWlsYWJs
ZUxvZ2ljYWxTcGFjZSkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBlc3RpbWF0ZWRHcmlkQXJlYUJy
ZWFkdGhGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24p
IGNvbnN0OwogICAgIExheW91dFVuaXQgZ3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQoY29uc3QgUmVu
ZGVyQm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKIAogICAgIHZvaWQgY29t
cHV0ZUdyaWRDb250YWluZXJJbnRyaW5zaWNTaXplcygpOwpAQCAtMTYyLDYgKzE2OSw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBhZHZhbmNlTmV4dFN0YXRlKCk7CiAgICAgYm9vbCBpc1ZhbGlkVHJh
bnNpdGlvbigpIGNvbnN0OwogCisgICAgLy8gRGF0YS4KKyAgICBib29sIHdhc1NldHVwKCkgY29u
c3QgeyByZXR1cm4gISFtX3N0cmF0ZWd5OyB9CiAgICAgYm9vbCBtX25lZWRzU2V0dXAgeyB0cnVl
IH07CiAgICAgYm9vbCBtX2hhc1BlcmNlbnRTaXplZFJvd3NJbmRlZmluaXRlSGVpZ2h0IHsgZmFs
c2UgfTsKICAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IG1fYXZhaWxhYmxlU3BhY2VSb3dz
OwpAQCAtMjM5LDYgKzI0OCw4IEBAIHByb3RlY3RlZDoKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxI
ZWlnaHRGb3JDaGlsZChSZW5kZXJCb3gmKSBjb25zdDsKICAgICBib29sIHVwZGF0ZU92ZXJyaWRl
Q29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChSZW5kZXJCb3gmLCBHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24sIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gPSBzdGQ6Om51bGxvcHQp
IGNvbnN0OwogCisgICAgR3JpZFRyYWNrU2l6ZSBncmlkVHJhY2tTaXplKEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbiBkaXJlY3Rpb24sIHNpemVfdCB0cmFuc2xhdGVkSW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fYWxnb3JpdGhtLmdyaWRUcmFja1NpemUoZGlyZWN0aW9uLCB0cmFuc2xhdGVkSW5kZXgp
OyB9CisKICAgICAvLyBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG0gYWNjZXNzb3JzIGZvciBzdWJj
bGFzc2VzLgogICAgIExheW91dFVuaXQgY29tcHV0ZVRyYWNrQmFzZWRTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbGdvcml0aG0uY29tcHV0ZVRyYWNrQmFzZWRTaXplKCk7IH0KICAgICBHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbGdvcml0aG0u
bV9kaXJlY3Rpb247IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJHcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAppbmRl
eCA2MDEyZGZkYzI1NDAwNzgzODYzNGFhYzI0NjY4YzAwYTU2YjdhY2UxLi42NTNiMzQzOTIxOWUy
Y2Y3MDZmOTBmZGYxNWI2ODE5NmYzYmY3ZWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckdyaWQuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpyZXBlYXRU
cmFja3NTaXppbmdJZk5lZWRlZChMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlRm9yQ29sdW1ucywK
ICAgICAvLyBhIG5ldyBjeWNsZSBvZiB0aGUgc2l6aW5nIGFsZ29yaXRobTsgdGhlcmUgbWF5IGJl
IG1vcmUuIEluIGFkZGl0aW9uLCBub3QgYWxsIHRoZQogICAgIC8vIGNhc2VzIHdpdGggb3J0aG9n
b25hbCBmbG93cyByZXF1aXJlIHRoaXMgZXh0cmEgY3ljbGU7IHdlIG5lZWQgYSBtb3JlIHNwZWNp
ZmljCiAgICAgLy8gY29uZGl0aW9uIHRvIGRldGVjdCB3aGV0aGVyIGNoaWxkJ3MgbWluLWNvbnRl
bnQgY29udHJpYnV0aW9uIGhhcyBjaGFuZ2VkIG9yIG5vdC4KLSAgICBpZiAobV9ncmlkLmhhc0Fu
eU9ydGhvZ29uYWxHcmlkSXRlbSgpIHx8IG1fdHJhY2tTaXppbmdBbGdvcml0aG0uaGFzQW55UGVy
Y2VudFNpemVkUm93c0luZGVmaW5pdGVIZWlnaHQoKSkgeworICAgIGlmIChtX2hhc0FueU9ydGhv
Z29uYWxJdGVtIHx8IG1fdHJhY2tTaXppbmdBbGdvcml0aG0uaGFzQW55UGVyY2VudFNpemVkUm93
c0luZGVmaW5pdGVIZWlnaHQoKSkgewogICAgICAgICBjb21wdXRlVHJhY2tTaXplc0ZvckRlZmlu
aXRlU2l6ZShGb3JDb2x1bW5zLCBhdmFpbGFibGVTcGFjZUZvckNvbHVtbnMpOwogICAgICAgICBj
b21wdXRlQ29udGVudFBvc2l0aW9uQW5kRGlzdHJpYnV0aW9uT2Zmc2V0KEZvckNvbHVtbnMsIG1f
dHJhY2tTaXppbmdBbGdvcml0aG0uZnJlZVNwYWNlKEZvckNvbHVtbnMpLnZhbHVlKCksIG5vbkNv
bGxhcHNlZFRyYWNrcyhGb3JDb2x1bW5zKSk7CiAgICAgICAgIGNvbXB1dGVUcmFja1NpemVzRm9y
RGVmaW5pdGVTaXplKEZvclJvd3MsIGF2YWlsYWJsZVNwYWNlRm9yUm93cyk7CkBAIC0xOTQsMTcg
KzE5NCwxOCBAQCB2b2lkIFJlbmRlckdyaWQ6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGls
ZHJlbiwgTGF5b3V0VW5pdCkKICAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGNhY2hpbmcgdGhl
IGhhc0RlZmluaXRlTG9naWNhbEhlaWdodCB2YWx1ZSB0aHJvdWdob3V0IHRoZSBsYXlvdXQuCiAg
ICAgICAgIGJvb2wgaGFzRGVmaW5pdGVMb2dpY2FsSGVpZ2h0ID0gaGFzT3ZlcnJpZGVDb250ZW50
TG9naWNhbEhlaWdodCgpIHx8IGNvbXB1dGVDb250ZW50TG9naWNhbEhlaWdodChNYWluT3JQcmVm
ZXJyZWRTaXplLCBzdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKSwgc3RkOjpudWxsb3B0KTsKIAotICAg
ICAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIGJvdGggb3duIGFuZCBjb250YWluaW5nQmxvY2sgb3Zl
cnJpZGUgc2l6ZXMgb2Ygb3J0aG9nb25hbCBpdGVtcyB0byBlbnN1cmUgd2UgZ2V0IHRoZQotICAg
ICAgICAvLyBzYW1lIHJlc3VsdCB3aGVuIGdyaWQncyBpbnRyaW5zaWMgc2l6ZSBpcyBjb21wdXRl
ZCBhZ2FpbiBpbiB0aGUgdXBkYXRlTG9naWNhbFdpZHRoIGNhbGwgYmVsbG93LgotICAgICAgICBp
ZiAoc2l6ZXNMb2dpY2FsV2lkdGhUb0ZpdENvbnRlbnQoTWF4U2l6ZSkgfHwgc3R5bGUoKS5sb2dp
Y2FsV2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8q
IGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmdCb3goKSkgewotICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlv
bmVkKCkgfHwgIUdyaWRMYXlvdXRGdW5jdGlvbnM6OmlzT3J0aG9nb25hbENoaWxkKCp0aGlzLCAq
Y2hpbGQpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBj
aGlsZC0+Y2xlYXJPdmVycmlkZUNvbnRlbnRTaXplKCk7Ci0gICAgICAgICAgICAgICAgY2hpbGQt
PmNsZWFyT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZSgpOwotICAgICAgICAgICAg
ICAgIGNoaWxkLT5zZXROZWVkc0xheW91dCgpOwotICAgICAgICAgICAgICAgIGNoaWxkLT5sYXlv
dXRJZk5lZWRlZCgpOwotICAgICAgICAgICAgfQorICAgICAgICBtX2hhc0FueU9ydGhvZ29uYWxJ
dGVtID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7CisgICAgICAgICAgICBp
ZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgLy8gR3JpZCdzIGxheW91dCBsb2dpYyBjb250cm9scyB0aGUgZ3Jp
ZCBpdGVtJ3Mgb3ZlcnJpZGUgaGVpZ2h0LCBoZW5jZSB3ZSBuZWVkIHRvCisgICAgICAgICAgICAv
LyBjbGVhciBhbnkgb3ZlcnJpZGUgaGVpZ2h0IHNldCBwcmV2aW91c2x5LCBzbyBpdCBkb2Vzbid0
IGludGVyZmVyZSBpbiBjdXJyZW50IGxheW91dAorICAgICAgICAgICAgLy8gZXhlY3V0aW9uLiBH
cmlkIG5ldmVyIHVzZXMgdGhlIG92ZXJyaWRlIHdpZHRoLCB0aGF0J3Mgd2h5IHdlIGRvbid0IG5l
ZWQgdG8gY2xlYXIgIGl0LgorICAgICAgICAgICAgY2hpbGQtPmNsZWFyT3ZlcnJpZGVDb250ZW50
TG9naWNhbEhlaWdodCgpOworCisgICAgICAgICAgICAvLyBXZSBtYXkgbmVlZCB0byByZXBlYXQg
dGhlIHRyYWNrIHNpemluZyBpbiBjYXNlIG9mIGFueSBncmlkIGl0ZW0gd2FzIG9ydGhvZ29uYWwu
CisgICAgICAgICAgICBpZiAoR3JpZExheW91dEZ1bmN0aW9uczo6aXNPcnRob2dvbmFsQ2hpbGQo
KnRoaXMsICpjaGlsZCkpCisgICAgICAgICAgICAgICAgbV9oYXNBbnlPcnRob2dvbmFsSXRlbSA9
IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KDApOwpAQCAtMjE2
LDcgKzIxNyw5IEBAIHZvaWQgUmVuZGVyR3JpZDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENo
aWxkcmVuLCBMYXlvdXRVbml0KQogICAgICAgICBsYXlvdXRFeGNsdWRlZENoaWxkcmVuKHJlbGF5
b3V0Q2hpbGRyZW4pOwogCiAgICAgICAgIExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2VGb3JDb2x1
bW5zID0gYXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIHBsYWNlSXRlbXNPbkdyaWQo
bV9ncmlkLCBhdmFpbGFibGVTcGFjZUZvckNvbHVtbnMpOworICAgICAgICBwbGFjZUl0ZW1zT25H
cmlkKG1fdHJhY2tTaXppbmdBbGdvcml0aG0sIGF2YWlsYWJsZVNwYWNlRm9yQ29sdW1ucyk7CisK
KyAgICAgICAgcGVyZm9ybUdyaWRJdGVtc1ByZUxheW91dChtX3RyYWNrU2l6aW5nQWxnb3JpdGht
KTsKIAogICAgICAgICAvLyAxLSBGaXJzdCwgdGhlIHRyYWNrIHNpemluZyBhbGdvcml0aG0gaXMg
dXNlZCB0byByZXNvbHZlIHRoZSBzaXplcyBvZiB0aGUKICAgICAgICAgLy8gZ3JpZCBjb2x1bW5z
LgpAQCAtMjM1LDcgKzIzOCw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6bGF5b3V0QmxvY2soYm9vbCBy
ZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQogICAgICAgICBpZiAoIWhhc0RlZmluaXRlTG9n
aWNhbEhlaWdodCkgewogICAgICAgICAgICAgbV9taW5Db250ZW50SGVpZ2h0ID0gTGF5b3V0VW5p
dCgpOwogICAgICAgICAgICAgbV9tYXhDb250ZW50SGVpZ2h0ID0gTGF5b3V0VW5pdCgpOwotICAg
ICAgICAgICAgY29tcHV0ZVRyYWNrU2l6ZXNGb3JJbmRlZmluaXRlU2l6ZShtX3RyYWNrU2l6aW5n
QWxnb3JpdGhtLCBGb3JSb3dzLCBtX2dyaWQsICptX21pbkNvbnRlbnRIZWlnaHQsICptX21heENv
bnRlbnRIZWlnaHQpOworICAgICAgICAgICAgY29tcHV0ZVRyYWNrU2l6ZXNGb3JJbmRlZmluaXRl
U2l6ZShtX3RyYWNrU2l6aW5nQWxnb3JpdGhtLCBGb3JSb3dzLCAqbV9taW5Db250ZW50SGVpZ2h0
LCAqbV9tYXhDb250ZW50SGVpZ2h0KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBiZSByZWFsbHkgYWRkZWQgdG8gdGhlIGludHJpbnNpYyBoZWlnaHQgaW4gUmVuZGVyQm94Ojpj
b21wdXRlQ29udGVudEFuZFNjcm9sbGJhckxvZ2ljYWxIZWlnaHRVc2luZygpLgogICAgICAgICAg
ICAgLy8gUmVtb3ZlIHRoaXMgd2hlbiB0aGF0IGlzIGZpeGVkLgogICAgICAgICAgICAgQVNTRVJU
KG1fbWluQ29udGVudEhlaWdodCk7CkBAIC0zODQsMTAgKzM4NywxMiBAQCB2b2lkIFJlbmRlckdy
aWQ6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxX
aWR0aCwgTGF5bwogICAgIGJvb2wgaGFkRXhjbHVkZWRDaGlsZHJlbiA9IGNvbXB1dGVQcmVmZXJy
ZWRXaWR0aHNGb3JFeGNsdWRlZENoaWxkcmVuKGNoaWxkTWluV2lkdGgsIGNoaWxkTWF4V2lkdGgp
OwogCiAgICAgR3JpZCBncmlkKGNvbnN0X2Nhc3Q8UmVuZGVyR3JpZCY+KCp0aGlzKSk7Ci0gICAg
cGxhY2VJdGVtc09uR3JpZChncmlkLCBzdGQ6Om51bGxvcHQpOwotCiAgICAgR3JpZFRyYWNrU2l6
aW5nQWxnb3JpdGhtIGFsZ29yaXRobSh0aGlzLCBncmlkKTsKLSAgICBjb21wdXRlVHJhY2tTaXpl
c0ZvckluZGVmaW5pdGVTaXplKGFsZ29yaXRobSwgRm9yQ29sdW1ucywgZ3JpZCwgbWluTG9naWNh
bFdpZHRoLCBtYXhMb2dpY2FsV2lkdGgpOworICAgIHBsYWNlSXRlbXNPbkdyaWQoYWxnb3JpdGht
LCBzdGQ6Om51bGxvcHQpOworCisgICAgcGVyZm9ybUdyaWRJdGVtc1ByZUxheW91dChhbGdvcml0
aG0pOworCisgICAgY29tcHV0ZVRyYWNrU2l6ZXNGb3JJbmRlZmluaXRlU2l6ZShhbGdvcml0aG0s
IEZvckNvbHVtbnMsIG1pbkxvZ2ljYWxXaWR0aCwgbWF4TG9naWNhbFdpZHRoKTsKIAogICAgIGlm
IChoYWRFeGNsdWRlZENoaWxkcmVuKSB7CiAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHN0ZDo6
bWF4KG1pbkxvZ2ljYWxXaWR0aCwgY2hpbGRNaW5XaWR0aCk7CkBAIC0zOTksOCArNDA0LDkgQEAg
dm9pZCBSZW5kZXJHcmlkOjpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0
JiBtaW5Mb2dpY2FsV2lkdGgsIExheW8KICAgICBtYXhMb2dpY2FsV2lkdGggKz0gc2Nyb2xsYmFy
V2lkdGg7CiB9CiAKLXZvaWQgUmVuZGVyR3JpZDo6Y29tcHV0ZVRyYWNrU2l6ZXNGb3JJbmRlZmlu
aXRlU2l6ZShHcmlkVHJhY2tTaXppbmdBbGdvcml0aG0mIGFsZ29yaXRobSwgR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgR3JpZCYgZ3JpZCwgTGF5b3V0VW5pdCYgbWluSW50cmlu
c2ljU2l6ZSwgTGF5b3V0VW5pdCYgbWF4SW50cmluc2ljU2l6ZSkgY29uc3QKK3ZvaWQgUmVuZGVy
R3JpZDo6Y29tcHV0ZVRyYWNrU2l6ZXNGb3JJbmRlZmluaXRlU2l6ZShHcmlkVHJhY2tTaXppbmdB
bGdvcml0aG0mIGFsZ29yaXRobSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwg
TGF5b3V0VW5pdCYgbWluSW50cmluc2ljU2l6ZSwgTGF5b3V0VW5pdCYgbWF4SW50cmluc2ljU2l6
ZSkgY29uc3QKIHsKKyAgICBjb25zdCBHcmlkJiBncmlkID0gYWxnb3JpdGhtLmdyaWQoKTsKICAg
ICBhbGdvcml0aG0uc2V0dXAoZGlyZWN0aW9uLCBudW1UcmFja3MoZGlyZWN0aW9uLCBncmlkKSwg
SW50cmluc2ljU2l6ZUNvbXB1dGF0aW9uLCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCk7CiAg
ICAgYWxnb3JpdGhtLnJ1bigpOwogCkBAIC01NTcsMTMgKzU2MywxNCBAQCB1bnNpZ25lZCBSZW5k
ZXJHcmlkOjpjbGFtcEF1dG9SZXBlYXRUcmFja3MoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbiwgdQogICAgIHJldHVybiBzdGQ6Om1pbihhdXRvUmVwZWF0VHJhY2tzLCBtYXhUcmFj
a3MgLSBpbnNlcnRpb25Qb2ludCk7CiB9CiAKLS8vIEZJWE1FKTogV2Ugc2hvdWxkbid0IGhhdmUg
dG8gcGFzcyB0aGUgYXZhaWxhYmxlIGxvZ2ljYWwgd2lkdGggYXMgYXJndW1lbnQuIFRoZSBwcm9i
bGVtIGlzIHRoYXQKKy8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBwYXNzIHRoZSBhdmFp
bGFibGUgbG9naWNhbCB3aWR0aCBhcyBhcmd1bWVudC4gVGhlIHByb2JsZW0gaXMgdGhhdAogLy8g
YXZhaWxhYmxlTG9naWNhbFdpZHRoKCkgZG9lcyBhbHdheXMgcmV0dXJuIGEgdmFsdWUgZXZlbiBp
ZiB3ZSBjYW5ub3QgcmVzb2x2ZSBpdCBsaWtlIHdoZW4KIC8vIGNvbXB1dGluZyB0aGUgaW50cmlu
c2ljIHNpemUgKHByZWZlcnJlZCB3aWR0aHMpLiBUaGF0J3Mgd2h5IHdlIHBhc3MgdGhlIHJlc3Bv
bnNpYmlsaXR5IHRvIHRoZQogLy8gY2FsbGVyIHdobyBkb2VzIGtub3cgd2hldGhlciB0aGUgYXZh
aWxhYmxlIGxvZ2ljYWwgd2lkdGggaXMgaW5kZWZpbml0ZSBvciBub3QuCi12b2lkIFJlbmRlckdy
aWQ6OnBsYWNlSXRlbXNPbkdyaWQoR3JpZCYgZ3JpZCwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0
PiBhdmFpbGFibGVTcGFjZSkgY29uc3QKK3ZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3Jp
ZChHcmlkVHJhY2tTaXppbmdBbGdvcml0aG0mIGFsZ29yaXRobSwgc3RkOjpvcHRpb25hbDxMYXlv
dXRVbml0PiBhdmFpbGFibGVMb2dpY2FsV2lkdGgpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgYXV0
b1JlcGVhdENvbHVtbnMgPSBjb21wdXRlQXV0b1JlcGVhdFRyYWNrc0NvdW50KEZvckNvbHVtbnMs
IGF2YWlsYWJsZVNwYWNlKTsKKyAgICBHcmlkJiBncmlkID0gYWxnb3JpdGhtLm11dGFibGVHcmlk
KCk7CisgICAgdW5zaWduZWQgYXV0b1JlcGVhdENvbHVtbnMgPSBjb21wdXRlQXV0b1JlcGVhdFRy
YWNrc0NvdW50KEZvckNvbHVtbnMsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgdW5zaWdu
ZWQgYXV0b1JlcGVhdFJvd3MgPSBjb21wdXRlQXV0b1JlcGVhdFRyYWNrc0NvdW50KEZvclJvd3Ms
IGF2YWlsYWJsZUxvZ2ljYWxIZWlnaHRGb3JQZXJjZW50YWdlQ29tcHV0YXRpb24oKSk7CiAKICAg
ICBhdXRvUmVwZWF0Um93cyA9IGNsYW1wQXV0b1JlcGVhdFRyYWNrcyhGb3JSb3dzLCBhdXRvUmVw
ZWF0Um93cyk7CkBAIC01ODIsMTMgKzU4OSwxMCBAQCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlSXRl
bXNPbkdyaWQoR3JpZCYgZ3JpZCwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBhdmFpbGFibAog
CiAgICAgVmVjdG9yPFJlbmRlckJveCo+IGF1dG9NYWpvckF4aXNBdXRvR3JpZEl0ZW1zOwogICAg
IFZlY3RvcjxSZW5kZXJCb3gqPiBzcGVjaWZpZWRNYWpvckF4aXNBdXRvR3JpZEl0ZW1zOwotICAg
IGJvb2wgaGFzQW55T3J0aG9nb25hbEdyaWRJdGVtID0gZmFsc2U7CiAgICAgZm9yIChhdXRvKiBj
aGlsZCA9IGdyaWQub3JkZXJJdGVyYXRvcigpLmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IGdyaWQu
b3JkZXJJdGVyYXRvcigpLm5leHQoKSkgewogICAgICAgICBpZiAoZ3JpZC5vcmRlckl0ZXJhdG9y
KCkuc2hvdWxkU2tpcENoaWxkKCpjaGlsZCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBoYXNBbnlPcnRob2dvbmFsR3JpZEl0ZW0gPSBoYXNBbnlPcnRob2dvbmFsR3JpZEl0ZW0g
fHwgR3JpZExheW91dEZ1bmN0aW9uczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsICpjaGlsZCk7
Ci0KICAgICAgICAgR3JpZEFyZWEgYXJlYSA9IGdyaWQuZ3JpZEl0ZW1BcmVhKCpjaGlsZCk7CiAg
ICAgICAgIGlmICghYXJlYS5yb3dzLmlzSW5kZWZpbml0ZSgpKQogICAgICAgICAgICAgYXJlYS5y
b3dzLnRyYW5zbGF0ZShzdGQ6OmFicyhncmlkLnNtYWxsZXN0VHJhY2tTdGFydChGb3JSb3dzKSkp
OwpAQCAtNjA3LDcgKzYxMSw2IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3JpZChH
cmlkJiBncmlkLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsCiAgICAgICAgIH0K
ICAgICAgICAgZ3JpZC5pbnNlcnQoKmNoaWxkLCB7IGFyZWEucm93cywgYXJlYS5jb2x1bW5zIH0p
OwogICAgIH0KLSAgICBncmlkLnNldEhhc0FueU9ydGhvZ29uYWxHcmlkSXRlbShoYXNBbnlPcnRo
b2dvbmFsR3JpZEl0ZW0pOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGlmIChncmlkLmhh
c0dyaWRJdGVtcygpKSB7CkBAIC02MzYsNiArNjM5LDIzIEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxh
Y2VJdGVtc09uR3JpZChHcmlkJiBncmlkLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWls
YWJsCiAjZW5kaWYKIH0KIAordm9pZCBSZW5kZXJHcmlkOjpwZXJmb3JtR3JpZEl0ZW1zUHJlTGF5
b3V0KGNvbnN0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobSYgYWxnb3JpdGhtKSBjb25zdAorewor
ICAgIEFTU0VSVCghYWxnb3JpdGhtLmdyaWQoKS5uZWVkc0l0ZW1zUGxhY2VtZW50KCkpOworICAg
IC8vIEZJWE1FOiBXZSBuZWVkIGEgd2F5IHdoZW4gd2UgYXJlIGNhbGxpbmcgdGhpcyBkdXJpbmcg
aW50cmluc2ljIHNpemUgY29tcHVhdGlvbiBiZWZvcmUgcGVyZm9ybWluZworICAgIC8vIHRoZSBs
YXlvdXQuIE1heWJlIHVzaW5nIHRoZSBQcmVMYXlvdXQgcGhhc2UgPworICAgIGZvciAoYXV0byog
Y2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
Z0JveCgpKSB7CisgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgLy8gT3J0aG9nb25hbCBpdGVtcyBzaG91bGQg
YmUgbGFpZCBvdXQgaW4gb3JkZXIgdG8gcHJvcGVybHkgY29tcHV0ZSBjb250ZW50LXNpemVkIHRy
YWNrcyB0aGF0IG1heSBkZXBlbmQgb24gaXRlbSdzIGludHJpbnNpYyBzaXplLgorICAgICAgICAv
LyBXZSBhbHNvIG5lZWQgdG8gcHJvcGVybHkgZXN0aW1hdGUgaXRzIGdyaWQgYXJlYSBzaXplLCBz
aW5jZSBpdCBtYXkgYWZmZWN0IHRvIHRoZSBiYXNlbGluZSBzaGltcyBpZiBzdWNoIGl0ZW0gcGFy
dGljaWFwdGVzIGluIGJhc2VsaW5lIGFsaWdubWVudC4gCisgICAgICAgIGlmIChHcmlkTGF5b3V0
RnVuY3Rpb25zOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgKmNoaWxkKSkgeworICAgICAgICAg
ICAgdXBkYXRlR3JpZEFyZWFMb2dpY2FsU2l6ZSgqY2hpbGQsIGFsZ29yaXRobS5lc3RpbWF0ZWRH
cmlkQXJlYUJyZWFkdGhGb3JDaGlsZCgqY2hpbGQpKTsKKyAgICAgICAgICAgIGNoaWxkLT5sYXlv
dXRJZk5lZWRlZCgpOworICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIFJlbmRlckdyaWQ6OnBv
cHVsYXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVyYXRvcihHcmlkJiBncmlkKSBjb25zdAogewog
ICAgIE9yZGVySXRlcmF0b3JQb3B1bGF0b3IgcG9wdWxhdG9yKGdyaWQub3JkZXJJdGVyYXRvcigp
KTsKQEAgLTg0OSw2ICs4NjksMzEgQEAgc3RhdGljIGNvbnN0IFN0eWxlQ29udGVudEFsaWdubWVu
dERhdGEmIGNvbnRlbnRBbGlnbm1lbnROb3JtYWxCZWhhdmlvckdyaWQoKQogICAgIHJldHVybiBu
b3JtYWxCZWhhdmlvcjsKIH0KIAorc3RhdGljIGJvb2wgb3ZlcnJpZGVTaXplQ2hhbmdlZChjb25z
dCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBM
YXlvdXRTaXplIHNpemUpCit7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKQorICAg
ICAgICByZXR1cm4gIWNoaWxkLmhhc092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2lj
YWxXaWR0aCgpIHx8IGNoaWxkLm92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxX
aWR0aCgpICE9IHNpemUud2lkdGgoKTsKKyAgICByZXR1cm4gIWNoaWxkLmhhc092ZXJyaWRlQ29u
dGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKSB8fCBjaGlsZC5vdmVycmlkZUNvbnRh
aW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgIT0gc2l6ZS5oZWlnaHQoKTsKK30KKwor
c3RhdGljIGJvb2wgaGFzUmVsYXRpdmVCbG9ja0F4aXNTaXplKGNvbnN0IFJlbmRlckdyaWQmIGdy
aWQsIGNvbnN0IFJlbmRlckJveCYgY2hpbGQpCit7CisgICAgcmV0dXJuIEdyaWRMYXlvdXRGdW5j
dGlvbnM6OmlzT3J0aG9nb25hbENoaWxkKGdyaWQsIGNoaWxkKSA/IGNoaWxkLmhhc1JlbGF0aXZl
TG9naWNhbFdpZHRoKCkgfHwgY2hpbGQuc3R5bGUoKS5sb2dpY2FsV2lkdGgoKS5pc0F1dG8oKSA6
IGNoaWxkLmhhc1JlbGF0aXZlTG9naWNhbEhlaWdodCgpOworfQorCit2b2lkIFJlbmRlckdyaWQ6
OnVwZGF0ZUdyaWRBcmVhTG9naWNhbFNpemUoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0U2l6ZSBn
cmlkQXJlYUxvZ2ljYWxTaXplKSBjb25zdAoreworICAgIC8vIEJlY2F1c2UgdGhlIGdyaWQgYXJl
YSBjYW5ub3QgYmUgc3R5bGVkLCB3ZSBkb24ndCBuZWVkIHRvIGFkanVzdAorICAgIC8vIHRoZSBn
cmlkIGJyZWFkdGggdG8gYWNjb3VudCBmb3IgJ2JveC1zaXppbmcnLgorICAgIGJvb2wgZ3JpZEFy
ZWFXaWR0aENoYW5nZWQgPSBvdmVycmlkZVNpemVDaGFuZ2VkKGNoaWxkLCBGb3JDb2x1bW5zLCBn
cmlkQXJlYUxvZ2ljYWxTaXplKTsKKyAgICBib29sIGdyaWRBcmVhSGVpZ2h0Q2hhbmdlZCA9IG92
ZXJyaWRlU2l6ZUNoYW5nZWQoY2hpbGQsIEZvclJvd3MsIGdyaWRBcmVhTG9naWNhbFNpemUpOwor
ICAgIGlmIChncmlkQXJlYVdpZHRoQ2hhbmdlZCB8fCAoZ3JpZEFyZWFIZWlnaHRDaGFuZ2VkICYm
IGhhc1JlbGF0aXZlQmxvY2tBeGlzU2l6ZSgqdGhpcywgY2hpbGQpKSkKKyAgICAgICAgY2hpbGQu
c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKworICAgIGNoaWxkLnNldE92ZXJyaWRlQ29u
dGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aChncmlkQXJlYUxvZ2ljYWxTaXplLndpZHRo
KCkpOworICAgIGNoaWxkLnNldE92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxI
ZWlnaHQoZ3JpZEFyZWFMb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Cit9CisKIHZvaWQgUmVuZGVyR3Jp
ZDo6bGF5b3V0R3JpZEl0ZW1zKCkKIHsKICAgICBwb3B1bGF0ZUdyaWRQb3NpdGlvbnNGb3JEaXJl
Y3Rpb24oRm9yQ29sdW1ucyk7CkBAIC04NjIsMjAgKzkwNywxMCBAQCB2b2lkIFJlbmRlckdyaWQ6
OmxheW91dEdyaWRJdGVtcygpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0g
ICAgICAgIC8vIEJlY2F1c2UgdGhlIGdyaWQgYXJlYSBjYW5ub3QgYmUgc3R5bGVkLCB3ZSBkb24n
dCBuZWVkIHRvIGFkanVzdAotICAgICAgICAvLyB0aGUgZ3JpZCBicmVhZHRoIHRvIGFjY291bnQg
Zm9yICdib3gtc2l6aW5nJy4KLSAgICAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBvbGRP
dmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGggPSBjaGlsZC0+aGFzT3Zl
cnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkgPyBjaGlsZC0+b3ZlcnJp
ZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkgOiBMYXlvdXRVbml0KCk7Ci0g
ICAgICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gb2xkT3ZlcnJpZGVDb250YWluaW5nQmxv
Y2tDb250ZW50TG9naWNhbEhlaWdodCA9IGNoaWxkLT5oYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgPyBjaGlsZC0+b3ZlcnJpZGVDb250YWluaW5nQmxvY2tD
b250ZW50TG9naWNhbEhlaWdodCgpIDogTGF5b3V0VW5pdCgpOwotCi0gICAgICAgIExheW91dFVu
aXQgb3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoID0gZ3JpZEFyZWFC
cmVhZHRoRm9yQ2hpbGRJbmNsdWRpbmdBbGlnbm1lbnRPZmZzZXRzKCpjaGlsZCwgRm9yQ29sdW1u
cyk7Ci0gICAgICAgIExheW91dFVuaXQgb3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9n
aWNhbEhlaWdodCA9IGdyaWRBcmVhQnJlYWR0aEZvckNoaWxkSW5jbHVkaW5nQWxpZ25tZW50T2Zm
c2V0cygqY2hpbGQsIEZvclJvd3MpOwotICAgICAgICBpZiAoIW9sZE92ZXJyaWRlQ29udGFpbmlu
Z0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCB8fCBvbGRPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0Nv
bnRlbnRMb2dpY2FsV2lkdGgudmFsdWUoKSAhPSBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRl
bnRMb2dpY2FsV2lkdGgKLSAgICAgICAgICAgIHx8ICgoIW9sZE92ZXJyaWRlQ29udGFpbmluZ0Js
b2NrQ29udGVudExvZ2ljYWxIZWlnaHQgfHwgb2xkT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250
ZW50TG9naWNhbEhlaWdodC52YWx1ZSgpICE9IG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVu
dExvZ2ljYWxIZWlnaHQpCi0gICAgICAgICAgICAgICAgJiYgY2hpbGQtPmhhc1JlbGF0aXZlTG9n
aWNhbEhlaWdodCgpKSkKLSAgICAgICAgICAgIGNoaWxkLT5zZXROZWVkc0xheW91dChNYXJrT25s
eVRoaXMpOwotCi0gICAgICAgIGNoaWxkLT5zZXRPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRl
bnRMb2dpY2FsV2lkdGgob3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRo
KTsKLSAgICAgICAgY2hpbGQtPnNldE92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2lj
YWxIZWlnaHQob3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCk7Cisg
ICAgICAgIC8vIFNldHRpbmcgdGhlIGRlZmluaXRlIGdyaWQgYXJlYSdzIHNpemVzLiBJdCBtYXkg
aW1wbHkgdGhhdCB0aGUKKyAgICAgICAgLy8gaXRlbSBtdXN0IHBlcmZvcm0gYSBsYXlvdXQgaWYg
aXRzIGFyZWEgZGlmZmVycyBmcm9tIHRoZSBvbmUKKyAgICAgICAgLy8gdXNlZCBkdXJpbmcgdGhl
IHRyYWNrIHNpemluZyBhbGdvcml0aG0uCisgICAgICAgIHVwZGF0ZUdyaWRBcmVhTG9naWNhbFNp
emUoKmNoaWxkLCBMYXlvdXRTaXplKGdyaWRBcmVhQnJlYWR0aEZvckNoaWxkSW5jbHVkaW5nQWxp
Z25tZW50T2Zmc2V0cygqY2hpbGQsIEZvckNvbHVtbnMpLCBncmlkQXJlYUJyZWFkdGhGb3JDaGls
ZEluY2x1ZGluZ0FsaWdubWVudE9mZnNldHMoKmNoaWxkLCBGb3JSb3dzKSkpOwogCiAgICAgICAg
IExheW91dFJlY3Qgb2xkQ2hpbGRSZWN0ID0gY2hpbGQtPmZyYW1lUmVjdCgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaAppbmRleCA4YjVhZjFiZmUzYjhmNWZkYWQzYTg5N2Rm
MDM1NTY2MjlmNmViOGM4Li5mMzU5MTBjZjUwNTJjZjc2YmQ0ZWQwNTQyZmU5MTcwOGJiNWI3YTdl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKQEAgLTc0LDYgKzc0LDggQEAg
cHVibGljOgogICAgIExheW91dFVuaXQgZ3V0dGVyc1NpemUoY29uc3QgR3JpZCYsIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiwgdW5zaWduZWQgc3RhcnRMaW5lLCB1bnNpZ25lZCBzcGFuLCBzdGQ6
Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsZVNpemUpIGNvbnN0OwogICAgIExheW91dFVu
aXQgZ3JpZEl0ZW1PZmZzZXQoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKIAorICAg
IHZvaWQgdXBkYXRlR3JpZEFyZWFMb2dpY2FsU2l6ZShSZW5kZXJCb3gmLCBMYXlvdXRTaXplKSBj
b25zdDsKKwogICAgIFN0eWxlQ29udGVudEFsaWdubWVudERhdGEgY29udGVudEFsaWdubWVudChH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CkBAIC0xMDUsNyAr
MTA3LDkgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxPcmRlcmVkVHJhY2tJbmRl
eFNldD4gY29tcHV0ZUVtcHR5VHJhY2tzRm9yQXV0b1JlcGVhdChHcmlkJiwgR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uKSBjb25zdDsKIAotICAgIHZvaWQgcGxhY2VJdGVtc09uR3JpZChHcmlkJiwg
c3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBhdmFpbGFibGVTcGFjZUZvckNvbHVtbnMpIGNvbnN0
OworICAgIHZvaWQgcGVyZm9ybUdyaWRJdGVtc1ByZUxheW91dChjb25zdCBHcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG0mKSBjb25zdDsKKworICAgIHZvaWQgcGxhY2VJdGVtc09uR3JpZChHcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG0mLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsZUxv
Z2ljYWxXaWR0aCkgY29uc3Q7CiAgICAgdm9pZCBwb3B1bGF0ZUV4cGxpY2l0R3JpZEFuZE9yZGVy
SXRlcmF0b3IoR3JpZCYpIGNvbnN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmlkQXJlYT4gY3Jl
YXRlRW1wdHlHcmlkQXJlYUF0U3BlY2lmaWVkUG9zaXRpb25zT3V0c2lkZUdyaWQoR3JpZCYsIGNv
bnN0IFJlbmRlckJveCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwgY29uc3QgR3JpZFNwYW4m
KSBjb25zdDsKICAgICB2b2lkIHBsYWNlU3BlY2lmaWVkTWFqb3JBeGlzSXRlbXNPbkdyaWQoR3Jp
ZCYsIGNvbnN0IFZlY3RvcjxSZW5kZXJCb3gqPiYpIGNvbnN0OwpAQCAtMTIxLDcgKzEyNSw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBsYXlvdXRQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCYsIGJv
b2wgcmVsYXlvdXRDaGlsZHJlbiwgYm9vbCBmaXhlZFBvc2l0aW9uT2JqZWN0c09ubHkpIG92ZXJy
aWRlOwogCiAgICAgdm9pZCBjb21wdXRlVHJhY2tTaXplc0ZvckRlZmluaXRlU2l6ZShHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24sIExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2UpOwotICAgIHZvaWQg
Y29tcHV0ZVRyYWNrU2l6ZXNGb3JJbmRlZmluaXRlU2l6ZShHcmlkVHJhY2tTaXppbmdBbGdvcml0
aG0mLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24sIEdyaWQmLCBMYXlvdXRVbml0JiBtaW5JbnRy
aW5zaWNTaXplLCBMYXlvdXRVbml0JiBtYXhJbnRyaW5zaWNTaXplKSBjb25zdDsKKyAgICB2b2lk
IGNvbXB1dGVUcmFja1NpemVzRm9ySW5kZWZpbml0ZVNpemUoR3JpZFRyYWNrU2l6aW5nQWxnb3Jp
dGhtJiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBMYXlvdXRVbml0JiBtaW5JbnRyaW5zaWNT
aXplLCBMYXlvdXRVbml0JiBtYXhJbnRyaW5zaWNTaXplKSBjb25zdDsKICAgICBMYXlvdXRVbml0
IGNvbXB1dGVUcmFja0Jhc2VkTG9naWNhbEhlaWdodCgpIGNvbnN0OwogCiAgICAgdm9pZCByZXBl
YXRUcmFja3NTaXppbmdJZk5lZWRlZChMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlRm9yQ29sdW1u
cywgTGF5b3V0VW5pdCBhdmFpbGFibGVTcGFjZUZvclJvd3MpOwpAQCAtMTkzLDYgKzE5Nyw4IEBA
IHByaXZhdGU6CiAKICAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IG1fbWluQ29udGVudEhl
aWdodDsKICAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IG1fbWF4Q29udGVudEhlaWdodDsK
KworICAgIGJvb2wgbV9oYXNBbnlPcnRob2dvbmFsSXRlbSB7ZmFsc2V9OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354539</attachid>
            <date>2018-11-12 02:15:40 -0800</date>
            <delta_ts>2018-11-12 16:31:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191358-20181112111539.patch</filename>
            <type>text/plain</type>
            <size>30167</size>
            <attacher name="Javier Fernandez">jfernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4MDc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE5ZGI1NWM2NzRhMzQ1
MzExYWQ2OWU2NGVkMGE3Njc2YzY1NDI3My4uNjY3ODcyNmY4MzcxYjhjYWYyOWRmNjc3ZWNhZWZh
MmUxZjhiZmM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE4LTExLTA3ICBKYXZp
ZXIgRmVybmFuZGV6ICA8amZlcm5hbmRlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gUmVmYWN0b3JpbmcgdG8gbWFrZSBtb3JlIGV4cGxpY2l0IHRoZSBvcnRob2dvbmFsIGl0ZW1z
JyBwcmUtbGF5b3V0IGxvZ2ljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTEzNTgKKworICAgICAgICBSZXZpZXdlZCBieSBNYW51ZWwgUmVnbyBDYXNh
c25vdmFzLgorCisgICAgICAgIFRoZXNlIGNoYW5nZXMgYXJlIGp1c3QgYSByZWZhY3RvcmluZyB0
byBlYXNlIHRoZSBpbnRlZ3JhdGlvbiBvZiB0aGUgbmV3IEJhc2VsaW5lIEFsaWdubWVudAorICAg
ICAgICBsb2dpYyBpbiBhIGZvbGxvdyB1cCBwYXRjaC4KKworICAgICAgICBXZSBuZWVkIHRvIHBy
b3Blcmx5IGVzdGltYXRlIHRoZSBncmlkIGFyZWEgc2l6ZSBvZiBvcnRob2dvbmFsIGl0ZW1zIHNv
IHRoYXQgd2UgY2FuIHBlcmZvcm0KKyAgICAgICAgYW4gYWNjdXJhdGUgcHJlLWxheW91dC4gVGhp
cyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBvcnRob2dvbmFsIGl0ZW1zIHdpbGwgc3ludGhlc2l6ZSB0
aGVpciBiYXNlbGluZQorICAgICAgICBpZiB0aGV5IHBhcnRpY2lwYXRlIGluIGFueSBiYXNlbGlu
ZSBhbGlnbm1lbnQgY29udGV4dC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHNpbmNlIG5vIGJl
aGF2aW9yIGNoYW5nZSBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluIHRoaXMgcGF0Y2guCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmlkOjpzZXROZWVk
c0l0ZW1zUGxhY2VtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvR3JpZC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjplc3RpbWF0ZWRHcmlkQXJlYUJyZWFkdGhGb3JD
aGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06
OmdyaWRBcmVhQnJlYWR0aEZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRU
cmFja1NpemluZ0FsZ29yaXRobTo6aXNSZWxhdGl2ZUdyaWRMZW5ndGhBc0F1dG8gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjppc1JlbGF0aXZlU2l6
ZWRUcmFja0FzQXV0byBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdB
bGdvcml0aG06OmdyaWRUcmFja1NpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZWZp
bml0ZVNpemVTdHJhdGVneTo6ZmluZFVzZWRGbGV4RnJhY3Rpb24gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpydW4pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpyZXNldCk6CisgICAgICAgICogcmVuZGVyaW5n
L0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6OmdyaWRUcmFja1NpemUgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6
OnJlcGVhdFRyYWNrc1NpemluZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdy
aWQ6OmxheW91dEJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdy
aWQ6OmNvbXB1dGVUcmFja1NpemVzRm9ySW5kZWZpbml0ZVNpemUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3JpZCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJHcmlkOjpwZXJmb3JtR3JpZEl0ZW1zUHJlTGF5b3V0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Om92ZXJyaWRlU2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
aGFzUmVsYXRpdmVCbG9ja0F4aXNTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6
OnVwZGF0ZUdyaWRBcmVhTG9naWNhbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyR3JpZDo6bGF5b3V0R3JpZEl0ZW1zKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3Jp
ZC5oOgorCiAyMDE4LTExLTExICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbaU9TXSBEcmF3IGNhcHMgbG9jayBpbmRpY2F0b3IgaW4gcGFzc3dvcmQgZmllbGRz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5jcHAKaW5kZXggOTFlMzM1ODgzM2ZiOTUxZjE3OTJkZDM4
MmI2MzI4NjY4Yzg1NjQ0MS4uYzcyZDAxZDgxYzdkNzE2NjE1NzllM2JhMDE4MzBlNDI5ZDMwZjY4
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmNwcApAQCAtMTU3LDcgKzE1Nyw2IEBAIHZvaWQg
R3JpZDo6c2V0TmVlZHNJdGVtc1BsYWNlbWVudChib29sIG5lZWRzSXRlbXNQbGFjZW1lbnQpCiAK
ICAgICBtX2dyaWQuc2hyaW5rKDApOwogICAgIG1fZ3JpZEl0ZW1BcmVhLmNsZWFyKCk7Ci0gICAg
bV9oYXNBbnlPcnRob2dvbmFsR3JpZEl0ZW0gPSBmYWxzZTsKICAgICBtX3NtYWxsZXN0Um93U3Rh
cnQgPSAwOwogICAgIG1fc21hbGxlc3RDb2x1bW5TdGFydCA9IDA7CiAgICAgbV9hdXRvUmVwZWF0
RW1wdHlDb2x1bW5zID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9HcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5oCmluZGV4IDJjN2Q5
ODFlNzhjOTUxMTcyNTZkOWQ2NTk4NDBkNWQ3NjI3NDYyNmUuLjkzMDk4MTRmYTFiYmFlYzI2Y2Vk
OTA4YWRjOWQ2YTg5ZTc0MTFmMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9HcmlkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuaApAQCAtNTMsMTAg
KzUzLDYgQEAgcHVibGljOgogICAgIC8vIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGZhbHNlIGZv
ciBhIGdyaWQgY29udGFpbmVyIHdpdGggb25seSBvdXQgb2YgZmxvdyBjaGlsZHJlbi4KICAgICBi
b29sIGhhc0dyaWRJdGVtcygpIGNvbnN0IHsgcmV0dXJuICFtX2dyaWRJdGVtQXJlYS5pc0VtcHR5
KCk7IH0KIAotICAgIC8vIEZJWE1FOiBtb3ZlIHRoaXMgdG8gU2l6aW5nRGF0YSBvbmNlIHBsYWNl
SXRlbXNPbkdyaWQoKSB0YWtlcyBpdCBhcyBhcmd1bWVudC4KLSAgICBib29sIGhhc0FueU9ydGhv
Z29uYWxHcmlkSXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQW55T3J0aG9nb25hbEdyaWRJdGVt
OyB9Ci0gICAgdm9pZCBzZXRIYXNBbnlPcnRob2dvbmFsR3JpZEl0ZW0oYm9vbCBoYXNBbnlPcnRo
b2dvbmFsR3JpZEl0ZW0pIHsgbV9oYXNBbnlPcnRob2dvbmFsR3JpZEl0ZW0gPSBoYXNBbnlPcnRo
b2dvbmFsR3JpZEl0ZW07IH0KLQogICAgIEdyaWRBcmVhIGdyaWRJdGVtQXJlYShjb25zdCBSZW5k
ZXJCb3gmIGl0ZW0pIGNvbnN0OwogICAgIHZvaWQgc2V0R3JpZEl0ZW1BcmVhKGNvbnN0IFJlbmRl
ckJveCYgaXRlbSwgR3JpZEFyZWEpOwogCkBAIC05NSw3ICs5MSw2IEBAIHByaXZhdGU6CiAgICAg
dW5zaWduZWQgbV9hdXRvUmVwZWF0Q29sdW1ucyB7IDAgfTsKICAgICB1bnNpZ25lZCBtX2F1dG9S
ZXBlYXRSb3dzIHsgMCB9OwogCi0gICAgYm9vbCBtX2hhc0FueU9ydGhvZ29uYWxHcmlkSXRlbSB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX25lZWRzSXRlbXNQbGFjZW1lbnQgeyB0cnVlIH07CiAKICAg
ICBHcmlkQXNNYXRyaXggbV9ncmlkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcAppbmRleCAxZjcyMTQ3MjQ4ZDE5NjNjZjhh
NjJiY2Y0Yzg2YTIxNzhiZjQzYTExLi5kMDJiNzRhMDk1NjY5ZDAzZjMxMTUwYTdiN2Y3NWU3NDNi
MWY4NTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6
aW5nQWxnb3JpdGhtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtLmNwcApAQCAtNTMzLDI0ICs1MzMsMzUgQEAgdm9pZCBHcmlkVHJhY2tT
aXppbmdBbGdvcml0aG06OmRpc3RyaWJ1dGVTcGFjZVRvVHJhY2tzKFZlY3RvcjxHcmlkVHJhY2sq
PiYgdHJhY2sKICAgICAgICAgdHJhY2stPnNldFBsYW5uZWRTaXplKHRyYWNrLT5wbGFubmVkU2l6
ZSgpID09IGluZmluaXR5ID8gdHJhY2stPnRlbXBTaXplKCkgOiBzdGQ6Om1heCh0cmFjay0+cGxh
bm5lZFNpemUoKSwgdHJhY2stPnRlbXBTaXplKCkpKTsKIH0KIAotTGF5b3V0VW5pdCBHcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG06OmFzc3VtZWRSb3dzU2l6ZUZvck9ydGhvZ29uYWxDaGlsZChjb25z
dCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAorTGF5b3V0U2l6ZSBHcmlkVHJhY2tTaXppbmdBbGdv
cml0aG06OmVzdGltYXRlZEdyaWRBcmVhQnJlYWR0aEZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYg
Y2hpbGQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKEdyaWRMYXlvdXRGdW5jdGlvbnM6OmlzT3J0aG9n
b25hbENoaWxkKCptX3JlbmRlckdyaWQsIGNoaWxkKSk7Ci0gICAgY29uc3QgR3JpZFNwYW4mIHNw
YW4gPSBtX2dyaWQuZ3JpZEl0ZW1TcGFuKGNoaWxkLCBGb3JSb3dzKTsKKyAgICByZXR1cm4ge2Vz
dGltYXRlZEdyaWRBcmVhQnJlYWR0aEZvckNoaWxkKGNoaWxkLCBGb3JDb2x1bW5zKSwgZXN0aW1h
dGVkR3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQoY2hpbGQsIEZvclJvd3MpfTsKK30KKworTGF5b3V0
VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmVzdGltYXRlZEdyaWRBcmVhQnJlYWR0aEZv
ckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBk
aXJlY3Rpb24pIGNvbnN0Cit7CisgICAgY29uc3QgR3JpZFNwYW4mIHNwYW4gPSBtX2dyaWQuZ3Jp
ZEl0ZW1TcGFuKGNoaWxkLCBkaXJlY3Rpb24pOwogICAgIExheW91dFVuaXQgZ3JpZEFyZWFTaXpl
OwogICAgIGJvb2wgZ3JpZEFyZWFJc0luZGVmaW5pdGUgPSBmYWxzZTsKLSAgICBMYXlvdXRVbml0
IGNvbnRhaW5pbmdCbG9ja0F2YWlsYWJsZVNpemUgPSBtX3JlbmRlckdyaWQtPmNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxIZWlnaHRGb3JDb250ZW50KEV4Y2x1ZGVNYXJnaW5Cb3JkZXJQYWRkaW5nKTsK
KyAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsZVNpemUgPSBhdmFpbGFibGVT
cGFjZShkaXJlY3Rpb24pOwogICAgIGZvciAoYXV0byB0cmFja1Bvc2l0aW9uIDogc3Bhbikgewot
ICAgICAgICBHcmlkTGVuZ3RoIG1heFRyYWNrU2l6ZSA9IGdyaWRUcmFja1NpemUoRm9yUm93cywg
dHJhY2tQb3NpdGlvbikubWF4VHJhY2tCcmVhZHRoKCk7Ci0gICAgICAgIGlmIChtYXhUcmFja1Np
emUuaXNDb250ZW50U2l6ZWQoKSB8fCBtYXhUcmFja1NpemUuaXNGbGV4KCkpCisgICAgICAgIC8v
IFdlIG1heSBuZWVkIHRvIGVzdGltYXRlIHRoZSBncmlkIGFyZWEgc2l6ZSBiZWZvcmUgcnVubmlu
ZyB0aGUgdHJhY2sKKyAgICAgICAgLy8gc2l6aW5nIGFsZ29yaXRobSBpbiBvcmRlciB0byBwZXJm
b3JtIHRoZSBwcmUtbGF5b3V0IG9mIG9ydGhvZ29uYWwKKyAgICAgICAgLy8gaXRlbXMuCisgICAg
ICAgIEdyaWRUcmFja1NpemUgdHJhY2tTaXplID0gd2FzU2V0dXAoKSA/IGdyaWRUcmFja1NpemUo
ZGlyZWN0aW9uLCB0cmFja1Bvc2l0aW9uKSA6IHJhd0dyaWRUcmFja1NpemUoZGlyZWN0aW9uLCB0
cmFja1Bvc2l0aW9uKTsKKyAgICAgICAgR3JpZExlbmd0aCBtYXhUcmFja1NpemUgPSB0cmFja1Np
emUubWF4VHJhY2tCcmVhZHRoKCk7CisgICAgICAgIGlmIChtYXhUcmFja1NpemUuaXNDb250ZW50
U2l6ZWQoKSB8fCBtYXhUcmFja1NpemUuaXNGbGV4KCkgfHwgaXNSZWxhdGl2ZUdyaWRMZW5ndGhB
c0F1dG8obWF4VHJhY2tTaXplLCBkaXJlY3Rpb24pKQogICAgICAgICAgICAgZ3JpZEFyZWFJc0lu
ZGVmaW5pdGUgPSB0cnVlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBncmlkQXJlYVNpemUg
Kz0gdmFsdWVGb3JMZW5ndGgobWF4VHJhY2tTaXplLmxlbmd0aCgpLCBjb250YWluaW5nQmxvY2tB
dmFpbGFibGVTaXplKTsKKyAgICAgICAgICAgIGdyaWRBcmVhU2l6ZSArPSB2YWx1ZUZvckxlbmd0
aChtYXhUcmFja1NpemUubGVuZ3RoKCksIGF2YWlsYWJsZVNpemUudmFsdWVfb3IoTGF5b3V0VW5p
dCgpKSk7CiAgICAgfQogCi0gICAgZ3JpZEFyZWFTaXplICs9IG1fcmVuZGVyR3JpZC0+Z3V0dGVy
c1NpemUobV9ncmlkLCBGb3JSb3dzLCBzcGFuLnN0YXJ0TGluZSgpLCBzcGFuLmludGVnZXJTcGFu
KCksIGF2YWlsYWJsZVNwYWNlKEZvclJvd3MpKTsKKyAgICBncmlkQXJlYVNpemUgKz0gbV9yZW5k
ZXJHcmlkLT5ndXR0ZXJzU2l6ZShtX2dyaWQsIGRpcmVjdGlvbiwgc3Bhbi5zdGFydExpbmUoKSwg
c3Bhbi5pbnRlZ2VyU3BhbigpLCBhdmFpbGFibGVTaXplKTsKIAotICAgIHJldHVybiBncmlkQXJl
YUlzSW5kZWZpbml0ZSA/IHN0ZDo6bWF4KGNoaWxkLm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgp
LCBncmlkQXJlYVNpemUpIDogZ3JpZEFyZWFTaXplOworICAgIEdyaWRUcmFja1NpemluZ0RpcmVj
dGlvbiBjaGlsZElubGluZURpcmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2Fy
ZURpcmVjdGlvbkZvckNoaWxkKCptX3JlbmRlckdyaWQsIGNoaWxkLCBGb3JDb2x1bW5zKTsKKyAg
ICBpZiAoZ3JpZEFyZWFJc0luZGVmaW5pdGUpCisgICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT0g
Y2hpbGRJbmxpbmVEaXJlY3Rpb24gPyBzdGQ6Om1heChjaGlsZC5tYXhQcmVmZXJyZWRMb2dpY2Fs
V2lkdGgoKSwgZ3JpZEFyZWFTaXplKSA6IExheW91dFVuaXQoLTEpOworICAgIHJldHVybiBncmlk
QXJlYVNpemU7CiB9CiAKIExheW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpncmlk
QXJlYUJyZWFkdGhGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXpp
bmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdApAQCAtNTY1LDcgKzU3Niw3IEBAIExheW91dFVu
aXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpncmlkQXJlYUJyZWFkdGhGb3JDaGlsZChjb25z
dCBSZW5kZXJCb3gmIGNoCiAgICAgICAgIC8vIEZJWE1FIChqZmVybmFuZGV6KSBDb250ZW50IEFs
aWdubWVudCBzaG91bGQgYWNjb3VudCBmb3IgdGhpcyBoZXVyaXN0aWMuCiAgICAgICAgIC8vIGh0
dHBzOi8vZ2l0aHViLmNvbS93M2MvY3Nzd2ctZHJhZnRzL2lzc3Vlcy8yNjk3CiAgICAgICAgIGlm
IChtX3NpemluZ1N0YXRlID09IENvbHVtblNpemluZ0ZpcnN0SXRlcmF0aW9uKQotICAgICAgICAg
ICAgcmV0dXJuIGFzc3VtZWRSb3dzU2l6ZUZvck9ydGhvZ29uYWxDaGlsZChjaGlsZCk7CisgICAg
ICAgICAgICByZXR1cm4gZXN0aW1hdGVkR3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQoY2hpbGQsIEZv
clJvd3MpOwogICAgICAgICBhZGRDb250ZW50QWxpZ25tZW50T2Zmc2V0ID0gdHJ1ZTsKICAgICB9
CiAKQEAgLTU4Myw4ICs1OTQsMTQgQEAgTGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdvcml0
aG06OmdyaWRBcmVhQnJlYWR0aEZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2gKICAgICByZXR1
cm4gZ3JpZEFyZWFCcmVhZHRoOwogfQogCitib29sIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6
aXNSZWxhdGl2ZUdyaWRMZW5ndGhBc0F1dG8oY29uc3QgR3JpZExlbmd0aCYgbGVuZ3RoLCBHcmlk
VHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAoreworICAgIHJldHVybiBsZW5n
dGguaXNQZXJjZW50YWdlKCkgJiYgIWF2YWlsYWJsZVNwYWNlKGRpcmVjdGlvbik7Cit9CisKIEdy
aWRUcmFja1NpemUgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpncmlkVHJhY2tTaXplKEdyaWRU
cmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIHVuc2lnbmVkIHRyYW5zbGF0ZWRJbmRleCkg
Y29uc3QKIHsKKyAgICBBU1NFUlQod2FzU2V0dXAoKSk7CiAgICAgLy8gQ29sbGFwc2UgZW1wdHkg
YXV0byByZXBlYXQgdHJhY2tzIGlmIGF1dG8tZml0LgogICAgIGlmIChtX2dyaWQuaGFzQXV0b1Jl
cGVhdEVtcHR5VHJhY2tzKGRpcmVjdGlvbikgJiYgbV9ncmlkLmlzRW1wdHlBdXRvUmVwZWF0VHJh
Y2soZGlyZWN0aW9uLCB0cmFuc2xhdGVkSW5kZXgpKQogICAgICAgICByZXR1cm4geyBMZW5ndGgo
Rml4ZWQpLCBMZW5ndGhUcmFja1NpemluZyB9OwpAQCAtNTk1LDE1ICs2MTIsMTIgQEAgR3JpZFRy
YWNrU2l6ZSBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmdyaWRUcmFja1NpemUoR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uIGQKIAogICAgIEdyaWRMZW5ndGggbWluVHJhY2tCcmVhZHRoID0gdHJh
Y2tTaXplLm1pblRyYWNrQnJlYWR0aCgpOwogICAgIEdyaWRMZW5ndGggbWF4VHJhY2tCcmVhZHRo
ID0gdHJhY2tTaXplLm1heFRyYWNrQnJlYWR0aCgpOwotCi0gICAgLy8gRklYTUU6IEVuc3VyZSB0
aGlzIGNvbmRpdGlvbiBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciBhIHNpemUgaXMgaW5kZWZpbml0
ZSBvciBub3QgaXMgd29ya2luZwotICAgIC8vIGNvcnJlY3RseSBmb3Igb3J0aG9nb25hbCBmbG93
cy4KLSAgICBpZiAoIWF2YWlsYWJsZVNwYWNlKGRpcmVjdGlvbikgJiYgKG1pblRyYWNrQnJlYWR0
aC5pc1BlcmNlbnRhZ2UoKSB8fCBtYXhUcmFja0JyZWFkdGguaXNQZXJjZW50YWdlKCkpKSB7Ci0g
ICAgICAgIGlmIChtaW5UcmFja0JyZWFkdGguaXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICBt
aW5UcmFja0JyZWFkdGggPSBMZW5ndGgoQXV0byk7Ci0gICAgICAgIGlmIChtYXhUcmFja0JyZWFk
dGguaXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICBtYXhUcmFja0JyZWFkdGggPSBMZW5ndGgo
QXV0byk7Ci0gICAgfQorICAgIC8vIElmIHRoZSBsb2dpY2FsIHdpZHRoL2hlaWdodCBvZiB0aGUg
Z3JpZCBjb250YWluZXIgaXMgaW5kZWZpbml0ZSwgcGVyY2VudGFnZQorICAgIC8vIHZhbHVlcyBh
cmUgdHJlYXRlZCBhcyA8YXV0bz4uCisgICAgaWYgKGlzUmVsYXRpdmVHcmlkTGVuZ3RoQXNBdXRv
KHRyYWNrU2l6ZS5taW5UcmFja0JyZWFkdGgoKSwgZGlyZWN0aW9uKSkKKyAgICAgICAgbWluVHJh
Y2tCcmVhZHRoID0gTGVuZ3RoKEF1dG8pOworICAgIGlmIChpc1JlbGF0aXZlR3JpZExlbmd0aEFz
QXV0byh0cmFja1NpemUubWF4VHJhY2tCcmVhZHRoKCksIGRpcmVjdGlvbikpCisgICAgICAgIG1h
eFRyYWNrQnJlYWR0aCA9IExlbmd0aChBdXRvKTsKIAogICAgIC8vIEZsZXggc2l6ZXMgYXJlIGlu
dmFsaWQgYXMgYSBtaW4gc2l6aW5nIGZ1bmN0aW9uLiBIb3dldmVyIHdlIHN0aWxsIGNhbiBoYXZl
IGEgZmxleGlibGUgfG1pblRyYWNrQnJlYWR0aHwKICAgICAvLyBpZiB0aGUgdHJhY2sgc2l6ZSBp
cyBqdXN0IGEgZmxleCBzaXplIChlLmcuICIxZnIiKSwgdGhlIHNwZWMgc2F5cyB0aGF0IGluIHRo
aXMgY2FzZSBpdCBpbXBsaWVzIGFuIGF1dG9tYXRpYyBtaW5pbXVtLgpAQCAtODQxLDcgKzg1NSw3
IEBAIGRvdWJsZSBJbmRlZmluaXRlU2l6ZVN0cmF0ZWd5OjpmaW5kVXNlZEZsZXhGcmFjdGlvbihW
ZWN0b3I8dW5zaWduZWQ+JiBmbGV4aWJsZVNpCiAgICAgZm9yIChjb25zdCBhdXRvJiB0cmFja0lu
ZGV4IDogZmxleGlibGVTaXplZFRyYWNrc0luZGV4KSB7CiAgICAgICAgIC8vIEZJWE1FOiB3ZSBw
YXNzIFRyYWNrU2l6aW5nIHRvIGdyaWRUcmFja1NpemUoKSBiZWNhdXNlIGl0IGRvZXMgbm90IHJl
YWxseSBtYXR0ZXIKICAgICAgICAgLy8gYXMgd2Uga25vdyB0aGUgdHJhY2sgaXMgYSBmbGV4IHNp
emVkIHRyYWNrLiBJdCdkIGJlIG5pY2Ugbm90IHRvIGhhdmUgdG8gZG8gdGhhdC4KLSAgICAgICAg
ZmxleEZyYWN0aW9uID0gc3RkOjptYXgoZmxleEZyYWN0aW9uLCBub3JtYWxpemVkRmxleEZyYWN0
aW9uKGFsbFRyYWNrc1t0cmFja0luZGV4XSwgbV9hbGdvcml0aG0uZ3JpZFRyYWNrU2l6ZShkaXJl
Y3Rpb24sIHRyYWNrSW5kZXgpLm1heFRyYWNrQnJlYWR0aCgpLmZsZXgoKSkpOworICAgICAgICBm
bGV4RnJhY3Rpb24gPSBzdGQ6Om1heChmbGV4RnJhY3Rpb24sIG5vcm1hbGl6ZWRGbGV4RnJhY3Rp
b24oYWxsVHJhY2tzW3RyYWNrSW5kZXhdLCBncmlkVHJhY2tTaXplKGRpcmVjdGlvbiwgdHJhY2tJ
bmRleCkubWF4VHJhY2tCcmVhZHRoKCkuZmxleCgpKSk7CiAgICAgfQogCiAgICAgY29uc3QgR3Jp
ZCYgZ3JpZCA9IG1fYWxnb3JpdGhtLmdyaWQoKTsKQEAgLTExNjQsNiArMTE3OCw3IEBAIHZvaWQg
R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpzZXR1cChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24g
ZGlyZWN0aW9uLCB1bnNpZ25lCiAKIHZvaWQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpydW4o
KQogeworICAgIEFTU0VSVCh3YXNTZXR1cCgpKTsKICAgICBTdGF0ZU1hY2hpbmUgc3RhdGVNYWNo
aW5lKCp0aGlzKTsKIAogICAgIC8vIFN0ZXAgMS4KQEAgLTExOTcsNiArMTIxMiw3IEBAIHZvaWQg
R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpydW4oKQogCiB2b2lkIEdyaWRUcmFja1NpemluZ0Fs
Z29yaXRobTo6cmVzZXQoKQogeworICAgIEFTU0VSVCh3YXNTZXR1cCgpKTsKICAgICBtX3Npemlu
Z1N0YXRlID0gQ29sdW1uU2l6aW5nRmlyc3RJdGVyYXRpb247CiAgICAgbV9jb2x1bW5zLnNocmlu
aygwKTsKICAgICBtX3Jvd3Muc2hyaW5rKDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oCmluZGV4IDcyNWY0YTA1NjlmM2U2ZTI0
OGU3MzI4MWVhZmY2MDY1MGFkNjUzOTMuLjU5MTVjNWEwOGNiYTQ1MjgwNDZjZDkyMGRkMTBmNzE3
Njc0N2UxNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tT
aXppbmdBbGdvcml0aG0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtLmgKQEAgLTEwMiwxMSArMTAyLDE1IEBAIHB1YmxpYzoKIAogICAgIC8v
IFJlcXVpcmVkIGJ5IFJlbmRlckdyaWQuIFRyeSB0byBtaW5pbWl6ZSB0aGUgZXhwb3NlZCBzdXJm
YWNlLgogICAgIGNvbnN0IEdyaWQmIGdyaWQoKSBjb25zdCB7IHJldHVybiBtX2dyaWQ7IH0KLSAg
ICBHcmlkVHJhY2tTaXplIGdyaWRUcmFja1NpemUoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCB1
bnNpZ25lZCB0cmFuc2xhdGVkSW5kZXgpIGNvbnN0OworICAgIC8vIEZJWE1FIChqZmVybmFuZGV6
KTogV2Ugc2hvdWxkIHJlbW92ZSBhbnkgcHVibGljIGdldHRlciBmb3IgdGhpcyBhdHRyaWJ1dGUK
KyAgICAvLyBhbmQgZW5jYXBzdWxhdGUgYW55IGFjY2VzcyBpbiB0aGUgYWxnb3JpdGhtIGNsYXNz
LgorICAgIEdyaWQmIG11dGFibGVHcmlkKCkgY29uc3QgeyByZXR1cm4gbV9ncmlkOyB9CiAKICAg
ICBMYXlvdXRVbml0IG1pbkNvbnRlbnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9taW5Db250ZW50
U2l6ZTsgfTsKICAgICBMYXlvdXRVbml0IG1heENvbnRlbnRTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9tYXhDb250ZW50U2l6ZTsgfTsKIAorICAgIExheW91dFNpemUgZXN0aW1hdGVkR3JpZEFyZWFC
cmVhZHRoRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JikgY29uc3Q7CisKICAgICBWZWN0b3I8R3Jp
ZFRyYWNrPiYgdHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pIHsgcmV0
dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gbV9jb2x1bW5zIDogbV9yb3dzOyB9CiAgICAg
Y29uc3QgVmVjdG9yPEdyaWRUcmFjaz4mIHRyYWNrcyhHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24g
ZGlyZWN0aW9uKSBjb25zdCB7IHJldHVybiBkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucyA/IG1fY29s
dW1ucyA6IG1fcm93czsgfQogCkBAIC0xMjYsOCArMTMwLDkgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gYXZhaWxhYmxlU3BhY2UoKSBjb25zdCB7
IHJldHVybiBhdmFpbGFibGVTcGFjZShtX2RpcmVjdGlvbik7IH0KKyAgICBib29sIGlzUmVsYXRp
dmVHcmlkTGVuZ3RoQXNBdXRvKGNvbnN0IEdyaWRMZW5ndGgmLCBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24pIGNvbnN0OworICAgIEdyaWRUcmFja1NpemUgZ3JpZFRyYWNrU2l6ZShHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24sIHVuc2lnbmVkIHRyYW5zbGF0ZWRJbmRleCkgY29uc3Q7CiAgICAgY29u
c3QgR3JpZFRyYWNrU2l6ZSYgcmF3R3JpZFRyYWNrU2l6ZShHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b24sIHVuc2lnbmVkIHRyYW5zbGF0ZWRJbmRleCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBhc3N1
bWVkUm93c1NpemVGb3JPcnRob2dvbmFsQ2hpbGQoY29uc3QgUmVuZGVyQm94JikgY29uc3Q7CiAK
ICAgICAvLyBIZWxwZXIgbWV0aG9kcyBmb3Igc3RlcCAxLiBpbml0aWFsaXplVHJhY2tTaXplcygp
LgogICAgIExheW91dFVuaXQgaW5pdGlhbEJhc2VTaXplKGNvbnN0IEdyaWRUcmFja1NpemUmKSBj
b25zdDsKQEAgLTE0MCw2ICsxNDUsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxUcmFja1Np
emVDb21wdXRhdGlvblBoYXNlIHBoYXNlPiB2b2lkIGluY3JlYXNlU2l6ZXNUb0FjY29tbW9kYXRl
U3Bhbm5pbmdJdGVtcyhjb25zdCBHcmlkSXRlbXNTcGFuR3JvdXBSYW5nZSYgZ3JpZEl0ZW1zV2l0
aFNwYW4pOwogICAgIExheW91dFVuaXQgaXRlbVNpemVGb3JUcmFja1NpemVDb21wdXRhdGlvblBo
YXNlKFRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UsIFJlbmRlckJveCYpIGNvbnN0OwogICAgIHRl
bXBsYXRlIDxUcmFja1NpemVDb21wdXRhdGlvblBoYXNlIHBoYXNlPiB2b2lkIGRpc3RyaWJ1dGVT
cGFjZVRvVHJhY2tzKFZlY3RvcjxHcmlkVHJhY2sqPiYgdHJhY2tzLCBWZWN0b3I8R3JpZFRyYWNr
Kj4qIGdyb3dCZXlvbmRHcm93dGhMaW1pdHNUcmFja3MsIExheW91dFVuaXQmIGF2YWlsYWJsZUxv
Z2ljYWxTcGFjZSkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBlc3RpbWF0ZWRHcmlkQXJlYUJyZWFk
dGhGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pIGNv
bnN0OwogICAgIExheW91dFVuaXQgZ3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQoY29uc3QgUmVuZGVy
Qm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKIAogICAgIHZvaWQgY29tcHV0
ZUdyaWRDb250YWluZXJJbnRyaW5zaWNTaXplcygpOwpAQCAtMTYyLDYgKzE2OCw4IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBhZHZhbmNlTmV4dFN0YXRlKCk7CiAgICAgYm9vbCBpc1ZhbGlkVHJhbnNp
dGlvbigpIGNvbnN0OwogCisgICAgLy8gRGF0YS4KKyAgICBib29sIHdhc1NldHVwKCkgY29uc3Qg
eyByZXR1cm4gISFtX3N0cmF0ZWd5OyB9CiAgICAgYm9vbCBtX25lZWRzU2V0dXAgeyB0cnVlIH07
CiAgICAgYm9vbCBtX2hhc1BlcmNlbnRTaXplZFJvd3NJbmRlZmluaXRlSGVpZ2h0IHsgZmFsc2Ug
fTsKICAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IG1fYXZhaWxhYmxlU3BhY2VSb3dzOwpA
QCAtMjM5LDYgKzI0Nyw4IEBAIHByb3RlY3RlZDoKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWln
aHRGb3JDaGlsZChSZW5kZXJCb3gmKSBjb25zdDsKICAgICBib29sIHVwZGF0ZU92ZXJyaWRlQ29u
dGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChSZW5kZXJCb3gmLCBHcmlkVHJhY2tTaXpp
bmdEaXJlY3Rpb24sIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gPSBzdGQ6Om51bGxvcHQpIGNv
bnN0OwogCisgICAgR3JpZFRyYWNrU2l6ZSBncmlkVHJhY2tTaXplKEdyaWRUcmFja1NpemluZ0Rp
cmVjdGlvbiBkaXJlY3Rpb24sIHNpemVfdCB0cmFuc2xhdGVkSW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fYWxnb3JpdGhtLmdyaWRUcmFja1NpemUoZGlyZWN0aW9uLCB0cmFuc2xhdGVkSW5kZXgpOyB9
CisKICAgICAvLyBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG0gYWNjZXNzb3JzIGZvciBzdWJjbGFz
c2VzLgogICAgIExheW91dFVuaXQgY29tcHV0ZVRyYWNrQmFzZWRTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9hbGdvcml0aG0uY29tcHV0ZVRyYWNrQmFzZWRTaXplKCk7IH0KICAgICBHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbGdvcml0aG0ubV9k
aXJlY3Rpb247IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJH
cmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAppbmRleCA2
MDEyZGZkYzI1NDAwNzgzODYzNGFhYzI0NjY4YzAwYTU2YjdhY2UxLi42NTNiMzQzOTIxOWUyY2Y3
MDZmOTBmZGYxNWI2ODE5NmYzYmY3ZWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyR3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckdyaWQuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpyZXBlYXRUcmFj
a3NTaXppbmdJZk5lZWRlZChMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlRm9yQ29sdW1ucywKICAg
ICAvLyBhIG5ldyBjeWNsZSBvZiB0aGUgc2l6aW5nIGFsZ29yaXRobTsgdGhlcmUgbWF5IGJlIG1v
cmUuIEluIGFkZGl0aW9uLCBub3QgYWxsIHRoZQogICAgIC8vIGNhc2VzIHdpdGggb3J0aG9nb25h
bCBmbG93cyByZXF1aXJlIHRoaXMgZXh0cmEgY3ljbGU7IHdlIG5lZWQgYSBtb3JlIHNwZWNpZmlj
CiAgICAgLy8gY29uZGl0aW9uIHRvIGRldGVjdCB3aGV0aGVyIGNoaWxkJ3MgbWluLWNvbnRlbnQg
Y29udHJpYnV0aW9uIGhhcyBjaGFuZ2VkIG9yIG5vdC4KLSAgICBpZiAobV9ncmlkLmhhc0FueU9y
dGhvZ29uYWxHcmlkSXRlbSgpIHx8IG1fdHJhY2tTaXppbmdBbGdvcml0aG0uaGFzQW55UGVyY2Vu
dFNpemVkUm93c0luZGVmaW5pdGVIZWlnaHQoKSkgeworICAgIGlmIChtX2hhc0FueU9ydGhvZ29u
YWxJdGVtIHx8IG1fdHJhY2tTaXppbmdBbGdvcml0aG0uaGFzQW55UGVyY2VudFNpemVkUm93c0lu
ZGVmaW5pdGVIZWlnaHQoKSkgewogICAgICAgICBjb21wdXRlVHJhY2tTaXplc0ZvckRlZmluaXRl
U2l6ZShGb3JDb2x1bW5zLCBhdmFpbGFibGVTcGFjZUZvckNvbHVtbnMpOwogICAgICAgICBjb21w
dXRlQ29udGVudFBvc2l0aW9uQW5kRGlzdHJpYnV0aW9uT2Zmc2V0KEZvckNvbHVtbnMsIG1fdHJh
Y2tTaXppbmdBbGdvcml0aG0uZnJlZVNwYWNlKEZvckNvbHVtbnMpLnZhbHVlKCksIG5vbkNvbGxh
cHNlZFRyYWNrcyhGb3JDb2x1bW5zKSk7CiAgICAgICAgIGNvbXB1dGVUcmFja1NpemVzRm9yRGVm
aW5pdGVTaXplKEZvclJvd3MsIGF2YWlsYWJsZVNwYWNlRm9yUm93cyk7CkBAIC0xOTQsMTcgKzE5
NCwxOCBAQCB2b2lkIFJlbmRlckdyaWQ6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJl
biwgTGF5b3V0VW5pdCkKICAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGNhY2hpbmcgdGhlIGhh
c0RlZmluaXRlTG9naWNhbEhlaWdodCB2YWx1ZSB0aHJvdWdob3V0IHRoZSBsYXlvdXQuCiAgICAg
ICAgIGJvb2wgaGFzRGVmaW5pdGVMb2dpY2FsSGVpZ2h0ID0gaGFzT3ZlcnJpZGVDb250ZW50TG9n
aWNhbEhlaWdodCgpIHx8IGNvbXB1dGVDb250ZW50TG9naWNhbEhlaWdodChNYWluT3JQcmVmZXJy
ZWRTaXplLCBzdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKSwgc3RkOjpudWxsb3B0KTsKIAotICAgICAg
ICAvLyBXZSBuZWVkIHRvIGNsZWFyIGJvdGggb3duIGFuZCBjb250YWluaW5nQmxvY2sgb3ZlcnJp
ZGUgc2l6ZXMgb2Ygb3J0aG9nb25hbCBpdGVtcyB0byBlbnN1cmUgd2UgZ2V0IHRoZQotICAgICAg
ICAvLyBzYW1lIHJlc3VsdCB3aGVuIGdyaWQncyBpbnRyaW5zaWMgc2l6ZSBpcyBjb21wdXRlZCBh
Z2FpbiBpbiB0aGUgdXBkYXRlTG9naWNhbFdpZHRoIGNhbGwgYmVsbG93LgotICAgICAgICBpZiAo
c2l6ZXNMb2dpY2FsV2lkdGhUb0ZpdENvbnRlbnQoTWF4U2l6ZSkgfHwgc3R5bGUoKS5sb2dpY2Fs
V2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8qIGNo
aWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdC
b3goKSkgewotICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkgfHwgIUdyaWRMYXlvdXRGdW5jdGlvbnM6OmlzT3J0aG9nb25hbENoaWxkKCp0aGlzLCAqY2hp
bGQpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBjaGls
ZC0+Y2xlYXJPdmVycmlkZUNvbnRlbnRTaXplKCk7Ci0gICAgICAgICAgICAgICAgY2hpbGQtPmNs
ZWFyT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZSgpOwotICAgICAgICAgICAgICAg
IGNoaWxkLT5zZXROZWVkc0xheW91dCgpOwotICAgICAgICAgICAgICAgIGNoaWxkLT5sYXlvdXRJ
Zk5lZWRlZCgpOwotICAgICAgICAgICAgfQorICAgICAgICBtX2hhc0FueU9ydGhvZ29uYWxJdGVt
ID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7CisgICAgICAgICAgICBpZiAo
Y2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgLy8gR3JpZCdzIGxheW91dCBsb2dpYyBjb250cm9scyB0aGUgZ3JpZCBp
dGVtJ3Mgb3ZlcnJpZGUgaGVpZ2h0LCBoZW5jZSB3ZSBuZWVkIHRvCisgICAgICAgICAgICAvLyBj
bGVhciBhbnkgb3ZlcnJpZGUgaGVpZ2h0IHNldCBwcmV2aW91c2x5LCBzbyBpdCBkb2Vzbid0IGlu
dGVyZmVyZSBpbiBjdXJyZW50IGxheW91dAorICAgICAgICAgICAgLy8gZXhlY3V0aW9uLiBHcmlk
IG5ldmVyIHVzZXMgdGhlIG92ZXJyaWRlIHdpZHRoLCB0aGF0J3Mgd2h5IHdlIGRvbid0IG5lZWQg
dG8gY2xlYXIgIGl0LgorICAgICAgICAgICAgY2hpbGQtPmNsZWFyT3ZlcnJpZGVDb250ZW50TG9n
aWNhbEhlaWdodCgpOworCisgICAgICAgICAgICAvLyBXZSBtYXkgbmVlZCB0byByZXBlYXQgdGhl
IHRyYWNrIHNpemluZyBpbiBjYXNlIG9mIGFueSBncmlkIGl0ZW0gd2FzIG9ydGhvZ29uYWwuCisg
ICAgICAgICAgICBpZiAoR3JpZExheW91dEZ1bmN0aW9uczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRo
aXMsICpjaGlsZCkpCisgICAgICAgICAgICAgICAgbV9oYXNBbnlPcnRob2dvbmFsSXRlbSA9IHRy
dWU7CiAgICAgICAgIH0KIAogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KDApOwpAQCAtMjE2LDcg
KzIxNyw5IEBAIHZvaWQgUmVuZGVyR3JpZDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxk
cmVuLCBMYXlvdXRVbml0KQogICAgICAgICBsYXlvdXRFeGNsdWRlZENoaWxkcmVuKHJlbGF5b3V0
Q2hpbGRyZW4pOwogCiAgICAgICAgIExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2VGb3JDb2x1bW5z
ID0gYXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIHBsYWNlSXRlbXNPbkdyaWQobV9n
cmlkLCBhdmFpbGFibGVTcGFjZUZvckNvbHVtbnMpOworICAgICAgICBwbGFjZUl0ZW1zT25Hcmlk
KG1fdHJhY2tTaXppbmdBbGdvcml0aG0sIGF2YWlsYWJsZVNwYWNlRm9yQ29sdW1ucyk7CisKKyAg
ICAgICAgcGVyZm9ybUdyaWRJdGVtc1ByZUxheW91dChtX3RyYWNrU2l6aW5nQWxnb3JpdGhtKTsK
IAogICAgICAgICAvLyAxLSBGaXJzdCwgdGhlIHRyYWNrIHNpemluZyBhbGdvcml0aG0gaXMgdXNl
ZCB0byByZXNvbHZlIHRoZSBzaXplcyBvZiB0aGUKICAgICAgICAgLy8gZ3JpZCBjb2x1bW5zLgpA
QCAtMjM1LDcgKzIzOCw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6bGF5b3V0QmxvY2soYm9vbCByZWxh
eW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQogICAgICAgICBpZiAoIWhhc0RlZmluaXRlTG9naWNh
bEhlaWdodCkgewogICAgICAgICAgICAgbV9taW5Db250ZW50SGVpZ2h0ID0gTGF5b3V0VW5pdCgp
OwogICAgICAgICAgICAgbV9tYXhDb250ZW50SGVpZ2h0ID0gTGF5b3V0VW5pdCgpOwotICAgICAg
ICAgICAgY29tcHV0ZVRyYWNrU2l6ZXNGb3JJbmRlZmluaXRlU2l6ZShtX3RyYWNrU2l6aW5nQWxn
b3JpdGhtLCBGb3JSb3dzLCBtX2dyaWQsICptX21pbkNvbnRlbnRIZWlnaHQsICptX21heENvbnRl
bnRIZWlnaHQpOworICAgICAgICAgICAgY29tcHV0ZVRyYWNrU2l6ZXNGb3JJbmRlZmluaXRlU2l6
ZShtX3RyYWNrU2l6aW5nQWxnb3JpdGhtLCBGb3JSb3dzLCAqbV9taW5Db250ZW50SGVpZ2h0LCAq
bV9tYXhDb250ZW50SGVpZ2h0KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBi
ZSByZWFsbHkgYWRkZWQgdG8gdGhlIGludHJpbnNpYyBoZWlnaHQgaW4gUmVuZGVyQm94Ojpjb21w
dXRlQ29udGVudEFuZFNjcm9sbGJhckxvZ2ljYWxIZWlnaHRVc2luZygpLgogICAgICAgICAgICAg
Ly8gUmVtb3ZlIHRoaXMgd2hlbiB0aGF0IGlzIGZpeGVkLgogICAgICAgICAgICAgQVNTRVJUKG1f
bWluQ29udGVudEhlaWdodCk7CkBAIC0zODQsMTAgKzM4NywxMiBAQCB2b2lkIFJlbmRlckdyaWQ6
OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0
aCwgTGF5bwogICAgIGJvb2wgaGFkRXhjbHVkZWRDaGlsZHJlbiA9IGNvbXB1dGVQcmVmZXJyZWRX
aWR0aHNGb3JFeGNsdWRlZENoaWxkcmVuKGNoaWxkTWluV2lkdGgsIGNoaWxkTWF4V2lkdGgpOwog
CiAgICAgR3JpZCBncmlkKGNvbnN0X2Nhc3Q8UmVuZGVyR3JpZCY+KCp0aGlzKSk7Ci0gICAgcGxh
Y2VJdGVtc09uR3JpZChncmlkLCBzdGQ6Om51bGxvcHQpOwotCiAgICAgR3JpZFRyYWNrU2l6aW5n
QWxnb3JpdGhtIGFsZ29yaXRobSh0aGlzLCBncmlkKTsKLSAgICBjb21wdXRlVHJhY2tTaXplc0Zv
ckluZGVmaW5pdGVTaXplKGFsZ29yaXRobSwgRm9yQ29sdW1ucywgZ3JpZCwgbWluTG9naWNhbFdp
ZHRoLCBtYXhMb2dpY2FsV2lkdGgpOworICAgIHBsYWNlSXRlbXNPbkdyaWQoYWxnb3JpdGhtLCBz
dGQ6Om51bGxvcHQpOworCisgICAgcGVyZm9ybUdyaWRJdGVtc1ByZUxheW91dChhbGdvcml0aG0p
OworCisgICAgY29tcHV0ZVRyYWNrU2l6ZXNGb3JJbmRlZmluaXRlU2l6ZShhbGdvcml0aG0sIEZv
ckNvbHVtbnMsIG1pbkxvZ2ljYWxXaWR0aCwgbWF4TG9naWNhbFdpZHRoKTsKIAogICAgIGlmICho
YWRFeGNsdWRlZENoaWxkcmVuKSB7CiAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHN0ZDo6bWF4
KG1pbkxvZ2ljYWxXaWR0aCwgY2hpbGRNaW5XaWR0aCk7CkBAIC0zOTksOCArNDA0LDkgQEAgdm9p
ZCBSZW5kZXJHcmlkOjpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBt
aW5Mb2dpY2FsV2lkdGgsIExheW8KICAgICBtYXhMb2dpY2FsV2lkdGggKz0gc2Nyb2xsYmFyV2lk
dGg7CiB9CiAKLXZvaWQgUmVuZGVyR3JpZDo6Y29tcHV0ZVRyYWNrU2l6ZXNGb3JJbmRlZmluaXRl
U2l6ZShHcmlkVHJhY2tTaXppbmdBbGdvcml0aG0mIGFsZ29yaXRobSwgR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uIGRpcmVjdGlvbiwgR3JpZCYgZ3JpZCwgTGF5b3V0VW5pdCYgbWluSW50cmluc2lj
U2l6ZSwgTGF5b3V0VW5pdCYgbWF4SW50cmluc2ljU2l6ZSkgY29uc3QKK3ZvaWQgUmVuZGVyR3Jp
ZDo6Y29tcHV0ZVRyYWNrU2l6ZXNGb3JJbmRlZmluaXRlU2l6ZShHcmlkVHJhY2tTaXppbmdBbGdv
cml0aG0mIGFsZ29yaXRobSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgTGF5
b3V0VW5pdCYgbWluSW50cmluc2ljU2l6ZSwgTGF5b3V0VW5pdCYgbWF4SW50cmluc2ljU2l6ZSkg
Y29uc3QKIHsKKyAgICBjb25zdCBHcmlkJiBncmlkID0gYWxnb3JpdGhtLmdyaWQoKTsKICAgICBh
bGdvcml0aG0uc2V0dXAoZGlyZWN0aW9uLCBudW1UcmFja3MoZGlyZWN0aW9uLCBncmlkKSwgSW50
cmluc2ljU2l6ZUNvbXB1dGF0aW9uLCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCk7CiAgICAg
YWxnb3JpdGhtLnJ1bigpOwogCkBAIC01NTcsMTMgKzU2MywxNCBAQCB1bnNpZ25lZCBSZW5kZXJH
cmlkOjpjbGFtcEF1dG9SZXBlYXRUcmFja3MoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVj
dGlvbiwgdQogICAgIHJldHVybiBzdGQ6Om1pbihhdXRvUmVwZWF0VHJhY2tzLCBtYXhUcmFja3Mg
LSBpbnNlcnRpb25Qb2ludCk7CiB9CiAKLS8vIEZJWE1FKTogV2Ugc2hvdWxkbid0IGhhdmUgdG8g
cGFzcyB0aGUgYXZhaWxhYmxlIGxvZ2ljYWwgd2lkdGggYXMgYXJndW1lbnQuIFRoZSBwcm9ibGVt
IGlzIHRoYXQKKy8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBwYXNzIHRoZSBhdmFpbGFi
bGUgbG9naWNhbCB3aWR0aCBhcyBhcmd1bWVudC4gVGhlIHByb2JsZW0gaXMgdGhhdAogLy8gYXZh
aWxhYmxlTG9naWNhbFdpZHRoKCkgZG9lcyBhbHdheXMgcmV0dXJuIGEgdmFsdWUgZXZlbiBpZiB3
ZSBjYW5ub3QgcmVzb2x2ZSBpdCBsaWtlIHdoZW4KIC8vIGNvbXB1dGluZyB0aGUgaW50cmluc2lj
IHNpemUgKHByZWZlcnJlZCB3aWR0aHMpLiBUaGF0J3Mgd2h5IHdlIHBhc3MgdGhlIHJlc3BvbnNp
YmlsaXR5IHRvIHRoZQogLy8gY2FsbGVyIHdobyBkb2VzIGtub3cgd2hldGhlciB0aGUgYXZhaWxh
YmxlIGxvZ2ljYWwgd2lkdGggaXMgaW5kZWZpbml0ZSBvciBub3QuCi12b2lkIFJlbmRlckdyaWQ6
OnBsYWNlSXRlbXNPbkdyaWQoR3JpZCYgZ3JpZCwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBh
dmFpbGFibGVTcGFjZSkgY29uc3QKK3ZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3JpZChH
cmlkVHJhY2tTaXppbmdBbGdvcml0aG0mIGFsZ29yaXRobSwgc3RkOjpvcHRpb25hbDxMYXlvdXRV
bml0PiBhdmFpbGFibGVMb2dpY2FsV2lkdGgpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgYXV0b1Jl
cGVhdENvbHVtbnMgPSBjb21wdXRlQXV0b1JlcGVhdFRyYWNrc0NvdW50KEZvckNvbHVtbnMsIGF2
YWlsYWJsZVNwYWNlKTsKKyAgICBHcmlkJiBncmlkID0gYWxnb3JpdGhtLm11dGFibGVHcmlkKCk7
CisgICAgdW5zaWduZWQgYXV0b1JlcGVhdENvbHVtbnMgPSBjb21wdXRlQXV0b1JlcGVhdFRyYWNr
c0NvdW50KEZvckNvbHVtbnMsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgdW5zaWduZWQg
YXV0b1JlcGVhdFJvd3MgPSBjb21wdXRlQXV0b1JlcGVhdFRyYWNrc0NvdW50KEZvclJvd3MsIGF2
YWlsYWJsZUxvZ2ljYWxIZWlnaHRGb3JQZXJjZW50YWdlQ29tcHV0YXRpb24oKSk7CiAKICAgICBh
dXRvUmVwZWF0Um93cyA9IGNsYW1wQXV0b1JlcGVhdFRyYWNrcyhGb3JSb3dzLCBhdXRvUmVwZWF0
Um93cyk7CkBAIC01ODIsMTMgKzU4OSwxMCBAQCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlSXRlbXNP
bkdyaWQoR3JpZCYgZ3JpZCwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBhdmFpbGFibAogCiAg
ICAgVmVjdG9yPFJlbmRlckJveCo+IGF1dG9NYWpvckF4aXNBdXRvR3JpZEl0ZW1zOwogICAgIFZl
Y3RvcjxSZW5kZXJCb3gqPiBzcGVjaWZpZWRNYWpvckF4aXNBdXRvR3JpZEl0ZW1zOwotICAgIGJv
b2wgaGFzQW55T3J0aG9nb25hbEdyaWRJdGVtID0gZmFsc2U7CiAgICAgZm9yIChhdXRvKiBjaGls
ZCA9IGdyaWQub3JkZXJJdGVyYXRvcigpLmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IGdyaWQub3Jk
ZXJJdGVyYXRvcigpLm5leHQoKSkgewogICAgICAgICBpZiAoZ3JpZC5vcmRlckl0ZXJhdG9yKCku
c2hvdWxkU2tpcENoaWxkKCpjaGlsZCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICBoYXNBbnlPcnRob2dvbmFsR3JpZEl0ZW0gPSBoYXNBbnlPcnRob2dvbmFsR3JpZEl0ZW0gfHwg
R3JpZExheW91dEZ1bmN0aW9uczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsICpjaGlsZCk7Ci0K
ICAgICAgICAgR3JpZEFyZWEgYXJlYSA9IGdyaWQuZ3JpZEl0ZW1BcmVhKCpjaGlsZCk7CiAgICAg
ICAgIGlmICghYXJlYS5yb3dzLmlzSW5kZWZpbml0ZSgpKQogICAgICAgICAgICAgYXJlYS5yb3dz
LnRyYW5zbGF0ZShzdGQ6OmFicyhncmlkLnNtYWxsZXN0VHJhY2tTdGFydChGb3JSb3dzKSkpOwpA
QCAtNjA3LDcgKzYxMSw2IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3JpZChHcmlk
JiBncmlkLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsCiAgICAgICAgIH0KICAg
ICAgICAgZ3JpZC5pbnNlcnQoKmNoaWxkLCB7IGFyZWEucm93cywgYXJlYS5jb2x1bW5zIH0pOwog
ICAgIH0KLSAgICBncmlkLnNldEhhc0FueU9ydGhvZ29uYWxHcmlkSXRlbShoYXNBbnlPcnRob2dv
bmFsR3JpZEl0ZW0pOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGlmIChncmlkLmhhc0dy
aWRJdGVtcygpKSB7CkBAIC02MzYsNiArNjM5LDIzIEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJ
dGVtc09uR3JpZChHcmlkJiBncmlkLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJs
CiAjZW5kaWYKIH0KIAordm9pZCBSZW5kZXJHcmlkOjpwZXJmb3JtR3JpZEl0ZW1zUHJlTGF5b3V0
KGNvbnN0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobSYgYWxnb3JpdGhtKSBjb25zdAoreworICAg
IEFTU0VSVCghYWxnb3JpdGhtLmdyaWQoKS5uZWVkc0l0ZW1zUGxhY2VtZW50KCkpOworICAgIC8v
IEZJWE1FOiBXZSBuZWVkIGEgd2F5IHdoZW4gd2UgYXJlIGNhbGxpbmcgdGhpcyBkdXJpbmcgaW50
cmluc2ljIHNpemUgY29tcHVhdGlvbiBiZWZvcmUgcGVyZm9ybWluZworICAgIC8vIHRoZSBsYXlv
dXQuIE1heWJlIHVzaW5nIHRoZSBQcmVMYXlvdXQgcGhhc2UgPworICAgIGZvciAoYXV0byogY2hp
bGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0Jv
eCgpKSB7CisgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgLy8gT3J0aG9nb25hbCBpdGVtcyBzaG91bGQgYmUg
bGFpZCBvdXQgaW4gb3JkZXIgdG8gcHJvcGVybHkgY29tcHV0ZSBjb250ZW50LXNpemVkIHRyYWNr
cyB0aGF0IG1heSBkZXBlbmQgb24gaXRlbSdzIGludHJpbnNpYyBzaXplLgorICAgICAgICAvLyBX
ZSBhbHNvIG5lZWQgdG8gcHJvcGVybHkgZXN0aW1hdGUgaXRzIGdyaWQgYXJlYSBzaXplLCBzaW5j
ZSBpdCBtYXkgYWZmZWN0IHRvIHRoZSBiYXNlbGluZSBzaGltcyBpZiBzdWNoIGl0ZW0gcGFydGlj
aWFwdGVzIGluIGJhc2VsaW5lIGFsaWdubWVudC4gCisgICAgICAgIGlmIChHcmlkTGF5b3V0RnVu
Y3Rpb25zOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgKmNoaWxkKSkgeworICAgICAgICAgICAg
dXBkYXRlR3JpZEFyZWFMb2dpY2FsU2l6ZSgqY2hpbGQsIGFsZ29yaXRobS5lc3RpbWF0ZWRHcmlk
QXJlYUJyZWFkdGhGb3JDaGlsZCgqY2hpbGQpKTsKKyAgICAgICAgICAgIGNoaWxkLT5sYXlvdXRJ
Zk5lZWRlZCgpOworICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIFJlbmRlckdyaWQ6OnBvcHVs
YXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVyYXRvcihHcmlkJiBncmlkKSBjb25zdAogewogICAg
IE9yZGVySXRlcmF0b3JQb3B1bGF0b3IgcG9wdWxhdG9yKGdyaWQub3JkZXJJdGVyYXRvcigpKTsK
QEAgLTg0OSw2ICs4NjksMzEgQEAgc3RhdGljIGNvbnN0IFN0eWxlQ29udGVudEFsaWdubWVudERh
dGEmIGNvbnRlbnRBbGlnbm1lbnROb3JtYWxCZWhhdmlvckdyaWQoKQogICAgIHJldHVybiBub3Jt
YWxCZWhhdmlvcjsKIH0KIAorc3RhdGljIGJvb2wgb3ZlcnJpZGVTaXplQ2hhbmdlZChjb25zdCBS
ZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBMYXlv
dXRTaXplIHNpemUpCit7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKQorICAgICAg
ICByZXR1cm4gIWNoaWxkLmhhc092ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxX
aWR0aCgpIHx8IGNoaWxkLm92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0
aCgpICE9IHNpemUud2lkdGgoKTsKKyAgICByZXR1cm4gIWNoaWxkLmhhc092ZXJyaWRlQ29udGFp
bmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKSB8fCBjaGlsZC5vdmVycmlkZUNvbnRhaW5p
bmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgIT0gc2l6ZS5oZWlnaHQoKTsKK30KKworc3Rh
dGljIGJvb2wgaGFzUmVsYXRpdmVCbG9ja0F4aXNTaXplKGNvbnN0IFJlbmRlckdyaWQmIGdyaWQs
IGNvbnN0IFJlbmRlckJveCYgY2hpbGQpCit7CisgICAgcmV0dXJuIEdyaWRMYXlvdXRGdW5jdGlv
bnM6OmlzT3J0aG9nb25hbENoaWxkKGdyaWQsIGNoaWxkKSA/IGNoaWxkLmhhc1JlbGF0aXZlTG9n
aWNhbFdpZHRoKCkgfHwgY2hpbGQuc3R5bGUoKS5sb2dpY2FsV2lkdGgoKS5pc0F1dG8oKSA6IGNo
aWxkLmhhc1JlbGF0aXZlTG9naWNhbEhlaWdodCgpOworfQorCit2b2lkIFJlbmRlckdyaWQ6OnVw
ZGF0ZUdyaWRBcmVhTG9naWNhbFNpemUoUmVuZGVyQm94JiBjaGlsZCwgTGF5b3V0U2l6ZSBncmlk
QXJlYUxvZ2ljYWxTaXplKSBjb25zdAoreworICAgIC8vIEJlY2F1c2UgdGhlIGdyaWQgYXJlYSBj
YW5ub3QgYmUgc3R5bGVkLCB3ZSBkb24ndCBuZWVkIHRvIGFkanVzdAorICAgIC8vIHRoZSBncmlk
IGJyZWFkdGggdG8gYWNjb3VudCBmb3IgJ2JveC1zaXppbmcnLgorICAgIGJvb2wgZ3JpZEFyZWFX
aWR0aENoYW5nZWQgPSBvdmVycmlkZVNpemVDaGFuZ2VkKGNoaWxkLCBGb3JDb2x1bW5zLCBncmlk
QXJlYUxvZ2ljYWxTaXplKTsKKyAgICBib29sIGdyaWRBcmVhSGVpZ2h0Q2hhbmdlZCA9IG92ZXJy
aWRlU2l6ZUNoYW5nZWQoY2hpbGQsIEZvclJvd3MsIGdyaWRBcmVhTG9naWNhbFNpemUpOworICAg
IGlmIChncmlkQXJlYVdpZHRoQ2hhbmdlZCB8fCAoZ3JpZEFyZWFIZWlnaHRDaGFuZ2VkICYmIGhh
c1JlbGF0aXZlQmxvY2tBeGlzU2l6ZSgqdGhpcywgY2hpbGQpKSkKKyAgICAgICAgY2hpbGQuc2V0
TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKworICAgIGNoaWxkLnNldE92ZXJyaWRlQ29udGFp
bmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aChncmlkQXJlYUxvZ2ljYWxTaXplLndpZHRoKCkp
OworICAgIGNoaWxkLnNldE92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWln
aHQoZ3JpZEFyZWFMb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Cit9CisKIHZvaWQgUmVuZGVyR3JpZDo6
bGF5b3V0R3JpZEl0ZW1zKCkKIHsKICAgICBwb3B1bGF0ZUdyaWRQb3NpdGlvbnNGb3JEaXJlY3Rp
b24oRm9yQ29sdW1ucyk7CkBAIC04NjIsMjAgKzkwNywxMCBAQCB2b2lkIFJlbmRlckdyaWQ6Omxh
eW91dEdyaWRJdGVtcygpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAg
ICAgIC8vIEJlY2F1c2UgdGhlIGdyaWQgYXJlYSBjYW5ub3QgYmUgc3R5bGVkLCB3ZSBkb24ndCBu
ZWVkIHRvIGFkanVzdAotICAgICAgICAvLyB0aGUgZ3JpZCBicmVhZHRoIHRvIGFjY291bnQgZm9y
ICdib3gtc2l6aW5nJy4KLSAgICAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBvbGRPdmVy
cmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGggPSBjaGlsZC0+aGFzT3ZlcnJp
ZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkgPyBjaGlsZC0+b3ZlcnJpZGVD
b250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkgOiBMYXlvdXRVbml0KCk7Ci0gICAg
ICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gb2xkT3ZlcnJpZGVDb250YWluaW5nQmxvY2tD
b250ZW50TG9naWNhbEhlaWdodCA9IGNoaWxkLT5oYXNPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0Nv
bnRlbnRMb2dpY2FsSGVpZ2h0KCkgPyBjaGlsZC0+b3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250
ZW50TG9naWNhbEhlaWdodCgpIDogTGF5b3V0VW5pdCgpOwotCi0gICAgICAgIExheW91dFVuaXQg
b3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoID0gZ3JpZEFyZWFCcmVh
ZHRoRm9yQ2hpbGRJbmNsdWRpbmdBbGlnbm1lbnRPZmZzZXRzKCpjaGlsZCwgRm9yQ29sdW1ucyk7
Ci0gICAgICAgIExheW91dFVuaXQgb3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNh
bEhlaWdodCA9IGdyaWRBcmVhQnJlYWR0aEZvckNoaWxkSW5jbHVkaW5nQWxpZ25tZW50T2Zmc2V0
cygqY2hpbGQsIEZvclJvd3MpOwotICAgICAgICBpZiAoIW9sZE92ZXJyaWRlQ29udGFpbmluZ0Js
b2NrQ29udGVudExvZ2ljYWxXaWR0aCB8fCBvbGRPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRl
bnRMb2dpY2FsV2lkdGgudmFsdWUoKSAhPSBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRM
b2dpY2FsV2lkdGgKLSAgICAgICAgICAgIHx8ICgoIW9sZE92ZXJyaWRlQ29udGFpbmluZ0Jsb2Nr
Q29udGVudExvZ2ljYWxIZWlnaHQgfHwgb2xkT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50
TG9naWNhbEhlaWdodC52YWx1ZSgpICE9IG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExv
Z2ljYWxIZWlnaHQpCi0gICAgICAgICAgICAgICAgJiYgY2hpbGQtPmhhc1JlbGF0aXZlTG9naWNh
bEhlaWdodCgpKSkKLSAgICAgICAgICAgIGNoaWxkLT5zZXROZWVkc0xheW91dChNYXJrT25seVRo
aXMpOwotCi0gICAgICAgIGNoaWxkLT5zZXRPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRM
b2dpY2FsV2lkdGgob3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKTsK
LSAgICAgICAgY2hpbGQtPnNldE92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxI
ZWlnaHQob3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodCk7CisgICAg
ICAgIC8vIFNldHRpbmcgdGhlIGRlZmluaXRlIGdyaWQgYXJlYSdzIHNpemVzLiBJdCBtYXkgaW1w
bHkgdGhhdCB0aGUKKyAgICAgICAgLy8gaXRlbSBtdXN0IHBlcmZvcm0gYSBsYXlvdXQgaWYgaXRz
IGFyZWEgZGlmZmVycyBmcm9tIHRoZSBvbmUKKyAgICAgICAgLy8gdXNlZCBkdXJpbmcgdGhlIHRy
YWNrIHNpemluZyBhbGdvcml0aG0uCisgICAgICAgIHVwZGF0ZUdyaWRBcmVhTG9naWNhbFNpemUo
KmNoaWxkLCBMYXlvdXRTaXplKGdyaWRBcmVhQnJlYWR0aEZvckNoaWxkSW5jbHVkaW5nQWxpZ25t
ZW50T2Zmc2V0cygqY2hpbGQsIEZvckNvbHVtbnMpLCBncmlkQXJlYUJyZWFkdGhGb3JDaGlsZElu
Y2x1ZGluZ0FsaWdubWVudE9mZnNldHMoKmNoaWxkLCBGb3JSb3dzKSkpOwogCiAgICAgICAgIExh
eW91dFJlY3Qgb2xkQ2hpbGRSZWN0ID0gY2hpbGQtPmZyYW1lUmVjdCgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckdyaWQuaAppbmRleCA4YjVhZjFiZmUzYjhmNWZkYWQzYTg5N2RmMDM1
NTY2MjlmNmViOGM4Li5mMzU5MTBjZjUwNTJjZjc2YmQ0ZWQwNTQyZmU5MTcwOGJiNWI3YTdlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKQEAgLTc0LDYgKzc0LDggQEAgcHVi
bGljOgogICAgIExheW91dFVuaXQgZ3V0dGVyc1NpemUoY29uc3QgR3JpZCYsIEdyaWRUcmFja1Np
emluZ0RpcmVjdGlvbiwgdW5zaWduZWQgc3RhcnRMaW5lLCB1bnNpZ25lZCBzcGFuLCBzdGQ6Om9w
dGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsZVNpemUpIGNvbnN0OwogICAgIExheW91dFVuaXQg
Z3JpZEl0ZW1PZmZzZXQoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKIAorICAgIHZv
aWQgdXBkYXRlR3JpZEFyZWFMb2dpY2FsU2l6ZShSZW5kZXJCb3gmLCBMYXlvdXRTaXplKSBjb25z
dDsKKwogICAgIFN0eWxlQ29udGVudEFsaWdubWVudERhdGEgY29udGVudEFsaWdubWVudChHcmlk
VHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CkBAIC0xMDUsNyArMTA3
LDkgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxPcmRlcmVkVHJhY2tJbmRleFNl
dD4gY29tcHV0ZUVtcHR5VHJhY2tzRm9yQXV0b1JlcGVhdChHcmlkJiwgR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uKSBjb25zdDsKIAotICAgIHZvaWQgcGxhY2VJdGVtc09uR3JpZChHcmlkJiwgc3Rk
OjpvcHRpb25hbDxMYXlvdXRVbml0PiBhdmFpbGFibGVTcGFjZUZvckNvbHVtbnMpIGNvbnN0Owor
ICAgIHZvaWQgcGVyZm9ybUdyaWRJdGVtc1ByZUxheW91dChjb25zdCBHcmlkVHJhY2tTaXppbmdB
bGdvcml0aG0mKSBjb25zdDsKKworICAgIHZvaWQgcGxhY2VJdGVtc09uR3JpZChHcmlkVHJhY2tT
aXppbmdBbGdvcml0aG0mLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsZUxvZ2lj
YWxXaWR0aCkgY29uc3Q7CiAgICAgdm9pZCBwb3B1bGF0ZUV4cGxpY2l0R3JpZEFuZE9yZGVySXRl
cmF0b3IoR3JpZCYpIGNvbnN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmlkQXJlYT4gY3JlYXRl
RW1wdHlHcmlkQXJlYUF0U3BlY2lmaWVkUG9zaXRpb25zT3V0c2lkZUdyaWQoR3JpZCYsIGNvbnN0
IFJlbmRlckJveCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwgY29uc3QgR3JpZFNwYW4mKSBj
b25zdDsKICAgICB2b2lkIHBsYWNlU3BlY2lmaWVkTWFqb3JBeGlzSXRlbXNPbkdyaWQoR3JpZCYs
IGNvbnN0IFZlY3RvcjxSZW5kZXJCb3gqPiYpIGNvbnN0OwpAQCAtMTIxLDcgKzEyNSw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBsYXlvdXRQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCYsIGJvb2wg
cmVsYXlvdXRDaGlsZHJlbiwgYm9vbCBmaXhlZFBvc2l0aW9uT2JqZWN0c09ubHkpIG92ZXJyaWRl
OwogCiAgICAgdm9pZCBjb21wdXRlVHJhY2tTaXplc0ZvckRlZmluaXRlU2l6ZShHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24sIExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2UpOwotICAgIHZvaWQgY29t
cHV0ZVRyYWNrU2l6ZXNGb3JJbmRlZmluaXRlU2l6ZShHcmlkVHJhY2tTaXppbmdBbGdvcml0aG0m
LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24sIEdyaWQmLCBMYXlvdXRVbml0JiBtaW5JbnRyaW5z
aWNTaXplLCBMYXlvdXRVbml0JiBtYXhJbnRyaW5zaWNTaXplKSBjb25zdDsKKyAgICB2b2lkIGNv
bXB1dGVUcmFja1NpemVzRm9ySW5kZWZpbml0ZVNpemUoR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBMYXlvdXRVbml0JiBtaW5JbnRyaW5zaWNTaXpl
LCBMYXlvdXRVbml0JiBtYXhJbnRyaW5zaWNTaXplKSBjb25zdDsKICAgICBMYXlvdXRVbml0IGNv
bXB1dGVUcmFja0Jhc2VkTG9naWNhbEhlaWdodCgpIGNvbnN0OwogCiAgICAgdm9pZCByZXBlYXRU
cmFja3NTaXppbmdJZk5lZWRlZChMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlRm9yQ29sdW1ucywg
TGF5b3V0VW5pdCBhdmFpbGFibGVTcGFjZUZvclJvd3MpOwpAQCAtMTkzLDYgKzE5Nyw4IEBAIHBy
aXZhdGU6CiAKICAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IG1fbWluQ29udGVudEhlaWdo
dDsKICAgICBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IG1fbWF4Q29udGVudEhlaWdodDsKKwor
ICAgIGJvb2wgbV9oYXNBbnlPcnRob2dvbmFsSXRlbSB7ZmFsc2V9OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>