<?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>184182</bug_id>
          
          <creation_ts>2018-03-30 10:21:20 -0700</creation_ts>
          <short_desc>Make InlineTextBox::createTextRun() take a const lvalue reference String</short_desc>
          <delta_ts>2018-04-09 16:03:48 -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>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>178750</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>koivisto</cc>
    
    <cc>mmaxfield</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>1410649</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-03-30 10:21:20 -0700</bug_when>
    <thetext>InlineTextBox::createTextRun() takes a non-const lvalue reference. It is tempting to change the signature of this method to take a const lvalue reference. But this was done intentionally. TextRun is effectively a StringView: it does not own the passed string. We rely on the compiler to prevent calls like createTextRun(&quot;abc&quot;).

A possible Solution is to make InlineTextBox own three TextRuns:

class InlineTextBox {

private:
    mutable std::uniqe_ptr&lt;TextRun&gt; m_textRun;
    mutable std::uniqe_ptr&lt;TextRun&gt; m_combinedTextRun;
    mutable std::uniqe_ptr&lt;TextRun&gt; m_hyphenatedTextRun;
};

Then we can replace InlineTextBox::createTextRun(String&amp;) by InlineTextBox::textRun(bool ignoreCombinedText = false, bool ignoreHyphen = false) const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1411966</commentid>
    <comment_count>1</comment_count>
      <attachid>337246</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-04-04 17:57:58 -0700</bug_when>
    <thetext>Created attachment 337246
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412009</commentid>
    <comment_count>2</comment_count>
      <attachid>337246</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-04-04 22:29:14 -0700</bug_when>
    <thetext>Comment on attachment 337246
Patch

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

&gt; Source/WebCore/platform/graphics/FontCascade.cpp:377
&gt; +float FontCascade::widthForSimpleText(const StringView&amp; text) const

This is not necessary. StringView is a small object and should be passed by value.

&gt; Source/WebCore/platform/graphics/TextRun.h:103
&gt; +        m_string = emptyString();

I do not understand the need for TextRun to hold both a non-owning and owning String. It should either hold a non-owned string, StringView, or hold a String, not both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412069</commentid>
    <comment_count>3</comment_count>
      <attachid>337271</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-04-05 09:47:31 -0700</bug_when>
    <thetext>Created attachment 337271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412073</commentid>
    <comment_count>4</comment_count>
      <attachid>337246</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-04-05 09:59:10 -0700</bug_when>
    <thetext>Comment on attachment 337246
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/FontCascade.cpp:377
&gt;&gt; +float FontCascade::widthForSimpleText(const StringView&amp; text) const
&gt; 
&gt; This is not necessary. StringView is a small object and should be passed by value.

Ok. Done.

&gt;&gt; Source/WebCore/platform/graphics/TextRun.h:103
&gt;&gt; +        m_string = emptyString();
&gt; 
&gt; I do not understand the need for TextRun to hold both a non-owning and owning String. It should either hold a non-owned string, StringView, or hold a String, not both.

Yes this is correct. TextRun will either (1) own String or (2) hold a non-owned string StringView.

-- In case (1), TextRun owns a String, m_stringView will encapsulate the owned String. This will make the code cleaner and easier to read since all the methods will operate on m_stringView.
-- In case (2), TextRun holds a non-owned string StringView, m_stringView will be a copy of this StringView. TextRun::m_string should be empty and should never be used in functions like TextRun::string().

This allows code like this:

auto text = this-&gt;text();
TextRun textRun = createTextRun(text);

To be replaced by this:

TextRun textRun = createTextRun(text());

We moved the ownership of the underlying of the String from the caller side to the TextRun itself. This will only happen when the caller passes a String instead of a StringView.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412086</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-04-05 10:26:13 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #4)
&gt; Comment on attachment 337246 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=337246&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/FontCascade.cpp:377
&gt; &gt;&gt; +float FontCascade::widthForSimpleText(const StringView&amp; text) const
&gt; &gt; 
&gt; &gt; This is not necessary. StringView is a small object and should be passed by value.
&gt; 
&gt; Ok. Done.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/TextRun.h:103
&gt; &gt;&gt; +        m_string = emptyString();
&gt; &gt; 
&gt; &gt; I do not understand the need for TextRun to hold both a non-owning and owning String. It should either hold a non-owned string, StringView, or hold a String, not both.
&gt; 
&gt; Yes this is correct. TextRun will either (1) own String or (2) hold a
&gt; non-owned string StringView.
&gt; 
&gt; -- In case (1), TextRun owns a String, m_stringView will encapsulate the
&gt; owned String. This will make the code cleaner and easier to read since all
&gt; the methods will operate on m_stringView.
&gt; -- In case (2), TextRun holds a non-owned string StringView, m_stringView
&gt; will be a copy of this StringView. TextRun::m_string should be empty and
&gt; should never be used in functions like TextRun::string().
&gt; 

It seems sufficient for TextRun to hold a String. In case 1, holding both means we hold two pointers to the same StringImpl. This seems unnecessary and I would be surprised if there is any efficiency gained in case 2 by avoiding a ref/deref.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412087</commentid>
    <comment_count>6</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-04-05 10:27:59 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #5)
&gt; (In reply to Said Abou-Hallawa from comment #4)
&gt; &gt; Comment on attachment 337246 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=337246&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/FontCascade.cpp:377
&gt; &gt; &gt;&gt; +float FontCascade::widthForSimpleText(const StringView&amp; text) const
&gt; &gt; &gt; 
&gt; &gt; &gt; This is not necessary. StringView is a small object and should be passed by value.
&gt; &gt; 
&gt; &gt; Ok. Done.
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/TextRun.h:103
&gt; &gt; &gt;&gt; +        m_string = emptyString();
&gt; &gt; &gt; 
&gt; &gt; &gt; I do not understand the need for TextRun to hold both a non-owning and owning String. It should either hold a non-owned string, StringView, or hold a String, not both.
&gt; &gt; 
&gt; &gt; Yes this is correct. TextRun will either (1) own String or (2) hold a
&gt; &gt; non-owned string StringView.
&gt; &gt; 
&gt; &gt; -- In case (1), TextRun owns a String, m_stringView will encapsulate the
&gt; &gt; owned String. This will make the code cleaner and easier to read since all
&gt; &gt; the methods will operate on m_stringView.
&gt; &gt; -- In case (2), TextRun holds a non-owned string StringView, m_stringView
&gt; &gt; will be a copy of this StringView. TextRun::m_string should be empty and
&gt; &gt; should never be used in functions like TextRun::string().
&gt; &gt; 
&gt; 
&gt; It seems sufficient for TextRun to hold a String. In case 1, holding both
&gt; means we hold two pointers to the same StringImpl. This seems unnecessary
&gt; and I would be surprised if there is any efficiency gained in case 2 by
&gt; avoiding a ref/deref.
I very much agree with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412146</commentid>
    <comment_count>7</comment_count>
      <attachid>337291</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-04-05 12:49:06 -0700</bug_when>
    <thetext>Created attachment 337291
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412159</commentid>
    <comment_count>8</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-04-05 13:54:39 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #5)
&gt; (In reply to Said Abou-Hallawa from comment #4)
&gt; &gt; Comment on attachment 337246 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=337246&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/FontCascade.cpp:377
&gt; &gt; &gt;&gt; +float FontCascade::widthForSimpleText(const StringView&amp; text) const
&gt; &gt; &gt; 
&gt; &gt; &gt; This is not necessary. StringView is a small object and should be passed by value.
&gt; &gt; 
&gt; &gt; Ok. Done.
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/TextRun.h:103
&gt; &gt; &gt;&gt; +        m_string = emptyString();
&gt; &gt; &gt; 
&gt; &gt; &gt; I do not understand the need for TextRun to hold both a non-owning and owning String. It should either hold a non-owned string, StringView, or hold a String, not both.
&gt; &gt; 
&gt; &gt; Yes this is correct. TextRun will either (1) own String or (2) hold a
&gt; &gt; non-owned string StringView.
&gt; &gt; 
&gt; &gt; -- In case (1), TextRun owns a String, m_stringView will encapsulate the
&gt; &gt; owned String. This will make the code cleaner and easier to read since all
&gt; &gt; the methods will operate on m_stringView.
&gt; &gt; -- In case (2), TextRun holds a non-owned string StringView, m_stringView
&gt; &gt; will be a copy of this StringView. TextRun::m_string should be empty and
&gt; &gt; should never be used in functions like TextRun::string().
&gt; &gt; 
&gt; 
&gt; It seems sufficient for TextRun to hold a String. In case 1, holding both
&gt; means we hold two pointers to the same StringImpl. This seems unnecessary
&gt; and I would be surprised if there is any efficiency gained in case 2 by
&gt; avoiding a ref/deref.

My understanding was TextRun was changed such that it holds a StringView to avoid copying the underlying buffer of the String given that the caller guarantees the String outlives the TextRun. For instance GraphicsContext::drawBidiText() slices the passed TextRun into smaller sub-TextRuns without having to allocate and copy the text of each sub-TextRun.

This is why I kept the StringView member after adding a String member to the TextRun. But I&apos;ve just learnt that StringView::toStringWithoutCopying() can solve this problem by creating a string which shares the same underlying buffer of the StringView and does not make a new copy of the buffer. So the returned String is effectively acts like a StringView in this case.

So I changed TextRun to hold only a String member which will be either a copy of another String or created by StringView::toStringWithoutCopying().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412161</commentid>
    <comment_count>9</comment_count>
      <attachid>337291</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-04-05 14:02:32 -0700</bug_when>
    <thetext>Comment on attachment 337291
Patch

I&apos;d prefer doing one thing per patch (not just because it&apos;s easier to review but also becasue the unrelated changes don&apos;t get lost if this gets rolled out).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412186</commentid>
    <comment_count>10</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-04-05 14:59:17 -0700</bug_when>
    <thetext>(In reply to zalan from comment #9)
&gt; Comment on attachment 337291 [details]
&gt; Patch
&gt; 
&gt; I&apos;d prefer doing one thing per patch (not just because it&apos;s easier to review
&gt; but also becasue the unrelated changes don&apos;t get lost if this gets rolled
&gt; out).

What do you mean by &quot;one thing per patch&quot;? What are these things?

This patch is basically rolling back http://trac.webkit.org/changeset/174228 but with a better fix. TextRun was holding a character pointer and length. Using StringView was a nice approach but it introduced the underlying String lifetime issue and the caller has to do tricks like:

    auto text = this-&gt;text();
    TextRun textRun = createTextRun(text);

instead of just
    TextRun textRun = createTextRun(text());

The new patch uses String as a replacement instead of StringView giving that no underlying charter buffer will be ever copied which was the purpose of using the StringView in the first time.

I do not think this patch can be split more than that. It replaces a single member of TextRun and fixes the code to compile, link and work as expected without perf regression. The rest of the patch are clean-ups which are very easy to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412192</commentid>
    <comment_count>11</comment_count>
      <attachid>337291</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-04-05 15:25:58 -0700</bug_when>
    <thetext>Comment on attachment 337291
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        Fix the lifetime of the TextRun

This title is misleading. You don&apos;t change the lifetime of the TextRun.

&gt; Source/WebCore/platform/graphics/TextRun.h:69
&gt; +        RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(startOffset &lt; m_text.length());

This line has nothing to do with this patch. Please remove it.

&gt; Source/WebCore/platform/graphics/TextRun.h:83
&gt; -    UChar operator[](unsigned i) const { ASSERT_WITH_SECURITY_IMPLICATION(i &lt; m_text.length()); return m_text[i]; }
&gt; -    const LChar* data8(unsigned i) const { ASSERT_WITH_SECURITY_IMPLICATION(i &lt; m_text.length()); ASSERT(is8Bit()); return &amp;m_text.characters8()[i]; }
&gt; -    const UChar* data16(unsigned i) const { ASSERT_WITH_SECURITY_IMPLICATION(i &lt; m_text.length()); ASSERT(!is8Bit()); return &amp;m_text.characters16()[i]; }
&gt; +    UChar operator[](unsigned i) const { RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(i &lt; m_text.length()); return m_text[i]; }
&gt; +    const LChar* data8(unsigned i) const { RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(i &lt; m_text.length()); ASSERT(is8Bit()); return &amp;m_text.characters8()[i]; }
&gt; +    const UChar* data16(unsigned i) const { RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(i &lt; m_text.length()); ASSERT(!is8Bit()); return &amp;m_text.characters16()[i]; }

These lines have nothing to do with this patch. Please remove them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412193</commentid>
    <comment_count>12</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-04-05 15:34:53 -0700</bug_when>
    <thetext>&gt; without perf regression. The rest of the patch are clean-ups which are very
&gt; easy to follow.
I&apos;ve wasted too much time looking at unrelated &quot;easy to follow, clean-up&quot; changes at regression points and I&apos;d rather use that time for something else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412258</commentid>
    <comment_count>13</comment_count>
      <attachid>337291</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-04-05 19:22:41 -0700</bug_when>
    <thetext>Comment on attachment 337291
Patch

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

&gt; Source/WebCore/rendering/InlineTextBox.cpp:1217
&gt; +TextRun InlineTextBox::createTextRun(bool ignoreCombinedText, bool ignoreHypheng) const

ignoreHypheng =&gt; ignoreHyphen

&gt; Source/WebCore/rendering/InlineTextBox.cpp:1220
&gt; +    TextRun textRun { text(ignoreCombinedText, ignoreHypheng), textPos(), expansion(), expansionBehavior(), direction(), dirOverride() || style.rtlOrdering() == VisualOrder, !renderer().canUseSimpleFontCodePath() };

Ditto.

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:184
&gt; +            TextRun run(String(textRenderer.text()));

Is it necessary to explicitly call the String constructor?

&gt; Source/WebCore/rendering/SimpleLineLayoutTextFragmentIterator.cpp:52
&gt; +    , hyphenStringWidth(shouldHyphenate ? (useSimplifiedTextMeasuring ? font.widthForSimpleText(style.hyphenString()) : font.width(TextRun(String(style.hyphenString())))) : 0)

Is it necessary to explicitly call the String constructor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412259</commentid>
    <comment_count>14</comment_count>
      <attachid>337291</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-04-05 19:24:39 -0700</bug_when>
    <thetext>Comment on attachment 337291
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/TextRun.h:69
&gt;&gt; +        RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(startOffset &lt; m_text.length());
&gt; 
&gt; This line has nothing to do with this patch. Please remove it.

I agree with zalan, please make these changes in a separate bug.

&gt;&gt; Source/WebCore/platform/graphics/TextRun.h:83
&gt;&gt; +    const UChar* data16(unsigned i) const { RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(i &lt; m_text.length()); ASSERT(!is8Bit()); return &amp;m_text.characters16()[i]; }
&gt; 
&gt; These lines have nothing to do with this patch. Please remove them.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412262</commentid>
    <comment_count>15</comment_count>
      <attachid>337291</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-04-05 19:28:41 -0700</bug_when>
    <thetext>Comment on attachment 337291
Patch

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

For your consideration, I suggest using uniform initializer syntax throughout this patch.

&gt; Source/WebCore/platform/graphics/TextRun.h:91
&gt; +    void setText(const LChar* c, unsigned len) { setText(StringView(c, len)); }

c  =&gt; text
len  =&gt; length

(Since we are touching this line anyway).

&gt; Source/WebCore/platform/graphics/TextRun.h:92
&gt; +    void setText(const UChar* c, unsigned len) { setText(StringView(c, len)); }

Ditto.

&gt; Source/WebCore/platform/graphics/TextRun.h:93
&gt; +    void setText(StringView stringView) { m_text = stringView.toStringWithoutCopying(); }

stringView =&gt; text

(Typically we name the argument of the setter to match the name of the setter and underlying instance variable)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412264</commentid>
    <comment_count>16</comment_count>
      <attachid>337291</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-04-05 19:34:32 -0700</bug_when>
    <thetext>Comment on attachment 337291
Patch

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

&gt; Source/WebCore/ChangeLog:19
&gt; +           will make a copy of this string and assign it to m_text.

This is not accurate. The word “string” is usually interpreted as a character buffer. This is not the same as a String object. Copying of a String refs the underlying StringImpl. That is, we do not make a copy of the underlying character data.

&gt; Source/WebCore/ChangeLog:23
&gt; +           will not use  StringView::toString(). Instead We will use

“Instead We”  =&gt; “Instead we”

The last sentence does not read well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412920</commentid>
    <comment_count>17</comment_count>
      <attachid>337291</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-04-09 10:53:05 -0700</bug_when>
    <thetext>Comment on attachment 337291
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:3
&gt;&gt; +        Fix the lifetime of the TextRun
&gt; 
&gt; This title is misleading. You don&apos;t change the lifetime of the TextRun.

Title was changed to &quot;Make InlineTextBox::createTextRun() take a const lvalue reference String&quot;

&gt;&gt; Source/WebCore/ChangeLog:19
&gt;&gt; +           will make a copy of this string and assign it to m_text.
&gt; 
&gt; This is not accurate. The word “string” is usually interpreted as a character buffer. This is not the same as a String object. Copying of a String refs the underlying StringImpl. That is, we do not make a copy of the underlying character data.

This was changed to &quot;This constructor will addRef the underlying StringImpl when assigning it to m_text&quot;.

&gt;&gt; Source/WebCore/ChangeLog:23
&gt;&gt; +           will not use  StringView::toString(). Instead We will use
&gt; 
&gt; “Instead We”  =&gt; “Instead we”
&gt; 
&gt; The last sentence does not read well.

Fixed.

&gt;&gt;&gt; Source/WebCore/platform/graphics/TextRun.h:69
&gt;&gt;&gt; +        RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(startOffset &lt; m_text.length());
&gt;&gt; 
&gt;&gt; This line has nothing to do with this patch. Please remove it.
&gt; 
&gt; I agree with zalan, please make these changes in a separate bug.

Removed.

&gt;&gt;&gt; Source/WebCore/platform/graphics/TextRun.h:83
&gt;&gt;&gt; +    const UChar* data16(unsigned i) const { RELEASE_ASSERT_WITH_SECURITY_IMPLICATION(i &lt; m_text.length()); ASSERT(!is8Bit()); return &amp;m_text.characters16()[i]; }
&gt;&gt; 
&gt;&gt; These lines have nothing to do with this patch. Please remove them.
&gt; 
&gt; Ditto.

Removed.

&gt;&gt; Source/WebCore/platform/graphics/TextRun.h:91
&gt;&gt; +    void setText(const LChar* c, unsigned len) { setText(StringView(c, len)); }
&gt; 
&gt; c  =&gt; text
&gt; len  =&gt; length
&gt; 
&gt; (Since we are touching this line anyway).

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/TextRun.h:92
&gt;&gt; +    void setText(const UChar* c, unsigned len) { setText(StringView(c, len)); }
&gt; 
&gt; Ditto.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/TextRun.h:93
&gt;&gt; +    void setText(StringView stringView) { m_text = stringView.toStringWithoutCopying(); }
&gt; 
&gt; stringView =&gt; text
&gt; 
&gt; (Typically we name the argument of the setter to match the name of the setter and underlying instance variable)

Fixed.

&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:1217
&gt;&gt; +TextRun InlineTextBox::createTextRun(bool ignoreCombinedText, bool ignoreHypheng) const
&gt; 
&gt; ignoreHypheng =&gt; ignoreHyphen

Fixed.

&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:1220
&gt;&gt; +    TextRun textRun { text(ignoreCombinedText, ignoreHypheng), textPos(), expansion(), expansionBehavior(), direction(), dirOverride() || style.rtlOrdering() == VisualOrder, !renderer().canUseSimpleFontCodePath() };
&gt; 
&gt; Ditto.

Fixed.

&gt;&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:184
&gt;&gt; +            TextRun run(String(textRenderer.text()));
&gt; 
&gt; Is it necessary to explicitly call the String constructor?

Yes. Because RenderText::text() returns StringImpl. Since both String and StringView can be implicitly constructed given a StringImpl, the compiler wants us to be more explicit about which constructor of TextRun to be call.

&gt;&gt; Source/WebCore/rendering/SimpleLineLayoutTextFragmentIterator.cpp:52
&gt;&gt; +    , hyphenStringWidth(shouldHyphenate ? (useSimplifiedTextMeasuring ? font.widthForSimpleText(style.hyphenString()) : font.width(TextRun(String(style.hyphenString())))) : 0)
&gt; 
&gt; Is it necessary to explicitly call the String constructor?

Yes. Because RenderStyle::hyphenString() returns an AtomicString.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412922</commentid>
    <comment_count>18</comment_count>
      <attachid>337508</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2018-04-09 10:54:30 -0700</bug_when>
    <thetext>Created attachment 337508
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413056</commentid>
    <comment_count>19</comment_count>
      <attachid>337508</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-04-09 16:02:34 -0700</bug_when>
    <thetext>Comment on attachment 337508
Patch

Clearing flags on attachment: 337508

Committed r230452: &lt;https://trac.webkit.org/changeset/230452&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413057</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-04-09 16:02:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1413059</commentid>
    <comment_count>21</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-04-09 16:03:48 -0700</bug_when>
    <thetext>&lt;rdar://problem/39296994&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337246</attachid>
            <date>2018-04-04 17:57:58 -0700</date>
            <delta_ts>2018-04-05 09:47:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184182-20180404175758.patch</filename>
            <type>text/plain</type>
            <size>21348</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMDI4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBACisyMDE4LTA0LTA0ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgRml4IHRoZSBs
aWZldGltZSBvZiB0aGUgVGV4dFJ1bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg0MTgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW5saW5lVGV4dEJveDo6Y3JlYXRlVGV4dFJ1bigpIHRha2VzIGEgbm9u
LWNvbnN0IGx2YWx1ZSByZWZlcmVuY2UgU3RyaW5nLgorICAgICAgICBJdCBpcyB0ZW1wdGluZyB0
byBjaGFuZ2UgdGhlIHNpZ25hdHVyZSBvZiB0aGlzIG1ldGhvZCB0byB0YWtlIGEgY29uc3QgbHZh
bHVlIAorICAgICAgICByZWZlcmVuY2UuIEJ1dCB0aGlzIHdhcyBkb25lIGludGVudGlvbmFsbHku
IFRleHRSdW4gaXMgZWZmZWN0aXZlbHkgYSBTdHJpbmdWaWV3OgorICAgICAgICBpdCBkb2VzIG5v
dCBvd24gdGhlIHBhc3NlZCBzdHJpbmcuIFdlIHJlbHkgb24gdGhlIGNvbXBpbGVyIHRvIHByZXZl
bnQgY2FsbHMKKyAgICAgICAgbGlrZSBjcmVhdGVUZXh0UnVuKCJhYmMiKS4KKworICAgICAgICBU
byBoYXZlIGEgYmV0dGVyIHdheSB0byBleHByZXNzIHRoZSBsaWZldGltZSBvZiBUZXh0UnVuLCB3
ZSBhcmUgZ29pbmcgdG8gCisgICAgICAgIHByb3ZpZGUgdGhyZWUgY29uc3RydWN0b3JzIGZvciBU
ZXh0UnVuOgorICAgICAgICAxIC0gSXQgdGFrZXMgY29uc3QgU3RyaW5nJjogSW4gdGhpcyBjYXNl
LCBUZXh0UnVuIGhhcyB0byBvd24gYSBjb3B5IG9mIHRoaXMKKyAgICAgICAgICAgIHN0cmluZyBi
dXQgY3JlYXRlcyBhIFN0cmluZ1ZpZXcgd2hpY2ggZW5jYXBzdWxhdGVzIHRoZSBTdHJpbmcuCisg
ICAgICAgIDIgLSBJdCB0YWtlcyBTdHJpbmdWaWV3JiY6IEluIHRoaXMgY2FzZSwgVGV4dFJ1biBk
b2VzIG5vdCBvd24gdGhlIHN0cmluZy4KKyAgICAgICAgICAgIEl0IGFzc3VtZXMsIHRoZSBjYWxs
ZXIgZ3VhcmFudGVlcyB0aGUgbGlmZXRpbWUgb2YgdGhlIHN0cmluZyBpbiB0aGlzCisgICAgICAg
ICAgICBjYXNlLiBUaGUgY2FsbGVyIGFsc28gY3JlYXRlcyB0aGUgcnZhbHVlIHJlZmVyZW5jZSBm
cm9tIGEgc3RyaW5nIG9yCisgICAgICAgICAgICBmcm9tIGFub3RoZXIgU3RyaW5nVmlldyBqdXN0
IHdoZW4gY2FsbGluZyB0aGUgVGV4dFJ1biBjb25zdHJ1Y3Rvci4KKyAgICAgICAgICAgIFRoZSBt
b3ZlIHNlbWFudGljIHNhdmVzIHRoZSBjb3N0IG9mIGNyZWF0aW5nIGEgbmV3IFN0cmluZ1ZpZXcu
CisgICAgICAgIDMgLSBJdCB0YWtlcyBjb25zdCBTdHJpbmdWaWV3JjogU2ltaWxhciB0byB0aGUg
c2Vjb25kIGNvbnN0cnVjdG9yIGV4Y2VwdAorICAgICAgICAgICAgdGhlIGNhbGxlciBjcmVhdGVz
IGEgU3RyaW5nVmlldyBhbmQgdXNlcyBpdCBmb3Igb3RoZXIgdGhpbmdzIGJlc2lkZXMKKyAgICAg
ICAgICAgIGNyZWF0aW5nIHRoZSBUZXh0UnVuLiBBIGNvcHkgb2YgU3RyaW5nVmlldyB3aWxsIGJl
IGNyZWF0ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6d2lkdGhGb3JTaW1wbGVUZXh0IGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1RleHRSdW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OlRleHRSdW4pOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6c3ViUnVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRSdW46Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6
ZGF0YTggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6ZGF0YTE2IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OmNoYXJhY3RlcnM4IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRSdW46OmNoYXJhY3RlcnMxNiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0UnVuOjppczhCaXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6bGVu
Z3RoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OnN0cmluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpzZXRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRSdW46OnRleHQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0QmFja2dyb3Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRGb3Jl
Z3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4
dERlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9y
UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cG9zaXRp
b25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6Y3Jl
YXRlVGV4dFJ1biBjb25zdCk6CisgICAgICAgIFRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoaXMgZnVu
Y3Rpb24gdG8gdGFrZSBhIFN0cmluZyBhcmd1bWVudCBhbnltb3JlLiBUaGUKKyAgICAgICAgcmVh
c29uIGZvciBwYXNzaW5nIHRoZSBTdHJpbmcgd2FzIHRvIGd1YXJhbnRlZSBpdHMgbGlmZXRpbWUg
Ynkga2VlcGluZworICAgICAgICBhIGNvcHkgb2YgaXQgaW4gdGhlIGNhbGxlciBzaWRlLiBOb3cg
dGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhhdC4gVGhlIFRleHRSdW4KKyAgICAgICAgaXRzZWxmIHdp
bGwga2VlcCB0aGlzIGNvcHkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29tcHV0ZUNhblVzZVNpbXBsaWZpZWRUZXh0TWVhc3Vy
aW5nIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VGb3JGb250QW5kVGV4dCk6
CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnRJ
dGVyYXRvcjo6U3R5bGU6OlN0eWxlKToKKwogMjAxOC0wNC0wNCAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIE1vdmUgUGluZ0hhbmRsZSB0byBX
ZWJLaXRMZWdhY3kKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHAJKHJldmlzaW9uIDIzMDI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc0LDcg
KzM3NCw3IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChjb25zdCBUZXh0UnVuJiAKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6d2lkdGhGb3JTaW1wbGVUZXh0
KFN0cmluZ1ZpZXcgdGV4dCkgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aEZvclNpbXBs
ZVRleHQoY29uc3QgU3RyaW5nVmlldyYgdGV4dCkgY29uc3QKIHsKICAgICBpZiAodGV4dC5pc051
bGwoKSB8fCB0ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHJldmlzaW9uIDIz
MDI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCB3
aWR0aE9mVGV4dFJhbmdlKGNvbnN0IFRleHRSdW4mLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0
bywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBmbG9hdCogb3V0V2lk
dGhCZWZvcmVSYW5nZSA9IG51bGxwdHIsIGZsb2F0KiBvdXRXaWR0aEFmdGVyUmFuZ2UgPSBudWxs
cHRyKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCB3aWR0aChjb25zdCBUZXh0UnVu
JiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93
KiA9IDApIGNvbnN0OwotICAgIGZsb2F0IHdpZHRoRm9yU2ltcGxlVGV4dChTdHJpbmdWaWV3IHRl
eHQpIGNvbnN0OworICAgIGZsb2F0IHdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBTdHJpbmdWaWV3
JiB0ZXh0KSBjb25zdDsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0TGF5b3V0LCBUZXh0TGF5
b3V0RGVsZXRlcj4gY3JlYXRlTGF5b3V0KFJlbmRlclRleHQmLCBmbG9hdCB4UG9zLCBib29sIGNv
bGxhcHNlV2hpdGVTcGFjZSkgY29uc3Q7CiAgICAgc3RhdGljIGZsb2F0IHdpZHRoKFRleHRMYXlv
dXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBm
YWxsYmFja0ZvbnRzID0gMCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9UZXh0UnVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UZXh0UnVuLmNwcAkocmV2aXNpb24gMjMwMjc0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDgg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEV4cGVjdGVkVGV4dFJ1blNpemUgewot
ICAgIFN0cmluZ1ZpZXcgdGV4dDsKKyAgICBTdHJpbmdWaWV3IHZpZXc7CisgICAgU3RyaW5nIHRl
eHQ7CiAgICAgdW5zaWduZWQgaW50ZWdlcjE7CiAgICAgZmxvYXQgZmxvYXQxOwogICAgIGZsb2F0
IGZsb2F0MjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVu
LmgJKHJldmlzaW9uIDIzMDI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1RleHRSdW4uaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAo
QykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAw
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAw
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA2LCAyMDA3LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtNDQsOCArNDQsOCBAQCBzdHJ1Y3QgV2lkdGhJdGVyYXRvcjsKIGNs
YXNzIFRleHRSdW4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAg
IGV4cGxpY2l0IFRleHRSdW4oU3RyaW5nVmlldyB0ZXh0LCBmbG9hdCB4cG9zID0gMCwgZmxvYXQg
ZXhwYW5zaW9uID0gMCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBEZWZh
dWx0RXhwYW5zaW9uLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUiwgYm9vbCBkaXJlY3Rp
b25hbE92ZXJyaWRlID0gZmFsc2UsIGJvb2wgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoID0gdHJ1
ZSkKLSAgICAgICAgOiBtX3RleHQodGV4dCkKKyAgICBleHBsaWNpdCBUZXh0UnVuKFN0cmluZ1Zp
ZXcmJiBzdHJpbmdWaWV3LCBmbG9hdCB4cG9zID0gMCwgZmxvYXQgZXhwYW5zaW9uID0gMCwgRXhw
YW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBEZWZhdWx0RXhwYW5zaW9uLCBUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUiwgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlID0gZmFs
c2UsIGJvb2wgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoID0gdHJ1ZSkKKyAgICAgICAgOiBtX3N0
cmluZ1ZpZXcoV1RGTW92ZShzdHJpbmdWaWV3KSkKICAgICAgICAgLCBtX3RhYlNpemUoMCkKICAg
ICAgICAgLCBtX3hwb3MoeHBvcykKICAgICAgICAgLCBtX2hvcml6b250YWxHbHlwaFN0cmV0Y2go
MSkKQEAgLTU5LDkgKzU5LDIwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgZXhwbGlj
aXQgVGV4dFJ1bihjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCBmbG9hdCB4cG9zID0gMCwg
ZmxvYXQgZXhwYW5zaW9uID0gMCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3Ig
PSBEZWZhdWx0RXhwYW5zaW9uLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUiwgYm9vbCBk
aXJlY3Rpb25hbE92ZXJyaWRlID0gZmFsc2UsIGJvb2wgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRo
ID0gdHJ1ZSkKKyAgICAgICAgOiBUZXh0UnVuKFN0cmluZ1ZpZXcoc3RyaW5nVmlldyksIHhwb3Ms
IGV4cGFuc2lvbiwgZXhwYW5zaW9uQmVoYXZpb3IsIGRpcmVjdGlvbiwgZGlyZWN0aW9uYWxPdmVy
cmlkZSwgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoKQorICAgIHsKKyAgICB9CisKKyAgICBleHBs
aWNpdCBUZXh0UnVuKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCB4cG9zID0gMCwgZmxvYXQg
ZXhwYW5zaW9uID0gMCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBEZWZh
dWx0RXhwYW5zaW9uLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUiwgYm9vbCBkaXJlY3Rp
b25hbE92ZXJyaWRlID0gZmFsc2UsIGJvb2wgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoID0gdHJ1
ZSkKKyAgICAgICAgOiBUZXh0UnVuKFN0cmluZ1ZpZXcoc3RyaW5nKSwgeHBvcywgZXhwYW5zaW9u
LCBleHBhbnNpb25CZWhhdmlvciwgZGlyZWN0aW9uLCBkaXJlY3Rpb25hbE92ZXJyaWRlLCBjaGFy
YWN0ZXJTY2FuRm9yQ29kZVBhdGgpCisgICAgeworICAgICAgICBtX3N0cmluZyA9IHN0cmluZzsK
KyAgICB9CisKICAgICBUZXh0UnVuIHN1YlJ1bih1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oc3RhcnRPZmZzZXQgPCBtX3RleHQubGVuZ3RoKCkpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXJ0T2Zmc2V0IDwgbV9zdHJpbmdW
aWV3Lmxlbmd0aCgpKTsKIAogICAgICAgICBUZXh0UnVuIHJlc3VsdCA9ICp0aGlzOwogCkBAIC03
MywyMCArODQsMjQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAot
ICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihpIDwgbV90ZXh0Lmxlbmd0aCgpKTsgcmV0dXJuIG1fdGV4dFtpXTsg
fQotICAgIGNvbnN0IExDaGFyKiBkYXRhOCh1bnNpZ25lZCBpKSBjb25zdCB7IEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBtX3RleHQubGVuZ3RoKCkpOyBBU1NFUlQoaXM4Qml0
KCkpOyByZXR1cm4gJm1fdGV4dC5jaGFyYWN0ZXJzOCgpW2ldOyB9Ci0gICAgY29uc3QgVUNoYXIq
IGRhdGExNih1bnNpZ25lZCBpKSBjb25zdCB7IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKGkgPCBtX3RleHQubGVuZ3RoKCkpOyBBU1NFUlQoIWlzOEJpdCgpKTsgcmV0dXJuICZtX3Rl
eHQuY2hhcmFjdGVyczE2KClbaV07IH0KLQotICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgp
IGNvbnN0IHsgQVNTRVJUKGlzOEJpdCgpKTsgcmV0dXJuIG1fdGV4dC5jaGFyYWN0ZXJzOCgpOyB9
Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMxNigpIGNvbnN0IHsgQVNTRVJUKCFpczhCaXQo
KSk7IHJldHVybiBtX3RleHQuY2hhcmFjdGVyczE2KCk7IH0KLQotICAgIGJvb2wgaXM4Qml0KCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0LmlzOEJpdCgpOyB9Ci0gICAgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0Lmxlbmd0aCgpOyB9Ci0gICAgU3RyaW5nIHN0cmluZygpIGNv
bnN0IHsgcmV0dXJuIG1fdGV4dC50b1N0cmluZygpOyB9Ci0KLSAgICB2b2lkIHNldFRleHQoY29u
c3QgTENoYXIqIGMsIHVuc2lnbmVkIGxlbikgeyBtX3RleHQgPSBTdHJpbmdWaWV3KGMsIGxlbik7
IH0KLSAgICB2b2lkIHNldFRleHQoY29uc3QgVUNoYXIqIGMsIHVuc2lnbmVkIGxlbikgeyBtX3Rl
eHQgPSBTdHJpbmdWaWV3KGMsIGxlbik7IH0KLSAgICB2b2lkIHNldFRleHQoU3RyaW5nVmlldyBz
dHJpbmdWaWV3KSB7IG1fdGV4dCA9IHN0cmluZ1ZpZXc7IH0KKyAgICBVQ2hhciBvcGVyYXRvcltd
KHVuc2lnbmVkIGkpIGNvbnN0IHsgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihpIDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpKTsgcmV0dXJuIG1fc3RyaW5nVmlld1tpXTsg
fQorICAgIGNvbnN0IExDaGFyKiBkYXRhOCh1bnNpZ25lZCBpKSBjb25zdCB7IFJFTEVBU0VfQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IG1fc3RyaW5nVmlldy5sZW5ndGgoKSk7
IEFTU0VSVChpczhCaXQoKSk7IHJldHVybiAmbV9zdHJpbmdWaWV3LmNoYXJhY3RlcnM4KClbaV07
IH0KKyAgICBjb25zdCBVQ2hhciogZGF0YTE2KHVuc2lnbmVkIGkpIGNvbnN0IHsgUkVMRUFTRV9B
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpIDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgp
KTsgQVNTRVJUKCFpczhCaXQoKSk7IHJldHVybiAmbV9zdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigp
W2ldOyB9CisKKyAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdCB7IEFTU0VSVChp
czhCaXQoKSk7IHJldHVybiBtX3N0cmluZ1ZpZXcuY2hhcmFjdGVyczgoKTsgfQorICAgIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdCB7IEFTU0VSVCghaXM4Qml0KCkpOyByZXR1cm4g
bV9zdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpOyB9CisKKyAgICBib29sIGlzOEJpdCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaW5nVmlldy5pczhCaXQoKTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nVmlldy5sZW5ndGgoKTsgfQorICAgIFN0cmluZyBzdHJp
bmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5pc0VtcHR5KCkgPyBtX3N0cmluZ1ZpZXcudG9T
dHJpbmcoKSA6IG1fc3RyaW5nOyB9CisKKyAgICB2b2lkIHNldFRleHQoY29uc3QgTENoYXIqIGMs
IHVuc2lnbmVkIGxlbikgeyBzZXRUZXh0KFN0cmluZ1ZpZXcoYywgbGVuKSk7IH0KKyAgICB2b2lk
IHNldFRleHQoY29uc3QgVUNoYXIqIGMsIHVuc2lnbmVkIGxlbikgeyBzZXRUZXh0KFN0cmluZ1Zp
ZXcoYywgbGVuKSk7IH0KKyAgICB2b2lkIHNldFRleHQoU3RyaW5nVmlldyBzdHJpbmdWaWV3KQor
ICAgIHsKKyAgICAgICAgbV9zdHJpbmdWaWV3ID0gc3RyaW5nVmlldzsKKyAgICAgICAgbV9zdHJp
bmcgPSBlbXB0eVN0cmluZygpOworICAgIH0KIAogICAgIGZsb2F0IGhvcml6b250YWxHbHlwaFN0
cmV0Y2goKSBjb25zdCB7IHJldHVybiBtX2hvcml6b250YWxHbHlwaFN0cmV0Y2g7IH0KICAgICB2
b2lkIHNldEhvcml6b250YWxHbHlwaFN0cmV0Y2goZmxvYXQgc2NhbGUpIHsgbV9ob3Jpem9udGFs
R2x5cGhTdHJldGNoID0gc2NhbGU7IH0KQEAgLTExMCwxMCArMTI1LDExIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldERpcmVjdGlvbihUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgeyBtX2RpcmVjdGlv
biA9IGRpcmVjdGlvbjsgfQogICAgIHZvaWQgc2V0RGlyZWN0aW9uYWxPdmVycmlkZShib29sIG92
ZXJyaWRlKSB7IG1fZGlyZWN0aW9uYWxPdmVycmlkZSA9IG92ZXJyaWRlOyB9CiAgICAgdm9pZCBz
ZXRDaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGgoYm9vbCBzY2FuKSB7IG1fY2hhcmFjdGVyU2NhbkZv
ckNvZGVQYXRoID0gc2NhbjsgfQotICAgIFN0cmluZ1ZpZXcgdGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGV4dDsgfQorICAgIFN0cmluZ1ZpZXcgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5n
VmlldzsgfQogCiBwcml2YXRlOgotICAgIFN0cmluZ1ZpZXcgbV90ZXh0OworICAgIFN0cmluZ1Zp
ZXcgbV9zdHJpbmdWaWV3OworICAgIFN0cmluZyBtX3N0cmluZzsKIAogICAgIHVuc2lnbmVkIG1f
dGFiU2l6ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcAkocmV2aXNpb24gMjMwMjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsOCArMjAwLDcgQEAgTGF5b3V0UmVj
dCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvbgogICAgIExheW91dFVuaXQgc2VsZWN0aW9u
VG9wID0gdGhpcy0+c2VsZWN0aW9uVG9wKCk7CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWln
aHQgPSB0aGlzLT5zZWxlY3Rpb25IZWlnaHQoKTsKIAotICAgIGF1dG8gdGV4dCA9IHRoaXMtPnRl
eHQoKTsKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVUZXh0UnVuKHRleHQpOworICAgIFRl
eHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRSdW4oKTsKIAogICAgIExheW91dFJlY3Qgc2VsZWN0
aW9uUmVjdCA9IExheW91dFJlY3QoTGF5b3V0UG9pbnQobG9naWNhbExlZnQoKSwgc2VsZWN0aW9u
VG9wKSwgTGF5b3V0U2l6ZShtX2xvZ2ljYWxXaWR0aCwgc2VsZWN0aW9uSGVpZ2h0KSk7CiAgICAg
Ly8gQXZvaWQgbWVhc3VyaW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBz
ZWxlY3RlZCBhcyBhbiBvcHRpbWl6YXRpb24uCkBAIC01NzAsOCArNTY5LDcgQEAgdm9pZCBJbmxp
bmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQogICAgIC8vIFBhaW50IGRlY29yYXRpb25z
CiAgICAgVGV4dERlY29yYXRpb24gdGV4dERlY29yYXRpb25zID0gbGluZVN0eWxlLnRleHREZWNv
cmF0aW9uc0luRWZmZWN0KCk7CiAgICAgaWYgKHRleHREZWNvcmF0aW9ucyAhPSBUZXh0RGVjb3Jh
dGlvbk5vbmUgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24pIHsKLSAg
ICAgICAgYXV0byB0ZXh0ID0gdGhpcy0+dGV4dCgpOwotICAgICAgICBUZXh0UnVuIHRleHRSdW4g
PSBjcmVhdGVUZXh0UnVuKHRleHQpOworICAgICAgICBUZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVU
ZXh0UnVuKCk7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHRSdW4ubGVuZ3RoKCk7CiAg
ICAgICAgIGlmIChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbikKICAgICAgICAgICAgIGxl
bmd0aCA9IG1fdHJ1bmNhdGlvbjsKQEAgLTY3Niw4ICs2NzQsNyBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50UGxhdGZvcm1Eb2N1bWVuCiAgICAgICAgIGludCBkZWx0YVkgPSByZW5kZXJlcigp
LnN0eWxlKCkuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0aW9uQm90dG9tKCkg
LSBsb2dpY2FsQm90dG9tKCkgOiBsb2dpY2FsVG9wKCkgLSBzZWxlY3Rpb25Ub3AoKTsKICAgICAg
ICAgaW50IHNlbEhlaWdodCA9IHNlbGVjdGlvbkhlaWdodCgpOwogICAgICAgICBGbG9hdFBvaW50
IHN0YXJ0UG9pbnQoYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSk7Ci0gICAg
ICAgIGF1dG8gdGV4dCA9IHRoaXMtPnRleHQoKTsKLSAgICAgICAgVGV4dFJ1biBydW4gPSBjcmVh
dGVUZXh0UnVuKHRleHQpOworICAgICAgICBUZXh0UnVuIHJ1biA9IGNyZWF0ZVRleHRSdW4oKTsK
IAogICAgICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KHN0YXJ0UG9p
bnQsIEZsb2F0U2l6ZSgwLCBzZWxIZWlnaHQpKTsKICAgICAgICAgbGluZUZvbnQoKS5hZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHNlbGVjdGlvblJlY3QsIG1hcmtlZFRleHQuc3RhcnRP
ZmZzZXQsIG1hcmtlZFRleHQuZW5kT2Zmc2V0KTsKQEAgLTk3NCw4ICs5NzEsNyBAQCB2b2lkIElu
bGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dEJhY2tnCiAKICAgICAvLyBOb3RlIHRoYXQgaWYg
dGhlIHRleHQgaXMgdHJ1bmNhdGVkLCB3ZSBsZXQgdGhlIHRoaW5nIGJlaW5nIHBhaW50ZWQgaW4g
dGhlIHRydW5jYXRpb24KICAgICAvLyBkcmF3IGl0cyBvd24gaGlnaGxpZ2h0LgotICAgIGF1dG8g
dGV4dCA9IHRoaXMtPnRleHQoKTsKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVUZXh0UnVu
KHRleHQpOworICAgIFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRSdW4oKTsKIAogICAgIGNv
bnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSByb290KCk7CiAgICAgTGF5b3V0VW5pdCBzZWxl
Y3Rpb25Cb3R0b20gPSByb290Qm94LnNlbGVjdGlvbkJvdHRvbSgpOwpAQCAtMTAyMiw4ICsxMDE4
LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRGb3JlZwogICAgICAgICBj
b250ZXh0LnNldEFscGhhKG1hcmtlZFRleHQuc3R5bGUuYWxwaGEpOwogICAgIH0KICAgICAvLyBU
ZXh0UGFpbnRlciB3YW50cyB0aGUgYm94IHJlY3RhbmdsZSBhbmQgdGV4dCBvcmlnaW4gb2YgdGhl
IGVudGlyZSBsaW5lIGJveC4KLSAgICBhdXRvIHRleHQgPSB0aGlzLT50ZXh0KCk7Ci0gICAgdGV4
dFBhaW50ZXIucGFpbnRSYW5nZShjcmVhdGVUZXh0UnVuKHRleHQpLCBib3hSZWN0LCB0ZXh0T3Jp
Z2luRnJvbUJveFJlY3QoYm94UmVjdCksIG1hcmtlZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtlZFRl
eHQuZW5kT2Zmc2V0KTsKKyAgICB0ZXh0UGFpbnRlci5wYWludFJhbmdlKGNyZWF0ZVRleHRSdW4o
KSwgYm94UmVjdCwgdGV4dE9yaWdpbkZyb21Cb3hSZWN0KGJveFJlY3QpLCBtYXJrZWRUZXh0LnN0
YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7CiB9CiAKIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnRNYXJrZWRUZXh0RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBjbGlwT3V0UmVjdCwgY29u
c3QgU3R5bGVkTWFya2VkVGV4dCYgbWFya2VkVGV4dCkKQEAgLTEwNDUsOCArMTA0MCw3IEBAIHZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0RGVjb3IKIAogICAgIC8vIE5vdGUgdGhh
dCBpZiB0aGUgdGV4dCBpcyB0cnVuY2F0ZWQsIHdlIGxldCB0aGUgdGhpbmcgYmVpbmcgcGFpbnRl
ZCBpbiB0aGUgdHJ1bmNhdGlvbgogICAgIC8vIGRyYXcgaXRzIG93biBkZWNvcmF0aW9uLgotICAg
IGF1dG8gdGV4dCA9IHRoaXMtPnRleHQoKTsKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVU
ZXh0UnVuKHRleHQpOworICAgIFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRSdW4oKTsKIAog
ICAgIC8vIEF2b2lkIG1lYXN1cmluZyB0aGUgdGV4dCB3aGVuIHRoZSBlbnRpcmUgbGluZSBib3gg
aXMgc2VsZWN0ZWQgYXMgYW4gb3B0aW1pemF0aW9uLgogICAgIEZsb2F0UmVjdCBzbmFwcGVkU2Vs
ZWN0aW9uUmVjdCA9IGJveFJlY3Q7CkBAIC0xMTkwLDggKzExODQsNyBAQCBpbnQgSW5saW5lVGV4
dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxvCiAgICAgICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgPyAwIDogbGVuKCk7CiAgICAgYm9vbCBpZ25vcmVDb21iaW5lZFRleHQgPSB0
cnVlOwogICAgIGJvb2wgaWdub3JlSHlwaGVuID0gdHJ1ZTsKLSAgICBhdXRvIHRleHQgPSB0aGlz
LT50ZXh0KGlnbm9yZUNvbWJpbmVkVGV4dCwgaWdub3JlSHlwaGVuKTsKLSAgICByZXR1cm4gbGlu
ZUZvbnQoKS5vZmZzZXRGb3JQb3NpdGlvbihjcmVhdGVUZXh0UnVuKHRleHQpLCBsaW5lT2Zmc2V0
IC0gbG9naWNhbExlZnQoKSwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOworICAgIHJldHVybiBsaW5l
Rm9udCgpLm9mZnNldEZvclBvc2l0aW9uKGNyZWF0ZVRleHRSdW4oaWdub3JlQ29tYmluZWRUZXh0
LCBpZ25vcmVIeXBoZW4pLCBsaW5lT2Zmc2V0IC0gbG9naWNhbExlZnQoKSwgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpOwogfQogCiBmbG9hdCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldCh1
bnNpZ25lZCBvZmZzZXQpIGNvbnN0CkBAIC0xMjE2LDE2ICsxMjA5LDE1IEBAIGZsb2F0IElubGlu
ZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KHUKICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJl
Y3QgPSBMYXlvdXRSZWN0KGxvZ2ljYWxMZWZ0KCksIDAsIDAsIDApOwogICAgIGJvb2wgaWdub3Jl
Q29tYmluZWRUZXh0ID0gdHJ1ZTsKICAgICBib29sIGlnbm9yZUh5cGhlbiA9IHRydWU7Ci0gICAg
YXV0byB0ZXh0ID0gdGhpcy0+dGV4dChpZ25vcmVDb21iaW5lZFRleHQsIGlnbm9yZUh5cGhlbik7
Ci0gICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bih0ZXh0KTsKKyAgICBUZXh0UnVu
IHRleHRSdW4gPSBjcmVhdGVUZXh0UnVuKGlnbm9yZUNvbWJpbmVkVGV4dCwgaWdub3JlSHlwaGVu
KTsKICAgICBsaW5lRm9udCgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNl
bGVjdGlvblJlY3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogICAgIHJldHVybiBzbmFwUmVj
dFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgcmVuZGVy
ZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCksIHRleHRSdW4ubHRyKCkpLm1heFgo
KTsKIH0KIAotVGV4dFJ1biBJbmxpbmVUZXh0Qm94OjpjcmVhdGVUZXh0UnVuKFN0cmluZyYgc3Ry
aW5nKSBjb25zdAorVGV4dFJ1biBJbmxpbmVUZXh0Qm94OjpjcmVhdGVUZXh0UnVuKGJvb2wgaWdu
b3JlQ29tYmluZWRUZXh0LCBib29sIGlnbm9yZUh5cGhlbmcpIGNvbnN0CiB7CiAgICAgY29uc3Qg
YXV0byYgc3R5bGUgPSBsaW5lU3R5bGUoKTsKLSAgICBUZXh0UnVuIHRleHRSdW4geyBzdHJpbmcs
IHRleHRQb3MoKSwgZXhwYW5zaW9uKCksIGV4cGFuc2lvbkJlaGF2aW9yKCksIGRpcmVjdGlvbigp
LCBkaXJPdmVycmlkZSgpIHx8IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXIsICFy
ZW5kZXJlcigpLmNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCgpIH07CisgICAgVGV4dFJ1biB0ZXh0
UnVuIHsgdGV4dChpZ25vcmVDb21iaW5lZFRleHQsIGlnbm9yZUh5cGhlbmcpLCB0ZXh0UG9zKCks
IGV4cGFuc2lvbigpLCBleHBhbnNpb25CZWhhdmlvcigpLCBkaXJlY3Rpb24oKSwgZGlyT3ZlcnJp
ZGUoKSB8fCBzdHlsZS5ydGxPcmRlcmluZygpID09IFZpc3VhbE9yZGVyLCAhcmVuZGVyZXIoKS5j
YW5Vc2VTaW1wbGVGb250Q29kZVBhdGgoKSB9OwogICAgIHRleHRSdW4uc2V0VGFiU2l6ZSghc3R5
bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCksIHN0eWxlLnRhYlNpemUoKSk7CiAgICAgcmV0dXJuIHRl
eHRSdW47CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJ
KHJldmlzaW9uIDIzMDI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw3ICsxODUsNyBAQCBwcml2YXRlOgogICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBsaW5lRm9udCgpIGNvbnN0OwogCiAgICAgU3RyaW5nIHRleHQoYm9v
bCBpZ25vcmVDb21iaW5lZFRleHQgPSBmYWxzZSwgYm9vbCBpZ25vcmVIeXBoZW4gPSBmYWxzZSkg
Y29uc3Q7IC8vIFRoZSBlZmZlY3RpdmUgdGV4dCBmb3IgdGhlIHJ1bi4KLSAgICBUZXh0UnVuIGNy
ZWF0ZVRleHRSdW4oU3RyaW5nJikgY29uc3Q7CisgICAgVGV4dFJ1biBjcmVhdGVUZXh0UnVuKGJv
b2wgaWdub3JlQ29tYmluZWRUZXh0ID0gZmFsc2UsIGJvb2wgaWdub3JlSHlwaGVuID0gZmFsc2Up
IGNvbnN0OwogCiAgICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25z
dDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZp
c2lvbiAyMzAyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDkzLDcgKzMwOTMsNyBAQCBjb25zdCBjaGFyKiBSZW5kZXJC
bG9jazo6cmVuZGVyTmFtZSgpIGNvCiAgICAgcmV0dXJuICJSZW5kZXJCbG9jayI7CiB9CiAKLVRl
eHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oU3RyaW5nVmlldyBzdHJpbmdWaWV3
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwg
VGV4dFJ1bkZsYWdzIGZsYWdzKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1
bihjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzIGZsYWdzKQogewogICAg
IFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IExUUjsKICAgICBib29sIGRpcmVjdGlvbmFs
T3ZlcnJpZGUgPSBzdHlsZS5ydGxPcmRlcmluZygpID09IFZpc3VhbE9yZGVyOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDIzMDI3NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTYsNyArMTk2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gb2JqLmlzRmxvYXRpbmcoKSB8
fCAob2JqLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmICFvYmouc3R5bGUoKS5pc09yaWdpbmFs
RGlzcGxheUlubGluZVR5cGUoKSAmJiAhb2JqLmNvbnRhaW5lcigpLT5pc1JlbmRlcklubGluZSgp
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFN0cmluZ1Zp
ZXcsIGNvbnN0IFJlbmRlclN0eWxlJiwKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0
UnVuKGNvbnN0IFN0cmluZ1ZpZXcmLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIEV4cGFu
c2lvbkJlaGF2aW9yID0gRGVmYXVsdEV4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzID0gRGVmYXVsdFRl
eHRSdW5GbGFncyk7CiAgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBT
dHJpbmcmLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yID0g
RGVmYXVsdEV4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzID0gRGVmYXVsdFRleHRSdW5GbGFncyk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAyMzAy
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNDMsNyArMTI0Myw3IEBAIGJvb2wgUmVuZGVyVGV4dDo6Y29tcHV0ZUNhblVz
ZVNpbXBsaWZpZWQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQWRkaXRpb25hbCBj
aGVjayBvbiB0aGUgZm9udCBjb2RlcGF0aC4KLSAgICBUZXh0UnVuIHJ1bih0ZXh0KCkpOworICAg
IFRleHRSdW4gcnVuKHN0cmluZ1ZpZXcoKSk7CiAgICAgcnVuLnNldENoYXJhY3RlclNjYW5Gb3JD
b2RlUGF0aChmYWxzZSk7CiAgICAgaWYgKGZvbnQuY29kZVBhdGgocnVuKSAhPSBGb250Q2FzY2Fk
ZTo6U2ltcGxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAyMzAyNzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMgQXZvaWRhbmNlUmVhc29uRmxhZ3MgY2FuVXNl
Rm9yRm9uCiAgICAgICAgICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIHBhdGggYXQg
dGhpcyBwb2ludC4gV2UgYWxyZWFkeSBrbm93IGl0IGNhbid0IGJlIHNpbXBsZS4KICAgICAgICAg
ICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0NvbXBsZXhGb250Q29k
ZVBhdGgsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIFRleHRSdW4gcnVuKHRleHRSZW5kZXJlci50ZXh0KCkpOworICAgICAgICAgICAgVGV4
dFJ1biBydW4odGV4dFJlbmRlcmVyLnN0cmluZ1ZpZXcoKSk7CiAgICAgICAgICAgICBydW4uc2V0
Q2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoKGZhbHNlKTsKICAgICAgICAgICAgIGlmIChzdHlsZS5m
b250Q2FzY2FkZSgpLmNvZGVQYXRoKHJ1bikgIT0gRm9udENhc2NhZGU6OlNpbXBsZSkKICAgICAg
ICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNDb21wbGV4
Rm9udENvZGVQYXRoLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRl
eHRGcmFnbWVudEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjMwMjc0KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlN0eWxl
OjpTdHlsZShjb25zdAogICAgICwgd29yZFNwYWNpbmcoZm9udC53b3JkU3BhY2luZygpKQogICAg
ICwgdGFiV2lkdGgoY29sbGFwc2VXaGl0ZXNwYWNlID8gMCA6IHN0eWxlLnRhYlNpemUoKSkKICAg
ICAsIHNob3VsZEh5cGhlbmF0ZShzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuc0F1dG8gJiYgY2Fu
SHlwaGVuYXRlKHN0eWxlLmxvY2FsZSgpKSkKLSAgICAsIGh5cGhlblN0cmluZ1dpZHRoKHNob3Vs
ZEh5cGhlbmF0ZSA/ICh1c2VTaW1wbGlmaWVkVGV4dE1lYXN1cmluZyA/IGZvbnQud2lkdGhGb3JT
aW1wbGVUZXh0KHN0eWxlLmh5cGhlblN0cmluZygpKSA6IGZvbnQud2lkdGgoVGV4dFJ1bihzdHls
ZS5oeXBoZW5TdHJpbmcoKSkpKSA6IDApCisgICAgLCBoeXBoZW5TdHJpbmdXaWR0aChzaG91bGRI
eXBoZW5hdGUgPyAodXNlU2ltcGxpZmllZFRleHRNZWFzdXJpbmcgPyBmb250LndpZHRoRm9yU2lt
cGxlVGV4dChzdHlsZS5oeXBoZW5TdHJpbmcoKSkgOiBmb250LndpZHRoKFRleHRSdW4oU3RyaW5n
VmlldyhzdHlsZS5oeXBoZW5TdHJpbmcoKSkpKSkgOiAwKQogICAgICwgaHlwaGVuTGltaXRCZWZv
cmUoc3R5bGUuaHlwaGVuYXRpb25MaW1pdEJlZm9yZSgpIDwgMCA/IDIgOiBzdHlsZS5oeXBoZW5h
dGlvbkxpbWl0QmVmb3JlKCkpCiAgICAgLCBoeXBoZW5MaW1pdEFmdGVyKHN0eWxlLmh5cGhlbmF0
aW9uTGltaXRBZnRlcigpIDwgMCA/IDIgOiBzdHlsZS5oeXBoZW5hdGlvbkxpbWl0QWZ0ZXIoKSkK
ICAgICAsIGxvY2FsZShzdHlsZS5sb2NhbGUoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337271</attachid>
            <date>2018-04-05 09:47:31 -0700</date>
            <delta_ts>2018-04-05 12:49:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184182-20180405094731.patch</filename>
            <type>text/plain</type>
            <size>17658</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMDMwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDE4LTA0LTA1ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgRml4IHRoZSBs
aWZldGltZSBvZiB0aGUgVGV4dFJ1bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg0MTgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW5saW5lVGV4dEJveDo6Y3JlYXRlVGV4dFJ1bigpIHRha2VzIGEgbm9u
LWNvbnN0IGx2YWx1ZSByZWZlcmVuY2UgU3RyaW5nLgorICAgICAgICBJdCBpcyB0ZW1wdGluZyB0
byBjaGFuZ2UgdGhlIHNpZ25hdHVyZSBvZiB0aGlzIG1ldGhvZCB0byB0YWtlIGEgY29uc3QgbHZh
bHVlIAorICAgICAgICByZWZlcmVuY2UuIEJ1dCB0aGlzIHdhcyBkb25lIGludGVudGlvbmFsbHku
IFRleHRSdW4gaXMgZWZmZWN0aXZlbHkgYSBTdHJpbmdWaWV3OgorICAgICAgICBpdCBkb2VzIG5v
dCBvd24gdGhlIHBhc3NlZCBzdHJpbmcuIEhhdmluZyB0aGUgYXJndW1lbnQgYSBub24tY29uc3Qg
bHZhbHVlCisgICAgICAgIHJlZmVyZW5jZSBtYWtlcyB0aGUgY29tcGlsZXIgcHJldmVudCBjYWxs
cyBsaWtlIGNyZWF0ZVRleHRSdW4oImFiYyIpLgorCisgICAgICAgIFRvIGhhdmUgYSBiZXR0ZXIg
d2F5IHRvIGV4cHJlc3MgdGhlIGxpZmV0aW1lIG9mIFRleHRSdW4sIHdlIGFyZSBnb2luZyB0byAK
KyAgICAgICAgYWRkIGEgbmV3IGNvbnN0cnVjdG9yIHRvIFRleHRSdW4gd2hpY2ggdGFrZXMgYSBj
b25zdCBsdmFsdWUgcmVmZXJlbmNlIFN0cmluZy4KKyAgICAgICAgSW4gdGhpcyBjYXNlLCBUZXh0
UnVuIHdpbGwgb3duIGEgY29weSBvZiB0aGlzIHN0cmluZy4gVGhlIFRleHRSdW4gU3RyaW5nVmll
dworICAgICAgICB3aWxsIGJlIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhpcyBTdHJpbmcuCisKKyAg
ICAgICAgVGV4dFJ1biB3aWxsIGhhdmUgdHdvIG1vZGVzIHJlZ2FyZGluZyB0aGUgdW5kZXJseWlu
ZyBzdHJpbmc6CisgICAgICAgIC0tIE93bmVkIHN0cmluZzogSW4gdGhpcyBjYXNlLCBUZXh0UnVu
OjptX3N0cmluZyB3aWxsIGhhdmUgYSByZWZlcmVuY2UgdG8KKyAgICAgICAgdGhlIHVuZGVybHlp
bmcgc3RyaW5nLiBUZXh0UnVuOjptX3N0cmluZ1ZpZXcgd2lsbCBlbmNhcHN1bGF0ZSB0aGUgb3du
ZWQgc3RyaW5nLgorCisgICAgICAgIC0tIE5vdCBvd25lZCBzdHJpbmc6IEluIHRoaXMgY2FzZSwg
dGhlIGNhbGxlciB3aWxsIGNyZWF0ZSBhIFRleHRSdW4gYnkKKyAgICAgICAgZXhwbGljaXRseSBw
YXNzaW5nIGEgU3RyaW5nVmlldy4gVGV4dFJ1bjo6bV9zdHJpbmdWaWV3IHdpbGwgYmUgYSBjb3B5
IG9mCisgICAgICAgIHRoZSBwYXNzZWQgU3RyaW5nVmlldy4gVGV4dFJ1bjo6bV9zdHJpbmcgd2ls
bCBoYXZlIG5vIHVzZS4gVGhlIGxpZmV0aW1lCisgICAgICAgIG9mIHRoZSB1bmRlcmx5aW5nIHN0
cmluZyBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9UZXh0UnVuLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0
UnVuLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpUZXh0UnVuKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRSdW46OnN1YlJ1biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVu
OjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OmRhdGE4IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OmRhdGExNiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0UnVuOjpjaGFyYWN0ZXJzOCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0UnVuOjpjaGFyYWN0ZXJzMTYgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1
bjo6aXM4Qml0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46Omxlbmd0aCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpzdHJpbmcgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFJ1bjo6c2V0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjp0
ZXh0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lVGV4dEJveDo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VyKToKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dEJhY2tncm91bmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0Rm9yZWdyb3VuZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHREZWNvcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zm
c2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNyZWF0ZVRleHRS
dW4gY29uc3QpOgorICAgICAgICBUaGVyZSBpcyBubyBuZWVkIGZvciB0aGlzIGZ1bmN0aW9uIHRv
IHRha2UgYSBTdHJpbmcgYXJndW1lbnQgYW55bW9yZS4gVGhlCisgICAgICAgIHJlYXNvbiBmb3Ig
cGFzc2luZyB0aGUgU3RyaW5nIHdhcyB0byBndWFyYW50ZWUgaXRzIGxpZmV0aW1lIGJ5IGtlZXBp
bmcKKyAgICAgICAgYSBjb3B5IG9mIGl0IGluIHRoZSBjYWxsZXIgc2lkZS4gTm93IHRoZXJlIGlz
IG5vIG5lZWQgZm9yIHRoYXQuIFRoZSBUZXh0UnVuCisgICAgICAgIGl0c2VsZiB3aWxsIGtlZXAg
dGhpcyBjb3B5LgorCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0Ojpjb21wdXRlQ2FuVXNlU2ltcGxpZmllZFRleHRNZWFzdXJpbmcgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZvckZvbnRBbmRUZXh0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjpTdHlsZTo6U3R5
bGUpOgorCiAyMDE4LTA0LTA0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBXZWJSVEMgZGF0YSBjaGFubmVsIG9ubHkgYXBwbGljYXRpb25zIHJlcXVpcmUgY2Fw
dHVyZSBwZXJtaXNzaW9ucyBmb3IgZGlyZWN0IGNvbm5lY3Rpb25zCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmNwcAkocmV2aXNpb24gMjMwMjc0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDcgKzI5LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEV4
cGVjdGVkVGV4dFJ1blNpemUgewotICAgIFN0cmluZ1ZpZXcgdGV4dDsKKyAgICBTdHJpbmdWaWV3
IHZpZXc7CisgICAgU3RyaW5nIHRleHQ7CiAgICAgdW5zaWduZWQgaW50ZWdlcjE7CiAgICAgZmxv
YXQgZmxvYXQxOwogICAgIGZsb2F0IGZsb2F0MjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1RleHRSdW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgJKHJldmlzaW9uIDIzMDI3NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsy
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQog
ICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQog
ICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICog
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDQsOCArNDQsOCBAQCBzdHJ1
Y3QgV2lkdGhJdGVyYXRvcjsKIGNsYXNzIFRleHRSdW4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IFRleHRSdW4oU3RyaW5nVmlldyB0ZXh0LCBm
bG9hdCB4cG9zID0gMCwgZmxvYXQgZXhwYW5zaW9uID0gMCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhw
YW5zaW9uQmVoYXZpb3IgPSBEZWZhdWx0RXhwYW5zaW9uLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
biA9IExUUiwgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlID0gZmFsc2UsIGJvb2wgY2hhcmFjdGVy
U2NhbkZvckNvZGVQYXRoID0gdHJ1ZSkKLSAgICAgICAgOiBtX3RleHQodGV4dCkKKyAgICBleHBs
aWNpdCBUZXh0UnVuKFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgZmxvYXQgeHBvcyA9IDAsIGZsb2F0
IGV4cGFuc2lvbiA9IDAsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yID0gRGVm
YXVsdEV4cGFuc2lvbiwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBMVFIsIGJvb2wgZGlyZWN0
aW9uYWxPdmVycmlkZSA9IGZhbHNlLCBib29sIGNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCA9IHRy
dWUpCisgICAgICAgIDogbV9zdHJpbmdWaWV3KHN0cmluZ1ZpZXcpCiAgICAgICAgICwgbV90YWJT
aXplKDApCiAgICAgICAgICwgbV94cG9zKHhwb3MpCiAgICAgICAgICwgbV9ob3Jpem9udGFsR2x5
cGhTdHJldGNoKDEpCkBAIC01OSw5ICs1OSwxNSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAor
ICAgIGV4cGxpY2l0IFRleHRSdW4oY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0IHhwb3MgPSAw
LCBmbG9hdCBleHBhbnNpb24gPSAwLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlv
ciA9IERlZmF1bHRFeHBhbnNpb24sIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSLCBib29s
IGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBmYWxzZSwgYm9vbCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBh
dGggPSB0cnVlKQorICAgICAgICA6IFRleHRSdW4oU3RyaW5nVmlldyhzdHJpbmcpLCB4cG9zLCBl
eHBhbnNpb24sIGV4cGFuc2lvbkJlaGF2aW9yLCBkaXJlY3Rpb24sIGRpcmVjdGlvbmFsT3ZlcnJp
ZGUsIGNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCkKKyAgICB7CisgICAgICAgIG1fc3RyaW5nID0g
c3RyaW5nOworICAgIH0KKwogICAgIFRleHRSdW4gc3ViUnVuKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihzdGFydE9mZnNldCA8IG1fdGV4dC5sZW5ndGgoKSk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhcnRPZmZzZXQgPCBt
X3N0cmluZ1ZpZXcubGVuZ3RoKCkpOwogCiAgICAgICAgIFRleHRSdW4gcmVzdWx0ID0gKnRoaXM7
CiAKQEAgLTczLDIwICs3OSwyNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogCi0gICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IEFTU0VSVF9X
SVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBtX3RleHQubGVuZ3RoKCkpOyByZXR1cm4gbV90
ZXh0W2ldOyB9Ci0gICAgY29uc3QgTENoYXIqIGRhdGE4KHVuc2lnbmVkIGkpIGNvbnN0IHsgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IG1fdGV4dC5sZW5ndGgoKSk7IEFTU0VS
VChpczhCaXQoKSk7IHJldHVybiAmbV90ZXh0LmNoYXJhY3RlcnM4KClbaV07IH0KLSAgICBjb25z
dCBVQ2hhciogZGF0YTE2KHVuc2lnbmVkIGkpIGNvbnN0IHsgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oaSA8IG1fdGV4dC5sZW5ndGgoKSk7IEFTU0VSVCghaXM4Qml0KCkpOyByZXR1
cm4gJm1fdGV4dC5jaGFyYWN0ZXJzMTYoKVtpXTsgfQotCi0gICAgY29uc3QgTENoYXIqIGNoYXJh
Y3RlcnM4KCkgY29uc3QgeyBBU1NFUlQoaXM4Qml0KCkpOyByZXR1cm4gbV90ZXh0LmNoYXJhY3Rl
cnM4KCk7IH0KLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkgY29uc3QgeyBBU1NFUlQo
IWlzOEJpdCgpKTsgcmV0dXJuIG1fdGV4dC5jaGFyYWN0ZXJzMTYoKTsgfQotCi0gICAgYm9vbCBp
czhCaXQoKSBjb25zdCB7IHJldHVybiBtX3RleHQuaXM4Qml0KCk7IH0KLSAgICB1bnNpZ25lZCBs
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3RleHQubGVuZ3RoKCk7IH0KLSAgICBTdHJpbmcgc3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0LnRvU3RyaW5nKCk7IH0KLQotICAgIHZvaWQgc2V0
VGV4dChjb25zdCBMQ2hhciogYywgdW5zaWduZWQgbGVuKSB7IG1fdGV4dCA9IFN0cmluZ1ZpZXco
YywgbGVuKTsgfQotICAgIHZvaWQgc2V0VGV4dChjb25zdCBVQ2hhciogYywgdW5zaWduZWQgbGVu
KSB7IG1fdGV4dCA9IFN0cmluZ1ZpZXcoYywgbGVuKTsgfQotICAgIHZvaWQgc2V0VGV4dChTdHJp
bmdWaWV3IHN0cmluZ1ZpZXcpIHsgbV90ZXh0ID0gc3RyaW5nVmlldzsgfQorICAgIFVDaGFyIG9w
ZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGkgPCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkpOyByZXR1cm4gbV9zdHJpbmdW
aWV3W2ldOyB9CisgICAgY29uc3QgTENoYXIqIGRhdGE4KHVuc2lnbmVkIGkpIGNvbnN0IHsgUkVM
RUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpIDwgbV9zdHJpbmdWaWV3Lmxl
bmd0aCgpKTsgQVNTRVJUKGlzOEJpdCgpKTsgcmV0dXJuICZtX3N0cmluZ1ZpZXcuY2hhcmFjdGVy
czgoKVtpXTsgfQorICAgIGNvbnN0IFVDaGFyKiBkYXRhMTYodW5zaWduZWQgaSkgY29uc3QgeyBS
RUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBtX3N0cmluZ1ZpZXcu
bGVuZ3RoKCkpOyBBU1NFUlQoIWlzOEJpdCgpKTsgcmV0dXJuICZtX3N0cmluZ1ZpZXcuY2hhcmFj
dGVyczE2KClbaV07IH0KKworICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0IHsg
QVNTRVJUKGlzOEJpdCgpKTsgcmV0dXJuIG1fc3RyaW5nVmlldy5jaGFyYWN0ZXJzOCgpOyB9Cisg
ICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMxNigpIGNvbnN0IHsgQVNTRVJUKCFpczhCaXQoKSk7
IHJldHVybiBtX3N0cmluZ1ZpZXcuY2hhcmFjdGVyczE2KCk7IH0KKworICAgIGJvb2wgaXM4Qml0
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdWaWV3LmlzOEJpdCgpOyB9CisgICAgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdWaWV3Lmxlbmd0aCgpOyB9CisgICAgU3Ry
aW5nIHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzRW1wdHkoKSA/IG1fc3RyaW5n
Vmlldy50b1N0cmluZygpIDogbV9zdHJpbmc7IH0KKworICAgIHZvaWQgc2V0VGV4dChjb25zdCBM
Q2hhciogYywgdW5zaWduZWQgbGVuKSB7IHNldFRleHQoU3RyaW5nVmlldyhjLCBsZW4pKTsgfQor
ICAgIHZvaWQgc2V0VGV4dChjb25zdCBVQ2hhciogYywgdW5zaWduZWQgbGVuKSB7IHNldFRleHQo
U3RyaW5nVmlldyhjLCBsZW4pKTsgfQorICAgIHZvaWQgc2V0VGV4dChTdHJpbmdWaWV3IHN0cmlu
Z1ZpZXcpCisgICAgeworICAgICAgICBtX3N0cmluZ1ZpZXcgPSBzdHJpbmdWaWV3OworICAgICAg
ICBtX3N0cmluZyA9IGVtcHR5U3RyaW5nKCk7CisgICAgfQogCiAgICAgZmxvYXQgaG9yaXpvbnRh
bEdseXBoU3RyZXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbEdseXBoU3RyZXRjaDsg
fQogICAgIHZvaWQgc2V0SG9yaXpvbnRhbEdseXBoU3RyZXRjaChmbG9hdCBzY2FsZSkgeyBtX2hv
cml6b250YWxHbHlwaFN0cmV0Y2ggPSBzY2FsZTsgfQpAQCAtMTEwLDEwICsxMjAsMTEgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uKSB7IG1f
ZGlyZWN0aW9uID0gZGlyZWN0aW9uOyB9CiAgICAgdm9pZCBzZXREaXJlY3Rpb25hbE92ZXJyaWRl
KGJvb2wgb3ZlcnJpZGUpIHsgbV9kaXJlY3Rpb25hbE92ZXJyaWRlID0gb3ZlcnJpZGU7IH0KICAg
ICB2b2lkIHNldENoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aChib29sIHNjYW4pIHsgbV9jaGFyYWN0
ZXJTY2FuRm9yQ29kZVBhdGggPSBzY2FuOyB9Ci0gICAgU3RyaW5nVmlldyB0ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0OyB9CisgICAgU3RyaW5nVmlldyB0ZXh0KCkgY29uc3QgeyByZXR1cm4g
bV9zdHJpbmdWaWV3OyB9CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nVmlldyBtX3RleHQ7CisgICAg
U3RyaW5nVmlldyBtX3N0cmluZ1ZpZXc7CisgICAgU3RyaW5nIG1fc3RyaW5nOwogCiAgICAgdW5z
aWduZWQgbV90YWJTaXplOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwCShyZXZpc2lvbiAyMzAyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw4ICsyMDAsNyBAQCBM
YXlvdXRSZWN0IElubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uCiAgICAgTGF5b3V0VW5pdCBz
ZWxlY3Rpb25Ub3AgPSB0aGlzLT5zZWxlY3Rpb25Ub3AoKTsKICAgICBMYXlvdXRVbml0IHNlbGVj
dGlvbkhlaWdodCA9IHRoaXMtPnNlbGVjdGlvbkhlaWdodCgpOwogCi0gICAgYXV0byB0ZXh0ID0g
dGhpcy0+dGV4dCgpOwotICAgIFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRSdW4odGV4dCk7
CisgICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bigpOwogCiAgICAgTGF5b3V0UmVj
dCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdChMYXlvdXRQb2ludChsb2dpY2FsTGVmdCgpLCBz
ZWxlY3Rpb25Ub3ApLCBMYXlvdXRTaXplKG1fbG9naWNhbFdpZHRoLCBzZWxlY3Rpb25IZWlnaHQp
KTsKICAgICAvLyBBdm9pZCBtZWFzdXJpbmcgdGhlIHRleHQgd2hlbiB0aGUgZW50aXJlIGxpbmUg
Ym94IGlzIHNlbGVjdGVkIGFzIGFuIG9wdGltaXphdGlvbi4KQEAgLTU3MCw4ICs1NjksNyBAQCB2
b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgLy8gUGFpbnQgZGVj
b3JhdGlvbnMKICAgICBUZXh0RGVjb3JhdGlvbiB0ZXh0RGVjb3JhdGlvbnMgPSBsaW5lU3R5bGUu
dGV4dERlY29yYXRpb25zSW5FZmZlY3QoKTsKICAgICBpZiAodGV4dERlY29yYXRpb25zICE9IFRl
eHREZWNvcmF0aW9uTm9uZSAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlv
bikgewotICAgICAgICBhdXRvIHRleHQgPSB0aGlzLT50ZXh0KCk7Ci0gICAgICAgIFRleHRSdW4g
dGV4dFJ1biA9IGNyZWF0ZVRleHRSdW4odGV4dCk7CisgICAgICAgIFRleHRSdW4gdGV4dFJ1biA9
IGNyZWF0ZVRleHRSdW4oKTsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dFJ1bi5sZW5n
dGgoKTsKICAgICAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uKQogICAgICAg
ICAgICAgbGVuZ3RoID0gbV90cnVuY2F0aW9uOwpAQCAtNjc2LDggKzY3NCw3IEBAIHZvaWQgSW5s
aW5lVGV4dEJveDo6cGFpbnRQbGF0Zm9ybURvY3VtZW4KICAgICAgICAgaW50IGRlbHRhWSA9IHJl
bmRlcmVyKCkuc3R5bGUoKS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyBzZWxlY3Rpb25C
b3R0b20oKSAtIGxvZ2ljYWxCb3R0b20oKSA6IGxvZ2ljYWxUb3AoKSAtIHNlbGVjdGlvblRvcCgp
OwogICAgICAgICBpbnQgc2VsSGVpZ2h0ID0gc2VsZWN0aW9uSGVpZ2h0KCk7CiAgICAgICAgIEZs
b2F0UG9pbnQgc3RhcnRQb2ludChib3hPcmlnaW4ueCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZ
KTsKLSAgICAgICAgYXV0byB0ZXh0ID0gdGhpcy0+dGV4dCgpOwotICAgICAgICBUZXh0UnVuIHJ1
biA9IGNyZWF0ZVRleHRSdW4odGV4dCk7CisgICAgICAgIFRleHRSdW4gcnVuID0gY3JlYXRlVGV4
dFJ1bigpOwogCiAgICAgICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IExheW91dFJlY3Qo
c3RhcnRQb2ludCwgRmxvYXRTaXplKDAsIHNlbEhlaWdodCkpOwogICAgICAgICBsaW5lRm9udCgp
LmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwgbWFya2VkVGV4
dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRPZmZzZXQpOwpAQCAtOTc0LDggKzk3MSw3IEBA
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0QmFja2cKIAogICAgIC8vIE5vdGUg
dGhhdCBpZiB0aGUgdGV4dCBpcyB0cnVuY2F0ZWQsIHdlIGxldCB0aGUgdGhpbmcgYmVpbmcgcGFp
bnRlZCBpbiB0aGUgdHJ1bmNhdGlvbgogICAgIC8vIGRyYXcgaXRzIG93biBoaWdobGlnaHQuCi0g
ICAgYXV0byB0ZXh0ID0gdGhpcy0+dGV4dCgpOwotICAgIFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0
ZVRleHRSdW4odGV4dCk7CisgICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bigpOwog
CiAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9IHJvb3QoKTsKICAgICBMYXlvdXRV
bml0IHNlbGVjdGlvbkJvdHRvbSA9IHJvb3RCb3guc2VsZWN0aW9uQm90dG9tKCk7CkBAIC0xMDIy
LDggKzEwMTgsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dEZvcmVnCiAg
ICAgICAgIGNvbnRleHQuc2V0QWxwaGEobWFya2VkVGV4dC5zdHlsZS5hbHBoYSk7CiAgICAgfQog
ICAgIC8vIFRleHRQYWludGVyIHdhbnRzIHRoZSBib3ggcmVjdGFuZ2xlIGFuZCB0ZXh0IG9yaWdp
biBvZiB0aGUgZW50aXJlIGxpbmUgYm94LgotICAgIGF1dG8gdGV4dCA9IHRoaXMtPnRleHQoKTsK
LSAgICB0ZXh0UGFpbnRlci5wYWludFJhbmdlKGNyZWF0ZVRleHRSdW4odGV4dCksIGJveFJlY3Qs
IHRleHRPcmlnaW5Gcm9tQm94UmVjdChib3hSZWN0KSwgbWFya2VkVGV4dC5zdGFydE9mZnNldCwg
bWFya2VkVGV4dC5lbmRPZmZzZXQpOworICAgIHRleHRQYWludGVyLnBhaW50UmFuZ2UoY3JlYXRl
VGV4dFJ1bigpLCBib3hSZWN0LCB0ZXh0T3JpZ2luRnJvbUJveFJlY3QoYm94UmVjdCksIG1hcmtl
ZFRleHQuc3RhcnRPZmZzZXQsIG1hcmtlZFRleHQuZW5kT2Zmc2V0KTsKIH0KIAogdm9pZCBJbmxp
bmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBPdXRS
ZWN0LCBjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBtYXJrZWRUZXh0KQpAQCAtMTA0NSw4ICsxMDQw
LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHREZWNvcgogCiAgICAgLy8g
Tm90ZSB0aGF0IGlmIHRoZSB0ZXh0IGlzIHRydW5jYXRlZCwgd2UgbGV0IHRoZSB0aGluZyBiZWlu
ZyBwYWludGVkIGluIHRoZSB0cnVuY2F0aW9uCiAgICAgLy8gZHJhdyBpdHMgb3duIGRlY29yYXRp
b24uCi0gICAgYXV0byB0ZXh0ID0gdGhpcy0+dGV4dCgpOwotICAgIFRleHRSdW4gdGV4dFJ1biA9
IGNyZWF0ZVRleHRSdW4odGV4dCk7CisgICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1
bigpOwogCiAgICAgLy8gQXZvaWQgbWVhc3VyaW5nIHRoZSB0ZXh0IHdoZW4gdGhlIGVudGlyZSBs
aW5lIGJveCBpcyBzZWxlY3RlZCBhcyBhbiBvcHRpbWl6YXRpb24uCiAgICAgRmxvYXRSZWN0IHNu
YXBwZWRTZWxlY3Rpb25SZWN0ID0gYm94UmVjdDsKQEAgLTExOTAsOCArMTE4NCw3IEBAIGludCBJ
bmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbihmbG8KICAgICAgICAgcmV0dXJuIGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA/IDAgOiBsZW4oKTsKICAgICBib29sIGlnbm9yZUNvbWJpbmVk
VGV4dCA9IHRydWU7CiAgICAgYm9vbCBpZ25vcmVIeXBoZW4gPSB0cnVlOwotICAgIGF1dG8gdGV4
dCA9IHRoaXMtPnRleHQoaWdub3JlQ29tYmluZWRUZXh0LCBpZ25vcmVIeXBoZW4pOwotICAgIHJl
dHVybiBsaW5lRm9udCgpLm9mZnNldEZvclBvc2l0aW9uKGNyZWF0ZVRleHRSdW4odGV4dCksIGxp
bmVPZmZzZXQgLSBsb2dpY2FsTGVmdCgpLCBpbmNsdWRlUGFydGlhbEdseXBocyk7CisgICAgcmV0
dXJuIGxpbmVGb250KCkub2Zmc2V0Rm9yUG9zaXRpb24oY3JlYXRlVGV4dFJ1bihpZ25vcmVDb21i
aW5lZFRleHQsIGlnbm9yZUh5cGhlbiksIGxpbmVPZmZzZXQgLSBsb2dpY2FsTGVmdCgpLCBpbmNs
dWRlUGFydGlhbEdseXBocyk7CiB9CiAKIGZsb2F0IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9y
T2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3QKQEAgLTEyMTYsMTYgKzEyMDksMTUgQEAgZmxv
YXQgSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQodQogICAgIExheW91dFJlY3Qgc2Vs
ZWN0aW9uUmVjdCA9IExheW91dFJlY3QobG9naWNhbExlZnQoKSwgMCwgMCwgMCk7CiAgICAgYm9v
bCBpZ25vcmVDb21iaW5lZFRleHQgPSB0cnVlOwogICAgIGJvb2wgaWdub3JlSHlwaGVuID0gdHJ1
ZTsKLSAgICBhdXRvIHRleHQgPSB0aGlzLT50ZXh0KGlnbm9yZUNvbWJpbmVkVGV4dCwgaWdub3Jl
SHlwaGVuKTsKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVUZXh0UnVuKHRleHQpOworICAg
IFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRSdW4oaWdub3JlQ29tYmluZWRUZXh0LCBpZ25v
cmVIeXBoZW4pOwogICAgIGxpbmVGb250KCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4
dFJ1biwgc2VsZWN0aW9uUmVjdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CiAgICAgcmV0dXJu
IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0
LCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgdGV4dFJ1bi5sdHIo
KSkubWF4WCgpOwogfQogCi1UZXh0UnVuIElubGluZVRleHRCb3g6OmNyZWF0ZVRleHRSdW4oU3Ry
aW5nJiBzdHJpbmcpIGNvbnN0CitUZXh0UnVuIElubGluZVRleHRCb3g6OmNyZWF0ZVRleHRSdW4o
Ym9vbCBpZ25vcmVDb21iaW5lZFRleHQsIGJvb2wgaWdub3JlSHlwaGVuZykgY29uc3QKIHsKICAg
ICBjb25zdCBhdXRvJiBzdHlsZSA9IGxpbmVTdHlsZSgpOwotICAgIFRleHRSdW4gdGV4dFJ1biB7
IHN0cmluZywgdGV4dFBvcygpLCBleHBhbnNpb24oKSwgZXhwYW5zaW9uQmVoYXZpb3IoKSwgZGly
ZWN0aW9uKCksIGRpck92ZXJyaWRlKCkgfHwgc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxP
cmRlciwgIXJlbmRlcmVyKCkuY2FuVXNlU2ltcGxlRm9udENvZGVQYXRoKCkgfTsKKyAgICBUZXh0
UnVuIHRleHRSdW4geyB0ZXh0KGlnbm9yZUNvbWJpbmVkVGV4dCwgaWdub3JlSHlwaGVuZyksIHRl
eHRQb3MoKSwgZXhwYW5zaW9uKCksIGV4cGFuc2lvbkJlaGF2aW9yKCksIGRpcmVjdGlvbigpLCBk
aXJPdmVycmlkZSgpIHx8IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXIsICFyZW5k
ZXJlcigpLmNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCgpIH07CiAgICAgdGV4dFJ1bi5zZXRUYWJT
aXplKCFzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSwgc3R5bGUudGFiU2l6ZSgpKTsKICAgICBy
ZXR1cm4gdGV4dFJ1bjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guaAkocmV2aXNpb24gMjMwMjc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDcgKzE4NSw3IEBAIHByaXZhdGU6
CiAgICAgY29uc3QgRm9udENhc2NhZGUmIGxpbmVGb250KCkgY29uc3Q7CiAKICAgICBTdHJpbmcg
dGV4dChib29sIGlnbm9yZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBib29sIGlnbm9yZUh5cGhlbiA9
IGZhbHNlKSBjb25zdDsgLy8gVGhlIGVmZmVjdGl2ZSB0ZXh0IGZvciB0aGUgcnVuLgotICAgIFRl
eHRSdW4gY3JlYXRlVGV4dFJ1bihTdHJpbmcmKSBjb25zdDsKKyAgICBUZXh0UnVuIGNyZWF0ZVRl
eHRSdW4oYm9vbCBpZ25vcmVDb21iaW5lZFRleHQgPSBmYWxzZSwgYm9vbCBpZ25vcmVIeXBoZW4g
PSBmYWxzZSkgY29uc3Q7CiAKICAgICBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlv
cigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
CShyZXZpc2lvbiAyMzAyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNDMsNyArMTI0Myw3IEBAIGJvb2wgUmVuZGVyVGV4
dDo6Y29tcHV0ZUNhblVzZVNpbXBsaWZpZWQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Ly8gQWRkaXRpb25hbCBjaGVjayBvbiB0aGUgZm9udCBjb2RlcGF0aC4KLSAgICBUZXh0UnVuIHJ1
bih0ZXh0KCkpOworICAgIFRleHRSdW4gcnVuKHN0cmluZ1ZpZXcoKSk7CiAgICAgcnVuLnNldENo
YXJhY3RlclNjYW5Gb3JDb2RlUGF0aChmYWxzZSk7CiAgICAgaWYgKGZvbnQuY29kZVBhdGgocnVu
KSAhPSBGb250Q2FzY2FkZTo6U2ltcGxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCShyZXZpc2lv
biAyMzAyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMgQXZvaWRhbmNlUmVh
c29uRmxhZ3MgY2FuVXNlRm9yRm9uCiAgICAgICAgICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIHRo
ZSBjb2RlIHBhdGggYXQgdGhpcyBwb2ludC4gV2UgYWxyZWFkeSBrbm93IGl0IGNhbid0IGJlIHNp
bXBsZS4KICAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hh
c0NvbXBsZXhGb250Q29kZVBhdGgsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIFRleHRSdW4gcnVuKHRleHRSZW5kZXJlci50ZXh0KCkpOwor
ICAgICAgICAgICAgVGV4dFJ1biBydW4odGV4dFJlbmRlcmVyLnN0cmluZ1ZpZXcoKSk7CiAgICAg
ICAgICAgICBydW4uc2V0Q2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoKGZhbHNlKTsKICAgICAgICAg
ICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLmNvZGVQYXRoKHJ1bikgIT0gRm9udENhc2NhZGU6
OlNpbXBsZSkKICAgICAgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVE
KEZsb3dIYXNDb21wbGV4Rm9udENvZGVQYXRoLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVu
dEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjMwMjc0KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJ
dGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgVGV4dEZyYWdtZW50
SXRlcmF0b3I6OlN0eWxlOjpTdHlsZShjb25zdAogICAgICwgd29yZFNwYWNpbmcoZm9udC53b3Jk
U3BhY2luZygpKQogICAgICwgdGFiV2lkdGgoY29sbGFwc2VXaGl0ZXNwYWNlID8gMCA6IHN0eWxl
LnRhYlNpemUoKSkKICAgICAsIHNob3VsZEh5cGhlbmF0ZShzdHlsZS5oeXBoZW5zKCkgPT0gSHlw
aGVuc0F1dG8gJiYgY2FuSHlwaGVuYXRlKHN0eWxlLmxvY2FsZSgpKSkKLSAgICAsIGh5cGhlblN0
cmluZ1dpZHRoKHNob3VsZEh5cGhlbmF0ZSA/ICh1c2VTaW1wbGlmaWVkVGV4dE1lYXN1cmluZyA/
IGZvbnQud2lkdGhGb3JTaW1wbGVUZXh0KHN0eWxlLmh5cGhlblN0cmluZygpKSA6IGZvbnQud2lk
dGgoVGV4dFJ1bihzdHlsZS5oeXBoZW5TdHJpbmcoKSkpKSA6IDApCisgICAgLCBoeXBoZW5TdHJp
bmdXaWR0aChzaG91bGRIeXBoZW5hdGUgPyAodXNlU2ltcGxpZmllZFRleHRNZWFzdXJpbmcgPyBm
b250LndpZHRoRm9yU2ltcGxlVGV4dChzdHlsZS5oeXBoZW5TdHJpbmcoKSkgOiBmb250LndpZHRo
KFRleHRSdW4oU3RyaW5nVmlldyhzdHlsZS5oeXBoZW5TdHJpbmcoKSkpKSkgOiAwKQogICAgICwg
aHlwaGVuTGltaXRCZWZvcmUoc3R5bGUuaHlwaGVuYXRpb25MaW1pdEJlZm9yZSgpIDwgMCA/IDIg
OiBzdHlsZS5oeXBoZW5hdGlvbkxpbWl0QmVmb3JlKCkpCiAgICAgLCBoeXBoZW5MaW1pdEFmdGVy
KHN0eWxlLmh5cGhlbmF0aW9uTGltaXRBZnRlcigpIDwgMCA/IDIgOiBzdHlsZS5oeXBoZW5hdGlv
bkxpbWl0QWZ0ZXIoKSkKICAgICAsIGxvY2FsZShzdHlsZS5sb2NhbGUoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337291</attachid>
            <date>2018-04-05 12:49:06 -0700</date>
            <delta_ts>2018-04-09 10:54:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184182-20180405124905.patch</filename>
            <type>text/plain</type>
            <size>17382</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMDMxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDE4LTA0LTA1ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgRml4IHRoZSBs
aWZldGltZSBvZiB0aGUgVGV4dFJ1bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg0MTgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW5saW5lVGV4dEJveDo6Y3JlYXRlVGV4dFJ1bigpIHRha2VzIGEgbm9u
LWNvbnN0IGx2YWx1ZSByZWZlcmVuY2UgU3RyaW5nLgorICAgICAgICBJdCBpcyB0ZW1wdGluZyB0
byBjaGFuZ2UgdGhlIHNpZ25hdHVyZSBvZiB0aGlzIG1ldGhvZCB0byB0YWtlIGEgY29uc3QgbHZh
bHVlIAorICAgICAgICByZWZlcmVuY2UuIEJ1dCB0aGlzIHdhcyBkb25lIGludGVudGlvbmFsbHku
IFRleHRSdW4gaXMgZWZmZWN0aXZlbHkgYSBTdHJpbmdWaWV3OgorICAgICAgICBpdCBkb2VzIG5v
dCBvd24gdGhlIHBhc3NlZCBzdHJpbmcuIEhhdmluZyB0aGUgYXJndW1lbnQgYSBub24tY29uc3Qg
bHZhbHVlCisgICAgICAgIHJlZmVyZW5jZSBtYWtlcyB0aGUgY29tcGlsZXIgcHJldmVudCBjYWxs
cyBsaWtlIGNyZWF0ZVRleHRSdW4oImFiYyIpLgorCisgICAgICAgIFRvIGhhdmUgYSBiZXR0ZXIg
d2F5IHRvIGV4cHJlc3MgdGhlIGxpZmV0aW1lIG9mIFRleHRSdW4sIHRoaXMgcGF0Y2ggZG9lcwor
ICAgICAgICB0aGUgZm9sbG93aW5nOgorCisgICAgICAgIC0tIEl0IG1ha2VzIFRleHRSdW46Om1f
dGV4dCBvZiB0eXBlIFN0cmluZyBpbnN0ZWFkIG9mIFN0cmluZ1ZpZXcuCisgICAgICAgIC0tIEl0
IGFkZHMgYSBuZXcgY29uc3RydWN0b3Igd2hpY2ggdGFrZXMgY29uc3QgU3RyaW5nJi4gVGhpcyBj
b25zdHJ1Y3RvcgorICAgICAgICAgICB3aWxsIG1ha2UgYSBjb3B5IG9mIHRoaXMgc3RyaW5nIGFu
ZCBhc3NpZ24gaXQgdG8gbV90ZXh0LgorICAgICAgICAtLSBJdCBrZWVwcyB0aGUgY29uc3RydWN0
b3Igd2hpY2ggdGFrZXMgYSBTdHJpbmdWaWV3LiBUaGUgY2FsbGVyIG9mIHRoaXMKKyAgICAgICAg
ICAgY29uc3RydWN0b3Igc3RpbGwgaGFzIHRvIG1ha2Ugc3VyZSB0aGUgdW5kZXJseWluZyBTdHJp
bmcgb3V0bGl2ZXMgdGhlCisgICAgICAgICAgIFRleHRSdW4uIFRvIGF2b2lkIGNvcHlpbmcgdGhl
IHVuZGVybHlpbmcgYnVmZmVyIG9mIHRoZSBTdHJpbmdWaWV3LCB3ZQorICAgICAgICAgICB3aWxs
IG5vdCB1c2UgIFN0cmluZ1ZpZXc6OnRvU3RyaW5nKCkuIEluc3RlYWQgV2Ugd2lsbCB1c2UKKyAg
ICAgICAgICAgU3RyaW5nVmlldzo6dG9TdHJpbmdXaXRob3V0Q29weWluZygpIHdoaWNoIG1ha2Vz
IHRoZSByZXR1cm5lZCBTdHJpbmcgCisgICAgICAgICAgIGFjY2Vzc2VzIHRoZSBzYW1lIGJ1ZmZl
ciB0aGUgU3RyaW5nVmlldyB1c2VzLiBJbiB0aGlzIGNhc2UsIHRoZSByZXR1cm5lZAorICAgICAg
ICAgICBTdHJpbmcgaXMgZWZmZWN0aXZlbHkgYSBTdHJpbmdWaWV3LgorCisgICAgICAgICogcGFn
ZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3UmlnaHRBbGln
bmVkVGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFJ1bjo6VGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpzdWJSdW4gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0UnVuOjpkYXRhOCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
UnVuOjpkYXRhMTYgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6bGVuZ3RoIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OnNldFRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dFJ1bjo6c3RyaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojps
b2NhbFNlbGVjdGlvblJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJv
eDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRQbGF0Zm9y
bURvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50
TWFya2VkVGV4dEJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6
cGFpbnRNYXJrZWRUZXh0Rm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0
Qm94OjpwYWludE1hcmtlZFRleHREZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZVRleHRCb3g6OmNyZWF0ZVRleHRSdW4gY29uc3QpOgorICAgICAgICBUaGVyZSBpcyBu
byBuZWVkIGZvciB0aGlzIGZ1bmN0aW9uIHRvIHRha2UgYSBTdHJpbmcgYXJndW1lbnQgYW55bW9y
ZS4gVGhlCisgICAgICAgIHJlYXNvbiBmb3IgcGFzc2luZyB0aGUgU3RyaW5nIHdhcyB0byBndWFy
YW50ZWUgaXRzIGxpZmV0aW1lIGJ5IGtlZXBpbmcKKyAgICAgICAgYSBjb3B5IG9mIGl0IGluIHRo
ZSBjYWxsZXIgc2lkZS4gTm93IHRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoYXQuIFRoZSBUZXh0UnVu
CisgICAgICAgIGl0c2VsZiB3aWxsIGtlZXAgdGhpcyBjb3B5LgorCisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpjb21wdXRlQ2FuVXNlU2ltcGxpZmllZFRl
eHRNZWFzdXJpbmcgY29uc3QpOiAKKyAgICAgICAgUmVuZGVyVGV4dDo6dGV4dCgpIHJldHVybnMg
U3RyaW5nSW1wbC4gVGhlIGNvbXBpbGVyIHdhbnRzIHVzIHRvIGJlIG1vcmUKKyAgICAgICAgZXhw
bGljaXQgYWJvdXQgd2hpY2ggY29uc3RydWN0b3Igb2YgVGV4dFJ1biB0byBjYWxsLgorCisgICAg
ICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9yRm9udEFuZFRleHQpOiBEaXR0by4KKyAgICAgICAg
KiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjpT
dHlsZTo6U3R5bGUpOgorICAgICAgICBSZW5kZXJTdHlsZTo6aHlwaGVuU3RyaW5nKCkgcmV0dXJu
cyBhbiBBdG9taWNTdHJpbmcuCisKIDIwMTgtMDQtMDUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjMwMDQyLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAJKHJldmlzaW9uIDIz
MDMwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjksNyArMTY5LDcgQEAgc3RhdGljIHZvaWQgZHJhd1JpZ2h0QWxpZ25l
ZFRleHQoY29uc3QgUwogICAgIGZsb2F0IHRleHRHYXAgPSAxMDsKICAgICBmbG9hdCB0ZXh0QmFz
ZWxpbmVGcm9tVG9wID0gMTQ7CiAKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBUZXh0UnVuKFN0cmlu
Z1ZpZXcodGV4dCkpOworICAgIFRleHRSdW4gdGV4dFJ1biA9IFRleHRSdW4odGV4dCk7CiAgICAg
Y29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKICAgICBmbG9hdCB0ZXh0
V2lkdGggPSBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIHRleHRSdW4sIHsgfSk7CiAgICAgY29udGV4
dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1RleHRSdW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uY3BwCShyZXZpc2lvbiAyMzAzMDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNyArMjksNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgRXhwZWN0ZWRUZXh0
UnVuU2l6ZSB7Ci0gICAgU3RyaW5nVmlldyB0ZXh0OworICAgIFN0cmluZyB0ZXh0OwogICAgIHVu
c2lnbmVkIGludGVnZXIxOwogICAgIGZsb2F0IGZsb2F0MTsKICAgICBmbG9hdCBmbG9hdDI7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCShyZXZpc2lv
biAyMzAzMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxs
ZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNywg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTQ0LDcgKzQ0LDcgQEAgc3RydWN0IFdpZHRoSXRlcmF0b3I7CiBjbGFzcyBUZXh0UnVu
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBU
ZXh0UnVuKFN0cmluZ1ZpZXcgdGV4dCwgZmxvYXQgeHBvcyA9IDAsIGZsb2F0IGV4cGFuc2lvbiA9
IDAsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yID0gRGVmYXVsdEV4cGFuc2lv
biwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBMVFIsIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlk
ZSA9IGZhbHNlLCBib29sIGNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCA9IHRydWUpCisgICAgZXhw
bGljaXQgVGV4dFJ1bihjb25zdCBTdHJpbmcmIHRleHQsIGZsb2F0IHhwb3MgPSAwLCBmbG9hdCBl
eHBhbnNpb24gPSAwLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvciA9IERlZmF1
bHRFeHBhbnNpb24sIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSLCBib29sIGRpcmVjdGlv
bmFsT3ZlcnJpZGUgPSBmYWxzZSwgYm9vbCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGggPSB0cnVl
KQogICAgICAgICA6IG1fdGV4dCh0ZXh0KQogICAgICAgICAsIG1fdGFiU2l6ZSgwKQogICAgICAg
ICAsIG1feHBvcyh4cG9zKQpAQCAtNTksOSArNTksMTQgQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAKKyAgICBleHBsaWNpdCBUZXh0UnVuKFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgZmxvYXQgeHBv
cyA9IDAsIGZsb2F0IGV4cGFuc2lvbiA9IDAsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJl
aGF2aW9yID0gRGVmYXVsdEV4cGFuc2lvbiwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBMVFIs
IGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IGZhbHNlLCBib29sIGNoYXJhY3RlclNjYW5Gb3JD
b2RlUGF0aCA9IHRydWUpCisgICAgICAgIDogVGV4dFJ1bihzdHJpbmdWaWV3LnRvU3RyaW5nV2l0
aG91dENvcHlpbmcoKSwgeHBvcywgZXhwYW5zaW9uLCBleHBhbnNpb25CZWhhdmlvciwgZGlyZWN0
aW9uLCBkaXJlY3Rpb25hbE92ZXJyaWRlLCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGgpCisgICAg
eworICAgIH0KKwogICAgIFRleHRSdW4gc3ViUnVuKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihzdGFydE9mZnNldCA8IG1fdGV4dC5sZW5ndGgoKSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhcnRPZmZzZXQgPCBtX3RleHQu
bGVuZ3RoKCkpOwogCiAgICAgICAgIFRleHRSdW4gcmVzdWx0ID0gKnRoaXM7CiAKQEAgLTczLDIw
ICs3OCwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAg
VUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGkgPCBtX3RleHQubGVuZ3RoKCkpOyByZXR1cm4gbV90ZXh0W2ldOyB9Ci0g
ICAgY29uc3QgTENoYXIqIGRhdGE4KHVuc2lnbmVkIGkpIGNvbnN0IHsgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oaSA8IG1fdGV4dC5sZW5ndGgoKSk7IEFTU0VSVChpczhCaXQoKSk7
IHJldHVybiAmbV90ZXh0LmNoYXJhY3RlcnM4KClbaV07IH0KLSAgICBjb25zdCBVQ2hhciogZGF0
YTE2KHVuc2lnbmVkIGkpIGNvbnN0IHsgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
aSA8IG1fdGV4dC5sZW5ndGgoKSk7IEFTU0VSVCghaXM4Qml0KCkpOyByZXR1cm4gJm1fdGV4dC5j
aGFyYWN0ZXJzMTYoKVtpXTsgfQorICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29u
c3QgeyBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBtX3RleHQu
bGVuZ3RoKCkpOyByZXR1cm4gbV90ZXh0W2ldOyB9CisgICAgY29uc3QgTENoYXIqIGRhdGE4KHVu
c2lnbmVkIGkpIGNvbnN0IHsgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihpIDwgbV90ZXh0Lmxlbmd0aCgpKTsgQVNTRVJUKGlzOEJpdCgpKTsgcmV0dXJuICZtX3RleHQu
Y2hhcmFjdGVyczgoKVtpXTsgfQorICAgIGNvbnN0IFVDaGFyKiBkYXRhMTYodW5zaWduZWQgaSkg
Y29uc3QgeyBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBtX3Rl
eHQubGVuZ3RoKCkpOyBBU1NFUlQoIWlzOEJpdCgpKTsgcmV0dXJuICZtX3RleHQuY2hhcmFjdGVy
czE2KClbaV07IH0KIAogICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0IHsgQVNT
RVJUKGlzOEJpdCgpKTsgcmV0dXJuIG1fdGV4dC5jaGFyYWN0ZXJzOCgpOyB9CiAgICAgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMxNigpIGNvbnN0IHsgQVNTRVJUKCFpczhCaXQoKSk7IHJldHVybiBt
X3RleHQuY2hhcmFjdGVyczE2KCk7IH0KIAogICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1
cm4gbV90ZXh0LmlzOEJpdCgpOyB9CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV90ZXh0Lmxlbmd0aCgpOyB9Ci0gICAgU3RyaW5nIHN0cmluZygpIGNvbnN0IHsgcmV0dXJu
IG1fdGV4dC50b1N0cmluZygpOyB9CiAKLSAgICB2b2lkIHNldFRleHQoY29uc3QgTENoYXIqIGMs
IHVuc2lnbmVkIGxlbikgeyBtX3RleHQgPSBTdHJpbmdWaWV3KGMsIGxlbik7IH0KLSAgICB2b2lk
IHNldFRleHQoY29uc3QgVUNoYXIqIGMsIHVuc2lnbmVkIGxlbikgeyBtX3RleHQgPSBTdHJpbmdW
aWV3KGMsIGxlbik7IH0KLSAgICB2b2lkIHNldFRleHQoU3RyaW5nVmlldyBzdHJpbmdWaWV3KSB7
IG1fdGV4dCA9IHN0cmluZ1ZpZXc7IH0KKyAgICB2b2lkIHNldFRleHQoY29uc3QgTENoYXIqIGMs
IHVuc2lnbmVkIGxlbikgeyBzZXRUZXh0KFN0cmluZ1ZpZXcoYywgbGVuKSk7IH0KKyAgICB2b2lk
IHNldFRleHQoY29uc3QgVUNoYXIqIGMsIHVuc2lnbmVkIGxlbikgeyBzZXRUZXh0KFN0cmluZ1Zp
ZXcoYywgbGVuKSk7IH0KKyAgICB2b2lkIHNldFRleHQoU3RyaW5nVmlldyBzdHJpbmdWaWV3KSB7
IG1fdGV4dCA9IHN0cmluZ1ZpZXcudG9TdHJpbmdXaXRob3V0Q29weWluZygpOyB9CiAKICAgICBm
bG9hdCBob3Jpem9udGFsR2x5cGhTdHJldGNoKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFs
R2x5cGhTdHJldGNoOyB9CiAgICAgdm9pZCBzZXRIb3Jpem9udGFsR2x5cGhTdHJldGNoKGZsb2F0
IHNjYWxlKSB7IG1faG9yaXpvbnRhbEdseXBoU3RyZXRjaCA9IHNjYWxlOyB9CkBAIC0xMTMsNyAr
MTE3LDcgQEAgcHVibGljOgogICAgIFN0cmluZ1ZpZXcgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
dGV4dDsgfQogCiBwcml2YXRlOgotICAgIFN0cmluZ1ZpZXcgbV90ZXh0OworICAgIFN0cmluZyBt
X3RleHQ7CiAKICAgICB1bnNpZ25lZCBtX3RhYlNpemU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDIzMDMwOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAwLDggKzIwMCw3IEBAIExheW91dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb24K
ICAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRvcCA9IHRoaXMtPnNlbGVjdGlvblRvcCgpOwogICAg
IExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0ID0gdGhpcy0+c2VsZWN0aW9uSGVpZ2h0KCk7CiAK
LSAgICBhdXRvIHRleHQgPSB0aGlzLT50ZXh0KCk7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuID0gY3Jl
YXRlVGV4dFJ1bih0ZXh0KTsKKyAgICBUZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVUZXh0UnVuKCk7
CiAKICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KExheW91dFBvaW50
KGxvZ2ljYWxMZWZ0KCksIHNlbGVjdGlvblRvcCksIExheW91dFNpemUobV9sb2dpY2FsV2lkdGgs
IHNlbGVjdGlvbkhlaWdodCkpOwogICAgIC8vIEF2b2lkIG1lYXN1cmluZyB0aGUgdGV4dCB3aGVu
IHRoZSBlbnRpcmUgbGluZSBib3ggaXMgc2VsZWN0ZWQgYXMgYW4gb3B0aW1pemF0aW9uLgpAQCAt
NTcwLDggKzU2OSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkK
ICAgICAvLyBQYWludCBkZWNvcmF0aW9ucwogICAgIFRleHREZWNvcmF0aW9uIHRleHREZWNvcmF0
aW9ucyA9IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwogICAgIGlmICh0ZXh0
RGVjb3JhdGlvbnMgIT0gVGV4dERlY29yYXRpb25Ob25lICYmIHBhaW50SW5mby5waGFzZSAhPSBQ
YWludFBoYXNlU2VsZWN0aW9uKSB7Ci0gICAgICAgIGF1dG8gdGV4dCA9IHRoaXMtPnRleHQoKTsK
LSAgICAgICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bih0ZXh0KTsKKyAgICAgICAg
VGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bigpOwogICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSB0ZXh0UnVuLmxlbmd0aCgpOwogICAgICAgICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1Ry
dW5jYXRpb24pCiAgICAgICAgICAgICBsZW5ndGggPSBtX3RydW5jYXRpb247CkBAIC02NzYsOCAr
Njc0LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFBsYXRmb3JtRG9jdW1lbgogICAgICAg
ICBpbnQgZGVsdGFZID0gcmVuZGVyZXIoKS5zdHlsZSgpLmlzRmxpcHBlZExpbmVzV3JpdGluZ01v
ZGUoKSA/IHNlbGVjdGlvbkJvdHRvbSgpIC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNhbFRvcCgp
IC0gc2VsZWN0aW9uVG9wKCk7CiAgICAgICAgIGludCBzZWxIZWlnaHQgPSBzZWxlY3Rpb25IZWln
aHQoKTsKICAgICAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KGJveE9yaWdpbi54KCksIGJveE9y
aWdpbi55KCkgLSBkZWx0YVkpOwotICAgICAgICBhdXRvIHRleHQgPSB0aGlzLT50ZXh0KCk7Ci0g
ICAgICAgIFRleHRSdW4gcnVuID0gY3JlYXRlVGV4dFJ1bih0ZXh0KTsKKyAgICAgICAgVGV4dFJ1
biBydW4gPSBjcmVhdGVUZXh0UnVuKCk7CiAKICAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25S
ZWN0ID0gTGF5b3V0UmVjdChzdGFydFBvaW50LCBGbG9hdFNpemUoMCwgc2VsSGVpZ2h0KSk7CiAg
ICAgICAgIGxpbmVGb250KCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBzZWxlY3Rp
b25SZWN0LCBtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7CkBA
IC05NzQsOCArOTcxLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRCYWNr
ZwogCiAgICAgLy8gTm90ZSB0aGF0IGlmIHRoZSB0ZXh0IGlzIHRydW5jYXRlZCwgd2UgbGV0IHRo
ZSB0aGluZyBiZWluZyBwYWludGVkIGluIHRoZSB0cnVuY2F0aW9uCiAgICAgLy8gZHJhdyBpdHMg
b3duIGhpZ2hsaWdodC4KLSAgICBhdXRvIHRleHQgPSB0aGlzLT50ZXh0KCk7Ci0gICAgVGV4dFJ1
biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bih0ZXh0KTsKKyAgICBUZXh0UnVuIHRleHRSdW4gPSBj
cmVhdGVUZXh0UnVuKCk7CiAKICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gcm9v
dCgpOwogICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9tID0gcm9vdEJveC5zZWxlY3Rpb25C
b3R0b20oKTsKQEAgLTEwMjIsOCArMTAxOCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRN
YXJrZWRUZXh0Rm9yZWcKICAgICAgICAgY29udGV4dC5zZXRBbHBoYShtYXJrZWRUZXh0LnN0eWxl
LmFscGhhKTsKICAgICB9CiAgICAgLy8gVGV4dFBhaW50ZXIgd2FudHMgdGhlIGJveCByZWN0YW5n
bGUgYW5kIHRleHQgb3JpZ2luIG9mIHRoZSBlbnRpcmUgbGluZSBib3guCi0gICAgYXV0byB0ZXh0
ID0gdGhpcy0+dGV4dCgpOwotICAgIHRleHRQYWludGVyLnBhaW50UmFuZ2UoY3JlYXRlVGV4dFJ1
bih0ZXh0KSwgYm94UmVjdCwgdGV4dE9yaWdpbkZyb21Cb3hSZWN0KGJveFJlY3QpLCBtYXJrZWRU
ZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7CisgICAgdGV4dFBhaW50ZXIu
cGFpbnRSYW5nZShjcmVhdGVUZXh0UnVuKCksIGJveFJlY3QsIHRleHRPcmlnaW5Gcm9tQm94UmVj
dChib3hSZWN0KSwgbWFya2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRPZmZzZXQp
OwogfQogCiB2b2lkIElubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dERlY29yYXRpb24oR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgY2xpcE91dFJlY3QsIGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQp
CkBAIC0xMDQ1LDggKzEwNDAsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4
dERlY29yCiAKICAgICAvLyBOb3RlIHRoYXQgaWYgdGhlIHRleHQgaXMgdHJ1bmNhdGVkLCB3ZSBs
ZXQgdGhlIHRoaW5nIGJlaW5nIHBhaW50ZWQgaW4gdGhlIHRydW5jYXRpb24KICAgICAvLyBkcmF3
IGl0cyBvd24gZGVjb3JhdGlvbi4KLSAgICBhdXRvIHRleHQgPSB0aGlzLT50ZXh0KCk7Ci0gICAg
VGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bih0ZXh0KTsKKyAgICBUZXh0UnVuIHRleHRS
dW4gPSBjcmVhdGVUZXh0UnVuKCk7CiAKICAgICAvLyBBdm9pZCBtZWFzdXJpbmcgdGhlIHRleHQg
d2hlbiB0aGUgZW50aXJlIGxpbmUgYm94IGlzIHNlbGVjdGVkIGFzIGFuIG9wdGltaXphdGlvbi4K
ICAgICBGbG9hdFJlY3Qgc25hcHBlZFNlbGVjdGlvblJlY3QgPSBib3hSZWN0OwpAQCAtMTE5MCw4
ICsxMTg0LDcgQEAgaW50IElubGluZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uKGZsbwogICAg
ICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gMCA6IGxlbigpOwogICAgIGJv
b2wgaWdub3JlQ29tYmluZWRUZXh0ID0gdHJ1ZTsKICAgICBib29sIGlnbm9yZUh5cGhlbiA9IHRy
dWU7Ci0gICAgYXV0byB0ZXh0ID0gdGhpcy0+dGV4dChpZ25vcmVDb21iaW5lZFRleHQsIGlnbm9y
ZUh5cGhlbik7Ci0gICAgcmV0dXJuIGxpbmVGb250KCkub2Zmc2V0Rm9yUG9zaXRpb24oY3JlYXRl
VGV4dFJ1bih0ZXh0KSwgbGluZU9mZnNldCAtIGxvZ2ljYWxMZWZ0KCksIGluY2x1ZGVQYXJ0aWFs
R2x5cGhzKTsKKyAgICByZXR1cm4gbGluZUZvbnQoKS5vZmZzZXRGb3JQb3NpdGlvbihjcmVhdGVU
ZXh0UnVuKGlnbm9yZUNvbWJpbmVkVGV4dCwgaWdub3JlSHlwaGVuKSwgbGluZU9mZnNldCAtIGxv
Z2ljYWxMZWZ0KCksIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAogZmxvYXQgSW5saW5lVGV4
dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSBjb25zdApAQCAtMTIxNiwx
NiArMTIwOSwxNSBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldCh1CiAg
ICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdChsb2dpY2FsTGVmdCgpLCAw
LCAwLCAwKTsKICAgICBib29sIGlnbm9yZUNvbWJpbmVkVGV4dCA9IHRydWU7CiAgICAgYm9vbCBp
Z25vcmVIeXBoZW4gPSB0cnVlOwotICAgIGF1dG8gdGV4dCA9IHRoaXMtPnRleHQoaWdub3JlQ29t
YmluZWRUZXh0LCBpZ25vcmVIeXBoZW4pOwotICAgIFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRl
eHRSdW4odGV4dCk7CisgICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bihpZ25vcmVD
b21iaW5lZFRleHQsIGlnbm9yZUh5cGhlbik7CiAgICAgbGluZUZvbnQoKS5hZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0KTsKICAgICByZXR1cm4gc25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0
aW9uKHNlbGVjdGlvblJlY3QsIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rv
cigpLCB0ZXh0UnVuLmx0cigpKS5tYXhYKCk7CiB9CiAKLVRleHRSdW4gSW5saW5lVGV4dEJveDo6
Y3JlYXRlVGV4dFJ1bihTdHJpbmcmIHN0cmluZykgY29uc3QKK1RleHRSdW4gSW5saW5lVGV4dEJv
eDo6Y3JlYXRlVGV4dFJ1bihib29sIGlnbm9yZUNvbWJpbmVkVGV4dCwgYm9vbCBpZ25vcmVIeXBo
ZW5nKSBjb25zdAogewogICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gbGluZVN0eWxlKCk7Ci0gICAg
VGV4dFJ1biB0ZXh0UnVuIHsgc3RyaW5nLCB0ZXh0UG9zKCksIGV4cGFuc2lvbigpLCBleHBhbnNp
b25CZWhhdmlvcigpLCBkaXJlY3Rpb24oKSwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS5ydGxPcmRl
cmluZygpID09IFZpc3VhbE9yZGVyLCAhcmVuZGVyZXIoKS5jYW5Vc2VTaW1wbGVGb250Q29kZVBh
dGgoKSB9OworICAgIFRleHRSdW4gdGV4dFJ1biB7IHRleHQoaWdub3JlQ29tYmluZWRUZXh0LCBp
Z25vcmVIeXBoZW5nKSwgdGV4dFBvcygpLCBleHBhbnNpb24oKSwgZXhwYW5zaW9uQmVoYXZpb3Io
KSwgZGlyZWN0aW9uKCksIGRpck92ZXJyaWRlKCkgfHwgc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBW
aXN1YWxPcmRlciwgIXJlbmRlcmVyKCkuY2FuVXNlU2ltcGxlRm9udENvZGVQYXRoKCkgfTsKICAg
ICB0ZXh0UnVuLnNldFRhYlNpemUoIXN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpLCBzdHlsZS50
YWJTaXplKCkpOwogICAgIHJldHVybiB0ZXh0UnVuOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiAyMzAzMDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNyAr
MTg1LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBGb250Q2FzY2FkZSYgbGluZUZvbnQoKSBjb25z
dDsKIAogICAgIFN0cmluZyB0ZXh0KGJvb2wgaWdub3JlQ29tYmluZWRUZXh0ID0gZmFsc2UsIGJv
b2wgaWdub3JlSHlwaGVuID0gZmFsc2UpIGNvbnN0OyAvLyBUaGUgZWZmZWN0aXZlIHRleHQgZm9y
IHRoZSBydW4uCi0gICAgVGV4dFJ1biBjcmVhdGVUZXh0UnVuKFN0cmluZyYpIGNvbnN0OworICAg
IFRleHRSdW4gY3JlYXRlVGV4dFJ1bihib29sIGlnbm9yZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBi
b29sIGlnbm9yZUh5cGhlbiA9IGZhbHNlKSBjb25zdDsKIAogICAgIEV4cGFuc2lvbkJlaGF2aW9y
IGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDIzMDMwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0Myw3ICsxMjQzLDcg
QEAgYm9vbCBSZW5kZXJUZXh0Ojpjb21wdXRlQ2FuVXNlU2ltcGxpZmllZAogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAvLyBBZGRpdGlvbmFsIGNoZWNrIG9uIHRoZSBmb250IGNvZGVwYXRo
LgotICAgIFRleHRSdW4gcnVuKHRleHQoKSk7CisgICAgVGV4dFJ1biBydW4obV90ZXh0KTsKICAg
ICBydW4uc2V0Q2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoKGZhbHNlKTsKICAgICBpZiAoZm9udC5j
b2RlUGF0aChydW4pICE9IEZvbnRDYXNjYWRlOjpTaW1wbGUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5j
cHAJKHJldmlzaW9uIDIzMDMwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBAIHN0YXRpYyBB
dm9pZGFuY2VSZWFzb25GbGFncyBjYW5Vc2VGb3JGb24KICAgICAgICAgICAgIC8vIE5vIG5lZWQg
dG8gY2hlY2sgdGhlIGNvZGUgcGF0aCBhdCB0aGlzIHBvaW50LiBXZSBhbHJlYWR5IGtub3cgaXQg
Y2FuJ3QgYmUgc2ltcGxlLgogICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChGbG93SGFzQ29tcGxleEZvbnRDb2RlUGF0aCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMp
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVGV4dFJ1biBydW4odGV4dFJlbmRlcmVy
LnRleHQoKSk7CisgICAgICAgICAgICBUZXh0UnVuIHJ1bihTdHJpbmcodGV4dFJlbmRlcmVyLnRl
eHQoKSkpOwogICAgICAgICAgICAgcnVuLnNldENoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aChmYWxz
ZSk7CiAgICAgICAgICAgICBpZiAoc3R5bGUuZm9udENhc2NhZGUoKS5jb2RlUGF0aChydW4pICE9
IEZvbnRDYXNjYWRlOjpTaW1wbGUpCiAgICAgICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVU
VVJOX0lGX05FRURFRChGbG93SGFzQ29tcGxleEZvbnRDb2RlUGF0aCwgcmVhc29ucywgaW5jbHVk
ZVJlYXNvbnMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRUZXh0RnJhZ21lbnRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5jcHAJKHJldmlz
aW9uIDIzMDMwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBA
IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpTdHlsZTo6U3R5bGUoY29uc3QKICAgICAsIHdvcmRTcGFj
aW5nKGZvbnQud29yZFNwYWNpbmcoKSkKICAgICAsIHRhYldpZHRoKGNvbGxhcHNlV2hpdGVzcGFj
ZSA/IDAgOiBzdHlsZS50YWJTaXplKCkpCiAgICAgLCBzaG91bGRIeXBoZW5hdGUoc3R5bGUuaHlw
aGVucygpID09IEh5cGhlbnNBdXRvICYmIGNhbkh5cGhlbmF0ZShzdHlsZS5sb2NhbGUoKSkpCi0g
ICAgLCBoeXBoZW5TdHJpbmdXaWR0aChzaG91bGRIeXBoZW5hdGUgPyAodXNlU2ltcGxpZmllZFRl
eHRNZWFzdXJpbmcgPyBmb250LndpZHRoRm9yU2ltcGxlVGV4dChzdHlsZS5oeXBoZW5TdHJpbmco
KSkgOiBmb250LndpZHRoKFRleHRSdW4oc3R5bGUuaHlwaGVuU3RyaW5nKCkpKSkgOiAwKQorICAg
ICwgaHlwaGVuU3RyaW5nV2lkdGgoc2hvdWxkSHlwaGVuYXRlID8gKHVzZVNpbXBsaWZpZWRUZXh0
TWVhc3VyaW5nID8gZm9udC53aWR0aEZvclNpbXBsZVRleHQoc3R5bGUuaHlwaGVuU3RyaW5nKCkp
IDogZm9udC53aWR0aChUZXh0UnVuKFN0cmluZyhzdHlsZS5oeXBoZW5TdHJpbmcoKSkpKSkgOiAw
KQogICAgICwgaHlwaGVuTGltaXRCZWZvcmUoc3R5bGUuaHlwaGVuYXRpb25MaW1pdEJlZm9yZSgp
IDwgMCA/IDIgOiBzdHlsZS5oeXBoZW5hdGlvbkxpbWl0QmVmb3JlKCkpCiAgICAgLCBoeXBoZW5M
aW1pdEFmdGVyKHN0eWxlLmh5cGhlbmF0aW9uTGltaXRBZnRlcigpIDwgMCA/IDIgOiBzdHlsZS5o
eXBoZW5hdGlvbkxpbWl0QWZ0ZXIoKSkKICAgICAsIGxvY2FsZShzdHlsZS5sb2NhbGUoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337508</attachid>
            <date>2018-04-09 10:54:30 -0700</date>
            <delta_ts>2018-04-09 16:02:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184182-20180409105430.patch</filename>
            <type>text/plain</type>
            <size>16462</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMDQ0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE4LTA0LTA5ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBJbmxp
bmVUZXh0Qm94OjpjcmVhdGVUZXh0UnVuKCkgdGFrZSBhIGNvbnN0IGx2YWx1ZSByZWZlcmVuY2Ug
U3RyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
ODQxODIKKworICAgICAgICBSZXZpZXdlZCBieSBaYWxhbiBCdWp0YXMuCisKKyAgICAgICAgSW5s
aW5lVGV4dEJveDo6Y3JlYXRlVGV4dFJ1bigpIHRha2VzIGEgbm9uLWNvbnN0IGx2YWx1ZSByZWZl
cmVuY2UgU3RyaW5nLgorICAgICAgICBJdCBpcyB0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHNpZ25h
dHVyZSBvZiB0aGlzIG1ldGhvZCB0byB0YWtlIGEgY29uc3QgbHZhbHVlIAorICAgICAgICByZWZl
cmVuY2UuIEJ1dCB0aGlzIHdhcyBkb25lIGludGVudGlvbmFsbHkuIFRleHRSdW4gaXMgZWZmZWN0
aXZlbHkgYSBTdHJpbmdWaWV3OgorICAgICAgICBpdCBkb2VzIG5vdCBvd24gdGhlIHBhc3NlZCBz
dHJpbmcuIEhhdmluZyB0aGUgYXJndW1lbnQgYSBub24tY29uc3QgbHZhbHVlCisgICAgICAgIHJl
ZmVyZW5jZSBtYWtlcyB0aGUgY29tcGlsZXIgcHJldmVudCBjYWxscyBsaWtlIGNyZWF0ZVRleHRS
dW4oImFiYyIpLgorCisgICAgICAgIFRvIGhhdmUgYSBiZXR0ZXIgd2F5IHRvIGV4cHJlc3MgdGhl
IGxpZmV0aW1lIG9mIFRleHRSdW4sIHRoaXMgcGF0Y2ggZG9lcworICAgICAgICB0aGUgZm9sbG93
aW5nOgorCisgICAgICAgIC0tIEl0IG1ha2VzIFRleHRSdW46Om1fdGV4dCBvZiB0eXBlIFN0cmlu
ZyBpbnN0ZWFkIG9mIFN0cmluZ1ZpZXcuCisgICAgICAgIC0tIEl0IGFkZHMgYSBuZXcgY29uc3Ry
dWN0b3Igd2hpY2ggdGFrZXMgY29uc3QgU3RyaW5nJi4gVGhpcyBjb25zdHJ1Y3RvcgorICAgICAg
ICAgICB3aWxsIGFkZFJlZiB0aGUgdW5kZXJseWluZyBTdHJpbmdJbXBsIHdoZW4gYXNzaWduaW5n
IGl0IHRvIG1fdGV4dC4KKyAgICAgICAgLS0gSXQga2VlcHMgdGhlIGNvbnN0cnVjdG9yIHdoaWNo
IHRha2VzIGEgU3RyaW5nVmlldy4gVGhlIGNhbGxlciBvZiB0aGlzCisgICAgICAgICAgIGNvbnN0
cnVjdG9yIHN0aWxsIGhhcyB0byBtYWtlIHN1cmUgdGhlIHVuZGVybHlpbmcgU3RyaW5nIG91dGxp
dmVzIHRoZQorICAgICAgICAgICBUZXh0UnVuLiBUbyBhdm9pZCBjb3B5aW5nIHRoZSB1bmRlcmx5
aW5nIGJ1ZmZlciBvZiB0aGUgU3RyaW5nVmlldywgd2UKKyAgICAgICAgICAgd2lsbCBub3QgdXNl
ICBTdHJpbmdWaWV3Ojp0b1N0cmluZygpLiBJbnN0ZWFkIHdlIHdpbGwgdXNlCisgICAgICAgICAg
IFN0cmluZ1ZpZXc6OnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSB3aGljaCBtYWtlcyB0aGUgcmV0
dXJuZWQgU3RyaW5nIAorICAgICAgICAgICBhY2Nlc3NlcyB0aGUgc2FtZSBidWZmZXIgdGhlIFN0
cmluZ1ZpZXcgdXNlcy4gSW4gdGhpcyBjYXNlLCB0aGUgcmV0dXJuZWQKKyAgICAgICAgICAgU3Ry
aW5nIGlzIGVmZmVjdGl2ZWx5IGEgU3RyaW5nVmlldy4KKworICAgICAgICAqIHBhZ2UvRGVidWdQ
YWdlT3ZlcmxheXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1JpZ2h0QWxpZ25lZFRleHQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OlRl
eHRSdW4pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6c3ViUnVuIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRSdW46Omxlbmd0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0UnVuOjpzZXRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OnN0cmluZyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZVRleHRCb3g6OnBhaW50UGxhdGZvcm1Eb2N1bWVudE1hcmtlcik6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRCYWNrZ3JvdW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dEZvcmVncm91bmQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRUZXh0RGVjb3Jh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlv
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9m
ZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpjcmVhdGVUZXh0
UnVuIGNvbnN0KToKKyAgICAgICAgVGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhpcyBmdW5jdGlvbiB0
byB0YWtlIGEgU3RyaW5nIGFyZ3VtZW50IGFueW1vcmUuIFRoZQorICAgICAgICByZWFzb24gZm9y
IHBhc3NpbmcgdGhlIFN0cmluZyB3YXMgdG8gZ3VhcmFudGVlIGl0cyBsaWZldGltZSBieSBrZWVw
aW5nCisgICAgICAgIGEgY29weSBvZiBpdCBpbiB0aGUgY2FsbGVyIHNpZGUuIE5vdyB0aGVyZSBp
cyBubyBuZWVkIGZvciB0aGF0LiBUaGUgVGV4dFJ1bgorICAgICAgICBpdHNlbGYgd2lsbCBrZWVw
IHRoaXMgY29weS4KKworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dDo6Y29tcHV0ZUNhblVzZVNpbXBsaWZpZWRUZXh0TWVhc3VyaW5nIGNvbnN0KToKKyAgICAg
ICAgUmVuZGVyVGV4dDo6dGV4dCgpIHJldHVybnMgU3RyaW5nSW1wbC4gVGhlIGNvbXBpbGVyIHdh
bnRzIHVzIHRvIGJlIG1vcmUKKyAgICAgICAgZXhwbGljaXQgYWJvdXQgd2hpY2ggY29uc3RydWN0
b3Igb2YgVGV4dFJ1biB0byBjYWxsLgorCisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9y
Rm9udEFuZFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZy
YWdtZW50SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6
VGV4dEZyYWdtZW50SXRlcmF0b3I6OlN0eWxlOjpTdHlsZSk6CisgICAgICAgIFJlbmRlclN0eWxl
OjpoeXBoZW5TdHJpbmcoKSByZXR1cm5zIGFuIEF0b21pY1N0cmluZy4KKwogMjAxOC0wNC0wOSAg
TWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIzMDM5MC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RGVidWdQYWdlT3ZlcmxheXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RGVidWdQYWdlT3ZlcmxheXMuY3BwCShyZXZpc2lvbiAyMzA0MzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2
OSw3IEBAIHN0YXRpYyB2b2lkIGRyYXdSaWdodEFsaWduZWRUZXh0KGNvbnN0IFMKICAgICBmbG9h
dCB0ZXh0R2FwID0gMTA7CiAgICAgZmxvYXQgdGV4dEJhc2VsaW5lRnJvbVRvcCA9IDE0OwogCi0g
ICAgVGV4dFJ1biB0ZXh0UnVuID0gVGV4dFJ1bihTdHJpbmdWaWV3KHRleHQpKTsKKyAgICBUZXh0
UnVuIHRleHRSdW4gPSBUZXh0UnVuKHRleHQpOwogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENv
bG9yOjp0cmFuc3BhcmVudCk7CiAgICAgZmxvYXQgdGV4dFdpZHRoID0gY29udGV4dC5kcmF3VGV4
dChmb250LCB0ZXh0UnVuLCB7IH0pOwogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpi
bGFjayk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVu
LmNwcAkocmV2aXNpb24gMjMwNDM5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvVGV4dFJ1bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RydWN0IEV4cGVjdGVkVGV4dFJ1blNpemUgewotICAgIFN0cmluZ1Zp
ZXcgdGV4dDsKKyAgICBTdHJpbmcgdGV4dDsKICAgICB1bnNpZ25lZCBpbnRlZ2VyMTsKICAgICBm
bG9hdCBmbG9hdDE7CiAgICAgZmxvYXQgZmxvYXQyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkocmV2aXNpb24gMjMwNDM5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcg
KzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00NCw3ICs0NCw3IEBAIHN0
cnVjdCBXaWR0aEl0ZXJhdG9yOwogY2xhc3MgVGV4dFJ1biB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGV4dFJ1bihTdHJpbmdWaWV3IHRleHQs
IGZsb2F0IHhwb3MgPSAwLCBmbG9hdCBleHBhbnNpb24gPSAwLCBFeHBhbnNpb25CZWhhdmlvciBl
eHBhbnNpb25CZWhhdmlvciA9IERlZmF1bHRFeHBhbnNpb24sIFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uID0gTFRSLCBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBmYWxzZSwgYm9vbCBjaGFyYWN0
ZXJTY2FuRm9yQ29kZVBhdGggPSB0cnVlKQorICAgIGV4cGxpY2l0IFRleHRSdW4oY29uc3QgU3Ry
aW5nJiB0ZXh0LCBmbG9hdCB4cG9zID0gMCwgZmxvYXQgZXhwYW5zaW9uID0gMCwgRXhwYW5zaW9u
QmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBEZWZhdWx0RXhwYW5zaW9uLCBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiA9IExUUiwgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlID0gZmFsc2UsIGJv
b2wgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoID0gdHJ1ZSkKICAgICAgICAgOiBtX3RleHQodGV4
dCkKICAgICAgICAgLCBtX3RhYlNpemUoMCkKICAgICAgICAgLCBtX3hwb3MoeHBvcykKQEAgLTU5
LDE3ICs1OSwyMSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIGV4cGxpY2l0IFRleHRS
dW4oU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBmbG9hdCB4cG9zID0gMCwgZmxvYXQgZXhwYW5zaW9u
ID0gMCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBEZWZhdWx0RXhwYW5z
aW9uLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUiwgYm9vbCBkaXJlY3Rpb25hbE92ZXJy
aWRlID0gZmFsc2UsIGJvb2wgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoID0gdHJ1ZSkKKyAgICAg
ICAgOiBUZXh0UnVuKHN0cmluZ1ZpZXcudG9TdHJpbmdXaXRob3V0Q29weWluZygpLCB4cG9zLCBl
eHBhbnNpb24sIGV4cGFuc2lvbkJlaGF2aW9yLCBkaXJlY3Rpb24sIGRpcmVjdGlvbmFsT3ZlcnJp
ZGUsIGNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCkKKyAgICB7CisgICAgfQorCiAgICAgVGV4dFJ1
biBzdWJSdW4odW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXJ0T2Zmc2V0
IDwgbV90ZXh0Lmxlbmd0aCgpKTsKIAotICAgICAgICBUZXh0UnVuIHJlc3VsdCA9ICp0aGlzOwor
ICAgICAgICBhdXRvIHJlc3VsdCB7ICp0aGlzIH07CiAKLSAgICAgICAgaWYgKGlzOEJpdCgpKSB7
CisgICAgICAgIGlmIChpczhCaXQoKSkKICAgICAgICAgICAgIHJlc3VsdC5zZXRUZXh0KGRhdGE4
KHN0YXJ0T2Zmc2V0KSwgbGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmVzdWx0LnNldFRleHQoZGF0YTE2KHN0YXJ0T2Zmc2V0KSwgbGVuZ3Ro
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0LnNldFRleHQoZGF0YTE2KHN0YXJ0
T2Zmc2V0KSwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTgy
LDExICs4NiwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGV4dC5pczhCaXQoKTsgfQogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGV4dC5sZW5ndGgoKTsgfQotICAgIFN0cmluZyBzdHJpbmcoKSBjb25zdCB7IHJldHVybiBt
X3RleHQudG9TdHJpbmcoKTsgfQogCi0gICAgdm9pZCBzZXRUZXh0KGNvbnN0IExDaGFyKiBjLCB1
bnNpZ25lZCBsZW4pIHsgbV90ZXh0ID0gU3RyaW5nVmlldyhjLCBsZW4pOyB9Ci0gICAgdm9pZCBz
ZXRUZXh0KGNvbnN0IFVDaGFyKiBjLCB1bnNpZ25lZCBsZW4pIHsgbV90ZXh0ID0gU3RyaW5nVmll
dyhjLCBsZW4pOyB9Ci0gICAgdm9pZCBzZXRUZXh0KFN0cmluZ1ZpZXcgc3RyaW5nVmlldykgeyBt
X3RleHQgPSBzdHJpbmdWaWV3OyB9CisgICAgdm9pZCBzZXRUZXh0KGNvbnN0IExDaGFyKiB0ZXh0
LCB1bnNpZ25lZCBsZW5ndGgpIHsgc2V0VGV4dCh7IHRleHQsIGxlbmd0aCB9KTsgfQorICAgIHZv
aWQgc2V0VGV4dChjb25zdCBVQ2hhciogdGV4dCwgdW5zaWduZWQgbGVuZ3RoKSB7IHNldFRleHQo
eyB0ZXh0LCBsZW5ndGggfSk7IH0KKyAgICB2b2lkIHNldFRleHQoU3RyaW5nVmlldyB0ZXh0KSB7
IG1fdGV4dCA9IHRleHQudG9TdHJpbmdXaXRob3V0Q29weWluZygpOyB9CiAKICAgICBmbG9hdCBo
b3Jpem9udGFsR2x5cGhTdHJldGNoKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsR2x5cGhT
dHJldGNoOyB9CiAgICAgdm9pZCBzZXRIb3Jpem9udGFsR2x5cGhTdHJldGNoKGZsb2F0IHNjYWxl
KSB7IG1faG9yaXpvbnRhbEdseXBoU3RyZXRjaCA9IHNjYWxlOyB9CkBAIC0xMTMsNyArMTE2LDcg
QEAgcHVibGljOgogICAgIFN0cmluZ1ZpZXcgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsg
fQogCiBwcml2YXRlOgotICAgIFN0cmluZ1ZpZXcgbV90ZXh0OworICAgIFN0cmluZyBtX3RleHQ7
CiAKICAgICB1bnNpZ25lZCBtX3RhYlNpemU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDIzMDQzOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDgg
KzIwMCw3IEBAIExheW91dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb24KICAgICBM
YXlvdXRVbml0IHNlbGVjdGlvblRvcCA9IHRoaXMtPnNlbGVjdGlvblRvcCgpOwogICAgIExheW91
dFVuaXQgc2VsZWN0aW9uSGVpZ2h0ID0gdGhpcy0+c2VsZWN0aW9uSGVpZ2h0KCk7CiAKLSAgICBh
dXRvIHRleHQgPSB0aGlzLT50ZXh0KCk7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4
dFJ1bih0ZXh0KTsKKyAgICBUZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVUZXh0UnVuKCk7CiAKICAg
ICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KExheW91dFBvaW50KGxvZ2lj
YWxMZWZ0KCksIHNlbGVjdGlvblRvcCksIExheW91dFNpemUobV9sb2dpY2FsV2lkdGgsIHNlbGVj
dGlvbkhlaWdodCkpOwogICAgIC8vIEF2b2lkIG1lYXN1cmluZyB0aGUgdGV4dCB3aGVuIHRoZSBl
bnRpcmUgbGluZSBib3ggaXMgc2VsZWN0ZWQgYXMgYW4gb3B0aW1pemF0aW9uLgpAQCAtNTcwLDgg
KzU2OSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAgICAv
LyBQYWludCBkZWNvcmF0aW9ucwogICAgIFRleHREZWNvcmF0aW9uIHRleHREZWNvcmF0aW9ucyA9
IGxpbmVTdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwogICAgIGlmICh0ZXh0RGVjb3Jh
dGlvbnMgIT0gVGV4dERlY29yYXRpb25Ob25lICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBo
YXNlU2VsZWN0aW9uKSB7Ci0gICAgICAgIGF1dG8gdGV4dCA9IHRoaXMtPnRleHQoKTsKLSAgICAg
ICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bih0ZXh0KTsKKyAgICAgICAgVGV4dFJ1
biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bigpOwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0
ZXh0UnVuLmxlbmd0aCgpOwogICAgICAgICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRp
b24pCiAgICAgICAgICAgICBsZW5ndGggPSBtX3RydW5jYXRpb247CkBAIC02NzYsOCArNjc0LDcg
QEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFBsYXRmb3JtRG9jdW1lbgogICAgICAgICBpbnQg
ZGVsdGFZID0gcmVuZGVyZXIoKS5zdHlsZSgpLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/
IHNlbGVjdGlvbkJvdHRvbSgpIC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNhbFRvcCgpIC0gc2Vs
ZWN0aW9uVG9wKCk7CiAgICAgICAgIGludCBzZWxIZWlnaHQgPSBzZWxlY3Rpb25IZWlnaHQoKTsK
ICAgICAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55
KCkgLSBkZWx0YVkpOwotICAgICAgICBhdXRvIHRleHQgPSB0aGlzLT50ZXh0KCk7Ci0gICAgICAg
IFRleHRSdW4gcnVuID0gY3JlYXRlVGV4dFJ1bih0ZXh0KTsKKyAgICAgICAgVGV4dFJ1biBydW4g
PSBjcmVhdGVUZXh0UnVuKCk7CiAKICAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0g
TGF5b3V0UmVjdChzdGFydFBvaW50LCBGbG9hdFNpemUoMCwgc2VsSGVpZ2h0KSk7CiAgICAgICAg
IGxpbmVGb250KCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBzZWxlY3Rpb25SZWN0
LCBtYXJrZWRUZXh0LnN0YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7CkBAIC05NzQs
OCArOTcxLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRCYWNrZwogCiAg
ICAgLy8gTm90ZSB0aGF0IGlmIHRoZSB0ZXh0IGlzIHRydW5jYXRlZCwgd2UgbGV0IHRoZSB0aGlu
ZyBiZWluZyBwYWludGVkIGluIHRoZSB0cnVuY2F0aW9uCiAgICAgLy8gZHJhdyBpdHMgb3duIGhp
Z2hsaWdodC4KLSAgICBhdXRvIHRleHQgPSB0aGlzLT50ZXh0KCk7Ci0gICAgVGV4dFJ1biB0ZXh0
UnVuID0gY3JlYXRlVGV4dFJ1bih0ZXh0KTsKKyAgICBUZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVU
ZXh0UnVuKCk7CiAKICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gcm9vdCgpOwog
ICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9tID0gcm9vdEJveC5zZWxlY3Rpb25Cb3R0b20o
KTsKQEAgLTEwMjIsOCArMTAxOCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRNYXJrZWRU
ZXh0Rm9yZWcKICAgICAgICAgY29udGV4dC5zZXRBbHBoYShtYXJrZWRUZXh0LnN0eWxlLmFscGhh
KTsKICAgICB9CiAgICAgLy8gVGV4dFBhaW50ZXIgd2FudHMgdGhlIGJveCByZWN0YW5nbGUgYW5k
IHRleHQgb3JpZ2luIG9mIHRoZSBlbnRpcmUgbGluZSBib3guCi0gICAgYXV0byB0ZXh0ID0gdGhp
cy0+dGV4dCgpOwotICAgIHRleHRQYWludGVyLnBhaW50UmFuZ2UoY3JlYXRlVGV4dFJ1bih0ZXh0
KSwgYm94UmVjdCwgdGV4dE9yaWdpbkZyb21Cb3hSZWN0KGJveFJlY3QpLCBtYXJrZWRUZXh0LnN0
YXJ0T2Zmc2V0LCBtYXJrZWRUZXh0LmVuZE9mZnNldCk7CisgICAgdGV4dFBhaW50ZXIucGFpbnRS
YW5nZShjcmVhdGVUZXh0UnVuKCksIGJveFJlY3QsIHRleHRPcmlnaW5Gcm9tQm94UmVjdChib3hS
ZWN0KSwgbWFya2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRPZmZzZXQpOwogfQog
CiB2b2lkIElubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dERlY29yYXRpb24oR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgY2xpcE91dFJlY3QsIGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIG1hcmtlZFRleHQpCkBAIC0x
MDQ1LDggKzEwNDAsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50TWFya2VkVGV4dERlY29y
CiAKICAgICAvLyBOb3RlIHRoYXQgaWYgdGhlIHRleHQgaXMgdHJ1bmNhdGVkLCB3ZSBsZXQgdGhl
IHRoaW5nIGJlaW5nIHBhaW50ZWQgaW4gdGhlIHRydW5jYXRpb24KICAgICAvLyBkcmF3IGl0cyBv
d24gZGVjb3JhdGlvbi4KLSAgICBhdXRvIHRleHQgPSB0aGlzLT50ZXh0KCk7Ci0gICAgVGV4dFJ1
biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bih0ZXh0KTsKKyAgICBUZXh0UnVuIHRleHRSdW4gPSBj
cmVhdGVUZXh0UnVuKCk7CiAKICAgICAvLyBBdm9pZCBtZWFzdXJpbmcgdGhlIHRleHQgd2hlbiB0
aGUgZW50aXJlIGxpbmUgYm94IGlzIHNlbGVjdGVkIGFzIGFuIG9wdGltaXphdGlvbi4KICAgICBG
bG9hdFJlY3Qgc25hcHBlZFNlbGVjdGlvblJlY3QgPSBib3hSZWN0OwpAQCAtMTE5MCw4ICsxMTg0
LDcgQEAgaW50IElubGluZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uKGZsbwogICAgICAgICBy
ZXR1cm4gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gMCA6IGxlbigpOwogICAgIGJvb2wgaWdu
b3JlQ29tYmluZWRUZXh0ID0gdHJ1ZTsKICAgICBib29sIGlnbm9yZUh5cGhlbiA9IHRydWU7Ci0g
ICAgYXV0byB0ZXh0ID0gdGhpcy0+dGV4dChpZ25vcmVDb21iaW5lZFRleHQsIGlnbm9yZUh5cGhl
bik7Ci0gICAgcmV0dXJuIGxpbmVGb250KCkub2Zmc2V0Rm9yUG9zaXRpb24oY3JlYXRlVGV4dFJ1
bih0ZXh0KSwgbGluZU9mZnNldCAtIGxvZ2ljYWxMZWZ0KCksIGluY2x1ZGVQYXJ0aWFsR2x5cGhz
KTsKKyAgICByZXR1cm4gbGluZUZvbnQoKS5vZmZzZXRGb3JQb3NpdGlvbihjcmVhdGVUZXh0UnVu
KGlnbm9yZUNvbWJpbmVkVGV4dCwgaWdub3JlSHlwaGVuKSwgbGluZU9mZnNldCAtIGxvZ2ljYWxM
ZWZ0KCksIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAogZmxvYXQgSW5saW5lVGV4dEJveDo6
cG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSBjb25zdApAQCAtMTIxNiwxNiArMTIw
OSwxNSBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldCh1CiAgICAgTGF5
b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdChsb2dpY2FsTGVmdCgpLCAwLCAwLCAw
KTsKICAgICBib29sIGlnbm9yZUNvbWJpbmVkVGV4dCA9IHRydWU7CiAgICAgYm9vbCBpZ25vcmVI
eXBoZW4gPSB0cnVlOwotICAgIGF1dG8gdGV4dCA9IHRoaXMtPnRleHQoaWdub3JlQ29tYmluZWRU
ZXh0LCBpZ25vcmVIeXBoZW4pOwotICAgIFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRSdW4o
dGV4dCk7CisgICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bihpZ25vcmVDb21iaW5l
ZFRleHQsIGlnbm9yZUh5cGhlbik7CiAgICAgbGluZUZvbnQoKS5hZGp1c3RTZWxlY3Rpb25SZWN0
Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsK
ICAgICByZXR1cm4gc25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0aW9uKHNl
bGVjdGlvblJlY3QsIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCB0
ZXh0UnVuLmx0cigpKS5tYXhYKCk7CiB9CiAKLVRleHRSdW4gSW5saW5lVGV4dEJveDo6Y3JlYXRl
VGV4dFJ1bihTdHJpbmcmIHN0cmluZykgY29uc3QKK1RleHRSdW4gSW5saW5lVGV4dEJveDo6Y3Jl
YXRlVGV4dFJ1bihib29sIGlnbm9yZUNvbWJpbmVkVGV4dCwgYm9vbCBpZ25vcmVIeXBoZW4pIGNv
bnN0CiB7CiAgICAgY29uc3QgYXV0byYgc3R5bGUgPSBsaW5lU3R5bGUoKTsKLSAgICBUZXh0UnVu
IHRleHRSdW4geyBzdHJpbmcsIHRleHRQb3MoKSwgZXhwYW5zaW9uKCksIGV4cGFuc2lvbkJlaGF2
aW9yKCksIGRpcmVjdGlvbigpLCBkaXJPdmVycmlkZSgpIHx8IHN0eWxlLnJ0bE9yZGVyaW5nKCkg
PT0gVmlzdWFsT3JkZXIsICFyZW5kZXJlcigpLmNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCgpIH07
CisgICAgVGV4dFJ1biB0ZXh0UnVuIHsgdGV4dChpZ25vcmVDb21iaW5lZFRleHQsIGlnbm9yZUh5
cGhlbiksIHRleHRQb3MoKSwgZXhwYW5zaW9uKCksIGV4cGFuc2lvbkJlaGF2aW9yKCksIGRpcmVj
dGlvbigpLCBkaXJPdmVycmlkZSgpIHx8IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3Jk
ZXIsICFyZW5kZXJlcigpLmNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCgpIH07CiAgICAgdGV4dFJ1
bi5zZXRUYWJTaXplKCFzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSwgc3R5bGUudGFiU2l6ZSgp
KTsKICAgICByZXR1cm4gdGV4dFJ1bjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guaAkocmV2aXNpb24gMjMwNDM5KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDcgKzE4NSw3IEBA
IHByaXZhdGU6CiAgICAgY29uc3QgRm9udENhc2NhZGUmIGxpbmVGb250KCkgY29uc3Q7CiAKICAg
ICBTdHJpbmcgdGV4dChib29sIGlnbm9yZUNvbWJpbmVkVGV4dCA9IGZhbHNlLCBib29sIGlnbm9y
ZUh5cGhlbiA9IGZhbHNlKSBjb25zdDsgLy8gVGhlIGVmZmVjdGl2ZSB0ZXh0IGZvciB0aGUgcnVu
LgotICAgIFRleHRSdW4gY3JlYXRlVGV4dFJ1bihTdHJpbmcmKSBjb25zdDsKKyAgICBUZXh0UnVu
IGNyZWF0ZVRleHRSdW4oYm9vbCBpZ25vcmVDb21iaW5lZFRleHQgPSBmYWxzZSwgYm9vbCBpZ25v
cmVIeXBoZW4gPSBmYWxzZSkgY29uc3Q7CiAKICAgICBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNp
b25CZWhhdmlvcigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuY3BwCShyZXZpc2lvbiAyMzA0MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNDMsNyArMTI0Myw3IEBAIGJvb2wg
UmVuZGVyVGV4dDo6Y29tcHV0ZUNhblVzZVNpbXBsaWZpZWQKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgLy8gQWRkaXRpb25hbCBjaGVjayBvbiB0aGUgZm9udCBjb2RlcGF0aC4KLSAgICBU
ZXh0UnVuIHJ1bih0ZXh0KCkpOworICAgIFRleHRSdW4gcnVuKG1fdGV4dCk7CiAgICAgcnVuLnNl
dENoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aChmYWxzZSk7CiAgICAgaWYgKGZvbnQuY29kZVBhdGgo
cnVuKSAhPSBGb250Q2FzY2FkZTo6U2ltcGxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCShyZXZp
c2lvbiAyMzA0MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMgQXZvaWRhbmNl
UmVhc29uRmxhZ3MgY2FuVXNlRm9yRm9uCiAgICAgICAgICAgICAvLyBObyBuZWVkIHRvIGNoZWNr
IHRoZSBjb2RlIHBhdGggYXQgdGhpcyBwb2ludC4gV2UgYWxyZWFkeSBrbm93IGl0IGNhbid0IGJl
IHNpbXBsZS4KICAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxv
d0hhc0NvbXBsZXhGb250Q29kZVBhdGgsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFRleHRSdW4gcnVuKHRleHRSZW5kZXJlci50ZXh0KCkp
OworICAgICAgICAgICAgVGV4dFJ1biBydW4oU3RyaW5nKHRleHRSZW5kZXJlci50ZXh0KCkpKTsK
ICAgICAgICAgICAgIHJ1bi5zZXRDaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGgoZmFsc2UpOwogICAg
ICAgICAgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkuY29kZVBhdGgocnVuKSAhPSBGb250Q2Fz
Y2FkZTo6U2ltcGxlKQogICAgICAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQoRmxvd0hhc0NvbXBsZXhGb250Q29kZVBhdGgsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25z
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZy
YWdtZW50SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMzA0
MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFn
bWVudEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBUZXh0RnJh
Z21lbnRJdGVyYXRvcjo6U3R5bGU6OlN0eWxlKGNvbnN0CiAgICAgLCB3b3JkU3BhY2luZyhmb250
LndvcmRTcGFjaW5nKCkpCiAgICAgLCB0YWJXaWR0aChjb2xsYXBzZVdoaXRlc3BhY2UgPyAwIDog
c3R5bGUudGFiU2l6ZSgpKQogICAgICwgc2hvdWxkSHlwaGVuYXRlKHN0eWxlLmh5cGhlbnMoKSA9
PSBIeXBoZW5zQXV0byAmJiBjYW5IeXBoZW5hdGUoc3R5bGUubG9jYWxlKCkpKQotICAgICwgaHlw
aGVuU3RyaW5nV2lkdGgoc2hvdWxkSHlwaGVuYXRlID8gKHVzZVNpbXBsaWZpZWRUZXh0TWVhc3Vy
aW5nID8gZm9udC53aWR0aEZvclNpbXBsZVRleHQoc3R5bGUuaHlwaGVuU3RyaW5nKCkpIDogZm9u
dC53aWR0aChUZXh0UnVuKHN0eWxlLmh5cGhlblN0cmluZygpKSkpIDogMCkKKyAgICAsIGh5cGhl
blN0cmluZ1dpZHRoKHNob3VsZEh5cGhlbmF0ZSA/ICh1c2VTaW1wbGlmaWVkVGV4dE1lYXN1cmlu
ZyA/IGZvbnQud2lkdGhGb3JTaW1wbGVUZXh0KHN0eWxlLmh5cGhlblN0cmluZygpKSA6IGZvbnQu
d2lkdGgoVGV4dFJ1bihTdHJpbmcoc3R5bGUuaHlwaGVuU3RyaW5nKCkpKSkpIDogMCkKICAgICAs
IGh5cGhlbkxpbWl0QmVmb3JlKHN0eWxlLmh5cGhlbmF0aW9uTGltaXRCZWZvcmUoKSA8IDAgPyAy
IDogc3R5bGUuaHlwaGVuYXRpb25MaW1pdEJlZm9yZSgpKQogICAgICwgaHlwaGVuTGltaXRBZnRl
cihzdHlsZS5oeXBoZW5hdGlvbkxpbWl0QWZ0ZXIoKSA8IDAgPyAyIDogc3R5bGUuaHlwaGVuYXRp
b25MaW1pdEFmdGVyKCkpCiAgICAgLCBsb2NhbGUoc3R5bGUubG9jYWxlKCkpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>