<?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>233973</bug_id>
          
          <creation_ts>2021-12-07 22:05:24 -0800</creation_ts>
          <short_desc>[GPU Process] [Filters] Make Filter::apply() and FilterEffect:apply() take FilterImageVector for the inputs</short_desc>
          <delta_ts>2021-12-12 12:09:55 -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>
          
          <blocked>231253</blocked>
    
    <blocked>233989</blocked>
    
    <blocked>234027</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fujii</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>heycam</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1821376</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-12-07 22:05:24 -0800</bug_when>
    <thetext>This is a step towards removing the dependency on the input effects. This step is required to make encoding/decoding the FilterEffect is just sending or receiving its primitive data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821396</commentid>
    <comment_count>1</comment_count>
      <attachid>446302</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-12-07 22:31:00 -0800</bug_when>
    <thetext>Created attachment 446302
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821850</commentid>
    <comment_count>2</comment_count>
      <attachid>446302</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-12-08 16:26:18 -0800</bug_when>
    <thetext>Comment on attachment 446302
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        [GPU Process] [Filters] Make Filter::apply() and FilterEffect:apply() takes FilterImageVector for the inputs

&quot;take&quot;

&gt; Source/WebCore/ChangeLog:9
&gt; +        step is required to make encoding/decoding the FilterEffect is just

s/is just/be just/ (or &quot;just be&quot;)

&gt; Source/WebCore/ChangeLog:26
&gt; +           FilterEffect. Every FilterEffect is asked to takeInputs() form this 

&quot;from this&quot;

&gt; Source/WebCore/ChangeLog:40
&gt; +           premultiplied pixels of the input FilterImageVector. We do not need
&gt; +           to do this correction if the FilterEffect we apply is arithmetic
&gt; +           composite filter. Otherwise we need to correct the FilterImage of any
&gt; +           arithmetic composite filter in the FilterImageVector.

This sounds contradictory.

&gt; Source/WebCore/platform/graphics/filters/FEComposite.h:70
&gt; +    bool resultIsValidPremultiplied() const override { return m_type != FECOMPOSITE_OPERATOR_ARITHMETIC; }

(I feel like this has flipped back and forth over the course of the patch queue!)

&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:94
&gt; +    return apply(filter, FilterImageVector { Ref { const_cast&lt;FilterImage&amp;&gt;(input) } });

Is the const_cast needed?

&gt; Source/WebCore/platform/graphics/filters/FilterEffect.h:51
&gt; +    virtual FilterImageVector takeInputs(FilterImageVector&amp;) const { return { }; }

Idea: another way would be to have a virtual function that returns the number of inputs a given FilterEffect takes, and have takeInputs be a non-virtual function that pops that many items off the stack and returns them.

&gt; Source/WebCore/rendering/CSSFilter.cpp:374
&gt; +    if (m_functions.isEmpty() || !sourceImage)
&gt; +        return nullptr;

Is m_functions being empty a condition that content can create? Or is this defending against an error case. Just wondering if it needs to be checked here or if we&apos;d be happy with returning sourceImage unchanged in that case.

&gt; Source/WebCore/svg/graphics/filters/SVGFilter.cpp:135
&gt; +        // Need to remove the inputs here in case the effect has a result.

&quot;in case the effect already has a result&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821950</commentid>
    <comment_count>3</comment_count>
      <attachid>446302</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-12-08 19:19:46 -0800</bug_when>
    <thetext>Comment on attachment 446302
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:3
&gt;&gt; +        [GPU Process] [Filters] Make Filter::apply() and FilterEffect:apply() takes FilterImageVector for the inputs
&gt; 
&gt; &quot;take&quot;

Fixed.

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        step is required to make encoding/decoding the FilterEffect is just
&gt; 
&gt; s/is just/be just/ (or &quot;just be&quot;)

Fixed.

&gt;&gt; Source/WebCore/ChangeLog:26
&gt;&gt; +           FilterEffect. Every FilterEffect is asked to takeInputs() form this 
&gt; 
&gt; &quot;from this&quot;

Fixed.

&gt;&gt; Source/WebCore/ChangeLog:40
&gt;&gt; +           arithmetic composite filter in the FilterImageVector.
&gt; 
&gt; This sounds contradictory.

I do no think this is contradictory but I may not be able to phrase it in a clear way. The arithmetic composite filter may produce invalid premultiplied PixelBuffer. This happens when the color component is larger than the alpha channel. So the arithmetic composite filter itself does not need its inputs to be corrected since the result may be invalid anyway. And this is why we check 

RefPtr&lt;FilterImage&gt; FilterEffect::apply(...)
{
    ...
    if (isValidPremultiplied)
        correctPremultipliedInputs(inputs);
    ...
}

isValidPremultiplied is true for all FilterEffects except the arithmetic composite filter. And in correctPremultipliedInputs() we call FilterImage::correctPremultipliedPixelBuffer() which will only correct the premultiplied PixelBuffer if it was generated by the arithmetic composite filter.

void FilterImage::correctPremultipliedPixelBuffer()
{
    if (!m_premultipliedPixelBuffer || m_isValidPremultiplied)
        return;
    ...
}

&gt;&gt; Source/WebCore/platform/graphics/filters/FEComposite.h:70
&gt;&gt; +    bool resultIsValidPremultiplied() const override { return m_type != FECOMPOSITE_OPERATOR_ARITHMETIC; }
&gt; 
&gt; (I feel like this has flipped back and forth over the course of the patch queue!)

Yes this is true. I changed it from requiresValidPreMultipliedPixels() to mayProduceInvalidPremultipliedPixels(). But when I looked at it recently it took me awhile to understand it what it means. I think resultIsValidPremultiplied() is clearer than the previous two because it is positive (valid) not negative (invalid). And it explicitly says this is related to the result FilterImage of the FilterEffect not the inputs.

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:94
&gt;&gt; +    return apply(filter, FilterImageVector { Ref { const_cast&lt;FilterImage&amp;&gt;(input) } });
&gt; 
&gt; Is the const_cast needed?

No it is not needed. It was left over when I was trying to pass &quot;const FilterImage&amp;&quot;. But I realized the input FilterImage may change while applying the FilterEffect. So it can&apos;t be const.  Removed.

&gt;&gt; Source/WebCore/platform/graphics/filters/FilterEffect.h:51
&gt;&gt; +    virtual FilterImageVector takeInputs(FilterImageVector&amp;) const { return { }; }
&gt; 
&gt; Idea: another way would be to have a virtual function that returns the number of inputs a given FilterEffect takes, and have takeInputs be a non-virtual function that pops that many items off the stack and returns them.

yes this is a better approach. Done.

&gt;&gt; Source/WebCore/rendering/CSSFilter.cpp:374
&gt;&gt; +        return nullptr;
&gt; 
&gt; Is m_functions being empty a condition that content can create? Or is this defending against an error case. Just wondering if it needs to be checked here or if we&apos;d be happy with returning sourceImage unchanged in that case.

You are right. A CSSFilter can&apos;t be created with empty m_functions. So this condition is not needed. Removed.

&gt;&gt; Source/WebCore/svg/graphics/filters/SVGFilter.cpp:135
&gt;&gt; +        // Need to remove the inputs here in case the effect has a result.
&gt; 
&gt; &quot;in case the effect already has a result&quot;

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821951</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-08 19:26:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/86248999&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821956</commentid>
    <comment_count>5</comment_count>
      <attachid>446488</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-12-08 19:37:57 -0800</bug_when>
    <thetext>Created attachment 446488
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822007</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-08 22:40:38 -0800</bug_when>
    <thetext>Committed r286765 (245006@main): &lt;https://commits.webkit.org/245006@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 446488.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446302</attachid>
            <date>2021-12-07 22:31:00 -0800</date>
            <delta_ts>2021-12-08 16:26:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233973-20211207223059.patch</filename>
            <type>text/plain</type>
            <size>60417</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2EzNTgxNjZlZDdjNWVm
ZTM3M2M3ZmYwNmEzNWFmYmUxODhiM2Y0Yy4uMWVlYjExZDk2NDcxZWQ1ODAwMjk3ODljZGFiN2Fl
YzA5M2YxOTMwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MyBAQAorMjAyMS0xMi0wNyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFtGaWx0ZXJzXSBNYWtlIEZpbHRlcjo6YXBwbHkoKSBhbmQgRmlsdGVyRWZmZWN0OmFwcGx5KCkg
dGFrZXMgRmlsdGVySW1hZ2VWZWN0b3IgZm9yIHRoZSBpbnB1dHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzk3MworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBzdGVwIHRvd2FyZHMgcmVt
b3ZpbmcgdGhlIGRlcGVuZGVuY3kgb24gdGhlIGlucHV0IGVmZmVjdHMuIFRoaXMgCisgICAgICAg
IHN0ZXAgaXMgcmVxdWlyZWQgdG8gbWFrZSBlbmNvZGluZy9kZWNvZGluZyB0aGUgRmlsdGVyRWZm
ZWN0IGlzIGp1c3QKKyAgICAgICAgc2VuZGluZyBvciByZWNlaXZpbmcgaXRzIHByaW1pdGl2ZSBk
YXRhLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2g6CisKKyAgICAgICAgLS0gVGhlIHNvdXJjZUlt
YWdlIGFuZCBzb3VyY2VJbWFnZVJlY3QgYXJndW1lbnRzIHRvIEZpbHRlcjo6YXBwbHkoKSBhcmUK
KyAgICAgICAgICAgdXNlZCB0byBjcmVhdGUgYSBGaWx0ZXJJbWFnZS4gVGhpcyB3aWxsIGJlIHRo
ZSBpbnB1dCB0byB0aGUgU291cmNlR3JhcGhpYy4KKworICAgICAgICAtLSBUaGUgbWVtYmVycyBt
X3NvdXJjZUltYWdlIGFuZCBtX3NvdXJjZUltYWdlUmVjdCBvZiBGaWx0ZXIgYXJlIHJlbW92ZWQu
CisKKyAgICAgICAgLS0gQ1NTRmlsdGVyOjphcHBseSgpIGxvb3BzIHRocm91Z2ggaXRzIGZ1bmN0
aW9ucyBhbmQgdXNlcyB0aGUgcmVzdWx0CisgICAgICAgICAgIG9mIGV2ZXJ5IGZ1bmN0aW9uIGFz
IHRoZSBpbnB1dCB0byB0aGUgbmV4dCBvbmUuIFRoZSBpbml0aWFsIGlucHV0IGlzCisgICAgICAg
ICAgIHRoZSBzb3VyY2VJbWFnZS4gQW5kIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgZnVuY3Rpb24g
aXMgdGhlIHJldHVybmVkCisgICAgICAgICAgIEZpbHRlckltYWdlLgorCisgICAgICAgIC0tIFNW
R0ZpbHRlcjo6YXBwbHkoKSBsb29wcyB0aHJvdWdoIGl0cyBleHByZXNzaW9uLiBJdCB1c2VzIGEg
c3RhY2sgb2YKKyAgICAgICAgICAgRmlsdGVySW1hZ2VWZWN0b3IgdG8ga2VlcCB0cmFjayBvZiB0
aGUgaW5wdXRzIHdoaWxlIGFwcGx5aW5nIGVhY2gKKyAgICAgICAgICAgRmlsdGVyRWZmZWN0LiBF
dmVyeSBGaWx0ZXJFZmZlY3QgaXMgYXNrZWQgdG8gdGFrZUlucHV0cygpIGZvcm0gdGhpcyAKKyAg
ICAgICAgICAgc3RhY2suIFRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIEZpbHRlckVmZmVjdCBp
cyBwdXNoZWQgb24gdGhpcyBzdGFjay4KKyAgICAgICAgICAgVGhlIHN0YWNrIHNob3VsZCBoYXZl
IGEgc2luZ2xlIEZpbHRlckltYWdlIHdoZW4gZmluaXNoaW5nIHRoZSBsb29wLgorICAgICAgICAg
ICBUaGlzIGl0ZW0gaXMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgRmlsdGVyLgorCisgICAg
ICAgIC0tIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtSW5wdXRzQ29sb3JTcGFjZSgpIHdhcyBhZGRl
ZCB0byB0cmFuc2Zvcm0gdGhlCisgICAgICAgICAgIGlucHV0IEZpbHRlckltYWdlVmVjdG9yIHRv
IHRoZSBvcGVyYXRpbmcgY29sb3Igc3BhY2Ugb2YgRmlsdGVyRWZmZWN0LgorICAgICAgICAgICBJ
dCBpcyBvdmVycmlkZGVuIGJ5IEZFRGlzcGxhY2VtZW50TWFwIHdoaWNoIGRvZXMgbm90IHRyYW5z
Zm9ybSB0aGUKKyAgICAgICAgICAgY29sb3Igc3BhY2Ugb2YgdGhlIGZpcnN0IGlucHV0IEZpbHRl
ckltYWdlLgorCisgICAgICAgIC0tIEZpbHRlckVmZmVjdDo6Y29ycmVjdFByZW11bHRpcGxpZWRJ
bnB1dHMoKSB3YXMgYWRkZWQgdG8gY29ycmVjdCB0aGUKKyAgICAgICAgICAgcHJlbXVsdGlwbGll
ZCBwaXhlbHMgb2YgdGhlIGlucHV0IEZpbHRlckltYWdlVmVjdG9yLiBXZSBkbyBub3QgbmVlZAor
ICAgICAgICAgICB0byBkbyB0aGlzIGNvcnJlY3Rpb24gaWYgdGhlIEZpbHRlckVmZmVjdCB3ZSBh
cHBseSBpcyBhcml0aG1ldGljCisgICAgICAgICAgIGNvbXBvc2l0ZSBmaWx0ZXIuIE90aGVyd2lz
ZSB3ZSBuZWVkIHRvIGNvcnJlY3QgdGhlIEZpbHRlckltYWdlIG9mIGFueQorICAgICAgICAgICBh
cml0aG1ldGljIGNvbXBvc2l0ZSBmaWx0ZXIgaW4gdGhlIEZpbHRlckltYWdlVmVjdG9yLgorCisg
ICAgICAgIC0tIE5vIG5lZWQgZm9yIHRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cygpLiBUaGlzIGNv
dW50IGlzIHRoZSBzaXplIG9mIHRoZQorICAgICAgICAgICBTVkdGaWx0ZXIgZXhwcmVzc2lvbi4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGljQ29y
ZUltYWdlQXBwbGllci5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWNDb3JlSW1h
Z2VBcHBsaWVyOjphcHBseSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUJsZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnRha2VJbnB1dHMg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4Ojp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6dGFrZUlucHV0cyBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4Ojp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnRyYW5zZm9ybUlucHV0c0NvbG9y
U3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnRyYW5z
Zm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BT
aGFkb3c6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6
dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjp0YWtlSW5wdXRzIGNv
bnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVNZXJnZTo6dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdl
OjpudW1iZXJPZkVmZmVjdElucHV0cyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9s
b2d5Ojp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVPZmZzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnRha2VJbnB1dHMgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRVRpbGU6OnRha2VJbnB1dHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjphcHBseSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlcjo6c291cmNlSW1hZ2VSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlcjo6c291cmNlSW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyOjpzZXRTb3VyY2VJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1JbnB1dHNDb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdFByZW11bHRpcGxpZWRJbnB1dHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmlucHV0RmlsdGVySW1hZ2VzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29ycmVjdFByZW11bHRpcGxpZWRSZXN1bHRJ
Zk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRyYW5z
Zm9ybVJlc3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmZpbHRlckltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6
dGFrZUlucHV0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnJlc3Vs
dElzVmFsaWRQcmVtdWx0aXBsaWVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6bnVtYmVyT2ZFZmZlY3RJbnB1dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjptYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3JyZWN0
RmlsdGVyUmVzdWx0SWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmg6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2Uu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjp0YWtlSW5wdXRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6dGFrZUlucHV0cyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNl
R3JhcGhpY1NvZnR3YXJlQXBwbGllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFw
aGljU29mdHdhcmVBcHBsaWVyOjphcHBseSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0NT
U0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6YXBwbHkpOgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oOgorICAgICAgICAqIHN2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb2xsZWN0RWZmZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp0b3Rh
bE51bWJlckZpbHRlckVmZmVjdHMpOiBEZWxldGVkLgorCiAyMDIxLTEyLTA2ICBTYWlkIEFib3Ut
SGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gIFtGaWx0
ZXJzXSBNYWtlIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbigpIGFuZCBpdHMg
b3ZlcnJpZGFibGUgZnVuY3Rpb25zIHdvcmsgaXRlcmF0aXZlbHkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGljQ29yZUlt
YWdlQXBwbGllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFn
ZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlQXBwbGllci5tbQppbmRleCA4OTA5MDcwMTFiYWRiZTg3
NTQzOWE2YmZjYzRjMWFkMjQ1YjcxZGVmLi4xNDZiZGQ5MmIzYmI0YWEzYTdmMGZjZTJhZjI5MTY2
ODk4Yzg3MzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZUFwcGxpZXIubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2VB
cHBsaWVyLm1tCkBAIC0yOCwxNSArMjgsMTYgQEAKIAogI2lmIFVTRShDT1JFX0lNQUdFKQogCi0j
aW1wb3J0ICJGaWx0ZXIuaCIKICNpbXBvcnQgIkZpbHRlckltYWdlLmgiCiAjaW1wb3J0ICJQbGF0
Zm9ybUltYWdlQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBTb3VyY2VH
cmFwaGljQ29yZUltYWdlQXBwbGllcjo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IEZpbHRlckltYWdlVmVjdG9yJiwgRmlsdGVySW1hZ2UmIHJlc3VsdCkgY29uc3QKK2Jvb2wgU291
cmNlR3JhcGhpY0NvcmVJbWFnZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZp
bHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIEZpbHRlckltYWdlJiByZXN1bHQpIGNvbnN0CiB7Ci0g
ICAgYXV0byBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJbWFnZSgpOworICAgIGF1dG8mIGlu
cHV0ID0gaW5wdXRzWzBdLmdldCgpOworCisgICAgYXV0byBzb3VyY2VJbWFnZSA9IGlucHV0Lmlt
YWdlQnVmZmVyKCk7CiAgICAgaWYgKCFzb3VyY2VJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQmxlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUJsZW5kLmNwcAppbmRleCA3NmRmOGIwOGY1Y2UwOGMyOGZkMjNlYWJmZTQzMDgzM2JhMjg5Njdm
Li45NmE4ZGZlNzEwMmFkNzk5MDY1NmM4ZTZlZDc3MDcwZmNlOTkyNzg5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKQEAg
LTUyLDYgKzUyLDEyIEBAIGJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZSBtb2Rl
KQogICAgIHJldHVybiB0cnVlOwogfQogCitGaWx0ZXJJbWFnZVZlY3RvciBGRUJsZW5kOjp0YWtl
SW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QKK3sKKyAgICBBU1NFUlQoc3Rh
Y2suc2l6ZSgpID49IDIpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCksIHN0YWNrLnRh
a2VMYXN0KCkgfTsKK30KKwogc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IEZF
QmxlbmQ6OmNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3QKIHsKICAgICByZXR1cm4g
RmlsdGVyRWZmZWN0QXBwbGllcjo6Y3JlYXRlPEZFQmxlbmRTb2Z0d2FyZUFwcGxpZXI+KCp0aGlz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVCbGVuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmgKaW5kZXggOWE3N2YyMjM1OTMyNjgzM2Q5MjMwZjlkZDU4NjIzYjQ0YjAwM2YxYy4uZjA2
ODQ0MTQzMDVhNzViY2ViMGJhMDllYjBlNzlmYzlhMmQ5MGM0NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKQEAgLTQxLDYgKzQx
LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUJsZW5kKEJsZW5kTW9kZSk7CiAKKyAgICBG
aWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29u
c3Qgb3ZlcnJpZGU7CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4g
Y3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQg
cGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVk
IGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHAKaW5kZXggMTAzOGVhYzBiMTVhOTg5MzkxMmIwYjZhMGM1NmQ5MWY5YjM5
ODhkMC4uMGEzYWEwN2M0MGY0ZjJiNWFmYWY0ZjgwNzViZjQ1MWUzNDA0OGUzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwCkBAIC0xMDUsNiArMTA1LDEyIEBAIGJvb2wgRkVDb2xvck1hdHJpeDo6c3Vw
cG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSBjb25zdAogfQogI2VuZGlmCiAKK0ZpbHRlckltYWdl
VmVjdG9yIEZFQ29sb3JNYXRyaXg6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNr
KSBjb25zdAoreworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICByZXR1cm4geyBz
dGFjay50YWtlTGFzdCgpIH07Cit9CisKIGJvb2wgRkVDb2xvck1hdHJpeDo6cmVzdWx0SXNBbHBo
YUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJikgY29uc3QKIHsKICAgICByZXR1cm4gbV90
eXBlID09IEZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
aAppbmRleCA0NDRlNTdhODZmMjYyODMzNDkyY2JlNmU3ZjJlZTAwMjliMzBlM2MzLi4yYmZlZmY2
MDgwNWFmOGE1ZDk1OTkyMTZlOGVmYjZhNDljZmFmZjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAt
NTgsNyArNTgsOSBAQCBwcml2YXRlOgogI2lmIFVTRShDT1JFX0lNQUdFKQogICAgIGJvb2wgc3Vw
cG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgotICAgIAor
CisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3Rh
Y2spIGNvbnN0IG92ZXJyaWRlOworCiAgICAgYm9vbCByZXN1bHRJc0FscGhhSW1hZ2UoY29uc3Qg
RmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gY3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXIm
KSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IGQy
M2Y3YmE4NTEzNDYzNjk0ZjkyYTI1NzQzMzNkOTQ3YTFkNTM5ZmMuLmNhYmFlZDExMzBmNzY2NWNk
NTRkMGIzM2I1ZmVhZDhiYjYyNmI5OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNw
cApAQCAtNTYsNiArNTYsMTIgQEAgYm9vbCBGRUNvbXBvbmVudFRyYW5zZmVyOjpzdXBwb3J0c0Nv
cmVJbWFnZVJlbmRlcmluZygpIGNvbnN0CiB9CiAjZW5kaWYKIAorRmlsdGVySW1hZ2VWZWN0b3Ig
RkVDb21wb25lbnRUcmFuc2Zlcjo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2sp
IGNvbnN0Cit7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7IHN0
YWNrLnRha2VMYXN0KCkgfTsKK30KKwogc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxp
ZXI+IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJiBmaWx0
ZXIpIGNvbnN0CiB7CiAjaWYgVVNFKENPUkVfSU1BR0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zl
ci5oCmluZGV4IDUwNTVjNWVkNDU2ZDEwZWFkY2RkZjEyYjkwMjQ4OWU5MjJjOTIwMzIuLjY2N2Yx
NzMwNDk2NDJlZWQyNzg5MTUxY2I4NWQ4OThmYTQxOGZiNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRU
cmFuc2Zlci5oCkBAIC03Miw2ICs3Miw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzdXBwb3J0c0Nv
cmVJbWFnZVJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKKyAgICBGaWx0ZXJJ
bWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3Zl
cnJpZGU7CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gY3JlYXRl
QXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0
cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXBy
ZXNlbnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDdkY2E2OTUy
MzI1ZTVlNjIwOGU2NWUzZjk2MjQ4Zjg2ZmZlNWUyYWMuLjM1MzYwZjYyZGJjMmVkYTQyMjVjNjQw
NGZkZjBmMmI1MmFkZmQ5YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC04Niw2ICs4NiwxMiBAQCBi
b29sIEZFQ29tcG9zaXRlOjpzZXRLNChmbG9hdCBrNCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
RmlsdGVySW1hZ2VWZWN0b3IgRkVDb21wb3NpdGU6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0
b3ImIHN0YWNrKSBjb25zdAoreworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CisgICAg
cmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSwgc3RhY2sudGFrZUxhc3QoKSB9OworfQorCiBGbG9h
dFJlY3QgRkVDb21wb3NpdGU6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRl
ciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmlt
aXRpdmVTdWJyZWdpb24pIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUu
aAppbmRleCAzYjljODU2YjI3YjQwYWRmNWQyMmNiYTJmMmQ1NjBjZGNiZGI3YmYwLi4zMzMxMGZl
ZjJiZjQ2YWRiY2MyNDNlOGNmNmNkMDRjODk4ZDE1NWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBAIC02Myw5
ICs2MywxMSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZFQ29tcG9zaXRlKGNvbnN0IENvbXBv
c2l0ZU9wZXJhdGlvblR5cGUmLCBmbG9hdCBrMSwgZmxvYXQgazIsIGZsb2F0IGszLCBmbG9hdCBr
NCk7CiAKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9y
JiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CisKICAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VS
ZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0
IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGJv
b2wgbWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV90eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KKyAg
ICBib29sIHJlc3VsdElzVmFsaWRQcmVtdWx0aXBsaWVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV90eXBlICE9IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVBcHBsaWVyKGNvbnN0IEZp
bHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAppbmRleCAx
ZDI3NDgzNTMxY2IxMGQxMjY3ZjFjNDI3NzA3MTYyMTg0ODUxNTFmLi4wYzk4OWQ4MDk4MzUxN2Fh
YTNiMjI1MTc0ZDFjNWMzZWU2OTJlZDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKQEAg
LTExNCw2ICsxMTQsMTIgQEAgYm9vbCBGRUNvbnZvbHZlTWF0cml4OjpzZXRQcmVzZXJ2ZUFscGhh
KGJvb2wgcHJlc2VydmVBbHBoYSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorRmlsdGVySW1hZ2VW
ZWN0b3IgRkVDb252b2x2ZU1hdHJpeDo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3Rh
Y2spIGNvbnN0Cit7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7
IHN0YWNrLnRha2VMYXN0KCkgfTsKK30KKwogRmxvYXRSZWN0IEZFQ29udm9sdmVNYXRyaXg6OmNh
bGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VW
ZWN0b3ImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKICAg
ICByZXR1cm4gZmlsdGVyLm1heEVmZmVjdFJlY3QocHJpbWl0aXZlU3VicmVnaW9uKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2
ZU1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bnZvbHZlTWF0cml4LmgKaW5kZXggZWU2YmM4ZmFhYWZiMGUwMTkyYThlMWE1OWVlYTE2MWUzYzUz
NDczNS4uNGEyN2ZmYzI3MjY0M2Y5Yjg5NzVhYzQ3ZTRhZGQ5ZTMyZTcwYzA5MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bnZvbHZlTWF0cml4LmgKQEAgLTcwLDYgKzcwLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBG
RUNvbnZvbHZlTWF0cml4KGNvbnN0IEludFNpemUmIGtlcm5lbFNpemUsIGZsb2F0IGRpdmlzb3Is
IGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSwg
Y29uc3QgRmxvYXRQb2ludCYga2VybmVsVW5pdExlbmd0aCwgYm9vbCBwcmVzZXJ2ZUFscGhhLCBj
b25zdCBWZWN0b3I8ZmxvYXQ+JiBrZXJuZWxNYXRyaXgpOwogCisgICAgRmlsdGVySW1hZ2VWZWN0
b3IgdGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOwor
CiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBG
aWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJl
Z2lvbikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0
QXBwbGllcj4gY3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggYjRlYWQ4ZjAzODk1ZTVhMGFjMTdkNTE3ZGVl
NTk0NWViYzM1ZmJhZS4uYWU2NDc1MDMyYTljZGM5NTYzY2M0Njg4MDNmZjViMzE4ODFjMzdjMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
c3BsYWNlbWVudE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTY4LDYgKzY4LDE3IEBAIGJvb2wgRkVE
aXNwbGFjZW1lbnRNYXA6OnNldFNjYWxlKGZsb2F0IHNjYWxlKQogICAgIHJldHVybiB0cnVlOwog
fQogCitGaWx0ZXJJbWFnZVZlY3RvciBGRURpc3BsYWNlbWVudE1hcDo6dGFrZUlucHV0cyhGaWx0
ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0Cit7CisgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA+
PSAyKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgpLCBzdGFjay50YWtlTGFzdCgpIH07
Cit9CisKK0Zsb2F0UmVjdCBGRURpc3BsYWNlbWVudE1hcDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNv
bnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZsb2F0
UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAoreworICAgIHJldHVybiBmaWx0ZXIubWF4
RWZmZWN0UmVjdChwcmltaXRpdmVTdWJyZWdpb24pOworfQorCiBjb25zdCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UmIEZFRGlzcGxhY2VtZW50TWFwOjpyZXN1bHRDb2xvclNwYWNlKGNvbnN0IEZpbHRl
ckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0CiB7CiAgICAgLy8gU3BlYzogVGhlICdjb2xvci1p
bnRlcnBvbGF0aW9uLWZpbHRlcnMnIHByb3BlcnR5IG9ubHkgYXBwbGllcyB0byB0aGUgJ2luMicg
c291cmNlIGltYWdlCkBAIC03NywxNiArODgsMTEgQEAgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiBGRURpc3BsYWNlbWVudE1hcDo6cmVzdWx0Q29sb3JTcGFjZShjb25zdCBGaWx0ZXJJbWEK
ICAgICByZXR1cm4gaW5wdXRzWzBdLT5jb2xvclNwYWNlKCk7CiB9CiAKLXZvaWQgRkVEaXNwbGFj
ZW1lbnRNYXA6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRmlsdGVyRWZmZWN0KiBpbiwgY29u
c3QgaW50IGluZGV4KQordm9pZCBGRURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtSW5wdXRzQ29s
b3JTcGFjZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdAogewogICAgIC8v
IERvIG5vdCB0cmFuc2Zvcm0gdGhlIGZpcnN0IHByaW1pdGl2ZSBpbnB1dCwgYXMgcGVyIHRoZSBz
cGVjLgotICAgIGlmIChpbmRleCkKLSAgICAgICAgaW4tPnRyYW5zZm9ybVJlc3VsdENvbG9yU3Bh
Y2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLX0KLQotRmxvYXRSZWN0IEZFRGlzcGxhY2VtZW50
TWFwOjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRl
ckltYWdlVmVjdG9yJiwgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGZpbHRlci5tYXhFZmZlY3RSZWN0KHByaW1pdGl2ZVN1YnJlZ2lvbik7
CisgICAgQVNTRVJUKGlucHV0cy5zaXplKCkgPT0gMik7CisgICAgaW5wdXRzWzFdLT50cmFuc2Zv
cm1Ub0NvbG9yU3BhY2Uob3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKIH0KIAogc3RkOjp1bmlxdWVf
cHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IEZFRGlzcGxhY2VtZW50TWFwOjpjcmVhdGVBcHBsaWVy
KGNvbnN0IEZpbHRlciYpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXggYWQ5NWNl
M2Q3Y2NhYWUzY2ViYjE1MTZhZjhiMGUyYzVmYWE4NjEwMi4uNGI4NGFkMTM0ZTAyMjcyMTE3NDY2
YzM4ZmViMDZmM2Q0OTljYTZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAtNTQsMTEg
KzU0LDEzIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRkVEaXNwbGFjZW1lbnRNYXAoQ2hhbm5l
bFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFu
bmVsU2VsZWN0b3IsIGZsb2F0KTsKIAotICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
cmVzdWx0Q29sb3JTcGFjZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqLCBjb25z
dCBpbnQpIG92ZXJyaWRlOworICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVy
SW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKIAogICAgIEZsb2F0UmVjdCBjYWxj
dWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRl
OwogCisgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiByZXN1bHRDb2xvclNwYWNlKGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCB0cmFuc2Zv
cm1JbnB1dHNDb2xvclNwYWNlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0
IG92ZXJyaWRlOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IGNy
ZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVy
UmVwcmVzZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDFi
ZmJkMmVlZGQ1OGI5OTIxMjM0YTA4YjNkMDQ5ODE4ZTA0NmMwNmMuLmIxYTAzNTE0NmU0YzQxNmFm
Zjk0ZTc5YTkxNWE2MmViYjBlYjc4ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTQ1LDYgKzQ1
LDEyIEBAIEZFRHJvcFNoYWRvdzo6RkVEcm9wU2hhZG93KGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFks
IGZsb2F0IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sCiB7CiB9CiAKK0ZpbHRlckltYWdlVmVjdG9y
IEZFRHJvcFNoYWRvdzo6dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRh
a2VMYXN0KCkgfTsKK30KKwogRmxvYXRSZWN0IEZFRHJvcFNoYWRvdzo6Y2FsY3VsYXRlSW1hZ2VS
ZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRz
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKICAgICBhdXRv
IGltYWdlUmVjdCA9IGlucHV0c1swXS0+aW1hZ2VSZWN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAppbmRleCA3
OGE1MzdmZjdmNmFkNjIyZjAxOTU3MDFlZjQyNjRjMzdiNTBhYTAzLi5iNGYwYzQxMjQ1ZTFkMTcx
ZWE4Mjg4YjFhMzdlNjc4OWQzMmVhZTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKQEAgLTUzLDYgKzUzLDgg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRURyb3BTaGFkb3coZmxvYXQgc3RkWCwgZmxvYXQg
c3RkWSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGZsb2F0
IHNoYWRvd09wYWNpdHkpOwogCisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhGaWx0
ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOworCiAgICAgRmxvYXRSZWN0IGNh
bGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYg
aW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJs
dXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHAKaW5kZXggOWIyZjIwOTVhZDM0MzhkYWJjNjI5MGFlNWRmMWVkYmRlNjQ5NzRl
MC4uMDgyOGFlNzgxMzg1ZTgwMjliMTFiNDQ4MGFhODgxZGYyMzZiNGE2ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHAKQEAgLTEwMyw2ICsxMDMsMTIgQEAgSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6
Y2FsY3VsYXRlT3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQogICAgIHJldHVybiB7
IDMgKiBrZXJuZWxTaXplLndpZHRoKCkgLyAyLCAzICoga2VybmVsU2l6ZS5oZWlnaHQoKSAvIDIg
fTsKIH0KIAorRmlsdGVySW1hZ2VWZWN0b3IgRkVHYXVzc2lhbkJsdXI6OnRha2VJbnB1dHMoRmls
dGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAoreworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0
eSgpKTsKKyAgICByZXR1cm4geyBzdGFjay50YWtlTGFzdCgpIH07Cit9CisKIEZsb2F0UmVjdCBG
RUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBj
b25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2
ZVN1YnJlZ2lvbikgY29uc3QKIHsKICAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0c1swXS0+aW1h
Z2VSZWN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKaW5kZXggODUxN2FjMTBiODYyZTI4ZTVjZTk4NGJj
MmRiYzdjNTBlMGQ4MThhOC4uZjJlNGNkMGNlNjhmNjk0NDAzZWVjNTdhY2YzOGZmYzlhYjYxZTVh
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuaApAQCAtNTAsNiArNTAsOCBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIEZFR2F1c3NpYW5CbHVyKGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSk7CiAK
KyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFj
aykgY29uc3Qgb3ZlcnJpZGU7CisKICAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNv
bnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0
UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIEludE91dHNl
dHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKaW5kZXggYmM5MmQzODQz
Y2Q4ODllOTVmZTUxOWI0OGZhYWU5YjhjMjdkNDViOS4uYWEyOTQwNzJmYjE1Yzc2ZTc0MTYxYThh
OWFlNGFmYWJmYWYyZTQxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCkBAIC04Miw2ICs4MiwxMiBAQCBib29s
IEZFTGlnaHRpbmc6OnNldEtlcm5lbFVuaXRMZW5ndGhZKGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZ
KQogICAgIHJldHVybiB0cnVlOwogfQogCitGaWx0ZXJJbWFnZVZlY3RvciBGRUxpZ2h0aW5nOjp0
YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QKK3sKKyAgICBBU1NFUlQo
IXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3RhY2sudGFrZUxhc3QoKSB9OworfQor
CiBGbG9hdFJlY3QgRkVMaWdodGluZzo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uKSBjb25zdAogewogICAgIHJldHVybiBmaWx0ZXIubWF4RWZmZWN0UmVjdChw
cmltaXRpdmVTdWJyZWdpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAppbmRleCAzMWMyYWFhYmQzYzViMThjMGRjYjYw
MjE5ODliMWEwYjE2ZDc3MTBmLi5jN2U1OTE0NDQzNWJjOTk4NTU1MGZjOTljOGVlY2FlMWVlYTJj
ZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuaApAQCAtNjEsNiArNjEsOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAg
ICAgRkVMaWdodGluZyhUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3Vy
ZmFjZVNjYWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQs
IGZsb2F0IHNwZWN1bGFyRXhwb25lbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBr
ZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmKTsKIAorICAgIEZpbHRlckltYWdl
VmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlk
ZTsKKwogICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVm
ZmVjdEFwcGxpZXI+IGNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1l
cmdlLmNwcAppbmRleCAyZDZiNGVjYjhkMjQ0ODRjOGFmMTU2ZWY1NDEyNjYyZGQzZjNkNTUzLi43
Y2UxZjI5OThhYmM2ZmMzMjM4OWEyMTdiYjJiOGExNzdlZDFmZDU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAKQEAgLTQw
LDYgKzQwLDE3IEBAIEZFTWVyZ2U6OkZFTWVyZ2UodW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1
dHMpCiB7CiB9CiAKK0ZpbHRlckltYWdlVmVjdG9yIEZFTWVyZ2U6OnRha2VJbnB1dHMoRmlsdGVy
SW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdAoreworICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0g
bV9udW1iZXJPZkVmZmVjdElucHV0cyk7CisKKyAgICBWZWN0b3I8UmVmPEZpbHRlckltYWdlPj4g
aW5wdXRzOworICAgIGZvciAoYXV0byBpbnB1dHNTaXplID0gbV9udW1iZXJPZkVmZmVjdElucHV0
czsgaW5wdXRzU2l6ZS0tOyApCisgICAgICAgIGlucHV0cy5hcHBlbmQoc3RhY2sudGFrZUxhc3Qo
KSk7CisKKyAgICByZXR1cm4gaW5wdXRzOworfQorCiBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZm
ZWN0QXBwbGllcj4gRkVNZXJnZTo6Y3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdAog
ewogICAgIHJldHVybiBGaWx0ZXJFZmZlY3RBcHBsaWVyOjpjcmVhdGU8RkVNZXJnZVNvZnR3YXJl
QXBwbGllcj4oKnRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTWVyZ2UuaAppbmRleCA3OTM4YjdjMTZlNDlmYzI0NWZkNjcyMTAwNjE2YmEz
MWJiOWIyZGVkLi5lMmYwZjlmYmY0ZWU4ZTQxZjQ3MjFkMDM4YTU2ZGUxMmFkMTY0OGFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2Uu
aApAQCAtMzAsMTIgKzMwLDE2IEBAIGNsYXNzIEZFTWVyZ2UgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
IHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZFTWVyZ2U+IGNyZWF0
ZSh1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cyk7CiAKKyAgICB1bnNpZ25lZCBudW1iZXJP
ZkVmZmVjdElucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZFZmZlY3RJbnB1dHM7IH0K
KyAgICAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8
UmVmPEZFTWVyZ2U+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgogICAgIEZFTWVyZ2Uo
dW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMpOwogCisgICAgRmlsdGVySW1hZ2VWZWN0b3Ig
dGFrZUlucHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOworCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IGNyZWF0ZUFwcGxpZXIoY29u
c3QgRmlsdGVyJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVy
bmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24p
IGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IDQ1MmNhM2I5NWZjZDNmMmY4
NjM4MmYzNjc2NzZmMmExNTI0MTkwZDQuLmQ4ZWMyNzk4ZWM0YjBiOGZhZjAzNTkyNzBkMzljNzhh
NmM4NTNjYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKQEAgLTY4LDYgKzY4LDEyIEBAIGJvb2wgRkVN
b3JwaG9sb2d5OjpzZXRSYWRpdXNZKGZsb2F0IHJhZGl1c1kpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK0ZpbHRlckltYWdlVmVjdG9yIEZFTW9ycGhvbG9neTo6dGFrZUlucHV0cyhGaWx0ZXJJbWFn
ZVZlY3RvciYgc3RhY2spIGNvbnN0Cit7CisgICAgQVNTRVJUKCFzdGFjay5pc0VtcHR5KCkpOwor
ICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCkgfTsKK30KKwogRmxvYXRSZWN0IEZFTW9ycGhv
bG9neTo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0
ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lv
bikgY29uc3QKIHsKICAgICBhdXRvIGltYWdlUmVjdCA9IGlucHV0c1swXS0+aW1hZ2VSZWN0KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TW9ycGhvbG9neS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1vcnBob2xvZ3kuaAppbmRleCBlNDU0YzM3MWU4NDRjNTZmNzBmMjA5MDVlZTIxNDZkZTIyZjlk
NjMyLi4zOTVkNjdjYTg0NmQ3ZmY1Y2I3ZGQ2YmRiMTk2ZTI3YWZiMmFhMTk3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9s
b2d5LmgKQEAgLTUxLDYgKzUxLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRU1vcnBob2xv
Z3koTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSk7
CiAKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBz
dGFjaykgY29uc3Qgb3ZlcnJpZGU7CisKICAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0
KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZs
b2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGJvb2wg
cmVzdWx0SXNBbHBoYUltYWdlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0
IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCBiNmU3NGRmY2FhOGE5MGQ2NjQ5YTAzY2JkOTA2ODVl
YjRmNjM1M2FjLi5mNGY4OWRiZTBjM2UwMjVmYWQ2MGQ3MjE0N2M5NzhhMjc2NWJjMWNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmNwcApAQCAtNTMsNiArNTMsMTIgQEAgdm9pZCBGRU9mZnNldDo6c2V0RHkoZmxvYXQgZHkp
CiAgICAgbV9keSA9IGR5OwogfQogCitGaWx0ZXJJbWFnZVZlY3RvciBGRU9mZnNldDo6dGFrZUlu
cHV0cyhGaWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0Cit7CisgICAgQVNTRVJUKCFzdGFj
ay5pc0VtcHR5KCkpOworICAgIHJldHVybiB7IHN0YWNrLnRha2VMYXN0KCkgfTsKK30KKwogRmxv
YXRSZWN0IEZFT2Zmc2V0OjpjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uKSBjb25zdAogewogICAgIGF1dG8gaW1hZ2VSZWN0ID0gaW5wdXRzWzBdLT5p
bWFnZVJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuaAppbmRleCAyZjA2N2IzZWExOThkMzgzZDZkOGFmOTcyNmE3MjQ4NDhm
ZjkwMjhiLi43NDIwMDRjMmVhMjUwN2M3OWExOTU3MmNkZDY4MmE4ZTU5MTFjMTNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5o
CkBAIC00Miw2ICs0Miw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRkVPZmZzZXQoZmxvYXQg
ZHgsIGZsb2F0IGR5KTsKIAorICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVy
SW1hZ2VWZWN0b3ImIHN0YWNrKSBjb25zdCBvdmVycmlkZTsKKwogICAgIEZsb2F0UmVjdCBjYWxj
dWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlu
cHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgYm9vbCByZXN1bHRJc0FscGhhSW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3Im
IGlucHV0cykgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKaW5kZXggOTJiODI3MGU0ZGJmOTM0YWQ2MzY0
NDhhNmNlNGQ2MGU2ZjQxZGEyZi4uOTNhZTRkNDMyOTg4MTA3NWI1YjViZmZkZTlmMDM2NTljZmNm
MWVmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmNwcApAQCAtMzgsNiArMzgsMTIgQEAgRkVUaWxlOjpGRVRpbGUoKQogewogfQog
CitGaWx0ZXJJbWFnZVZlY3RvciBGRVRpbGU6OnRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3Im
IHN0YWNrKSBjb25zdAoreworICAgIEFTU0VSVCghc3RhY2suaXNFbXB0eSgpKTsKKyAgICByZXR1
cm4geyBzdGFjay50YWtlTGFzdCgpIH07Cit9CisKIEZsb2F0UmVjdCBGRVRpbGU6OmNhbGN1bGF0
ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3Im
LCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3QKIHsKICAgICByZXR1
cm4gZmlsdGVyLm1heEVmZmVjdFJlY3QocHJpbWl0aXZlU3VicmVnaW9uKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCmluZGV4IDAwYWRk
MjhhNTYyMWJiZmM1NzYzMjczMjljNGI2NDYxM2EwM2JjMDguLjQ1ZWRlYWRiNWQwYWEzMmU5MDQw
ODlhNGMzY2VjYTgzZjhmNzE4ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaApAQCAtMzMsNiArMzMsOCBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIEZFVGlsZSgpOwogCisgICAgRmlsdGVySW1hZ2VWZWN0b3IgdGFrZUlucHV0cyhG
aWx0ZXJJbWFnZVZlY3RvciYgc3RhY2spIGNvbnN0IG92ZXJyaWRlOworCiAgICAgRmxvYXRSZWN0
IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3Rv
ciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBib29sIHJlc3VsdElzQWxwaGFJbWFnZShjb25zdCBGaWx0ZXJJbWFnZVZl
Y3RvciYgaW5wdXRzKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcAppbmRleCBiZTRmMjljYzU2OWY2ZTU1
NWM3OTkzZGM1YmU4ZmJlOGNjN2FlNGU5Li44MzZlMTNjOTc1Y2UwNmI0YTBkNGQ1YjA4ZmNhZTQ2
YTYxN2IyNmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXIuY3BwCkBAIC04MywxMyArODMsMjAgQEAgYm9vbCBGaWx0ZXI6OmNsYW1w
RmlsdGVyUmVnaW9uSWZOZWVkZWQoKQogCiBSZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRlcjo6YXBw
bHkoSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdl
UmVjdCkKIHsKLSAgICBzZXRTb3VyY2VJbWFnZShzb3VyY2VJbWFnZSk7Ci0gICAgc2V0U291cmNl
SW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCk7CisgICAgUmVmUHRyPEZpbHRlckltYWdlPiBpbnB1
dDsKIAotICAgIGF1dG8gcmVzdWx0ID0gYXBwbHkoKTsKKyAgICBpZiAoc291cmNlSW1hZ2UpIHsK
KyAgICAgICAgYXV0byBhYnNvbHV0ZVNvdXJjZUltYWdlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qo
c2NhbGVkQnlGaWx0ZXJTY2FsZShzb3VyY2VJbWFnZVJlY3QpKTsKKyAgICAgICAgaW5wdXQgPSBG
aWx0ZXJJbWFnZTo6Y3JlYXRlKG1fZmlsdGVyUmVnaW9uLCBzb3VyY2VJbWFnZVJlY3QsIGFic29s
dXRlU291cmNlSW1hZ2VSZWN0LCBSZWYgeyAqc291cmNlSW1hZ2UgfSk7CisgICAgICAgIGlmICgh
aW5wdXQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIHJl
c3VsdCA9IGFwcGx5KGlucHV0LmdldCgpKTsKICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICByZXN1bHQtPmNvcnJlY3RQ
cmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIoKTsKICAgICByZXN1bHQtPnRyYW5zZm9ybVRvQ29sb3JT
cGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oCmluZGV4IDI1YzE3NjRkZTk1NGIzYzdjYjcxY2VhNDg3NjY1ZmQxODM0NWNlM2UuLmIyYmEz
ZWY0OGQ2MDk0MmE0YjNkZDE3YmQ0ZTc3MGQyYjQxNDJjZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaApAQCAtNDQsMTUgKzQ0LDkg
QEAgcHVibGljOgogICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsdGVyU2NhbGU7IH0KICAgICB2b2lkIHNldEZpbHRlclNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYg
ZmlsdGVyU2NhbGUpIHsgbV9maWx0ZXJTY2FsZSA9IGZpbHRlclNjYWxlOyB9CiAKLSAgICBGbG9h
dFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJbWFnZVJlY3Q7
IH0KLSAgICB2b2lkIHNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCkgeyBtX3NvdXJjZUltYWdlUmVjdCA9IHNvdXJjZUltYWdlUmVjdDsgfQotCiAgICAg
RmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9
CiAgICAgdm9pZCBzZXRGaWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24p
IHsgbV9maWx0ZXJSZWdpb24gPSBmaWx0ZXJSZWdpb247IH0KIAotICAgIEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSW1hZ2UuZ2V0KCk7IH0KLSAgICB2
b2lkIHNldFNvdXJjZUltYWdlKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJiBzb3VyY2VJbWFnZSkgeyBt
X3NvdXJjZUltYWdlID0gV1RGTW92ZShzb3VyY2VJbWFnZSk7IH0KLQogICAgIENsaXBPcGVyYXRp
b24gY2xpcE9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcE9wZXJhdGlvbjsgfQogICAg
IHZvaWQgc2V0Q2xpcE9wZXJhdGlvbihDbGlwT3BlcmF0aW9uIGNsaXBPcGVyYXRpb24pIHsgbV9j
bGlwT3BlcmF0aW9uID0gY2xpcE9wZXJhdGlvbjsgfQogCkBAIC02OCw4ICs2Miw4IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKSBjb25zdCA9
IDA7CiAKICAgICBib29sIGNsYW1wRmlsdGVyUmVnaW9uSWZOZWVkZWQoKTsKLSAgICAKLSAgICB2
aXJ0dWFsIFJlZlB0cjxGaWx0ZXJJbWFnZT4gYXBwbHkoKSA9IDA7CisKKyAgICB2aXJ0dWFsIFJl
ZlB0cjxGaWx0ZXJJbWFnZT4gYXBwbHkoRmlsdGVySW1hZ2UqIHNvdXJjZUltYWdlKSA9IDA7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEZpbHRlckltYWdlPiBhcHBseShJbWFnZUJ1ZmZlciog
c291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0KTsKIAogcHJvdGVj
dGVkOgpAQCAtODEsMTAgKzc1LDYgQEAgcHJpdmF0ZToKICAgICBGbG9hdFNpemUgbV9maWx0ZXJT
Y2FsZTsKICAgICBDbGlwT3BlcmF0aW9uIG1fY2xpcE9wZXJhdGlvbjsKICAgICBGbG9hdFJlY3Qg
bV9maWx0ZXJSZWdpb247Ci0KLSAgICAvLyBGSVhNRTogdGhlc2Ugc2hvdWxkIG5vdCBiZSBtZW1i
ZXJzIG9mIEZpbHRlci4gVGhleSBzaG91bGQgYmUgcGFzc2VkIHRvIEZpbHRlcjo6YXBwbHkoKS4K
LSAgICBGbG9hdFJlY3QgbV9zb3VyY2VJbWFnZVJlY3Q7Ci0gICAgUmVmUHRyPEltYWdlQnVmZmVy
PiBtX3NvdXJjZUltYWdlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwCmluZGV4IDQ2YzA5MGIzMDczNzM2MjFjNDE4NzNhZTk4ZDI4NTIxOGUyYzM2NzcuLmUx
YmU3YmQ3YjExYjczZjMwYTc5ZWM4ZWRkYjBkMGMzMDY5YzIwMGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAKQEAgLTc0LDQ0ICs3NCw0OSBAQCBGaWx0ZXJFZmZlY3QqIEZpbHRlckVmZmVjdDo6aW5wdXRF
ZmZlY3QodW5zaWduZWQgbnVtYmVyKSBjb25zdAogICAgIHJldHVybiBtX2lucHV0RWZmZWN0cy5h
dChudW1iZXIpLmdldCgpOwogfQogCi1ib29sIEZpbHRlckVmZmVjdDo6YXBwbHkoY29uc3QgRmls
dGVyJiBmaWx0ZXIsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+JiBn
ZW9tZXRyeSkKK3ZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1JbnB1dHNDb2xvclNwYWNlKGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc1Jlc3Vs
dCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0
RWZmZWN0cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCk7
CisgICAgZm9yIChhdXRvJiBpbnB1dCA6IGlucHV0cykKKyAgICAgICAgaW5wdXQtPnRyYW5zZm9y
bVRvQ29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworfQogCi0gICAgICAgIC8vIENv
bnZlcnQgaW5wdXQgcmVzdWx0cyB0byB0aGUgY3VycmVudCBlZmZlY3QncyBjb2xvciBzcGFjZS4K
LSAgICAgICAgQVNTRVJUKGluLT5oYXNSZXN1bHQoKSk7Ci0gICAgICAgIHRyYW5zZm9ybVJlc3Vs
dENvbG9yU3BhY2UoaW4sIGkpOwotICAgIH0KK3ZvaWQgRmlsdGVyRWZmZWN0Ojpjb3JyZWN0UHJl
bXVsdGlwbGllZElucHV0cyhjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdAor
eworICAgIC8vIENvcnJlY3QgYW55IGludmFsaWQgcGl4ZWxzLCBpZiBuZWNlc3NhcnksIGluIHRo
ZSByZXN1bHQgb2YgYSBmaWx0ZXIgb3BlcmF0aW9uLgorICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVz
ZWQgdG8gZW5zdXJlIHZhbGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0ZXIgaW5wdXRzIGFuZCB0aGUg
ZmluYWwgcmVzdWx0LgorICAgIC8vIE9ubHkgdGhlIGFyaXRobWV0aWMgY29tcG9zaXRlIGZpbHRl
ciBldmVyIG5lZWRzIHRvIHBlcmZvcm0gY29ycmVjdGlvbi4KKyAgICBmb3IgKGF1dG8mIGlucHV0
IDogaW5wdXRzKQorICAgICAgICBpbnB1dC0+Y29ycmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZl
cigpOworfQogCi0gICAgaWYgKCFtYXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMo
KSkgewotICAgICAgICBmb3IgKGF1dG8mIGluIDogbV9pbnB1dEVmZmVjdHMpCi0gICAgICAgICAg
ICBpbi0+Y29ycmVjdFByZW11bHRpcGxpZWRSZXN1bHRJZk5lZWRlZCgpOwotICAgIH0KK1JlZlB0
cjxGaWx0ZXJJbWFnZT4gRmlsdGVyRWZmZWN0OjphcHBseShjb25zdCBGaWx0ZXImIGZpbHRlciwg
RmlsdGVySW1hZ2UmIGlucHV0KQoreworICAgIHJldHVybiBhcHBseShmaWx0ZXIsIEZpbHRlcklt
YWdlVmVjdG9yIHsgUmVmIHsgY29uc3RfY2FzdDxGaWx0ZXJJbWFnZSY+KGlucHV0KSB9IH0pOwor
fQogCi0gICAgYXV0byBpbnB1dEZpbHRlckltYWdlcyA9IHRoaXMtPmlucHV0RmlsdGVySW1hZ2Vz
KCk7CitSZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRlckVmZmVjdDo6YXBwbHkoY29uc3QgRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+JiBnZW9tZXRyeSkKK3sKKyAgICBpZiAobV9maWx0
ZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuIG1fZmlsdGVySW1hZ2U7CiAKLSAgICBhdXRvIHByaW1p
dGl2ZVN1YnJlZ2lvbiA9IGNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXIsIGlucHV0
RmlsdGVySW1hZ2VzLCBnZW9tZXRyeSk7Ci0gICAgYXV0byBpbWFnZVJlY3QgPSBjYWxjdWxhdGVJ
bWFnZVJlY3QoZmlsdGVyLCBpbnB1dEZpbHRlckltYWdlcywgcHJpbWl0aXZlU3VicmVnaW9uKTsK
KyAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lv
bihmaWx0ZXIsIGlucHV0cywgZ2VvbWV0cnkpOworICAgIGF1dG8gaW1hZ2VSZWN0ID0gY2FsY3Vs
YXRlSW1hZ2VSZWN0KGZpbHRlciwgaW5wdXRzLCBwcmltaXRpdmVTdWJyZWdpb24pOwogICAgIGF1
dG8gYWJzb2x1dGVJbWFnZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlci5zY2FsZWRCeUZp
bHRlclNjYWxlKGltYWdlUmVjdCkpOwogCiAgICAgaWYgKGFic29sdXRlSW1hZ2VSZWN0LmlzRW1w
dHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVJbWFnZVJlY3Qu
c2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAKLSAgICBhdXRvIGlzQWxwaGFJbWFnZSA9IHJlc3VsdElzQWxwaGFJbWFnZShpbnB1dEZp
bHRlckltYWdlcyk7Ci0gICAgYXV0byBpbWFnZUNvbG9yU3BhY2UgPSByZXN1bHRDb2xvclNwYWNl
KGlucHV0RmlsdGVySW1hZ2VzKTsKLQotICAgIG1fZmlsdGVySW1hZ2UgPSBGaWx0ZXJJbWFnZTo6
Y3JlYXRlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgaW1hZ2VSZWN0LCBhYnNvbHV0ZUltYWdlUmVjdCwg
aXNBbHBoYUltYWdlLCBmaWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBpbWFnZUNvbG9yU3BhY2UpOwot
ICAgIGlmICghbV9maWx0ZXJJbWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8g
aXNBbHBoYUltYWdlID0gcmVzdWx0SXNBbHBoYUltYWdlKGlucHV0cyk7CisgICAgYXV0byBpc1Zh
bGlkUHJlbXVsdGlwbGllZCA9IHJlc3VsdElzVmFsaWRQcmVtdWx0aXBsaWVkKCk7CisgICAgYXV0
byBpbWFnZUNvbG9yU3BhY2UgPSByZXN1bHRDb2xvclNwYWNlKGlucHV0cyk7CiAKICAgICBhdXRv
IGFwcGxpZXIgPSBjcmVhdGVBcHBsaWVyKGZpbHRlcik7CiAgICAgaWYgKCFhcHBsaWVyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgbV9maWx0
ZXJJbWFnZSA9IEZpbHRlckltYWdlOjpjcmVhdGUocHJpbWl0aXZlU3VicmVnaW9uLCBpbWFnZVJl
Y3QsIGFic29sdXRlSW1hZ2VSZWN0LCBpc0FscGhhSW1hZ2UsIGlzVmFsaWRQcmVtdWx0aXBsaWVk
LCBmaWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBpbWFnZUNvbG9yU3BhY2UpOworICAgIGlmICghbV9m
aWx0ZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBMT0dfV0lUSF9TVFJF
QU0oRmlsdGVycywgc3RyZWFtCiAgICAgICAgIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJO
YW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseSgpOiIKQEAgLTEyMCw3ICsxMjUsMTQgQEAg
Ym9vbCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBzdGQ6
Om9wdGlvbmFsPEZpbHRlckVmZmVjdEcKICAgICAgICAgPDwgIlxuICBtYXhFZmZlY3RSZWN0ICIg
PDwgZmlsdGVyLm1heEVmZmVjdFJlY3QocHJpbWl0aXZlU3VicmVnaW9uKQogICAgICAgICA8PCAi
XG4gIGZpbHRlciBzY2FsZSAiIDw8IGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAotICAgIHJldHVy
biBhcHBsaWVyLT5hcHBseShmaWx0ZXIsIGlucHV0RmlsdGVySW1hZ2VzLCAqbV9maWx0ZXJJbWFn
ZSk7CisgICAgdHJhbnNmb3JtSW5wdXRzQ29sb3JTcGFjZShpbnB1dHMpOworICAgIGlmIChpc1Zh
bGlkUHJlbXVsdGlwbGllZCkKKyAgICAgICAgY29ycmVjdFByZW11bHRpcGxpZWRJbnB1dHMoaW5w
dXRzKTsKKworICAgIGlmICghYXBwbGllci0+YXBwbHkoZmlsdGVyLCBpbnB1dHMsICptX2ZpbHRl
ckltYWdlKSkKKyAgICAgICAgbV9maWx0ZXJJbWFnZSA9IG51bGxwdHI7CisKKyAgICByZXR1cm4g
bV9maWx0ZXJJbWFnZTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KCkKQEAg
LTEzNywzMCArMTQ5LDYgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2
ZSgpCiAgICAgICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7CiB9CiAKLUZpbHRl
ckltYWdlVmVjdG9yIEZpbHRlckVmZmVjdDo6aW5wdXRGaWx0ZXJJbWFnZXMoKSBjb25zdAotewot
ICAgIEZpbHRlckltYWdlVmVjdG9yIGZpbHRlckltYWdlczsKLQotICAgIGZvciAoYXV0byYgaW5w
dXRFZmZlY3QgOiBtX2lucHV0RWZmZWN0cykKLSAgICAgICAgZmlsdGVySW1hZ2VzLmFwcGVuZCgq
aW5wdXRFZmZlY3QtPmZpbHRlckltYWdlKCkpOwotCi0gICAgcmV0dXJuIGZpbHRlckltYWdlczsK
LX0KLQotdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVk
ZWQoKQotewotICAgIGlmICghaGFzUmVzdWx0KCkgfHwgIW1heVByb2R1Y2VJbnZhbGlkUHJlbXVs
dGlwbGllZFBpeGVscygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9maWx0ZXJJbWFnZS0+Y29y
cmVjdFByZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGRl
c3RpbmF0aW9uQ29sb3JTcGFjZSkKLXsKLSAgICBpZiAoIWhhc1Jlc3VsdCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9maWx0ZXJJbWFnZS0+dHJhbnNmb3JtVG9Db2xvclNwYWNlKGRlc3RpbmF0
aW9uQ29sb3JTcGFjZSk7Ci19Ci0KIFRleHRTdHJlYW0mIEZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxS
ZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgRmlsdGVyUmVwcmVzZW50YXRpb24gcmVwcmVz
ZW50YXRpb24pIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkdW1wIHRoZSBzdWJS
ZWdpb25zIG9mIHRoZSBmaWx0ZXIgcHJpbWl0aXZlcyBoZXJlIGxhdGVyLiBUaGlzIGlzbid0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuaAppbmRleCA2NDk3YTJkMWRmZTUwNDcxNWE1ZjQ4Y2E2ODNmOGMxOWY4ZmZkMGE0
Li44YTI0NzNiNzZlYjI2OWQ2MDhjZTgwMWUzNzZhMmNiYTJjMzYzYjM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmgKQEAgLTQwLDIwICs0MCwyMCBAQCBjbGFzcyBGaWx0ZXJFZmZlY3RBcHBsaWVyOwogY2xhc3Mg
RmlsdGVyRWZmZWN0R2VvbWV0cnk7CiAKIGNsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0
ZXJGdW5jdGlvbiB7CisgICAgdXNpbmcgRmlsdGVyRnVuY3Rpb246OmFwcGx5OworCiBwdWJsaWM6
CiAgICAgdm9pZCBjbGVhclJlc3VsdCgpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJSZXN1bHRz
UmVjdXJzaXZlKCk7CiAgICAgYm9vbCBoYXNSZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRl
ckltYWdlOyB9CiAKLSAgICBGaWx0ZXJJbWFnZSogZmlsdGVySW1hZ2UoKSBjb25zdCB7IHJldHVy
biBtX2ZpbHRlckltYWdlLmdldCgpOyB9CisgICAgUmVmUHRyPEZpbHRlckltYWdlPiBmaWx0ZXJJ
bWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVySW1hZ2U7IH0KKyAgICB2aXJ0dWFsIEZpbHRl
ckltYWdlVmVjdG9yIHRha2VJbnB1dHMoRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdCB7IHJldHVy
biB7IH07IH0KIAogICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1
cm4gbV9pbnB1dEVmZmVjdHM7IH0KICAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2ln
bmVkKSBjb25zdDsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0IHsg
cmV0dXJuIG1faW5wdXRFZmZlY3RzLnNpemUoKTsgfQotCi0gICAgdm9pZCB0cmFuc2Zvcm1SZXN1
bHRDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYpOwogCi0gICAgYm9vbCBh
cHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21l
dHJ5PiYgPSBzdGQ6Om51bGxvcHQpIG92ZXJyaWRlOworICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4g
YXBwbHkoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29u
c3Qgc3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4mID0gc3RkOjpudWxsb3B0KTsK
IAogICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgb3BlcmF0aW5nQ29sb3JTcGFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nQ29sb3JTcGFjZTsgfQogICAgIHZpcnR1YWwgdm9p
ZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29s
b3JTcGFjZSkgeyBtX29wZXJhdGluZ0NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOyB9CkBAIC02Mywy
OSArNjMsMjUgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHVzaW5nIEZpbHRlckZ1bmN0aW9u
OjpGaWx0ZXJGdW5jdGlvbjsKIAotICAgIHZpcnR1YWwgYm9vbCBtYXlQcm9kdWNlSW52YWxpZFBy
ZW11bHRpcGxpZWRQaXhlbHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdm9pZCBj
b3JyZWN0UHJlbXVsdGlwbGllZFJlc3VsdElmTmVlZGVkKCk7Ci0KLSAgICAvLyBDb3JyZWN0IGFu
eSBpbnZhbGlkIHBpeGVscywgaWYgbmVjZXNzYXJ5LCBpbiB0aGUgcmVzdWx0IG9mIGEgZmlsdGVy
IG9wZXJhdGlvbi4KLSAgICAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGVuc3VyZSB2YWxpZCBw
aXhlbCB2YWx1ZXMgb24gZmlsdGVyIGlucHV0cyBhbmQgdGhlIGZpbmFsIHJlc3VsdC4KLSAgICAv
LyBPbmx5IHRoZSBhcml0aG1ldGljIGNvbXBvc2l0ZSBmaWx0ZXIgZXZlciBuZWVkcyB0byBwZXJm
b3JtIGNvcnJlY3Rpb24uCi0gICAgdmlydHVhbCB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5l
ZWRlZCgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2Uo
RmlsdGVyRWZmZWN0KiBpbiwgY29uc3QgaW50KSB7IGluLT50cmFuc2Zvcm1SZXN1bHRDb2xvclNw
YWNlKG1fb3BlcmF0aW5nQ29sb3JTcGFjZSk7IH0KLQotICAgIEZpbHRlckltYWdlVmVjdG9yIGlu
cHV0RmlsdGVySW1hZ2VzKCkgY29uc3Q7Ci0gICAgCiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZVBy
aW1pdGl2ZVN1YnJlZ2lvbihjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYs
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+JikgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVT
dWJyZWdpb24pIGNvbnN0OwogCiAgICAgLy8gU29saWQgYmxhY2sgaW1hZ2Ugd2l0aCBkaWZmZXJl
bnQgYWxwaGEgdmFsdWVzLgogICAgIHZpcnR1YWwgYm9vbCByZXN1bHRJc0FscGhhSW1hZ2UoY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmly
dHVhbCBib29sIHJlc3VsdElzVmFsaWRQcmVtdWx0aXBsaWVkKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorCiAgICAgdmlydHVhbCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIHJlc3VsdENv
bG9yU3BhY2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdCB7IHJldHVybiBtX29wZXJh
dGluZ0NvbG9yU3BhY2U7IH0KIAorICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1JbnB1dHNDb2xv
clNwYWNlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0OworICAgIAorICAg
IHZvaWQgY29ycmVjdFByZW11bHRpcGxpZWRJbnB1dHMoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3Im
IGlucHV0cykgY29uc3Q7CisKICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZl
Y3RBcHBsaWVyPiBjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0ID0gMDsKIAorICAg
IFJlZlB0cjxGaWx0ZXJJbWFnZT4gYXBwbHkoY29uc3QgRmlsdGVyJiwgRmlsdGVySW1hZ2UmIGlu
cHV0KSBvdmVycmlkZTsKKwogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsK
IAogICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gbV9maWx0ZXJJbWFnZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24u
aAppbmRleCAwMmNlOWJjNDBkNTYzNzBjYTA4MWY0MDEwMmFhZDJjZDI4YjFkYWRhLi4wOWI3ZTQx
NGRkODc1YmQxYjU0YmRiZGMxNzEyYWUzNDJhMGY1YmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCkBA
IC0yNiw2ICsyNiw4IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdEdl
b21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJGaWx0ZXJJbWFn
ZVZlY3Rvci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3RFeHRl
bnQuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtOTQsNyArOTYsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCi0gICAgdmlydHVhbCBib29sIGFwcGx5KGNvbnN0
IEZpbHRlciYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+JiA9IHN0
ZDo6bnVsbG9wdCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFJlZlB0cjxGaWx0ZXJJ
bWFnZT4gYXBwbHkoY29uc3QgRmlsdGVyJiwgRmlsdGVySW1hZ2UmKSB7IHJldHVybiBudWxscHRy
OyB9CiAgICAgdmlydHVhbCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiB7IH07
IH0KICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZXN1bHQoKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFnZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcApp
bmRleCA5NTg0ZmE2OWVlMGVkMmVkZTY1YWZmOWI5Zjk5MzViZDk1ZmI0ODMyLi4yYTAwOGZlYjFj
YzM0Mzg0NDQ3YjE4ZmYwM2ExMTlhMmYzOTliNDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcApAQCAtMzgs
MjIgKzM4LDM4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmUHRyPEZpbHRlckltYWdl
PiBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9u
LCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFn
ZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKK1JlZlB0cjxGaWx0ZXJJbWFn
ZT4gRmlsdGVySW1hZ2U6OmNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lv
biwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIGFic29sdXRlSW1h
Z2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgYm9vbCBpc1ZhbGlkUHJlbXVsdGlwbGllZCwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNv
bG9yU3BhY2UpCiB7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
YWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKSk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWx0
ZXJJbWFnZShwcmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwgYWJzb2x1dGVJbWFnZVJlY3Qs
IGlzQWxwaGFJbWFnZSwgcmVuZGVyaW5nTW9kZSwgY29sb3JTcGFjZSkpOworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRmlsdGVySW1hZ2UocHJpbWl0aXZlU3VicmVnaW9uLCBpbWFnZVJlY3QsIGFi
c29sdXRlSW1hZ2VSZWN0LCBpc0FscGhhSW1hZ2UsIGlzVmFsaWRQcmVtdWx0aXBsaWVkLCByZW5k
ZXJpbmdNb2RlLCBjb2xvclNwYWNlKSk7CiB9CiAKLUZpbHRlckltYWdlOjpGaWx0ZXJJbWFnZShj
b25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFn
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGFic29sdXRlSW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFn
ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmIGNvbG9yU3BhY2UpCitSZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRlckltYWdlOjpjcmVhdGUo
Y29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1h
Z2VSZWN0LCBjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgUmVmPEltYWdlQnVmZmVy
PiYmIGltYWdlQnVmZmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbHRlckltYWdl
KHByaW1pdGl2ZVN1YnJlZ2lvbiwgaW1hZ2VSZWN0LCBhYnNvbHV0ZUltYWdlUmVjdCwgV1RGTW92
ZShpbWFnZUJ1ZmZlcikpKTsKK30KKworRmlsdGVySW1hZ2U6OkZpbHRlckltYWdlKGNvbnN0IEZs
b2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwg
Y29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBib29s
IGlzVmFsaWRQcmVtdWx0aXBsaWVkLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0
IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKICAgICA6IG1fcHJpbWl0aXZlU3Vi
cmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbikKICAgICAsIG1faW1hZ2VSZWN0KGltYWdlUmVjdCkK
ICAgICAsIG1fYWJzb2x1dGVJbWFnZVJlY3QoYWJzb2x1dGVJbWFnZVJlY3QpCiAgICAgLCBtX2lz
QWxwaGFJbWFnZShpc0FscGhhSW1hZ2UpCisgICAgLCBtX2lzVmFsaWRQcmVtdWx0aXBsaWVkKGlz
VmFsaWRQcmVtdWx0aXBsaWVkKQogICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUp
CiAgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKIHsKIH0KIAorRmlsdGVySW1hZ2U6OkZp
bHRlckltYWdlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9h
dFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIFJlZjxJ
bWFnZUJ1ZmZlcj4mJiBpbWFnZUJ1ZmZlcikKKyAgICA6IG1fcHJpbWl0aXZlU3VicmVnaW9uKHBy
aW1pdGl2ZVN1YnJlZ2lvbikKKyAgICAsIG1faW1hZ2VSZWN0KGltYWdlUmVjdCkKKyAgICAsIG1f
YWJzb2x1dGVJbWFnZVJlY3QoYWJzb2x1dGVJbWFnZVJlY3QpCisgICAgLCBtX3JlbmRlcmluZ01v
ZGUoaW1hZ2VCdWZmZXItPnJlbmRlcmluZ01vZGUoKSkKKyAgICAsIG1fY29sb3JTcGFjZShpbWFn
ZUJ1ZmZlci0+Y29sb3JTcGFjZSgpKQorICAgICwgbV9pbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdl
QnVmZmVyKSkKK3sKK30KKwogRmxvYXRSZWN0IEZpbHRlckltYWdlOjptYXhFZmZlY3RSZWN0KGNv
bnN0IEZpbHRlciYgZmlsdGVyKSBjb25zdAogewogICAgIHJldHVybiBmaWx0ZXIubWF4RWZmZWN0
UmVjdChtX3ByaW1pdGl2ZVN1YnJlZ2lvbik7CkBAIC0yODEsNyArMjk3LDcgQEAgdm9pZCBGaWx0
ZXJJbWFnZTo6Y29weVBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiBkZXN0aW5hdGlvblBpeGVsQnVm
ZmVyLCBjb25zdCBJbnQKIHZvaWQgRmlsdGVySW1hZ2U6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4
ZWxCdWZmZXIoKQogewogICAgIC8vIE11c3Qgb3BlcmF0ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1
bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGludmFsaWQgcGl4ZWxzLgotICAgIGlmICgh
bV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIpCisgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRQaXhl
bEJ1ZmZlciB8fCBtX2lzVmFsaWRQcmVtdWx0aXBsaWVkKQogICAgICAgICByZXR1cm47CiAKICAg
ICBVaW50OENsYW1wZWRBcnJheSYgaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZFBpeGVsQnVm
ZmVyLT5kYXRhKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKaW5kZXggOTU2NzI0OGY5OTEyODc0MTA3N2Q4MmE1ZDM1
YWQ0YjY3NWQ2OWU2Yi4uZTllZmQ1ZmI4Y2RkNWY1OGNmZjc5NTRhZTVlOGYwYTg2NmE3NDZjMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVySW1hZ2UuaApAQCAtNDUsNyArNDUsOCBAQCBjbGFzcyBJbWFnZUJ1ZmZlcjsKIAogY2xh
c3MgRmlsdGVySW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJJbWFnZT4gewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWZQdHI8RmlsdGVySW1hZ2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3Qm
IHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGFic29sdXRlSW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgUmVuZGVyaW5nTW9k
ZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisgICAgc3RhdGljIFJlZlB0cjxGaWx0
ZXJJbWFnZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25z
dCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3Qs
IGJvb2wgaXNBbHBoYUltYWdlLCBib29sIGlzVmFsaWRQcmVtdWx0aXBsaWVkLCBSZW5kZXJpbmdN
b2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKyAgICBzdGF0aWMgUmVmUHRyPEZp
bHRlckltYWdlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNv
bnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVj
dCwgUmVmPEltYWdlQnVmZmVyPiYmKTsKIAogICAgIC8vIFRoZSByZXR1cm4gdmFsdWVzIGFyZSBp
biBmaWx0ZXIgY29vcmRpbmF0ZXMuCiAgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1YnJlZ2lvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9CkBAIC03Niw3ICs3Nyw4IEBA
IHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIEZpbHRlckltYWdlKGNvbnN0IEZsb2F0
UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29u
c3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBSZW5kZXJp
bmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKyAgICBGaWx0ZXJJbWFnZShj
b25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFn
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGFic29sdXRlSW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFn
ZSwgYm9vbCBpc1ZhbGlkUHJlbXVsdGlwbGllZCwgUmVuZGVyaW5nTW9kZSwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJik7CisgICAgRmlsdGVySW1hZ2UoY29uc3QgRmxvYXRSZWN0JiBwcmlt
aXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBJbnRSZWN0
JiBhYnNvbHV0ZUltYWdlUmVjdCwgUmVmPEltYWdlQnVmZmVyPiYmKTsKIAogICAgIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+JiBwaXhlbEJ1ZmZlclNsb3QoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bik7CiAKQEAgLTkzLDYgKzk1LDcgQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fYWJzb2x1dGVJ
bWFnZVJlY3Q7CiAKICAgICBib29sIG1faXNBbHBoYUltYWdlIHsgZmFsc2UgfTsKKyAgICBib29s
IG1faXNWYWxpZFByZW11bHRpcGxpZWQgeyB0cnVlIH07CiAgICAgUmVuZGVyaW5nTW9kZSBtX3Jl
bmRlcmluZ01vZGU7CiAgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fY29sb3JTcGFjZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VBbHBoYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUFscGhhLmNwcAppbmRleCAxNDdhZmUwNDNkY2UxZDgxYmU4YzIxZjI5NmQzYjI1YTMyOWU2
OGI0Li4xOWI0NTY5ZjM2YmQ0ZTAwZWU4N2RiOTJkMjFkODlhZWU1YjQ2MTJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmNwcApAQCAtMzksOSArMzksMTAgQEAgU291cmNlQWxwaGE6OlNvdXJjZUFscGhhKEZpbHRl
ckVmZmVjdCYgc291cmNlRWZmZWN0KQogICAgIGlucHV0RWZmZWN0cygpLmFwcGVuZCgmc291cmNl
RWZmZWN0KTsKIH0KIAotRmxvYXRSZWN0IFNvdXJjZUFscGhhOjpjYWxjdWxhdGVJbWFnZVJlY3Qo
Y29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxv
YXRSZWN0JikgY29uc3QKK0ZpbHRlckltYWdlVmVjdG9yIFNvdXJjZUFscGhhOjp0YWtlSW5wdXRz
KEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QKIHsKLSAgICByZXR1cm4gaW5wdXRzWzBd
LT5pbWFnZVJlY3QoKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJu
IHsgc3RhY2sudGFrZUxhc3QoKSB9OwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0
QXBwbGllcj4gU291cmNlQWxwaGE6OmNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlQWxwaGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlQWxwaGEuaAppbmRleCBlMjExZTFhZmVkOTM5YzljMWUzMzU3ZWM1MDI1Yjg4NmRiOWYyOGFl
Li5hNjNkNzYxOGRjZjhmZGU2MDQxOWI2OTM2YzU1NTVjM2UwNmE5ZGY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5o
CkBAIC0zMyw3ICszMyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgU291cmNl
QWxwaGEoRmlsdGVyRWZmZWN0Jik7CiAKLSAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0
KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZs
b2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJJ
bWFnZVZlY3RvciB0YWtlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gY3JlYXRl
QXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5j
cHAKaW5kZXggNjVlODRiYzc3MGZkZTIxYjA0YjhjMWYyNWU3YTQ1NGY0OWQ1NjY3NS4uYzY3N2Qy
NjRkNzc0YmU2NzI3ZTEyNDMyZWZmMDgxZjQyMTVmNDI2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3Bw
CkBAIC00MSw5ICs0MSwxMCBAQCBTb3VyY2VHcmFwaGljOjpTb3VyY2VHcmFwaGljKCkKIHsKIH0K
IAotRmxvYXRSZWN0IFNvdXJjZUdyYXBoaWM6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0
ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBGbG9hdFJlY3QmKSBj
b25zdAorRmlsdGVySW1hZ2VWZWN0b3IgU291cmNlR3JhcGhpYzo6dGFrZUlucHV0cyhGaWx0ZXJJ
bWFnZVZlY3RvciYgc3RhY2spIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZpbHRlci5zb3VyY2VJbWFn
ZVJlY3QoKTsKKyAgICBBU1NFUlQoIXN0YWNrLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIHsgc3Rh
Y2sudGFrZUxhc3QoKSB9OwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGll
cj4gU291cmNlR3JhcGhpYzo6Y3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImIGZpbHRlcikgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VHcmFwaGljLmgKaW5kZXggZWU5MmU5MzYzMzU3ZTBjYWYyMGMzYjRkNGJmOTU5Mjhl
YzAwZjhhYy4uOWY2NmUwMjc2MjhiZDc3ZTk3ZjJjYTQ2ZTAxNzQyMTEzZDQ4NWVkOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFw
aGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VHcmFwaGljLmgKQEAgLTM4LDcgKzM4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHN1cHBvcnRz
Q29yZUltYWdlUmVuZGVyaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogI2Vu
ZGlmCiAKLSAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNv
bnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBGaWx0ZXJJbWFnZVZlY3RvciB0YWtlSW5w
dXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gY3JlYXRlQXBwbGllcihjb25zdCBGaWx0
ZXImKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUv
U291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5jcHAKaW5kZXggOGIyYTU5YjJmNDJkYzc4Mjkz
MmJlNTkyNWVjYWFlMWE1NzFjOTFmMi4uODBjNGJmNTYyOWYxNGFlM2Q2MWI1NjQ3MWRjM2UzZWJi
OWQ4ZDlmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBo
aWNTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0yMSwxNyArMjEsMTcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmgiCiAKLSNpbmNs
dWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1ib29sIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0
IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYsIEZpbHRlckltYWdlJiBy
ZXN1bHQpIGNvbnN0Citib29sIFNvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNv
bnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIEZpbHRlckltYWdl
JiByZXN1bHQpIGNvbnN0CiB7CisgICAgYXV0byYgaW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisK
ICAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0LmltYWdlQnVmZmVyKCk7Ci0gICAgYXV0byBz
b3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJbWFnZSgpOworICAgIGF1dG8gc291cmNlSW1hZ2Ug
PSBpbnB1dC5pbWFnZUJ1ZmZlcigpOwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIXNvdXJjZUlt
YWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0Zp
bHRlci5jcHAKaW5kZXggMGExMGUzYmZjZjdkN2VmYzcyNTM0NjYyOGNmMGQyYWZmZTc2YTY3OC4u
ZTMyYmM4Y2JkNjA3ZjBjZGE3YjcxZDVmNWJkNjdjN2U1ZTc4NzVmMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTM2OCwxNSArMzY4LDIwIEBAIHZvaWQgQ1NTRmls
dGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKQogICAgICAgICBmdW5jdGlvbi0+Y2xlYXJS
ZXN1bHQoKTsKIH0KIAotUmVmUHRyPEZpbHRlckltYWdlPiBDU1NGaWx0ZXI6OmFwcGx5KCkKK1Jl
ZlB0cjxGaWx0ZXJJbWFnZT4gQ1NTRmlsdGVyOjphcHBseShGaWx0ZXJJbWFnZSogc291cmNlSW1h
Z2UpCiB7CisgICAgaWYgKG1fZnVuY3Rpb25zLmlzRW1wdHkoKSB8fCAhc291cmNlSW1hZ2UpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gcmVz
dWx0ID0gc291cmNlSW1hZ2U7CisKICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlv
bnMpIHsKLSAgICAgICAgaWYgKGZ1bmN0aW9uLT5pc1NWR0ZpbHRlcigpKQotICAgICAgICAgICAg
ZG93bmNhc3Q8U1ZHRmlsdGVyPihmdW5jdGlvbi5wdHIoKSktPnNldFNvdXJjZUltYWdlUmVjdChz
b3VyY2VJbWFnZVJlY3QoKSk7Ci0gICAgICAgIGlmICghZnVuY3Rpb24tPmFwcGx5KCp0aGlzKSkK
KyAgICAgICAgcmVzdWx0ID0gZnVuY3Rpb24tPmFwcGx5KCp0aGlzLCAqcmVzdWx0KTsKKyAgICAg
ICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAg
cmV0dXJuIGxhc3RFZmZlY3QoKS0+ZmlsdGVySW1hZ2UoKTsKKworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIHZvaWQgQ1NTRmlsdGVyOjpzZXRGaWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBm
aWx0ZXJSZWdpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmls
dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKaW5kZXggZGJmNzY2
ZmM2YjU5ZGU2MWM2MGQ5ZjUyODM0ZDI0NTZmOWNlN2FjYS4uOWNkMWU0MmE2YjA5ZjkxYmU0OTlm
ZDZkOGY5NjE1MjgzNGU0ZTAyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NTU0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaApA
QCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qg
ZmluYWw7CiAKICAgICB2b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIFJlZlB0
cjxGaWx0ZXJJbWFnZT4gYXBwbHkoKSBmaW5hbDsKKyAgICBSZWZQdHI8RmlsdGVySW1hZ2U+IGFw
cGx5KEZpbHRlckltYWdlKiBzb3VyY2VJbWFnZSkgZmluYWw7CiAKIHByaXZhdGU6CiAgICAgQ1NT
RmlsdGVyKFJlbmRlcmluZ01vZGUsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIENsaXBP
cGVyYXRpb24sIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzLCBib29sIGhhc0ZpbHRlclRo
YXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCmluZGV4IDBkZTdkODljZTY5
MzU0MTQ4MDA4NGEyYTQyMDQyMzk4NGU4ZmIzMjEuLmMxZGEwODQ3OTdiYWQxN2ZhNTJlNTQ5MDQw
MGJhMWU2MjM1YWE5MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAtMTA0LDIwICsxMDQsNTEgQEAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRmlsdGVyOjpsYXN0RWZmZWN0KCkgY29uc3QKICAgICByZXR1cm4gbV9leHByZXNz
aW9uLmxhc3QoKS5lZmZlY3QucHRyKCk7CiB9CiAKLWJvb2wgU1ZHRmlsdGVyOjphcHBseShjb25z
dCBGaWx0ZXImIGZpbHRlciwgY29uc3Qgc3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZlY3RHZW9tZXRy
eT4mKQorUmVmUHRyPEZpbHRlckltYWdlPiBTVkdGaWx0ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYs
IEZpbHRlckltYWdlJiBzb3VyY2VJbWFnZSkKIHsKLSAgICBzZXRTb3VyY2VJbWFnZSh7IGZpbHRl
ci5zb3VyY2VJbWFnZSgpIH0pOwotICAgIHJldHVybiBhcHBseSgpOworICAgIHJldHVybiBhcHBs
eSgmc291cmNlSW1hZ2UpOwogfQogCi1SZWZQdHI8RmlsdGVySW1hZ2U+IFNWR0ZpbHRlcjo6YXBw
bHkoKQorUmVmUHRyPEZpbHRlckltYWdlPiBTVkdGaWx0ZXI6OmFwcGx5KEZpbHRlckltYWdlKiBz
b3VyY2VJbWFnZSkKIHsKICAgICBBU1NFUlQoIW1fZXhwcmVzc2lvbi5pc0VtcHR5KCkpOworCisg
ICAgRmlsdGVySW1hZ2VWZWN0b3Igc3RhY2s7CisKICAgICBmb3IgKGF1dG8mIHRlcm0gOiBtX2V4
cHJlc3Npb24pIHsKLSAgICAgICAgaWYgKCF0ZXJtLmVmZmVjdC0+YXBwbHkoKnRoaXMsIHRlcm0u
Z2VvbWV0cnkpKQorICAgICAgICBhdXRvJiBlZmZlY3QgPSB0ZXJtLmVmZmVjdDsKKyAgICAgICAg
YXV0byBnZW9tZXRyeSA9IHRlcm0uZ2VvbWV0cnk7CisKKyAgICAgICAgaWYgKGVmZmVjdC0+Zmls
dGVyVHlwZSgpID09IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYykgeworICAgICAg
ICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gZWZmZWN0LT5maWx0ZXJJbWFnZSgpKSB7CisgICAgICAg
ICAgICAgICAgc3RhY2suYXBwZW5kKHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFzb3Vy
Y2VJbWFnZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAgICAg
Ly8gQWRkIHNvdXJjZUltYWdlIGFzIGFuIGlucHV0IHRvIHRoZSBTb3VyY2VHcmFwaGljLgorICAg
ICAgICAgICAgc3RhY2suYXBwZW5kKFJlZiB7ICpzb3VyY2VJbWFnZSB9KTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIE5lZWQgdG8gcmVtb3ZlIHRoZSBpbnB1dHMgaGVyZSBpbiBjYXNlIHRoZSBl
ZmZlY3QgaGFzIGEgcmVzdWx0LgorICAgICAgICBhdXRvIGlucHV0cyA9IGVmZmVjdC0+dGFrZUlu
cHV0cyhzdGFjayk7CisKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gZWZmZWN0LT5maWx0ZXJJ
bWFnZSgpKSB7CisgICAgICAgICAgICBzdGFjay5hcHBlbmQocmVzdWx0LnJlbGVhc2VOb25OdWxs
KCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHJl
c3VsdCA9IHRlcm0uZWZmZWN0LT5hcHBseSgqdGhpcywgaW5wdXRzLCBnZW9tZXRyeSk7CisgICAg
ICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAg
c3RhY2suYXBwZW5kKHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICB9Ci0gICAgcmV0dXJu
IGxhc3RFZmZlY3QoKS0+ZmlsdGVySW1hZ2UoKTsKKyAgICAKKyAgICBBU1NFUlQoc3RhY2suc2l6
ZSgpID09IDEpOworICAgIHJldHVybiBzdGFjay50YWtlTGFzdCgpOwogfQogCiBJbnRPdXRzZXRz
IFNWR0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCmluZGV4IDMwYzRlYTBmNjk3OGI1NTkyMDQyODAzN2Rk
Yzc1MWE1YzQwYTQ0YzguLmNiMTk3MmJkZGM5ZjhkYWE5OTUyMWUxMjRiZDE5YTNhNjE4NTM1Mzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5o
CkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKIAogICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxh
c3RFZmZlY3QoKSBjb25zdCBmaW5hbDsKIAotICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gYXBwbHko
KSBmaW5hbDsKKyAgICBSZWZQdHI8RmlsdGVySW1hZ2U+IGFwcGx5KEZpbHRlckltYWdlKiBzb3Vy
Y2VJbWFnZSkgZmluYWw7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgRmlsdGVyUmVwcmVzZW50YXRpb24pIGNvbnN0IGZpbmFs
OwogCkBAIC01OCw3ICs1OCw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBGbG9hdFNpemUgcmVz
b2x2ZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0IGZpbmFsOwogCi0gICAgYm9vbCBhcHBs
eShjb25zdCBGaWx0ZXImLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5
PiYgPSBzdGQ6Om51bGxvcHQpIGZpbmFsOworICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gYXBwbHko
Y29uc3QgRmlsdGVyJiwgRmlsdGVySW1hZ2UmIHNvdXJjZUltYWdlKSBmaW5hbDsKICAgICBJbnRP
dXRzZXRzIG91dHNldHMoKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIGNsZWFyUmVzdWx0KCkgZmlu
YWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5jcHAKaW5kZXggZTdjMDFhZTAyNWE4OWE1ZjE0MGQ2ZDQ1MzdkNjdl
YWY0NmVlNTY2OS4uODliMDU2ZDFkOGMwOGIyOWM5MDE2MGNjNWRjMzkyY2Q1YzRhYTMwZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVp
bGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyQnVpbGRlci5jcHAKQEAgLTM0LDYgKzM0LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heFRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cyA9
IDEwMDsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAw
OworCiB2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZpbHRl
ckVmZmVjdD4gc291cmNlR3JhcGhpYykKIHsKICAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3Vy
Y2VHcmFwaGljOjplZmZlY3ROYW1lKCksIHNvdXJjZUdyYXBoaWMucHRyKCkpOwpAQCAtNzYsMjgg
Kzc5LDggQEAgc3RhdGljIENvbG9ySW50ZXJwb2xhdGlvbiBjb2xvckludGVycG9sYXRpb25Gb3JF
bGVtZW50KFNWR0VsZW1lbnQmIGVsZW1lbnQpCiB9CiAjZW5kaWYKIAotc3RhdGljIHVuc2lnbmVk
IGNvbGxlY3RFZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdCogZWZmZWN0LCBIYXNoU2V0PGNvbnN0
IEZpbHRlckVmZmVjdCo+JiBhbGxFZmZlY3RzKQotewotICAgIGFsbEVmZmVjdHMuYWRkKGVmZmVj
dCk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGVmZmVjdC0+bnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBlZmZlY3QtPmlucHV0RWZmZWN0KGkpOwotICAgICAgICBjb2xsZWN0RWZm
ZWN0cyhpbiwgYWxsRWZmZWN0cyk7Ci0gICAgfQotICAgIHJldHVybiBhbGxFZmZlY3RzLnNpemUo
KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIHRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cyhjb25zdCBG
aWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCi17Ci0gICAgSGFzaFNldDxjb25zdCBGaWx0ZXJFZmZl
Y3QqPiBhbGxFZmZlY3RzOwotICAgIHJldHVybiBjb2xsZWN0RWZmZWN0cygmbGFzdEVmZmVjdCwg
YWxsRWZmZWN0cyk7Ci19Ci0KIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6
OmJ1aWxkRmlsdGVyRWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50KQogewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4VG90YWxOdW1iZXJGaWx0ZXJFZmZlY3Rz
ID0gMTAwOwotCiAgICAgaWYgKGZpbHRlckVsZW1lbnQuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhD
b3VudENoaWxkTm9kZXMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMjQsMTAgKzEw
Nyw4IEBAIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRmlsdGVy
RWZmZWN0cyhTVkdGaWx0ZXJFbGVtZW50JiBmaWx0CiAgICAgICAgIGFkZChlZmZlY3RFbGVtZW50
LnJlc3VsdCgpLCBlZmZlY3QpOwogICAgIH0KIAotICAgIGlmICghZWZmZWN0IHx8IHRvdGFsTnVt
YmVyRmlsdGVyRWZmZWN0cygqZWZmZWN0KSA+IG1heFRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cykg
eworICAgIGlmICghZWZmZWN0KQogICAgICAgICBjbGVhckVmZmVjdHMoKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQogCiAgICAgcmV0dXJuIGVmZmVjdDsKIH0KQEAgLTI0MCw2ICsy
MjEsOSBAQCBib29sIFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRXhwcmVzc2lvbihTVkdGaWx0ZXJF
eHByZXNzaW9uJiBleHByZXNzaW9uKSBjb25zdAogICAgIGlmICghYnVpbGRFZmZlY3RFeHByZXNz
aW9uKG1fbGFzdEVmZmVjdCwgc3RhY2ssIDAsIGV4cHJlc3Npb24pKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKKyAgICBpZiAoZXhwcmVzc2lvbi5zaXplKCkgPiBtYXhUb3RhbE51bWJlckZpbHRl
ckVmZmVjdHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGV4cHJlc3Npb24ucmV2ZXJz
ZSgpOwogICAgIGV4cHJlc3Npb24uc2hyaW5rVG9GaXQoKTsKICAgICByZXR1cm4gdHJ1ZTsK
</data>
<flag name="review"
          id="471663"
          type_id="1"
          status="+"
          setter="heycam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446488</attachid>
            <date>2021-12-08 19:37:57 -0800</date>
            <delta_ts>2021-12-08 22:40:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233973-20211208193756.patch</filename>
            <type>text/plain</type>
            <size>46058</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2NzU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDM3MjFiZjI0NDEyYjQ5
YmVhOTM0ZWM5ZTFiYmRmYmM2YWVlZDM5ZC4uOGNmOTYyZGY2MGU4NjcxMDE2NTEyZjZlMThlZmIy
NzZmMjNlMzQ2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAyMS0xMi0wOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IFtGaWx0ZXJzXSBNYWtlIEZpbHRlcjo6YXBwbHkoKSBhbmQgRmlsdGVyRWZmZWN0OmFwcGx5KCkg
dGFrZSBGaWx0ZXJJbWFnZVZlY3RvciBmb3IgdGhlIGlucHV0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzOTczCisgICAgICAgIHJkYXI6Ly84NjI0
ODk5OQorCisgICAgICAgIFJldmlld2VkIGJ5IENhbWVyb24gTWNDb3JtYWNrLgorCisgICAgICAg
IFRoaXMgaXMgYSBzdGVwIHRvd2FyZHMgcmVtb3ZpbmcgdGhlIGRlcGVuZGVuY3kgb24gdGhlIGlu
cHV0IGVmZmVjdHMuIFRoaXMgCisgICAgICAgIHN0ZXAgaXMgcmVxdWlyZWQgdG8gbWFrZSBlbmNv
ZGluZy9kZWNvZGluZyB0aGUgRmlsdGVyRWZmZWN0IGp1c3QgYmUKKyAgICAgICAgc2VuZGluZyBv
ciByZWNlaXZpbmcgaXRzIHByaW1pdGl2ZSBkYXRhLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2g6
CisKKyAgICAgICAgLS0gVGhlIHNvdXJjZUltYWdlIGFuZCBzb3VyY2VJbWFnZVJlY3QgYXJndW1l
bnRzIHRvIEZpbHRlcjo6YXBwbHkoKSBhcmUKKyAgICAgICAgICAgdXNlZCB0byBjcmVhdGUgYSBG
aWx0ZXJJbWFnZS4gVGhpcyB3aWxsIGJlIHRoZSBpbnB1dCB0byB0aGUgU291cmNlR3JhcGhpYy4K
KworICAgICAgICAtLSBUaGUgbWVtYmVycyBtX3NvdXJjZUltYWdlIGFuZCBtX3NvdXJjZUltYWdl
UmVjdCBvZiBGaWx0ZXIgYXJlIHJlbW92ZWQuCisKKyAgICAgICAgLS0gQ1NTRmlsdGVyOjphcHBs
eSgpIGxvb3BzIHRocm91Z2ggaXRzIGZ1bmN0aW9ucyBhbmQgdXNlcyB0aGUgcmVzdWx0CisgICAg
ICAgICAgIG9mIGV2ZXJ5IGZ1bmN0aW9uIGFzIHRoZSBpbnB1dCB0byB0aGUgbmV4dCBvbmUuIFRo
ZSBpbml0aWFsIGlucHV0IGlzCisgICAgICAgICAgIHRoZSBzb3VyY2VJbWFnZS4gQW5kIHRoZSBy
ZXN1bHQgb2YgdGhlIGxhc3QgZnVuY3Rpb24gaXMgdGhlIHJldHVybmVkCisgICAgICAgICAgIEZp
bHRlckltYWdlLgorCisgICAgICAgIC0tIFNWR0ZpbHRlcjo6YXBwbHkoKSBsb29wcyB0aHJvdWdo
IGl0cyBleHByZXNzaW9uLiBJdCB1c2VzIGEgc3RhY2sgb2YKKyAgICAgICAgICAgRmlsdGVySW1h
Z2VWZWN0b3IgdG8ga2VlcCB0cmFjayBvZiB0aGUgaW5wdXRzIHdoaWxlIGFwcGx5aW5nIGVhY2gK
KyAgICAgICAgICAgRmlsdGVyRWZmZWN0LiBFdmVyeSBGaWx0ZXJFZmZlY3QgaXMgYXNrZWQgdG8g
dGFrZUlucHV0cygpIGZyb20gdGhpcyAKKyAgICAgICAgICAgc3RhY2suIFRoZSByZXN1bHQgb2Yg
YXBwbHlpbmcgdGhlIEZpbHRlckVmZmVjdCBpcyBwdXNoZWQgb24gdGhpcyBzdGFjay4KKyAgICAg
ICAgICAgVGhlIHN0YWNrIHNob3VsZCBoYXZlIGEgc2luZ2xlIEZpbHRlckltYWdlIHdoZW4gZmlu
aXNoaW5nIHRoZSBsb29wLgorICAgICAgICAgICBUaGlzIGl0ZW0gaXMgdGhlIHJlc3VsdCBvZiBh
cHBseWluZyB0aGUgRmlsdGVyLgorCisgICAgICAgIC0tIEZpbHRlckVmZmVjdDo6dHJhbnNmb3Jt
SW5wdXRzQ29sb3JTcGFjZSgpIHdhcyBhZGRlZCB0byB0cmFuc2Zvcm0gdGhlCisgICAgICAgICAg
IGlucHV0IEZpbHRlckltYWdlVmVjdG9yIHRvIHRoZSBvcGVyYXRpbmcgY29sb3Igc3BhY2Ugb2Yg
RmlsdGVyRWZmZWN0LgorICAgICAgICAgICBJdCBpcyBvdmVycmlkZGVuIGJ5IEZFRGlzcGxhY2Vt
ZW50TWFwIHdoaWNoIGRvZXMgbm90IHRyYW5zZm9ybSB0aGUKKyAgICAgICAgICAgY29sb3Igc3Bh
Y2Ugb2YgdGhlIGZpcnN0IGlucHV0IEZpbHRlckltYWdlLgorCisgICAgICAgIC0tIEZpbHRlckVm
ZmVjdDo6Y29ycmVjdFByZW11bHRpcGxpZWRJbnB1dHMoKSB3YXMgYWRkZWQgdG8gY29ycmVjdCB0
aGUKKyAgICAgICAgICAgcHJlbXVsdGlwbGllZCBwaXhlbHMgb2YgdGhlIGlucHV0cyBGaWx0ZXJJ
bWFnZVZlY3Rvci4gV2UgZG8gbm90IG5lZWQKKyAgICAgICAgICAgdG8gZG8gdGhpcyBjb3JyZWN0
aW9uIGlmIHRoZSBGaWx0ZXJFZmZlY3Qgd2UgYXBwbHkgaXMgYXJpdGhtZXRpYworICAgICAgICAg
ICBjb21wb3NpdGUgZmlsdGVyLiBPdGhlcndpc2Ugd2UgbmVlZCB0byBjb3JyZWN0IHRoZSBGaWx0
ZXJJbWFnZSBvZiBhbnkKKyAgICAgICAgICAgYXJpdGhtZXRpYyBjb21wb3NpdGUgZmlsdGVyIGlu
IHRoZSBGaWx0ZXJJbWFnZVZlY3Rvci4KKworICAgICAgICAtLSBObyBuZWVkIGZvciB0b3RhbE51
bWJlckZpbHRlckVmZmVjdHMoKS4gVGhpcyBjb3VudCBpcyB0aGUgc2l6ZSBvZiB0aGUKKyAgICAg
ICAgICAgU1ZHRmlsdGVyIGV4cHJlc3Npb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZUFwcGxpZXIubW06CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VHcmFwaGljQ29yZUltYWdlQXBwbGllcjo6YXBwbHkgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFRGlzcGxhY2VtZW50TWFwOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnRyYW5zZm9ybUlucHV0c0NvbG9yU3BhY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnRyYW5zZm9ybVJl
c3VsdENvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNvdXJjZUlt
YWdlUmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNldFNv
dXJjZUltYWdlUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNvdXJj
ZUltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0U291
cmNlSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dGFrZUlt
YWdlSW5wdXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y2FsY3Vs
YXRlSW1hZ2VSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJh
bnNmb3JtSW5wdXRzQ29sb3JTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmNvcnJlY3RQcmVtdWx0aXBsaWVkSW5wdXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjppbnB1dEVmZmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omlu
cHV0RmlsdGVySW1hZ2VzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29ycmVjdFByZW11bHRpcGxpZWRSZXN1bHRJZk5lZWRlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2Up
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckltYWdlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6bnVtYmVyT2ZFZmZlY3RJbnB1dHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpudW1iZXJPZkltYWdlSW5w
dXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cmVzdWx0SXNWYWxp
ZFByZW11bHRpcGxpZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpt
YXlQcm9kdWNlSW52YWxpZFByZW11bHRpcGxpZWRQaXhlbHMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1
bHRDb2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckZ1bmN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVySW1hZ2U6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJJbWFnZTo6RmlsdGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVySW1hZ2U6OmNvcnJlY3RQcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVySW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUFscGhhOjpjYWxjdWxhdGVJbWFnZVJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U291cmNlR3JhcGhpYzo6Y2FsY3VsYXRlSW1hZ2VSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0
d2FyZUFwcGxpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpY1NvZnR3YXJl
QXBwbGllcjo6YXBwbHkgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseSk6CisgICAgICAgICogcmVuZGVy
aW5nL0NTU0ZpbHRlci5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1h
Z2UuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjphcHBseSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpi
dWlsZEZpbHRlckVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6
YnVpbGRFeHByZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3RFZmZlY3Rz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cyk6
IERlbGV0ZWQuCisKIDIwMjEtMTItMDggIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+
CiAKICAgICAgICAgQWRkIGFuIGV4cGVyaW1lbnRhbCB0cmFja0NvbmZpZ3VyYXRpb24gYWNjZXNz
b3Igb24gQXVkaW9UcmFjayAmIFZpZGVvVHJhY2suCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNlR3JhcGhpY0NvcmVJbWFnZUFwcGxp
ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvU291cmNl
R3JhcGhpY0NvcmVJbWFnZUFwcGxpZXIubW0KaW5kZXggODkwOTA3MDExYmFkYmU4NzU0MzlhNmJm
Y2M0YzFhZDI0NWI3MWRlZi4uMTQ2YmRkOTJiM2JiNGFhM2E3ZjBmY2UyYWYyOTE2Njg5OGM4NzM2
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdl
L1NvdXJjZUdyYXBoaWNDb3JlSW1hZ2VBcHBsaWVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9Tb3VyY2VHcmFwaGljQ29yZUltYWdlQXBwbGllci5t
bQpAQCAtMjgsMTUgKzI4LDE2IEBACiAKICNpZiBVU0UoQ09SRV9JTUFHRSkKIAotI2ltcG9ydCAi
RmlsdGVyLmgiCiAjaW1wb3J0ICJGaWx0ZXJJbWFnZS5oIgogI2ltcG9ydCAiUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgU291cmNlR3JhcGhpY0Nv
cmVJbWFnZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYsIEZpbHRlckltYWdlJiByZXN1bHQpIGNvbnN0Citib29sIFNvdXJjZUdyYXBo
aWNDb3JlSW1hZ2VBcHBsaWVyOjphcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFn
ZVZlY3RvciYgaW5wdXRzLCBGaWx0ZXJJbWFnZSYgcmVzdWx0KSBjb25zdAogewotICAgIGF1dG8g
c291cmNlSW1hZ2UgPSBmaWx0ZXIuc291cmNlSW1hZ2UoKTsKKyAgICBhdXRvJiBpbnB1dCA9IGlu
cHV0c1swXS5nZXQoKTsKKworICAgIGF1dG8gc291cmNlSW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZl
cigpOwogICAgIGlmICghc291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5k
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaApp
bmRleCA5YTc3ZjIyMzU5MzI2ODMzZDkyMzBmOWRkNTg2MjNiNDRiMDAzZjFjLi42NDQ3MzAxZDY3
NTI3ZGY0ZGZkYTdlYWYyMzU0MmIxOTQyYWIzNmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaApAQCAtNDEsNiArNDEsOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEZFQmxlbmQoQmxlbmRNb2RlKTsKIAorICAgIHVuc2lnbmVk
IG51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMjsgfQorICAg
IAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVBcHBsaWVy
KGNvbnN0IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5
TkVPTih1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4
ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKaW5kZXgg
M2I5Yzg1NmIyN2I0MGFkZjVkMjJjYmEyZjJkNTYwY2RjYmRiN2JmMC4uYzMwOTZlZmZlM2MyNzlm
MjEyMWViMTI1ZWMwOWUwMDE2YjY1Y2U4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaApAQCAtNjMsOSArNjMsMTEg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUNvbXBvc2l0ZShjb25zdCBDb21wb3NpdGVPcGVy
YXRpb25UeXBlJiwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpOwogCisg
ICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biAyOyB9CisKICAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYs
IGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGJvb2wgbWF5UHJvZHVjZUludmFs
aWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV90eXBlID09
IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KKyAgICBib29sIHJlc3VsdElzVmFs
aWRQcmVtdWx0aXBsaWVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV90eXBlICE9IEZFQ09N
UE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUM7IH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0
ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IGI0ZWFkOGYwMzg5NWU1YTBh
YzE3ZDUxN2RlZTU5NDVlYmMzNWZiYWUuLjExN2M1MGFmODAyYjNiZjJjYzBiMTU2OTRmODkwMDcy
ZGUyMjk3MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC02OCw2ICs2OCwxMSBA
QCBib29sIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2FsZShmbG9hdCBzY2FsZSkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorRmxvYXRSZWN0IEZFRGlzcGxhY2VtZW50TWFwOjpjYWxjdWxhdGVJbWFn
ZVJlY3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29u
c3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIGZp
bHRlci5tYXhFZmZlY3RSZWN0KHByaW1pdGl2ZVN1YnJlZ2lvbik7Cit9CisKIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgRkVEaXNwbGFjZW1lbnRNYXA6OnJlc3VsdENvbG9yU3BhY2UoY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cykgY29uc3QKIHsKICAgICAvLyBTcGVjOiBUaGUg
J2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycgcHJvcGVydHkgb25seSBhcHBsaWVzIHRvIHRo
ZSAnaW4yJyBzb3VyY2UgaW1hZ2UKQEAgLTc3LDE2ICs4MiwxMSBAQCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIEZFRGlzcGxhY2VtZW50TWFwOjpyZXN1bHRDb2xvclNwYWNlKGNvbnN0IEZp
bHRlckltYQogICAgIHJldHVybiBpbnB1dHNbMF0tPmNvbG9yU3BhY2UoKTsKIH0KIAotdm9pZCBG
RURpc3BsYWNlbWVudE1hcDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3Qq
IGluLCBjb25zdCBpbnQgaW5kZXgpCit2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjp0cmFuc2Zvcm1J
bnB1dHNDb2xvclNwYWNlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0CiB7
CiAgICAgLy8gRG8gbm90IHRyYW5zZm9ybSB0aGUgZmlyc3QgcHJpbWl0aXZlIGlucHV0LCBhcyBw
ZXIgdGhlIHNwZWMuCi0gICAgaWYgKGluZGV4KQotICAgICAgICBpbi0+dHJhbnNmb3JtUmVzdWx0
Q29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwotfQotCi1GbG9hdFJlY3QgRkVEaXNw
bGFjZW1lbnRNYXA6OmNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImIGZpbHRlciwgY29u
c3QgRmlsdGVySW1hZ2VWZWN0b3ImLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lv
bikgY29uc3QKLXsKLSAgICByZXR1cm4gZmlsdGVyLm1heEVmZmVjdFJlY3QocHJpbWl0aXZlU3Vi
cmVnaW9uKTsKKyAgICBBU1NFUlQoaW5wdXRzLnNpemUoKSA9PSAyKTsKKyAgICBpbnB1dHNbMV0t
PnRyYW5zZm9ybVRvQ29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOwogfQogCiBzdGQ6
OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gRkVEaXNwbGFjZW1lbnRNYXA6OmNyZWF0
ZUFwcGxpZXIoY29uc3QgRmlsdGVyJikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAppbmRl
eCBhZDk1Y2UzZDdjY2FhZTNjZWJiMTUxNmFmOGIwZTJjNWZhYTg2MTAyLi42NTU1OGQ0MDNjYTBh
ZDA0ODU3ZjliODQ5ZDdmYTRmZjdiYWNmNzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCkBA
IC01NCwxMSArNTQsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRURpc3BsYWNlbWVudE1h
cChDaGFubmVsU2VsZWN0b3JUeXBlIHhDaGFubmVsU2VsZWN0b3IsIENoYW5uZWxTZWxlY3RvclR5
cGUgeUNoYW5uZWxTZWxlY3RvciwgZmxvYXQpOwogCi0gICAgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiByZXN1bHRDb2xvclNwYWNlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKEZpbHRlckVmZmVj
dCosIGNvbnN0IGludCkgb3ZlcnJpZGU7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1
dHMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAyOyB9CiAKICAgICBGbG9hdFJlY3QgY2FsY3Vs
YXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1
dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsK
IAorICAgIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgcmVzdWx0Q29sb3JTcGFjZShjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgdHJhbnNmb3Jt
SW5wdXRzQ29sb3JTcGFjZShjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzKSBjb25zdCBv
dmVycmlkZTsKKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVh
dGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgV1RGOjpUZXh0
U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIEZpbHRlclJl
cHJlc2VudGF0aW9uKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKaW5kZXggZWU2ZWM0YzY4ODk1MjJhZjdk
NDUxNjMyMTYzMTVkYzE0ZDMyNWViOS4uMjJmOWVjOTI1OTQ0YzZjMGVhZDgyOGIyNWJhZGIyZjcx
YzJmNjExMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUZsb29kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUZsb29kLmgKQEAgLTQ5LDYgKzQ5LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBG
RUZsb29kKGNvbnN0IENvbG9yJiBmbG9vZENvbG9yLCBmbG9hdCBmbG9vZE9wYWNpdHkpOwogCisg
ICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biAwOyB9CisKICAgICBGbG9hdFJlY3QgY2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYs
IGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMsIGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0
aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0
ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0IG92ZXJy
aWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1lcmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaAppbmRleCA3OTM4YjdjMTZlNDlmYzI0NWZkNjcyMTAwNjE2YmEzMWJiOWIyZGVkLi5h
MzM5ZmZmNzg2YTIxMTM3NzEzMjk3MTFmNmY3ODJhNzY3NTU3NThkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaApAQCAtMzAsNiAr
MzAsOCBAQCBjbGFzcyBGRU1lcmdlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6CiAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGRU1lcmdlPiBjcmVhdGUodW5zaWduZWQgbnVt
YmVyT2ZFZmZlY3RJbnB1dHMpOwogCisgICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX251bWJlck9mRWZmZWN0SW5wdXRzOyB9CisKICAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmVmPEZFTWVy
Z2U+PiBkZWNvZGUoRGVjb2RlciYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAppbmRleCA2ZmM0ZTJiN2ZkYzgz
Mjg3OTEyYzlhNDhjMzZiMWY4ODEyMjRiNzU3Li5hYWFlYjdjMjM3Y2NlYTkxZjUxMzEyNmM0Njg1
NWVkMjdhOTlkNDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKQEAgLTYzLDYgKzYzLDggQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBGRVR1cmJ1bGVuY2UoVHVyYnVsZW5jZVR5cGUsIGZsb2F0IGJhc2VGcmVx
dWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgaW50IG51bU9jdGF2ZXMsIGZsb2F0IHNlZWQs
IGJvb2wgc3RpdGNoVGlsZXMpOwogCisgICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9CisKICAgICBGbG9hdFJlY3QgY2FsY3VsYXRl
SW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMs
IGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdCBvdmVycmlkZTsKIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVBcHBsaWVyKGNv
bnN0IEZpbHRlciYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuY3BwCmluZGV4IGJlNGYyOWNjNTY5ZjZlNTU1
Yzc5OTNkYzViZThmYmU4Y2M3YWU0ZTkuLjgzNmUxM2M5NzVjZTA2YjRhMGQ0ZDViMDhmY2FlNDZh
NjE3YjI2YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlci5jcHAKQEAgLTgzLDEzICs4MywyMCBAQCBib29sIEZpbHRlcjo6Y2xhbXBG
aWx0ZXJSZWdpb25JZk5lZWRlZCgpCiAKIFJlZlB0cjxGaWx0ZXJJbWFnZT4gRmlsdGVyOjphcHBs
eShJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VS
ZWN0KQogewotICAgIHNldFNvdXJjZUltYWdlKHNvdXJjZUltYWdlKTsKLSAgICBzZXRTb3VyY2VJ
bWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KTsKKyAgICBSZWZQdHI8RmlsdGVySW1hZ2U+IGlucHV0
OwogCi0gICAgYXV0byByZXN1bHQgPSBhcHBseSgpOworICAgIGlmIChzb3VyY2VJbWFnZSkgewor
ICAgICAgICBhdXRvIGFic29sdXRlU291cmNlSW1hZ2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChz
Y2FsZWRCeUZpbHRlclNjYWxlKHNvdXJjZUltYWdlUmVjdCkpOworICAgICAgICBpbnB1dCA9IEZp
bHRlckltYWdlOjpjcmVhdGUobV9maWx0ZXJSZWdpb24sIHNvdXJjZUltYWdlUmVjdCwgYWJzb2x1
dGVTb3VyY2VJbWFnZVJlY3QsIFJlZiB7ICpzb3VyY2VJbWFnZSB9KTsKKyAgICAgICAgaWYgKCFp
bnB1dCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8gcmVz
dWx0ID0gYXBwbHkoaW5wdXQuZ2V0KCkpOwogICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1
cm4geyB9OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgIHJlc3VsdC0+Y29ycmVjdFBy
ZW11bHRpcGxpZWRQaXhlbEJ1ZmZlcigpOwogICAgIHJlc3VsdC0+dHJhbnNmb3JtVG9Db2xvclNw
YWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
LmgKaW5kZXggMjVjMTc2NGRlOTU0YjNjN2NiNzFjZWE0ODc2NjVmZDE4MzQ1Y2UzZS4uYjJiYTNl
ZjQ4ZDYwOTQyYTRiM2RkMTdiZDRlNzcwZDJiNDE0MmNlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC00NCwxNSArNDQsOSBA
QCBwdWJsaWM6CiAgICAgRmxvYXRTaXplIGZpbHRlclNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9m
aWx0ZXJTY2FsZTsgfQogICAgIHZvaWQgc2V0RmlsdGVyU2NhbGUoY29uc3QgRmxvYXRTaXplJiBm
aWx0ZXJTY2FsZSkgeyBtX2ZpbHRlclNjYWxlID0gZmlsdGVyU2NhbGU7IH0KIAotICAgIEZsb2F0
UmVjdCBzb3VyY2VJbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUltYWdlUmVjdDsg
fQotICAgIHZvaWQgc2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1h
Z2VSZWN0KSB7IG1fc291cmNlSW1hZ2VSZWN0ID0gc291cmNlSW1hZ2VSZWN0OyB9Ci0KICAgICBG
bG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0K
ICAgICB2b2lkIHNldEZpbHRlclJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbikg
eyBtX2ZpbHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsgfQogCi0gICAgSW1hZ2VCdWZmZXIqIHNv
dXJjZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJbWFnZS5nZXQoKTsgfQotICAgIHZv
aWQgc2V0U291cmNlSW1hZ2UoUmVmUHRyPEltYWdlQnVmZmVyPiYmIHNvdXJjZUltYWdlKSB7IG1f
c291cmNlSW1hZ2UgPSBXVEZNb3ZlKHNvdXJjZUltYWdlKTsgfQotCiAgICAgQ2xpcE9wZXJhdGlv
biBjbGlwT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwT3BlcmF0aW9uOyB9CiAgICAg
dm9pZCBzZXRDbGlwT3BlcmF0aW9uKENsaXBPcGVyYXRpb24gY2xpcE9wZXJhdGlvbikgeyBtX2Ns
aXBPcGVyYXRpb24gPSBjbGlwT3BlcmF0aW9uOyB9CiAKQEAgLTY4LDggKzYyLDggQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgUmVmUHRyPEZpbHRlckVmZmVjdD4gbGFzdEVmZmVjdCgpIGNvbnN0ID0g
MDsKIAogICAgIGJvb2wgY2xhbXBGaWx0ZXJSZWdpb25JZk5lZWRlZCgpOwotICAgIAotICAgIHZp
cnR1YWwgUmVmUHRyPEZpbHRlckltYWdlPiBhcHBseSgpID0gMDsKKworICAgIHZpcnR1YWwgUmVm
UHRyPEZpbHRlckltYWdlPiBhcHBseShGaWx0ZXJJbWFnZSogc291cmNlSW1hZ2UpID0gMDsKICAg
ICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8RmlsdGVySW1hZ2U+IGFwcGx5KEltYWdlQnVmZmVyKiBz
b3VyY2VJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpOwogCiBwcm90ZWN0
ZWQ6CkBAIC04MSwxMCArNzUsNiBAQCBwcml2YXRlOgogICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclNj
YWxlOwogICAgIENsaXBPcGVyYXRpb24gbV9jbGlwT3BlcmF0aW9uOwogICAgIEZsb2F0UmVjdCBt
X2ZpbHRlclJlZ2lvbjsKLQotICAgIC8vIEZJWE1FOiB0aGVzZSBzaG91bGQgbm90IGJlIG1lbWJl
cnMgb2YgRmlsdGVyLiBUaGV5IHNob3VsZCBiZSBwYXNzZWQgdG8gRmlsdGVyOjphcHBseSgpLgot
ICAgIEZsb2F0UmVjdCBtX3NvdXJjZUltYWdlUmVjdDsKLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+
IG1fc291cmNlSW1hZ2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAKaW5kZXggNDZjMDkwYjMwNzM3MzYyMWM0MTg3M2FlOThkMjg1MjE4ZTJjMzY3Ny4uYTkz
NDg1MWRlNGYwOTlkZWQ2YzM4NGUzYzM1NDZhMmIzNzYyMzNiMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cApAQCAtMzMsMTIgKzMzLDIwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmxvYXRSZWN0
IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBj
b25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2
ZVN1YnJlZ2lvbikgY29uc3QKK0ZpbHRlckltYWdlVmVjdG9yIEZpbHRlckVmZmVjdDo6dGFrZUlt
YWdlSW5wdXRzKEZpbHRlckltYWdlVmVjdG9yJiBzdGFjaykgY29uc3QKIHsKLSAgICBGbG9hdFJl
Y3QgaW1hZ2VSZWN0OwotICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1dHMpCi0gICAgICAgIGlt
YWdlUmVjdC51bml0ZShpbnB1dC0+aW1hZ2VSZWN0KCkpOwotICAgIHJldHVybiBmaWx0ZXIuY2xp
cFRvTWF4RWZmZWN0UmVjdChpbWFnZVJlY3QsIHByaW1pdGl2ZVN1YnJlZ2lvbik7CisgICAgdW5z
aWduZWQgaW5wdXRzU2l6ZSA9IG51bWJlck9mSW1hZ2VJbnB1dHMoKTsKKyAgICBBU1NFUlQoc3Rh
Y2suc2l6ZSgpID49IGlucHV0c1NpemUpOworICAgIGlmICghaW5wdXRzU2l6ZSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIFZlY3RvcjxSZWY8RmlsdGVySW1hZ2U+PiBpbnB1dHM7CisgICAg
aW5wdXRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW5wdXRzU2l6ZSk7CisKKyAgICBmb3IgKDsg
aW5wdXRzU2l6ZTsgLS1pbnB1dHNTaXplKQorICAgICAgICBpbnB1dHMudW5jaGVja2VkQXBwZW5k
KHN0YWNrLnRha2VMYXN0KCkpOworCisgICAgcmV0dXJuIGlucHV0czsKIH0KIAogRmxvYXRSZWN0
IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlciYg
ZmlsdGVyLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYgaW5wdXRzLCBjb25zdCBzdGQ6Om9wdGlv
bmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5PiYgZ2VvbWV0cnkpIGNvbnN0CkBAIC02OCw1MCArNzYs
NTkgQEAgRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6Y2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9u
KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdAogICAgIHJldHVybiBwcmltaXRpdmVTdWJyZWdp
b247CiB9CiAKLUZpbHRlckVmZmVjdCogRmlsdGVyRWZmZWN0OjppbnB1dEVmZmVjdCh1bnNpZ25l
ZCBudW1iZXIpIGNvbnN0CitGbG9hdFJlY3QgRmlsdGVyRWZmZWN0OjpjYWxjdWxhdGVJbWFnZVJl
Y3QoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMs
IGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uKSBjb25zdAogewotICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG51bWJlciA8IG1faW5wdXRFZmZlY3RzLnNpemUo
KSk7Ci0gICAgcmV0dXJuIG1faW5wdXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7CisgICAgRmxv
YXRSZWN0IGltYWdlUmVjdDsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogaW5wdXRzKQorICAgICAg
ICBpbWFnZVJlY3QudW5pdGUoaW5wdXQtPmltYWdlUmVjdCgpKTsKKyAgICByZXR1cm4gZmlsdGVy
LmNsaXBUb01heEVmZmVjdFJlY3QoaW1hZ2VSZWN0LCBwcmltaXRpdmVTdWJyZWdpb24pOwogfQog
Ci1ib29sIEZpbHRlckVmZmVjdDo6YXBwbHkoY29uc3QgRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+JiBnZW9tZXRyeSkKK3ZvaWQgRmlsdGVy
RWZmZWN0Ojp0cmFuc2Zvcm1JbnB1dHNDb2xvclNwYWNlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiBpbnB1dHMpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogaW5wdXRzKQorICAgICAgICBpbnB1dC0+dHJh
bnNmb3JtVG9Db2xvclNwYWNlKG9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Cit9CiAKLSAgICB1bnNp
Z25lZCBzaXplID0gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IG1faW5wdXRF
ZmZlY3RzLmF0KGkpLmdldCgpOwordm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcnJlY3RQcmVtdWx0aXBs
aWVkSW5wdXRzKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0Cit7CisgICAg
Ly8gQ29ycmVjdCBhbnkgaW52YWxpZCBwaXhlbHMsIGlmIG5lY2Vzc2FyeSwgaW4gdGhlIHJlc3Vs
dCBvZiBhIGZpbHRlciBvcGVyYXRpb24uCisgICAgLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBl
bnN1cmUgdmFsaWQgcGl4ZWwgdmFsdWVzIG9uIGZpbHRlciBpbnB1dHMgYW5kIHRoZSBmaW5hbCBy
ZXN1bHQuCisgICAgLy8gT25seSB0aGUgYXJpdGhtZXRpYyBjb21wb3NpdGUgZmlsdGVyIGV2ZXIg
bmVlZHMgdG8gcGVyZm9ybSBjb3JyZWN0aW9uLgorICAgIGZvciAoYXV0byYgaW5wdXQgOiBpbnB1
dHMpCisgICAgICAgIGlucHV0LT5jb3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCk7Cit9
CiAKLSAgICAgICAgLy8gQ29udmVydCBpbnB1dCByZXN1bHRzIHRvIHRoZSBjdXJyZW50IGVmZmVj
dCdzIGNvbG9yIHNwYWNlLgotICAgICAgICBBU1NFUlQoaW4tPmhhc1Jlc3VsdCgpKTsKLSAgICAg
ICAgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShpbiwgaSk7Ci0gICAgfQorUmVmUHRyPEZpbHRl
ckltYWdlPiBGaWx0ZXJFZmZlY3Q6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBGaWx0ZXJJ
bWFnZSYgaW5wdXQpCit7CisgICAgcmV0dXJuIGFwcGx5KGZpbHRlciwgRmlsdGVySW1hZ2VWZWN0
b3IgeyBSZWYgeyBpbnB1dCB9IH0pOworfQogCi0gICAgaWYgKCFtYXlQcm9kdWNlSW52YWxpZFBy
ZW11bHRpcGxpZWRQaXhlbHMoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGluIDogbV9pbnB1dEVm
ZmVjdHMpCi0gICAgICAgICAgICBpbi0+Y29ycmVjdFByZW11bHRpcGxpZWRSZXN1bHRJZk5lZWRl
ZCgpOwotICAgIH0KK1JlZlB0cjxGaWx0ZXJJbWFnZT4gRmlsdGVyRWZmZWN0OjphcHBseShjb25z
dCBGaWx0ZXImIGZpbHRlciwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3Qg
c3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4mIGdlb21ldHJ5KQoreworICAgIEFT
U0VSVChpbnB1dHMuc2l6ZSgpID09IG51bWJlck9mSW1hZ2VJbnB1dHMoKSk7CiAKLSAgICBhdXRv
IGlucHV0RmlsdGVySW1hZ2VzID0gdGhpcy0+aW5wdXRGaWx0ZXJJbWFnZXMoKTsKKyAgICBpZiAo
bV9maWx0ZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuIG1fZmlsdGVySW1hZ2U7CiAKLSAgICBhdXRv
IHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGNhbGN1bGF0ZVByaW1pdGl2ZVN1YnJlZ2lvbihmaWx0ZXIs
IGlucHV0RmlsdGVySW1hZ2VzLCBnZW9tZXRyeSk7Ci0gICAgYXV0byBpbWFnZVJlY3QgPSBjYWxj
dWxhdGVJbWFnZVJlY3QoZmlsdGVyLCBpbnB1dEZpbHRlckltYWdlcywgcHJpbWl0aXZlU3VicmVn
aW9uKTsKKyAgICBhdXRvIHByaW1pdGl2ZVN1YnJlZ2lvbiA9IGNhbGN1bGF0ZVByaW1pdGl2ZVN1
YnJlZ2lvbihmaWx0ZXIsIGlucHV0cywgZ2VvbWV0cnkpOworICAgIGF1dG8gaW1hZ2VSZWN0ID0g
Y2FsY3VsYXRlSW1hZ2VSZWN0KGZpbHRlciwgaW5wdXRzLCBwcmltaXRpdmVTdWJyZWdpb24pOwog
ICAgIGF1dG8gYWJzb2x1dGVJbWFnZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclNjYWxlKGltYWdlUmVjdCkpOwogCiAgICAgaWYgKGFic29sdXRlSW1hZ2VSZWN0
LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVJbWFn
ZVJlY3Quc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAKLSAgICBhdXRvIGlzQWxwaGFJbWFnZSA9IHJlc3VsdElzQWxwaGFJbWFnZShp
bnB1dEZpbHRlckltYWdlcyk7Ci0gICAgYXV0byBpbWFnZUNvbG9yU3BhY2UgPSByZXN1bHRDb2xv
clNwYWNlKGlucHV0RmlsdGVySW1hZ2VzKTsKLQotICAgIG1fZmlsdGVySW1hZ2UgPSBGaWx0ZXJJ
bWFnZTo6Y3JlYXRlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgaW1hZ2VSZWN0LCBhYnNvbHV0ZUltYWdl
UmVjdCwgaXNBbHBoYUltYWdlLCBmaWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBpbWFnZUNvbG9yU3Bh
Y2UpOwotICAgIGlmICghbV9maWx0ZXJJbWFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGF1dG8gaXNBbHBoYUltYWdlID0gcmVzdWx0SXNBbHBoYUltYWdlKGlucHV0cyk7CisgICAgYXV0
byBpc1ZhbGlkUHJlbXVsdGlwbGllZCA9IHJlc3VsdElzVmFsaWRQcmVtdWx0aXBsaWVkKCk7Cisg
ICAgYXV0byBpbWFnZUNvbG9yU3BhY2UgPSByZXN1bHRDb2xvclNwYWNlKGlucHV0cyk7CiAKICAg
ICBhdXRvIGFwcGxpZXIgPSBjcmVhdGVBcHBsaWVyKGZpbHRlcik7CiAgICAgaWYgKCFhcHBsaWVy
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
bV9maWx0ZXJJbWFnZSA9IEZpbHRlckltYWdlOjpjcmVhdGUocHJpbWl0aXZlU3VicmVnaW9uLCBp
bWFnZVJlY3QsIGFic29sdXRlSW1hZ2VSZWN0LCBpc0FscGhhSW1hZ2UsIGlzVmFsaWRQcmVtdWx0
aXBsaWVkLCBmaWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBpbWFnZUNvbG9yU3BhY2UpOworICAgIGlm
ICghbV9maWx0ZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBMT0dfV0lU
SF9TVFJFQU0oRmlsdGVycywgc3RyZWFtCiAgICAgICAgIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBm
aWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseSgpOiIKQEAgLTEyMCw3ICsxMzcs
MjAgQEAgYm9vbCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25z
dCBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEcKICAgICAgICAgPDwgIlxuICBtYXhFZmZlY3RS
ZWN0ICIgPDwgZmlsdGVyLm1heEVmZmVjdFJlY3QocHJpbWl0aXZlU3VicmVnaW9uKQogICAgICAg
ICA8PCAiXG4gIGZpbHRlciBzY2FsZSAiIDw8IGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAotICAg
IHJldHVybiBhcHBsaWVyLT5hcHBseShmaWx0ZXIsIGlucHV0RmlsdGVySW1hZ2VzLCAqbV9maWx0
ZXJJbWFnZSk7CisgICAgdHJhbnNmb3JtSW5wdXRzQ29sb3JTcGFjZShpbnB1dHMpOworICAgIGlm
IChpc1ZhbGlkUHJlbXVsdGlwbGllZCkKKyAgICAgICAgY29ycmVjdFByZW11bHRpcGxpZWRJbnB1
dHMoaW5wdXRzKTsKKworICAgIGlmICghYXBwbGllci0+YXBwbHkoZmlsdGVyLCBpbnB1dHMsICpt
X2ZpbHRlckltYWdlKSkKKyAgICAgICAgbV9maWx0ZXJJbWFnZSA9IG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gbV9maWx0ZXJJbWFnZTsKK30KKworRmlsdGVyRWZmZWN0KiBGaWx0ZXJFZmZlY3Q6Omlu
cHV0RWZmZWN0KHVuc2lnbmVkIG51bWJlcikgY29uc3QKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihudW1iZXIgPCBtX2lucHV0RWZmZWN0cy5zaXplKCkpOworICAgIHJl
dHVybiBtX2lucHV0RWZmZWN0cy5hdChudW1iZXIpLmdldCgpOwogfQogCiB2b2lkIEZpbHRlckVm
ZmVjdDo6Y2xlYXJSZXN1bHQoKQpAQCAtMTM3LDMwICsxNjcsNiBAQCB2b2lkIEZpbHRlckVmZmVj
dDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKICAgICAgICAgZWZmZWN0LT5jbGVhclJlc3VsdHNS
ZWN1cnNpdmUoKTsKIH0KIAotRmlsdGVySW1hZ2VWZWN0b3IgRmlsdGVyRWZmZWN0OjppbnB1dEZp
bHRlckltYWdlcygpIGNvbnN0Ci17Ci0gICAgRmlsdGVySW1hZ2VWZWN0b3IgZmlsdGVySW1hZ2Vz
OwotCi0gICAgZm9yIChhdXRvJiBpbnB1dEVmZmVjdCA6IG1faW5wdXRFZmZlY3RzKQotICAgICAg
ICBmaWx0ZXJJbWFnZXMuYXBwZW5kKCppbnB1dEVmZmVjdC0+ZmlsdGVySW1hZ2UoKSk7Ci0KLSAg
ICByZXR1cm4gZmlsdGVySW1hZ2VzOwotfQotCi12b2lkIEZpbHRlckVmZmVjdDo6Y29ycmVjdFBy
ZW11bHRpcGxpZWRSZXN1bHRJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFoYXNSZXN1bHQoKSB8fCAh
bWF5UHJvZHVjZUludmFsaWRQcmVtdWx0aXBsaWVkUGl4ZWxzKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBtX2ZpbHRlckltYWdlLT5jb3JyZWN0UHJlbXVsdGlwbGllZFBpeGVsQnVmZmVyKCk7Ci19
Ci0KLXZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgZGVzdGluYXRpb25Db2xvclNwYWNlKQotewotICAgIGlmICgh
aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2ZpbHRlckltYWdlLT50cmFuc2Zv
cm1Ub0NvbG9yU3BhY2UoZGVzdGluYXRpb25Db2xvclNwYWNlKTsKLX0KLQogVGV4dFN0cmVhbSYg
RmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mIHRzLCBGaWx0
ZXJSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikgY29uc3QKIHsKICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGR1bXAgdGhlIHN1YlJlZ2lvbnMgb2YgdGhlIGZpbHRlciBwcmltaXRpdmVzIGhl
cmUgbGF0ZXIuIFRoaXMgaXNuJ3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDY0OTdhMmQxZGZlNTA0NzE1
YTVmNDhjYTY4M2Y4YzE5ZjhmZmQwYTQuLjM2ZTAwNDY0YzE4ZDY3MWJmNWUwODI2YjAxNmNkN2Qw
Y2UyMjEwNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtNDAsMjAgKzQwLDIwIEBAIGNsYXNzIEZpbHRl
ckVmZmVjdEFwcGxpZXI7CiBjbGFzcyBGaWx0ZXJFZmZlY3RHZW9tZXRyeTsKIAogY2xhc3MgRmls
dGVyRWZmZWN0IDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKKyAgICB1c2luZyBGaWx0ZXJGdW5j
dGlvbjo6YXBwbHk7CisKIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyUmVzdWx0KCkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKICAgICBib29sIGhhc1Jlc3VsdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVySW1hZ2U7IH0KIAotICAgIEZpbHRlckltYWdlKiBmaWx0
ZXJJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVySW1hZ2UuZ2V0KCk7IH0KKyAgICBSZWZQ
dHI8RmlsdGVySW1hZ2U+IGZpbHRlckltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJJbWFn
ZTsgfQorICAgIEZpbHRlckltYWdlVmVjdG9yIHRha2VJbWFnZUlucHV0cyhGaWx0ZXJJbWFnZVZl
Y3RvciYgc3RhY2spIGNvbnN0OwogCiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBpbnB1dEVmZmVj
dHMoKSB7IHJldHVybiBtX2lucHV0RWZmZWN0czsgfQogICAgIEZpbHRlckVmZmVjdCogaW5wdXRF
ZmZlY3QodW5zaWduZWQpIGNvbnN0OwotICAgIHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRz
KCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHMuc2l6ZSgpOyB9Ci0KLSAgICB2b2lkIHRy
YW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CiAK
LSAgICBib29sIGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmlsdGVy
RWZmZWN0R2VvbWV0cnk+JiA9IHN0ZDo6bnVsbG9wdCkgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEZp
bHRlckltYWdlPiBhcHBseShjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYg
aW5wdXRzLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEZpbHRlckVmZmVjdEdlb21ldHJ5PiYgPSBzdGQ6
Om51bGxvcHQpOwogCiAgICAgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBvcGVyYXRpbmdD
b2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdDb2xvclNwYWNlOyB9CiAgICAg
dmlydHVhbCB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiBjb2xvclNwYWNlKSB7IG1fb3BlcmF0aW5nQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7
IH0KQEAgLTYzLDI5ICs2MywyOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdXNpbmcgRmls
dGVyRnVuY3Rpb246OkZpbHRlckZ1bmN0aW9uOwogCi0gICAgdmlydHVhbCBib29sIG1heVByb2R1
Y2VJbnZhbGlkUHJlbXVsdGlwbGllZFBpeGVscygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0K
LSAgICB2b2lkIGNvcnJlY3RQcmVtdWx0aXBsaWVkUmVzdWx0SWZOZWVkZWQoKTsKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QgeyByZXR1cm4gMTsgfQor
ICAgIHVuc2lnbmVkIG51bWJlck9mSW1hZ2VJbnB1dHMoKSBjb25zdCB7IHJldHVybiBmaWx0ZXJU
eXBlKCkgPT0gRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljID8gMSA6IG51bWJlck9m
RWZmZWN0SW5wdXRzKCk7IH0KIAotICAgIC8vIENvcnJlY3QgYW55IGludmFsaWQgcGl4ZWxzLCBp
ZiBuZWNlc3NhcnksIGluIHRoZSByZXN1bHQgb2YgYSBmaWx0ZXIgb3BlcmF0aW9uLgotICAgIC8v
IFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHZhbGlkIHBpeGVsIHZhbHVlcyBvbiBmaWx0
ZXIgaW5wdXRzIGFuZCB0aGUgZmluYWwgcmVzdWx0LgotICAgIC8vIE9ubHkgdGhlIGFyaXRobWV0
aWMgY29tcG9zaXRlIGZpbHRlciBldmVyIG5lZWRzIHRvIHBlcmZvcm0gY29ycmVjdGlvbi4KLSAg
ICB2aXJ0dWFsIHZvaWQgY29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgeyB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShGaWx0ZXJFZmZlY3QqIGluLCBj
b25zdCBpbnQpIHsgaW4tPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xv
clNwYWNlKTsgfQotCi0gICAgRmlsdGVySW1hZ2VWZWN0b3IgaW5wdXRGaWx0ZXJJbWFnZXMoKSBj
b25zdDsKLSAgICAKLSAgICBGbG9hdFJlY3QgY2FsY3VsYXRlUHJpbWl0aXZlU3VicmVnaW9uKGNv
bnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiwgY29uc3Qgc3RkOjpvcHRpb25h
bDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4mKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgY2FsY3VsYXRl
UHJpbWl0aXZlU3VicmVnaW9uKGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdlVmVjdG9y
JiBpbnB1dHMsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0cnk+JikgY29u
c3Q7CiAKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjYWxjdWxhdGVJbWFnZVJlY3QoY29uc3QgRmls
dGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywgY29uc3QgRmxvYXRSZWN0JiBw
cmltaXRpdmVTdWJyZWdpb24pIGNvbnN0OwogCiAgICAgLy8gU29saWQgYmxhY2sgaW1hZ2Ugd2l0
aCBkaWZmZXJlbnQgYWxwaGEgdmFsdWVzLgogICAgIHZpcnR1YWwgYm9vbCByZXN1bHRJc0FscGhh
SW1hZ2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
CisgICAgdmlydHVhbCBib29sIHJlc3VsdElzVmFsaWRQcmVtdWx0aXBsaWVkKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQorCiAgICAgdmlydHVhbCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
IHJlc3VsdENvbG9yU3BhY2UoY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImKSBjb25zdCB7IHJldHVy
biBtX29wZXJhdGluZ0NvbG9yU3BhY2U7IH0KIAorICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1J
bnB1dHNDb2xvclNwYWNlKGNvbnN0IEZpbHRlckltYWdlVmVjdG9yJiBpbnB1dHMpIGNvbnN0Owor
ICAgIAorICAgIHZvaWQgY29ycmVjdFByZW11bHRpcGxpZWRJbnB1dHMoY29uc3QgRmlsdGVySW1h
Z2VWZWN0b3ImIGlucHV0cykgY29uc3Q7CisKICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxG
aWx0ZXJFZmZlY3RBcHBsaWVyPiBjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0ID0g
MDsKIAorICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gYXBwbHkoY29uc3QgRmlsdGVyJiwgRmlsdGVy
SW1hZ2UmIGlucHV0KSBvdmVycmlkZTsKKwogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0
RWZmZWN0czsKIAogICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gbV9maWx0ZXJJbWFnZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVu
Y3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RnVuY3Rpb24uaAppbmRleCAwMmNlOWJjNDBkNTYzNzBjYTA4MWY0MDEwMmFhZDJjZDI4YjFkYWRh
Li4wOWI3ZTQxNGRkODc1YmQxYjU0YmRiZGMxNzEyYWUzNDJhMGY1YmIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5j
dGlvbi5oCkBAIC0yNiw2ICsyNiw4IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZpbHRl
ckVmZmVjdEdlb21ldHJ5LmgiCisjaW5jbHVkZSAiRmlsdGVySW1hZ2UuaCIKKyNpbmNsdWRlICJG
aWx0ZXJJbWFnZVZlY3Rvci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIklu
dFJlY3RFeHRlbnQuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtOTQsNyArOTYs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5n
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCi0gICAgdmlydHVhbCBib29sIGFw
cGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2VvbWV0
cnk+JiA9IHN0ZDo6bnVsbG9wdCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFJlZlB0
cjxGaWx0ZXJJbWFnZT4gYXBwbHkoY29uc3QgRmlsdGVyJiwgRmlsdGVySW1hZ2UmKSB7IHJldHVy
biBudWxscHRyOyB9CiAgICAgdmlydHVhbCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJl
dHVybiB7IH07IH0KICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZXN1bHQoKSB7IH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJJbWFn
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlcklt
YWdlLmNwcAppbmRleCA5NTg0ZmE2OWVlMGVkMmVkZTY1YWZmOWI5Zjk5MzViZDk1ZmI0ODMyLi4y
YTAwOGZlYjFjYzM0Mzg0NDQ3YjE4ZmYwM2ExMTlhMmYzOTliNDI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmNw
cApAQCAtMzgsMjIgKzM4LDM4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmUHRyPEZp
bHRlckltYWdlPiBGaWx0ZXJJbWFnZTo6Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZl
U3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgYWJz
b2x1dGVJbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKK1JlZlB0cjxG
aWx0ZXJJbWFnZT4gRmlsdGVySW1hZ2U6OmNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2
ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIGFi
c29sdXRlSW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgYm9vbCBpc1ZhbGlkUHJlbXVsdGlw
bGllZCwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmIGNvbG9yU3BhY2UpCiB7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcoYWJzb2x1dGVJbWFnZVJlY3Quc2l6ZSgpKSk7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBGaWx0ZXJJbWFnZShwcmltaXRpdmVTdWJyZWdpb24sIGltYWdlUmVjdCwgYWJzb2x1dGVJ
bWFnZVJlY3QsIGlzQWxwaGFJbWFnZSwgcmVuZGVyaW5nTW9kZSwgY29sb3JTcGFjZSkpOworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgRmlsdGVySW1hZ2UocHJpbWl0aXZlU3VicmVnaW9uLCBpbWFn
ZVJlY3QsIGFic29sdXRlSW1hZ2VSZWN0LCBpc0FscGhhSW1hZ2UsIGlzVmFsaWRQcmVtdWx0aXBs
aWVkLCByZW5kZXJpbmdNb2RlLCBjb2xvclNwYWNlKSk7CiB9CiAKLUZpbHRlckltYWdlOjpGaWx0
ZXJJbWFnZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRS
ZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIGFic29sdXRlSW1hZ2VSZWN0LCBib29sIGlz
QWxwaGFJbWFnZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UpCitSZWZQdHI8RmlsdGVySW1hZ2U+IEZpbHRlckltYWdl
OjpjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0
UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgUmVmPElt
YWdlQnVmZmVyPiYmIGltYWdlQnVmZmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZp
bHRlckltYWdlKHByaW1pdGl2ZVN1YnJlZ2lvbiwgaW1hZ2VSZWN0LCBhYnNvbHV0ZUltYWdlUmVj
dCwgV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKK30KKworRmlsdGVySW1hZ2U6OkZpbHRlckltYWdl
KGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGlt
YWdlUmVjdCwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUlt
YWdlLCBib29sIGlzVmFsaWRQcmVtdWx0aXBsaWVkLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSkKICAgICA6IG1fcHJp
bWl0aXZlU3VicmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbikKICAgICAsIG1faW1hZ2VSZWN0KGlt
YWdlUmVjdCkKICAgICAsIG1fYWJzb2x1dGVJbWFnZVJlY3QoYWJzb2x1dGVJbWFnZVJlY3QpCiAg
ICAgLCBtX2lzQWxwaGFJbWFnZShpc0FscGhhSW1hZ2UpCisgICAgLCBtX2lzVmFsaWRQcmVtdWx0
aXBsaWVkKGlzVmFsaWRQcmVtdWx0aXBsaWVkKQogICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRl
cmluZ01vZGUpCiAgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKIHsKIH0KIAorRmlsdGVy
SW1hZ2U6OkZpbHRlckltYWdlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBj
b25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJl
Y3QsIFJlZjxJbWFnZUJ1ZmZlcj4mJiBpbWFnZUJ1ZmZlcikKKyAgICA6IG1fcHJpbWl0aXZlU3Vi
cmVnaW9uKHByaW1pdGl2ZVN1YnJlZ2lvbikKKyAgICAsIG1faW1hZ2VSZWN0KGltYWdlUmVjdCkK
KyAgICAsIG1fYWJzb2x1dGVJbWFnZVJlY3QoYWJzb2x1dGVJbWFnZVJlY3QpCisgICAgLCBtX3Jl
bmRlcmluZ01vZGUoaW1hZ2VCdWZmZXItPnJlbmRlcmluZ01vZGUoKSkKKyAgICAsIG1fY29sb3JT
cGFjZShpbWFnZUJ1ZmZlci0+Y29sb3JTcGFjZSgpKQorICAgICwgbV9pbWFnZUJ1ZmZlcihXVEZN
b3ZlKGltYWdlQnVmZmVyKSkKK3sKK30KKwogRmxvYXRSZWN0IEZpbHRlckltYWdlOjptYXhFZmZl
Y3RSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyKSBjb25zdAogewogICAgIHJldHVybiBmaWx0ZXIu
bWF4RWZmZWN0UmVjdChtX3ByaW1pdGl2ZVN1YnJlZ2lvbik7CkBAIC0yODEsNyArMjk3LDcgQEAg
dm9pZCBGaWx0ZXJJbWFnZTo6Y29weVBpeGVsQnVmZmVyKFBpeGVsQnVmZmVyJiBkZXN0aW5hdGlv
blBpeGVsQnVmZmVyLCBjb25zdCBJbnQKIHZvaWQgRmlsdGVySW1hZ2U6OmNvcnJlY3RQcmVtdWx0
aXBsaWVkUGl4ZWxCdWZmZXIoKQogewogICAgIC8vIE11c3Qgb3BlcmF0ZSBvbiBwcmUtbXVsdGlw
bGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBoYXZlIGludmFsaWQgcGl4ZWxzLgot
ICAgIGlmICghbV9wcmVtdWx0aXBsaWVkUGl4ZWxCdWZmZXIpCisgICAgaWYgKCFtX3ByZW11bHRp
cGxpZWRQaXhlbEJ1ZmZlciB8fCBtX2lzVmFsaWRQcmVtdWx0aXBsaWVkKQogICAgICAgICByZXR1
cm47CiAKICAgICBVaW50OENsYW1wZWRBcnJheSYgaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGll
ZFBpeGVsQnVmZmVyLT5kYXRhKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckltYWdlLmgKaW5kZXggOTU2NzI0OGY5OTEyODc0MTA3
N2Q4MmE1ZDM1YWQ0YjY3NWQ2OWU2Yi4uZTllZmQ1ZmI4Y2RkNWY1OGNmZjc5NTRhZTVlOGYwYTg2
NmE3NDZjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVySW1hZ2UuaApAQCAtNDUsNyArNDUsOCBAQCBjbGFzcyBJbWFnZUJ1ZmZl
cjsKIAogY2xhc3MgRmlsdGVySW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJJbWFnZT4g
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8RmlsdGVySW1hZ2U+IGNyZWF0ZShjb25zdCBG
bG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiBpbWFnZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGFic29sdXRlSW1hZ2VSZWN0LCBib29sIGlzQWxwaGFJbWFnZSwgUmVu
ZGVyaW5nTW9kZSwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisgICAgc3RhdGljIFJl
ZlB0cjxGaWx0ZXJJbWFnZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVn
aW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdlUmVjdCwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJ
bWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdlLCBib29sIGlzVmFsaWRQcmVtdWx0aXBsaWVkLCBS
ZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKyAgICBzdGF0aWMg
UmVmUHRyPEZpbHRlckltYWdlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBwcmltaXRpdmVTdWJy
ZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25zdCBJbnRSZWN0JiBhYnNvbHV0
ZUltYWdlUmVjdCwgUmVmPEltYWdlQnVmZmVyPiYmKTsKIAogICAgIC8vIFRoZSByZXR1cm4gdmFs
dWVzIGFyZSBpbiBmaWx0ZXIgY29vcmRpbmF0ZXMuCiAgICAgRmxvYXRSZWN0IHByaW1pdGl2ZVN1
YnJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWl0aXZlU3VicmVnaW9uOyB9CkBAIC03Niw3
ICs3Nyw4IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIEZpbHRlckltYWdlKGNv
bnN0IEZsb2F0UmVjdCYgcHJpbWl0aXZlU3VicmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIGltYWdl
UmVjdCwgY29uc3QgSW50UmVjdCYgYWJzb2x1dGVJbWFnZVJlY3QsIGJvb2wgaXNBbHBoYUltYWdl
LCBSZW5kZXJpbmdNb2RlLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmKTsKKyAgICBGaWx0
ZXJJbWFnZShjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbiwgY29uc3QgRmxvYXRS
ZWN0JiBpbWFnZVJlY3QsIGNvbnN0IEludFJlY3QmIGFic29sdXRlSW1hZ2VSZWN0LCBib29sIGlz
QWxwaGFJbWFnZSwgYm9vbCBpc1ZhbGlkUHJlbXVsdGlwbGllZCwgUmVuZGVyaW5nTW9kZSwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJik7CisgICAgRmlsdGVySW1hZ2UoY29uc3QgRmxvYXRS
ZWN0JiBwcmltaXRpdmVTdWJyZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgaW1hZ2VSZWN0LCBjb25z
dCBJbnRSZWN0JiBhYnNvbHV0ZUltYWdlUmVjdCwgUmVmPEltYWdlQnVmZmVyPiYmKTsKIAogICAg
IHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBwaXhlbEJ1ZmZlclNsb3QoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbik7CiAKQEAgLTkzLDYgKzk1LDcgQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1f
YWJzb2x1dGVJbWFnZVJlY3Q7CiAKICAgICBib29sIG1faXNBbHBoYUltYWdlIHsgZmFsc2UgfTsK
KyAgICBib29sIG1faXNWYWxpZFByZW11bHRpcGxpZWQgeyB0cnVlIH07CiAgICAgUmVuZGVyaW5n
TW9kZSBtX3JlbmRlcmluZ01vZGU7CiAgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fY29sb3JT
cGFjZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmNwcAppbmRleCA4YTNmMWE1NmE4ZGQzNGUyZTBjOGFiNWMwYWFk
NjM0OTRiOGIyNDZhLi44MWZiZjcwZmM3MjlmYzgyOTQyMGZiYjUwNmIxYjczZTIzMzcxNDdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUFscGhhLmNwcApAQCAtNDgsMTEgKzQ4LDYgQEAgU291cmNlQWxwaGE6OlNvdXJjZUFs
cGhhKEZpbHRlckVmZmVjdCYgc291cmNlRWZmZWN0KQogICAgIGlucHV0RWZmZWN0cygpLmFwcGVu
ZCgmc291cmNlRWZmZWN0KTsKIH0KIAotRmxvYXRSZWN0IFNvdXJjZUFscGhhOjpjYWxjdWxhdGVJ
bWFnZVJlY3QoY29uc3QgRmlsdGVyJiwgY29uc3QgRmlsdGVySW1hZ2VWZWN0b3ImIGlucHV0cywg
Y29uc3QgRmxvYXRSZWN0JikgY29uc3QKLXsKLSAgICByZXR1cm4gaW5wdXRzWzBdLT5pbWFnZVJl
Y3QoKTsKLX0KLQogc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdEFwcGxpZXI+IFNvdXJjZUFs
cGhhOjpjcmVhdGVBcHBsaWVyKGNvbnN0IEZpbHRlciYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEZp
bHRlckVmZmVjdEFwcGxpZXI6OmNyZWF0ZTxTb3VyY2VBbHBoYVNvZnR3YXJlQXBwbGllcj4oKnRo
aXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VBbHBoYS5oCmluZGV4IDhkMjE0MGNkYjE4MDQ2MzU0ZTg5YmEwNjIxMmU4Mzg2NTg4
NGMwYzAuLjdiN2Q3N2Y0ZmQ3OTJhOTMxOGRjYjQ2ZjkyODQwNjJmYjE0OWMyNGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmgKQEAgLTM1LDggKzM1LDYgQEAgcHJpdmF0ZToKICAgICBTb3VyY2VBbHBoYSgpOwogICAg
IGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYpOwogCi0gICAgRmxvYXRSZWN0IGNh
bGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3RvciYg
aW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3ZlcnJp
ZGU7Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGllcj4gY3JlYXRlQXBw
bGllcihjb25zdCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVh
bSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNl
bnRhdGlvbikgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAppbmRleCA2NWU4NGJj
NzcwZmRlMjFiMDRiOGMxZjI1ZTdhNDU0ZjQ5ZDU2Njc1Li5jMDg4Y2Y3YzhiNjNiMGNjNzgyYzgw
NzlhMGQyNTY2ZTMzMDIyNDljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKQEAgLTQxLDExICs0MSw2
IEBAIFNvdXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMoKQogewogfQogCi1GbG9hdFJlY3QgU291
cmNlR3JhcGhpYzo6Y2FsY3VsYXRlSW1hZ2VSZWN0KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25z
dCBGaWx0ZXJJbWFnZVZlY3RvciYsIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGZpbHRlci5zb3VyY2VJbWFnZVJlY3QoKTsKLX0KLQogc3RkOjp1bmlxdWVfcHRyPEZpbHRl
ckVmZmVjdEFwcGxpZXI+IFNvdXJjZUdyYXBoaWM6OmNyZWF0ZUFwcGxpZXIoY29uc3QgRmlsdGVy
JiBmaWx0ZXIpIGNvbnN0CiB7CiAjaWYgVVNFKENPUkVfSU1BR0UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCmlu
ZGV4IGVlOTJlOTM2MzM1N2UwY2FmMjBjM2I0ZDRiZjk1OTI4ZWMwMGY4YWMuLjJjZTQ1ZDhlYTM4
ODc2ODI5NTg1YjFlMTgxN2NhNjRmYzAwMjkwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCkBAIC0zOCw3
ICszOCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzdXBwb3J0c0NvcmVJbWFnZVJlbmRlcmluZygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgogCi0gICAgRmxvYXRSZWN0
IGNhbGN1bGF0ZUltYWdlUmVjdChjb25zdCBGaWx0ZXImLCBjb25zdCBGaWx0ZXJJbWFnZVZlY3Rv
ciYgaW5wdXRzLCBjb25zdCBGbG9hdFJlY3QmIHByaW1pdGl2ZVN1YnJlZ2lvbikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiAwOyB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsdGVyRWZmZWN0QXBwbGll
cj4gY3JlYXRlQXBwbGllcihjb25zdCBGaWx0ZXImKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9T
b3VyY2VHcmFwaGljU29mdHdhcmVBcHBsaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvc29mdHdhcmUvU291cmNlR3JhcGhpY1NvZnR3YXJlQXBwbGllci5j
cHAKaW5kZXggOGIyYTU5YjJmNDJkYzc4MjkzMmJlNTkyNWVjYWFlMWE1NzFjOTFmMi4uODBjNGJm
NTYyOWYxNGFlM2Q2MWI1NjQ3MWRjM2UzZWJiOWQ4ZDlmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9zb2Z0d2FyZS9Tb3VyY2VHcmFwaGljU29m
dHdhcmVBcHBsaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL3NvZnR3YXJlL1NvdXJjZUdyYXBoaWNTb2Z0d2FyZUFwcGxpZXIuY3BwCkBAIC0yMSwx
NyArMjEsMTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGlj
U29mdHdhcmVBcHBsaWVyLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlNvdXJj
ZUdyYXBoaWMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIFNvdXJjZUdyYXBoaWNT
b2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYgZmlsdGVyLCBjb25zdCBGaWx0ZXJJ
bWFnZVZlY3RvciYsIEZpbHRlckltYWdlJiByZXN1bHQpIGNvbnN0Citib29sIFNvdXJjZUdyYXBo
aWNTb2Z0d2FyZUFwcGxpZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IEZpbHRlckltYWdl
VmVjdG9yJiBpbnB1dHMsIEZpbHRlckltYWdlJiByZXN1bHQpIGNvbnN0CiB7CisgICAgYXV0byYg
aW5wdXQgPSBpbnB1dHNbMF0uZ2V0KCk7CisKICAgICBhdXRvIHJlc3VsdEltYWdlID0gcmVzdWx0
LmltYWdlQnVmZmVyKCk7Ci0gICAgYXV0byBzb3VyY2VJbWFnZSA9IGZpbHRlci5zb3VyY2VJbWFn
ZSgpOworICAgIGF1dG8gc291cmNlSW1hZ2UgPSBpbnB1dC5pbWFnZUJ1ZmZlcigpOwogICAgIGlm
ICghcmVzdWx0SW1hZ2UgfHwgIXNvdXJjZUltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKaW5kZXggMGExMGUzYmZjZjdkN2Vm
YzcyNTM0NjYyOGNmMGQyYWZmZTc2YTY3OC4uM2VmMjdjZGJhNjIzODkwZWE3OGQxNzRjOWZmY2I3
YjQwMjU0OTk4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTM2
OCwxNSArMzY4LDIwIEBAIHZvaWQgQ1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMo
KQogICAgICAgICBmdW5jdGlvbi0+Y2xlYXJSZXN1bHQoKTsKIH0KIAotUmVmUHRyPEZpbHRlcklt
YWdlPiBDU1NGaWx0ZXI6OmFwcGx5KCkKK1JlZlB0cjxGaWx0ZXJJbWFnZT4gQ1NTRmlsdGVyOjph
cHBseShGaWx0ZXJJbWFnZSogc291cmNlSW1hZ2UpCiB7CisgICAgaWYgKCFzb3VyY2VJbWFnZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgUmVmUHRyPEZpbHRlckltYWdlPiBy
ZXN1bHQgPSBzb3VyY2VJbWFnZTsKKwogICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0
aW9ucykgewotICAgICAgICBpZiAoZnVuY3Rpb24tPmlzU1ZHRmlsdGVyKCkpCi0gICAgICAgICAg
ICBkb3duY2FzdDxTVkdGaWx0ZXI+KGZ1bmN0aW9uLnB0cigpKS0+c2V0U291cmNlSW1hZ2VSZWN0
KHNvdXJjZUltYWdlUmVjdCgpKTsKLSAgICAgICAgaWYgKCFmdW5jdGlvbi0+YXBwbHkoKnRoaXMp
KQorICAgICAgICByZXN1bHQgPSBmdW5jdGlvbi0+YXBwbHkoKnRoaXMsICpyZXN1bHQpOworICAg
ICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAg
ICByZXR1cm4gbGFzdEVmZmVjdCgpLT5maWx0ZXJJbWFnZSgpOworCisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogdm9pZCBDU1NGaWx0ZXI6OnNldEZpbHRlclJlZ2lvbihjb25zdCBGbG9hdFJlY3Qm
IGZpbHRlclJlZ2lvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NG
aWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaAppbmRleCBkYmY3
NjZmYzZiNTlkZTYxYzYwZDlmNTI4MzRkMjQ1NmY5Y2U3YWNhLi45Y2QxZTQyYTZiMDlmOTFiZTQ5
OWZkNmQ4Zjk2MTUyODM0ZTRlMDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQ1NTRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5o
CkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25z
dCBmaW5hbDsKIAogICAgIHZvaWQgY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7Ci0gICAgUmVm
UHRyPEZpbHRlckltYWdlPiBhcHBseSgpIGZpbmFsOworICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4g
YXBwbHkoRmlsdGVySW1hZ2UqIHNvdXJjZUltYWdlKSBmaW5hbDsKIAogcHJpdmF0ZToKICAgICBD
U1NGaWx0ZXIoUmVuZGVyaW5nTW9kZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgQ2xp
cE9wZXJhdGlvbiwgYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVy
VGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCmluZGV4IGE5NGYwMWZjMDlk
ODI1Nzk0YzU4MjkyYzIzNGE3Yjk1NmU5NmE2NDQuLmM5YzUyZWUwZDJjZGI1NzI4MWI1NmFkMGU2
MTlhYWYzNDEzZGQ5OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmgKQEAgLTQ3LDYgKzQ3LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBGRUltYWdlKFNvdXJjZUltYWdlJiYsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0
LCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmKTsKIAorICAgIHVuc2lnbmVkIG51
bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQorCiAgICAg
Ly8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKCkKICAgICB2b2lkIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJikgb3ZlcnJpZGUgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCmluZGV4IGFiZjcxY2ZlMTkwZDc0ZDQ0YmUxNWVk
ZTg4ZjEwNjA0MTBlM2U4MGIuLmMyZDgwNzE5M2VmZjM5MGRhZDc0NGYzMThmMjRiYjEwYTQ5NDM4
OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyLmNwcApAQCAtMTE3LDIwICsxMTcsNTEgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmls
dGVyOjpsYXN0RWZmZWN0KCkgY29uc3QKICAgICByZXR1cm4gbV9leHByZXNzaW9uLmxhc3QoKS5l
ZmZlY3QucHRyKCk7CiB9CiAKLWJvb2wgU1ZHRmlsdGVyOjphcHBseShjb25zdCBGaWx0ZXImIGZp
bHRlciwgY29uc3Qgc3RkOjpvcHRpb25hbDxGaWx0ZXJFZmZlY3RHZW9tZXRyeT4mKQorUmVmUHRy
PEZpbHRlckltYWdlPiBTVkdGaWx0ZXI6OmFwcGx5KGNvbnN0IEZpbHRlciYsIEZpbHRlckltYWdl
JiBzb3VyY2VJbWFnZSkKIHsKLSAgICBzZXRTb3VyY2VJbWFnZSh7IGZpbHRlci5zb3VyY2VJbWFn
ZSgpIH0pOwotICAgIHJldHVybiBhcHBseSgpOworICAgIHJldHVybiBhcHBseSgmc291cmNlSW1h
Z2UpOwogfQogCi1SZWZQdHI8RmlsdGVySW1hZ2U+IFNWR0ZpbHRlcjo6YXBwbHkoKQorUmVmUHRy
PEZpbHRlckltYWdlPiBTVkdGaWx0ZXI6OmFwcGx5KEZpbHRlckltYWdlKiBzb3VyY2VJbWFnZSkK
IHsKICAgICBBU1NFUlQoIW1fZXhwcmVzc2lvbi5pc0VtcHR5KCkpOworCisgICAgRmlsdGVySW1h
Z2VWZWN0b3Igc3RhY2s7CisKICAgICBmb3IgKGF1dG8mIHRlcm0gOiBtX2V4cHJlc3Npb24pIHsK
LSAgICAgICAgaWYgKCF0ZXJtLmVmZmVjdC0+YXBwbHkoKnRoaXMsIHRlcm0uZ2VvbWV0cnkpKQor
ICAgICAgICBhdXRvJiBlZmZlY3QgPSB0ZXJtLmVmZmVjdDsKKyAgICAgICAgYXV0byBnZW9tZXRy
eSA9IHRlcm0uZ2VvbWV0cnk7CisKKyAgICAgICAgaWYgKGVmZmVjdC0+ZmlsdGVyVHlwZSgpID09
IEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhpYykgeworICAgICAgICAgICAgaWYgKGF1
dG8gcmVzdWx0ID0gZWZmZWN0LT5maWx0ZXJJbWFnZSgpKSB7CisgICAgICAgICAgICAgICAgc3Rh
Y2suYXBwZW5kKHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFzb3VyY2VJbWFnZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAgICAgLy8gQWRkIHNvdXJj
ZUltYWdlIGFzIGFuIGlucHV0IHRvIHRoZSBTb3VyY2VHcmFwaGljLgorICAgICAgICAgICAgc3Rh
Y2suYXBwZW5kKFJlZiB7ICpzb3VyY2VJbWFnZSB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IE5lZWQgdG8gcmVtb3ZlIHRoZSBpbnB1dHMgaGVyZSBpbiBjYXNlIHRoZSBlZmZlY3QgYWxyZWFk
eSBoYXMgYSByZXN1bHQuCisgICAgICAgIGF1dG8gaW5wdXRzID0gZWZmZWN0LT50YWtlSW1hZ2VJ
bnB1dHMoc3RhY2spOworCisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IGVmZmVjdC0+ZmlsdGVy
SW1hZ2UoKSkgeworICAgICAgICAgICAgc3RhY2suYXBwZW5kKHJlc3VsdC5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBy
ZXN1bHQgPSB0ZXJtLmVmZmVjdC0+YXBwbHkoKnRoaXMsIGlucHV0cywgZ2VvbWV0cnkpOworICAg
ICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAg
IHN0YWNrLmFwcGVuZChyZXN1bHQucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgfQotICAgIHJldHVy
biBsYXN0RWZmZWN0KCktPmZpbHRlckltYWdlKCk7CisgICAgCisgICAgQVNTRVJUKHN0YWNrLnNp
emUoKSA9PSAxKTsKKyAgICByZXR1cm4gc3RhY2sudGFrZUxhc3QoKTsKIH0KIAogSW50T3V0c2V0
cyBTVkdGaWx0ZXI6Om91dHNldHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAppbmRleCBjZGIwOTg4ZTRhYzgxNmFiMWUxNTQ1YTMz
ZmE3NDkzMDUxNmMzNDE2Li5kZWZmMWEzOGY3N2U1YzNmMzFmM2NjNjFkZTMxYmI4YzE5MzYxNDQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIu
aApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gbGFzdEVmZmVjdCgpIGNvbnN0IGZpbmFsOwogCi0gICAgUmVmUHRyPEZpbHRlckltYWdlPiBh
cHBseSgpIGZpbmFsOworICAgIFJlZlB0cjxGaWx0ZXJJbWFnZT4gYXBwbHkoRmlsdGVySW1hZ2Uq
IHNvdXJjZUltYWdlKSBmaW5hbDsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBGaWx0ZXJSZXByZXNlbnRhdGlvbikgY29uc3Qg
ZmluYWw7CiAKQEAgLTYzLDcgKzYzLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIEZsb2F0U2l6
ZSByZXNvbHZlZFNpemUoY29uc3QgRmxvYXRTaXplJikgY29uc3QgZmluYWw7CiAKLSAgICBib29s
IGFwcGx5KGNvbnN0IEZpbHRlciYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmlsdGVyRWZmZWN0R2Vv
bWV0cnk+JiA9IHN0ZDo6bnVsbG9wdCkgZmluYWw7CisgICAgUmVmUHRyPEZpbHRlckltYWdlPiBh
cHBseShjb25zdCBGaWx0ZXImLCBGaWx0ZXJJbWFnZSYgc291cmNlSW1hZ2UpIGZpbmFsOwogICAg
IEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgY2xlYXJSZXN1bHQo
KSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAppbmRleCBlN2MwMWFlMDI1YTg5YTVmMTQwZDZkNDUz
N2Q2N2VhZjQ2ZWU1NjY5Li44OWIwNTZkMWQ4YzA4YjI5YzkwMTYwY2M1ZGMzOTJjZDVjNGFhMzBm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXJCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmNwcApAQCAtMzQsNiArMzQsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4VG90YWxOdW1iZXJGaWx0ZXJFZmZl
Y3RzID0gMTAwOworc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhDb3VudENoaWxkTm9kZXMg
PSAyMDA7CisKIHZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6c2V0dXBCdWlsdGluRWZmZWN0cyhSZWY8
RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKQogewogICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRk
KFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSwgc291cmNlR3JhcGhpYy5wdHIoKSk7CkBAIC03
NiwyOCArNzksOCBAQCBzdGF0aWMgQ29sb3JJbnRlcnBvbGF0aW9uIGNvbG9ySW50ZXJwb2xhdGlv
bkZvckVsZW1lbnQoU1ZHRWxlbWVudCYgZWxlbWVudCkKIH0KICNlbmRpZgogCi1zdGF0aWMgdW5z
aWduZWQgY29sbGVjdEVmZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0KiBlZmZlY3QsIEhhc2hTZXQ8
Y29uc3QgRmlsdGVyRWZmZWN0Kj4mIGFsbEVmZmVjdHMpCi17Ci0gICAgYWxsRWZmZWN0cy5hZGQo
ZWZmZWN0KTsKLSAgICB1bnNpZ25lZCBzaXplID0gZWZmZWN0LT5udW1iZXJPZkVmZmVjdElucHV0
cygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGVmZmVjdC0+aW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGNvbGxl
Y3RFZmZlY3RzKGluLCBhbGxFZmZlY3RzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFsbEVmZmVjdHMu
c2l6ZSgpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgdG90YWxOdW1iZXJGaWx0ZXJFZmZlY3RzKGNv
bnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKLXsKLSAgICBIYXNoU2V0PGNvbnN0IEZpbHRl
ckVmZmVjdCo+IGFsbEVmZmVjdHM7Ci0gICAgcmV0dXJuIGNvbGxlY3RFZmZlY3RzKCZsYXN0RWZm
ZWN0LCBhbGxFZmZlY3RzKTsKLX0KLQogUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVp
bGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQp
CiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhDb3VudENoaWxkTm9kZXMgPSAy
MDA7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhUb3RhbE51bWJlckZpbHRlckVm
ZmVjdHMgPSAxMDA7Ci0KICAgICBpZiAoZmlsdGVyRWxlbWVudC5jb3VudENoaWxkTm9kZXMoKSA+
IG1heENvdW50Q2hpbGROb2RlcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTEyNCwx
MCArMTA3LDggQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRG
aWx0ZXJFZmZlY3RzKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHQKICAgICAgICAgYWRkKGVmZmVjdEVs
ZW1lbnQucmVzdWx0KCksIGVmZmVjdCk7CiAgICAgfQogCi0gICAgaWYgKCFlZmZlY3QgfHwgdG90
YWxOdW1iZXJGaWx0ZXJFZmZlY3RzKCplZmZlY3QpID4gbWF4VG90YWxOdW1iZXJGaWx0ZXJFZmZl
Y3RzKSB7CisgICAgaWYgKCFlZmZlY3QpCiAgICAgICAgIGNsZWFyRWZmZWN0cygpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9CiAKICAgICByZXR1cm4gZWZmZWN0OwogfQpAQCAtMjQw
LDYgKzIyMSw5IEBAIGJvb2wgU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRFeHByZXNzaW9uKFNWR0Zp
bHRlckV4cHJlc3Npb24mIGV4cHJlc3Npb24pIGNvbnN0CiAgICAgaWYgKCFidWlsZEVmZmVjdEV4
cHJlc3Npb24obV9sYXN0RWZmZWN0LCBzdGFjaywgMCwgZXhwcmVzc2lvbikpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAorICAgIGlmIChleHByZXNzaW9uLnNpemUoKSA+IG1heFRvdGFsTnVtYmVy
RmlsdGVyRWZmZWN0cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgZXhwcmVzc2lvbi5y
ZXZlcnNlKCk7CiAgICAgZXhwcmVzc2lvbi5zaHJpbmtUb0ZpdCgpOwogICAgIHJldHVybiB0cnVl
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>