<?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>73546</bug_id>
          
          <creation_ts>2011-12-01 03:44:20 -0800</creation_ts>
          <short_desc>Add support for text auto-sizing.</short_desc>
          <delta_ts>2016-09-19 10:58:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>121111</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>56543</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Alexander Færøy">ahf</reporter>
          <assigned_to name="Alexander Færøy">ahf</assigned_to>
          <cc>abarth</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dev+webkit</cc>
    
    <cc>dino</cc>
    
    <cc>efidler</cc>
    
    <cc>hausmann</cc>
    
    <cc>himanshuispresent</cc>
    
    <cc>johnme</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>kpiascik</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>ljaehun.lim</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>syoichi</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>512668</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Færøy">ahf</who>
    <bug_when>2011-12-01 03:44:20 -0800</bug_when>
    <thetext>Add support for text auto-sizing as specified here:

http://developer.apple.com/library/safari/#documentation/appleapplications/reference/safariwebcontent/AdjustingtheTextSize/AdjustingtheTextSize.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512677</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-12-01 04:11:49 -0800</bug_when>
    <thetext>You could provide links to the Microsoft and the Fennec implementation, test suites etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512719</commentid>
    <comment_count>2</comment_count>
      <attachid>117405</attachid>
    <who name="Alexander Færøy">ahf</who>
    <bug_when>2011-12-01 06:11:49 -0800</bug_when>
    <thetext>Created attachment 117405
Initial patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512724</commentid>
    <comment_count>3</comment_count>
      <attachid>117405</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-12-01 06:33:22 -0800</bug_when>
    <thetext>Comment on attachment 117405
Initial patch.

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

Please run prepare-Changelog and start to explain the changes and give some credit, like mention that the original code is from iOS but modified by at least me and you. Also, info about both MS and fennec supporting it would be great to add.

&gt; Source/WebCore/css/CSSComputedStyleDeclaration.cpp:1737
&gt; -            if (style-&gt;textSizeAdjust())
&gt; +            if (style-&gt;textSizeAdjust().isAuto())
&gt;                  return primitiveValueCache-&gt;createIdentifierValue(CSSValueAuto);
&gt; -            return primitiveValueCache-&gt;createIdentifierValue(CSSValueNone);
&gt; +            if (style-&gt;textSizeAdjust().isNone())
&gt; +                return primitiveValueCache-&gt;createIdentifierValue(CSSValueNone);
&gt; +
&gt; +            return CSSPrimitiveValue::create(style-&gt;textSizeAdjust().percentage(), CSSPrimitiveValue::CSS_PERCENTAGE);

You need to run the test suite before a change like then and after. Maybe it would be possible to split up parts of the patch.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:3491
&gt; +#if 0
&gt;          setTextSizeAdjust(primitiveValue-&gt;getIdent() == CSSValueAuto);
&gt; +#endif

Why is this outcommented?

&gt; Source/WebCore/dom/Document.cpp:4679
&gt; +    // FIXME: Build, was these removed?
&gt; +    // if (currentStyle-&gt;affectedByAttributeSelectors())
&gt; +    //    newStyle-&gt;setAffectedByAttributeSelectors();

I would talk to Andreas Kling and Antti Koivisto. You could cc them. Also cc Laszlo as he has tests for the feature added by this patch

&gt; Source/WebCore/dom/Document.cpp:4801
&gt; +    // If we only have one piece of text with the style on the page, do not adjust its size.
&gt; +    if (m_autoSizedNodes.size() &lt;= 1)
&gt; +        return;

This needs a test

&gt; Source/WebCore/dom/Document.cpp:4955
&gt; +        RefPtr&lt;TextAutoSizingValue&gt; value = i-&gt;second;
&gt; +        if (value)
&gt; +            value-&gt;reset();

I guess these could be merged to two lines

&gt; Source/WebCore/dom/Document.h:1191
&gt; +    void addAutoSizingNode(Node *node, float size);

coding style. Should be (Node*, float size)

&gt; Source/WebCore/page/FrameView.cpp:1105
&gt; +    // FIXME: Create setting instead, like setMinimumZoomedToElementFontSize().
&gt; +    float minimumZoomedToElementFontSize = 16;
&gt; +    float visibleWidth = 320; // FIXME: Verify whether this is correct.
&gt; +    if (minimumZoomedToElementFontSize &amp;&amp; visibleWidth &amp;&amp; !root-&gt;view()-&gt;printing()) {
&gt; +        root-&gt;adjustComputedFontSizesOnBlocks(minimumZoomedToElementFontSize, visibleWidth);
&gt; +        if (root-&gt;needsLayout())
&gt; +            root-&gt;layout();
&gt; +    }

This is not upstreamable... It needs to be fixed. Also indentation is off

&gt; Source/WebCore/rendering/RenderBlock.cpp:6871
&gt; +    // We disallow resizing for text input fields and textarea to address &lt;rdar://problem/5792987&gt; and &lt;rdar://problem/8021123&gt;

Test needed, though we need to deduct the issue here. This could/should be a separate patch.

&gt; Source/WebCore/rendering/RenderBlock.cpp:6924
&gt; +    // Don&apos;t do any work if the block is smaller than the visible area.
&gt; +    if (visibleWidth &gt;= width())
&gt; +        return;

This would also need a test

&gt; Source/WebCore/rendering/RenderBlock.cpp:6932
&gt; +            lineCount = NO_LINE;

I don&apos;t like the variable name here, as it is not exactly a count, it is more like a type. Suggestions?

&gt; Source/WebCore/rendering/RenderBlock.h:65
&gt; +enum LineCount {
&gt; +    NOT_SET = 0,
&gt; +    NO_LINE = 1,
&gt; +    ONE_LINE = 2,
&gt; +    MULTI_LINE = 3
&gt; +};

We probably want to change this. Also it doesn&apos;t seem to be aligned with our style

&gt; Source/WebCore/rendering/RenderBlock.h:305
&gt; +        m_lineCountForTextAutosizing = NOT_SET;

m_lineCountForTextAutosizing should probably also be renamed

&gt; Source/WebCore/rendering/RenderObject.cpp:600
&gt; +    // We don&apos;t apply autosizing to nodes with fixed height normally.
&gt; +    // But we apply it to nodes which are located deep enough
&gt; +    // (nesting depth is greater than some const) inside of a parent block
&gt; +    // which has fixed height but its content overflows intentionally.

Needs a test. Could be removed from initial patch. Maybe you could split this patch up in multiple patches

&gt; Source/WebCore/rendering/RenderObject.h:197
&gt; +    // Minimal distance between the block with fixed height and overflowing content and the text block to apply text autosizing.
&gt; +    // The greater this constant is the more potential places we have where autosizing is turned off.
&gt; +    // So it should be as low as possible. There are sites that break at 2.
&gt; +    static const int TextAutoSizingFixedHeightDepth = 3;
&gt; +
&gt; +    enum BlockContentHeightType {
&gt; +        FixedHeight,
&gt; +        FlexibleHeight,
&gt; +        OverflowHeight
&gt; +    };

All this depth thing, is really a separate patch, with separate tests. It would also make the initial patch a lot smaller</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512729</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-12-01 06:41:00 -0800</bug_when>
    <thetext>Related resources:

http://msdn.microsoft.com/en-us/library/ff462082(v=vs.92).aspx
http://blogs.msdn.com/b/iemobile/archive/2010/05/10/javascript-and-css-changes-in-ie-mobile-for-windows-phone-7.aspx
https://github.com/necolas/normalize.css/issues/28
http://webdesignernotebook.com/css/the-little-known-font-size-adjust-css3-property/
http://dbaron.org/log/20111126-font-inflation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512966</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-12-01 11:58:45 -0800</bug_when>
    <thetext>Don&apos;t you need to fix bug 56543 first?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540205</commentid>
    <comment_count>6</comment_count>
      <attachid>117405</attachid>
    <who name="Yael">yael</who>
    <bug_when>2012-01-21 18:14:49 -0800</bug_when>
    <thetext>Comment on attachment 117405
Initial patch.

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

&gt; Source/WebCore/dom/Document.cpp:4866
&gt; +            RefPtr&lt;RenderStyle&gt; newParentStyle = cloneRenderStyleWithState(parentStyle);
&gt; +            newParentStyle-&gt;setLineHeight(Length(lineHeight, Fixed));
&gt; +            newParentStyle-&gt;setSpecifiedLineHeight(lineHeightLength);
&gt; +            newParentStyle-&gt;setFontDescription(fontDescription);
&gt; +            newParentStyle-&gt;font().update(autoSizingNode-&gt;document()-&gt;styleSelector()-&gt;fontSelector());
&gt; +            parentRenderer-&gt;setStyle(newParentStyle.release());

This will cause you to loose visitedStyle if this is a visited link.
You should copy the visitedStyle too, here and in other places that clone and change the style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231162</commentid>
    <comment_count>7</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-09-19 10:58:54 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 121111 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117405</attachid>
            <date>2011-12-01 06:11:49 -0800</date>
            <delta_ts>2012-01-21 18:14:49 -0800</delta_ts>
            <desc>Initial patch.</desc>
            <filename>text-autosize.patch</filename>
            <type>text/plain</type>
            <size>55258</size>
            <attacher name="Alexander Færøy">ahf</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHAKaW5kZXggMTlhYjhjYi4uY2M3ZDNlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTE3MjksOSArMTcyOSwxMiBAQCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3Bl
cnR5Q1NTVmFsdWUoaW50IHByb3BlcgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4
dFNlY3VyaXR5OgogICAgICAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0
ZVZhbHVlKHN0eWxlLT50ZXh0U2VjdXJpdHkoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRUZXh0U2l6ZUFkanVzdDoKLSAgICAgICAgICAgIGlmIChzdHlsZS0+dGV4dFNpemVBZGp1
c3QoKSkKKyAgICAgICAgICAgIGlmIChzdHlsZS0+dGV4dFNpemVBZGp1c3QoKS5pc0F1dG8oKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlQXV0byk7Ci0gICAgICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFs
dWVDYWNoZS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAg
ICBpZiAoc3R5bGUtPnRleHRTaXplQWRqdXN0KCkuaXNOb25lKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHByaW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZU5vbmUpOworCisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShz
dHlsZS0+dGV4dFNpemVBZGp1c3QoKS5wZXJjZW50YWdlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEVSQ0VOVEFHRSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tl
Q29sb3I6CiAgICAgICAgICAgICByZXR1cm4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKHN0eWxl
LmdldCgpLCBzdHlsZS0+dGV4dFN0cm9rZUNvbG9yKCkpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VGV4dFN0cm9rZVdpZHRoOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCBj
OTY5OWFiLi5lMTliMTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMTg4NCw4ICsx
ODg0LDExIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KQogICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgKHZhbHVlLT51bml0ID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSB8fCB2YWx1ZS0+ZlZhbHVlKSAmJiB2
YWxpZFVuaXQodmFsdWUsIEZJbnRlZ2VyIHwgRlBlcmNlbnQgfCBGTm9uTmVnLCBmYWxzZSkpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNpemVBZGp1c3Q6
CisgICAgICAgIC8vIDxwZXJjZW50YWdlPiB8IG5vbmUgfCBhdXRvIHwgaW5oZXJpdAogICAgICAg
ICBpZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFs
aWRQcmltaXRpdmUgPSAoIWlkICYmIHZhbGlkVW5pdCh2YWx1ZSwgRlBlcmNlbnR8Rk5vbk5lZywg
bV9zdHJpY3QpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJ0
bE9yZGVyaW5nOgogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVMb2dpY2FsIHx8IGlkID09IENT
U1ZhbHVlVmlzdWFsKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4
IGUwYTA0Y2IuLjUwNzIyYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAKQEAgLTI3MDksNiArMjcwOSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5TGluZUhl
aWdodDoKICAgICB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGxpbmVIZWln
aHQsIExpbmVIZWlnaHQpCisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHNwZWNp
ZmllZExpbmVIZWlnaHQsIFNwZWNpZmllZExpbmVIZWlnaHQpCiAgICAgICAgIGlmICghcHJpbWl0
aXZlVmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIExlbmd0aCBsaW5lSGVpZ2h0
OwpAQCAtMjcxNywxMCArMjcxOCw4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBM
ZW5ndGgoLTEwMC4wLCBQZXJjZW50KTsKICAgICAgICAgZWxzZSBpZiAoQ1NTUHJpbWl0aXZlVmFs
dWU6OmlzVW5pdFR5cGVMZW5ndGgodHlwZSkpIHsKICAgICAgICAgICAgIGRvdWJsZSBtdWx0aXBs
aWVyID0gem9vbUZhY3RvcjsKLSAgICAgICAgICAgIGlmIChtX3N0eWxlLT50ZXh0U2l6ZUFkanVz
dCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fY2hlY2tlci5kb2N1
bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgICAgICAgICBtdWx0aXBsaWVyICo9IGZyYW1l
LT50ZXh0Wm9vbUZhY3RvcigpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fc3R5
bGUtPnRleHRTaXplQWRqdXN0KCkuaXNOb25lKCkgJiYgbV9jaGVja2VyLmRvY3VtZW50KCktPmZy
YW1lKCkpCisgICAgICAgICAgICAgICAgbXVsdGlwbGllciAqPSBtX2NoZWNrZXIuZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+dGV4dFpvb21GYWN0b3IoKTsKICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBw
cmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIG1fcm9vdEVsZW1l
bnRTdHlsZSwgbXVsdGlwbGllcik7CiAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCiAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVu
Z3RoKChtX3N0eWxlLT5mb250U2l6ZSgpICogcHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkp
IC8gMTAwLCBGaXhlZCk7CkBAIC0yNzI4LDcgKzI3MjcsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmFwcGx5UHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUpCiAgICAgICAgICAgICBs
aW5lSGVpZ2h0ID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpICogMTAw
LjAsIFBlcmNlbnQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IG1fc3R5bGUtPnNldExpbmVIZWlnaHQobGluZUhlaWdodCk7CisgICAgICAgIG1fc3R5bGUtPnNl
dFNwZWNpZmllZExpbmVIZWlnaHQobGluZUhlaWdodCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTM0ODcsOSArMzQ4NiwxOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJv
cGVydHkoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VGV4dFNpemVBZGp1c3Q6IHsKICAgICAgICAgSEFORExFX0lOSEVS
SVRfQU5EX0lOSVRJQUwodGV4dFNpemVBZGp1c3QsIFRleHRTaXplQWRqdXN0KQotICAgICAgICBp
ZiAoIXByaW1pdGl2ZVZhbHVlIHx8ICFwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKKyNpZiAwCiAgICAgICAgIHNldFRleHRTaXplQWRqdXN0KHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0byk7CisjZW5kaWYKKyAgICAgICAgaWYg
KCFwcmltaXRpdmVWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICAgICAgbV9z
dHlsZS0+c2V0VGV4dFNpemVBZGp1c3QoVGV4dFNpemVBZGp1c3RtZW50KEF1dG9UZXh0U2l6ZUFk
anVzdG1lbnQpKTsKKyAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVOb25lKQorICAgICAgICAgICAgbV9zdHlsZS0+c2V0VGV4dFNpemVBZGp1c3Qo
VGV4dFNpemVBZGp1c3RtZW50KE5vVGV4dFNpemVBZGp1c3RtZW50KSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fc3R5bGUtPnNldFRleHRTaXplQWRqdXN0KFRleHRTaXplQWRqdXN0bWVu
dChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTZWN1cml0eToKQEAgLTQ1NjEsMTEg
KzQ1NjksMTYgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBOaW5lUGllY2VJbWFnZVJlcGVh
dChDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJgogCiB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3QoKQogewotICAgIGlmIChtX3N0eWxlLT50ZXh0U2l6
ZUFkanVzdCgpKQorICAgIGlmIChtX3N0eWxlLT50ZXh0U2l6ZUFkanVzdCgpLmlzQXV0bygpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9u
KG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKLSAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0
Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkpOworCisgICAg
aWYgKCFtX3N0eWxlLT50ZXh0U2l6ZUFkanVzdCgpLmlzTm9uZSgpKQorICAgICAgICBuZXdGb250
RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRT
aXplKCkgKiBtX3N0eWxlLT50ZXh0U2l6ZUFkanVzdCgpLm11bHRpcGxpZXIoKSk7CisgICAgZWxz
ZQorICAgICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNj
cmlwdGlvbi5zcGVjaWZpZWRTaXplKCkpOworCiAgICAgbV9zdHlsZS0+c2V0Rm9udERlc2NyaXB0
aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5oCmluZGV4IGU0ZmJmMjguLmVjZDk0YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2VsZWN0b3IuaApAQCAtMTIzLDcgKzEyMyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEZvbnRE
ZXNjcmlwdGlvbihGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uKSB7IG1fZm9udERpcnR5
IHw9IHN0eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9CiAgICAg
dm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gc3R5bGUoKS0+c2V0Wm9vbShm
KTsgfQogICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9
IHN0eWxlKCktPnNldEVmZmVjdGl2ZVpvb20oZik7IH0KLSAgICB2b2lkIHNldFRleHRTaXplQWRq
dXN0KGJvb2wgYikgeyBtX2ZvbnREaXJ0eSB8PSBzdHlsZSgpLT5zZXRUZXh0U2l6ZUFkanVzdChi
KTsgfQogCiBwcml2YXRlOgogICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50Kiwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNldWRvSWQgPSBOT1BTRVVETyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAppbmRleCA5NzUxOWExLi5lYmJjY2I3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAi
QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgiCisjaW5jbHVkZSAiQ1NTRm9u
dFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVDYWNoZS5oIgogI2luY2x1
ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCkBAIC0x
MTksNiArMTIwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVu
ZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgpAQCAtMTg2Niw2ICsxODY4LDgg
QEAgdm9pZCBEb2N1bWVudDo6ZGV0YWNoKCkKICAgICAvLyBvciB0aGlzIHNldHRpbmcgb2YgdGhl
IGZyYW1lIHRvIDAgY291bGQgYmUgbWFkZSBleHBsaWNpdCBpbiBlYWNoIG9mIHRoZQogICAgIC8v
IGNhbGxlcnMgb2YgRG9jdW1lbnQ6OmRldGFjaCgpLgogICAgIG1fZnJhbWUgPSAwOworCisgICAg
bV90ZXh0QXV0b1NpemluZ1ZhbHVlcy5jbGVhcigpOwogICAgIG1fcmVuZGVyQXJlbmEuY2xlYXIo
KTsKIH0KIApAQCAtNDY1NSw2ICs0NjU5LDMwNCBAQCBIVE1MQ2FudmFzRWxlbWVudCogRG9jdW1l
bnQ6OmdldENTU0NhbnZhc0VsZW1lbnQoY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIHJldHVybiBy
ZXN1bHQuZ2V0KCk7CiB9CiAKK3N0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjbG9uZVJl
bmRlclN0eWxlV2l0aFN0YXRlKGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUpCit7Cisg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShjdXJy
ZW50U3R5bGUpOworCisgICAgaWYgKGN1cnJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5Rm9y
d2FyZFBvc2l0aW9uYWxSdWxlcygpKQorICAgICAgICBuZXdTdHlsZS0+c2V0Q2hpbGRyZW5BZmZl
Y3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOworICAgIGlmIChjdXJyZW50U3R5bGUtPmNo
aWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCkpCisgICAgICAgIG5ld1N0
eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOworICAg
IGlmIChjdXJyZW50U3R5bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcygpKQor
ICAgICAgICBuZXdTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7
CisgICAgaWYgKGN1cnJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMo
KSkKKyAgICAgICAgbmV3U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVz
KCk7CisgICAgaWYgKGN1cnJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNl
bnRSdWxlcygpKQorICAgICAgICBuZXdTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0
QWRqYWNlbnRSdWxlcygpOworCisgICAgLy8gRklYTUU6IEJ1aWxkLCB3YXMgdGhlc2UgcmVtb3Zl
ZD8KKyAgICAvLyBpZiAoY3VycmVudFN0eWxlLT5hZmZlY3RlZEJ5QXR0cmlidXRlU2VsZWN0b3Jz
KCkpCisgICAgLy8gICAgbmV3U3R5bGUtPnNldEFmZmVjdGVkQnlBdHRyaWJ1dGVTZWxlY3RvcnMo
KTsKKworICAgIGlmIChjdXJyZW50U3R5bGUtPmxhc3RDaGlsZFN0YXRlKCkpCisgICAgICAgIG5l
d1N0eWxlLT5zZXRMYXN0Q2hpbGRTdGF0ZSgpOworICAgIGlmIChjdXJyZW50U3R5bGUtPmZpcnN0
Q2hpbGRTdGF0ZSgpKQorICAgICAgICBuZXdTdHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7CisK
KyAgICBuZXdTdHlsZS0+c2V0Q2hpbGRJbmRleChjdXJyZW50U3R5bGUtPmNoaWxkSW5kZXgoKSk7
CisKKyAgICBpZiAoY3VycmVudFN0eWxlLT5hZmZlY3RlZEJ5RW1wdHkoKSkKKyAgICAgICAgbmV3
U3R5bGUtPnNldEVtcHR5U3RhdGUoY3VycmVudFN0eWxlLT5lbXB0eVN0YXRlKCkpOworCisgICAg
cmV0dXJuIG5ld1N0eWxlLnJlbGVhc2UoKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzRGVs
ZXRlZFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICByZXR1cm4gc3R5bGUgPT0gVGV4
dEF1dG9TaXppbmdLZXk6OmRlbGV0ZWRLZXlTdHlsZSgpOworfQorCitUZXh0QXV0b1NpemluZ0tl
eTo6VGV4dEF1dG9TaXppbmdLZXkoKQorICAgIDogbV9zdHlsZSgwKQorICAgICwgbV9kb2N1bWVu
dCgwKQoreworfQorCitUZXh0QXV0b1NpemluZ0tleTo6VGV4dEF1dG9TaXppbmdLZXkoUmVuZGVy
U3R5bGUqIHN0eWxlLCBEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBtX3N0eWxlKHN0eWxlKQor
ICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKK3sKKyAgICBBU1NFUlQoc3R5bGUpOyAvLyBDYW4g
YmUgdGhlIGNvbnN0cnVjdGVkIGRlbGV0ZWQgdmFsdWUuCisgICAgcmVmKCk7Cit9CisKK1RleHRB
dXRvU2l6aW5nS2V5OjpUZXh0QXV0b1NpemluZ0tleShjb25zdCBUZXh0QXV0b1NpemluZ0tleSYg
b3RoZXIpCisgICAgOiBtX3N0eWxlKG90aGVyLnN0eWxlKCkpCisgICAgLCBtX2RvY3VtZW50KG90
aGVyLmRvY3VtZW50KCkpCit7CisgICAgcmVmKCk7Cit9CisKK1RleHRBdXRvU2l6aW5nS2V5Ojp+
VGV4dEF1dG9TaXppbmdLZXkoKQoreworICAgIGRlcmVmKCk7Cit9CisKK1RleHRBdXRvU2l6aW5n
S2V5JiBUZXh0QXV0b1NpemluZ0tleTo6b3BlcmF0b3I9KGNvbnN0IFRleHRBdXRvU2l6aW5nS2V5
JiBvdGhlcikKK3sKKyAgICBvdGhlci5yZWYoKTsKKyAgICBkZXJlZigpOworICAgIG1fc3R5bGUg
PSBvdGhlci5zdHlsZSgpOworICAgIG1fZG9jdW1lbnQgPSBvdGhlci5kb2N1bWVudCgpOworCisg
ICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIFRleHRBdXRvU2l6aW5nS2V5OjpyZWYoKSBjb25z
dAoreworICAgIGlmICghc3R5bGUoKSB8fCBpc0RlbGV0ZWRWYWx1ZShzdHlsZSgpKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc3R5bGUoKS0+cmVmKCk7Cit9CisKK3ZvaWQgVGV4dEF1dG9TaXpp
bmdLZXk6OmRlcmVmKCkgY29uc3QKK3sKKyAgICBpZiAoIXN0eWxlKCkgfHwgaXNEZWxldGVkVmFs
dWUoc3R5bGUoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChkb2N1bWVudCgpICYm
IGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpOworICAgIHN0eWxlKCktPmRlcmVmKCk7Cit9CisK
K3ZvaWQgVGV4dEF1dG9TaXppbmdUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUZXh0QXV0
b1NpemluZ0tleSYgc2xvdCkKK3sKKyAgICBuZXcgKCZzbG90KSBUZXh0QXV0b1NpemluZ0tleShU
ZXh0QXV0b1NpemluZ0tleTo6ZGVsZXRlZEtleVN0eWxlKCksIFRleHRBdXRvU2l6aW5nS2V5Ojpk
ZWxldGVkS2V5RG9jdW1lbnQoKSk7Cit9CisKK2Jvb2wgVGV4dEF1dG9TaXppbmdUcmFpdHM6Omlz
RGVsZXRlZFZhbHVlKGNvbnN0IFRleHRBdXRvU2l6aW5nS2V5JiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gdmFsdWUuc3R5bGUoKSA9PSBUZXh0QXV0b1NpemluZ0tleTo6ZGVsZXRlZEtleVN0eWxlKCkg
JiYgdmFsdWUuZG9jdW1lbnQoKSA9PSBUZXh0QXV0b1NpemluZ0tleTo6ZGVsZXRlZEtleURvY3Vt
ZW50KCk7Cit9CisKK3Vuc2lnbmVkIFRleHRBdXRvU2l6aW5nVmFsdWU6Om5vZGVDb3VudCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fYXV0b1NpemVkTm9kZXMuc2l6ZSgpOworfQorCit2b2lkIFRl
eHRBdXRvU2l6aW5nVmFsdWU6OmFkZE5vZGUoTm9kZSogbm9kZSwgZmxvYXQgc2l6ZSkKK3sKKyAg
ICBBU1NFUlQobm9kZSk7CisgICAgQVNTRVJUKG5vZGUtPnJlbmRlcmVyKCkpOworICAgIFJlbmRl
clRleHQqIHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQobm9kZS0+cmVuZGVyZXIoKSk7CisgICAg
cmVuZGVyVGV4dC0+c2V0Q2FuZGlkYXRlQ29tcHV0ZWRUZXh0U2l6ZShzaXplKTsKKyAgICBtX2F1
dG9TaXplZE5vZGVzLmFkZChub2RlKTsKK30KKwordm9pZCBUZXh0QXV0b1NpemluZ1ZhbHVlOjpy
ZW1vdmVTdGFsZU5vZGVzKCkKK3sKKyAgICAvLyBSZW1vdmUgc3RhbGUgbm9kZXMuICBOb2RlcyBt
YXkgaGF2ZSBoYWQgdGhlaXIgcmVuZGVyZXJzIGRldGFjaGVkLiAgV2UnbGwgYWxzbworICAgIC8v
IG5lZWQgdG8gcmVtb3ZlIHRoZSBzdHlsZSBmcm9tIHRoZSBkb2N1bWVudCdzIG1fdGV4dEF1dG9T
aXppbmdWYWx1ZXMgY29sbGVjdGlvbi4KKyAgICAvLyBSZXR1cm4gdHJ1ZSBpbmRpY2F0ZXMgd2Ug
bmVlZCB0byBkbyB0aGF0IHJlbW92YWwuCisgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IG5vZGVz
Rm9yUmVtb3ZhbDsKKyAgICBIYXNoU2V0PFJlZlB0cjxOb2RlPiA+OjppdGVyYXRvciBlbmQgPSBt
X2F1dG9TaXplZE5vZGVzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxSZWZQdHI8Tm9kZT4gPjo6
aXRlcmF0b3IgaXQgPSBtX2F1dG9TaXplZE5vZGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICBSZWZQdHI8Tm9kZT4gYXV0b1NpemluZ05vZGUgPSAqaXQ7CisgICAgICAgIFJl
bmRlclRleHQqIHRleHQgPSB0b1JlbmRlclRleHQoYXV0b1NpemluZ05vZGUtPnJlbmRlcmVyKCkp
OworICAgICAgICBpZiAoIXRleHQgfHwgKHRleHQtPnN0eWxlKCkgJiYgIXRleHQtPnN0eWxlKCkt
PnRleHRTaXplQWRqdXN0KCkuaXNBdXRvKCkpIHx8ICF0ZXh0LT5jYW5kaWRhdGVDb21wdXRlZFRl
eHRTaXplKCkpCisgICAgICAgICAgICBub2Rlc0ZvclJlbW92YWwuYXBwZW5kKGF1dG9TaXppbmdO
b2RlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IG5vZGVzRm9yUmVtb3ZhbC5zaXpl
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIG1f
YXV0b1NpemVkTm9kZXMucmVtb3ZlKG5vZGVzRm9yUmVtb3ZhbFtpXSk7Cit9CisKK3N0YXRpYyBj
b25zdCBmbG9hdCBzX21heGltdW1TY2FsZUluY3JlYXNlID0gMS43ZjsKKwordm9pZCBUZXh0QXV0
b1NpemluZ1ZhbHVlOjphZGp1c3RUZXh0U2l6ZXMoKQoreworICAgIC8vIElmIHdlIG9ubHkgaGF2
ZSBvbmUgcGllY2Ugb2YgdGV4dCB3aXRoIHRoZSBzdHlsZSBvbiB0aGUgcGFnZSwgZG8gbm90IGFk
anVzdCBpdHMgc2l6ZS4KKyAgICBpZiAobV9hdXRvU2l6ZWROb2Rlcy5zaXplKCkgPD0gMSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gQ29tcHV0ZSBhdmVyYWdlIHNpemUuCisgICAgZmxvYXQg
Y3VtdWxhdGl2ZVNpemUgPSAwOworICAgIEhhc2hTZXQ8UmVmUHRyPE5vZGU+ID46Oml0ZXJhdG9y
IGVuZCA9IG1fYXV0b1NpemVkTm9kZXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxO
b2RlPiA+OjppdGVyYXRvciBpdCA9IG1fYXV0b1NpemVkTm9kZXMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIFJlZlB0cjxOb2RlPiBhdXRvU2l6aW5nTm9kZSA9ICppdDsKKyAg
ICAgICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4dCA9IHRvUmVuZGVyVGV4dChhdXRvU2l6aW5nTm9k
ZS0+cmVuZGVyZXIoKSk7CisgICAgICAgIGN1bXVsYXRpdmVTaXplICs9IHJlbmRlclRleHQtPmNh
bmRpZGF0ZUNvbXB1dGVkVGV4dFNpemUoKTsKKyAgICB9CisKKyAgICBmbG9hdCBhdmVyYWdlU2l6
ZSA9IHJvdW5kZihjdW11bGF0aXZlU2l6ZSAvIG1fYXV0b1NpemVkTm9kZXMuc2l6ZSgpKTsKKwor
ICAgIC8vIEFkanVzdCBzaXplcy4KKyAgICBib29sIGZpcnN0UGFzcyA9IHRydWU7CisgICAgZW5k
ID0gbV9hdXRvU2l6ZWROb2Rlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPE5vZGU+
ID46Oml0ZXJhdG9yIGl0ID0gbV9hdXRvU2l6ZWROb2Rlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgUmVmUHRyPE5vZGU+IGF1dG9TaXppbmdOb2RlID0gKml0OworICAgICAg
ICBSZW5kZXJUZXh0KiB0ZXh0ID0gdG9SZW5kZXJUZXh0KGF1dG9TaXppbmdOb2RlLT5yZW5kZXJl
cigpKTsKKworICAgICAgICBpZiAoIXRleHQgfHwgdGV4dC0+c3R5bGUoKS0+Zm9udERlc2NyaXB0
aW9uKCkuY29tcHV0ZWRTaXplKCkgPT0gYXZlcmFnZVNpemUpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBmbG9hdCBzcGVjaWZpZWRTaXplID0gdGV4dC0+c3R5bGUoKS0+Zm9udERl
c2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOworICAgICAgICBmbG9hdCBzY2FsZUNoYW5nZSA9
IGF2ZXJhZ2VTaXplIC8gc3BlY2lmaWVkU2l6ZTsKKyAgICAgICAgaWYgKHNjYWxlQ2hhbmdlID4g
c19tYXhpbXVtU2NhbGVJbmNyZWFzZSAmJiBmaXJzdFBhc3MpIHsKKyAgICAgICAgICAgIGZpcnN0
UGFzcyA9IGZhbHNlOworICAgICAgICAgICAgYXZlcmFnZVNpemUgPSByb3VuZGYoc3BlY2lmaWVk
U2l6ZSAqIHNfbWF4aW11bVNjYWxlSW5jcmVhc2UpOworICAgICAgICAgICAgc2NhbGVDaGFuZ2Ug
PSBhdmVyYWdlU2l6ZSAvIHNwZWNpZmllZFNpemU7CisgICAgICAgIH0KKworICAgICAgICBSZWZQ
dHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gY2xvbmVSZW5kZXJTdHlsZVdpdGhTdGF0ZSh0ZXh0LT5z
dHlsZSgpKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxl
LT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVk
U2l6ZShhdmVyYWdlU2l6ZSk7CisgICAgICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoYXV0b1NpemluZ05v
ZGUtPmRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+Zm9udFNlbGVjdG9yKCkpOworICAgICAg
ICB0ZXh0LT5zZXRTdHlsZShzdHlsZS5yZWxlYXNlKCkpOworCisgICAgICAgIFJlbmRlck9iamVj
dCogcGFyZW50UmVuZGVyZXIgPSB0ZXh0LT5wYXJlbnQoKTsKKworICAgICAgICAvLyBJZiB3ZSBo
YXZlIGEgbGlzdCB3ZSBzaG91bGQgcmVzaXplIExpc3RNYXJrZXJzIHNlcGFyYXRlbHkuCisgICAg
ICAgIFJlbmRlck9iamVjdCogbGlzdE1hcmtlclJlbmRlcmVyID0gcGFyZW50UmVuZGVyZXItPmZp
cnN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKGxpc3RNYXJrZXJSZW5kZXJlci0+aXNMaXN0TWFya2Vy
KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBjbG9uZVJlbmRl
clN0eWxlV2l0aFN0YXRlKGxpc3RNYXJrZXJSZW5kZXJlci0+c3R5bGUoKSk7CisgICAgICAgICAg
ICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAg
ICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9jdW1lbnQoKS0+c3R5bGVT
ZWxlY3RvcigpLT5mb250U2VsZWN0b3IoKSk7CisgICAgICAgICAgICBsaXN0TWFya2VyUmVuZGVy
ZXItPnNldFN0eWxlKHN0eWxlLnJlbGVhc2UoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBS
ZXNpemUgdGhlIGxpbmUgaGVpZ2h0IG9mIHRoZSBwYXJlbnQuCisgICAgICAgIGNvbnN0IFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSA9IHBhcmVudFJlbmRlcmVyLT5zdHlsZSgpOworICAgICAgICBM
ZW5ndGggbGluZUhlaWdodExlbmd0aCA9IHBhcmVudFN0eWxlLT5zcGVjaWZpZWRMaW5lSGVpZ2h0
KCk7CisKKyAgICAgICAgaW50IHNwZWNpZmllZExpbmVIZWlnaHQgPSAwOworICAgICAgICBpZiAo
bGluZUhlaWdodExlbmd0aC5pc1BlcmNlbnQoKSkKKyAgICAgICAgICAgIHNwZWNpZmllZExpbmVI
ZWlnaHQgPSBsaW5lSGVpZ2h0TGVuZ3RoLmNhbGNNaW5WYWx1ZShmb250RGVzY3JpcHRpb24uc3Bl
Y2lmaWVkU2l6ZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3BlY2lmaWVkTGluZUhl
aWdodCA9IGxpbmVIZWlnaHRMZW5ndGgudmFsdWUoKTsKKyAgICAgICAgaW50IGxpbmVIZWlnaHQg
PSBzcGVjaWZpZWRMaW5lSGVpZ2h0ICogc2NhbGVDaGFuZ2U7CisgICAgICAgIGlmICghbGluZUhl
aWdodExlbmd0aC5pc0ZpeGVkKCkgfHwgbGluZUhlaWdodExlbmd0aC52YWx1ZSgpICE9IGxpbmVI
ZWlnaHQpIHsKKyAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3UGFyZW50U3R5bGUg
PSBjbG9uZVJlbmRlclN0eWxlV2l0aFN0YXRlKHBhcmVudFN0eWxlKTsKKyAgICAgICAgICAgIG5l
d1BhcmVudFN0eWxlLT5zZXRMaW5lSGVpZ2h0KExlbmd0aChsaW5lSGVpZ2h0LCBGaXhlZCkpOwor
ICAgICAgICAgICAgbmV3UGFyZW50U3R5bGUtPnNldFNwZWNpZmllZExpbmVIZWlnaHQobGluZUhl
aWdodExlbmd0aCk7CisgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0
aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+Zm9udCgp
LnVwZGF0ZShhdXRvU2l6aW5nTm9kZS0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5mb250
U2VsZWN0b3IoKSk7CisgICAgICAgICAgICBwYXJlbnRSZW5kZXJlci0+c2V0U3R5bGUobmV3UGFy
ZW50U3R5bGUucmVsZWFzZSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0QXV0
b1NpemluZ1ZhbHVlOjpyZXNldCgpCit7CisgICAgSGFzaFNldDxSZWZQdHI8Tm9kZT4gPjo6aXRl
cmF0b3IgZW5kID0gbV9hdXRvU2l6ZWROb2Rlcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVm
UHRyPE5vZGU+ID46Oml0ZXJhdG9yIGl0ID0gbV9hdXRvU2l6ZWROb2Rlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVmUHRyPE5vZGU+IGF1dG9TaXppbmdOb2RlID0gKml0
OworICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gdG9SZW5kZXJUZXh0KGF1dG9TaXppbmdOb2Rl
LT5yZW5kZXJlcigpKTsKKyAgICAgICAgaWYgKCF0ZXh0KQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgLy8gUmVzZXQgdGhlIGZvbnQgc2l6ZSBiYWNrIHRvIHRoZSBvcmlnaW5hbCBz
cGVjaWZpZWQgc2l6ZS4KKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9
IHRleHQtPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBmbG9hdCBvcmlnaW5h
bFNpemUgPSBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpOworICAgICAgICBpZiAoZm9u
dERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpICE9IG9yaWdpbmFsU2l6ZSkgeworICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShvcmlnaW5hbFNpemUpOworICAgICAg
ICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IGNsb25lUmVuZGVyU3R5bGVXaXRoU3Rh
dGUodGV4dC0+c3R5bGUoKSk7CisgICAgICAgICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9u
KGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShhdXRv
U2l6aW5nTm9kZS0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5mb250U2VsZWN0b3IoKSk7
CisgICAgICAgICAgICB0ZXh0LT5zZXRTdHlsZShzdHlsZS5yZWxlYXNlKCkpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gUmVzZXQgdGhlIGxpbmUgaGVpZ2h0IG9mIHRoZSBwYXJlbnQuCisgICAg
ICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSB0ZXh0LT5wYXJlbnQoKTsKKyAgICAg
ICAgaWYgKCFwYXJlbnRSZW5kZXJlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHBhcmVudFJlbmRlcmVyLT5zdHlsZSgp
OworICAgICAgICBMZW5ndGggb3JpZ2luYWxMaW5lSGVpZ2h0ID0gcGFyZW50U3R5bGUtPnNwZWNp
ZmllZExpbmVIZWlnaHQoKTsKKyAgICAgICAgaWYgKG9yaWdpbmFsTGluZUhlaWdodCAhPSBwYXJl
bnRTdHlsZS0+bGluZUhlaWdodCgpKSB7CisgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IG5ld1BhcmVudFN0eWxlID0gY2xvbmVSZW5kZXJTdHlsZVdpdGhTdGF0ZShwYXJlbnRTdHlsZSk7
CisgICAgICAgICAgICBuZXdQYXJlbnRTdHlsZS0+c2V0TGluZUhlaWdodChvcmlnaW5hbExpbmVI
ZWlnaHQpOworICAgICAgICAgICAgbmV3UGFyZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgbmV3UGFyZW50U3R5bGUtPmZvbnQoKS51cGRh
dGUoYXV0b1NpemluZ05vZGUtPmRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+Zm9udFNlbGVj
dG9yKCkpOworICAgICAgICAgICAgcGFyZW50UmVuZGVyZXItPnNldFN0eWxlKG5ld1BhcmVudFN0
eWxlLnJlbGVhc2UoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OmFk
ZEF1dG9TaXppbmdOb2RlKE5vZGUqIG5vZGUsIGZsb2F0IGNhbmRpZGF0ZVNpemUpCit7CisgICAg
VGV4dEF1dG9TaXppbmdLZXkga2V5KG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCksIGRvY3VtZW50
KCkpOworICAgIFJlZlB0cjxUZXh0QXV0b1NpemluZ1ZhbHVlPiB2YWx1ZTsKKworICAgIC8vIERv
IHdlIGFscmVhZHkgaGF2ZSBhIGNvbGxlY3Rpb24gb2Ygbm9kZXMgYXNzb2NpYXRlZCB3aXRoIHRo
aXMgc3R5bGU/ICBJZiBub3QgY3JlYXRlIG9uZS4KKyAgICBpZiAobV90ZXh0QXV0b1NpemluZ1Zh
bHVlcy5jb250YWlucyhrZXkpKQorICAgICAgICB2YWx1ZSA9IG1fdGV4dEF1dG9TaXppbmdWYWx1
ZXMuZ2V0KGtleSk7CisgICAgZWxzZSB7CisgICAgICAgIHZhbHVlID0gVGV4dEF1dG9TaXppbmdW
YWx1ZTo6Y3JlYXRlKCk7CisgICAgICAgIG1fdGV4dEF1dG9TaXppbmdWYWx1ZXMuc2V0KGtleSwg
dmFsdWUpOworICAgIH0KKworICAgIC8vIEFkZCB0aGUgbm9kZSB0byB0aGUgY29sbGVjdGlvbiBh
c3NvY2lhdGVkIHdpdGggdGhpcyBzdHlsZS4KKyAgICB2YWx1ZS0+YWRkTm9kZShub2RlLCBjYW5k
aWRhdGVTaXplKTsKK30KKwordm9pZCBEb2N1bWVudDo6dmFsaWRhdGVBdXRvU2l6aW5nTm9kZXMo
KQoreworICAgIFZlY3RvcjxUZXh0QXV0b1NpemluZ0tleT4gbm9kZXNGb3JSZW1vdmFsOworCisg
ICAgVGV4dEF1dG9TaXppbmdNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGV4dEF1dG9TaXppbmdWYWx1
ZXMuZW5kKCk7CisgICAgZm9yIChUZXh0QXV0b1NpemluZ01hcDo6aXRlcmF0b3IgaXQgPSBtX3Rl
eHRBdXRvU2l6aW5nVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBU
ZXh0QXV0b1NpemluZ0tleSBrZXkgPSBpdC0+Zmlyc3Q7CisgICAgICAgIFJlZlB0cjxUZXh0QXV0
b1NpemluZ1ZhbHVlPiB2YWx1ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIC8vIFVwZGF0ZSBhbGwg
dGhlIG5vZGVzIGluIHRoZSBjb2xsZWN0aW9uIHRvIHJlZmxlY3QgdGhlIG5ldyBjYW5kaWRhdGUg
c2l6ZS4KKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIHZhbHVlLT5yZW1vdmVTdGFsZU5vZGVzKCk7CisgICAgICAgIGlmICh2YWx1ZS0+bm9kZUNv
dW50KCkpCisgICAgICAgICAgICB2YWx1ZS0+YWRqdXN0VGV4dFNpemVzKCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG5vZGVzRm9yUmVtb3ZhbC5hcHBlbmQoa2V5KTsKKyAgICB9CisKKyAg
ICB1bnNpZ25lZCBjb3VudCA9IG5vZGVzRm9yUmVtb3ZhbC5zaXplKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIG1fdGV4dEF1dG9TaXppbmdWYWx1
ZXMucmVtb3ZlKG5vZGVzRm9yUmVtb3ZhbFtpXSk7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OnJlc2V0
QXV0b1NpemluZ05vZGVzKCkKK3sKKyAgICBUZXh0QXV0b1NpemluZ01hcDo6aXRlcmF0b3IgZW5k
ID0gbV90ZXh0QXV0b1NpemluZ1ZhbHVlcy5lbmQoKTsKKyAgICBmb3IgKFRleHRBdXRvU2l6aW5n
TWFwOjppdGVyYXRvciBpID0gbV90ZXh0QXV0b1NpemluZ1ZhbHVlcy5iZWdpbigpOyBpICE9IGVu
ZDsgKytpKSB7CisgICAgICAgIFJlZlB0cjxUZXh0QXV0b1NpemluZ1ZhbHVlPiB2YWx1ZSA9IGkt
PnNlY29uZDsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgdmFsdWUtPnJlc2V0KCk7
CisgICAgfQorICAgIG1fdGV4dEF1dG9TaXppbmdWYWx1ZXMuY2xlYXIoKTsKK30KKwogdm9pZCBE
b2N1bWVudDo6aW5pdEROU1ByZWZldGNoKCkKIHsKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSB0
aGlzLT5zZXR0aW5ncygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAxNmNjMWI4Li4wMDMyMWNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIlBhZ2VW
aXNpYmlsaXR5U3RhdGUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogI2luY2x1ZGUg
IlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZWN1cml0eVBvbGljeS5oIgogI2lu
Y2x1ZGUgIlN0cmluZ1dpdGhEaXJlY3Rpb24uaCIKQEAgLTIwOSw2ICsyMTAsNjkgQEAgZW51bSBQ
YWdlc2hvd0V2ZW50UGVyc2lzdGVuY2UgewogICAgIFBhZ2VzaG93RXZlbnRQZXJzaXN0ZWQgPSAx
CiB9OwogCitjbGFzcyBUZXh0QXV0b1NpemluZ0tleSB7CitwdWJsaWM6CisgICAgVGV4dEF1dG9T
aXppbmdLZXkoKTsKKyAgICBUZXh0QXV0b1NpemluZ0tleShSZW5kZXJTdHlsZSosIERvY3VtZW50
Kik7CisgICAgflRleHRBdXRvU2l6aW5nS2V5KCk7CisKKyAgICBUZXh0QXV0b1NpemluZ0tleShj
b25zdCBUZXh0QXV0b1NpemluZ0tleSYpOworICAgIFRleHRBdXRvU2l6aW5nS2V5JiBvcGVyYXRv
cj0oY29uc3QgVGV4dEF1dG9TaXppbmdLZXkmKTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KKyAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0eWxlOyB9CisKKyAgICBzdGF0aWMgRG9jdW1lbnQqIGRlbGV0ZWRL
ZXlEb2N1bWVudCgpIHsgcmV0dXJuIChEb2N1bWVudCopIC0xOyB9CisgICAgc3RhdGljIFJlbmRl
clN0eWxlKiBkZWxldGVkS2V5U3R5bGUoKSB7IHJldHVybiAoUmVuZGVyU3R5bGUqKSAtMTsgfQor
Citwcml2YXRlOgorICAgIHZvaWQgcmVmKCkgY29uc3Q7CisgICAgdm9pZCBkZXJlZigpIGNvbnN0
OworCisgICAgUmVuZGVyU3R5bGUqIG1fc3R5bGU7CisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7
Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRleHRBdXRvU2l6aW5nS2V5JiBh
LCBjb25zdCBUZXh0QXV0b1NpemluZ0tleSYgYikKK3sKKyAgICBpZiAoYS5zdHlsZSgpICYmIGEu
c3R5bGUoKSAhPSBUZXh0QXV0b1NpemluZ0tleTo6ZGVsZXRlZEtleVN0eWxlKCkgJiYgYi5zdHls
ZSgpICYmIGIuc3R5bGUoKSAhPSBUZXh0QXV0b1NpemluZ0tleTo6ZGVsZXRlZEtleVN0eWxlKCkp
CisgICAgICAgIHJldHVybiBhLnN0eWxlKCktPmVxdWFsRm9yVGV4dEF1dG9zaXppbmcoYi5zdHls
ZSgpKTsKKworICAgIHJldHVybiBhLnN0eWxlKCkgPT0gYi5zdHlsZSgpOworfQorCitzdHJ1Y3Qg
VGV4dEF1dG9TaXppbmdIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUZXh0
QXV0b1NpemluZ0tleSYgaykgeyByZXR1cm4gay5zdHlsZSgpLT5oYXNoRm9yVGV4dEF1dG9zaXpp
bmcoKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFRleHRBdXRvU2l6aW5nS2V5JiBh
LCBjb25zdCBUZXh0QXV0b1NpemluZ0tleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3Rh
dGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsK
Kworc3RydWN0IFRleHRBdXRvU2l6aW5nVHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxU
ZXh0QXV0b1NpemluZ0tleT4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1pl
cm8gPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUZXh0QXV0
b1NpemluZ0tleSYgc2xvdCk7CisgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3Qg
VGV4dEF1dG9TaXppbmdLZXkmIHZhbHVlKTsKK307CisKK2NsYXNzIFRleHRBdXRvU2l6aW5nVmFs
dWUgOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0QXV0b1NpemluZ1ZhbHVlPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEF1dG9TaXppbmdWYWx1ZT4gY3JlYXRlKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dEF1dG9TaXppbmdWYWx1ZSgpKTsKKyAg
ICB9CisKKyAgICB2b2lkIGFkZE5vZGUoTm9kZSosIGZsb2F0IHNpemUpOworICAgIHZvaWQgcmVt
b3ZlU3RhbGVOb2RlcygpOworICAgIHZvaWQgYWRqdXN0VGV4dFNpemVzKCk7CisgICAgdm9pZCBy
ZXNldCgpOworCisgICAgdW5zaWduZWQgbm9kZUNvdW50KCkgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgVGV4dEF1dG9TaXppbmdWYWx1ZSgpIHsgfQorCisgICAgSGFzaFNldDxSZWZQdHI8Tm9kZT4g
PiBtX2F1dG9TaXplZE5vZGVzOworfTsKKwogZW51bSBTdHlsZVNlbGVjdG9yVXBkYXRlRmxhZyB7
IFJlY2FsY1N0eWxlSW1tZWRpYXRlbHksIERlZmVyUmVjYWxjU3R5bGUgfTsKIAogY2xhc3MgRG9j
dW1lbnQgOiBwdWJsaWMgVHJlZVNjb3BlLCBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB7
CkBAIC0xMTI0LDYgKzExODgsMTAgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNJbkRvY3Vt
ZW50V3JpdGUoKSB7IHJldHVybiBtX3dyaXRlUmVjdXJzaW9uRGVwdGggPiAwOyB9CiAKKyAgICB2
b2lkIGFkZEF1dG9TaXppbmdOb2RlKE5vZGUgKm5vZGUsIGZsb2F0IHNpemUpOworICAgIHZvaWQg
dmFsaWRhdGVBdXRvU2l6aW5nTm9kZXMoKTsKKyAgICB2b2lkIHJlc2V0QXV0b1NpemluZ05vZGVz
KCk7CisKIHByb3RlY3RlZDoKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IEtVUkwmLCBib29s
IGlzWEhUTUwsIGJvb2wgaXNIVE1MKTsKIApAQCAtMTM5OCw2ICsxNDY2LDkgQEAgcHJpdmF0ZToK
IAogICAgIFJlZlB0cjxEb2N1bWVudFdlYWtSZWZlcmVuY2U+IG1fd2Vha1JlZmVyZW5jZTsKIAor
ICAgIHR5cGVkZWYgSGFzaE1hcDxUZXh0QXV0b1NpemluZ0tleSwgUmVmUHRyPFRleHRBdXRvU2l6
aW5nVmFsdWU+LCBUZXh0QXV0b1NpemluZ0hhc2gsIFRleHRBdXRvU2l6aW5nVHJhaXRzPiBUZXh0
QXV0b1NpemluZ01hcDsKKyAgICBUZXh0QXV0b1NpemluZ01hcCBtX3RleHRBdXRvU2l6aW5nVmFs
dWVzOworCiAgICAgSGFzaFNldDxNZWRpYUNhblN0YXJ0TGlzdGVuZXIqPiBtX21lZGlhQ2FuU3Rh
cnRMaXN0ZW5lcnM7CiAKICAgICBRdWFsaWZpZWROYW1lIG1faWRBdHRyaWJ1dGVOYW1lOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDAzMjhiMDEuLjkyM2U4N2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKQEAgLTEwNjYsNiArMTA2Niw4IEBAIHZvaWQgRnJhbWVWaWV3Ojps
YXlvdXQoYm9vbCBhbGxvd1N1YnRyZWUpCiAgICAgICAgIGlmIChvbGRTaXplICE9IG1fc2l6ZSkg
ewogICAgICAgICAgICAgbV9kb0Z1bGxSZXBhaW50ID0gdHJ1ZTsKICAgICAgICAgICAgIGlmICgh
bV9maXJzdExheW91dCkgeworICAgICAgICAgICAgICAgIHJvb3QtPnJlc2V0VGV4dEF1dG9zaXpp
bmcoKTsKKwogICAgICAgICAgICAgICAgIFJlbmRlckJveCogcm9vdFJlbmRlcmVyID0gZG9jdW1l
bnQtPmRvY3VtZW50RWxlbWVudCgpID8gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLT5yZW5k
ZXJCb3goKSA6IDA7CiAgICAgICAgICAgICAgICAgUmVuZGVyQm94KiBib2R5UmVuZGVyZXIgPSBy
b290UmVuZGVyZXIgJiYgZG9jdW1lbnQtPmJvZHkoKSA/IGRvY3VtZW50LT5ib2R5KCktPnJlbmRl
ckJveCgpIDogMDsKICAgICAgICAgICAgICAgICBpZiAoYm9keVJlbmRlcmVyICYmIGJvZHlSZW5k
ZXJlci0+c3RyZXRjaGVzVG9WaWV3cG9ydCgpKQpAQCAtMTA5Miw2ICsxMDk0LDE3IEBAIHZvaWQg
RnJhbWVWaWV3OjpsYXlvdXQoYm9vbCBhbGxvd1N1YnRyZWUpCiAgICAgICAgIG1faW5MYXlvdXQg
PSB0cnVlOwogICAgICAgICBiZWdpbkRlZmVycmVkUmVwYWludHMoKTsKICAgICAgICAgcm9vdC0+
bGF5b3V0KCk7CisKKyAgICAvLyBGSVhNRTogQ3JlYXRlIHNldHRpbmcgaW5zdGVhZCwgbGlrZSBz
ZXRNaW5pbXVtWm9vbWVkVG9FbGVtZW50Rm9udFNpemUoKS4KKyAgICBmbG9hdCBtaW5pbXVtWm9v
bWVkVG9FbGVtZW50Rm9udFNpemUgPSAxNjsKKyAgICBmbG9hdCB2aXNpYmxlV2lkdGggPSAzMjA7
IC8vIEZJWE1FOiBWZXJpZnkgd2hldGhlciB0aGlzIGlzIGNvcnJlY3QuCisgICAgaWYgKG1pbmlt
dW1ab29tZWRUb0VsZW1lbnRGb250U2l6ZSAmJiB2aXNpYmxlV2lkdGggJiYgIXJvb3QtPnZpZXco
KS0+cHJpbnRpbmcoKSkgeworICAgICAgICByb290LT5hZGp1c3RDb21wdXRlZEZvbnRTaXplc09u
QmxvY2tzKG1pbmltdW1ab29tZWRUb0VsZW1lbnRGb250U2l6ZSwgdmlzaWJsZVdpZHRoKTsKKyAg
ICAgICAgaWYgKHJvb3QtPm5lZWRzTGF5b3V0KCkpCisgICAgICAgICAgICByb290LT5sYXlvdXQo
KTsKKyAgICB9CisKKwogICAgICAgICBlbmREZWZlcnJlZFJlcGFpbnRzKCk7CiAgICAgICAgIG1f
aW5MYXlvdXQgPSBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CmluZGV4IDExNDg0ZGIuLjUwYzRiODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmgKQEAgLTIwMyw2ICsyMDMsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gIShj
ICYgfjB4RkYpICYmIHNfcm91bmRpbmdIYWNrQ2hhcmFjdGVyVGFibGVbY107CiAgICAgfQogCisg
ICAgYm9vbCBlcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnQmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIChtX2ZvbnREZXNjcmlwdGlvbi5lcXVhbEZvclRleHRBdXRv
U2l6aW5nKG90aGVyLm1fZm9udERlc2NyaXB0aW9uKQorICAgICAgICAgICAgICAgICYmIG1fbGV0
dGVyU3BhY2luZyA9PSBvdGhlci5tX2xldHRlclNwYWNpbmcKKyAgICAgICAgICAgICAgICAmJiBt
X3dvcmRTcGFjaW5nID09IG90aGVyLm1fd29yZFNwYWNpbmcpOworICAgIH0KKwogICAgIEZvbnRT
ZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgdHJlYXRBc1Nw
YWNlKFVDaGFyIGMpIHsgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdcbicg
fHwgYyA9PSBub0JyZWFrU3BhY2U7IH0KICAgICBzdGF0aWMgYm9vbCB0cmVhdEFzWmVyb1dpZHRo
U3BhY2UoVUNoYXIgYykgeyByZXR1cm4gdHJlYXRBc1plcm9XaWR0aFNwYWNlSW5Db21wbGV4U2Ny
aXB0KGMpIHx8IGMgPT0gMHgyMDBjIHx8IGMgPT0gMHgyMDBkOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5oCmluZGV4IDcxY2EyMTgu
LmZlMTYxOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnREZXNjcmlwdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnREZXNjcmlwdGlvbi5oCkBAIC0xNTEsNiArMTUxLDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFNjcmlwdChVU2NyaXB0Q29kZSBzKSB7IG1fc2NyaXB0ID0gczsgfQogICAgIHZvaWQgc2V0RmVh
dHVyZVNldHRpbmdzKFBhc3NSZWZQdHI8Rm9udEZlYXR1cmVTZXR0aW5ncz4gc2V0dGluZ3MpIHsg
bV9mZWF0dXJlU2V0dGluZ3MgPSBzZXR0aW5nczsgfQogCisgICAgaW5saW5lIGJvb2wgZXF1YWxG
b3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250RGVzY3JpcHRpb24mIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fZmFtaWx5TGlzdCA9PSBvdGhlci5tX2ZhbWlseUxpc3QKKyAg
ICAgICAgICAgICYmIG1fc3BlY2lmaWVkU2l6ZSA9PSBvdGhlci5tX3NwZWNpZmllZFNpemUKKyAg
ICAgICAgICAgICYmIG1fc21hbGxDYXBzID09IG90aGVyLm1fc21hbGxDYXBzCisgICAgICAgICAg
ICAmJiBtX2lzQWJzb2x1dGVTaXplID09IG90aGVyLm1faXNBYnNvbHV0ZVNpemUKKyAgICAgICAg
ICAgICYmIG1fZ2VuZXJpY0ZhbWlseSA9PSBvdGhlci5tX2dlbmVyaWNGYW1pbHkKKyAgICAgICAg
ICAgICYmIG1fdXNlUHJpbnRlckZvbnQgPT0gb3RoZXIubV91c2VQcmludGVyRm9udDsKKyAgICB9
CisKIHByaXZhdGU6CiAgICAgRm9udEZhbWlseSBtX2ZhbWlseUxpc3Q7IC8vIFRoZSBsaXN0IG9m
IGZvbnQgZmFtaWxpZXMgdG8gYmUgdXNlZC4KICAgICBSZWZQdHI8Rm9udEZlYXR1cmVTZXR0aW5n
cz4gbV9mZWF0dXJlU2V0dGluZ3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAppbmRleCBlMjEzYWE3Li45YWQ4NmUzIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAKQEAgLTEyMyw2ICsxMjMsOCBAQCBSZW5kZXJCbG9jazo6UmVuZGVyQmxv
Y2soTm9kZSogbm9kZSkKICAgICAgICwgbV9saW5lSGVpZ2h0KC0xKQogICAgICAgLCBtX2JlaW5n
RGVzdHJveWVkKGZhbHNlKQogICAgICAgLCBtX2hhc1Bvc2l0aW9uZWRGbG9hdHMoZmFsc2UpCisg
ICAgICAsIG1fd2lkdGhGb3JUZXh0QXV0b3NpemluZygtMSkKKyAgICAgICwgbV9saW5lQ291bnRG
b3JUZXh0QXV0b3NpemluZyhOT1RfU0VUKQogewogICAgIHNldENoaWxkcmVuSW5saW5lKHRydWUp
OwogfQpAQCAtNjg1NCw2ICs2ODU2LDEyNyBAQCBjb25zdCBjaGFyKiBSZW5kZXJCbG9jazo6cmVu
ZGVyTmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuICJSZW5kZXJCbG9jayI7CiB9CiAKK2lubGluZSBz
dGF0aWMgYm9vbCBpc1Zpc2libGVSZW5kZXJUZXh0KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7
CisgICAgaWYgKCFyZW5kZXJlci0+aXNUZXh0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFJlbmRlclRleHQqIHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQocmVuZGVyZXIpOworICAg
IEludFJlY3QgYm91bmRpbmdCb3ggPSByZW5kZXJUZXh0LT5saW5lc0JvdW5kaW5nQm94KCk7Cisg
ICAgcmV0dXJuIGJvdW5kaW5nQm94LndpZHRoKCkgPiAwICYmIGJvdW5kaW5nQm94LmhlaWdodCgp
ID4gMCAmJiAhcmVuZGVyVGV4dC0+dGV4dCgpLT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCk7Cit9
CisKK2lubGluZSBzdGF0aWMgYm9vbCByZXNpemVUZXh0UGVybWl0dGVkKFJlbmRlck9iamVjdCog
cmVuZGVyKQoreworICAgIC8vIFdlIGRpc2FsbG93IHJlc2l6aW5nIGZvciB0ZXh0IGlucHV0IGZp
ZWxkcyBhbmQgdGV4dGFyZWEgdG8gYWRkcmVzcyA8cmRhcjovL3Byb2JsZW0vNTc5Mjk4Nz4gYW5k
IDxyZGFyOi8vcHJvYmxlbS84MDIxMTIzPgorICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBy
ZW5kZXItPnBhcmVudCgpOworICAgIHdoaWxlIChyZW5kZXJlcikgeworICAgICAgICAvLyBHZXQg
dGhlIGZpcnN0IG5vbi1zaGFkb3cgSFRNTEVsZW1lbnQgYW5kIHNlZSBpZiBpdCdzIGFuIGlucHV0
LgorICAgICAgICBpZiAocmVuZGVyZXItPm5vZGUoKSAmJiByZW5kZXJlci0+bm9kZSgpLT5pc0hU
TUxFbGVtZW50KCkgJiYgIXJlbmRlcmVyLT5ub2RlKCktPmlzU2hhZG93Um9vdCgpKSB7CisgICAg
ICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4o
cmVuZGVyZXItPm5vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gIWVsZW1lbnQtPmhhc1RhZ05h
bWUoaW5wdXRUYWcpICYmICFlbGVtZW50LT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKTsKKyAgICAg
ICAgfQorICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworaW50IFJlbmRlckJsb2NrOjppbW1lZGlhdGVMaW5lQ291bnQo
KSBjb25zdAoreworICAgIC8vIENvcGllZCBhbmQgbW9kaWZpZWQgZnJvbSBSZW5kZXJCbG9jazo6
bGluZUNvdW50LgorICAgIC8vIE9ubHkgZGVzY2VuZCBpbnRvIGxpc3QgaXRlbXMuCisgICAgaW50
IGNvdW50ID0gMDsKKyAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsK
KyAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCisgICAgICAgICAgICBmb3IgKFJvb3RJbmxp
bmVCb3gqIGJveCA9IGZpcnN0Um9vdEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFJvb3RCb3go
KSkKKyAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICBlbHNlCisgICAgICAgICAgICBm
b3IgKFJlbmRlck9iamVjdCogb2JqID0gZmlyc3RDaGlsZCgpOyBvYmo7IG9iaiA9IG9iai0+bmV4
dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgICAgIGlmIChvYmotPmlzTGlzdEl0ZW0oKSkKKyAg
ICAgICAgICAgICAgICAgICAgY291bnQgKz0gdG9SZW5kZXJCbG9jayhvYmopLT5saW5lQ291bnQo
KTsKKyAgICAgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMg
Ym9vbCBpbmNsdWRlTm9uQmxvY2tzT3JMaXN0SXRlbXMoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5k
ZXIpCit7CisgICAgcmV0dXJuICFyZW5kZXItPmlzUmVuZGVyQmxvY2soKSB8fCByZW5kZXItPmlz
TGlzdEl0ZW0oKTsKK30KKworLy8gIEZvciBub3csIHdlIGF1dG8gc2l6ZSBzaW5nbGUgbGluZXMg
b2YgdGV4dCB0aGUgc2FtZSBhcyBtdWx0aXBsZSBsaW5lcy4KKy8vICBXZSd2ZSBiZWVuIGV4cGVy
aW1lbnRpbmcgd2l0aCBsb3cgdmFsdWVzIGZvciBzaW5nbGUgbGluZXMgb2YgdGV4dC4KK3N0YXRp
YyBpbmxpbmUgZmxvYXQgb25lTGluZVRleHRNdWx0aXBsaWVyKGZsb2F0IHNwZWNpZmllZFNpemUp
Cit7CisgICAgcmV0dXJuIG1heCgoMS4wZiAvIGxvZzEwZihzcGVjaWZpZWRTaXplKSAqIDEuN2Yp
LCAxLjBmKTsKK30KKworc3RhdGljIGlubGluZSBmbG9hdCB0ZXh0TXVsdGlwbGllcihmbG9hdCBz
cGVjaWZpZWRTaXplKQoreworICAgIHJldHVybiBtYXgoKDEuMGYgLyBsb2cxMGYoc3BlY2lmaWVk
U2l6ZSkgKiAxLjk1ZiksIDEuMGYpOworfQorCit2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RDb21w
dXRlZEZvbnRTaXplcyhmbG9hdCBzaXplLCBmbG9hdCB2aXNpYmxlV2lkdGgpCit7CisgICAgLy8g
RG9uJ3QgZG8gYW55IHdvcmsgaWYgdGhlIGJsb2NrIGlzIHNtYWxsZXIgdGhhbiB0aGUgdmlzaWJs
ZSBhcmVhLgorICAgIGlmICh2aXNpYmxlV2lkdGggPj0gd2lkdGgoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgdW5zaWduZWQgbGluZUNvdW50OworICAgIGlmIChtX2xpbmVDb3VudEZvclRleHRB
dXRvc2l6aW5nICE9IE5PVF9TRVQpCisgICAgICAgIGxpbmVDb3VudCA9IG1fbGluZUNvdW50Rm9y
VGV4dEF1dG9zaXppbmc7CisgICAgZWxzZSB7CisgICAgICAgIGludCBjb3VudCA9IGltbWVkaWF0
ZUxpbmVDb3VudCgpOworICAgICAgICBpZiAoIWNvdW50KQorICAgICAgICAgICAgbGluZUNvdW50
ID0gTk9fTElORTsKKyAgICAgICAgZWxzZSBpZiAoY291bnQgPT0gMSkKKyAgICAgICAgICAgIGxp
bmVDb3VudCA9IE9ORV9MSU5FOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsaW5lQ291bnQg
PSBNVUxUSV9MSU5FOworICAgIH0KKworICAgIEFTU0VSVChsaW5lQ291bnQgIT0gTk9UX1NFVCk7
CisgICAgaWYgKGxpbmVDb3VudCA9PSBOT19MSU5FKQorICAgICAgICByZXR1cm47CisKKyAgICBm
bG9hdCBhY3R1YWxXaWR0aCA9IG1fd2lkdGhGb3JUZXh0QXV0b3NpemluZyAhPSAtMSA/IHN0YXRp
Y19jYXN0PGZsb2F0PihtX3dpZHRoRm9yVGV4dEF1dG9zaXppbmcpIDogc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHdpZHRoKCkpOworICAgIGZsb2F0IHNjYWxlID0gdmlzaWJsZVdpZHRoIC8gYWN0dWFsV2lk
dGg7CisgICAgZmxvYXQgbWluRm9udFNpemUgPSByb3VuZGYoc2l6ZSAvIHNjYWxlKTsKKworICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBkZXNjZW5kZW50ID0gdHJhdmVyc2VOZXh0KHRoaXMsIGluY2x1
ZGVOb25CbG9ja3NPckxpc3RJdGVtcyk7IGRlc2NlbmRlbnQ7IGRlc2NlbmRlbnQgPSBkZXNjZW5k
ZW50LT50cmF2ZXJzZU5leHQodGhpcywgaW5jbHVkZU5vbkJsb2Nrc09yTGlzdEl0ZW1zKSkgewor
ICAgICAgICBpZiAoIWlzVmlzaWJsZVJlbmRlclRleHQoZGVzY2VuZGVudCkgfHwgIXJlc2l6ZVRl
eHRQZXJtaXR0ZWQoZGVzY2VuZGVudCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBSZW5kZXJUZXh0KiB0ZXh0ID0gdG9SZW5kZXJUZXh0KGRlc2NlbmRlbnQpOworICAgICAgICBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUgPSB0ZXh0LT5zdHlsZSgpOworCisgICAgICAgIGlmICghb2xk
U3R5bGUgfHwgIW9sZFN0eWxlLT50ZXh0U2l6ZUFkanVzdCgpLmlzQXV0bygpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9
IG9sZFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZmxvYXQgc3BlY2lmaWVkU2l6
ZSA9IGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCk7CisgICAgICAgIGZsb2F0IHNjYWxl
ZFNpemUgPSByb3VuZGYoc3BlY2lmaWVkU2l6ZSAqIHNjYWxlKTsKKyAgICAgICAgaWYgKHNjYWxl
ZFNpemUgPiAwICYmIHNjYWxlZFNpemUgPCBtaW5Gb250U2l6ZSkgeworICAgICAgICAgICAgLy8g
UmVjb3JkIHRoZSB3aWR0aCBvZiB0aGUgYmxvY2sgYW5kIHRoZSBsaW5lIGNvdW50IHRoZSBmaXJz
dCB0aW1lIHdlIHJlc2l6ZSB0ZXh0IGFuZCB1c2UgaXQgZnJvbSB0aGVuIG9uIGZvciB0ZXh0IHJl
c2l6aW5nLgorICAgICAgICAgICAgLy8gVGhpcyBtYWtlcyB0ZXh0IHJlc2l6aW5nIGNvbnNpc3Rl
bnQgZXZlbiBpZiB0aGUgYmxvY2sncyB3aWR0aCBvciBsaW5lIGNvdW50IGNoYW5nZXMgKHdoaWNo
IGNhbiBiZSBjYXVzZWQgYnkgdGV4dCByZXNpemluZyBpdHNlbGYpLgorICAgICAgICAgICAgaWYg
KG1fbGluZUNvdW50Rm9yVGV4dEF1dG9zaXppbmcgPT0gTk9UX1NFVCkKKyAgICAgICAgICAgICAg
ICBtX2xpbmVDb3VudEZvclRleHRBdXRvc2l6aW5nID0gbGluZUNvdW50OworICAgICAgICAgICAg
aWYgKG1fd2lkdGhGb3JUZXh0QXV0b3NpemluZyA9PSAtMSkKKyAgICAgICAgICAgICAgICBtX3dp
ZHRoRm9yVGV4dEF1dG9zaXppbmcgPSBhY3R1YWxXaWR0aDsKKworICAgICAgICAgICAgZmxvYXQg
Y2FuZGlkYXRlTmV3U2l6ZSA9IDA7CisgICAgICAgICAgICBpZiAobGluZUNvdW50ID09IE9ORV9M
SU5FKQorICAgICAgICAgICAgICAgIGNhbmRpZGF0ZU5ld1NpemUgPSByb3VuZGYobWluKG1pbkZv
bnRTaXplLCBzcGVjaWZpZWRTaXplICogb25lTGluZVRleHRNdWx0aXBsaWVyKHNwZWNpZmllZFNp
emUpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2FuZGlkYXRlTmV3U2l6
ZSA9IHJvdW5kZihtaW4obWluRm9udFNpemUsIHNwZWNpZmllZFNpemUgKiB0ZXh0TXVsdGlwbGll
cihzcGVjaWZpZWRTaXplKSkpOworCisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlTmV3U2l6ZSA+
IHNwZWNpZmllZFNpemUgJiYgY2FuZGlkYXRlTmV3U2l6ZSAhPSBmb250RGVzY3JpcHRpb24uY29t
cHV0ZWRTaXplKCkgJiYgdGV4dC0+bm9kZSgpKQorICAgICAgICAgICAgICAgIGRvY3VtZW50KCkt
PmFkZEF1dG9TaXppbmdOb2RlKHRleHQtPm5vZGUoKSwgY2FuZGlkYXRlTmV3U2l6ZSk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKIGlubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVj
dHM6OmNsZWFyKCkKIHsKICAgICBtX3NldC5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaAppbmRleCA3MDEzODIwLi40ZDEwNGM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtNTcsNiArNTcsMTMgQEAgdHlwZWRlZiBNaWRwb2ludFN0
YXRlPElubGluZUl0ZXJhdG9yPiBMaW5lTWlkcG9pbnRTdGF0ZTsKIAogZW51bSBDYXJldFR5cGUg
eyBDdXJzb3JDYXJldCwgRHJhZ0NhcmV0IH07CiAKK2VudW0gTGluZUNvdW50IHsKKyAgICBOT1Rf
U0VUID0gMCwKKyAgICBOT19MSU5FID0gMSwKKyAgICBPTkVfTElORSA9IDIsCisgICAgTVVMVElf
TElORSA9IDMKK307CisKIGVudW0gVGV4dFJ1bkZsYWcgewogICAgIERlZmF1bHRUZXh0UnVuRmxh
Z3MgPSAwLAogICAgIFJlc3BlY3REaXJlY3Rpb24gPSAxIDw8IDAsCkBAIC0yOTAsNiArMjk3LDE0
IEBAIHB1YmxpYzoKICAgICB9OwogICAgIE1hcmdpblZhbHVlcyBtYXJnaW5WYWx1ZXNGb3JDaGls
ZChSZW5kZXJCb3gqIGNoaWxkKTsKIAorICAgIGludCBpbW1lZGlhdGVMaW5lQ291bnQoKSBjb25z
dDsKKyAgICB2b2lkIGFkanVzdENvbXB1dGVkRm9udFNpemVzKGZsb2F0IHNpemUsIGZsb2F0IHZp
c2libGVXaWR0aCk7CisgICAgdm9pZCByZXNldENvbXB1dGVkRm9udFNpemUoKQorICAgIHsKKyAg
ICAgICAgbV93aWR0aEZvclRleHRBdXRvc2l6aW5nID0gLTE7CisgICAgICAgIG1fbGluZUNvdW50
Rm9yVGV4dEF1dG9zaXppbmcgPSBOT1RfU0VUOworICAgIH0KKwogICAgIHZpcnR1YWwgdm9pZCBz
Y3JvbGxiYXJzQ2hhbmdlZChib29sIC8qaG9yaXpvbnRhbFNjcm9sbGJhckNoYW5nZWQqLywgYm9v
bCAvKnZlcnRpY2FsU2Nyb2xsYmFyQ2hhbmdlZCovKSB7IH07CiAKICAgICBMYXlvdXRVbml0IGxv
Z2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudChSZW5kZXJSZWdpb24qLCBMYXlvdXRVbml0IG9mZnNl
dEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UpIGNvbnN0OwpAQCAtMTA0Niw2ICsxMDYxLDkgQEAg
cHJpdmF0ZToKICAgICBib29sIG1fYmVpbmdEZXN0cm95ZWQgOiAxOwogICAgIGJvb2wgbV9oYXNQ
b3NpdGlvbmVkRmxvYXRzIDogMTsKIAorICAgIGludCBtX3dpZHRoRm9yVGV4dEF1dG9zaXppbmc7
CisgICAgdW5zaWduZWQgbV9saW5lQ291bnRGb3JUZXh0QXV0b3NpemluZyA6IDI7CisKICAgICAv
LyBSZW5kZXJSdWJ5QmFzZSBvYmplY3RzIG5lZWQgdG8gYmUgYWJsZSB0byBzcGxpdCBhbmQgbWVy
Z2UsIG1vdmluZyB0aGVpciBjaGlsZHJlbiBhcm91bmQKICAgICAvLyAoY2FsbGluZyBtb3ZlQ2hp
bGRUbywgbW92ZUFsbENoaWxkcmVuVG8sIGFuZCBtYWtlQ2hpbGRyZW5Ob25JbmxpbmUpLgogICAg
IGZyaWVuZCBjbGFzcyBSZW5kZXJSdWJ5QmFzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKaW5kZXggMWY1Mjk5NS4uZjc4NzQ4YSAxMDA3NTUKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTQ1NCw2ICs0NTQsMTkxIEBAIFJlbmRlck9i
amVjdCogUmVuZGVyT2JqZWN0OjpsYXN0TGVhZkNoaWxkKCkgY29uc3QKICAgICByZXR1cm4gcjsK
IH0KIAorUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OnRyYXZlcnNlTmV4dChjb25zdCBSZW5k
ZXJPYmplY3QqIHN0YXlXaXRoaW4pIGNvbnN0Cit7CisgICAgaWYgKGZpcnN0Q2hpbGQoKSkgewor
ICAgICAgICBBU1NFUlQoIXN0YXlXaXRoaW4gfHwgZmlyc3RDaGlsZCgpLT5pc0Rlc2NlbmRhbnRP
ZihzdGF5V2l0aGluKSk7CisgICAgICAgIHJldHVybiBmaXJzdENoaWxkKCk7CisgICAgfQorCisg
ICAgaWYgKHRoaXMgPT0gc3RheVdpdGhpbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAo
bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBBU1NFUlQoIXN0YXlXaXRoaW4gfHwgbmV4dFNpYmxp
bmcoKS0+aXNEZXNjZW5kYW50T2Yoc3RheVdpdGhpbikpOworICAgICAgICByZXR1cm4gbmV4dFNp
YmxpbmcoKTsKKyAgICB9CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBuID0gdGhpczsKKyAgICB3
aGlsZSAobiAmJiAhbi0+bmV4dFNpYmxpbmcoKSAmJiAoIXN0YXlXaXRoaW4gfHwgbi0+cGFyZW50
KCkgIT0gc3RheVdpdGhpbikpCisgICAgICAgIG4gPSBuLT5wYXJlbnQoKTsKKworICAgIGlmIChu
KSB7CisgICAgICAgIEFTU0VSVCghc3RheVdpdGhpbiB8fCAhbi0+bmV4dFNpYmxpbmcoKSB8fCBu
LT5uZXh0U2libGluZygpLT5pc0Rlc2NlbmRhbnRPZihzdGF5V2l0aGluKSk7CisgICAgICAgIHJl
dHVybiBuLT5uZXh0U2libGluZygpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitSZW5k
ZXJPYmplY3QqIFJlbmRlck9iamVjdDo6dHJhdmVyc2VOZXh0KGNvbnN0IFJlbmRlck9iamVjdCog
c3RheVdpdGhpbiwgSGVpZ2h0VHlwZVRyYXZlcnNlTmV4dEluY2x1c2lvbkZ1bmN0aW9uIGluY2x1
c2lvbkZ1bmN0aW9uLCBpbnQgJmN1cnJlbnREZXB0aCwgaW50ICZuZXdGaXhlZERlcHRoKSBjb25z
dAoreworICAgIEJsb2NrQ29udGVudEhlaWdodFR5cGUgb3ZlcmZsb3dUeXBlOworCisgICAgLy8g
Q2hlY2sgZm9yIHN1aXRhYmxlIGNoaWxkcmVuLgorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
KyAgICAgICAgb3ZlcmZsb3dUeXBlID0gaW5jbHVzaW9uRnVuY3Rpb24oY2hpbGQpOworICAgICAg
ICBpZiAob3ZlcmZsb3dUeXBlICE9IEZpeGVkSGVpZ2h0KSB7CisgICAgICAgICAgICBjdXJyZW50
RGVwdGgrKzsKKyAgICAgICAgICAgIGlmIChvdmVyZmxvd1R5cGUgPT0gT3ZlcmZsb3dIZWlnaHQp
CisgICAgICAgICAgICAgICAgIG5ld0ZpeGVkRGVwdGggPSBjdXJyZW50RGVwdGg7CisgICAgICAg
ICAgICBBU1NFUlQoIXN0YXlXaXRoaW4gfHwgY2hpbGQtPmlzRGVzY2VuZGFudE9mKHN0YXlXaXRo
aW4pKTsKKyAgICAgICAgICAgIHJldHVybiBjaGlsZDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmICh0aGlzID09IHN0YXlXaXRoaW4pCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gTm93
IHdlIHRyYXZlcnNlIG90aGVyIG5vZGVzIGlmIHRoZXkgZXhpc3QsIG90aGVyd2lzZQorICAgIC8v
IHdlIGdvIHRvIHRoZSBwYXJlbnQgbm9kZSBhbmQgdHJ5IGRvaW5nIHRoZSBzYW1lLgorICAgIGNv
bnN0IFJlbmRlck9iamVjdCogbiA9IHRoaXM7CisgICAgd2hpbGUgKG4pIHsKKyAgICAgICAgd2hp
bGUgKG4gJiYgIW4tPm5leHRTaWJsaW5nKCkgJiYgKCFzdGF5V2l0aGluIHx8IG4tPnBhcmVudCgp
ICE9IHN0YXlXaXRoaW4pKSB7CisgICAgICAgICAgICBuID0gbi0+cGFyZW50KCk7CisgICAgICAg
ICAgICBjdXJyZW50RGVwdGgtLTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW4pCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIHNpYmxpbmcgPSBuLT5u
ZXh0U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dFNpYmxpbmcoKSkg
eworICAgICAgICAgICAgb3ZlcmZsb3dUeXBlID0gaW5jbHVzaW9uRnVuY3Rpb24oc2libGluZyk7
CisgICAgICAgICAgICBpZiAob3ZlcmZsb3dUeXBlICE9IEZpeGVkSGVpZ2h0KSB7CisgICAgICAg
ICAgICAgICAgaWYgKG92ZXJmbG93VHlwZSA9PSBPdmVyZmxvd0hlaWdodCkKKyAgICAgICAgICAg
ICAgICAgICAgbmV3Rml4ZWREZXB0aCA9IGN1cnJlbnREZXB0aDsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoIXN0YXlXaXRoaW4gfHwgIW4tPm5leHRTaWJsaW5nKCkgfHwgbi0+bmV4dFNpYmxpbmco
KS0+aXNEZXNjZW5kYW50T2Yoc3RheVdpdGhpbikpOworICAgICAgICAgICAgICAgIHJldHVybiBz
aWJsaW5nOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghc3RheVdpdGhp
biB8fCBuLT5wYXJlbnQoKSAhPSBzdGF5V2l0aGluKSB7CisgICAgICAgICAgICBuID0gbi0+cGFy
ZW50KCk7CisgICAgICAgICAgICBjdXJyZW50RGVwdGgtLTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK1JlbmRlck9iamVj
dCogUmVuZGVyT2JqZWN0Ojp0cmF2ZXJzZU5leHQoY29uc3QgUmVuZGVyT2JqZWN0KiBzdGF5V2l0
aGluLCBUcmF2ZXJzZU5leHRJbmNsdXNpb25GdW5jdGlvbiBpbmNsdXNpb25GdW5jdGlvbikgY29u
c3QKK3sKKyAgICBmb3IgKFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChpbmNsdXNpb25G
dW5jdGlvbihjaGlsZCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghc3RheVdpdGhpbiB8fCBjaGls
ZC0+aXNEZXNjZW5kYW50T2Yoc3RheVdpdGhpbikpOworICAgICAgICAgICAgcmV0dXJuIGNoaWxk
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRoaXMgPT0gc3RheVdpdGhpbikKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBmb3IgKFJlbmRlck9iamVjdCAqc2libGluZyA9IG5leHRTaWJs
aW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0U2libGluZygpKSB7CisgICAg
ICAgIGlmIChpbmNsdXNpb25GdW5jdGlvbihzaWJsaW5nKSkgeworICAgICAgICAgICAgQVNTRVJU
KCFzdGF5V2l0aGluIHx8IHNpYmxpbmctPmlzRGVzY2VuZGFudE9mKHN0YXlXaXRoaW4pKTsKKyAg
ICAgICAgICAgIHJldHVybiBzaWJsaW5nOworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3Qg
UmVuZGVyT2JqZWN0KiBuID0gdGhpczsKKyAgICB3aGlsZSAobikgeworICAgICAgICB3aGlsZSAo
biAmJiAhbi0+bmV4dFNpYmxpbmcoKSAmJiAoIXN0YXlXaXRoaW4gfHwgbi0+cGFyZW50KCkgIT0g
c3RheVdpdGhpbikpCisgICAgICAgICAgICBuID0gbi0+cGFyZW50KCk7CisgICAgICAgIGlmIChu
KSB7CisgICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCAqc2libGluZyA9IG4tPm5leHRTaWJs
aW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0U2libGluZygpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGluY2x1c2lvbkZ1bmN0aW9uKHNpYmxpbmcpKSB7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghc3RheVdpdGhpbiB8fCAhbi0+bmV4dFNpYmxpbmcoKSB8fCBuLT5u
ZXh0U2libGluZygpLT5pc0Rlc2NlbmRhbnRPZihzdGF5V2l0aGluKSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzaWJsaW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICgoIXN0YXlXaXRoaW4gfHwgbi0+cGFyZW50KCkgIT0gc3RheVdpdGhp
bikpCisgICAgICAgICAgICAgICAgbiA9IG4tPnBhcmVudCgpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAw
OworfQorCitzdGF0aWMgUmVuZGVyT2JqZWN0OjpCbG9ja0NvbnRlbnRIZWlnaHRUeXBlIGluY2x1
ZGVOb25GaXhlZEhlaWdodChjb25zdCBSZW5kZXJPYmplY3QgKnJlbmRlcikKK3sKKyAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSByZW5kZXItPnN0eWxlKCk7CisgICAgaWYgKHN0eWxlKSB7CisgICAg
ICAgIGlmIChzdHlsZS0+aGVpZ2h0KCkudHlwZSgpID09IEZpeGVkKSB7CisgICAgICAgICAgICBp
ZiAocmVuZGVyLT5pc1JlbmRlckJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBSZW5k
ZXJCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJCbG9jayo+KHJlbmRlcik7
CisgICAgICAgICAgICAgICAgLy8gRm9yIGZpeGVkIGhlaWdodCBzdHlsZXMsIGlmIHRoZSBvdmVy
ZmxvdyBzaXplIG9mIHRoZSBlbGVtZW50IHNwaWxscyBvdXQgb2YgdGhlIHNwZWNpZmllZAorICAg
ICAgICAgICAgICAgIC8vIGhlaWdodCwgYXNzdW1lIHdlIGNhbiBhcHBseSB0ZXh0IGF1dG8tc2l6
aW5nLgorICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT1ZJU0lCTEUg
JiYgc3R5bGUtPmhlaWdodCgpLnZhbHVlKCkgPCBibG9jay0+aGVpZ2h0KCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBSZW5kZXJPYmplY3Q6Ok92ZXJmbG93SGVpZ2h0OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6Rml4ZWRIZWlnaHQ7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6RmxleGlibGVIZWlnaHQ7Cit9
CisKK3ZvaWQgUmVuZGVyT2JqZWN0OjphZGp1c3RDb21wdXRlZEZvbnRTaXplc09uQmxvY2tzKGZs
b2F0IHNpemUsIGZsb2F0IHZpc2libGVXaWR0aCkKK3sKKyAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSB2aWV3KCktPmZyYW1lVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgpOworICAgIGlmICghZG9j
dW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxpbnQ+IGRlcHRoU3RhY2s7Cisg
ICAgaW50IGN1cnJlbnREZXB0aCA9IDA7CisgICAgaW50IG5ld0ZpeGVkRGVwdGggPSAwOworCisg
ICAgLy8gV2UgZG9uJ3QgYXBwbHkgYXV0b3NpemluZyB0byBub2RlcyB3aXRoIGZpeGVkIGhlaWdo
dCBub3JtYWxseS4KKyAgICAvLyBCdXQgd2UgYXBwbHkgaXQgdG8gbm9kZXMgd2hpY2ggYXJlIGxv
Y2F0ZWQgZGVlcCBlbm91Z2gKKyAgICAvLyAobmVzdGluZyBkZXB0aCBpcyBncmVhdGVyIHRoYW4g
c29tZSBjb25zdCkgaW5zaWRlIG9mIGEgcGFyZW50IGJsb2NrCisgICAgLy8gd2hpY2ggaGFzIGZp
eGVkIGhlaWdodCBidXQgaXRzIGNvbnRlbnQgb3ZlcmZsb3dzIGludGVudGlvbmFsbHkuCisgICAg
Zm9yIChSZW5kZXJPYmplY3QqIGRlc2NlbmRlbnQgPSB0cmF2ZXJzZU5leHQodGhpcywgaW5jbHVk
ZU5vbkZpeGVkSGVpZ2h0LCBjdXJyZW50RGVwdGgsIG5ld0ZpeGVkRGVwdGgpOyBkZXNjZW5kZW50
OyBkZXNjZW5kZW50ID0gZGVzY2VuZGVudC0+dHJhdmVyc2VOZXh0KHRoaXMsIGluY2x1ZGVOb25G
aXhlZEhlaWdodCwgY3VycmVudERlcHRoLCBuZXdGaXhlZERlcHRoKSkgeworICAgICAgICB3aGls
ZSAoZGVwdGhTdGFjay5zaXplKCkgPiAwICYmIGN1cnJlbnREZXB0aCA8PSBkZXB0aFN0YWNrW2Rl
cHRoU3RhY2suc2l6ZSgpIC0gMV0pCisgICAgICAgICAgICBkZXB0aFN0YWNrLnJlbW92ZShkZXB0
aFN0YWNrLnNpemUoKSAtIDEpOworICAgICAgICBpZiAobmV3Rml4ZWREZXB0aCkKKyAgICAgICAg
ICAgIGRlcHRoU3RhY2suYXBwZW5kKG5ld0ZpeGVkRGVwdGgpOworCisgICAgICAgIGludCBzdGFj
a1NpemUgPSBkZXB0aFN0YWNrLnNpemUoKTsKKyAgICAgICAgaWYgKGRlc2NlbmRlbnQtPmlzUmVu
ZGVyQmxvY2soKSAmJiAhZGVzY2VuZGVudC0+aXNMaXN0SXRlbSgpICYmICghc3RhY2tTaXplIHx8
IGN1cnJlbnREZXB0aCAtIGRlcHRoU3RhY2tbc3RhY2tTaXplIC0gMV0gPiBUZXh0QXV0b1Npemlu
Z0ZpeGVkSGVpZ2h0RGVwdGgpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sq
PihkZXNjZW5kZW50KS0+YWRqdXN0Q29tcHV0ZWRGb250U2l6ZXMoc2l6ZSwgdmlzaWJsZVdpZHRo
KTsKKyAgICAgICAgbmV3Rml4ZWREZXB0aCA9IDA7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHN0
eWxlIGZyb20gYXV0by1zaXppbmcgdGFibGUgdGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkLgorICAg
IGRvY3VtZW50LT52YWxpZGF0ZUF1dG9TaXppbmdOb2RlcygpOworfQorCit2b2lkIFJlbmRlck9i
amVjdDo6cmVzZXRUZXh0QXV0b3NpemluZygpCit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
dmlldygpLT5mcmFtZVZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3Vt
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBkb2N1bWVudC0+cmVzZXRBdXRvU2l6aW5nTm9k
ZXMoKTsKKworICAgIFZlY3RvcjxpbnQ+IGRlcHRoU3RhY2s7CisgICAgaW50IGN1cnJlbnREZXB0
aCA9IDA7CisgICAgaW50IG5ld0ZpeGVkRGVwdGggPSAwOworCisgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGRlc2NlbmRlbnQgPSB0cmF2ZXJzZU5leHQodGhpcywgaW5jbHVkZU5vbkZpeGVkSGVpZ2h0
LCBjdXJyZW50RGVwdGgsIG5ld0ZpeGVkRGVwdGgpOyBkZXNjZW5kZW50OyBkZXNjZW5kZW50ID0g
ZGVzY2VuZGVudC0+dHJhdmVyc2VOZXh0KHRoaXMsIGluY2x1ZGVOb25GaXhlZEhlaWdodCwgY3Vy
cmVudERlcHRoLCBuZXdGaXhlZERlcHRoKSkgeworICAgICAgICB3aGlsZSAoZGVwdGhTdGFjay5z
aXplKCkgPiAwICYmIGN1cnJlbnREZXB0aCA8PSBkZXB0aFN0YWNrW2RlcHRoU3RhY2suc2l6ZSgp
IC0gMV0pCisgICAgICAgICAgICBkZXB0aFN0YWNrLnJlbW92ZShkZXB0aFN0YWNrLnNpemUoKSAt
IDEpOworICAgICAgICBpZiAobmV3Rml4ZWREZXB0aCkKKyAgICAgICAgICAgIGRlcHRoU3RhY2su
YXBwZW5kKG5ld0ZpeGVkRGVwdGgpOworCisgICAgICAgIGludCBzdGFja1NpemUgPSBkZXB0aFN0
YWNrLnNpemUoKTsKKyAgICAgICAgaWYgKGRlc2NlbmRlbnQtPmlzUmVuZGVyQmxvY2soKSAmJiAh
ZGVzY2VuZGVudC0+aXNMaXN0SXRlbSgpICYmICghc3RhY2tTaXplIHx8IGN1cnJlbnREZXB0aCAt
IGRlcHRoU3RhY2tbc3RhY2tTaXplIC0gMV0gPiBUZXh0QXV0b1NpemluZ0ZpeGVkSGVpZ2h0RGVw
dGgpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihkZXNjZW5kZW50KS0+
cmVzZXRDb21wdXRlZEZvbnRTaXplKCk7CisgICAgICAgIG5ld0ZpeGVkRGVwdGggPSAwOworICAg
IH0KK30KKwogc3RhdGljIHZvaWQgYWRkTGF5ZXJzKFJlbmRlck9iamVjdCogb2JqLCBSZW5kZXJM
YXllciogcGFyZW50TGF5ZXIsIFJlbmRlck9iamVjdComIG5ld09iamVjdCwKICAgICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJMYXllciomIGJlZm9yZUNoaWxkKQogewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDY4ODc3MWIuLmRjYzk2MzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTE4NSw2ICsxODUsMjcgQEAgcHVibGlj
OgogICAgIFJlbmRlck9iamVjdCogZmlyc3RMZWFmQ2hpbGQoKSBjb25zdDsKICAgICBSZW5kZXJP
YmplY3QqIGxhc3RMZWFmQ2hpbGQoKSBjb25zdDsKIAorICAgIC8vIE1pbmltYWwgZGlzdGFuY2Ug
YmV0d2VlbiB0aGUgYmxvY2sgd2l0aCBmaXhlZCBoZWlnaHQgYW5kIG92ZXJmbG93aW5nIGNvbnRl
bnQgYW5kIHRoZSB0ZXh0IGJsb2NrIHRvIGFwcGx5IHRleHQgYXV0b3NpemluZy4KKyAgICAvLyBU
aGUgZ3JlYXRlciB0aGlzIGNvbnN0YW50IGlzIHRoZSBtb3JlIHBvdGVudGlhbCBwbGFjZXMgd2Ug
aGF2ZSB3aGVyZSBhdXRvc2l6aW5nIGlzIHR1cm5lZCBvZmYuCisgICAgLy8gU28gaXQgc2hvdWxk
IGJlIGFzIGxvdyBhcyBwb3NzaWJsZS4gVGhlcmUgYXJlIHNpdGVzIHRoYXQgYnJlYWsgYXQgMi4K
KyAgICBzdGF0aWMgY29uc3QgaW50IFRleHRBdXRvU2l6aW5nRml4ZWRIZWlnaHREZXB0aCA9IDM7
CisKKyAgICBlbnVtIEJsb2NrQ29udGVudEhlaWdodFR5cGUgeworICAgICAgICBGaXhlZEhlaWdo
dCwKKyAgICAgICAgRmxleGlibGVIZWlnaHQsCisgICAgICAgIE92ZXJmbG93SGVpZ2h0CisgICAg
fTsKKworICAgIFJlbmRlck9iamVjdCogdHJhdmVyc2VOZXh0KGNvbnN0IFJlbmRlck9iamVjdCog
c3RheVdpdGhpbikgY29uc3Q7CisgICAgdHlwZWRlZiBib29sICgqVHJhdmVyc2VOZXh0SW5jbHVz
aW9uRnVuY3Rpb24pKGNvbnN0IFJlbmRlck9iamVjdCopOworICAgIHR5cGVkZWYgQmxvY2tDb250
ZW50SGVpZ2h0VHlwZSAoKkhlaWdodFR5cGVUcmF2ZXJzZU5leHRJbmNsdXNpb25GdW5jdGlvbiko
Y29uc3QgUmVuZGVyT2JqZWN0Kik7CisKKyAgICBSZW5kZXJPYmplY3QqIHRyYXZlcnNlTmV4dChj
b25zdCBSZW5kZXJPYmplY3QqIHN0YXlXaXRoaW4sIFRyYXZlcnNlTmV4dEluY2x1c2lvbkZ1bmN0
aW9uIGluY2x1c2lvbkZ1bmN0aW9uKSBjb25zdDsKKyAgICBSZW5kZXJPYmplY3QqIHRyYXZlcnNl
TmV4dChjb25zdCBSZW5kZXJPYmplY3QqIHN0YXlXaXRoaW4sIEhlaWdodFR5cGVUcmF2ZXJzZU5l
eHRJbmNsdXNpb25GdW5jdGlvbiBpbmNsdXNpb25GdW5jdGlvbiwgaW50JiBjdXJyZW50RGVwdGgs
IGludCYgbmV3Rml4ZWREZXB0aCkgY29uc3Q7CisKKyAgICB2b2lkIGFkanVzdENvbXB1dGVkRm9u
dFNpemVzT25CbG9ja3MoZmxvYXQgc2l6ZSwgZmxvYXQgdmlzaWJsZVdpZHRoKTsKKyAgICB2b2lk
IHJlc2V0VGV4dEF1dG9zaXppbmcoKTsKKwogICAgIC8vIFRoZSBmb2xsb3dpbmcgc2l4IGZ1bmN0
aW9ucyBhcmUgdXNlZCB3aGVuIHRoZSByZW5kZXIgdHJlZSBoaWVyYXJjaHkgY2hhbmdlcyB0byBt
YWtlIHN1cmUgbGF5ZXJzIGdldAogICAgIC8vIHByb3Blcmx5IGFkZGVkIGFuZCByZW1vdmVkLiAg
U2luY2UgY29udGFpbmVyc2hpcCBjYW4gYmUgaW1wbGVtZW50ZWQgYnkgYW55IHN1YmNsYXNzLCBh
bmQgc2luY2UgYSBoaWVyYXJjaHkKICAgICAvLyBjYW4gY29udGFpbiBhIG1peHR1cmUgb2YgYm94
ZXMgYW5kIG90aGVyIG9iamVjdCB0eXBlcywgdGhlc2UgZnVuY3Rpb25zIG5lZWQgdG8gYmUgaW4g
dGhlIGJhc2UgY2xhc3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAppbmRleCAz
OTE4MzM2Li5kZTlhZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKQEAg
LTEyNiw3ICsxMjYsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCk7CiAgICAgYm9vbCBpc0FsbENvbGxh
cHNpYmxlV2hpdGVzcGFjZSgpOwotICAgIAorCisgICAgZmxvYXQgY2FuZGlkYXRlQ29tcHV0ZWRU
ZXh0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuZGlkYXRlQ29tcHV0ZWRUZXh0U2l6ZTsgfQor
ICAgIHZvaWQgc2V0Q2FuZGlkYXRlQ29tcHV0ZWRUZXh0U2l6ZShmbG9hdCBzKSB7IG1fY2FuZGlk
YXRlQ29tcHV0ZWRUZXh0U2l6ZSA9IHM7IH0KKwogICAgIGJvb2wga25vd25Ub0hhdmVOb092ZXJm
bG93QW5kTm9GYWxsYmFja0ZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9rbm93blRvSGF2ZU5vT3Zl
cmZsb3dBbmROb0ZhbGxiYWNrRm9udHM7IH0KIAogICAgIHZvaWQgcmVtb3ZlQW5kRGVzdHJveVRl
eHRCb3hlcygpOwpAQCAtMTg3LDYgKzE5MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzQWxs
QVNDSUkgOiAxOwogICAgIG11dGFibGUgYm9vbCBtX2tub3duVG9IYXZlTm9PdmVyZmxvd0FuZE5v
RmFsbGJhY2tGb250cyA6IDE7CiAgICAgYm9vbCBtX25lZWRzVHJhbnNjb2RpbmcgOiAxOworICAg
IGZsb2F0IG1fY2FuZGlkYXRlQ29tcHV0ZWRUZXh0U2l6ZTsKIH07CiAKIGlubGluZSBSZW5kZXJU
ZXh0KiB0b1JlbmRlclRleHQoUmVuZGVyT2JqZWN0KiBvYmplY3QpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAppbmRleCAxNTM1NGM1Li4xMTg1M2Nk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAK
QEAgLTMyMSw2ICszMjEsNjQgQEAgYm9vbCBSZW5kZXJTdHlsZTo6aW5oZXJpdGVkTm90RXF1YWwo
Y29uc3QgUmVuZGVyU3R5bGUqIG90aGVyKSBjb25zdAogICAgICAgICAgICB8fCByYXJlSW5oZXJp
dGVkRGF0YSAhPSBvdGhlci0+cmFyZUluaGVyaXRlZERhdGE7CiB9CiAKK2lubGluZSB1bnNpZ25l
ZCBjb21wdXRlRm9udEhhc2goY29uc3QgRm9udCYgZm9udCkKK3sKKyAgICB1bnNpZ25lZCBoYXNo
Q29kZXNbMl0gPSB7CisgICAgICAgIENhc2VGb2xkaW5nSGFzaDo6aGFzaChmb250LmZvbnREZXNj
cmlwdGlvbigpLmZhbWlseSgpLmZhbWlseSgpLmltcGwoKSksCisgICAgICAgIGZvbnQuZm9udERl
c2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpCisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdI
YXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7Cit9CisKK3Vp
bnQzMl90IFJlbmRlclN0eWxlOjpoYXNoRm9yVGV4dEF1dG9zaXppbmcoKSBjb25zdAoreworICAg
IHVpbnQzMl90IGhhc2ggPSAwOworCisgICAgaGFzaCBePSByYXJlTm9uSW5oZXJpdGVkRGF0YS0+
bV9hcHBlYXJhbmNlOworICAgIGhhc2ggXj0gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1hcmdpbkJl
Zm9yZUNvbGxhcHNlOworICAgIGhhc2ggXj0gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1hcmdpbkFm
dGVyQ29sbGFwc2U7CisgICAgaGFzaCBePSByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bGluZUNsYW1w
LnZhbHVlKCk7CisgICAgaGFzaCBePSByYXJlSW5oZXJpdGVkRGF0YS0+d29yZFdyYXA7CisgICAg
aGFzaCBePSByYXJlSW5oZXJpdGVkRGF0YS0+bmJzcE1vZGU7CisgICAgaGFzaCBePSByYXJlSW5o
ZXJpdGVkRGF0YS0+a2h0bWxMaW5lQnJlYWs7CisgICAgaGFzaCBePSBpbmhlcml0ZWQtPnNwZWNp
ZmllZF9saW5lX2hlaWdodC52YWx1ZSgpOworICAgIGhhc2ggXj0gY29tcHV0ZUZvbnRIYXNoKGlu
aGVyaXRlZC0+Zm9udCk7CisgICAgaGFzaCBePSBpbmhlcml0ZWQtPmhvcml6b250YWxfYm9yZGVy
X3NwYWNpbmc7CisgICAgaGFzaCBePSBpbmhlcml0ZWQtPnZlcnRpY2FsX2JvcmRlcl9zcGFjaW5n
OworICAgIGhhc2ggXj0gaW5oZXJpdGVkX2ZsYWdzLl9ib3hfZGlyZWN0aW9uOworICAgIGhhc2gg
Xj0gcnRsT3JkZXJpbmcoKTsKKyAgICBoYXNoIF49IG5vbmluaGVyaXRlZF9mbGFncy5fcG9zaXRp
b247CisgICAgaGFzaCBePSBub25pbmhlcml0ZWRfZmxhZ3MuX2Zsb2F0aW5nOworICAgIGhhc2gg
Xj0gcmFyZU5vbkluaGVyaXRlZERhdGEtPnRleHRPdmVyZmxvdzsKKyAgICBoYXNoIF49IHJhcmVJ
bmhlcml0ZWREYXRhLT50ZXh0U2VjdXJpdHk7CisgICAgcmV0dXJuIGhhc2g7Cit9CisKK2Jvb2wg
UmVuZGVyU3R5bGU6OmVxdWFsRm9yVGV4dEF1dG9zaXppbmcoY29uc3QgUmVuZGVyU3R5bGUqIG90
aGVyKSBjb25zdAoreworICAgIGlmIChyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9hcHBlYXJhbmNl
ID09IG90aGVyLT5yYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9hcHBlYXJhbmNlCisgICAgICAgICYm
IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tYXJnaW5CZWZvcmVDb2xsYXBzZSA9PSBvdGhlci0+cmFy
ZU5vbkluaGVyaXRlZERhdGEtPm1hcmdpbkJlZm9yZUNvbGxhcHNlCisgICAgICAgICYmIHJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tYXJnaW5BZnRlckNvbGxhcHNlID09IG90aGVyLT5yYXJlTm9uSW5o
ZXJpdGVkRGF0YS0+bWFyZ2luQWZ0ZXJDb2xsYXBzZQorICAgICAgICAmJiAocmFyZU5vbkluaGVy
aXRlZERhdGEtPmxpbmVDbGFtcCA9PSBvdGhlci0+cmFyZU5vbkluaGVyaXRlZERhdGEtPmxpbmVD
bGFtcCkKKyAgICAgICAgJiYgKHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U2l6ZUFkanVzdCA9PSBv
dGhlci0+cmFyZUluaGVyaXRlZERhdGEtPnRleHRTaXplQWRqdXN0KQorICAgICAgICAmJiAocmFy
ZUluaGVyaXRlZERhdGEtPndvcmRXcmFwID09IG90aGVyLT5yYXJlSW5oZXJpdGVkRGF0YS0+d29y
ZFdyYXApCisgICAgICAgICYmIChyYXJlSW5oZXJpdGVkRGF0YS0+bmJzcE1vZGUgPT0gb3RoZXIt
PnJhcmVJbmhlcml0ZWREYXRhLT5uYnNwTW9kZSkKKyAgICAgICAgJiYgKHJhcmVJbmhlcml0ZWRE
YXRhLT5raHRtbExpbmVCcmVhayA9PSBvdGhlci0+cmFyZUluaGVyaXRlZERhdGEtPmtodG1sTGlu
ZUJyZWFrKQorICAgICAgICAmJiAoaW5oZXJpdGVkLT5zcGVjaWZpZWRfbGluZV9oZWlnaHQgPT0g
b3RoZXItPmluaGVyaXRlZC0+c3BlY2lmaWVkX2xpbmVfaGVpZ2h0KQorICAgICAgICAmJiAoaW5o
ZXJpdGVkLT5mb250LmVxdWFsRm9yVGV4dEF1dG9TaXppbmcob3RoZXItPmluaGVyaXRlZC0+Zm9u
dCkpCisgICAgICAgICYmIChpbmhlcml0ZWQtPmhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcgPT0g
b3RoZXItPmluaGVyaXRlZC0+aG9yaXpvbnRhbF9ib3JkZXJfc3BhY2luZykKKyAgICAgICAgJiYg
KGluaGVyaXRlZC0+dmVydGljYWxfYm9yZGVyX3NwYWNpbmcgPT0gb3RoZXItPmluaGVyaXRlZC0+
dmVydGljYWxfYm9yZGVyX3NwYWNpbmcpCisgICAgICAgICYmIChpbmhlcml0ZWRfZmxhZ3MuX2Jv
eF9kaXJlY3Rpb24gPT0gb3RoZXItPmluaGVyaXRlZF9mbGFncy5fYm94X2RpcmVjdGlvbikKKyAg
ICAgICAgJiYgKHJ0bE9yZGVyaW5nKCkgPT0gb3RoZXItPnJ0bE9yZGVyaW5nKCkpCisgICAgICAg
ICYmIChub25pbmhlcml0ZWRfZmxhZ3MuX3Bvc2l0aW9uID09IG90aGVyLT5ub25pbmhlcml0ZWRf
ZmxhZ3MuX3Bvc2l0aW9uKQorICAgICAgICAmJiAobm9uaW5oZXJpdGVkX2ZsYWdzLl9mbG9hdGlu
ZyA9PSBvdGhlci0+bm9uaW5oZXJpdGVkX2ZsYWdzLl9mbG9hdGluZykKKyAgICAgICAgJiYgcmFy
ZU5vbkluaGVyaXRlZERhdGEtPnRleHRPdmVyZmxvdyA9PSBvdGhlci0+cmFyZU5vbkluaGVyaXRl
ZERhdGEtPnRleHRPdmVyZmxvdworICAgICAgICAmJiAocmFyZUluaGVyaXRlZERhdGEtPnRleHRT
ZWN1cml0eSA9PSBvdGhlci0+cmFyZUluaGVyaXRlZERhdGEtPnRleHRTZWN1cml0eSkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIGJvb2wgcG9z
aXRpb25lZE9iamVjdE1vdmVkKGNvbnN0IExlbmd0aEJveCYgYSwgY29uc3QgTGVuZ3RoQm94JiBi
KQogewogICAgIC8vIElmIGFueSB1bml0IHR5cGVzIGFyZSBkaWZmZXJlbnQsIHRoZW4gd2UgY2Fu
J3QgZ3VhcmFudGVlCkBAIC00ODMsNiArNTQxLDcgQEAgU3R5bGVEaWZmZXJlbmNlIFJlbmRlclN0
eWxlOjpkaWZmKGNvbnN0IFJlbmRlclN0eWxlKiBvdGhlciwgdW5zaWduZWQmIGNoYW5nZWRDb24K
ICAgICB9CiAKICAgICBpZiAoaW5oZXJpdGVkLT5saW5lX2hlaWdodCAhPSBvdGhlci0+aW5oZXJp
dGVkLT5saW5lX2hlaWdodAorICAgICAgICB8fCBpbmhlcml0ZWQtPnNwZWNpZmllZF9saW5lX2hl
aWdodCAhPSBvdGhlci0+aW5oZXJpdGVkLT5zcGVjaWZpZWRfbGluZV9oZWlnaHQKICAgICAgICAg
fHwgaW5oZXJpdGVkLT5saXN0X3N0eWxlX2ltYWdlICE9IG90aGVyLT5pbmhlcml0ZWQtPmxpc3Rf
c3R5bGVfaW1hZ2UKICAgICAgICAgfHwgaW5oZXJpdGVkLT5mb250ICE9IG90aGVyLT5pbmhlcml0
ZWQtPmZvbnQKICAgICAgICAgfHwgaW5oZXJpdGVkLT5ob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5n
ICE9IG90aGVyLT5pbmhlcml0ZWQtPmhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKaW5kZXggYTM0OGM0MS4uZjM0
Mzg3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgK
QEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJTdHlsZVRyYW5zZm9ybURhdGEuaCIKICNpbmNs
dWRlICJTdHlsZVZpc3VhbERhdGEuaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCisjaW5j
bHVkZSAiVGV4dFNpemVBZGp1c3RtZW50LmgiCiAjaW5jbHVkZSAiVGV4dE9yaWVudGF0aW9uLmgi
CiAjaW5jbHVkZSAiVGhlbWVUeXBlcy5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMu
aCIKQEAgLTU1MCw2ICs1NTEsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBsaC52YWx1ZSgp
OwogICAgIH0KIAorICAgIExlbmd0aCBzcGVjaWZpZWRMaW5lSGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gaW5oZXJpdGVkLT5zcGVjaWZpZWRfbGluZV9oZWlnaHQ7IH0KKwogICAgIEVXaGl0ZVNwYWNl
IHdoaXRlU3BhY2UoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxFV2hpdGVTcGFjZT4oaW5o
ZXJpdGVkX2ZsYWdzLl93aGl0ZV9zcGFjZSk7IH0KICAgICBzdGF0aWMgYm9vbCBhdXRvV3JhcChF
V2hpdGVTcGFjZSB3cykKICAgICB7CkBAIC04NTksNyArODYyLDcgQEAgcHVibGljOgogI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCiAgICAgQ29sb3IgdGFwSGlnaGxpZ2h0Q29sb3IoKSBjb25zdCB7
IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+dGFwSGlnaGxpZ2h0Q29sb3I7IH0KICNlbmRpZgot
ICAgIGJvb2wgdGV4dFNpemVBZGp1c3QoKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0
YS0+dGV4dFNpemVBZGp1c3Q7IH0KKyAgICBUZXh0U2l6ZUFkanVzdG1lbnQgdGV4dFNpemVBZGp1
c3QoKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+dGV4dFNpemVBZGp1c3Q7IH0K
ICAgICBFVGV4dFNlY3VyaXR5IHRleHRTZWN1cml0eSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PEVUZXh0U2VjdXJpdHk+KHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U2VjdXJpdHkpOyB9CiAK
ICAgICBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PFdyaXRpbmdNb2RlPihpbmhlcml0ZWRfZmxhZ3MubV93cml0aW5nTW9kZSk7IH0KQEAgLTEwMjIs
NiArMTAyNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHREZWNvcmF0aW9uc0luRWZmZWN0
KEVUZXh0RGVjb3JhdGlvbiB2KSB7IGluaGVyaXRlZF9mbGFncy5fdGV4dF9kZWNvcmF0aW9ucyA9
IHY7IH0KICAgICB2b2lkIHNldFRleHREZWNvcmF0aW9uKEVUZXh0RGVjb3JhdGlvbiB2KSB7IFNF
VF9WQVIodmlzdWFsLCB0ZXh0RGVjb3JhdGlvbiwgdik7IH0KICAgICB2b2lkIHNldERpcmVjdGlv
bihUZXh0RGlyZWN0aW9uIHYpIHsgaW5oZXJpdGVkX2ZsYWdzLl9kaXJlY3Rpb24gPSB2OyB9Cisg
ICAgdm9pZCBzZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KExlbmd0aCB2KSB7IFNFVF9WQVIoaW5oZXJp
dGVkLCBzcGVjaWZpZWRfbGluZV9oZWlnaHQsIHYpIH0KICAgICB2b2lkIHNldExpbmVIZWlnaHQo
TGVuZ3RoIHYpIHsgU0VUX1ZBUihpbmhlcml0ZWQsIGxpbmVfaGVpZ2h0LCB2KSB9CiAgICAgYm9v
bCBzZXRab29tKGZsb2F0KTsKICAgICB2b2lkIHNldFpvb21XaXRob3V0UmV0dXJuVmFsdWUoZmxv
YXQgZikgeyBzZXRab29tKGYpOyB9CkBAIC0xMjU4LDcgKzEyNjIsNyBAQCBwdWJsaWM6CiAjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICB2b2lkIHNldFRhcEhpZ2hsaWdodENvbG9yKGNvbnN0
IENvbG9yJiBjKSB7IFNFVF9WQVIocmFyZUluaGVyaXRlZERhdGEsIHRhcEhpZ2hsaWdodENvbG9y
LCBjKTsgfQogI2VuZGlmCi0gICAgYm9vbCBzZXRUZXh0U2l6ZUFkanVzdChib29sKTsKKyAgICB2
b2lkIHNldFRleHRTaXplQWRqdXN0KFRleHRTaXplQWRqdXN0bWVudCBhbkFkanVzdG1lbnQpIHsg
U0VUX1ZBUihyYXJlSW5oZXJpdGVkRGF0YSwgdGV4dFNpemVBZGp1c3QsIGFuQWRqdXN0bWVudCk7
IH0KICAgICB2b2lkIHNldFRleHRTZWN1cml0eShFVGV4dFNlY3VyaXR5IGFUZXh0U2VjdXJpdHkp
IHsgU0VUX1ZBUihyYXJlSW5oZXJpdGVkRGF0YSwgdGV4dFNlY3VyaXR5LCBhVGV4dFNlY3VyaXR5
KTsgfQogCiAjaWYgRU5BQkxFKFNWRykKQEAgLTEzNDMsNiArMTM0Nyw5IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgaW5oZXJpdGVkTm90RXF1YWwoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKIAor
ICAgIHVpbnQzMl90IGhhc2hGb3JUZXh0QXV0b3NpemluZygpIGNvbnN0OworICAgIGJvb2wgZXF1
YWxGb3JUZXh0QXV0b3NpemluZyhjb25zdCBSZW5kZXJTdHlsZSogb3RoZXIpIGNvbnN0OworCiAg
ICAgU3R5bGVEaWZmZXJlbmNlIGRpZmYoY29uc3QgUmVuZGVyU3R5bGUqLCB1bnNpZ25lZCYgY2hh
bmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzKSBjb25zdDsKIAogICAgIGJvb2wgaXNEaXNw
bGF5UmVwbGFjZWRUeXBlKCkgY29uc3QKQEAgLTE0NDMsNiArMTQ1MCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgaW50IGluaXRpYWxXaWRvd3MoKSB7IHJldHVybiAyOyB9CiAgICAgc3RhdGljIGlu
dCBpbml0aWFsT3JwaGFucygpIHsgcmV0dXJuIDI7IH0KICAgICBzdGF0aWMgTGVuZ3RoIGluaXRp
YWxMaW5lSGVpZ2h0KCkgeyByZXR1cm4gTGVuZ3RoKC0xMDAuMCwgUGVyY2VudCk7IH0KKyAgICBz
dGF0aWMgTGVuZ3RoIGluaXRpYWxTcGVjaWZpZWRMaW5lSGVpZ2h0KCkgeyByZXR1cm4gTGVuZ3Ro
KC0xMDAsIFBlcmNlbnQpOyB9CiAgICAgc3RhdGljIEVUZXh0QWxpZ24gaW5pdGlhbFRleHRBbGln
bigpIHsgcmV0dXJuIFRBQVVUTzsgfQogICAgIHN0YXRpYyBFVGV4dERlY29yYXRpb24gaW5pdGlh
bFRleHREZWNvcmF0aW9uKCkgeyByZXR1cm4gVEROT05FOyB9CiAgICAgc3RhdGljIGZsb2F0IGlu
aXRpYWxab29tKCkgeyByZXR1cm4gMS4wZjsgfQpAQCAtMTUzOSw3ICsxNTQ3LDcgQEAgcHVibGlj
OgogCiAgICAgLy8gS2VlcCB0aGVzZSBhdCB0aGUgZW5kLgogICAgIHN0YXRpYyBMaW5lQ2xhbXBW
YWx1ZSBpbml0aWFsTGluZUNsYW1wKCkgeyByZXR1cm4gTGluZUNsYW1wVmFsdWUoKTsgfQotICAg
IHN0YXRpYyBib29sIGluaXRpYWxUZXh0U2l6ZUFkanVzdCgpIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICBzdGF0aWMgVGV4dFNpemVBZGp1c3RtZW50IGluaXRpYWxUZXh0U2l6ZUFkanVzdCgpIHsgcmV0
dXJuIFRleHRTaXplQWRqdXN0bWVudCgpOyB9CiAgICAgc3RhdGljIEVUZXh0U2VjdXJpdHkgaW5p
dGlhbFRleHRTZWN1cml0eSgpIHsgcmV0dXJuIFRTTk9ORTsgfQogI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCiAgICAgc3RhdGljIENvbG9yIGluaXRpYWxUYXBIaWdobGlnaHRDb2xvcigpOwpAQCAt
MTY1MiwxNCArMTY2MCw2IEBAIGlubGluZSBib29sIFJlbmRlclN0eWxlOjpzZXRFZmZlY3RpdmVa
b29tKGZsb2F0IGYpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSBib29sIFJlbmRlclN0
eWxlOjpzZXRUZXh0U2l6ZUFkanVzdChib29sIGIpCi17Ci0gICAgaWYgKGNvbXBhcmVFcXVhbChy
YXJlSW5oZXJpdGVkRGF0YS0+dGV4dFNpemVBZGp1c3QsIGIpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmFyZUluaGVyaXRlZERhdGEuYWNjZXNzKCktPnRleHRTaXplQWRqdXN0ID0gYjsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gUmVuZGVyU3R5bGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1N0eWxlSW5oZXJpdGVkRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVJbmhlcml0ZWREYXRhLmNwcAppbmRleCBhZDE0Y2JiLi5iNzAwOWEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRh
LmNwcApAQCAtMzEsNiArMzEsNyBAQCBTdHlsZUluaGVyaXRlZERhdGE6OlN0eWxlSW5oZXJpdGVk
RGF0YSgpCiAgICAgOiBob3Jpem9udGFsX2JvcmRlcl9zcGFjaW5nKFJlbmRlclN0eWxlOjppbml0
aWFsSG9yaXpvbnRhbEJvcmRlclNwYWNpbmcoKSkKICAgICAsIHZlcnRpY2FsX2JvcmRlcl9zcGFj
aW5nKFJlbmRlclN0eWxlOjppbml0aWFsVmVydGljYWxCb3JkZXJTcGFjaW5nKCkpCiAgICAgLCBs
aW5lX2hlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSkKKyAgICAsIHNwZWNp
ZmllZF9saW5lX2hlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSkKICAgICAs
IGxpc3Rfc3R5bGVfaW1hZ2UoUmVuZGVyU3R5bGU6OmluaXRpYWxMaXN0U3R5bGVJbWFnZSgpKQog
ICAgICwgY29sb3IoUmVuZGVyU3R5bGU6OmluaXRpYWxDb2xvcigpKQogICAgICwgdmlzaXRlZExp
bmtDb2xvcihSZW5kZXJTdHlsZTo6aW5pdGlhbENvbG9yKCkpCkBAIC00Niw2ICs0Nyw3IEBAIFN0
eWxlSW5oZXJpdGVkRGF0YTo6U3R5bGVJbmhlcml0ZWREYXRhKGNvbnN0IFN0eWxlSW5oZXJpdGVk
RGF0YSYgbykKICAgICAsIGhvcml6b250YWxfYm9yZGVyX3NwYWNpbmcoby5ob3Jpem9udGFsX2Jv
cmRlcl9zcGFjaW5nKQogICAgICwgdmVydGljYWxfYm9yZGVyX3NwYWNpbmcoby52ZXJ0aWNhbF9i
b3JkZXJfc3BhY2luZykKICAgICAsIGxpbmVfaGVpZ2h0KG8ubGluZV9oZWlnaHQpCisgICAgLCBz
cGVjaWZpZWRfbGluZV9oZWlnaHQoby5zcGVjaWZpZWRfbGluZV9oZWlnaHQpCiAgICAgLCBsaXN0
X3N0eWxlX2ltYWdlKG8ubGlzdF9zdHlsZV9pbWFnZSkKICAgICAsIGZvbnQoby5mb250KQogICAg
ICwgY29sb3Ioby5jb2xvcikKQEAgLTU3LDYgKzU5LDcgQEAgYm9vbCBTdHlsZUluaGVyaXRlZERh
dGE6Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVJbmhlcml0ZWREYXRhJiBvKSBjb25zdAogewogICAg
IHJldHVybiBsaW5lX2hlaWdodCA9PSBvLmxpbmVfaGVpZ2h0CiAgICAgICAgICYmIFN0eWxlSW1h
Z2U6OmltYWdlc0VxdWl2YWxlbnQobGlzdF9zdHlsZV9pbWFnZS5nZXQoKSwgby5saXN0X3N0eWxl
X2ltYWdlLmdldCgpKQorICAgICAgICAmJiBzcGVjaWZpZWRfbGluZV9oZWlnaHQgPT0gby5zcGVj
aWZpZWRfbGluZV9oZWlnaHQKICAgICAgICAgJiYgZm9udCA9PSBvLmZvbnQKICAgICAgICAgJiYg
Y29sb3IgPT0gby5jb2xvcgogICAgICAgICAmJiB2aXNpdGVkTGlua0NvbG9yID09IG8udmlzaXRl
ZExpbmtDb2xvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0
eWxlSW5oZXJpdGVkRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxl
SW5oZXJpdGVkRGF0YS5oCmluZGV4IDZjYjdiYzUuLjUzZTk5NDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUluaGVyaXRlZERhdGEuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVJbmhlcml0ZWREYXRhLmgKQEAgLTU0LDYg
KzU0LDcgQEAgcHVibGljOgogICAgIC8vIGNvdWxkIGJlIHBhY2tlZCBpbiBhIHNob3J0IGJ1dCBk
b2Vzbid0CiAgICAgLy8gbWFrZSBhIGRpZmZlcmVuY2UgY3VycmVudGx5IGJlY2F1c2Ugb2YgcGFk
ZGluZwogICAgIExlbmd0aCBsaW5lX2hlaWdodDsKKyAgICBMZW5ndGggc3BlY2lmaWVkX2xpbmVf
aGVpZ2h0OwogCiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGxpc3Rfc3R5bGVfaW1hZ2U7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0
ZWREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJp
dGVkRGF0YS5oCmluZGV4IGZkNTc5NjkuLjJmNjgxODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEuaApAQCAtMjcs
NiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKKyNp
bmNsdWRlICJUZXh0U2l6ZUFkanVzdG1lbnQuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWlj
U3RyaW5nLmg+CkBAIC03OSw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCB3b3JkV3Jh
cCA6IDE7IC8vIEVXb3JkV3JhcCAKICAgICB1bnNpZ25lZCBuYnNwTW9kZSA6IDE7IC8vIEVOQlNQ
TW9kZQogICAgIHVuc2lnbmVkIGtodG1sTGluZUJyZWFrIDogMTsgLy8gRUtIVE1MTGluZUJyZWFr
Ci0gICAgYm9vbCB0ZXh0U2l6ZUFkanVzdCA6IDE7IC8vIEFuIEFwcGxlIGV4dGVuc2lvbi4KKyAg
ICBUZXh0U2l6ZUFkanVzdG1lbnQgdGV4dFNpemVBZGp1c3Q7IC8vIE1vYmlsZSBXZWJLaXQgZXh0
ZW5zaW9uLgogICAgIHVuc2lnbmVkIHJlc2l6ZSA6IDI7IC8vIEVSZXNpemUKICAgICB1bnNpZ25l
ZCB1c2VyU2VsZWN0IDogMTsgIC8vIEVVc2VyU2VsZWN0CiAgICAgdW5zaWduZWQgY29sb3JTcGFj
ZSA6IDE7IC8vIENvbG9yU3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9UZXh0U2l6ZUFkanVzdG1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9UZXh0U2l6ZUFkanVzdG1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kZDA3ZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1RleHRTaXplQWRqdXN0bWVudC5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2lmbmRlZiBUZXh0U2l6ZUFkanVzdG1lbnRfaAorI2RlZmluZSBUZXh0U2l6
ZUFkanVzdG1lbnRfaAorCitlbnVtIFRleHRTaXplQWRqdXN0bWVudFR5cGUgeworICAgIEF1dG9U
ZXh0U2l6ZUFkanVzdG1lbnQgPSAtMSwKKyAgICBOb1RleHRTaXplQWRqdXN0bWVudCA9IC0yCit9
OworCitjbGFzcyBUZXh0U2l6ZUFkanVzdG1lbnQgeworcHVibGljOgorICAgIFRleHRTaXplQWRq
dXN0bWVudCgpIDogbV92YWx1ZShBdXRvVGV4dFNpemVBZGp1c3RtZW50KSB7IH0KKyAgICBUZXh0
U2l6ZUFkanVzdG1lbnQoZmxvYXQgdmFsdWUpIDogbV92YWx1ZSh2YWx1ZSkgeyB9CisKKyAgICBm
bG9hdCBwZXJjZW50YWdlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIGZsb2F0IG11
bHRpcGxpZXIoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlIC8gMTAwOyB9CisKKyAgICBib29sIGlz
QXV0bygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPT0gQXV0b1RleHRTaXplQWRqdXN0bWVudDsg
fQorICAgIGJvb2wgaXNOb25lKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA9PSBOb1RleHRTaXpl
QWRqdXN0bWVudDsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09IChjb25zdCBUZXh0U2l6ZUFkanVz
dG1lbnQmIGFuQWRqdXN0bWVudCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA9PSBhbkFkanVzdG1l
bnQubV92YWx1ZTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgVGV4dFNpemVBZGp1c3Rt
ZW50JiBhbkFkanVzdG1lbnQpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgIT0gYW5BZGp1c3RtZW50
Lm1fdmFsdWU7IH0KKworcHJpdmF0ZToKKyAgICBmbG9hdCBtX3ZhbHVlOworfTsKKworI2VuZGlm
IC8vIFRleHRTaXplQWRqdXN0bWVudF9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>